Autordracuxc1

CherryAS parte II

Todo tiene que comenzar en algún momento.

Sigamos con lo que vimos en nuestro post anterior sobre crear nuestro hermoso framework de automation y veamos cómo seguir (no tengo ni idea cuantos artículos va a llevar esto, pero si ven que pasamos los 100 no se asusten, esto es una pieza de software bastante compleja como iremos viendo).

Lo primero que vamos a ver es cómo navegar a una URL y si vamos a la documentación de W3C Driver vamos a ver que para navegar tenemos este post:

/session/{session id}/url

Como dijimos, es un post, y solo debemos enviarle en el body la URL:

{"url": "https://elsitiodondeir.com"}

Pero antes de empezar, ¿De donde sale ese session id? ¿Recuerdan cuando hicimos el post donde creamos la sesión? Bien, ese Post se lo igualamos a la variable response, y si hacemos un print de esa variable vamos a obtener un json y si ven el primer parámetro van a ver que es sessionId, por lo que ahora podríamos hacer:

print(json.loads(response.text)['sessionId'])

Lo cual nos va a devolver nuestro session id, que podemos usar para nuestros requests.

Entonces con eso podemos ahora si ir a visitar el sitio que queramos. Para simplificar podemos hacer algo como esto:

session_id = json.loads(response.text)['sessionId']

Y ya lo tenemos para lo que queramos, y en estas primeras lineas de código solo queremos navegar a un sitio.

requests.request('POST', host+'session/'+session_id+'/url', data=json.dumps({"url":'http://www.dracux.com'}).encode('utf8'))

Y al ejecutar… MAGIA!!!! Ya navega al sitio. Y con esto ya tenemos nuestras primeras lineas de código con los cuales empezar a jugar.

CherryAS Parte I

Comenzando una librería de automation desde cero.

Algo que quiero hacer desde hace mucho tiempo es poder armar un librería que pueda usar en lugar de Selenium. Hay muchas librerías, muchos frameworks creados (casi una invasión diría) y la verdad es que quería no reinventar la rueda pero ver si podía hacer algo que sea un buen producto, sólido, basado en Webdriver.

¿Y por qué escribir todo esto? básicamente porque mi idea es poder programarlo mientras explico que hacer, cómo, que más allá de que todo sea open source quede super documentad, explicado, enseñado (de hecho mi idea es aprender MUCHO con todo esto) y que veamos cómo es el proceso de creación de software (al menos en un equipo de UNA persona). Queda planteado así el desafío.

Y por donde comenzamos esto? Por la documentación de webdriver, donde podemos obtener toda la información de los endpoints a los cuales llamar para hacer la base del asunto. Entonces que mejor para comenzar que leyendo esta hermosa documentación de algunas cientos de páginas.

Básicamente nuestro programa tiene que pegarle a la API del webdriver, con eso voy a tener gran parte de esta historia ganada.

Lo primero que necesito para jugar con mi webDriver es crear una sesión, ya que todo lo que haga luego requiere del id de esa sesión. Y obviamente debo pasarle ‘capabilities’ (recuerden que ustedes al crear el objeto de tipo webdriver en Selenium lo hacen).

import requests
import json
import subprocess

subprocess.Popen('chromedriver.exe --port=9000')
host = 'http://127.0.0.1/9000/'
capabilities={
  'desiredCapabilities':{
    'browserName':'chrome',
    'chromeoptions':{
      'binary': 'C:\\Program Files (x86)\\Google 
      Chrome\\Application\\chrome.exe'
    },
    'platform':'ANY'
  }
}
response = requests.request('POST', host+'session', data=json.dumps(capabilities).encode('utf8'))
process.terminate()

Y qué es todo este código? Vamos por lineas y comencemos por los imports.

El primero es requests, librería que va a ser la más utilizada por el simple hecho de que todo va a a ser hacer requests a mi webdriver. El segundo json, es necesario porque obviamente si voy a trabajar con requests, voy a tener que manejarme con json. El tercer import subprocess es quizá el que muchos no conocen, la idea de usar subprocesos tiene que ver con el hecho de que si yo ejecuto algo que queda vivo sin devolverme el control del programa, no voy a poder seguir ejecutando, lo cual sucede si yo ejecuto el webdriver (chromedriver en este caso) que queda vivo mientras nada lo mate.

Entonces ahora que tengo con qué trabajar, la primer linea va a ser ejecutar el webdriver en un puerto (se me ocurrió 9000 pero eso obviamente tiene que ser algo modificable por el usuario) en un subroproceso.

Luego vienen las capabilities y supongo que ese json es algo en lo que voy a tener que trabajar por mucho tiempo, por ahora, como solo quiero ver que todo funcione, voy a darle un par de cositas para tener que postear, solo le vamos a decir que usa Chrome y le vamos a decir adonde está.

Por último, solo debemos ejecutar el post que nos va a crear nuestro id de sesión, posteando a nuestro localhost/session y pasandole las capabilities. Una vez ejecutado esto, matamos el subproceso del chromedriver para finalizar.

Esto va a ser muy largo de hacer, meter nuevos videos y explicar por escrito, pero me parece un buen desafío, poder al menos explicarme que estoy haciendo por escrito, es como querer convencerme a mi, a mi blog y al público de que el código está bien.

Nos vemos la próxima para más!

Tutorial de QBasic Capítulo I: Introducción

Primer post práctico sobre programación y una serie de videos que puede ser útil para varias cosas:

  • Gente que en su vida programó y quiere ir por la forma en la que aprendíamos hace 20 años o más.
  • Gente que es nostálgica (Un amigo, GRAN programador me dijo que mi superpoder es la nostalgia) y quiere hacer algo retro.
  • Gente que ama hacer cosas «bizarras» (aunque quizá no sea el mejor término, sino curiosos por hacer cosas que no sean mainstream).

Para qué NO vamos a usar QBasic? Para hacer cosas profesionales. En serio, es un gran lenguaje para aprender y para jugar, pero nadie hace cosas profesionales con QBasic (y no me vengan con que su tio Edelmiro hizo un programita que sirvió en una fábrica para etiquetar paquetes hace 20 años).

Cabe decir que este video tiene 7 años y algunas cosas como el blog que no existe más o el sitio de descarga que es distinto y todo eso pasaron.

Bien, cómo vamos a arrancar esto? Primero descargando QB64 del sitio oficial y descargando la versión que queramos dependiendo del SO (hasta tienen el sourcode si quieren.

Una vez que lo descargaron solo tienen que descomprimirlo y UALA! Ya tienen todo andando y ya pueden comenzar. Entonces comencemos con los nuestro. Obviamente lo primero que vamos a hacer en nuestro camino a ser los masters de cualquier lenguaje es el famoso «Hola Mundo» y es TAN sencillo como esto:

Print "Hola Mundo"

Guardamos el archivo, ejecutamos con F5 y listo!

Pero vayamos un paso más y hagamos que muestre por pantalla aquello que nosotros queremos. Para eso vamos a ingresar un texto y vamos a guardarlo en memoria por medio de una variable. Para esto vamos a usar la instrucción input guardando lo que ingresemos en una variable. Luego, vamos a mostrar por pantalla eso que ingresamos recuperando el valor de la variable, veamoslo en código:

INPUT "Ingrese su nombre: ", nombre$
PRINT nombre$

En la primer linea usamos el input, lo primero que le pasamos es un texto descriptivo que se va a mostrar por pantalla de lo que queremos ingresar (pongan lo que quieran) y le pasamos un segundo parámetro que es la variable (en este caso nombre). Como esta variable queremos que sea de tipo string (una cadena de caracteres) debemos ponerle el signo $ al final.

Ejecutemos, y con eso obtenemos:

Hagamos un último esfuerzo por este post. Yo no quiero que simplemente muestre mi nombre sino que me muestre «Tu nombre es XXXXX» (Donde XXXXX es el texto ingresado). Para eso podemos concatenar el texto usando el signo + de la siguiente manera:

print "Tu nombre es "+nombre$

Y obtenemos esto:

Ahora si, puedo dar por inaugurado realmente el blog.

print(‘Hello World’)

Obviamente todo blog de un programador tiene que comenzar con un Hello World, así que ahí va el título.

Para los que no me conocen, soy Pablo, me dicen por ahí Draculinio y me dedico a esto de andar empujando el cursor desde hace muchísimos años.

Tengo mi canal de youtube donde hablo mucho sobre programación, automatización de pruebas y cosas que tienen que ver con el mundillo de sistemas al cual les recomiendo entrar y chusmear.

Y entonces de que voy a hablar en este blog? Bueno, hace mucho quiero tener un lugar donde poder expresar cosas, muchas veces temas que salen de los videos que hago donde quiero darle un soporte escrito, muchas veces voy a hablar de otras cosas (para eso me hice mi espacio no?). Pero básicamente voy a estar hablando de programación, vamos a divertirnos con el código, no siempre hacer las cosas más útiles del mundo pero explorar posibilidades, extenderme en lo que hago en los videos y muchas cosas más.

Espero disfruten de este espacio y espero obvio todos sus comentarios!

Juniors gratis?

Hace poco tiempo, me había llegado por gente cercana (mucha gente cercana no la conozco personalmente, lo que ha cambiado el mundo gracias a las redes sociales) una historia realmente lamentable sobre una posición de trabajo para juniors donde le ofrecían al candidato una verdadera bicoca, entrar al trabajo dejando de cobrar el primer mes para «tener la experiencia de trabajar con un equipo».

Realmente no pude creer lo miserables que pueden ser algunas personas dueñas de empresas para hacer este tipo de ofertas. Muchos me dirán «bueno, es para hacer experiencia y un mes no es mucho, en otros rubros es peor». Es cierto que en otros rubros es mucho peor y eso pasa de manera potenciada, pero en sistemas eso es algo que no puede aplicar y aceptar esta práctica como algo posible es muy peligroso. Dejenme explicarles por donde pasa la miseria de quién ofrece esto.

Una gran parte de las empresas argentinas de sistemas son simples «software factories», lugares donde le «alquilan» personal a empresas para ser parte de un proyecto o para encargarse de los mismos. Las empresas suelen cobrar un valor hora por persona que ponen en cada proyecto (no siempre es así pero es la práctica común) y es obvio que ese mes a la persona que contraten no le van a pagar por trabajar sin embargo si le van a cobrar esas horas al cliente.

¿Esa ratoneada tiene sentido? Poco si tenemos en cuenta que el sueldo que se le paga a un junior en Argentina es poco dinero y en pesos, cuando el cliente suele pagar más del doble en dólares. Entonces la pregunta es: ¿Cuánto le ganó el empleador en la ganancia mensual de la empresa el hecho de no haberle pagado ese mes? Poco dinero. Quizá sume mucho más si esto es una práctica habitual, pero igual no es algo que corresponda bajo ningún motivo. De hecho habría que ver si esto es legal.

Quizá (y no lo justifico POR NADA DEL MUNDO) esto puede pasar en consultoras chicas, que recién arrancan, pero, obviamente este mundo de sistemas es chico y me contaron el nombre de una empresa que hace esto y no es una empresa chica (no voy a decir el nombre de la empresa porque por más confianza que tenga en que la información es verídica no tengo ninguna prueba) y ese gasto que no quieren hacer es realmente ínfimo contra la facturación.

Creo profundamente y espero que el tiempo me de la razón que cada empresa se va haciendo una fama, buena o mala y que en este pequeño mundo todo se termina sabiendo y que esas famas van a premiar o castigar.

© 2020 Dracux

Tema por Anders NorénSubir ↑