Announcing Debloat: a new open source project for data compression
I'm happy today because I can finally announce my latest project, Debloat.
Debloat is an Enterprise-ready, extensible Java data compression/decompression framework. It supports many different compression algorithms and data encoding formats that can be plugged in as needed, using simple configuration files written in XML, or programmatically using a very simple, intuitive DSL. Debloat is Open Source and available under the terms of the Apache License 2.0.
The typical problem with data compression algorithms is that the output they produce often consists in opaque binary blobs, which nobody can inspect to see what's inside, and it's very hard to write tools that can operate on those blobs. Debloat solves that by using a new codec that produces easily parsed, human-readable XML files!
For example, assume you would like to compress the following string:
Trololololo lololo lololo.
A regular compression library would produce something that perhaps looks like this:
▼ï◘┘üöO♥♂)╩╧üB♣¶JÅ♂ê╝P!←You can see that this is a complete opaque bag of random symbols corresponding to various binary values. However, Debloat produces well-formed output that looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<compressedData algorithm="lz77">
<byte value="84"/>
<byte value="114"/>
<byte value="111"/>
<byte value="108"/>
<reference distance="2" length="7"/>
<byte value="32"/>
<reference distance="7" length="13"/>
<byte value="46"/>
<byte value="10"/>
</compressedData>Undoubtedly, this format has many, many advantages for Java Enterprise applications respect to the opaque binary blob.
I hope you try Debloat out and post your feedback on Google+! I have many ideas for the next few versions of Debloat, hopefully they'll be released soon!
Guaranteed compression
A few eons ago I was a member of a network called Fidonet, which had an echoarea (the equivalent of a mailing list) dedicated to file compressors. As I was fascinated by them at the time, I was naturally a subscriber.
Every once in a while someone would come in and ask if there could be a compressor that were guaranteed to compress the input data by at least one byte. The response was invariably that no, there couldn't be one, and the argument was based on the pigeonhole principle: if there were such a compressor, you could use it to compress some data, then use it on the compressed data to compress it even more, and so on until you are left with a byte, which would mean that there are only 256 possible distinct files in all of the Universe. This is clearly absurd, so there can't be such a compressor.
While I agree with the conclusion, I find the argument unsound, so let's explore it with the help of a close cousin of this compressor everyone asked about.
There is a compressor that is guaranteed to either produce an output the same size of the input, or produce an output one bit smaller than the input. This compressor simply interprets the input data as a big binary number and subtracts 2 from it. The corresponding decompressor is also very easy: just interpret the input data as a big binary number and add 2 to it.
It is easy to prove that the compressor will always produce an output file that is either the same number of bits as the input file, or 1 bit smaller. Therefore, you can use the compressor, get an output file, use the compressor on the output file, get a new output file, use the compressor on the new output file, and so on until you get a file that only contains 1 bit that can be 0 or 1. According to the argument above, this would mean that only two documents exist in the whole Universe; however this is clearly not true, so what's the catch?
The catch is that we can't reconstruct the original document with the compressor's output alone (the 0 or 1 bit). We need more information to do that: we need to know how many times we applied the compressor so we can apply the decompressor an equal number of times to reconstruct the original file. So let's add the number of compression operations to the last compressed file. How big is the resulting file?
The compressor works by subtracting 2 from the number we interpret the input file as. If I apply the compressor once, I will have subtracted 2; if I apply it twice, I will have subtracted 4 from the original file; if I apply it 1000 times I will have subtracted 2000. To get a single bit I need to apply the compressor enough times that the original file minus twice the number of applications is 0 or 1. That means that, if I call the original file "i", the ultimately compressed bit "c" and the number of compressions "n", I have that i=2*n+c.
Therefore, to compress the input file i you will need n operations, and n is one half of i. You will now need to append the number n to the output of the last compression step to be able to reconstruct the original file. The input file i has b bytes, and n is one half of i, so n has b-1 bytes. Therefore, you will have to store 1 bit for the compressed data, plus b-1 bits for n, which amounts to b, which is the length of the original file!
So yes, while it is not true that being able to reduce a file to 1 bit or 1 byte by successive compressions means that there are only 2 or 256 files in the Universe, it is still true that doing so will be of no benefit.
Comments are welcome — on the Google+ post.
La carta de presentación
Ahora que os he mostrado cómo es un currículum para EEUU/UK, llega el momento que todos estábais esperando: cómo escribir la carta de presentación ("cover letter", en inglés).
Como mencioné antes, deberíais adjuntar una carta de presentación cada vez que enviéis un currículum. No confundáis la carta de presentación con una carta de recomendación: la carta de presentación la escribís vosotros mismos, y sirve para decirle a la persona que reciba el currículum por qué deberían tener en cuenta vuestra candidatura.
A grandes rasgos, una carta de presentación tiene una extensión de una carilla como máximo y consta de tres partes: a qué puesto optáis, por qué sois perfectos para el puesto, y por qué queréis el puesto. La carta de presentación es, como su propio nombre indica, una carta, así que no pongáis encabezados y listas de puntos y negritas y cosas de esas.
Si estáis enviando el currículum por correo, adjuntad la carta de presentación en el mismo sobre y no la grapéis al currículum. Si lo estáis enviando por email, mandad el currículum en un fichero adjunto y usad el cuerpo del email para la carta de presentación. Si podéis averiguar quién recibirá la carta de presentación será mucho mejor si la encabezáis "Dear Mr. Smith" que si la encabezáis "Dear Sir/Madam". Por cierto, aseguraos de utilizar una dirección de email "seria"; aunque tengáis que emplear webmails gratuitos, es mejor usar "francisco.paredes@gmail.com" que "erpisha23@gmail.com", y mejor "carolinacf@hotmail.com" que "preziossa89@hotmail.com".
Antes de enseñaros un ejemplo de carta de presentación, permitidme reiteraros que el objetivo de la carta de presentación es que la persona que recibe el currículum sepa que no va a perder su tiempo leyendo vuestro currículum, y para eso deberéis hacer énfasis en los beneficios que proporcionará a la empresa contrataros. Al fin y al cabo, las empresas no contratan gente para tener más amigos, sino para poder ganar más dinero, así que tenéis que "atacar" por ese lado.
(De hecho, si os fijáis en el currículum de ejemplo, veréis que se sigue la misma filosofía a la hora de describir la experiencia laboral. El trabajador del ejemplo describe cómo ha rescatado un proyecto o cómo ha reducido costes el 20% o cómo ha dirigido un equipo, no cómo ha formado parte de un equipo formado para estudiar la posibilidad de implementar una recomendación para un proyecto exploratorio).
Y una última reflexión: para variar, estos consejos para la carta de presentación no son sólo válidos para optar a empleos en EEUU o el Reino Unido. Si preguntáis a alguien que trabaje en RR.HH. de una empresa española os dirá que todos los días les llegan un montón de currículums "desnudos" o con cartas de presentación poco atractivas. Seguramente, si comenzáis a enviar vuestros CV acompañados de cartas de presentación en este estilo, vuestros CV destacarán más. Haced la prueba y decidme si resulta :-)
Dicho todo esto, en el enlace de "leer más" podréis ver una carta de presentación, enviada por correo acompañando al currículum de ejemplo. El autor quiere trabajar de ingeniero jefe de software en una empresa británica llamada "Super Company".
Tened en cuenta que este ejemplo es algo más corto que una carta de presentación normal porque, honestamente, tener que inventarse todos los detalles es un peñazo :) Pero bueno, podéis utilizarlo para haceros una idea de qué tipo de cosas se dicen en una carta de presentación; cuando tengáis que escribir la vuestra, simplemente buscad "cover letter example" en Google y usad lo que os salga para inspiraros.
Podéis escribir vuestros comentarios en Google+.
Un currículum de ejemplo para EEUU, Reino Unido o Irlanda.
Hace poco más de un año escribí una historia sobre cómo redactar un currículum para enviarlo a una empresa de EEUU, Reino Unido o Irlanda (aprovechando que los formatos para los tres países eran casi iguales). Lo que ese artículo no incluía eran ejemplos, y alguien me los ha pedido, así que voy a poner aquí un ejemplo recién inventado de résumé para el Reino Unido. Como comenté en el artículo anterior, el résumé americano sería prácticamente igual, salvo que en lugar de un "Profile" tendría unos "Objectives".
Espero que os sirva para redactar vuestro propio currículum. Recordad que, cuando lo enviéis, deberíais acompañarlo de una carta de presentación, de la que os daré un ejemplo otro día.
Podéis poner vuestros comentarios en Google+, que aquí siempre se me echan los spammers encima cada vez que abro una nueva historia con comentarios.
Emigrar sí, pero con sentidiño
Vais a hacer que me sienta culpable, cojones. Que resulta que bastante gente se pira con lo puesto a Noruega, sin un euro en el bolsillo, sin conocer a nadie, sin trabajo ya buscado y sin hablar una palabra de noruego, y resulta que se mueren de frío porque no tienen casa, ni trabajo, ni saben hacer papeleos, ni saben encontrar nada, etc. Qué cosa más rara.
Como he hecho mi parte para animaros a que salgáis del país, ampliéis horizontes, tengáis experiencias en el extranjero, etc., etc., y antes de que venga nadie a acusarme de haberle pintado todo de color de rosa, dejadme deciros algunas verdades sobre la emigración.
En primer lugar, emigrar cuesta dinero. Para empezar está el coste del avión. Cuando queráis alquilar piso, tendréis que depositar la fianza, que puede ser de varios meses de alquiler. Mientras no encontréis el piso, sin embargo, tendréis que pagar un alojamiento temporal; posiblemente varios meses, que si encontrar un piso asequible en una buena ubicación es difícil, conseguir que se lo alquilen a un extranjero recién llegado sin referencias ni historial crediticio es más difícil todavía. Y, por supuesto, tened en cuenta que tendréis que hacer frente a muchos de estos gastos sin tener ingresos, ya que la mayoría de los empleos pagan a mes vencido. O sea, que si ya llegáis allí con un contrato hecho, no cobraréis hasta el fin de mes. Si llegáis sin contrato, tardaréis en cobrar lo que tardéis en encontrar empleo más un mes.
En segundo lugar, cada país es diferente a los demás, y tiene sus propias costumbres, leyes, tradiciones, e idiosincrasias en general. En Francia, el Hôtel de Ville no es para dormir. En EEUU, el pan, los huevos y la leche se compran en la farmacia. En el Reino Unido no te sirven en la mesa de un pub. Si no sabes esas cosas, o si no estás acompañado de alguien que las sepa, lo vas a pasar un poco mal. Y si no hablas el idioma local, ya no digamos.
El idioma es otro asunto que trae tela. En muchos países hay mucha gente que sabe hablar inglés, pero eso no significa que todo el mundo hable inglés, y mucho menos que sea perfectamente posible desenvolverse hablando sólo inglés. Para empezar, los papeles del Estado vendrán todos en el idioma local (buena suerte rellenando la declaración de la renta en islandés), al igual que los letreritos del supermercado o las indicaciones en la estación de trenes. En segundo lugar, no puedes esperar que la cajera del supermercado o el funcionario del ayuntamiento hablen inglés a un nivel adecuado para comunicarse con efectividad. Y si tú mismo no hablas inglés o hablas "inglés medio", apaga y vámonos.
Por cierto, si esperas ganarte la vida en el extranjero, espero que seas un trabajador cualificado, porque estoy seguro de que en Noruega y en cualquier otro sitio ya les sobran los trabajadores no cualificados, y no tienen la más mínima intención de contratar de reponedor a un extranjero que no habla una sola palabra de noruego cuando pueden contratar a Karl Petersson, el hijo de la vecina. Y tened cuidado, que os sorprendería saber cuántas profesiones no valen mucho fuera de España. En España las casas son de ladrillo. ¿Sabéis de qué son en Noruega? De madera. ¿Qué puede hacer en Noruega un albañil español?
Y esto es lo que quería deciros. No quiero desanimaros, pero quiero que seáis realistas y sepáis a lo que os enfrentáis cuando os vais del país, que aunque es una experiencia tremendamente enriquecedora (en varios sentidos), no todo es tan fácil y bonito como nos lo ponen en ciertos programas de TV, y no es cuestión de ir a lo loco y sin haberse informado y preparado de antemano.
Cómo calcular raíces cuadradas
Un día se me ocurrió publicar un articulito sobre el fundamento matemático del método para calcular raíces cuadradas usando lápiz y papel. Desde entonces me llega un montón de visitas de gente que quiere saber cómo calcular una raíz cuadrada (supongo que les da igual por qué funciona el método si no saben cómo emplearlo, ¿no?). Por lo tanto, he decidido escribir este artículo explicativo.
Para empezar, vamos a ver cómo calcular la raíz cuadrada de un número de una o dos cifras. Por ejemplo, calculemos la raíz cuadrada de 71:
![]()
Esto es fácil: simplemente tenemos que hallar el número más alto, del 0 al 9, que multiplicado por si mismo nos dé 71 o menos. En este caso, el número que buscamos es 8, ya que 8x8=64, que es inferior a 71, y 9x9=81, que es superior a 71. Además, la operación tiene un "resto" que vale 7, ya que 71-8x8=7. Todo esto lo escribimos de esta manera:

Fácil, ¿no?
Pues ahora vamos a ver cómo se calcula la raíz cuadrada de un número de más de dos cifras. Por ejemplo, el 71.492:
![]()
El primer paso consiste en dividir el número en grupos de dos dígitos, comenzando por la derecha:
![]()
A continuación, calculamos la raíz cuadrada del grupo de más a la izquierda:

En este caso hemos calculado la raíz cuadrada de 7, que es 2 con un resto de 3.
A continuación "bajamos" el siguiente grupo de dos dígitos y lo ponemos a la derecha del resto:

En el siguiente paso multiplicamos nuestra solución parcial por 2 (siempre por 2) y ponemos el resultado (4) en una nueva fila de la columna de la derecha:

Ahora viene la parte más complicada del cálculo. Tenemos que buscar un dígito de 0 a 9 para añadir a la derecha del 4, lo cual nos dará un número de dos cifras. Ese número de dos cifras, multiplicado por el dígito que hemos buscado, nos dará un número que tiene que ser igual o inferior a 314, que es el número que tenemos después de "bajar" el siguiente grupo de cifras. El dígito más alto que encontremos será la siguiente cifra de la solución.
Veamos un dibujo para hacerlo más claro. Imaginad que "X" es un dígito de 0 a 9 y que "ABC" es el resultado de multiplicar "4X" por "X":

En este caso, el dígito que buscamos es 6, porque 46x6=276, que es inferior a 314, y 47x7=329, que se pasa de 314:

El resto es 38.
Ahora tenemos que, como antes, bajar el siguiente grupo de cifras y también multiplicar la solución parcial por 2 y añadir el resultado a la columna de la derecha:

Y, como antes, tenemos que buscar un dígito, concatenarlo al "52", multiplicarlo por el resultado, y procurar que el resultado sea igual o inferior a 3892:

Y, como podéis ver, la raíz cuadrada de 71492 es 267, con un resto de 203. Podemos comprobarlo fácilmente, calculando 267x267=71289, y 71492-71289=203.
Fácil, ¿no?
Algunos os preguntaréis cómo se pueden calcular las cifras decimales de la raíz cuadrada. Es decir, si usamos una calculadora, ésta nos dirá que la raíz cuadrada de 71492 es 267,3798... ¿cómo se pueden calcular estas cifras decimales con lápiz y papel?
La respuesta es muy simple: sólo tenéis que "bajar" grupos de dos ceros y seguir calculando la raíz cuadrada hasta que os canséis. Por ejemplo, aquí veis cómo he calculado las dos primeras cifras decimales:

Otra pregunta que algunos os haréis es: ¿cómo se calcula la raíz cuadrada si el número que nos dan tiene decimales? La respuesta es simple: cuando dividáis el número en grupos de dos cifras, en lugar de empezar por la derecha, empezad por la coma decimal. Si el grupo de más a la derecha se queda con una sola cifra, completadlo con un cero. Después, simplemente calculad la raíz cuadrada como siempre, acordándoos de poner la coma en el resultado cuando alcancéis la coma en el número original.
Y esto es todo de momento. Espero que esta explicación os haya sido útil y hayáis encontrado lo que buscábais.
Simetría lateral
Un experimento fácil de hacer para el que tenga un poco de familiaridad con software de retoque fotográfico:
- Sacaos una foto de vuestra cara, completamente de frente;
- recortadla a lo largo del eje vertical de vuestra cara y separadla en dos mitades;
- para cada mitad, hacedle una copia e invertidla de derecha a izquierda (como un espejo);
- pegad cada mitad a su correspondiente copia invertida, formando así dos caras.
Nadie tiene la cara completamente simétrica, así que los resultados suelen ser interesantes.

Si alguna vez me van a clonar usando de ejemplo una foto de un lado de mi cara, ya sé qué lado quiero que usen. Uno de estos dos macizos tiene una gran carrera en el mundo del cine. El otro es John Cleese cuando aún no tenía bigote.
Qué ocurre con mi voto
He aquí las últimas novedades sobre mi intento de votar en las próximas elecciones generales.
Como ya habéis podido leer, a finales de agosto descubrí que mi inscripción en el CERA no se había actualizado cuando fui a registrar mis mudanzas, así que aún tenía mi primera dirección en Dublín. Me puse en contacto con el consulado para enviarles los datos actualizados, pero éstos entraron en el censo de octubre, mientras que para las elecciones se usa el de julio, así que hace un par de semanas tuve que ir a San Francisco a hacer la reclamación al censo electoral.
El siguiente paso es enviar un impreso a la delegación provincial de A Coruña de la oficina del censo electoral. Este impreso, en teoría, me lo mandan a casa y luego tengo que enviarlo de vuelta firmado y acompañado de una fotocopia del DNI, para lo cual tengo el 22 de octubre de plazo. Ayer me llegó una carta de la oficina del censo electoral, así que fui a la oficina de correos a recogerla. Sin embargo, no era el impreso de marras, sino una confirmación de que habían estimado mi reclamación (aunque copiaron incorrectamente el número del apartamento -- menos mal que parece que el cartero se sabe mi nombre y ha dejado el aviso en mi buzón).
Como ya me conozco el percal y ya sé que este impreso no llegará hasta después del plazo (si es que llega), lo he descargado y cumplimentado yo mismo y lo he enviado directamente por fax a la susodicha oficina del censo electoral (en la web del proceso electoral dice que se admite el envío por fax).
Ahora, en teoría, me deberían enviar las papeletas y toda la documentación para que yo pueda ejercer mi derecho al voto. Espero que no ocurra como en las últimas elecciones gallegas, que las papeletas no llegaron hasta que ya era demasiado tarde para ello (me parece percibir un patrón). Ya os contaré qué ocurre.
No voy a votar al PP ni al PSOE (pero no por los motivos que piensas)
El censo electoral en España es permanente. Esto quiere decir que se mantiene un censo que recibe actualizaciones constantemente, en lugar de hacer un censo nuevo cada cierto tiempo. Aún así, el 1 de cada mes se "cierra" el censo con las actualizaciones recibidas durante el mes anterior. Cuando hay elecciones, el censo que se utiliza es el cerrado en el segundo mes anterior a la convocatoria. Si no me equivoco, tienen previsto publicar la convocatoria de las próximas elecciones generales el día 27 de setiembre, con lo que se utilizaría el censo cerrado el 1 de julio.
Cuando un español se va a vivir al extranjero ha de ir a registrarse a la oficina consular correspondiente; al mismo tiempo, le añadirán al CERA, que es el censo de los españoles que viven en el extranjero. Cuando me fui a vivir a Irlanda acudí a la embajada, y allí me dieron de alta en el CERA. Un tiempo más tarde me cambié de piso y di aviso del cambio de dirección. Algo más tarde todavía me vine a EEUU, y también fui al consulado a registrarme.
Podéis imaginar la sorpresa que me llevé la semana pasada cuando fui a la web del INE para revisar mis datos del CERA y vi que seguía figurando con mi primera dirección irlandesa. Es decir, que no actualizaron mi inscripción en el censo cuando fui a registrar mi cambio de dirección en Irlanda ni cuando fui a registrarme en San Francisco.
He enviado los correspondientes impresos para actualizar mi dirección en el CERA, y anteayer me dijeron que ya han actualizado mis datos en el censo. Estos datos saldrán en el censo del 1 de octubre, que es después de la convocatoria y, por lo tanto, no voy a poder votar en las próximas elecciones.
(Los españoles residentes en el extranjero tenemos un obstáculo más a la hora de votar: en la reciente modificación de la ley electoral se han sacado de la manga que los votantes tienen que enviar una solicitud para poder ejercer su derecho al voto, utilizando un formulario que se les enviará antes por correo. Me disculparéis que me entre una sonrisita cínica al recordar que en las últimas elecciones de la Xunta de Galicia mis impresos y papeletas de votación se retrasaron tanto que, cuando al fin llegaron, ya no tuve tiempo para enviar mi voto).
Añadido: parece que mi lectura de la normativa electoral no fue lo suficientemente profunda y no me di cuenta de que, viviendo en el extranjero, mi circunscripción electoral está separada de mi lugar de residencia. Como en periodo de reclamaciones no admiten cambios en la circunscripción, pensaba que esto significaba que mi cambio de consulado tampoco lo admitirían y querrían que votara en Dublín. Sin embargo, aunque he cambiado de país de residencia (y, por lo tanto, ahora trato con un consulado distinto), sigo votando en Santiago de Compostela, con lo que mi circunscripción electoral no ha variado, y, en teoría, deberían admitir mi reclamación cuando la presente. Ya os diré qué tal.
Respeto por decreto
Estos días estuve pensando, lo cual es peligroso, en el asunto de los colegios profesionales para ingenieros en informática, y me he dado cuenta, por fin, de uno de los motivos por lo que ese tipo de organizaciones me dan tan mala espina.
He estado mirando en las webs de varios de esos colegios, y uno de los temas que se repiten continuamente es el del respeto. “Para que se respete nuestra profesión”, “que se nos dé el respeto que merecemos”, etc., etc. (No son citas literales, ojo).
Sin embargo, el respeto por decreto no existe. Por ejemplo, el principal objetivo de la SGAE es, ostensiblemente, que se respete a los autores y editores. Ya me diréis cuánto éxito tiene esa organización, y cuánto respeto reciben Alejandro Sanz o Ramoncín cada vez que la SGAE cobra el 10% de la recaudación de un recital benéfico. Del mismo modo, no puedo imaginarme qué puede hacer un colegio profesional para “hacer que se respete la profesión” sin conseguir que mis posibles clientes me desprecien más. “Oiga usted, que para hacer este trabajo tiene que contratar por ley a un ingeniero informático colegiado” no es forma de ganarse el respeto de nadie.
El respeto no se obtiene con leyes. El respeto se gana día a día, en el trabajo y tratando con los clientes, jefes y compañeros de trabajo. Una persona que hace un mal trabajo no es respetada. Una persona que no es capaz de hacerse valer no es respetada. Una persona que trata mal a sus compañeros o subordinados no es respetada. Siendo una persona como es debido, haciendo un buen trabajo y exigiendo lo que mereces; así es como uno se gana el respeto de los demás. Y lo demás son tonterías.
Comentarios recientes
28 semanas 2 días ago
29 semanas 3 días ago
29 semanas 3 días ago
29 semanas 6 días ago
29 semanas 6 días ago
29 semanas 6 días ago
30 semanas 4 horas ago
30 semanas 8 horas ago
36 semanas 1 día ago
36 semanas 1 día ago