viernes, 29 de julio de 2011

SOPORTE LABSIA

Hola, en esta página podrás mantener contacto conmigo si trabajas en LABSIA, aquí podrás preguntar todo lo que quieras y procuraré responder rápido y con lo mejor de mis conocimientos.

Sobre las máquinas:
Algunas fuentes de poder tienden a "bloquearse" previniendo que la computadora encienda, apaga el switch de la fuente y espera un par de horas y luego vuelve a encenderlo, la computadora debería prender.

Sobre jefeRemoto:
Como sabrás escribí un pequeño programa para mandar ejecutables y archivos en masa a todas las computadoras, este programa está instalado en todas las máquinas en los 3 windows, menos en las nuevas Macs. El controlador está instalado solo en la maquina de Valentín y solo el puede enviarles archivos, usando varias técnicas de seguridad.

lunes, 4 de julio de 2011

Desinstalar programas en windows usando python

Buscando una solución en Python para automatizar la desinstalación de programas en Windows me encontré con este post donde el autor comparte algunas funciones para leer datos del registro de Windows, después me encontré con este artículo de Microsoft donde podemos ver que Windows guarda en el registro los datos para desinstalar aplicaciones específicamente en:
HKLM/SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Con la sorpresa de que la mayoría de los instaladores agregan una llave en el registro que se llama uninstallstring, esta llave es tal cual la línea de comandos que ejecutará para desinstalar el programa en cuestión.
Ya puesto todo junto el script:
Requerimientos
el módulo wmi(que permite administrar windows) para python
Y ya, el otro módulo viene incluido en la librería estandar de python desde 2.4
Para este código supongamos que queremos desinstalar todos los programas de Adobe
Tomamos las funciones que nos hizo favor de compartir Thejaswi Raya


Podemos utilizarlas para ver una lista de todos los programas instalados asi


Y luego si quisieramos guardar las uninstallstrings para poder usarlas después las guardamos en una lista modificando el código anterior asi:



Después podemos iterar sobre esa lista de strings ejecutando cada una asi:


Según la documentación oficial y la comunidad no deberíamos usar system.os(comando) para ejecutar cosas, está depreciado sin embargo la alternativa propuesta del módulo subprocess, Popen(comando) no bloquea nuestro script usualmente es lo que queremos, que el código siga ejecutando una vez se dispare nuestro comando de sistema, sin embargo en este caso no, porque los desinstaladores necesitan ser únicos, surgen errores si mas de un desinstalador intenta ejecutarse al mismo tiempo por lo que en este caso necesitamos esperar a que el desinstalador acabe, osea regrese algún código de error a system.os() para que se ejecute el siguiente.



Averiguando mas sobre el tema me entere de que algunos programas implementan una clave adicional que se llama QuietUninstallString que nos ahorraría el problema de los desinstaladores que necesitan clicks, no se que tan común sea esta clave pero me temo que no mucho, en todo caso podemos automatizar los clicks usando el fabuloso proyecto
Sikulli

cheers!

jueves, 26 de mayo de 2011

Copiar automáticamente al portapapeles la url pública de archivos agregados a dropbox

Hola, hoy les traigo un pequeño script que utilizo para copiar al portapapeles la url pública de algún archivo que agrego a mi carpeta pública de dropbox, se copia en cuanto el archivo se crea o actualiza en el sistema de archivos, no cuando termina de subirse.
Antes de darles el script les dejo las dependencias:

Windows (versión de Linux sobre pedido)
python32 (para evitarme los problemas con archivos que tienen ñ o acentos)
pywin32 (manejar el portapeles)
Si llegas a tener problemas al importar pywin32 checa este post donde pongo la solución.



Solo tienen que personalizar las primeras 2 lineas, obtén el número de tu cuenta de dropbox desde la url pública de algún archivo que ya estes compartiendo.
Les dejo el código en licencia GPL
El código de la función que monitorea cambios en el sistema de archivos no es mio es de Tim Golden

sábado, 14 de mayo de 2011

Hoy traigo un script de python que cuenta el número de veces que se repite un alguna extensión de archivo(.txt .exe) en todo mi sistema de archivos, tenía curiosidad.
Este script devuelve los 30 mas comunes.




Debo confesar que la parte ordered no es código mio, aun no entiendo bien como usar lambdas en python solo se que sorted devuelve (en este caso) una lista ordenada de tuplas de menor a mayor dependiendo de los valores en el diccionario.

Update:
Ya entendí como funciona aquí la función sorted.
Vamos a deshuesar la función

Primero veamos, sorted necesita un parametro obligatorio, un iterable, en este caso estamos usando el metodo items de nuestro diccionario lo convertimos en una lista de tuplas, y usaremos esta lista de tuplas como iterable, considera este código

Esa es la lista de tuplas que usará sorted().
Ahora, a sorted() le queremos decir que nos ordene por el elemento [1] de la tuplas osea

El elemento 1 es el número de veces que se repite la extensión porque las tuplas en el caso real se ven asi ('.txt',9318) ok?
Ok ya entendemos porque x[1]
Entendamos porque lambda
Lambda crea funciones en una sola linea, estas son funciones completas que acepta parametros y devuelven algo, y resulta que el parametro key necesita ser obligatoriamente una función por eso no podemos ponerle simplemente

Porque eso no seria una función sino un int(el numero de veces que se repite .txt es un int), necesitamos una función entonces creamos una función a la que sorted() le va a enviar como parametro el iterable en cuestión es decir una ('.txt',9318) y esta función va a decir que ('.txt',9318) ahora es = x, y que de x queremos return x[1]
es como si pusieramos

Donde x es la tupla en cuestión.

Lindo no? cheers humanos!


Si tienen curiosidad este es el resultado

9550 archivos .py! yay!

lunes, 7 de marzo de 2011

Fixing pywin32 dll error

So, you installed pywin32 and you wonder why is this happening

ImportError: DLL load failed: The specified module could not be 
found.


when you do
import win32api
or try to import any of the modules included
I have no idea why, my googling lead me to some people talking about dll dependency issues,
 the solution is brute force copying and pasting dlls in the folder
C:\Python32\Lib\site-packages\pywin32_system32
and in
C:\Windows\system32
I’m not sure wich of these dlls fixed the issue so I paste them all for you to do the same, 
it can’t hurt since you won’t replace any(when asked say no)

hmmapi.dll
iecompat.dll
iedvtool.dll
ieproxy.dll
IEShims.dll
iessetup.dll
jsdbgui.dll
jsdebuggeride.dll
JSProfilerCore.dll
jsprofilerui.dll
msdbg2.dll
pdm.dll
python32.dll
pythoncom32.dll
pythoncomloader32.dll
pywintypes32.dll
sqmapi.dll


So just copy all these to both folders without replacing any of the existing dlls, and you should be fine.

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.