lunes, 9 de noviembre de 2009

Encendiendo/Apagando en remoto

Encendido: usando WOL (wake on lan)

wol 00118580BE3F

Apagado: haciendo uso de WMI:

Desde un ordenador que tenga permisos (por ejemplo, uno en dominio para actuar sobre un equipo que está en dominio):

c2=wmi.WMI(computer='edigraf22',find_classes=False,privileges=["Shutdown"])
c2.Win32_OperatingSystem()[0].Shutdown()

lunes, 20 de julio de 2009

Olvidaré en 10 minutos cómo solucioné los problemas de errores "userenv" que aparecían cada dos minutos

En una de mis máquinas principales de trabajo, el log de eventos "reventaba" con mensajes como este:

Event Type: Error
Event Source: Userenv
Event Category: None
Event
ID: 1000
Date: 20/07/2009
Time: 7:56:58
User: NT AUTHORITY\SYSTEM
Computer: XXX
Description:
Windows cannot unload your registry
file. If you have a roaming profile, your settings are not replicated. Contact
your administrator.

DETAIL - Access is denied. , Build number ((2195)).



Después de darle muchas vueltas tratando de indentificar alguna tarea local o remota que fuese la responsabe de este error, encontré un fix que Microsoft tenía a disposición del personal, que se referenciaba desde la siguiente página, que terminaba llevando a un de Microsoft donde te bajabas una herramienta llamada "User Profile Hive Cleanup Service" . Una vez instalada (no requiere ni reiniciar el servidor), en lugar del error recurrente, aparece de vez en cuando la siguiente información, que parece que está corrigiendo el problema:

Event Type: Information
Event Source: UPHClean
Event Category: None
Event ID: 1401
Date: 20/07/2009
Time: 8:43:01
User: DOMGRAF\XXX
Computer: XXX
Description:
The following handles in user profile hive DOMGRAF\admin (S-1-5-21-88042264-442827290-926709054-1036) have been remapped because they were preventing the profile from unloading successfully:

mstask.exe (1392)
HKCU\Software\Classes (0x298)

CMD.EXE (6540)
HKCU\Software\Classes (0x3a4)
HKCU (0x3bc)



Parece que con esto se ha mitigado el problema y además da más información para seguir buscando el responsable último del mensaje

martes, 14 de julio de 2009

Olvidaré en 10 minutos lo que he aprendido sobre la optimización de servidores mySQL

A raíz de darle vueltas a por qué alguna de las páginas de mi servidor Zope cargaban demasiado lento, y asumiendo que no sólo sería culpa de la máquina que está muy castigada ya, me decidí a leer sobre cómo optimizar las tablas y las búsquedas en un servidor MySQL.

Me encontré con algunas páginas muy interesantes:
Muy interesante:
EXPLAIN "unaquery" --> analiza qué indices usará y por lo tanto dará pistas para determinar si hay que poner alguna query más
Este comando explain se usa también sobre una tabla, con EXPLAIN_EXTENDED... muy interesante

Más cosas aprendidas:
- parece que hay que evitar, si es posible, ordenar una query por una columna que no vaya en el WHERE
- por mi experiencia, evitar el uso de la función TIMESTAMP() a menos de que sea imprescindible. Me ayudó en todas las query que usaba para comparar contenidos de la tabla de recibidos vs transmitidos.


Con estas técnicas mejoré el redimiento de:

Páginas comparativas recepción vs transmisión
Páginas comparativas recepción por distintos caminos
Página de simulación de la cola de transmisión

** sobre todo, ajustar las tablas de "historicotx" a la hora de ejecutar el script que actualiza contenido, pasó de ejecutarse en minutos a hacerlo en unos pocos segundos. Increíble.

No pude probar, pero habría que hacerlo, la herramienta de la que se habla aquí:
MySqlTuner "Tuning MySQL Performance with MySQLTuner"

Además, también encontré consejos para configurar una cache al servidor MySQL que mejore los resultados: Turn on MySQL query cache to speed up query performance

domingo, 12 de julio de 2009

Olvidaré en 10 minutos cómo conseguir buenas capturas de un DVD

El objetivo era conseguir unas buenas capturas de un DVD con imágenes de nuestro viaje a Tailandia. La calidad que conseguía capturando directamente con el BSPlayer, VLCPlayer y la comodidad de ir capturando no me convencía, así que busqué por Internet y encontré una entrada de un blog bastante reciente donde se recomendaba y se explicaba cómo usar el GOM Player para esto (http://www.pablogeo.com/la-mejor-forma-de-capturar-imagenes-de-videos)

Pero al intentar usarlo me encuentro con que el GOM no captura directamente de mi DVD, quizá por el formato (el que utiliza mi disco duro grabador al pasr a un DVD). Así que decido que mejor pasarlo primero a MPEG, que seguro que así podré capturar perfectamente las imágenes.

Al buscar un programa gratuíto y facilón, me encontré con DVDx que me pareció potente y rápido de usar para tener unos buenos resultados cuanto antes.

Resumiendo:

1) pasar de DVD a MPEG --> usar DVDx
2) capturar con alta calidad frames de la película --> usar GOMPlayer. Se puede configurar calidad de JPEG, ráfagas de frames para después elegir la mejor,...

lunes, 25 de mayo de 2009

Olvidaré en 10 minutos dos buenas formas de hacer imágenes...

A la hora de hacer imágenes, he encontrado dos aplicaciones gratuitas para uso personal que parecen ofrecer toda la flexibilidad y garantía que necesitamos para equipos normales. En est9os casos estos programas pueden ser usados en lugar de otras soluciones comerciales.

Drive XML Image:
http://www.runtime.org/driveimage-xml.htm

Macrium Reflect:
http://www.macrium.com/ReflectFree.asp

Las dos pueden instalarse y permiten crear discos de arranque para recuperaciones de emergencia donde la máquina en cuestión no arranca.

domingo, 10 de mayo de 2009

Olvidaré en 10 minutos manejar los eventos onmouse para poner un tooltip avanzado

Muchas veces es muy importante poner iconos en lugar de largas etiquetas de texto tanto por la imagen que muestra una página como por lo mucho que puede ocupar un texto que además muchas veces se repite en una página.

Para mi gusto, en esos casos lo mejor es poner un iconito y desplegar una ayuda (la que se corresponde con esa etiqueta de texto que no queremos poner a lo grande) al poner el ratón sobre ella.

Seguro que hay muchas formas de hacerlo, pero hay un librería muy maja y bien documentada en:

http://www.walterzorn.com/tooltip/tooltip_e.htm

La he utilizado, por ejemplo, en la Plataforma GATA para evitar muchos textos repetidos en las listas de temas, de clientes, etc...

miércoles, 11 de marzo de 2009

Informacion de rendimiento enequipos Windows con WMI

Por fin encontré algo que buscaba hace mucho. Parece mejorable, pero son unas recetas para conseguir la información de carga de CPU, tiempo que lleva arranacada la máquina, memoria en uso y memoria consumida.... directo a nuestro sistema de monitorización y alarmas

la URL: http://coreygoldberg.blogspot.com/2008/12/python-monitor-windows-remotely-with.html

import re
import wmi
from subprocess import Popen, PIPE



def get_uptime(computer, user, password):
c = wmi.WMI(computer=computer, user=user, password=password, find_classes=False)
secs_up = int([uptime.SystemUpTime for uptime in c.Win32_PerfFormattedData_PerfOS_System()][0])
hours_up = secs_up / 3600
return hours_up


def get_cpu(computer, user, password):
c = wmi.WMI(computer=computer, user=user, password=password, find_classes=False)
utilizations = [cpu.LoadPercentage for cpu in c.Win32_Processor()]
utilization = int(sum(utilizations) / len(utilizations)) # avg all cores/processors
return utilization


def get_mem_mbytes(computer, user, password):
c = wmi.WMI(computer=computer, user=user, password=password, find_classes=False)
available_mbytes = int([mem.AvailableMBytes for mem in c.Win32_PerfFormattedData_PerfOS_Memory()][0])
return available_mbytes


def get_mem_pct(computer, user, password):
c = wmi.WMI(computer=computer, user=user, password=password, find_classes=False)
pct_in_use = int([mem.PercentCommittedBytesInUse for mem in c.Win32_PerfFormattedData_PerfOS_Memory()][0])
return pct_in_use


def ping(host_name):
p = Popen('ping -n 1 ' + host_name, stdout=PIPE)
m = re.search('Average = (.*)ms', p.stdout.read())
if m:
return True
else:
raise Exception