Últimas entradas

Cuenta regresiva para el Hackathon Express 2013 en Corrientes

Cuenta regresiva para el Hackathon Express 2013 en Corrientes
El evento es gratuito y se realizará este sábado 6 de julio, desde las 9 hasta las 21 horas, en la Facultad de Ciencias Exactas, Naturales y Agrimensura de la Universidad Nacional del Nordeste, ubicada en calle 9 de Julio 1449.
Durante la jornada los desarrolladores de software competirán todo el día programando en equipo. Simultáneamente se realizarán charlas con temáticas TIC para todo el público presente.
Si querés inscribirte o conocer detalles de la organización, visitá la web oficial
http://hackathonexpress.com.ar/

Hackathon Express

El evento es gratuito y se realizará este sábado 6 de julio, desde las 9 hasta las 21 horas, en la Facultad de Ciencias Exactas, Naturales y Agrimensura de la Universidad Nacional del Nordeste, ubicada en calle 9 de Julio 1449.

Durante la jornada los desarrolladores de software competirán todo el día programando en equipo. Simultáneamente se realizarán charlas con temáticas TIC para el público presente.

Si querés inscribirte o conocer detalles de la organización, visitá la web oficial.

Nuevas Cosas en Rails 4.0 (cosas grosas)

A partir de la nueva versión de Rails se han introducido mejoras en Activerecord. No serán mejoras estructurales ni muy profundas pero suman:

Ahora se puede hacer Ralation.where sin argumentos con “not”, “like” y “not_like”.

ejemplos:

  Model.where.not field: nil
  #=> "SELECT * FROM models WHERE field IS NOT NULL

  Model.where.like name: 'Jeremy%'
  #=> "SELECT * FROM models WHERE name LIKE 'Jeremy%'

Que vaya el crédito para el sensei Akira Matsuda dueño de la contribución.

Cómo ver las diferencias entre dos archivos de distintos branches en git

Cuando estás codeando en un feature branch, es común querer ver los cambios con respecto al archivo original. Entonces es momento de hacer un diff con el branch master:

git diff master HEAD -- path/to/file

O, simplemente:

git diff master -- path/to/file

Podríamos también ver las diferencias con algún otro branch del repo:

git diff feature/old_branch -- path/to/file

Archivos transfórmense y Avancen!

Transformers!
Desde el inicio de los tiempos una de las formas más comunes de comunicación entre sistemas desarrollados en diferentes plataformas es, y seguirá siendo por un buen tiempo, mediante archivos tipo texto. Cuando esto ocurre entre sistemas Unix/Linux/Windows suele ser un dolor de cabeza el sentarse horas para lograr un perfecto diseño de interfaces de archivos para que encima no funcione por problemas de encoding; y si el tiempo transcurre y no se soluciona por que no econtramos el encoding apropiado (utf8,iso,ebcdic) es momento de pasar a la agresión del escritorio, teclado o lo que esté al alcance.

En mi caso luego de haber roto varias cosas, por suerte se hizo la luz y encontré el comando en linux: fromdos

El mismo se encuentra disponible en los repositorios, y para instalarlo no hay que hacer más que:

#sudo apt-get install fromdos

Luego para hacer la transformación a un formato compatible con windows de un archivo  que fue generado en un entorno Linux/Unix, hacemos lo siguiente:

#fromdos -b -u mi_archivo_unix.txt

Lo que hace la opción -b es hacer un backup del archivo con la extensión .bak y con la opción -u el archivo original pasará a ser del tipo : ASCII text, with CRLF line terminators. Esto último lo podemos verificar con el comando file.

Bueno, espero les resulte útil y sirva para preservar la vida de teclados y otros elementos.

ack herramienta indispensable para el baticinturón del programador

Uno de mis principales problemas como programador es mi falta de memoria para recordar la sintaxis de grep ó find, herramientas que utilizo todos los días pero que no llego a aprovechar del todo porque hacer man grep me consume tiempo.

Según su autor Ack es una herramienta como grep, optimizada para programadores.

Pero vamos a hacer algunas pruebas para ver si es cierto. Primero buscaremos la palabra ‘def’ dentro del código fuente de Ruby on Rails. Para eso clonamos el repo desde Github.

git clone git://github.com/rails/rails.git
grep -rni 'def ' rails
8.74s user 0.06s system 99% cpu 8.819 total

Y ahora su equivalente en Ack:

ack-grep 'def ' rails
4.88s user 0.42s system 99% cpu 5.321 total

Como podemos observar la diferencia de velocidad es notoria. ¿Qué pasa si queremos buscar solamente dentro de los archivos ruby?

find rails -type f -name '*.rb' | xargs -n 1 grep -ni 'def '
1.21s user 0.65s system 32% cpu 5.671 total

Ja! Claro. Como si me fuera a acordar de todo eso. Ahora la versión en Ack:

ack-grep --ruby 'def ' rails
4.73s user 0.38s system 99% cpu 5.133 total

Si bien ack tiene predeterminados varios tipos de archivos es posible personalizar estos tipos de cada grupo.

Tomando como ejemplo los archivos –html por defecto busca en archivos con extensión .html y .htm y si programamos en Ruby podríamos extenderlo a los archivos .haml, .html.erb, .erb, etc. agregando las opciones en el archivo de configuración .ackrc.

--type-add=html=.haml,.html.erb,.html.haml,.erb

En conclusión, ack nos hace la vida más fácil y se destaca en los siguientes puntos:

Su instalación en Ubuntu es más que sencilla:

sudo apt-get install ack-grep

Acá podemos obtener más información sobre como instalar en otros sistemas operativos.

También les dejo mi archivo de configuración para que puedan usarlo y adaptarlo a sus necesidades.

PostgreSQL 9.2 – Rendimiento, Escalabilidad y Flexibilidad.

10 de septiembre de 2012: El Grupo Global de Desarrollo de PostgreSQL anuncia PostgreSQL 9.2, la última versión del líder en bases de datos de código abierto. Desde el anuncio del beta en mayo, los comercializadores y desarrolladores lo han elogiado como un salto adelante en el rendimiento, la escalabilidad y la flexibilidad. Se esperan cifras récord de usuarios que migrarán a esta versión.

“PostgreSQL 9.2 se libera con soporte nativo para JSON, índices de cobertura, mejoras de replicación y de desempeño, y muchas otras características. Esperamos esta versión con ansias y la pondremos a disposición de Early Access en cuanto salga al mercado desde la comunidad PostgreSQL” dice Ines Sombra, Lead Data Engineer, Engine Yard.

Rendimiento y escalabilidad mejorados

Las mejoras en la escalabilidad vertical de PostgreSQL mejoran la utilización eficiente de los recursos de hardware en servidores más potentes. Los avances en gestión de bloqueos, eficiencia en escritura, acceso de sólo índices y en otras operaciones de bajo nivel permiten que PostgreSQL pueda manejar cargas de trabajo de volumen aún mayor. En números, esto significa:

Hasta 350.000 consultas de lectura por segundo (más de 4 veces más rápido)
Consultas en almacenes de datos con acceso sólo de índices (2-20 veces más rápido)
Hasta 14.000 escrituras de datos por segundo (5 veces más rápido)
Hasta un 30% de reducción de consumo de energía por la CPU

Además, la adición de replicación en cascada permite a los usuarios procesar lotes más grandes mediante servidores escalados horizontalmente bajo PostgreSQL 9.2.

NewsBlur, un lector social de noticias, utiliza Postgres para el almacenamiento de millones de sitios web y suscripciones. Sólido y confiable durante años” dice Samuel Clay, fundador de NewsBlur.com. “Nos mantenemos constantemente a la vanguardia (actualmente con 9.1 y migrando a 9.2 sólo por la replicación en cascada) y todo ha sido satisfactorio desde 8.4

Soporte flexible para desarrolladores

La flexibilidad de PostgreSQL se refleja en la diversidad de las organizaciones que lo han adoptado. Por ejemplo, la NASA, la FAA, Chicago Mercantile Exchange e Instagram confían en él para realizar aplicaciones de misión crítica. La versión 9.2 amplía aún más esta flexibilidad mediante la inclusión de soporte para tipos de intervalo y JSON, lo que permite a los desarrolladores usar PostgreSQL de maneras completamente nuevas.

Los tipos de intervalo (range types) permite a los desarrolladores crear mejores aplicaciones de agendamiento, científicas y financieras. Ningún otro motor SQL implementa esta característica, la cual permite una gestión inteligente de intervalos de tiempo y números.

Con PostgreSQL 9.2, el resultado de una consulta se puede devolver en forma de datos JSON. Combinado con las nuevas extensiones de programación PL/V8 para Javascript y PL/Coffee, y el almacén de llave-valor HStore opcional, los usuarios ahora pueden utilizar PostgreSQL como base de datos de documentos “NoSQL” manteniendo a la vez la fiabilidad, flexibilidad y rendimiento de PostgreSQL.

“El soporte nativo para JSON en PostgreSQL proporciona un mecanismo eficaz para la creación y el almacenamiento de documentos para APIs web. Utilizamos bibliotecas front-end como jQuery para solicitar datos en estructuras tabulares y de árbol; esta nueva característica hace conveniente la extracción de dichos datos en formato JSON, proveyendo ventajas de rendimiento” dice Taras Mitran, Arquitecto Senior, IVC Inc.

Acerca de PostgreSQL: PostgreSQL es líder entre los gestores de bases de datos de código abierto, y cuenta con una comunidad global de miles de contribuyentes y usuarios, y docenas de compañías y organizaciones. El Proyecto PostgreSQL tiene más de 20 años de ingeniería, desde sus inicios en la Universidad de Berkeley, California, con un ritmo de desarrollo actual sin precedentes. El conjunto de funcionalidades de PostgreSQL no sólo es comparable a los mejores sistemas gestores de datos privativos, sino que las superan en características avanzadas, extensibilidad, seguridad y estabilidad. Obtenga más información sobre PostgreSQL y participe en nuestra comunidad en PostgreSQL.org.
Ref: http://www.postgresql.org/about/press/presskit92/es/#features

Dropbox desde el #Bash

Dropbox

Me vi en la necesidad de realizar backups desde una máquina virtual remota y como paso importante de todo backup es necesario copiarlo en otro lugar lejos y sincronizado. Como el backup no era de un tamaño significativo (menor a los 10MB ), se me ocurrió tenerlo siempre disponible y con alertas automáticas con Dropbox.

La máquina virtual solamente consta de un acceso ssh asi que la forma de instalar Dropbox desde el prompt es la siguiente:

Para 32-bit:

# cd ~ && wget -O – “http://www.dropbox.com/download?plat=lnx.x86″ | tar xzf -

Para 64-bit:

# cd ~ && wget -O – “http://www.dropbox.com/download?plat=lnx.x86_64″ | tar xzf -

Una vez finalizada esta parte de la instalación ejecutamos el demonio de Dropbox:

# ~/.dropbox-dist/dropboxd

Si lo anterior es ejecutado en un servidor por primera vez, te pedirá que copies y pegues un enlace en un navegador compatible para crear una nueva cuenta o añadir tu servidor a una cuenta existente. Una vez pegado ese enlace en nuestro navegador y confirmada la cuenta, automáticamente el comando anterior que quedó en espera responderá : “Bienvenido a Dropbox!” y creará la carpeta ~/Dropbox. Para finalizar sólo dale Ctrl+C.

En este punto ya tenemos nuestra carpeta Dropbox y nuestra cuenta activa, ahora debemos controlarlo mediante el siguiente comando que se debe descargar de: https://www.dropbox.com/download?dl=packages/dropbox.py

Una vez que tenemos dropbox.py con los permisos correspondientes para ejecución, manipulamos nuestra sincronización como más nos guste; por ejemplo:

Si para cualquier operación siempre debe estar prendido el demonio, lo hacemos de la siguiente manera:

# sudo ./dropbox.py start

Para saber el estado del demonio hacemos:

# sudo ./dropbox.py status

En particular me pareció una solución ideal para backups de host remotos que alojan alguna aplicación y su respectiva base de datos de tamaño moderado en caso de estar usando la cuenta gratuita.

Espero les sirva y un +1000 para Dropbox y su entorno preparado para Linux.

Lo nuevo de Ubuntu 12.04 LTS – Precise Pangolin

Pangolin
Para los fans de Ubuntu llego el momento mas esperado: el lanzamiento oficial de Ubuntu 12.04 LTS. Entre sus características más importantes encontramos:
- Soporte hasta 5 años
- Kernel 3.2.
- Consolidación de la shell Unity. Se puede configurar los aspectos más demandados del lanzador, panel superior y gestor de ventanas Metacity, desde el plugin “Unity” del CCSM (compizconfig-settings-manager). La novedad más notable es la inclusión de Heads Up Display (HUD), que aparece en la pantalla al apretar la tecla alt. El nuevo menú está basado en las búsquedas y se aleja del sistema tradicional.
- Interfaz de usuario: Las novedades por el momento son el poder modificar el tamaño de los íconos del lanzador y su comportamiento (ocultamiento del lanzador y foco de despliegue).
- LightDM. Unity-greeter 0.2: El fondo de la pantalla de logeo (LightDM) cambiará automáticamente según seleccionemos un usuario u otro.
- Centro de Software: En Precise alfa se ha notado una mejoría en el tiempo de apertura y está previsto que arranque aún más rápido.

A bajarlo se ha dicho desde: Sitio oficial de Ubuntu

Mi pequeño paso por python: RSS, HTML, Jquery

Hace no menos de un mes terminé un proyecto que consistía en mostrar noticias de diarios argentinos de manera offline. Para ser implementado en muy poco espacio de disco, por lo que utilizar algun framework sería un poco pesado.
El sistema ya se encontraba implementado con mod-python, la idea era seguir trabajando con eso y crear los scripts correspondientes en python.
Desde un principio la idea era que un script traiga los feeds de noticias cada cierto tiempo (utilizando tareas cron) y generar un html el cual se podía ver de forma offline.
Para ello en python existe una librería llamada feedparser, que nos trae en forma de diccionario todo lo que el servicio nos da.

import feedparser
import urllib2 #lo utilizamos mas adelante
import re #lo utilizamos mas adelante
parse = feedparser.parse(url_de_rss)

Si tenemos conexión a internet, esas líneas nos deberían bajar el feed completo que nos ofrece la página con la que queremos trabajar. Solo queda sacar lo que nos importa, en este caso el título, la noticia y las fotos si las hubiera. Como trabajamos offline no tendrín que haber links de ningun tipo

noticias = '
<ol>\n'
for i in range(0,10):
    titulo = parse.entries[i].title
    resumen =  re.sub('(()?)|(()?)|((
 
)?)', '',parse.entries[i].summary_detail.value)
    try:
        img_url = urllib2.urlopen(parse.entries[i].enclosures[0].href).read()
        f = open("images/imagen_%s.jpg"%i,"w")
        f.write(img_url)
        imagen = '<img src="images/imagen_%s.jpg" alt="" />'%i
    except:
        imagen = ''
    noticias += '
	<li>%s
%s
%s</li>
\n'%(titulo,resumen,imagen)
 
noticias += '</ol>
'
archivo_noticias = open("templates/_noticias.html","w")
archivo_noticias.write(noticias)

En la línea 1 simplemente inicializamos la variable que luego pondremos en el html correspondiente, vamos a utilizar una lista ordenada.
En la línea 2 empezamos nuestro bucle diciendo que sólo vamos a querer 10 noticias. Con un simple for podemos hacerlo, debido a que vamos a trabajar con la clave entries del diccionario, esta clave contiene un array, donde cada elemento es otro diccionario con sus propias claves. Las que vamos a utilizar en esta ocasión son:
title: Trae el título de la noticia.
summary_detail: Es donde está el resúmen de la noticia, este tiene como valor otro diccionario, de donde utilizaremos la clave value, donde está el resúmen propiamente dicho.
enclosures: es donde se guardan los adjuntos de la noticia, en este caso nos interesan las imágenes, pero como trabajamos offlines tenemos que descargarlas para ello utilizamos urllib2 asi la guardamos en nuestro sistema de archivos. A modo de ejemplo puse que la imagen tenga como nombre el indice de la noticia. Si sólo trabajamos con un diario no sería inconveniente, para más de un diario puede haber problemas porque los archivos se sobreescribirían y no se mostrariacutean las correctas. Esta parte pongo dentro de un try, porque no siempre traen imágenes y el parse nos tira una excepción, en caso de que pase cargamos la variable con nada, sino creamos el tag html de imágenes.
En la línea 3 creamos una variable donde se guarda el título de nuestra noticia
En la línea 4 guardamos el resúmen en una variable, puede parecer un poco complejo el código, pero es bastante fácil. Utilizamos la librería re para poder trabajar con expreciones regulares y con el método sub eliminamos del string las cosas que no queremos. A mi no me interesaba ningún
link:

 (()?)

imágen:

(()?)

tabla:

((
 
)?

que haya en el resúmen, entonces cuando encuentre algo de eso que simplemente lo reemplace por nada.
Finalmente cerramos nuestra lista fuera del for y tendríamos un resultado parecido a este:

<ol>
	<li>Titulo1
Resumen1
<img src="images/imagen_1.jpg" alt="" /></li>
	<li>Titulo2
Resumen2
<img src="images/imagen_2.jpg" alt="" /></li>
	<li>Titulo3
Resumen3
<img src="images/imagen_3.jpg" alt="" /></li>
	<li>Titulo4
Resumen4
<img src="images/imagen_4.jpg" alt="" /></li>
	<li>Titulo5
Resumen5
<img src="images/imagen_5.jpg" alt="" /></li>
	<li>Titulo6
Resumen6
<img src="images/imagen_6.jpg" alt="" /></li>
	<li>Titulo7
Resumen7</li>
	<li>Titulo8
Resumen8
<img src="images/imagen_8.jpg" alt="" /></li>
	<li>Titulo9
Resumen9</li>
	<li>Titulo10
Resumen10</li>
</ol>

Para poder guardarlo en el archivo _noticias.html
Ya tenemos toda una lista de noticias lista para ser leída offline, sólo queda cargarlo en nuestro index y problema resulto, para eso podemos hacer uso de jquery (se puede hacer directamente con javascript, pero una página web tiene bastante código javascript hoy en día y jquery es un framework muy copadito
para escribir poco :) ).

En el index.html tendríamos:

 
<script type="text/javascript"><!--mce:0--></script>

Este fue mi pequeño paso por python, la verdad una experiencia muy linda, es un muy buen lenguaje. En realidad si querés hacer un script de manera muy rápida es una buena opción.
Les dejo los links de feedparser y mod-python
Feedparser: http://code.google.com/p/feedparser/
Mod-Python: http://www.modpython.org/
Bueno espero que les haya gustado y hasta la próxima :)

Conferencias de Actualización en el marco de la Industria del Software del Nordeste

Semana 1. Fecha: 7 Octubre de 2011.

Tema: Desarrollo y Administración de Proyectos de Software
Disertantes: Ing. Fabián B. Bobadilla Godoy – - Aliare S.R.L.

;  Mario Alejandro Acevedo – 3Trex S.R.L.

Semana 2. Fecha: 14 Octubre de 2011.

Tema: Framework de aplicaciones web de código abierto
Disertante: Lic. Carlos Enrique Barbiero – Firma: IPCorp S.R.L.

Semana 3. Fecha: 21 Octubre de 2011.

Tema: Gestión de Proyectos
Disertantes: Ing. José Fernández , Ing. Diego Morales – Firma: DesarrollosNea S.R.L.

Semana 4. Fecha: 28 Octubre de 2011.

Tema: Exportaciones y mercados regionales
Disertante: Ing. Darío Almeida - Coninfo.net S.A.;  Lic. José Tagliarini - SP  S.A.

Semana 5. Fecha: 04 de Noviembre de 2011.

Tema: Accesibilidad en la Web. Aspectos técnicos y legales.
Disertante: Lic. Sonia Mariño FACENA ; Lic. Juan José Acevedo
Next Page »