viernes, 28 de agosto de 2009

Agregando coloreado de sintaxis en blogspot

Luego de escribir el post anterior me encontré con la necesidad de agregar coloreado de sintaxis y números de linea al código fuente Python.
Probe varias posibilidades como simplecode (es para codigo html, y no pone numeros de linea) pero ninguno me maravillo. En el canal de Chat de PyAr (#pyar en freenode) me pasaron el link a un post en webresourcesdepot.com donde sugiere 11 opciones para resaltar la sintaxis. La primera opcion es usar Geshi (el que usan en wikipedia) pero no es facil de integrar en blogger.

La segunda opcion es SyntaxHighlighter, desarrollado en javascript por Alex Gorbatchev.
Su integracion en blogger es muy sencilla y la explicare a continuación:

  • Nos logeamos en nuestra cuenta de blogspot y vamos, dentro de la pestaña "Diseño" a la opción "Edicion HTML". El documento en cuestion es el "esqueleto" de nuestro blog.
  • Lo recomendable en este paso es guardar la plantilla en nuestra pc, para tener un backup, en caso de cometamos algun error en la edición
  • Buscamos la etiqueta </head> y a continacion pegamos lo siguiente


  • <link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css">
    <link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css">
    <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"><br /><!-- add brushes here --><br /><script type="'text/javascript'"><br /> SyntaxHighlighter.config.bloggerMode = true;<br /> SyntaxHighlighter.all();<br /></script>


  • Despues del comentario donde dice "add brushes here" pegamos las llamadas a los lenguajes que queremos tener habilitados para colorear (conviene poner los menos posibles, para no ralentizar la carga de las paginas)


<!--Colorea AS3-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/>
<!--Colorea Bash-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<!--Colorea CSharp-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<!--Colorea Cpp-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<!--Colorea Css-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<!--Colorea Delphi-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/>
<!--Colorea Diff-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/>
<!--Colorea Groovy-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js' type='text/javascript'/>
<!--Colorea JScript-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<!--Colorea Java-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<!--Colorea JavaFX-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/>
<!--Colorea Perl-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<!--Colorea Php-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<!--Colorea Plain-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<!--Colorea PowerShell-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/>
<!--Colorea Python-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<!--Colorea Ruby-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<!--Colorea Scala-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/>
<!--Colorea Sql-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<!--Colorea Vb-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<!--Colorea Xml-->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>


Para utilizarlo usamos:

<pre class="brush:lenguaje">

Ponemos nuestro codigo aqui

</pre>


Donde "lenguaje" es el alias del lenguaje que estamos usando aqui esta la lista completa de alias

Nota: si queremos pegar codigo html hay que codificarlo primero con simplecode

miércoles, 26 de agosto de 2009

Stallman en Argentina

El día martes 25 de agosto, participe de la conferencia de Richard Stallman, lider de la Fundacion del Software Libre (FSF, por sus siglas en ingles). Mas allá de la emoción de ver en vivo a una de las personalidades mas influyentes en la cultura libre, la conferencia fue clara, amena y divertida.

He aquí la evidencia:

jueves, 20 de agosto de 2009

Buscando con Google desde Python (2.6) Parte 1

Empezé a investigar, para un nuevo proyecto, como utilizar la API AJAX de Google para Busquedas en conjunto con Python, lenguaje que se encargara del procesamiento en el lado del servidor y generara la pagina con los resultados.

Me encontré con el blog de Damon Cortesi que contiene un ejemplo de uso, que utiliza simplejson, incorporado en la biblioteca estandar a partir de Python 2.6.

Nuestro uso del api se limita a construir un URL que incluya los terminos a buscar y las restricciones de la misma.
La URL base es http://ajax.googleapis.com/ajax/services/search/images , a la que tendremos que agregar el termino a buscar, la version del protocolo, la cantidad de resultados devueltos

# -*- coding: utf-8 -*-
#!/usr/bin/python

import urllib
import json
# vamos a crear la consulta
query = urllib.urlencode({'q' : 'flores', #cadena a buscar
'v' : '1.0', #version del protocolo
'rsz' : 'large'}) # estableces que se devuelvan 8 resultados por consulta
#completamos el url
url = 'http://ajax.googleapis.com/ajax/services/search/images?%s' \
% (query)
#solicitamos el url
resultados = urllib.urlopen(url).read()
#interpretamos el objeto json. json.loads() nos devuelve un diccionario
json = json.loads(resultados)
#creamos un diccionario con los datos que nos interesan
resultados = json['responseData']['results']
#los imprimimos!
for i in resultados:
print i['title'] + ": " + i['url']

"""Salida:
flores089.gif: http://i121.photobucket.com/albums/o207/bicfomh/rec/flores/flores089.gif
ashley-flores.jpg: http://www.hoax-slayer.com/images/ashley-flores.jpg
z-flores.gif: http://www.zwani.com/graphics/portuguese/flores/images/z-flores.gif
Flor_289035504_017_flores.jpg: http://images.recados.net/img/recados/Flor_289035504_017_flores.jpg
z-flores1.gif: http://images.zwani.com/graphics/portuguese/flores/images/z-flores1.gif
z-flores3.gif: http://www.zwani.com/graphics/portuguese/flores/images/z-flores3.gif
z-flores10.gif: http://www.recados.com/graficos/flores/images/z-flores10.gif
RanchodeLasFlores3.jpg: http://www.herecomestheguide.com/images/location/RanchodeLasFlores/RanchodeLasFlores3.jpg
"""



Durante esta semana voy a seguir investigando, y voy a pasar de urllib a urllib2, que es mas eficiente(segun lo que lei)

Si quieren saber mas sobre la api AJAX lo pueden encontrar en:
http://code.google.com/intl/es/apis/ajaxsearch/documentation/reference.html#_intro_fonje
Hasta la proxima!