Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

lunes, 8 de diciembre de 2014

python 101 para desarrolladores

Coruña Developers (@CorunaDev) es una iniciativa que acaba de surgir en A Coruña y que, en resumidas cuentas, pretende ser un punto de encuentro para desarrolladores. Un lugar donde poder conversar, debatir y sobretodo aprender de otros desarrolladores con más experiencia en otras áreas.

El viernes pasado tuve la oportunidad de inaugurar las charlas con "Python 101 para desarrolladores". La charla es una introducción a Python, pasando por alto cosas básicas, haciendo hincapié, sobretodo, en las diferencias, ventajas y desventajas que presenta Python respecto a otros lenguajes de programación. Dejando para el final ciertas anotaciones que consideré necesarias, aunque no pude profundizar en ellas por la extensión de los temas a los que hacen referencia.

Desde aquí quiero volver a aprovechar para agradecerles a los chicos de Coruña Developers la oportunidad y la experiencia (también el trato recibido), y a los asistentes el interés y la curiosidad demostrada. La verdad es que para mi ha sido una experiencia muy positiva, y espero que resultase productiva para los asistentes.

Aunque sé que para los no asistentes las diapositivas y los ejemplos pueden resultar escuetos, por consenso con la organización y los asistentes, he decidido colgar el material utilizado (diapositivas y ejemplos de código). Mientras se crean los servicios que servirán de puntos comunes para alojar todo el material que vaya generando el proyecto Coruña Developers, he subido las diapositivas y los ejemplos utilizados a mi cuenta en github.

Para los no asistentes, esta documentación podrá resultar escueta por encontrarse fuera de contexto. Ya que simplemente se trata de material de apoyo (notas breves y ejemplos simples) para la charla. Material que sirve para dotar de estructura, consistencia y un hilo argumentativo la narración. Un material que, por su formato, deja fuera ciertos temas y matices y comentados durante la charla. De todas formas, puede que aún así resulte de interés.

Personalmente, y después de hablar con los organizadores sobre las ideas que tienen, creo que es una iniciativa muy interesante. Estoy seguro de que estaré en futuras ocasiones, en principio como asistente, pero quien sabe! Quizás en un futuro tenga la oportunidad de repetir como ponente ;)

Podéis seguir las actividades de Coruña Developers en su página de facebook: https://www.facebook.com/groups/CorunaDevelopers y/o en su twitter: @CorunaDev

Nos veremos en futuras ediciones!

Python 101 para desarrolladores (Material)

domingo, 14 de septiembre de 2014

integrar pydev y github en eclipse

Cuanto más programas, más indispensables se vuelven los sistemas de control de versiones. Aunque ya he hablado de alguno ellos en este blog anteriormente, hoy voy a explicar cómo integrar eclipse + PyDev + GitHub. Para programar en python como un pro ;)

Requisitos previos

  1. Instalar PyDev (rama Main)

    Requisitos:

    • Java 7
    • Python >= 2.1 o Jython >= 2.1 o IronPython >= 2.6
    • Eclipse >= 3.8

    Abrimos Eclipse y vamos al menú: Help > Install New Software...

    En la siguiente pantalla, pulsamos Add y añadimos la dirección de las actualizaciones de la rama main de PyDev: http://pydev.org/updates. Como nombre le pondremos "PyDev".

    Marcamos PyDev y desmarcamos la opción "Contact all update sites during install to find required software".

    Pulsamos Next. Leemos y aceptamos la licencia y pulsamos Finish.

  2. Instalar EGit y GitHub Mylyn Connector

    • Volvemos al menú Help > Install New Software... de Eclipse
    • Introducimos la dirección de las actualizaciones de nuestra versión de Eclipse (en mi caso "3.8 Juno" -> http://download.eclipse.org/releases/juno/).
    • Filtramos los resultados por "git" y seleccionamos: EGit, JGit y Mylyn Github
    • Pulsar Next y finalizar la instalación.
  3. Manejando los repositorios de GitHub

    • Crear el repositorio en la web de github
    • Importar el repositorio en Eclipse

      Aunque hay muchos tutoriales disponibles para hacer esto, en ellos recomiendan crear los archivos directamente en Eclipse, hacer un commit y un push en el repostorio local de Git y asociar el repositorio local de Git con el repositorio remoto en GitHub. Pero eso crea una carpeta con el nombre que tiene el proyecto en Eclipse dentro del repositorio en GitHub. Cosa que no me gusta nada. Por eso, esta parte la voy a hacer "a mi manera", cambiando el modo, y evitando así tener esa carpeta en el repositorio de GitHub.

      • En el área de proyectos pulsar botón derecho, "Import"
      • Seleccionar Git/Projects from Git y pulsar Next
      • Seleccionar "URL"
      • Introducir la URL del repositorio en GitHub (los campos Host y Repository path se autocompletan. Introducir el usuario y la contraseña y marcar la opción "Store in Secure Store".
        Pulsar "Next", "Next", "Next" hasta llegar a la pantalla para seleccionar el asistente para importar proyectos.
      • Importar el proyecto como proyecto general (general project)
        Pulsar "Next" y "Finish"

      Ahora ya tendremos nuestro proyecto de GitHub importado en Eclipse

      • Añadir los archivos al proyecto
      • Hacer el primer commit

        Botón derecho sobre el proyecto > Team > Commit.

        *Hasta que no hagamos un commit, los archivos del proyecto mostrarán un pequeño interrogante.

      • Introducir el primer comentario. Seleccionar los archivos que queremos incluír en el commit y que queremos sincronizar con el repositorio en GitHub y pulsar "Commit" o "Commit and Push" (si los queremos subir ya).
      • Si no hemos hecho el push (o para futuros pushs)

        • Seleccionamos el proyecto, botón derecho > Team > Push to Upstream

          Y ya tendremos los cambios locales sincronizados con nuestro repositorio en GitHub

  4. Activando PyDev

    En estos momentos, notaremos que no nos funcionan las comprobaciones de PyDev.

    Para solucionarlo:

    • Seleccionar el proyecto > botón derecho > PyDev > Set as Source Folder (add to PYTHONPATH)
      No os preocupéis, enseguida lo borramos de ahí ;)
    • Seleccionar el proyecto > botón derecho > PyDev > Code analysis
    • Quitar el proyecto de PYTHONPATH

      Como ya está funcionando PyDev, si no lo necesitamos explícitamente, eliminamos el proyecto del PYTHONPATH.

Y ya está. Ya tendremos todo listo. La verdad es que parece un proceso tedioso, pero en cuanto se hace una o dos veces, uno se da cuenta de que no son más que un par de clicks aquí y allí ;)

Enjoy!

Fuentes:

sábado, 26 de abril de 2014

creando repositorios locales en git

Cuando desarrollamos código habitualmente, aunque no sea en equipo, una de las herramientas más útiles de las que disponemos es un sistema de control de versiones. Estas herramientas nos permiten controlar diferentes aspectos sobre nuestros proyectos: cambios, versiones, revisiones...

Aunque existen gran cantidad de sistemas de control de versiones, hoy en día uno de los más populares es git.


Cuando utlizamos una de estas herramientas, lo más habitual es subir y bajar el código del proyecto desde un servidor remoto, ya sea desde el espacio "en la nube" que nos ofrecen algunos servicios o desde otro equipo en el que se centralizan los desarrollos. Aunque el modelo cliente-servidor es la idea principal en la que se basan estos sistemas, en muchas ocasiones tendremos proyectos que no queramos añadir al servidor, o no dispondremos de un servidor o de una conexion a internet. En estos casos, para no perder la versatilidad que nos ofrecen los sistemas de control de versiones sobre el desarrollo, es muy útil disponer de un repositorio en la máquina local con el que poder trabajar.

Para crear un repositorio de git remoto en nuestra máquina ("en local"), primero deberemos crear un directorio que albergará todos los proyectos que queramos controlar: $ mkdir /ruta/.gitLocal *Yo lo dejo oculto para no verlo cada vez que entro en mi directorio de desarrollo

Después deberemos crear un repositorio para cada proyecto e inicializarlo: $ mkdir /ruta/.gitLocal/nombre_proyecto.git
$ cd /ruta/.gitLocal/nombre_proyecto.git
$ git init --bare --shared

Una vez creado e inicializado el repositorio remoto del proyecto, debemos ir al repositorio de trabajo del proyecto (es el directorio donde está el código -si ya existe alguno- o donde iremos desarrollando el proyecto) e inicializarlo $ cd /ruta_desarrollo/nombre_proyecto/
$ git init

En el caso de que ya exista código, deberemos añadir los ficheros y su primer commit: $ git add . *Con "." añadiremos todos los ficheros en el directorio actual.
*Si queremos ignorar ciertos archivos (por ejemplo ficheros de salida), tendremos que crear el fichero .gitignore y poner dentro que ficheros/directorios queremos ignorar. $ git commit -m "primer commit ;)"

Por último, deberemos "subir" los archivos del proyecto a nuestro repositorio remoto (en local): $ git remote add origin /ruta/.gitLocal/nombre_proyecto.git
$ git push origin master

Una vez que tenemos todo listo para empezar a trabajar con nuestro repositorio remoto en local, podemos comprobar que todo funciona correctamente yendo a un directorio cualquiera (por ejemplo /tmp) y clonando uno de los repositorios de nuestros proyectos: $ git clone /ruta/.gitLocal/nombre_proyecto.git

Enjoy!

martes, 29 de octubre de 2013

algunos códigos python útiles para CTFs

Cifrados por sustitución simple monoalfabético

El cifrado por sustitución es un método en el que unidades de texto plano son sustituidas con texto cifrado siguiendo un sistema regular. En el caso del sistema cifrado de sustitución simple, la unidad de texto plano es una letra. Es decir, un caracter del texto original es sustituido por otro del alfabeto de texto cifrado. Los ejemplos más caracteristicos de este sistema de cifrado son los cifrados César, ROT13 o Dvorak. El objetivo aquí es deducir de qué sistema se trata y la transposición de caráctes, es decir, qué caracteres se corresponden entre el texto plano y el alfabeto de cifrado. Una vez averiguado, podemos automatizar la traducción con la función maketrans del módulo string:


text = 'bpql bp rk bgbjmil ab zfcoxal zbpxo, rkl ab ilp jbqlalp jxp zlklzfalp ab zfcoxal mlo prpqfqrzflk pfjmib jlklxicxybqfzl'
trans = string.maketrans('xyzabcdefghijklmnopqrstuvw', 'abcdefghijklmnopqrstuvwxyz')
print text.translate(trans)


Cadenas escritas al revés

Si estamos vagos, o no queremos leer hacia el sentido contrario al habitual, podemos obtener el resultado utilizando el tercer argumento de las extended slices de python:

>>> 'sever la atircse anedac'[::-1]
'cadena escrita al reves'


Fuerza bruta

A veces nos es últil tener un array que se autorellene con combinaciones para solucionar alguna prueba que requiera de fuerza bruta (bruteforce o bruteforcing). Para ello dejo en mi github un código de demostración de cómo programar esto en python: bruteforceBytearray. Yo he programado un ejemplo con un bytearray, y he dejado una función para imprimir por pantalla cómo se va rellenando el array. Es un ejemplo y siempre se puede adaptar a las necesidades personales ;)

Enjoy!

Fuentes:

domingo, 8 de septiembre de 2013

obteniendo los metadatos de ficheros pdf en python



En vista a todas las fugas de información que se están dando últimamente (y a que he tenido un poco de tiempo libre), me he decidido a programar un script en python para poder obtener de forma rápida y cómoda, en primera instancia, los metadatos de ficheros pdf.


Aunque algunas personas son capaces de analizar el contenido del fichero en sí, esto puede convertirse en árdua y tediosa tarea si el contenido pertenece a un ámbito fuera de nuestro alcance, o si se trata de una cantidad ingente de información. Sin embargo, los metadatos son datos relativos al archivo. Aunque los metadatos no se encuentran necesariamente presentes en todos los ficheros, de encontrase podríamos averiguar información interesante desde el punto de vista forense, por ejemplo el autor del archivo, las fechas de creación y/o modificación, el programa con el que se ha creado, la correlación entre el nombre y el título, etc.

El uso del script es sencillo:

$ python pdfMetadata.py -h
Muestra la ayuda

$ python pdfMetadata foo.pdf /foo/bar bar.pdf
Analiza los metadatos de los argumentos introducidos a través de la línea de comandos. Los argumentos pueden ser archivos pdf o directorios, y se pueden mezclar. Si el argumento es un directorio, lo escanea recursivamente analizando los pdfs contenidos en él.

$ python pdfMetadata foo.pdf /foo/bar bar.pdf --log foo.txt
Registra la salida a un fichero en texto plano.

$ python pdfMetadata foo.pdf /foo/bar bar.pdf --log bar.csv
Registra la salida a un fichero en formato CSV.

*Las opciones --log y --csv se pueden combinar

El script lo he subido a mi [recién estrenado] github: https://github.com/rubenhortas/pdfMetadata, por si queréis probarlo, ver el código fuente, contribuir o crear vuestro propio fork.

domingo, 17 de marzo de 2013

aprender python

Por si el título deja lugar a dudas, estoy aprendiendo python.
Cuando nos toca aprender un lenguaje nuevo, siempre buscamos información que nos oriente y nos facilite el proceso, desde google hasta preguntar a nuestros amigos/conocidos que sepan un poco del tema. Así que, aquí voy a dejar algo de material disponible sobre las opciones por las que me he decantado, por si quieres aprender python:


IDE

Eclipse + PyDev: Cómo instalar PyDev: http://pydev.org/manual_101_install.html

Documentación

  • Documentación oficial de Python: [ HTML / PDF / TXT ] Un indispensable en los marcadores. Es la gran fuente de refencia para conocer librerias, clases y métodos oficiales. Desde lo nuevo que se va añadiendo a python hasta saber qué está obsoleto y cual es su reemplazo.

    http://docs.python.org
  • De 0 a python (hackXcrack): [ PDF 18 páginas ] Si ya sabes programar en algún lenguaje, deberías empezar por aquí. Un gran resumen de los conceptos básicos de python.

    http://www.hackxcrack.es/cuadernos/python/Hack_x_Crack_de0aPython.pdf
  • Guía de aprendizaje de Python (Guido van Rossum): [ HTML / PDF 77 páginas ] Introducción a lo que será programar en ptyhon. Trata conceptos desde manejar el intérprete hasta las clases, pasando por el control de excepciones.

    http://pyspanishdoc.sourceforge.net/tut/tut.html http://sourceforge.net/projects/pyspanishdoc
  • Learn Python The Hard Way: [ HTML / PDF + VIDEO (29$) ] Una manera interactiva de aprender python. Aunque describe de forma teórica conceptos fundamentales, el método que se sigue es, básicamente, un método de aprendizaje basado en la pŕactica.

    http://learnpythonthehardway.org/
  • Python para todos (Raúl González Duque - MundoGeek): [ PDF 160 páginas ] Bastante teórico, pero con ejemplos que amenizan el aprendizaje. Este libro abarca todas las fases del desarrollo de un programa, desde "¿Qué es python?" hasta el empaquetado para su distribución.

    http://mundogeek.net/tutorial-python/
  • wxPython + wxGlade: [HTML] Para diseñar y programar GUIs (interfaces gráficas). Me he decantado por wxPython, porque da un look nativo a las aplicaciones en todas las plataformas, y por wxGlade porque es muy sencillo de utilizar.

    http://www.wxpython.org/
    http://wiki.wxpython.org/WxGladeTutorial

Juegos (vía @ivmora)

  • Project Euler - http://projecteuler.net
    Resolver una serie de desafíos matemáticos mediante programación. No es exclusivo para python, pero es una buena forma de aprender nuevos conceptos.
  • Python Challenge - http://www.pythonchallenge.com
    Un "wargame" de programación. Hay que ir resolver un nivel para acceder al superior. Es muy entretenido.