miércoles, 23 de febrero de 2011

Manipulating iTunes library with Python 3

I wanted to fix some songs in my iTunes library that I rated low but somehow the last.fm scrobbler managed to get them unusually high play counts, so I searched a bit on google for iTunes Python and found this script that was written to remove dead tracks. I worked on it to build the script I needed and with the help of the iTunes Windows COM interface SDK(downloaded from the apple’s developer site) I got a working script.

If you want the iTunes COM documentation and you don’t want to register here it is the help file.

And of course the code.

 

# this programs evaluates each song in an iTunes.xml file and reduces de number
# of play counts of the song if the song is rated with certain ammount of stars
# and the song has a determined ammount of play counts.

import win32com.client

STARS = 20,40 #stars the song has to be an offender, 1 star = 20(internally)
MAX_PLAYS = 55 #minimum number of playcounts the song has to have to be an offender
RED_PERCENT = 90 #the ammount the played count will be reduce, 90%

#First, we create an instance of the iTunes Application
itunes= win32com.client.Dispatch("iTunes.Application")

#please consult the hierarchy used here in the iTunes COM interface.chm
mainLibrary = itunes.LibraryPlaylist
NumTracks = mainLibrary.Tracks.Count

for track in range(1,NumTracks):
    currTrack = mainLibrary.Tracks.Item(track)
    if currTrack.Rating in STARS:
        if currTrack.PlayedCount >= MAX_PLAYS:
            print ("the song "+str(currTrack.Name)+" by "+str(currTrack.Artist)+" has been played "+str(currTrack.PlayedCount)+" times with a rating of "+str(currTrack.Rating/20))
            currTrack.PlayedCount = int(currTrack.PlayedCount*0.2)
            print ("new played count is "+str(currTrack.PlayedCount))

For this code to work you need to install the win32 module, get the latest build it from here.

I ran into some weird bug with Python 3.1.3, bug and fix here.

lunes, 21 de febrero de 2011

Pymes mexicanas crecen gracias a la adopción de Software Libre

Artículo original:
http://vivirmexico.com/2011/01/pymes-mexicanas-crecen-gracias-a-la-adopcion-
de-software-libre


Copia del artículo

Pymes mexicanas crecen gracias a la adopción de Software Libre

Por Hugo Torres el 29 de Enero de 2011 en Empresas, Tecnología.

Las Pymes mexicanas tienen cierto rezago en la adopción de tecnologías. Según un estudio elaborado por VISA-Nielsen en América Latina, en México solo el 25 por ciento de las medianas empresas utiliza el Internet en sus procesos y tan solo el 10 por ciento tiene una página web para acercar sus productos o servicios a más potenciales clientes.

Según los especialistas, la incorporación de software en las empresas es un fuerte gasto debido a los altos costos de las licencias de los programas. En una empresa promedio, el uso de tecnología puede significar hasta un 18 por ciento de su presupuesto; cantidad que limita a más de una empresa a la adopción de tecnologías del mercado tradicional.

Debido a esto, según la Fundación México Estados Unidos para la Ciencia (Fumec), la adopción de Software Libre (u open source) en las Pymes mexicanas está ganando terreno, por lo que calculan que este 2011 su uso crecerá hasta un 40 por ciento con respecto al año anterior:

Estas herramientas benefician a las empresas que no están totalmente estructuradas y le ponen orden a sus procesos con una imagen más innovadora. Las empresas que incorporan estas aplicaciones son más rentables porque pueden acceder a un ámbito global, por lo que esperamos un crecimiento del 40 por ciento de estas aplicaciones libres en la industria nacional en 2011.

El Software Libre no es precisamente aquel programa que es gratuito, sino el que su licencia da la libertad a sus usuarios de usar, copiar, distribuir, estudiar, modificar el software e incluso venderlo.

Estos números son muy alentadores para las comunidades de Software Libre en México y puede abrirse una puerta más para presionar a nuestro Gobierno para que haga uso de este tipo de software en las diferentes administraciones, tal como la Comisión Federal de Electricidad (CFE) lo ha estado haciéndolo desde hace casi 20 años y así como lo prometió Carlos Navarrete.

Sin embargo, este tipo de software no es la única alternativa. La Asociación Mexicana Empresarial de Software Libre (Amesol) calcula que el 67% de las empresas en México usan algún software pirata. Algo muy común en nuestro país aunque no muy correcto que digamos.


Comentarios por: Guillermo Siliceo Trueba

Adopción de software libre: enséñelo en las universidades y mate usted dos pájaros de un tiro para el país: uno: le ahorra al país el costo de importar licencias y disminuya el uso de software pirata.


Las empresas ya lo están demandando, las soluciones libres ya están siendo implementadas y cada vez más empresarios se dan cuenta de sus ventajas de costo. ¿Cómo podemos reducir aun más estos costos y proveerles valor con nuestros egresados? Ahorrémosle la capacitación, graduemos estudiantes diestros en soluciones pre-existentes, preparados para modificarlas según sus necesidades y enseñémosles a estos estudiantes el etos del desarrollo de software libre, estrictamente ligado al desarrollo en equipos a distancia.


Las ventajas de dinero son claras,¿pero que hay del etos del desarrollo de software libre? Quiero abundar un poco más sobre este último punto pues el modelo de desarrollo de software libre es muy distinto al empresarial en cuanto que en el primero los individuos trabajan independiente uno de los otros creando código y valor para el software del proyecto de manera tentativa, es decir, el programador de software libre TIENE que ser propositivo, tiene que proponer características y arreglos de bugs para integrarse al proyecto y estas propuestas son evaluadas por la comunidad y el equipo pre-existente de desarrollo(osea tiene que ser muy bueno para ser aceptado) en cambio en el desarrollo comandado por un jefe de área o programador en jefe es vertical, el programador tiene que ser reactivo, hace lo que se le dice y nada más(su código puede ser malo pero si cumple las fechas de entrega, se acepta).


El contraste en la mentalidad que estos dos estilos crea en el programador no podría ser mayor, en uno se invita a la creatividad al pensamiento independiente, no se fuerza al programador a integrarse a un proyecto sino que se le invita a colaborar pero solo si lo que produce es una solución de calidad(pues su código es revisado por mucha, mucha mas gente y no solo su jefe o supervisor), esto crea un marco para las interacciones sociales entre los programadores mucho mas amigable y compensadora en un proyecto de software libre que él se crea por la fuerza del trabajado pagado y las fechas límite como sucede en las empresas.


Entonces hay que preguntarse, si las empresas mexicanas cada vez lo demandan más(como lo dice el artículo) ¿Qué tipo de soluciones queremos darles desde las universidades? ¿Empleados preparados para obedecer(y hacer el mínimo necesario por el cheque) o trabajadores independientes que ofrezcan soluciones innovadoras escrutadas por la comunidad? No acaso queremos proponerle cosas al mundo usando software libre, desarrollando sobre él, inyectándole trabajo mexicano a las soluciones existentes, creando nuevas, que el mundo sepa que también podemos contribuir mientras nos beneficiamos con los frutos del trabajo de otros, que los egresados sean consultores externos o trabajadores en nómina, es una gran diferencia.

sábado, 19 de febrero de 2011

Python uno de los lenguajes mas populares

Fuente original:
http://www.infernodevelopment.com/python-becoming-most-popular-programming-language

Copia del artículo

Python is One of the Most Popular Programming Languages

Python is quickly taking the lead as one of the most popular programming language. You might be skeptical, but Python is growing at a faster rate than any other language. It received TIOBE Programming Language of the Year award twice, once in 2007, and again in 2010. Even now it still has the highest growth of any other language. What makes Python so great?

While statistical analysis always has its flaws, the trends are pretty clear. Java, C#, even PHP are losing popularity, Python, Ruby, Haskell, Ada are gaining popularity, and even Google Trends seems to agree.

Python is an interpreted language, like PHP, Ruby, and Perl. While PHP was very popular throughout the 2000s. Recently PHP and Python have become equally as popular. Now they are neck in neck. Both of them have enough features to be capable of anything. Some subtle differences however, make Python more amazing than PHP.

The Competition

PHP is one of the main competitors to Python's dominance, but mostly in the web development arena. PHP is very integrated with web development and can be used for it right out of the box like ASP. How does Python compete with that? Well Python has many web frameworks whose features so outperform PHP that it would be crazy to take on huge custom projects with PHP instead of Python and a framework like Django or Plone.

For example, Django's features allow for model generation using OO design philosophy and immediate database table generation based on your Python code.

I myself, am a Drupal PHP developer. Drupal is by far my favorite web framework. The modular-hook design and constant major updates (without backwards compatibility) were at first very attractive, but now I've become dissatisfied with it after being involved in a major custom-designed Drupal project. I find it superior to Wordpress in every way, but it's hard to customize it without some work.

Perhaps you didn't know this, but InfernoDevelopment is designed with Drupal. However, in our next redesign, our developers are planning on using Python and Django. We've started a huge project to release IDv3 in our secret forums, which includes volunteers who are interested in the project.

The fact that Python has a framework like Django that is dominant in web development is beneficial to Python. Standardization is needed for success. While competition is great for PHP, with the many frameworks like CodeIgniter, CakePHP, Drupal, and Zend, they also show a lack of superiority of any one API.

Some people may argue that Ruby and Perl might pose competition as well. I think they lack elegance. Ruby is a solid language but does have scaling problems. I have studied Perl and use it in Linux quite often, but I don't think it has the potential to continue its dominance.

What's great about Python?

Python is extremely well documented. The only other documentation I've seen that rivals it would be the C++ Qt framework. Such easy documentation allows more people to quickly adapt to the language.

Python's language design is incredibly well thought out. PHP's design however, seems to have been duck taped together over years of progress with little regard to design. PHP is basically a language that just seems to grow in the size of its function list. It eliminates the need to be OO. While PHP5 introduced a lot of OO features, it is still not widely used and some frameworks don't really utilize its features.

Python encourages good coding skills. It's exception and error handling is much superior to PHP or C#. Debugging is easy in Python. Difficult in C# (especially when ASP is involved), and somewhat stressful in PHP (whitescreens definitely don't help).

Python has an extensive arsenal of libraries that are extremely important for any mature language.

Python removed the brackets. At first I felt unsafe without the brackets. I felt like relying on white space or tabs would be dangerous. I've come to realize that it actually makes the code more elegant and less confusing. I already indent everything in PHP, C#, C++, so why bother including brackets?

Who's using Python and how will it be used in the future?

Python is being used extensively by Google (with some services using C++ for resource intensive tasks). Artificial Intelligence classes all over the US have adapted Python and dropped LISP.

Some popular sites that use Python:
Google, YouTube, Reddit (Pylon), Facebook (PHP & Python), FriendFeed, Tabblo (Django), SuggestionBox (Django), Bitbucket (Django), Disqus, Quora.

Corporations have begun to shed themselves of compiled languages for web development. The reason being is, compiling all the time is quite an annoyance for a lot of projects. Though you can use C# ASP.NET applications without compiling constantly if it is a website project, the amount of errors it throws on just about anything and its inconsistency is troubling.

I see the trend of Python's popularity continuing to grow especially in web development, AI, and game programming (Civilization uses Python for Civ4). C and C++ will definitely continue to be leaders because of their efficient use of resources and low level programming capability.

What do you think? Do you believe this trend will continue or am I just speculating too much?

Comentarios por: Guillermo Siliceo Trueba
Lo mas relevante del artículo son los "datos duros" :

Usuarios de Python: Google, YouTube, Reddit (Pylon), Facebook (PHP & Python), FriendFeed, Tabblo (Django), SuggestionBox (Django), Bitbucket (Django), Disqus, Quora.
Los nombres hablan por si solos, como el artículo no incluye fuentes, he obtenido algunas citas relevantes de boca de ingenieros que trabajan en estas empresas, link

"Python is fast enough for our site and allows us to produce maintainable features in record times, with a minimum of developers," said Cuong Do, Software Architect, YouTube.com

"Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language." said Peter Norvig, director of search quality at Google, Inc.

"Python plays a key role in our production pipeline. Without it a project the size of Star Wars: Episode II would have been very difficult to pull off. From crowd rendering to batch processing to compositing, Python binds all things together," said Tommy Burnette, Senior Technical Director, Industrial Light & Magic.
Me parece importante este punto porque una de las razones por las que una Universidad debe enseñar alguna habilidad es porque esta está demandada por la industria, y aunque aquí este citando industrias norte americanas estas son las que suelen imponer las modas y los estandares en los paises en vias de desarrollo como lo es México.

El otro dato relevante que menciona el artículo es el índice de la comunidad de programación por TIOBE, que es un indicador de la popularidad de los lenguajes de programación. El índice es actualizado una vez al mes. Los ratings están basados en un número de ingenieros de todo el mundo, cursos y vendedores terceros. Los motores de busqueda populares como Google, Bing, Yahoo!, Wikipedia, Youtube y Baidu[el google chino] son utilizados para calcular los raitings.*
Este índice pone a Python en 4º lugar arriba de PHP, C# y abajo de C, C++ y Java, lo que es impresionante por si mismo.

Recordando mi artículo anterior sobre las razones para enseñar Python el artículo que aquí comento incluye algunas de ellas y además habla de que Python motiva el uso de buenas prácticas de programación, lo bien documentado que está.

Como una nota aparte quiero explicar mi interés por Python.
Mi interés en Python surgió cuando investigaba la manera mas fácil de hacer un script que necesitaba cuando me estaba mundando de Windows a Linux(migrar mi iTuneslibrary.xml a Rhythmbox), me di cuenta lo fácil que era pero no le preste mas atención hasta unos años después que me dijeron que me iban a enseñar programación, y dije "hey yo ya conozco algo con que programar". Para cuando mis primeras tareas de programación llegaron en las que se me pedía pseudocódigo pensé en el gran parecido del pseudocódigo a lo que ya había usado y todas las tareas que entregué las resolvía en Python primero y ya que sabía que mi solución funcionaba entonces si la transcribía a C ó a DFD, simplemente porque era mas fácil. Viendo las dificultades de mis compañeros para resolver los temas que recientemente hemos visto en Programación 1(puro C ANSI) me fue natural pensar en Python como una manera de hacerles mas fácil la vida.

*Traducción de la descripción que TIOBE mismo hace de su índice. aquí

martes, 15 de febrero de 2011

10 razones para enseñar Python en Programación 101

 

Por: Guillermo Siliceo Trueba

1. Porque cuando quieres enseñar un concepto de programación en C tienes que enseñar muchos conceptos relacionados antes de poder llegar al que nos ocupa, en Python estos pasos extra(que confunden a un novato) no existen por lo tanto es más fácil enseñar en Python.

Ejemplo, como imprimir algo en la pantalla:

C

#include <stdio.h>

void main() {

printf(´Hola mundo´);

}

Python

print (“hola mundo”)

En C uno tiene que enseñar que es una librería la sintaxis para incluir una librería, que es una función, que es void, que son los corchetes, porque la f en print(formated) porque el punto y coma. En Python solo decir que print en inglés es imprimir que es una función y ya!.

Ahora que tal que decidimos capturar un dato de entrada del usuario

Python

Variable = input()

Aquí solo tenemos que enseñar que input captura cadenas de texto.

C

#include <stdio.h>

Char variable[20] ;

void main() {

scanf(“%s”,&variable);

}

Hay que enseñar que es una variable char, que significa el [20], que es scanf, que significa %c porque va entre comillas, y el que significa el operador unario &

2. Porque es muy parecido al pseudocódigo que escribimos en Algoritmos, y como ejemplo pondré una tarea que escribí primero en pseudocódigo luego en python y luego en C

El problema:

Sea N definido por el usuario

nn+nn+nn+… NN

Pseudocódigo

Inicio

Imprimir ("Introduzca el valor de un número entero");

Leer(N);

Declarar Sumapotencias = 0;

Mientras (N != 0)

{

Declarar Potencia = N;

Para i igual a 0 hasta N

{

Potencia = Potencia * N;

}

N = N - 1;

Sumapotencias = Potencia + Sumapotencias;

}

Imprimir('El resultado de sumar desde 1 hasta ',Numero,' elevando cada sumando al valor de si mismo es: ',Sumapotencias);

Fin

Python

Python

print("Introduzca el valor de un número entero")

N = int(input())

Sumapotencias = 0

while N != 0:

Potencia = N

for i in range(N-1):

Potencia = Potencia * N

N = N-1

Sumapotencias = Potencia + Sumapotencias

print("El total de la suma es: %i" %Sumapotencias)

C

#include <stdio.h>

#include <conio.h>

int main(int argc, char *argv[])

{

int N, Potencia,Sumapotencias,i;

printf ("Introduzca N: ");

scanf("%i", &N);

Sumapotencias = 0;

while (N != 0)

{

Potencia = N;

for ( i=1 ; i<N ; i++ )

{

Potencia = Potencia * N;

}

N = N - 1;

Sumapotencias = Potencia + Sumapotencias;

}

printf("El total de la suma es: %i \n",Sumapotencias);

system("PAUSE");

return 0;

}

Notese que el pseudocódigo está escrito con sintaxis parecida a C, la cantidad de código escrito y el parecido al pseudocódigo.

3. Porque Python no fuerza el usuario a escribir en programación funcional ni en orientada a objetos, el usuario puede elegir. En cambio en otros lenguajes se tienen que introducir conceptos de OO para poder empezar a usar el lenguaje, en C# y en Java para imprimir hola mundo primero hay que declarar primero la clase el ámbito de la función principal, en Python como ya vimos no es necesario, pero se puede hacer si se desea. Esta ventaja permite que se nos enseñe a programar primero con funciones y luego avanzar de manera natural a la orientada a objetos con el mismo lenguaje.

4. El interprete:

En python todo el código es interpretado, me es muy difícil destacar la importancia del interprete cuando se está aprendiendo pero puedo decir que es mucho más efectivo cambiar código en tiempo real a hacerlo en un depurador como en C, además de que es posible escribir código que afecta nuestro programa y que este se ejecute inmediatamente viendo sus efectos, sin tener que recompilar, así el intérprete nos permite trabajar mucho más rápido.

5. Tecnicamente Python no es un lenguaje de programación sino de scripts y fue diseñado para la administración rápida de sistemas, fue desarrollado para ayudar a los administradores de sistema a hacer más rápido el desarrollo de soluciones o como lenguaje para crear prototipos rápidos. Así si uno necesita conectar una base de datos en unas cuantas líneas en Python se soluciona el problema y después si se desea se puede reescribir en C, pero ya con la seguridad de que la implementación escrita funciona.

6. Lenguaje portable, multiplataforma:
Que sus alumnos desean trabajar en Linux, no hay problema, el código de Python es exactamente el mismo en Linux que en Windows o hasta en una Mac, o en Solaris o en Unix. Python tiene binarios listos para usarse para varias plataformas y sus librerías funcionan con independencia de estas.

7. Python tiene las baterías incluidas

Con esto me refiero a que la librería estándar de Python incluye módulos para hacer casi lo que uno quiera, por ejemplo, incluye modulos para cargar páginas web y trabajar con ellas, para trabajar con archivos xml, para trabajar con bases de datos, para usar expresiones regulares, una completa librería matemática, para trabajar con archivos en Windows, Linux u OsX, hasta incluye una librería para comprimir archivos usando zip. Así el programador puede escribir su programa, instalar Python en todas las maquinas en las que quiere que corra y olvidarse de las dependencias o de distribuir librerías extra a los clientes.

8. Python es libre y gratuito


Si la UGTO logra que se gradúen estudiantes que usan tecnologías libres, estará ahorrándole dinero al país, estará independizándolo de las soluciones costosas de empresas de otros países, estará dándole las herramientas para trabajar en cualquier PYME desde el dia 0 sin que esta tenga que pagar un solo centavo en licencias ni derechos.

9. La comunidad

Por la naturaleza libre de Python es normal que las personas en internet te quieran ayudar, escriban ejemplos y los publiquen, respondan dudas, hay una vibrante comunidad de programadores dispuestos a ayudar a los que están aprendiendo, sin mencionar una enorme cantidad de recursos y ejemplos por todo el internet.

10. Multiples implementaciones de Python

OK falto el número 10, existen diferentes versiones de Python que utilizan características de otros lenguajes de programación, por ejemplo si deseamos hacer la transición a Java podemos utilizar primero Jython, que compila código Python a byte-code de Java mismo que puede correr una JVM, pudiendo aprovechar las librerías de java con la misma flexibilidad que Java mismo.
Si deseamos utilizar las librerías de .NET utilizaríamos Iron Python, trabajando desde visual studio sin problemas con sintáxis de Python utilizando los componentes de .NET o de Windows Presentation Foundation, desde el ambiente conocido.

Si deseamos implementar una función de Python que resulta lenta en tiempo de ejecución en C podemos hacerlo, Python de fábrica puede trabajar con Módulos de C sin problemas utilizando Cython.

Si deseamos servir páginas dinámicas en internet, no hay problema no necesitamos aprender php o asp, con python y el framework Django podemos crear páginas dinámicas sin problemas.

Que queremos crear una aplicación con interfaz gráfica, Python incluye tk, una librería de interfaces gráficas.

Existen algunos otros proyectos interesantes en Python como el PyPy cuya misión es: Que el código de Python corra mas rápido que en C.

 

Conclusiones:

El lenguaje Python tiene serias ventajas sobre otros lenguajes para aprender, y si bien es cierto que aprendiendo C a uno se le facilita aprender cualquier otro lenguaje incluido Python(el intérprete de Python y muchas librerías están escritas en C), aprender C en si mismo es difícil y dado el poco tiempo con el que se cuenta para iniciar a la programación y la flojera de los estudiantes(ignorarla sería un error, hay que atacarla) se necesita un lenguaje que sea rápido y que requiera menos esfuerzo mental inicial, y que a la vez los prepare para las materias que más adelante llevarán y finalmente para el ambiente laboral.

Ligas

¿Qué es Python? [inglés]

http://www.python.org/doc/essays/blurb/

Comparando Python con otros lenguajes[inglés]

http://www.python.org/doc/essays/comparisons/

Descargar el interprete de Python 3.1.3

http://www.python.org/ftp/python/3.1.3/python-3.1.3.msi

Pyscripter - Un excelente IDE para Windows

http://code.google.com/p/pyscripter/downloads/detail?name=PyScripter-v2.4.1-Setup.exe&can=2&q=

Porque Python como primer lenguaje

http://mcsp.wartburg.edu/zelle/python/python-first.html

Un excelente libro introductorio

Dive into Python 3.0

http://diveintopython3.org/

Traducción al español

http://code.google.com/p/inmersionenpython3/updates/list