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:

martes, 26 de agosto de 2014

iceweasel, tor y dns leaks

Para los que no conozcáis iceweasel, he de decir que es un fork totalmente libre de firefox, y el navegador predeterminado de Debian. De cualquier forma, es mi navegador habitual.

Todo empezó el pasado domingo, cuando me decidía a bajarme el último capítulo de una de esas series extranjeras que sigo y que aquí ni se estrenaron, ni se estrenan, ni se las espera. La página no estaba disponible. Como no tenía la IP de la página, comprobé su estado a través del servicio: downforeveryoneorjustme.com.

Era solo yo. Entonces me di cuenta de que mi ISP había decidido volver a bloquear ciertas páginas de descargas. Páginas de esas que tan poco les gusta a unos y que tan útiles nos resultan a otros.

Esto me enfadó bastante. Por una parte, por qué están bloqueadas otra vez? Hay una sentencia judicial reciente que les obliga a levantar el bloqueo. Por otra parte, qué anduve haciendo con mis DNS y por qué me dejé puestas las que usa el ISP y no las OpenDNS? (Seguro que ya no eran horas...) En ese momento pensé que tal y como están las cosas (gracias a un buen puñado de ministros inútiles) sería mejor bajar el torrent a través de TOR (siempre cifrando el tráfico del cliente de descargas, claro). Pero... Tampoco resolvía!

WTF? AYFKM??? DNS LEAKS?!?!?!

Cambio las DNS y me dispongo a comprobar si hay fugas con wireshark. Efectivamente, unas fugas de DNS tan grandes que no sabía si tendría que pagarles el IBI. D'OH!!!.

Inmediatamente se me vino a la cabeza una mala configuración de firefox/bug que provocaba estas fugas (allá por el 2012...), y fui directo al about:config a comprobarlo, por si era heredada.

Después de cambiar la variable network.websocket.enabled y ponerla a false, me vuelvo a wireshark, a ver que tal están las cosas ahora y... Sigo con fugas! D'OH!!! (2).

Pero ya que estamos aquí, y por aquello de no dar dos viajes, vamos a rebuscar un poco en las opciones relacionadas con las DNS...

network.proxy.socks_remote_dns = false? Vamos a ponerla a true... A ver qué dice ahora wireshark...

Efectivamente, era eso. Y yo dejando mi rastro de miguitas de DNS por TOR :'(

Gran lección aprendida: Antes de salir de casa hay que hacer siempre los deberes.

Así que ya sabéis, cuidado con esas fugas!

*Nota: Algunas extensiones pueden revelar nuestra IP aún mientras estamos utilizando TOR o i2p. Haced los deberes!

*Nota 2: Los enlaces están apuntando a meneame.net y wikipedia intencionadamente. No pienso enlazar a ningún medio de AEDE.

Enjoy! ;)

martes, 22 de julio de 2014

configurar tp-link TL-WN725N v2 con wpa2 y dhcp en una raspberry pi con raspbian


Raspberry Pi es un ordenador de tamaño reducido (aproximadamente del tamaño de una tarjeta de crédito). Su consumo de 2.5W (modelo A) o 3.5W (modelo B) y sus características hacen de él un aparato muy versátil.


Cuando compré la raspberry, también compré el adaptador nano usb wifi TP-LINK TL-WN725N, con el objetivo de poder conectar la raspberry a una red inalámbrica cuando fuese necesario.

Actualmente, hay dos versiones de este adaptador: La v1 y la v2. Mientras que la v1 funciona directamente, para conseguir que funcione la v2 hay que instalar el driver. Para conectarnos con la raspberry pi a una red con DHCP protegida con WPA2-PSK utizando el adaptador nano usb wifi TP-LINK TL-WN725N bajo raspbian hay que realizar los siguientes pasos:

  1. Descargar e instalar el driver
    1. Averiguar la versión del kernel de raspbian

      Para concer la versión del kernel que está utilizando raspbian ejecutamos el comando:

      $ uname -r

    2. Descargar el driver

      La lista más completa de drivers la he encontrado en el blog de mendrugox, en la entrada: TP-LINK TL-WN725N v2 working on Raspberry Pi (Raspbian), donde se encuentran una lista con el driver para cada kernel y las instrucciones de instalación.

    3. Descomprimir el archivo

      Las últimas versiones del driver continen un fichero de módulo de kernel linux (.ko) y un fichero de firmware (.bin).

    4. Instalar el fichero de módulo de kernel linux

      # mv fichero.ko /lib/modules/version_del_kernel/kernel/drivers/net/wireless

    5. Instalar el fichero de firmware

      # mv fichero.bin /lib/firmware/rtlwifi/

    6. Añadir el módulo al kernel

      # depmod -a # modprobe 8188eu

      *Si al instalar el driver aparece el mensaje "Exec format error" es que la versión del driver no es la correcta para el kernel.

    7. Configurar la carga automática del módulo

      Editar el fichero /etc/modules (como root) y añadir la línea: 8188eu

    8. Reiniciar la raspberry

      # sudo reboot

  2. Configurar la red wifi
    1. Añadir la configuración al fichero /etc/network/interfaces

      Editar el fichero /etc/network/interfaces (como root) y añadir las siguientes líneas:

      allow-hotplug wlan0
      iface wlan0 inet manual
      wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
      iface default inet dhcp

      Consultar la información sobre la red

      # iwlist scan

      Este punto es muy importante. Con este comando se podemos consultar toda la información sobre una red wifi al alcance, por si tenemos alguna duda. Los puntos más importantes son los que nos ofrecen información sobre el tipo de cifrado utilizado:

      Group Cipher
      Pairwise Ciphers
      Authentication Suites

    2. Generar la clave WPA-PSK

      Vamos a generar una clave cifrada, para no dejar la clave de la red en plano en el fichero de configuración.

      # wpa_passphrase essid passphrase

      Anotamos la línea: psk=...

    3. Configurar wpa_supplicant

      Editar el fichero de configuración /etc/wpa_supplicant/wpa_supplicant.conf (O el que hayamos indicado en /etc/networking/interfaces) y añadir las siguientes líneas:

      network={
      ssid= nuestro_essid
      scan_ssid=1
      psk=clave_wpa_psk_generada_antes
      proto=RSN
      key_mgmt=WPA-PSK
      pairwise=CCMP TKIP
      group=CCMP TKIP
      }

      *En este apartado es dónde cobran importancia los datos sobre el cifrado de la red que hemos apuntado antes. Las configuraciones varían dependiendo del tipo de cifrado utilizado. Se puede encontrar más información en el man de wpa_supplicant

    4. Levantar la interfaz de red

      # ifup interfaz_de_red

Notas:

El driver USB utiliza memoria del kernel, y cuando el tráfico es muy alto, esta memoria se agota y causa cuelgues. Para solucionarlo hay dos alternativas:

  1. Adelantar la solicitud de memoria de página

    Para esto hay que editar el fichero /etc/sysctl.conf y modificar el valor de la línea

    vm.min_free_kbytes = 8192

    para dejarla:

    vm.min_free_kbytes = 16384

  2. Limitar el ancho de banda

    Esta opción es la menos apetecible. Pero cuando no hay otra alternativa... Podemos limitar cómodamente el ancho de banda de una tarjeta de red podemos utilizar wondershaper.

    # wondershaper wlan0 kbps_bajada kbps_subida

Enjoy!

Fuentes

sábado, 12 de julio de 2014

monitor dual en xfce4

En ocasiones, a algunos nos resulta útil y cómodo conectar un monitor externo a nuestro portátil. Para otros es la configuración habitual.

Los que utilizamos XFCE4 como entorno de escritorio, nos encontramos con un problema al conectar un monitor externo a nuestro portátil: Para XFCE4 el monitor principal siempre es el que se encuentra a la izquierda. Lo cual puede llegar a ser incómodo si queremos que nuestro monitor principal sea el de la derecha, como es mi caso.

Cuando conecto un monitor externo al portátil, utilizo la pantalla del portátil como monitor principal y el externo como secundario, para lo que surja. Mi idea es: Poder trabajar cómodamente en mi portátil, y, aprovechando que el monitor externo es más grande, poder utilizarlo para colocar en él el navegador, pdfs, vídeos...

Actualmente, mi monitor externo se encuentra situado a la izquierda de mi portátil. El problema es que, al tomar XFCE4 el monitor izquierdo como el principal, tenía que atravesar con el ratón los dos monitores para acceder a los paneles.

Una solución sería configurar el monitor externo como si se encontrase situado a la derecha del portátil. Pero es antiintiutivo, y he de decir, que para mi, demasiado incómodo. La idea de mover las aplicaciones y el ratón hacia la derecha para que aparezcan en el monitor de la izquierda, es algo que no me gusta. Prefiero mover las cosas que quiero visualizar en el monitor de la izquierda hacia la izquierda. Lógico, no? Para conseguir esto, basta con configurar un par de cosas, xrandr y los paneles de xfce:

  • xrandr
    xrandr --output VGA1 --auto --left-of LVDS1 *Siendo LVDS1 el monitor del portátil y VGA1 el monitor externo. *Este comando se pude guardar en un script para ejecutarlo cuando convenga o al inicio, si es la configuración habitual
  • Los paneles de XFCE y elegir la opción
    Ir a Menú>Configuración>Panel y elegir la opción: "Salida: LVDS1"

Enjoy!

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!