Cosas Interesantes para Ver

martes, 3 de noviembre de 2015

Code UI Automation con .NET - PkosTestEngine

En el proceso de desarrollo es muy normal tener que realizar tareas repetitivas tales como modificar sectores de la aplicación y tener que repetir varios pasos para llegar al punto de cambio.
Por otro lado los Ingenieros de Control de Calidad realizan tareas de pruebas muchas veces mecánicas pudiendo delegar las mismas a otros agentes, dicho de otra manera crear test automáticos.

Opciones

Existen muchas opciones para crear test automáticos:

  • Selenium
  • Test Complete
  • Page Factory de .NET

Code UI .NET

Esta última tecnología es la que conozco, pero me resultó mucho trabajo realizar un simple test. Es decir CodeUI requiere crear una clase por cada página con la que el Automation interactuará y además una clase por cada componente en la página. 

Mucho trabajo
La creación de test requiere mucho tiempo frente al desarrollo para los programadores.

PkosTestEngine

Es tu framework que desarrollé para agilizar el Automation, trabaja de forma excelente sobre Internet Explorer para aplicaciones ASP.NET especialmente y otras tecnologías como php, html regular, etc.

está basado de CodeUI de .NET y por esa razón brinda la riqueza del lenguaje C#

Como funciona?

Simple, primero se require clonar el proyecto 
git clone https://github.com/p-kos/PkosTestEngine.git
O puedes bajarte la dll compilada de:

https://dl.dropboxusercontent.com/u/32795617/PkosTestEngine.zip

Luego abre el proyecto y crea un nuevo CodeUI test heredando de la clase WebApp

Para comenzar tu Test necesitas "attachar" tu test a la página que necesites automatizar

LaunchApp("https://github.com");

Luego cada paso de test que necesites realizar se simplifica en una línea de código donde se hace referencia a un control en la página donde te encuentres:

FindControl( "#username" ).Text = "marco";

FindControls( ".boxLang" ).Where( b=> b.InnerText == "ok" ).FirstOrDefault( ).Click( );

Donde es FindControl es un generic que acepta HtmlControl y en los parámetros del método se require un selector para ubicar el componente

Selectores

Los selectores que se utilizan son:

  • #MyControl : control cuyo id es MyControl
  • .controlType: control cuya clase CSS es controlType
  • a[href='http://google.com'] : control de hipervículo (a) cuya referencia es http://google.com
Final

Una vez que se tiene el test escrito, solo se requiere ejecutarlo.

Este framework está escrito sobre Visual Studio 2010 Premiun, se requiere esta versión o Ultimate. Esto debido a que las versiones mencionadas tienen las librerías necesarias para CodeUI.






lunes, 31 de agosto de 2015

Video vigilancia en Raspberry PI, con NodeJS y AngularJS

Existen muchas alternativas para video vigilancia, a continuación una barata, configurable y extendible.

Picam

Es un proyecto personal sencillo que salir bastante interesante al terminarlo.

El Proyecto

Puede encontrarse en github

https://github.com/p-kos/picam

Para clonar:

git clone https://github.com/p-kos/picam.git

Instalación

Se debe instalar NodeJS, y motion en el Raspberry. Luego de tener NodeJS se requiere algunos paquetes que se podrán instalar corriendo

npm install

En el directorio donde se realizó el clon proyecto.

Configuración

En el archivo README.md se detallan los pasos para configurar motion

Ejecución

Para la ejecución de la video vigilancia se corre la aplicación motion

motion

Con Ctrl + C se puede parar el programa.

Para correr el Server se corre node en el directorio donde se clonó el proyecto

node app.js

Este comando ejecutará un webserver sobre el puerto 3705 y se podrá acceder por browser

Uso

Para mi uso personal yo instalé screen para poder dejar en ejecución cuando salga de casa
Para instalar screen solo corra

sudo apt-get screen

una vez instalado se ejecuta escribiendo screen en la línea de comando y luego con Ctrl + A + C crea una nueva pantalla, con Ctrl + A + N cambia de pantalla. De esa forma se puede ir sin tener que preocuparse de que se cancele cuando cierre su computadora desde donde ejecutó remotamente.




viernes, 2 de diciembre de 2011

Queries claros, consultas para toda la vida

Casi todos los programadores sabemos escribir una consulta SQL, de una u otra forma nos toca abrir el DBMS que usemos y comenzamos a escribir nuestra consulta para integrar a nuestros programas. Ahora la pregunta es, sabemos escribir un buen query? bueno depende mucho del conocimiento que se tenga respecto al lenguaje usado, pero un requisito muy importante dentro de un query es el orden, pues después de nosotros habrán mas personas que realizar algun tipo de mantenimiento a nuestro programa y obviamente también tendrán que mantener los queries escritos en el.

Después de unos años como SQLero, aprendi y adopté ciertas reglas para la escritura de queries que me gustaría compartir con el público en general. Las reglas explicadas a continuación serán ejemplos de TSQL pero obviamente pueden ser aplicadas a cualquier otro SQL lenguaje :)



  1. Palabras reservadas con MAYÚSCULA

    Esto ayuda bastante a distinguir las palabras reservadas de los nombres de campos, tablas, variables, etc.

    SELECT t1.Col1, t1.Col2, t2.Col3
    FROM Tabla1 t1
        INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
    WHERE t1.Vigente = 1 AND t1.Nombre = 'Test'


  2. Marca Inicio y Fin de cada Consulta o Query:

    En este caso es bueno tener una tabulación todas las lineas después de la sentencia la primera sentencia, de tal forma se siempre se sabe donde comienza y terminan los queries
    SELECT t1.Col1, t1.Col2, t2.Col3
    FROM Tabla1 t1
        INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
    WHERE t1.Vigente = 1 AND t1.Nombre = 'Test'

    INSERT INTO Tabla3(col1, col2, col3)
    VALUES (1, 2, 3)

    UPDATE Tabla2 SET Col2 = 5
    FROM Tabla1 t1
        INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
    WHERE t2.Valor > 5


    De esta forma es más claro donde comienza y termina una sentencia. Se puede usar la tabulación de preferencia, pues vi que algunas personas utilizan 2 espacios para tabulaciones y otras como yo utilizamos 4.

  3. Las líneas hijas de la sentencia deberían ir con una tabulación más que la padre.|

    SELECT t1.Col1, t1.Col2, t2.Col3
      , t2.Col4 , t2.Col6
    FROM Tabla1 t1
        INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
       AND t2.Fecha > '01/01/2010'
    WHERE zt1.Vigente = 1 AND t1.Nombre = 'Test'
       AND t1.Apellido = 'TestApellido'



    Esta claro que de este modo sentencias mas complejas aún se tornarán menos difíciles de leer. A mi me tocó revisar algún query con 32 JOINs y muchas subconsultas y de principio tuve que antes ordenar para poder después tratar de entender la lógica del mismo.

  4. Es mejor Vertical que Horizontal y con comas u operaciones lógicas al principio de cada linea.

    CREATE PROCEDURE MiProc1
    @Param1int
    , @Param2varchar(100)
    , @param3bit
    AS
    SELECT t1.Col1
    , t1.Col2
    , t2.Col3
    FROM Tabla1 t1
         INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
        AND t2.Fecha > '01/01/2010'
    WHERE t1.Vigente = @Param3
    AND t1.Nombre = @Param2
    AND t2.Id = @Param1


    La razón es muy sencilla, de esta forma es fácil comentar una línea y correr el query, comentar otra línea y correr el query sin tener que preocuparnos que si comentamos una líneas debemos agregar o quitar la coma de la línea anterior, o la operación lógica

  5. Todos los JOINs una nueva línea, con el ON a lado. Nuevos creterios una línea abajo (AND/OR)

    SELECT t1.Col1
    , t1.Col2
    , t2.Col3
    , ISNULL(t3.CargoNombre, '--Sin Cargo--')
    FROM Tabla1 t1
          INNER JOIN Tabla2 t2 ON t1.Id = t2.Tabla1Id
    AND t2.Fecha > '01/01/2010'
    LEFT JOIN Tabla3 t3 ON t2.IdCargo = t3.Id
    AND t2.TipoCargo = 3
    WHERE t1.Vigente = 1 AND t1.Nombre = 'Test'


  6. Declaraciones de variables con tabulaciones.

    CREATE PROCEDURE MiProc
    @Param1int
    @param2varchar(100)
    @ParamMuyLargo3bit
    AS
    DECLARE
    @var1bigint
    , @var2DateTime
    ,@varMuyMuyLarga3varchar(200)



    como se ve es mejor tener todos los tipos de alineados aunque haya parámetros o variables con nombres muy largos.


Es todo cuando se me ocurre en este momento.... ya lo iré actualizando con nuevas buenas costumbres SQLeras :)

Hasta una próxima...

lunes, 21 de noviembre de 2011

Tweet desde cualquier parte en iOS 5 de forma nativa

Para gente que le gusta twitter este tweak de Cydia nos permite silbar un tweet desde cualquier parte en nuestro iDevice.
Este es mi primer post escrito desde mi iDevice, veamos como me sale. Esta es una característica genial del Activator y son tener que instalar ninguna otra app además.
Lo primero que tenemos que hacer es instalar el Activator desde Cydia, lo pueden encontran en la repo de BigBoss. Esto es posible siempre y cuando el dispositivo este jailbreak.
Una vez instalado el tweek Activator nos vamos a la configuración del mismo y buscamos la opción Anywhere > Status bar > Swepe left
En realidad pueden escoger en la opción que deseen, yo escogí Anywhere pues así desde cualquier sitio pudor realizar un Tweet, además escogí Swepe Left en Status Bar por su facilidad de uso y no se mezcla con otras configuraciones que tengo.
Finalmente escogemos la app que deseamos agregar al gesto y escogemos Compose Tweet que viene como parte del System Actions, es decir de forma nativa en iOS 5
Una vez terminado a disfrutarle, deslicen su dedo en el Status Bar de Izquierda a derecha y tendrán una ventana de twitter lista para silbar.
Gracias nos vemos en el próximo post

jueves, 10 de junio de 2010

Integracion

Recientemente estuve navegando un par de paginas respecto a sync, pues con la cantidad inmensa de paginas sociales, dispositivos, servidores mail cada vez es mayor la cantidad dispersa que tienes de contacto, por ejemplo
Tengo contactos en Facebook, Google Buzz, LinkedIn, Twitter, Ovi, thunderbird (contactos de trabajo)
Dispositivos moviles: celular N95 8Gb
correo:Ovi, Gmail, correo coporativo del trabajo
Calendario: GCal, lightning, outlook

Las companias al darnos cada vez mas lugares donde publicar nuestra informacion nos complican mas por tener que mantener cada vez mas lugares la informacion que requerimos.

Encontre una blog (http://www.koushikdutta.com/2008/10/synchronizing-google-and-facebook.html) donde se publico un codigo para sincronizar facebook con Google... personalmente me parece genial pues es un buen comienzo para personalizar nuestras cuentas, exisetn infidad de apps que sincronizan "todo" con "todo" pero al tener el codigo de ejemplo de uno podemos escribir nuestros propios sincronizadores y porque luego liberalos para que el resto (que no sea desarrollador) tenga cada vez mas opciones. Lo probe y compile y este funcionando bien.

En mi caso particular quiero tener una sola lista de contactos disponible en Facebook mi Celular y Google, con la misma informacion y si se puede agregar Twttier mas, genial....

En una siguiente publicacion dare mas noticias sobre como va la applicacion, por el momento invito a mis amigos desarrolladores ver el codigo del blog que mencione, cuanto tenga yo algo tangible tb lo publicare.

Sorry por la falta de acentos... y bueno a mis amigos "no" desarrolladores ya publicare la app para que la usen y me den el feedback...

Saludos

P-KoS

Tuitealo ;)

FB Comentarios