Para un nuevo producto que estamos desarrollando en Openshine, vamos a necesitar desarrollar un servidor. Hemos estado viendo que tecnologías nos podrían servir y al final nos hemos decantado por Erlang. Por lo que ahora estoy aprendiendo a programar con este lenguaje.
Erlang es un lenguaje funcional, es bastante diferente a lo que he visto hasta ahora. Lo que más choca al principio es la asignación única de variables. Variables que no pueden variar.
A continuación pongo unas cuantas fuentes que me están siendo de utilidad para profundizar en el tema:
http://www.erlang.org/doc/getting_started/users_guide.html
http://learnyousomeerlang.com/content
y principalmente el libro "Programming Erlang" de Pragmatic. Yo tengo la versión impresa pero he podido comprobar que está por la red en descarga directa.
En delicious voy almacenando todos los enlaces que encuentro y considero interesantes:
http://www.delicious.com/pvieytes/erlang
No voy a crear una serie completa de posts sobre Erlang y ni mucho menos un tutorial, por la red los hay muy buenos, pero lo que si tengo intención de hacer es ir publicando pequeñas "notas" con trucos o funcionalidades, básicamente a modo de recordatorio.
martes, 21 de junio de 2011
miércoles, 18 de mayo de 2011
Parsing Twitter's User Timeline with Python
Usually, when you want to include the tweets on a web, it is common to embed a javascript code to show it. Twitter offers a very useful widget for this purpose. http://twitter.com/about/resources/widgets/
This is the best way to show the user timeline without worries. You just copy and paste some javascript code, but sometimes you need more flexibility and copy and paste javascript widget it's not enough.
In this post you'll find a way to parse the Twitter's user timeline from a json file with Python. There are a lot of ways to do that, here's mine.
This is not a Python wrapper arround the twitter api, if you are looking for something like that, please visit http://code.google.com/p/python-twitter/
The "read_tweets()" function parse the json file and store the tweet info in a list of Tweet instances. The Tweet class also provide some methods to store info easly.
In "read_tweets()" I use urllib2 to read the file and simplejson to parse it. To store the info I use the Tweet Class methods.
The most important Tweet class method is "set_text()". It converts plain text into html code with http, user and hashtag links. I use python regular expressions to find, http://xxx, https://xxx, #xxx and @xxx and replace it for a valid Twitter link.
"read_tweets()" download a json file every time you call it so please don't use it in a view. It'll delay the view too much. The tweets must be stored with "read_tweets()" and the view must read this stored tweets. You can store the tweets in a lot ways. I use a "manage.py" script added to cron to stored it in memcache, but It's your choice.
If you gonna show the html code stored en Tweet.html_text in a Django template don't forget use the safe tag.
[python]{{ tweet.html_text|safe }}[/python]
This is the best way to show the user timeline without worries. You just copy and paste some javascript code, but sometimes you need more flexibility and copy and paste javascript widget it's not enough.
In this post you'll find a way to parse the Twitter's user timeline from a json file with Python. There are a lot of ways to do that, here's mine.
This is not a Python wrapper arround the twitter api, if you are looking for something like that, please visit http://code.google.com/p/python-twitter/
Getting the Twitter's user time
To download the last tweets, I use the GET statuses/user_timeline function that returns a json file. I've created a function to download the json file and parse it. I've also created a Tweet class to store the tweet info.The "read_tweets()" function parse the json file and store the tweet info in a list of Tweet instances. The Tweet class also provide some methods to store info easly.
Let's see the code.
In "read_tweets()" I use urllib2 to read the file and simplejson to parse it. To store the info I use the Tweet Class methods.
The most important Tweet class method is "set_text()". It converts plain text into html code with http, user and hashtag links. I use python regular expressions to find, http://xxx, https://xxx, #xxx and @xxx and replace it for a valid Twitter link.
Django advice
If you gonna use this code with Django, please, let me give you some advice."read_tweets()" download a json file every time you call it so please don't use it in a view. It'll delay the view too much. The tweets must be stored with "read_tweets()" and the view must read this stored tweets. You can store the tweets in a lot ways. I use a "manage.py" script added to cron to stored it in memcache, but It's your choice.
If you gonna show the html code stored en Tweet.html_text in a Django template don't forget use the safe tag.
[python]{{ tweet.html_text|safe }}[/python]
martes, 3 de mayo de 2011
Actualizar la Lista de Workspaces Recientes en Eclipse
Cuando se cambia de workspace en Eclipse, aparece una lista con los últimos workspaces con los que has trabajado. Aunque estos workspaces se hayan borrado del disco duro, la lista no se actualiza, y puede aparecer alguno que ya no existe. Para modificar esta lista, es necesario editar el fichero 'org.eclipse.ui.ide.prefs'
En mi Ubuntu, este fichero se encuentra en ~/.eclipse/org.eclipse.platform_3.5.0_155965261/configuration/.settings/org.eclipse.ui.ide.prefs
Hay que modificar "RECENT_WORKSPACES"
En mi Ubuntu, este fichero se encuentra en ~/.eclipse/org.eclipse.platform_3.5.0_155965261/configuration/.settings/org.eclipse.ui.ide.prefs
Hay que modificar "RECENT_WORKSPACES"
miércoles, 20 de abril de 2011
Añadir Twitter a una página web
He estado buscando como añadir los tweets a una página que estoy desarrollando. Por la red hay varios posts que describen como con unas pocas líneas de javascript puedes añadir los tweets a tu web.
Este es un ejemplo que he probado en una página en Django que estoy haciendo. Hay un par de parámetros que están puestos como variables de los templates de Django que habría que cambiar para que funcionase correctamente:
Además, Twitter nos proporciona una página donde podemos crear widgets para nuestra web. Por ejemplo, para este blog, yo me he decantado por este método.
http://twitter.com/about/resources/widgets/
Este es el código que se ha generado para mostrar mis tweets en este blog.
Y este el resultado:
Este es un ejemplo que he probado en una página en Django que estoy haciendo. Hay un par de parámetros que están puestos como variables de los templates de Django que habría que cambiar para que funcionase correctamente:
- {{ twitter_user }}: nombre de usuario de twitter del cual se quieren visualizar los tweets
- {{ num_tweets }}:número de tweets que se muestran.
Además, Twitter nos proporciona una página donde podemos crear widgets para nuestra web. Por ejemplo, para este blog, yo me he decantado por este método.
http://twitter.com/about/resources/widgets/
Este es el código que se ha generado para mostrar mis tweets en este blog.
Y este el resultado:
sábado, 16 de abril de 2011
Convertir VÍdeos *.mts
Hace poco he adquirido una cámara JVC-HD. No tenía muy claro si necesitaba que fuese HD, pero un amigo que trabaja editando vídeo, entre otras cosas, me recomendó que mejor que fuese de alta calidad. Si en algún momento quiero hacer algo un poco más profesional, el HD me ofrecerá muchas más posibilidades.
El problema, en cambio, lo tengo ahora que mi intención es visualizar, almacenar y hacer pequeños montajes de videos caseros. El formato de salida de los archivos es *.mts y trabajar con este formato no es muy cómodo. En mi máquina habitual utilizo ubuntu (11.04 en el momento de escribir el post) y mediante el reprductor VLC puedo visualizar los vídeos (este visualizador GNU también se puede usar en MAC OS) pero la calidad no es muy buena, aparecen líneas horizontales. He decidido convertir estos vídeos a un formato más comprimido y, a ser posible, más estandar. Esto me permite visualizar los vídeos sin problemas y realizar ediciones caseras.
Para convertir los vídeos, uso winff. Esta en los repos por lo que la instalación es muy simple.
Es bastante fácil de usar. Se eligen los archivos con el botón "añadir", el tipo de conversión y el directorio donde se almacenan los ficheros creados.
En mi caso he añadido el parámetro de la relación de aspecto, por defecto pasa los vídeos a 4:3. Mis videos originales estaban grabados a 16:9 por lo que se no se pone este parámetro, aparecen deformados.
Todavía no he visto con que programa voy a editar los vídeos, en un principio había pensado hacerlo con mi mac con imovies, pero sigo teniendo problemas al importar los archivos. Creo que voy a optar por una version libre en Ubuntu. He echado un ojo a OpenShot y tiene muy buena pinta. Además, en su momento usé PiTiVi que también puede ser otra opción.
El problema, en cambio, lo tengo ahora que mi intención es visualizar, almacenar y hacer pequeños montajes de videos caseros. El formato de salida de los archivos es *.mts y trabajar con este formato no es muy cómodo. En mi máquina habitual utilizo ubuntu (11.04 en el momento de escribir el post) y mediante el reprductor VLC puedo visualizar los vídeos (este visualizador GNU también se puede usar en MAC OS) pero la calidad no es muy buena, aparecen líneas horizontales. He decidido convertir estos vídeos a un formato más comprimido y, a ser posible, más estandar. Esto me permite visualizar los vídeos sin problemas y realizar ediciones caseras.
Para convertir los vídeos, uso winff. Esta en los repos por lo que la instalación es muy simple.
$ sudo aptitude install winff
Es bastante fácil de usar. Se eligen los archivos con el botón "añadir", el tipo de conversión y el directorio donde se almacenan los ficheros creados.
En mi caso he añadido el parámetro de la relación de aspecto, por defecto pasa los vídeos a 4:3. Mis videos originales estaban grabados a 16:9 por lo que se no se pone este parámetro, aparecen deformados.
Todavía no he visto con que programa voy a editar los vídeos, en un principio había pensado hacerlo con mi mac con imovies, pero sigo teniendo problemas al importar los archivos. Creo que voy a optar por una version libre en Ubuntu. He echado un ojo a OpenShot y tiene muy buena pinta. Además, en su momento usé PiTiVi que también puede ser otra opción.
domingo, 27 de febrero de 2011
crear entornos virtuales de python con virtualenv
Virtualenv nos permite crear entornos virtuales de python. Es decir, nos permite crear entornos con diferentes dependendencias instaladas. Podemos trabajar con diferentes proyectos en un misma máquina que requieran diferentes versiones del mismo paquete.
Para instalar y gestionar dichos paquetes usamos la herramienta pip. Para poder instalar pip, es necesario tener instalado easy_install. Si todavía no has instalado easy_install, hay que ejecutar el siguiente comando.
Instalación de pip y virtualenv.
El parámetro -U indica upgrade, lo que quiere decir que se instalará la última versión del paquete indicado.
El entorno virtual se crea sobre un directorio. En el siguiente ejemplo, se crea el directorio env.
El parámetro '--no-site-packages' indica que no se instale ningún paquete de los que están instalados en la máquina.
Yolk es una herramienta que permite listar los paquetes instalados en un entorno virtual. Para instalar un paquete en un entorno virtual, se realiza mediante el comando pip pasándole como parámetro -E y el directorio del entorno virtual.
La herramienta yolk muestra los paquetes instalados. Pero para poder utilizarla, es necesario activar el entorno virtual. Para activarlo hay que ejecutar el siguiente comando:
El comando "pip freeze" también muestra los paquetes instalados.
Para desactivar en entorno ejecutamos deactivate
Para crear un fichero que contenga los requerimientos del entorno virtual ejecutamos el siguiente comando.
Etos requerimientos se pueden instalar mediante pip. http://pip.openplans.org/#requirements-files
Para instalar y gestionar dichos paquetes usamos la herramienta pip. Para poder instalar pip, es necesario tener instalado easy_install. Si todavía no has instalado easy_install, hay que ejecutar el siguiente comando.
$ sudo apt-get install python-setuptools python-dev build-essential
Instalación de pip y virtualenv.
$ sudo easy_install pip
$ pip install -U virtualenv
El parámetro -U indica upgrade, lo que quiere decir que se instalará la última versión del paquete indicado.
El entorno virtual se crea sobre un directorio. En el siguiente ejemplo, se crea el directorio env.
$ virtualenv --no-site-packages env
El parámetro '--no-site-packages' indica que no se instale ningún paquete de los que están instalados en la máquina.
Yolk es una herramienta que permite listar los paquetes instalados en un entorno virtual. Para instalar un paquete en un entorno virtual, se realiza mediante el comando pip pasándole como parámetro -E y el directorio del entorno virtual.
$ pip install -E env yolk
La herramienta yolk muestra los paquetes instalados. Pero para poder utilizarla, es necesario activar el entorno virtual. Para activarlo hay que ejecutar el siguiente comando:
$ source env/bin/activate
$ yolk -l
pip - 0.7.2 - active
setuptools - 0.6c11 - active
wsgiref - 0.1.2 - active development (/usr/lib/python2.6)
yolk - 0.4.1 - active
El comando "pip freeze" también muestra los paquetes instalados.
$ pip freeze
wsgiref==0.1.2
yolk==0.4.1
Para desactivar en entorno ejecutamos deactivate
$ deactivate
Para crear un fichero que contenga los requerimientos del entorno virtual ejecutamos el siguiente comando.
$ pip freeze -E env > requirements.txt
Etos requerimientos se pueden instalar mediante pip. http://pip.openplans.org/#requirements-files
sábado, 26 de febrero de 2011
Borrar la barra del blogger
Por defecto, los blogs creados en blogger tienen una barra de navegación dentro de blogger. Nos permite "loggearnos", ir al siguiente, blog.
Si no te gusta que esté presente esta barra, es posible eliminarla. Realmente, lo que se hace es modificar el template del blog para ocultarla. Veámos como:
Lo primero que hay que hacer, es is a la pestaña de diseño la página de administración del blog. Después, a la siguiente pestaña. Edición de HTML.
Nos sale una vista con el código de la plantilla. Si no estás acostumbrado/a a trabajar con código, no te preocupes, lo que hay que hacer es muy fácil. De todas maneras, siempre es mejor guardar un copia de la plantilla antes de modificar nada. Para guardar la plantilla actual hay un enlace "Descargar plantilla completa" que nos permitirá almacenar la plantilla en nuestro disco duro.
A continuación hay que buscar en el código el siguiente texto(sin el espacio enre "<" y "/"):
y justo encima de dicho texto copiar
Si no te gusta que esté presente esta barra, es posible eliminarla. Realmente, lo que se hace es modificar el template del blog para ocultarla. Veámos como:
Lo primero que hay que hacer, es is a la pestaña de diseño la página de administración del blog. Después, a la siguiente pestaña. Edición de HTML.
Nos sale una vista con el código de la plantilla. Si no estás acostumbrado/a a trabajar con código, no te preocupes, lo que hay que hacer es muy fácil. De todas maneras, siempre es mejor guardar un copia de la plantilla antes de modificar nada. Para guardar la plantilla actual hay un enlace "Descargar plantilla completa" que nos permitirá almacenar la plantilla en nuestro disco duro.
A continuación hay que buscar en el código el siguiente texto(sin el espacio enre "<" y "/"):
]]>< /b:skin>
y justo encima de dicho texto copiar
#navbar-iframe {
opacity:0.0;
filter:alpha(Opacity=0)
}
Suscribirse a:
Entradas (Atom)