jueves, febrero 25, 2010

Manipular el inicio o apagado en Windows

Ponte en situación: Hay una aplicación en el curro que guarda datos sólo en discos locales. Lo utilizan a diario y no tu sistema de backups sólo backea servidores.

¿Que podemos hacer?
Pondremos una tarea programada que guarde los datos a red a una hora determinada.
¿Y si el usuario apaga el PC?

Manipula el apagado Windows para que haga el backup o lo que quieras en el apagado.

Esto sirve tanto para apagar como para arrancar.

Lo vamos a hacer entrando en la DIRECTIVA DE EQUIPO LOCAL.

Vamos a botón de INICIO, EJECUTAR, y ejecutamos: gpedit.msc

Luego entramos en CONFIGURACIÓN DE EQUIPO, CONFIGURACIÓN DE WINDOWS:


Y ahí podemos indicar el fichero de comandos que queremos ejecutar tanto al cerrar como al arrancar windows.

Por defecto esos scripts se dejan en esta carpeta:



Documentación oficial: http://technet.microsoft.com/es-es/library/cc783802%28WS.10%29.aspx

Portal especializado en Scripts Windows de todo tipo: http://labmice.techtarget.com/scripting/default.htm

Saludos.

martes, febrero 23, 2010

Programita de las 8 reinas con programación estructurada


El problema de las ocho reinas lo presenté a finales de 2008 aunque entonces lo llamé de las ocho damas.

Es un problema que vamos a utilizar para comparar una programación estructurada con la programación funcional.

Importante: Como lenguaje de programación estructurada he elegido visual basic.net por claridad. Podría haber cogido cualquier otro, y también, aún en visual basic podría haber elegido la programación orientada a objetos.

Para la programación funcional elijo el típico lisp. Pero cuidado, puedes utilizar lisp como si fuera un lenguaje de programación estrucuturada, y eso sería un error porque no veríamos diferencias entre uno y otro.

Os recuerdo la historia de este problema: Es un problema que planteó un ajedrecista al gran Gauss. Éste encontró 76 soluciones por lo que no llegó a las 92 soluciones que encuentra el programa.

Se trata de encontrar las 92 formas diferentes de colocar 8 reinas en un tablero de ajedrez sin que se amenacen entre ellas.

SOLUCIÓN

Lo vamos a hacer a lo bruto. A base de estructuras "FOR" encadenadas recorremos todas las posibilidades.

La variable A representa la columna 1, la B la columna 2, y así hasta la 8.
Si A=1 significa que la reina está en la primera fila de la columna 1.
Si A=2, la reina está en la segunda fila de la columna 1.

Lo primero es evitar que las diferentes columnas puedan tener los mismos valores. Esto es, A tiene que ser diferente de B, y de C, etc. Así evitamos que las reinas estén en la misma fila.

Cada letra (o sea cada columna) sólo tiene un valor. Así se asegura que en cada columna sólo hay una reina.

Por último tenemos que saber si en la combinación que obtenemos tenemos alguna amenaza de reinas en diagonal. Esta es la parte más difícil del algoritmo.

Hay que mirar un tablero y ver qué se cumple cuando dos reinas están en diagonal, y qué se incumple cuando no están.

Pues resulta que aquellas reinas que se amenazan en diagonal están a la misma distancia en horizontal que en vertical. Si esto no se cumple no se amenazan.

Llevado al algoritmo sería algo así como:

Por cada reina que tenemos colocada, comparamos con el resto de reinas y vemos si la distancia entre las columnas es igual que la distancia entre las filas. Cuidado, la distancia se mide en valor absoluto.
Así queda el programita en vb.net:






RESULTADO:


Y el código fuente para un cómodo copy-paste:

Module Module1
Sub Main()
Dim a, b, c, d, e, f, g, h, i As Integer
Dim resultado(8) As Integer
Dim numResultados, columna As Integer
numResultados = 0
For a = 1 To 8
For b = 1 To 8
If a <> b Then
For c = 1 To 8
If c <> a And c <> b Then
For d = 1 To 8
If d <> a And d <> b And d <> c Then
For e = 1 To 8
If e <> a And e <> b And e <> c And e <> d Then
For f = 1 To 8
If f <> a And f <> b And f <> c And f <> d And f <> e Then
For g = 1 To 8
If g <> a And g <> b And g <> c And g <> d And g <> e And g <> f Then
For h = 1 To 8
If h <> a And h <> b And h <> c And h <> d And h <> e And h <> f And h <> g Then
resultado(1) = a
resultado(2) = b
resultado(3) = c
resultado(4) = d
resultado(5) = e
resultado(6) = f
resultado(7) = g
resultado(8) = h
If Not coincide_diagonal(resultado) Then
numResultados = numResultados + 1
imprimir(resultado)
Console.Write(" ")
End If
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
Next
Console.WriteLine()
Console.Write("Número total de soluciones :" & numResultados.ToString)
Console.ReadKey()
End Sub

Function coincide_diagonal(ByVal propuesta() As Integer) As Boolean
Dim i, j As Integer
coincide_diagonal = False
For i = 1 To 7
For j = i + 1 To 8
If Math.Abs(i - j) = Math.Abs(propuesta(i) - propuesta(j)) Then
coincide_diagonal = True
End If
Next
Next
End Function
Sub imprimir(ByVal res() As Integer)
Dim i As Integer
For i = 1 To 8
Console.Write(res(i))
Next
End Sub
End Module

lunes, febrero 22, 2010

Cuando utilizar LISP

He encontrado un buen artículo sobre la conveniencia de utilizar el lenguaje LISP para resolver problemas con algunas características concretas. Recordad que junto con FORTRAN es uno de los lenguajes más antiguos de todos, y que todavía hoy en día tiene buena salud. Me ha parecido que está muy bien.

http://www.lispworks.com/products/myths_and_legends.html


Saludos.

sábado, febrero 20, 2010

Nueva etiqueta: NAVEGADORES

Voy a abrir una nueva etiqueta llamada "navegadores". Básicamente es para localizar rápidamente los complementos y opciones más útiles allá donde me encuentre.

No sé si se utiliza más el término explorador, navegador, browser, pero por reconocimiento a aquel primer (primero que utilicé yo) netscape navigator he decidido poner "navegadores".

Si quieres recordar como comenzó internet para nosotros...
http://aitoreus.blogspot.com/2009/08/tecnologia-en-expansion.html

y como continuó en la era post mosaic...
http://aitoreus.blogspot.com/2009/08/la-era-post-mosaic.html


Hoy empezamos con: MHT para FIREFOX.

Puede ocurrir que alguna vez guardáramos o nos hayan pasado un ficherín mht que queramos abrir con Firefox. O simplemente queremos guardar lo que estamos viendo rápidamente y sin complicaciones.

Tienes dos complementos disponibles:

El primero sólo genera MHT. En cambio el segundo tiene un formato específico que debe comprimir más. Yo me instalo el UnMHT y a correr.

La forma de uso es muy sencilla. En lugar de ir a Archivo, Guardar como... hay que ir a Herramientas, UnMHT,...

Saludos.

martes, febrero 16, 2010

Hombre prevenido vale por dos (y la mujer lo mismo)

Alguna vez he comentado como cambiar la password de Administrador de Windows.

Hay una forma mejor, y es resetear fácilmente la password que se ha olvidado. Para ello podemos hacer un disco para resetear la contraseña.

Puede ser un disquete, un pendrive,..., un dispositivo extraíble. Lo tenemos disponible en diferentes versiones Windows. Pondré los pantallazos del XP que tengo abierto ahora mismo.

  1. Vamos al botón de Inicio, Panel de Control.
  2. Seleccionamos Cuentas de Usuario.
  3. Entramos en un Usuario Concreto (recomendable que sea un Administrador por razones obvias).
  4. Clic en "Prevenir el olvido de contraseñas".
Este es el asistente que saldrá (siempre que haya conectado algún dispositivo extraible):


Cuidado: Creo que se cargará el contenido del dispositivo.


Y así ya estamos prevenidos para cuando nuestro amigo, familiar, o quien sea que sea el melón, olvide la contraseña.

Buena noticia: Da igual las veces que cambie la contraseña. Con el dispositivo se podrá resetear fácilmente.

Mala noticia: Cualquier persona que consiga el dispositivo podrá resetearla sin problemas.

La peor noticia: Cualquier persona a la que dejemos el PC un momentito podrá crearse el disco reseteador sin consentimiento y utilizarlo en el futuro.

Saludos.

domingo, febrero 14, 2010

Retromadrid 2010

Ayer estuvimos de carnaval, así que hoy no tengo el ánimo necesario para pegarme con el teclado. Eso sí, ya que hubo quien me preguntó por la noche, voy a publicar cuatro datos de la siguiente edición de RETROMADRID el 13 de marzo de 2010.


Y este el sitio web oficial: www.retromadrid.org

Si habéis mirado las fotos del sitio del 2009 habréis visto que la cosa estaba un poco "apretada". En esta edición se va a celebrar en la Facultad de Informática de la Universidad Complutense así que nos aseguran que habrá más espacio y medios técnicos.

Algunas de las actividades:
  • Taller educativo con videojuegos tanto para adultos como para niños. Para este taller habrá una sala con capacidad para 160 personas. Se dispondrán juegos clasificados por décadas (80, 90, 00).
  • Cafetería con máquinas arcades y de pinball de los 80.
  • Charla "La historia de las videoconsolas".
  • Presentación del juego "Invasion of the zombie monsters" (8 bits).
  • Retransmisión en directo del programa radiofónico "game over".
  • Charla "The Legend of Zelda. Un enfoque literario.
Respecto al alojamiento la organización ha conseguido ofertas especiales para los asistentes por lo que si buscáis hotel echad un vistazo a la web oficial.

Saludos y a ver si se anima mucha gente...

miércoles, febrero 10, 2010

Pequeños fallos de Perl


Perl me gusta mucho, pero a veces tiene cosas que te pueden volver loco.

Hoy quería sacar un listado a partir de la salida del comando cacls en un servidor Windows. Era un servidor que ofrece una carpeta compartida. Este comando sirve entre otras cosas para obtener un fichero con todas las carpetas y ficheros de una unidad y los usuarios que tienen permisos de acceso.

La especialidad del lenguaje Perl es el tratamiento de ficheros de texto para listados. Recordad que PERL se ha asociado en algunos momentos a Practical Extraction and Report Language. Vamos, que es el lenguaje adecuado para lo que quería.

En 1998 compré un libro de PERL5 llamado "Perl al descubierto".
En ese libro explicaban la forma de utilizar la función split de la siguiente forma:

"La función split se usa para separar los elementos que es´tan en la cadena $cita y ponerlos en el arrray @palabras":

@palabras = split(' ',$cita);

A ver, en condiciones "normales" la cosa funciona bien, pero yo quería separar las líneas del fichero por un texto que incluía un carácter especial que era la contrabarra: \

Pues os puedo asegurar que la contrabarra no iba ni por el forro. Lógicamente al ser un carácter especial para Perl, hay que poner por delante otra contrabarra (dos contrabarras). La cosa más o menos era así:

@cachos = split(' texto1\\texto2',$linea);

Pues esto no funciona. Tanto en la versión vieja del curro, como en mi mac mini el error es parecido: "Trailing \ in regex m/\/ at cachos.pl line 2". (regex se refiere a Regular Expresion).

En Perl, cuando se utilizan cadenas en expresiones regulares hay que utilizar las dobles comillas en lugar de la comilla simple. Sobre todo es imprescindible lo de las comillas dobles para que reconozca los caracteres especiales. Pero la siguiente instrucción devuelve exactamente el mismo error:

@cachos = split("texto1\\texto2",$linea);

Al final, buscando en la red, que era lo primero que tenía que haber hecho, encuentro la solución que es una sintaxis diferente de la misma función:

@cachos = split(/texto1\\texto2/, $linea);

La versión de Perl utilizada en el servidor era la 5.8.0. La versión de Perl de mi mini mac (Mac OSX Leopard comprado el año pasado) es 5.8.8. (¡¡¡En 10 años casi no ha evolucionado!!!). Los resultados han sido iguales tanto en el servidor como en el mac OSX.

Si se mantiene la anterior sintaxis por compatibilidad hacia atrás, el interprete podría haber mostrado un warning como hacen otros lenguajes.

Si se mantiene para tener diferentes formas de llamada a esa función, pues muy bien, pero que la funcionalidad ofrecida sea la misma en los dos casos.

Saludos.

domingo, febrero 07, 2010

El percherón mortal


Como muchos de vosotros siempre leo algo todas las noches antes de quedarme dormido en la cama. Puede ser un ensayo, un comic, una novela, un libro técnico o una hojas impresas. El tiempo que me quedo leyendo suele ser muy variable. Pueden ser 2 minutos, o como me ha pasado con el último libro tres horitas cuando al día siguiente tenía que ir a trabajar.

Eso es lo que tienen los libros que enganchan, que como los buenos juegos son adictivos.

"El percherón mortal" (The Deadly Percheron) es una novela de un autor muy poco conocido como es John Franklin Bardin (1916-1981). Tan poco conocido que al parecer ni siquiera lo conocen muchísimos aficionados a la novela negra.

Se escribió en 1946 y aunque el campo de la psiquiatría ha podido ampliarse mucho desde entonces, te conmoverá todo el conocimiento que plasma el autor.

Desde el comienzo hasta el final la trama te sorprenderá. No puedo decir más.

Saludos.

martes, febrero 02, 2010

Z520 vs N270


Mi amiga Bo necesita un portátil a ser posible ligerito porque viaja mucho. Me pregunta por dos modelos concretos. Voy a darle el consejito, pero por supuesto se admiten sugerencias.

Ha mirado un poco lo que hay y le gustan dos modelos (que conste que a mí no me gustan tan pequeñitos):

1.-ASUS EEE PC 1001 HA. Me dice que viene con Windows 7 y cuesta 269 euros.
2.-ACER ASPIRE ONE 751. No me dice el S.O., aunque en el enlace que me ha enviado pone que Windows XP Home Edition. Bo me indica que la diferencia con el anterior son 30 euros, pero no me dice si más barato o más caro :-(

Esto es lo que dicen las cifras:

Pantalla Asus: 10,1 pulgadas.
Pantalla Acer: 11,6 pulgadas.

Peso Asus: <>
Peso Acer: 1,25-1,35 kg dependiendo de la batería que lleve.

Procesador y placa Asus: Intel Atom N270 de 1.6 GHz.
Procesador y placa Acer: Intel Atom Z520.

Disco duro Asus: 160 Gb.
Disco duro Acer: 160 Gb.

Memoria Asus: 1024 Mb DDR2.
Memoria Acer: DDR2 667/800 MHz 1Gb.

La chuleta para comparar los procesadores: http://ark.intel.com/ProductCollection.aspx?familyID=29035

Viendo estos datos yo te diría esto, Bo:

1.-La pantalla del Acer es mayor. No sé si esto es mejor o peor para tí. Mirando las medidas veo que el Acer es más ancho y largo, pero algo más fino que el Asus (muy muy poco).

2.-El procesador del Asus (N270) es ligeramente diferente al del Acer (Z520) y tienes que entender las diferencias para elegir el que prefieras.

  • En principio son de la misma fecha (2008).
  • Los dos tienen 1 core (nucleo) y 2 threads.
  • El Z520 funciona a 1,33 GHz en lugar de los 1,6 GHz del N270. Esto confunde un poco a la gente que puede pensar que el Z520 es inferior. Digamos que la ventaja de que funcione con una frecuencia menor es que consume menos watios y por lo tanto se calienta menos y las baterías duran más.
  • El Z520 trabajo con menos voltaje (0,75-1,1) que el N270 (0,9-1,1625).
  • Los dos incorporan tecnología Hyper-threading.
  • El Z520 incorpora Virtualization Technology (VT-x) y el N270 no. Esto a ti te da igual, pero para un informático puede ser importante. Aquí hay una lista de programas "especiales" que requieren el Intel VT o AMD-V.
  • El Z520 tiene "Idle States" y el N270 no. Esto sí te puede interesar cuando tiras de batería y el PC está bastante tiempo con poco uso. Se trata de entrar en la BIOS del aparato y activar un estado de bajo consumo. Me imagino que el procesador "tirará" menos, pero la batería durará más.
  • El z520 tiene una cosa llamada "Intel Demand Based Switching" y el N270 no. No creo que lo vayas a utilizar. Se trata de forzar por software una mayor frecuencia de reloj para mejorar el rendimiento del procesador. Lógicamente aumentarías el consumo.
3.-Con estas cosas que te he dicho creo que te estarás decantando por el Acer, pero tienes que tener en cuenta la última cosa: A mí me daría igual si no tuviera Sistema Operativo, si trajera un Linux, si viniera con XP, Vista,... Pero si vas a comprarlo con Windows creo que a estas alturas deberías elegir algo con el 7.

El Asus me decías que venía con Windows 7, pero en el enlace que me has pasado el Acer viene con XP. No creo que cueste mucho encontrarlo actualizado.

Saludos, y ahora sí, me tienes que decir que pone en el letrero Chino ese que me has regalado.