El Domingo nos hackearon el servidor

El pasado Domingo 16 fue uno de esos días en que se te rompe el ordenador y sientes como una náusea permanente, sensación de disgusto que sólo se arregla cuando todo vuelve a funcionar. Es esa sensación que sólo un adicto a los ordenadores entiende y que tan bien se refleja en el episodio de Enjuto Mojamuto: El peor día de mi vida.

Bueno, el ordenador «roto» no era mío exactamente. Tampoco estaba roto. Algunos inútiles con mucho tiempo libre se dedicaron a localizar una vulnerabilidad en algún script del servidor que utiliza freniche.com de forma compartida con otros dominios (ésto último quiere decir que freniche.com comparte el mismo ordenador con otros muchos dominios, cosa que puedes comprobar por ejemplo en http://www.yougetsignal.com/tools/web-sites-on-web-server/). El caso es que, debido a esa vulnerabilidad pudieron escribir en los ficheros HTML de mi sitio. Y, claro, inyectaron HTML malicioso, de ese que descarga algo a tu ordenador sin que tú sepas nada, normalmente cuando usas un S.O. desde una cuenta con privilegios de administrador y con un navegador muy, muy integrado con ese S.O. Puedes evitar estos riesgos siguiendo unos sencillos consejos.

Tras toda la tarde del Domingo con el dominio regular, hice copia de seguridad de lo que pude y los chicos de Siteground restauraron la situación. Bueno, casi. El Typo3 que está en freniche.com sobrevivió sin problemas. El WordPress alojado en freniche.com/wp/ no se recuperó del todo. Esa ha sido la razón, entre otras, de mover el blog a un subdominio de freniche.com. Al final, el sitio que tienes ante tus ojos se llama (y espero que por mucho tiempo) blog.freniche.com.

j j j

Google – Shit Happens!

Pues eso, que Google también falla. Esta pantalla concretamente me ha aparecido al intentar importar un ISBN dentro de la biblioteca de Google, un nuevo servicio que te permite tener en línea tus libros (favoritos, o los que tienes).

 

El servicio se encuentra aún en su fase Beta, pero tiene ya muy buena pinta.

Google - Shit happens

j j j

Creando un fichero PDF a partir de varias imágenes

Hoy he tenido que montar un fichero PDF con páginas escaneadas de diferentes fuentes. Muchos programas de escaneo permiten crear directamente un único fichero PDF con las diferentes sesiones y páginas capturadas, pero éste no había sido el caso. Me habían pasado una carpeta con 103 ficheros en formato JPG.

Bueno, al menos el reto estaba claro: convertir uno a uno estos ficheros en PDF y luego unirlos. Bueno, un momento ¿porqué en este orden? Porque yo ya conocía la herramienta para unir varios PDF en uno: pdftk.

El caso es que abrí una terminal en mi Linux y pensé ¿cómo convierto de JPG a PDF?. Una búsqueda rápida en Synaptic me llevó a sam2p, un pequeño programa que convierte cualquier fichero en formato Raster (Bitmap) a PDF. Por ejemplo, convierte GIF, JPG/JPEG, y PNG a PDF y a PS (PostScript). Pero claro, convertir uno a uno…

Para eso se inventaron los bucles for. Un bucle for de la bash nos permite, entre otras cosas, iterar por una lista de ficheros aplicando la misma acción a los diferentes ficheros. Así, que, si vamos al grano bastará con hacer:

 for f in `ls *.jpg`;do  sam2p $f PDF: $f.pdf ; done

Esto recorre todos los ficheros que aparecen como resultado de hacer un ls *.jpg. En cada iteración la variable f toma el valor de uno de los nombres de fichero. Así que llamamos a sam2p, que convierte los JPG en PDF.

pdftk *.pdf cat output resultado.pdf

Y una vez que tenemos múltiples ficheros PDF, pdftk los une en uno llamado resultado.

j j j

Cómo abrir un fichero winmail.dat en Linux

Hoy he recibido un correo en el que venía adjunta una información en un formato que no había visto en mi vida. un misterioso fichero llamado «winmail.dat» se asomaba a mi Evolution y no daba señas de poder abrirse con nada. Lo copié en el Escritorio, pero nones. Si el correo hubiera venido de una fuente de la que no me fiase mucho, el ficherito (y el correo) conocerían los placeres de una redirección a /dev/null, pero como en este caso a) me fiaba del remitente y b) quería ver el contenido, pregunté al Oráculo de Apolo en Delphi escribiendo en mi navegador http://www.google.es.

En la primera búsqueda me encuentro con un post que describe qué son estos ficheros, cómo evitar enviarlos y, sobre todo, cómo leerlos si los has recibido. De las diferentes herramientas que aparecen para leer estos ficheros únicamente he prodado Fentum. Es una pequeña aplicación (descargaos la versión estática, esto es, incluyendo todas las bibliotecas que necesita para evitar problemas de incompatibilidades, total, ocupa 341 Kb) que, si la lanzamos desde una terminal, nos permite ver el contenido de los ficheros winmail.dat y extraer los ficheros que contienen.

Fentum Funcionando

Uso:

 ./fentunStatic winmail.dat

Muy pequeña, muy útil y sencilla de usar. Una pequeña joya.

j j j

Herramientas que estoy usando para conseguir el SCJP

Se podría pensar que para superar el SCJP, que a fin de cuentas no es más que un examen, bastaría con disponer de papel, lápiz, neuronas y cafeína en abundancia. Sin más misterios, lo más importante es estudiar, con todo lo que conlleva: entender, comprender, aprehender, memorizar, practicar…
Pero lo cierto es que estoy usando algunas otras herramientas, bien en la forma de libros, o de programas, que me están ayudando a conseguir alguno de los anteriores objetivos.

Libros

– en primer lugar me estoy leyendo los libros oficiales de Sun, correspondientes a los cursos SL-110: Fundamentals of the Java Programming Language, y SL-275 El lenguaje de programación Java. Estos libros, que en apariencia son muy sencillos y hasta inocentes, hacen hincapié en temas muy sensibles para la certificación. Por ejemplo, se deja caer que los Strings en Java son inmutables. Esta afirmación encierra mucho dolor si no se entiende, ya que el funcionamiento de los literales String y de la clase String es fundamental, tanto para programar con Java como para superar el SCJP.
– tras estos libros voy a pasar a leerme el libro de Kathy Sierra y Bert Bates, SCJP Sun Certified Programmer for Java 5 Study Guide. De momento lo he hojeado y tiene muy buena pinta, pero nada más.

– hoy he realizado la reserva de SCJP Sun Certified Programmer for Java 5 Practice Exams, para hacer exámenes por un tubo una vez acabemos con la teoría.

Un grupo de estudio

En Isotrol hay actualmente varias personas preparándose para obtener el SCJP. Pocas cosas motivan más a la hora de estudiar que hacerlo en grupo. Al compartir experiencias, uno pone el foco en algo que a los demás les ha pasado desapercibido, otro ha descubierto una web que merece la pena, un tercero dispone de unos apuntes o ejemplos geniales… La idea es disponer de una lista de correo, una página en la Wiki de Isotrol y tener reuniones periódicas para hablar de Java.

Programas

Por supuesto. Además del JDK y el vi, algo más vendría bién.

En primer lugar, para tomar apuntes, FreeMind es ideal. Una vez se acostumbra uno de nuevo a hacer esquemas, no puedes pasar sin él. Algunos ejemplos de los mapas, exportados a swf están en: apuntes SCJP
Por otro lado, el entorno Eclipse, para mi el único entorno para programar en Java (aunque NetBeans tampoco está mal)

Aunque no exactamente un programa (a fin de cuentas es un servicio), los Blocks de Notas de Google me ayudan a no olvidar enlaces interesantes para posterior lectura. Aquí tienes un enlace a mi block de notas de SCJP, oficialmente declarado zona de desastre.

Moodle. Además de ser una plataforma de e-learning, Moodle permite generar exámenes con preguntas aleatorias. Perfecto para ir apuntando cosas y luego repasarlas de forma divertida. Pronto dispondré de un Moodle operativo en freniche.com, con preguntas del SCJP. Por supuesto, será libre de usar, como el resto de la web.

Mi iPaq HW6915

Esta es mi gran baza para aprovechar el tiempo en el tren, en la espera de los desayunos, en cualquier sitio. Su capacidad de leer el correo, documentos en formato HTML / PDF / DOC y poder navegar por Internet le hacen el compañero ideal para estudiar arañando minutos al día.

j j j

Preparando el SCJP

Pues eso, que anuncio oficialmente 🙂 que estoy metido de lleno para prepararme el examen de Sun Certified Java Programmer, v5.0.

Después de varios años manejando Java y de un montón de cursos impartidos, tanto del Lenguaje Java como de J2EE (Servlets, JSP) y productos como Struts o Hibernate, creo que es hora de sentarme a estudiar de nuevo, consolidar los conocimientos, hacerme con un par de certificados y avanzar hacia nuevas tierras, probablemente Spring.

Realmente tengo la obligación de hacerme con el SCJP y con el SCBCD. Me explico. Desde Septiembre del año pasado (2007) estuve haciendo un curso a distancia (que acabó el pasado 14 de Diciembre) y que, si lo aprobaba, me permitia disponer de los vouchers para hacer ambos exámenes. Y ahora que tengo "pagados" los exámenes, esto hay que aprovecharlo.

Como tengo que estudiar voy a aprovechar para ir recopilando lo que encuentre y me parezca interesante para certificarse. Una cosa más que empiezo y probablemente no termine, pero igual a alguien le sirve. Todo irá tomando forma en la sección de Java de la web, concretamente en el apartado SCJP.

Espero aprobar. En este examen me juego mi reputación 🙂

j j j

¡Estan locos estos de SiteGround!

Hace ya un tiempo comenté que me había cambiado a SiteGround, entre otras cosas, por los 500 GB que ofertaban. Ahora, totalmente gratis y sin hacer nada, me han actualizado la cuenta y ¡dispongo de 750 GB de almacenamiento online!.

Si junto todos los discos duros que tengo por casa creo que no llego a los 3/4 de TB que tengo ahora online. Algo tendré que hacer con tanto espacio. De momento, he estado mirando cómo montar una carpeta ftp como si fuera local y, aunque es lento, permite manejar los ficheros de manera bastante cómoda.

Si quieres probarlo y tienes Ubuntu es fácil:

– te instalas curlftpfs (con Synaptic o con un apt-get install curlftpfs, como prefieras)

– montas la carpeta mediante algo como:

curlftpfs -o user=USERNAME:PASSWORD ftp://FTPHost/ MountPoint/

A partir de entonces dispones del espacio ftp en /MountPont/. Yo, para que vaya rápido, estoy usando un clásico, el Midnight Commander (mc). Las cosas buenas no pasan de moda…

j j j

Una de patrones de diseño

Me ha pasado AJSA de Isotrol un par de enlaces muy interesantes sobre Patrones de Diseño a los que he añadido otro par sacados de la lista I+D. Para los que no sepan de qué va esto, un Patrón de Diseño te muestra cómo diseñar (valga la repugnancia) el código de tu programa para hacer frente a un problema al que otras personas más sabias ya se han enfrentado. Es la reutilización pura y dura de las ideas, y no del código.

Bueno, no me enrollo más, mejor vete a leer los enlaces:

j j j

Thinking rock rocks!

Estrés (c) VillenaEs decir, que ThinkingRock «mola». Que está bien. Que me gusta. Que me erotiza, vamos.

Hay gente que cuando llega a casa del trabajo quiere, la vez, hacer deporte, ver una película, programar un rato, estar con los niños, arreglar un ordenador estropeado, probar otro antiguo que se acaban de comprar en un mercadillo, ordenar el despacho, leer unos tres libros de informática a la vez, etc, etc, etc ¡qué estrés!. Es entonces cuando te das cuenta de que quieres hacer más cosas del tiempo de que dispones.

Esto ha sido una constante en mi vida, desde que la recuerdo. Siempre queriendo hacer más cosas de las que me daba tiempo. La solución: desde tiempos inmemoriales he estado probando programas para gestionar mis tareas. He probado unos cuantos, con diferente éxito.

Etapa Notepad

Comencé con un notepad (o su equivalente vi en Linux). Los problemas de usar un fichero de texto para apuntar tareas son:

– que si vas borrando tareas completadas, el fichero mantiene un buen tamaño pero no puedes mirar atrás y decir: «he tenido que hacer todo esto para disponer de página web». Bueno, en ese caso casi es mejor…

– siempre puedes no borrar las tareas finalizadas y moverlas al final del fichero, pero entonces el fichero crece y crece y crece. Con los sistemas que tenemos hoy en día no es demasiado problema, pero buscar algo en el fichero… Vale, tengo grep en Linux, pero pensaba en algo un poco más cómodo…

– este tipo de tareas tienen una descripción y punto. Nada de categorizarlas, agruparlas por proyectos, etc.

Etapa Juan Palomo

En la época en la que dirigí mi propia empresa (Elelog, S.L.) David Ragel (con algo de mi ayuda, poca por cierto) desarrolló un gestor de tareas, bug tracker, time tracker y todo lo que se pueda pensar.

El programa permitía definir varios proyectos e ir asignando tareas a un grupo de programadores. Los programadores seleccionaban una tarea y al pulsar en ella el tiempo empezaba a contar. Existían unos botones para parar la cuenta y volverla a arrancar (por ejemplo, por si te ibas a tomar café). De esta forma se podía llevar un reparto bastante exacto del tiempo empleado en cada tarea. De la misma manera podíamos repartir los costes salariales de cada empleado y saber cuánto nos costaba crear un producto, o acabar un proyecto.

Este sistema exige una disciplina que, en parte, es un rollo, si no eres metódico, pero que es muy buena si lo eres. Si se usan bien estos sistemas, el tiempo gastado en cada tarea se apunta solo. Y, además, si cambiamos de tarea muy a menudo debido a interrupciones (propias o ajenas), como debemos pinchar en una nueva tarea (llamada interrupción), se puede calcular el tiempo que un grupo se interrumpe entre sí. Ya se sabe que en los grupos de trabajo se pierde tiempo en la interacción entre los diferentes miembros…

Por si alguien está pensando: «vale, eso está muy bien, pero ¿qué pasa si quedas con un cliente en una reunión fuera de la oficina, pones ese cronómetro estilo Gestapo a funcionar en el portátil?», el sistema también permitía introducir la duración de una tarea a posteriori, por si se te había olvidado encerlo, había fallado, etc. Bueno, fallar no fallaba nunca, nuestros productos eran los mejores 😉

Etapa Outlook: el calendario nos fustiga

Tras este super-sistema volver al Outlook y a su lista de tareas me parecía volver a la edad de la piedra. Pero esa fue la tecnología que tuve durante mi estancia como Freelance en Telefónica Sistemas.

Etapa DotProject

En una visita a Isotrol, antes de volver, probablemente alrededor de finales de 2004 me enseñaron un producto software libre, basado en web llamado DotProject. DotProject tiene casi todo lo que podía necesitar: interfaz web, posibilidad de definir muchos proyectos, asignar tareas a los proyectos, posibilidad de marcar las tareas en diferentes estados (acabadas, empezadas, verificadas, …), seguimiento del tiempo dedicado a completar las tareas, etc. Eso, junto con un sistema de informes bastante bueno. Vamos, que me gustó tanto que lo he tenido instalado en el portátil y en la etapa del Profesor Errante es lo que he usado para organizarme de curso en curso.

DotProject es el estándar actual en Isotrol. Una versión algo modificada para cumplir con las peculiaridades de Isotrol. Funciona muy bien para gestionar varios proyectos de desarrollo, pero tiene algunos puntos débiles para mi gusto:

– el interfaz no usa AJAX, ni ninguna técnica moderna (lo que los horteras llaman Web 2.0) para salvarte del ciclo petición-respuesta HTTP. Por eso, es un poco áspero de usar.

– las tareas jerarquizadas no funciona del todo bien. Hay veces en un proyecto que uno se encuentra con una tarea que puede dividir en sub-tareas. Eso aparece en DotProject como un árbol: la tarea grande (padre) se subdivide en tareas pequeñas (hijas). Los problemas vienen al ordenar, al copiar una tarea con hijas de un proyecto a otro, etc.

– DotProject creo que se adapta casi perfectamente al desarrollo software con varios proyectos cuando el objetivo es registrar: registrar tiempos, incidencias, etc. Si estuviera integrado con Subversion o CVS, es decir, si cada vez que subieras algo al repositorio añadiera una entrada automáticamente ya sería la pera.

Después de todo lo dicho, indicar que he dejado de usar dotproject. ¿Y porqué?. Porque gestionar el departamento de Formación se parece menos a llevar varios proyectos y más a gestionar el caos. Me llegan peticiones por correo, por teléfono, de forma verbal, peticiones de diferentes personas, con diferentes prioridades. Algunas generan muchas tareas, otras, pocas. Muchas de estas tareas exigen que las delegue (recuero de la noticia justo anterior que estoy yo solito en el departamento) y hay que recordar cuándo es necesario que estén terminadas. En este escenario, el registrar el tiempo empleado ya no me resulta tan necesario: yo imputo todas mis horas a un único proyecto que es gestionar la formación. Lo que si que necesito es algo que me ayude a gestionar el caos.

Momento Thinkingrock

Y es aquí donde aparece ThinkingRock. Ya se sabe, «cuando el alumno está preparado, aparece el maestro«, ¿te has enterado, pequeño saltamontes?. Thinking Rock es, como su logo indica, una piedra para aislarte del mundo y sentarte a pensar: «tengo quinientas tareas que llevo retrasadas de las cuales doscientas tenían máxima prioridad, me esperan para los próximos días otras cien tareas, no quiero estresarme, pero ese informe debe estar terminado para mañana y yo estoy jugando a Call of Duty 2: Big Red One en la Play 2, y debo leerme el correo electrónico, que tengo 100 mensajes sin leer en la bandeja de entrada, por no hablar del correo postal sin abrir y ¡Dios!, se me olvidó que mañana tengo 15 reuniones, 4 de ellas en los puntos cardinales de las estaciones del Monopoly y, y, … ¿me tiro de la roca y acabo con mi sufrimiento

Thinking Rock

Si este es un problema al que te estés enfrentando, es decir, muchas peticiones que vienes de diferentes sitios, ThinkingRock realmente te ayuda a organizarte. Sus características:

  • Es un programa Java de escritorio. Doble ventaja: al ser Java lo puedes ejecutar en Linux, Win, Mac OS X y cuando exista un JRE adecuado, en Amiga OS. Los programas de escritorio son fáciles de manejar: Drag & Drop, Copy & Paste, etc.
  • Esto también es un inconveniente: ThinkingRock es una roca solitaria, como todos los escenarios previos al suicidio. No tiene interfaz web y no está pensado para grupos de trabajo, al menos que yo sepa.
  • Su funcionamiento te ayuda a pensar: primero te creas un fichero de datos vacío, en el que defines unos datos maestros: unas categorías o etiquetas, para clasificar tus tareas o pensamientos y unos contextos. Los contextos son los lugares donde vas a resolver una determinada tarea. Luego podrás agrupar las tareas por contextos y decir «¿qué tareas tengo que hacer en la oficina? ¿Cuáles en casa del cliente?. ¿Y en mi casa?».
  • Cuando estos datos maestros están rellenos, pasamos a dar de alta pensamientos. Los pensamientos no son más que líneas, junto con una descripción o una URL de cosas que se nos pasan por la cabeza que debemos hacer. O cosas que nos piden y no sabemos qué hacer con ellas. Como paso previo, todo correo electrónico que llegue por la mañana, toda llamada de teléfono o toda reunión crea un conjunto de estos pensamientos.
  • Cuando uno tiene un rato se retira a pensar a su «roca» y procesa los pensamientos haciendo una de tres cosas: o bien los borra, porque realmente ya está hecho, o no necesita de una tarea, o lo anotamos como algo que «estaría bien hacer», pero no es imprescindible hacerlo ahora, o es algo que requiere de una acción genuína, en cuyo caso es Actionnable.
  • Las acciones se pueden agrupar en proyectos. Un proyecto puede tener muchas tareas y éstas se pueden organizar jerárquicamente. Las tareas son de cuatro tipos: Inactivas, Delegadas, Planificadas o Urgentes.
  • Las tareas Delegadas son probablemente la aportación más importante de TR a este mundo de gestores de tareas. Muchas veces hemos encargado algo a alguien y dependen muchas tareas de que esa tarea en concreto se termine a tiempo. Apuntarla como una tarea propia no parece la mejor solución, ya que yo no voy a hacer eso, pero necesito que se haga. Para ésto, nada mejor que delegar la tarea y apuntar la fecha en la que se debe comprobar si está o no acabada.

Otras soluciones

Evidentemente quedan otras soluciones. Como MS Project. He impartido algunos cursos de Project, así que conozco un poco la herramienta. El problema de Project es que está pensado para gestionar empresas de la construcción, y no de programas precisamente, sino de las que construyen con ladrillos.

Si tenemos en una empresa de construcción una tarea, por ej. pintar una casa, es lógico pensar en los pintores como recursos intercambiables. Si pongo a dos pintores en paralelo, tiene sentido que acabe en la mitad de tiempo. Pero llevar esto al extremo nos lleva a la típica cita: «no por asignar a nueve mujeres a un embarazo se tiene a un niño en un mes». Agregar recursos no siempre acelera las cosas, más que nada porque los recursos no son intercambiables cuando hablamos de informáticos: uno puede ser un crack con la BD, pero no saber nada de Java y viceversa.

j j j

Be water…

De anuncios inteligentes y frikismo informático (geekismo) va la cosa

Hace un tiempo una marca de automóviles (no recuerdo la marca ni el modelo, la verdad) estuvo emitiendo un anuncio en el que aparece Bruce Lee hablando de La Creación de la Forma sin Forma, del Jeet-Kune-Do, el estilo de lucha que inventó Bruce Lee y que mostraba en sus películas. Digo estilo de lucha y no Arte Marcial porque el objetivo último del Jeet-Kune-Do es obtener una forma efectiva de lucha mientras que el objetivo último de un Arte Marcial es construir mejores personas. Este objetivo, que aparece en muchas otras facetas de la vida (las religiones, el deporte, las teletiendas, los préstamos de los bancos que nos hacen tan felices, los anuncios de compresas,…) se consigue en la Artes Marciales mediante una práctica que inculca valores como: respeto, humildad, paciencia, esfuerzo, piedad, etc. Bueno, que me pierdo. Algún día hablaré más sobre las Artes Marciales, o mejor sobre una en particular, el Shorinji Kenpo.

Pero volviendo a lo que comentaba al principio, el texto del anuncio es algo como:

Empty your mind, be formless, shapeless…

like water

If you put water into a bottle it becomes the bottle,

If you put water into a teapot it becomes the teapot…

Water can flow, or can clash

Be water my friend…

Esto de poner a Bruce Lee hablando de filosofía cuasi-Zen para vender un coche es lo que ahora se llama publicidad inteligente. Es decir, se larga un anuncio con un chino hablando en inglés en España (probablemente el país de Europa donde menos Inglés se hable), sin explicar ni subtitular nada y se espera que se entienda que comprándote un coche determinado ya no te adaptas a la carretera, sino que eres la carretera. Esperemos que nadie aplique el mismo razonamiento a los anuncios de papel higiénico.

El caso es que ha llegado a la lista de I+D un envío con el siguiente texto, que los iniciados en C entenderán a la primera:

Empty your memory, with a free()…

like a pointer!

If you cast a pointer to a integer, it becomes the integer,

if you cast a pointer to a struct, it becomes the struct…

The pointer can crash…, and can Overflow…

Be a pointer my friend…

Para el resto, símplemente comentar que los informáticos cada vez somos más geeks (por cierto, un geek es un friki en versión informática).

j j j