15 julio 2013

Google Code se queda sin descargas

Google Code era una alternativa sencilla y cómoda a otros sitios web de alojamiento de proyectos de código abierto, como Sourceforge o GitHub. Era fácil llevar el control de versiones con SVN (Subversion), Git o Mercurial, se podía crear un Wiki en el que incluir la documentación del proyecto y se podían dejar descargas de versiones listas para usar.

Pero ya no todo es así. Desde final de mayo, los nuevos proyectos ya no incluyen la pestaña de Descargas (downloads), ni los proyectos anteriores que todavía no tenían descargas. Y los proyectos que ya contenían descargas pronto dejarán de permitir descargas nuevas (el 15 de enero de 2014).

La excusa es el mal uso que algunos hacían. Sugieren a los usuarios utilizar Google Drive, pero el manejo va a ser mucho menos transparente (hay que recurrir a un servicio externo, crear enlaces públicos e incluirlos en la documentación del proyecto) y mucho menos versátil (no existe la posibilidad de poner etiquetas, por ejemplo). ¿Y si entre todos tus proyectos, sumados a tus documentos personales, necesitas más de 15 Gb? Pues te sugieren que pagues por tener más espacio en Google Drive. Muy triste.

Se queda cojo algo que para mí era una magnífica herramienta para usar en clase con mis alumnos. Tras el cierre de Reader, este es un nuevo error de Google, que cada vez mira más la forma de sacar dinero de sus productos y descuida más la poca parte de servicios "aparentemente desinteresados" que todavía prestaba al usuario.

Más detalles en

http://google-opensource.blogspot.se/2013/05/a-change-to-google-code-download-service.html

y en

https://code.google.com/p/support/wiki/DownloadsFAQ

07 julio 2013

Python básico para programadores

Unas nociones básicas de Python, para gente que ya ha programado en algún otro lenguaje...

Entrada/salida básica

La orden para escribir es "print". En Python 3 necesita paréntesis (es una función), pero no los necesita en versiones anteriores.
Podemos pedir datos al usuario mediante consola con "input". Si los datos son numéricos, podemos usar "int(input())" para convertirlos.
Las líneas no necesitan punto y coma: cada orden termina al final de la línea correspondiente.
No es necesario declarar "variables": se inicializan automáticamente la primera vez que se usan, y el tipo de datos se deduce automáticamente a partir de su declaración:

print ("Dime un numero")
primerNumero = int( input() )
print ("Dime otro numero")
segundoNumero = int( input() )
print ("Su suma es ")
print (primerNumero + segundoNumero)
 

Condiciones

Existe una orden "if" para comprobar condiciones. La condición que se verifica no necesita estar indicada entre paréntesis, al contrario que en los lenguajes que derivan de C (como C, C++, C#, Java, PHP y algún otro).
La línea del "if" debe terminar con un símbolo de "dos puntos", y todo el bloque de órdenes que se va a ejecutar en caso de que se cumpla la condición, estará tabulado algo más a la derecha (típicamente 4 espacios; el mínimo es dos... o un carácter de tabulación).
Para indicar qué hacer si no se cumple la condición, tenemos una cláusula "else" opcional, que también debe ir seguida por un símbolo de "dos puntos":

num1 = int(input( "Dime un numero " ))
num2 = int(input( "Dime otro numero " ))
if num1 > num2:
    print( "El primero es mayor" )
else:
    print ("El segundo es mayor" )
 

Condiciones múltiples

No existe "switch" o "case", pero se pueden enlazar varios "if" sin necesidad de tabular cada vez más a la derecha, si se emplea "elif" (abreviatura de "else if"):

nota = int(input("Introduzca la nota "))
if nota == 10:
    print ("Sobresaliente alto")
elif nota == 9:
    print ("Sobresaliente bajo")
elif nota == 8:
(...)
 

Repeticiones

Podemos repetir bloques de órden con "while", que tiene una sintaxis muy similar a "if". No existe un repeat-until, ni un do-while, que se pueden conseguir modificando ligeramente la estructura del "while" para garantizar que siempre se dé un primer paso:

print ("Dime un numero")
x = int( input ( ) )
suma = 0
while x != 0:
  suma = suma + x
  print ("La suma es {}".format(suma) )
  print ("Dime otro numero")
  x = int( input ( ) )
print ("Terminado")
 

Contadores

Si queremos contar del uno al 10, lo podemos hacer con un "while", pero también existe una orden "for", que recorre los valores de un conjunto; si se trata de un contador, lo habitual es crear un "rango de valores" usando "range", al que se le indica el valor inicial (incluido) y el valor final (no incluido):

for x in range(1,11):
  print (x) 
 

Y si queremos que no vaya de uno en uno, podemos añadir un tercer parámetro, el incremento:

for x in range(10,21,2):
  print (x)
 

Funciones

Las funciones se definen con la palabra "def". A continuación, se indica el nombre de la función, los parámetros y el símbolo de dos puntos. El contenido de la función deberá estar tabulado más a la derecha, como siempre:

def saludar(nombre):
    print ("hola")
    print (nombre)
 

Si la función devuelve valores, el único cambio será incluir la correspondiente sentencia "return":

def sumar(x,y):
    return x+y