Acortadores de direciones

¿Qué sacaran estas empresas?

El funcionamiento parece es el siguiente. Estás escribiendo en twitter y quieres poner un enlace a una página de un artículo de un foro. Compruebas que la dirección ocupa casi los 140 caracteres que te permite twitter ¿Qué hacemos ahora?

Podemos dejar se usar twitter porque no nos gusta la limitación de 140 caracteres. Esto indicaría que no lo hemos usado mucho, porque si has leído algunos mensajes en twitter, ves direcciones muy cortas del tipo: http://is.gd/guNm, http://tinyurl.com/85jlv4. ¿Cómo se consiguen estas direcciones cortas?

Bueno, podemos visitar alguna, vamos a probar con http://is.gd. Aqui aparece un textbox para copiar la dirección larga y un botón, menos mal, parece que no hay que registrarse. Le ponemos por ejemplo: http://seriecanal.com/foro/viewtopic.php?t=3200&postdays=0&postorder=asc&start=0 y nos la deja en: http://is.gd/gvvI. Comprobamos la dirección y ¡funciona! Bueno, ha tardado un poco, porque ahora tiene que hacer un salto más: preguntarle a is.dg, y que éste la busque en su base de datos y nos reenvíe a la original.

Bueno, pues ya tenemos la dirección corta, sin tener que registrarnos, y encima no saca publicidad al redireccionar. Que curioso. ¿Y entonces como se costean estas empresas?

Pues no se, vamos a leer un poco las las condiciones y terminos de uso. Limitaciones, bla bla bla. Garantía, ninguna, es un servicio gratuito y no tiene ninguna garantía. ¿Y la política de privacidad?

Anda, no recogen ninguna identificación personal, pero si guardan la dirección larga que le suministramos, lógico, si no no sé como iba a redireccionar. Anda, pero si también guardan nuestra ip, la resolución, el navegador que usamos. Pero se olvidan de poner que también pueden recoger información sobre las últimas direcciones visitadas con nuestro navegador, programas instalados,… ¿No te lo crees? Pásate por http://browserspy.dk/ y haces algunas pruebas. También recogen los mismos datos de las personas que usan las direcciones cortas.

Y volvemos a la primera pregunta. ¿Como se financian estas empresas? ¡Si no tienen nada de publicidad?

Pues a me da que va a ser de los datos recogidos. También puede que estén engordando sus bases de datos por si algún comprador le hagan una oferta tentadora. ¿Pero para qué van a querer esas bases de datos?

Bueno, seguro que con tantos datos pueden hacer algún tipo de análisis estadísticos que se puedan vender. Además, si tienen muchas direcciones tienen mucho control. Imagina que dejan de ofrecer el servicio, o lo ponen de pago. Todas las direcciones cortas creadas en esta empresa: las que hay en twitter, en los blogs o en cualquier sitio, dejan de funcionar. O sea, twitter pierde casi toda la información; busca ahora la dirección larga partiendo de la corta. Los enlaces no sirven de nada porque no nos llevan a ninguna parte. Bueno, podrían llevarnos a cualquier parte, porque las direcciones cortas nos redireccionan a donde “ellas” quieran y cuando “ellas” quieran.

Sigue tú pensando cosas, que yo ya me voy a la cama. Pero parece que estas empresas tienen una inversión a corto y largo plazo. Y el que dependa mucho de ellas lo tienen bien cogido.

PD. Esto son sólo elucubraciones mías. Pero ¿Quien sabe?

3Com OfficeConnect y syslogd en FreeBSD

Recientemente el router que tenía murió y ya.com me ha enviado otro. El modelo es 3Com OfficeConnect ADSL Wireless 11g Firewall Router ya.com

Navegando por las páginas de configuración del router vi que se podían mandar los log a un servidor, y como tengo un servidor con FreeBSD intenté configurarlo para que recibiera los logs que le enviaba el router.

Después de algunas pruebas y buscar por la red, los ficheros que tuve que modificar fueron:

En /etc/rc.conf la linea syslog_flags="-ss" para que querada como syslog_flags="-a 192.168.0.1".
(De esta manera le estamos diciendo a syslogd que va a recibir logs desde dicha IP)

En /etc/hosts añadí 192.168.0.1 router router (192.168.0.1 es la dirección del router).
(Le ponemos nombre al router)

En /etc/newsyslog.conf añadí /var/log/router.log 640 5 100 * Z
(Para mantener fichero con un tamaño máximo de 100k)

En /etc/syslog.conf añadí las lineas:
+router
*.* /var/log/router.log
(Para especificar el fichero donde guardará los logs que vengan del router)

En la consola, y como root cree el fichero con: #touch /var/log/router.log y le mandé un HUP al syslogd para que se reiniciara: #kill -HUP "pid de syslogd".

Ahora, en /var/log/router.log puedo ver los mensajes que envia el router. :-)

Unir dos avis y sus subtítulos

Es bastante normal obtener una película en divx en dos ficheros de 700Mb cada uno y con dos dicheros de subtítulos.

Este valor de 700Mb viene de cuando sólo había CDr. No se por qué se siguen partiendo como si se fuesen a grabar en un CD, cuando hoy en día lo mas normal es grabar en DVD, puesto que el precio del DVD es parecido al del CD, teniendo más capacidad.

Pero como tengo que unir una película con subtítulos que viene partida en dos ficheros, pues lo añado a la lista de cosas que hice para recordarlo.

Antes de unir el video voy a unir los subtítulos y luego se podrá ver por qué.

El programa usado para unir los subtítulos es Subtitle Workshop 2.51. Un programa freeware muy completo.

Para unir los subtítulos nos vamos al menú Tools y seleccionamos Join Subtitles.
Con el botón Add añadimos los ficheros a unir.
Seleccionamos el primer fichero y pinchamos en el botón Set movie fragment para que recalcule los tiempos del segundo fichero de subtítulos conociendo la duración del primer fichero. (Si hubiesemos unido antes el video y hubiesemos borrado los ficheros originales no se podría haber hecho esto).
Seleccionamos el formato de fichero de subtítulos que queremos y pulsamos en Join! para generar el fichero unido (cambia el nombre al fichero para no borrar el original).

Ya tenemos los subtitulos unidos, ahora vamos a unir el video. El programa que vamos a usar es el VirtualDubMod, también gratuíto.

Nos vamos al menú File y pinchamos en Open video file... para seleccionar el primer fichero avi. Después volvemos al menú File, pero ahora pinchamos en Append segment....
Ahora vamos a guardar los dos avis en un solo fichero, y para eso volvemos al menú File y pinchamos en Save As....
Le ponemos el nombre al fichero que vamos a generar con los dos avis y al final de la ventana, en Video mode seleccionamos Direct stream copy, puesto que no vamos a recomprimir.

Ya tenemos los ficheros de subtítulos y los avis unidos. Ahora sería conveniente que probaramos los ficheros que hemos generado. Yo suelo probar el punto de unión, porque en alguna que otra union no lo ha unido bien porque los ficheros no estaban bien cortados.

Minimizar una aplicacion cuando otra es minimizada

Lo que necesito hacer es minimizar una aplicación escrita en C# cuando otra aplicación es minimizada.
Buscando información me topé con los HOOKS (ganchos). Con un hook se pueden procesar los mensajes que envían otras aplicaciones antes de que dichas aplicaciones respondan al mensaje. Es un rutina que se instala en el sistema y supervisa el tráfico de mensajes del sistema.
Hay 3 tipos de hook:
System hook: Intercepta mensajes del sistema.
Local system hook: Intercepta mensajes de un thread.
Global system hook: Intercepta mensajes de cualquier aplicación del sistema.

Con C# no es posible crear los gobal hooks. Se pueden crear, pero se necesita una dll en C++ que tendrá la función para procesar los mensajes.

Enlaces interesantes:
http://www.codeproject.com/csharp/globalsystemhook.asp
http://msdn.microsoft.com/msdnmag/issues/02/10/cuttingedge/
http://www.dotnetinterop.com/samples.aspx

Que hacer con un Pendrive USB

Me han regalado un dispositivo de almacenamiento USB.

¿Qué hacer con él?

Se puede usar para tener aplicaciones sin necesidad de ser instaladas y que pueden funcionar en cualquier ordenador. En los siguientes enlaces se pueden encontrar cientos de estas aplicaciones:

The Portable Freeware Collection
Portable App

Pero lo que quiero es meter un sistema operativo y arrancar el ordenador desde el USB.

Se puede arrancar un Knoppix, pero la información que he encontrado es para hacerlo desde Linux: http://www.knoppix-es.org/?q=knoppix-usb

Otra página interesante es http://www.vnunet.com/personal-computer-world/features/2152896/pocket-office?page=1

Mapas en el Móvil

Pensando en como crear un mapa en un fichero jpg para visualizarlo en un móvil encontré algo mucho más avanzado:

Un programa para poder navegar por los mapas desde el móvil o PDA y las utilidades necesarias para generar los mapas, partiendo de los mapas de google maps.
El programa es gratuito y se llama Movile GMaps. Permite visualizar mapas de distintas fuentes como Google maps y Yahoo! maps entre otros.
La aplicación se conecta a Internet y permite navegar por los mapas desde el móvil. También puede usar el GPS del dispositivo o conectarse a uno externo mediante Bluetooth.
Si no queremos conectarnos a Internet, también permite leer los mapas desde la caché del programa, que podemos configurar su localización en la configuración del programa.

Para generar un mapa y cargarlo en la caché del Movile GMaps hay que seguir los siguientes pasos:

1) En www.mapcacher.com marcamos la zona de la que queremos obtener el mapa junto al tipo de mapa, la calidad y los zoom que queremos tener disponibles. Hay que tener en cuenta la limitación del espacio que tengamos en el dispositivo. En este punto generamos un dichero .map que contiene la información que usaremos en el siguiente punto.

2) Mediante la aplicación para Windows gMapMaker (de código abierto y en C#) descargamos los datos de la zona que se ha marcado en el punto 1. Le indicamos el directorio donde generar el mapa, cargamos el fichero .map antes generado y a descargar.

3) Copiamos la carpeta generada al dispositivo. Ejecutamos Movile GMaps y lo configuramos para que la cache apunte a la carpeta con el mapa.

Ya podemos navegar por el mapa y hacer zoom.

Aquí se describe uno de los varios métodos posibles y usando la aplicación para Windows, hay también script en Perl para generar el mapa.

Para una descripción más detallada puedes visitar el siguiente artículo.

Tip 12: Make It Easy to Reuse - Hazlo fácil de reutilizar.


Para evitar la duplicación hay que facilitar la búsqueda y uso de la información. Si es fácil de encontrar y usar, se usará y no se duplicará.

Utilidades de Windows

¿Cuantas veces se ha quedado un archivo abierto y no sabes cual es la aplicación
propietaria?

En los sistemas linux se encuentra el comando fuser, con Windows viene el comando de consola net file pero muestra los ficheros abiertos por una conexión de red.

Pero no es que Windows no tenga algo parecido, parece que no viene por defecto y tenemos que descargar la aplicación.

- Process Explorer. Con esta aplicación puedes comprobar los ficheros que está usando una aplicación.

- Handle. Es un programa para la linea de comandos que muestra todos los ficheros abiertos, entre otras cosas.

Hay muchas aplicaciones para comprobar como está funcionando Windows que no vienen con el sistema. Se puede encontrar una lista bastante amplia denominada Windows Sysinternals

Ahora también se pueden usar desde la web desde live.sysinternals.com, así nos aseguramos de que usamos la última versión disponible.

Control de Versiones: Etiquedas y Ramas

Las ramas y las etiquetas pueden tener muchos usos y por eso se puede hacer complicado su uso.

Las etiquetas se usan para marcar el proyecto cuando está en un determinado estado.
Las ramas representan una bifurcación en la historia del proyecto.

Deberíamos usar una rama cuando lanzamos una versión del producto o por ejemplo cuando vamos a implementar funciones experimentales. Cada release brach puede tener varias releases o puntos donde la aplicación fue puesta a disposición del cliente. Estos puntos de marcan con las etiquetas.

Los bugs se fijan en la release branch correspondiente y el cambio se fusiona en las restantes ramas. Si el bug es complicado se puede crear una rama y luego fusionarla con las restantes ramas. Nota: El programa SourceOfSite no dispone de opciones para fusionar ramas.
Se usan etiquetas para marcar el comienzo y el final del bugfixing.

Para decidir si necesitamos una rama tenemos que pensar que esa rama deberá ser mantenida, es decir, que habrá que modificar algún fichero y fusionarla con las otras ramas en un futuro. Si no se va a mantener una rama es mejor usar una etiqueta. Tampoco es buena idea crear una rama para una modificación especifica de la aplicación para un determinado cliente. Esto habría que hacerlo la propia aplicación.

Control de Versiones

¿Qué es?
Es un software que facilita el trabajo de un programador.
  • Se podría considerar como el deshacer de un editor de textos pero para el código fuente.
  • Permite a múltiples programadores trabajar sobre el mismo código de manera controlada.
  • Mantiene un registro de los cambios realizados.
  • Permite llevar múltiples versiones del código mientras se continua trabajando sobre dicho código.

¿Qué se debería guardar?
Para saber que debemos guardar en el repositorio haz la siguiente pregunta: ¿Si no tengo una versión actualizada de x, ¿podría compilar, probar y distribuir la aplicación? Si la respuesta es no, entonces x debe guardarse en el repositorio.

Además de los ficheros anteriores, también se debe guardar cualquier cosa que ayude a entender la aplicación, ya sea documentación interna o externa, el texto de los correos electrónicos que hayan sido importantes en el desarrollo de la aplicación, información,....

No se deben guardar los ficheros que se pueden generar con ficheros ya existentes, por ejemplo: la documentación que generamos mediante la documentación incluida en el código fuente usando herramientas auxiliares.

Tags - Etiquetas
Es un nombre que se asigna a un conjunto de ficheros en un estado determinado del proyecto. De este modo podemos recuperar esos ficheros tal y como estaban en ese momento.

Branches - Ramas.
Se llama Trunk a la rama principal del código donde se trabaja normalmente. Es decir, los ficheros del repositorio donde hacemos los cambios diariamente.
Pero, si estamos próximos al lanzamiento de la aplicación, no podemos añadir más funcionalidad pues esa funcionalidad será para una futura versión, y seguramente no estará termianda para el lanzamiento de la aplicación. Entonces, lo que podemos hacer es crear una rama que contendrá el código fuente para una determinada versión de la aplicación. Es lo que se conoce como release branch.

Cuando creamos una rama tenemos 2 proyectos con un futuro distinto para cada uno de ellos. De esta manera tenemos el código de la aplicación que vamos a lanzar y el de la futura versión perfectamente diferenciados.
Si después del lanzamiento de la aplicación se encuentran fallos se corregirán en la rama correspondiente, así podemos generar la misma versión con los fallos corregidos, y esos cambios para reparar el bugs en la release branch se fusionan con la rama principal o trunk branch.

En general, un proyecto tendrá una rama principal (trunk), y por cada lanzamiento podemos añadir otra rama (release branch). Una release branch no cambia mucho durante su vida, sólo para corregir los fallos que se puedan encontrar.

Los cambios significativos en la vida de un proyecto se marcan amenudo con etiquetas. Una etiqueta podría contener el código usado para lanzar una determinada versión de la aplicación.

Merging - Fusionando.
Esos cambios se deben añadir también a la rama principal para que estén corregidos en la próxima versión.
Se pueden fusionar los cambios hechos para fijar el error en la rama correspondiente con la rama de la siguiente versión sin usar el copiar y pegar.
Mantener el código entre las distintas ramas puede ser complicado, por eso es recomendable no tener muchas ramas.

Logs
Cuando un fichero es modificado y puesto en el repositorio se puede añadir una nota. En esa nota no se explica el cambio realizado, ya que este se puede obtener al ver las diferencias entre los ficheros. Lo que debemos poner en el log es el por que se ha realizado el cambio. Si el cambio es para fijar un bug se debe poner la identidad del bug en la aplicación que usemos para llevar el control de errores.