Como sabéis aprovechando las vacaciones quiero darle un empujón a scala, así que desempolvando los apuntes de programación y sobre todo siguiendo el magnífico Scala by example he literalmente copiado este trozo de código que es oficialmente lo primero que escribo en este lenguaje. Lo único que me queda es animaros para que le metáis mano que es muy interesante.
Busca en simplementeJava
sábado, 13 de agosto de 2011
jueves, 10 de marzo de 2011
Apple también se pelea con los encodings

Mirad la captura del correo de confirmación de envío que me ha llegado.
Por cierto, el encoding detectado por el navegador es UTF-8. Fijo que es un problema de la plantilla.
miércoles, 2 de marzo de 2011
Swing Examples
La verdad es que, aunque haya acabado haciendo casi de todo en el mundo java, mis primeros desarrollos fueron aplicaciones pesadas swing. Por aquella época recuerdo que encontré esta página en la que algún alma caritativa fue incluyendo varios ejemplos con los distintos controles que nos ofrecía swing.Probablemente esté mas que desfasado, pero la verdad es que me ha alegrado que dentro de la volatilidad de internet la página siga existiendo; y además estoy seguro de que alguno de los ejemplos que se incluyen todavía pueden ser útiles... si es que alguien sigue trabajando con clientes pesados ;)
domingo, 20 de febrero de 2011
Regular Expresion Library
Ya sé que me estoy poniendo pesado con esto de las expresiones regulares, pero creo que vale la pena que os traiga la página RegExLib. Por lo que se ve estos chavales pensaron que es un rollo tener que pensar desde cero cualquier expresión regular que necesites, de forma que se les ocurrió montar un repositorio de expresiones regulares de forma que nos evitemos tener que inventar la rueda cada vez. La página además cuenta con un buscador para ayudarnos
a encontrar la expresión regular que nos interesa en cada momento.Un detalle más, si os interesa demostrar vuestra admiración por las expresiones regulares en esta página podéis adquirir por 20$ una camiseta con la imagen que acompaña a esta entrada.
sábado, 19 de febrero de 2011
Regular Expresion Tester para Firefox
Gracias a mi compañero Atmosphear_ he conocido este pequeño este pequeño add-on para firefox que nos permite evaluar expresiones regulares con las cadenas que queramos y nos indica cuando cumplen la expresión y cuando no.Lo podéis descargar desde esta ruta o simplemente buscando 'regular expresion tester' en el gestor de añadidos de firefox.
Espero que os sea tan útil como a mí.
viernes, 18 de febrero de 2011
Expresiones regulares
Sinceramente creo que esta es una de las herramientas más interesantes de las que se dispone para el tratamiento de textos. Para quien no las conozca las expresiones regulares son ‘fórmulas’ que validan textos siguiendo una serie de sencillas reglas, la notación es bastante simple una vez que te acostumbras y la potencia es realmente increíble. Ahora sí, requiere algo de experiencia y construir la expresión con bastante cuidado, ya que esta misma potencia hace que pequeños cambios provoquen grandes diferencias en los resultados.
Si os interesa el tema en esta página hay toda la información sobre expresiones regulares que podáis necesitar. Si las estáis estudiando ahora mismo en la ingeniería mucho ánimo, como he comentado antes es de lo más interesante que os van a enseñar, así que no desaprovechéis el esfuerzo.
Pero... ¿qué son exactamente? Pues básicamente definen patrones de texto. Normalmente se utilizan para comprobar que un texto de entrada coincide con el patrón definido para el mismo. Por ejemplo, para un ejemplo sencillo podemos construir una expresión regular que nos valide una cadena compuesta solo por letras que empieza por mayúscula y después tiene un número indeterminado de minúsculas:
Como veis es bastante simple. Además la clase String de java nos proporciona el método matches que nos indica si la cadena coincide con la expresión regular pasada por parámetro. Así el código java para comprobar si nuestra cadena coincide con el patrón definido sería:
Como veis este ejemplo es en realidad bastante sencillo, pero plantearos la siguiente pregunta: ¿cómo tendríamos que hacerlo sin usar una expresión regular? ¿Cuántas líneas de código y posibilidades de error nos llevaría una solución ‘programática’?
Esto tiene muchísimas utilidades, desde validaciones simples como la del ejemplo, búsquedas en textos, creación de lenguajes de programación y sus compiladores, … Pero creo que el mejor ejemplo nos lo proporciona la siguiente viñeta de xkcd.
Si os interesa el tema en esta página hay toda la información sobre expresiones regulares que podáis necesitar. Si las estáis estudiando ahora mismo en la ingeniería mucho ánimo, como he comentado antes es de lo más interesante que os van a enseñar, así que no desaprovechéis el esfuerzo.
Pero... ¿qué son exactamente? Pues básicamente definen patrones de texto. Normalmente se utilizan para comprobar que un texto de entrada coincide con el patrón definido para el mismo. Por ejemplo, para un ejemplo sencillo podemos construir una expresión regular que nos valide una cadena compuesta solo por letras que empieza por mayúscula y después tiene un número indeterminado de minúsculas:
^[A-Z]{1}[a-z]*$
Como veis es bastante simple. Además la clase String de java nos proporciona el método matches que nos indica si la cadena coincide con la expresión regular pasada por parámetro. Así el código java para comprobar si nuestra cadena coincide con el patrón definido sería:
...
private static final String PATRON = “^[A-Z]{1}[a-z]*$”;
...
String cadenaAValidar = …
if (cadenaAValidar.matches(PATRON)) {
...
}
else {
...
}
...
Como veis este ejemplo es en realidad bastante sencillo, pero plantearos la siguiente pregunta: ¿cómo tendríamos que hacerlo sin usar una expresión regular? ¿Cuántas líneas de código y posibilidades de error nos llevaría una solución ‘programática’?
Esto tiene muchísimas utilidades, desde validaciones simples como la del ejemplo, búsquedas en textos, creación de lenguajes de programación y sus compiladores, … Pero creo que el mejor ejemplo nos lo proporciona la siguiente viñeta de xkcd.
jueves, 10 de febrero de 2011
Eclipse Orion: Desarrollo web en la web
El mes pasado el equipo de desarrollo de Eclipse nos sorprendió en esta entrada de su blog con la última vuelta de tuerca de su IDE. Esta nueva versión se llamará Orion siguiendo con la estrategia de nombrar las versiones como distintos objetos celestes.¿Cuál es la sorpresa de esta nueva versión? Pues simplemente que en lugar de tener un IDE pesado instalado en nuestras máquinas nos proponen el uso de un IDE ligero que se ejecutará en nuestro navegador.
A simple vista las ventajas son evidentes: no hay mantenimiento, se supone que necesitará menos recursos de la máquina, las actualizaciones son literalmente automáticas,... además como curiosidad va mucho en la línea de los desarrollos para Google Chrome OS. Además promenten que el IDE funcionará con las diferentes pestañas del navegador ofreciendo una experiencia de uso tipo 'web'.
Pero tranquilos, antes de que os pongáis a buscar en que web está disponible esta fantástica herramienta ya nos indican que no está acabada. De hecho apelan a nuestro corazoncito de desarrolladores para que entendamos que el proyecto es muy grande y que esperan construirlo a base de las aportaciones de toda la comunidad Eclipse.
La verdad es que miedo da pensar en desarrollar algo tan complejo como un IDE en javascript para que funcione en todo tipo de navegadores y de una experiencia de uso mínimamente agradable. Además creo que las desventajas también son evidentes, habrá que ver cómo se comporta cuando la carga de trabajo sea grande, si para acceder a él tendremos que usar un servidor de pago, cómo podremos realizar nuestras pruebas usando servidores de aplicaciones, ...
En resumen una idea curiosa que puede ser un grandísimo éxito o un enorme fracaso.
sábado, 5 de febrero de 2011
Pequeña clase para traducir ficheros
Como sabéis me llevo unos días peleando con las codificaciones de caracteres de los ficheros. Para mis pruebas he montado una pequeña clase que convierte un fichero en un encoding en otro con el mismo contenido pero con encoding diferente. Os aseguro que ha sido muy útil para mis pruebas.
El único detalle a tener en cuenta es que los nombres de los encodings que pasamos por parámetro tienen que coincidir con los que nos indican en esta tabla.
Os dejo el código básico comentado para vuestro uso y disfrute. Espero que os sirva tanto como a mí.
El único detalle a tener en cuenta es que los nombres de los encodings que pasamos por parámetro tienen que coincidir con los que nos indican en esta tabla.
Os dejo el código básico comentado para vuestro uso y disfrute. Espero que os sirva tanto como a mí.
package org.sj.encodings;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class Translator {
/** Salto de línea. */
private static final String SALTO_DE_LINEA = "\n";
/**
* Traduce el fichero de entrada al fichero de salida con los encodings
* indicados.
* @param inFile fichero de entrada
* @param inputEncoding codificación de caracteres del fichero de entrada
* @param outputFile fichero de salida
* @param outputEncoding codificación de caracteres del fichero de salida
*/
public void translator(File inFile, String inputEncoding, File outputFile,
String outputEncoding)
throws UnsupportedEncodingException, FileNotFoundException,
IOException {
// abrimos un stream sobre el fichero de entrada
FileInputStream fis = new FileInputStream(inFile);
// indicamos el encoding con el que leeremos
InputStreamReader in = new InputStreamReader(fis, inputEncoding);
// incluímos un buffer para mejorar la lectura
BufferedReader br = new BufferedReader(in);
// abrimos un stream sobre el fichero de salida
FileOutputStream fos = new FileOutputStream(outputFile);
// indicamos el encoding con el que escribiremos
OutputStreamWriter out = new OutputStreamWriter(fos, outputEncoding);
// incluímos un buffer para mejorar la escritura
BufferedWriter bw = new BufferedWriter(out);
// línea actual
StringBuffer line;
// leemos el fichero de entrada y lo escribimos en la salida.
while (br.ready()) {
line = new StringBuffer();
line.append(br.readLine());
line.append(SALTO_DE_LINEA);
bw.write(line.toString());
}
}
}
miércoles, 26 de enero de 2011
¡Malditos encodings!

No creo que haya ningún desarrollador que lleve un mínimo tiempo en esto que no se haya topado alguna vez con los encodings de los ficheros. ISO-8859-1, UTF-8, ...son nombres que nos ponen los pelos de punta cuando empiezan a dar problemas: páginas web que no se ven correctamente, nombres o direcciones que no se graban bien en la base de datos, ... ninguna de las tres capas de una aplicación se libra de esta plaga.
Como todo esto me lleva un tiempo dándome vueltas a la cabeza y además estas semanas he vuelto a toparme de bruces con la cruda realidad de los encodigs he decidido investigar un poco y descubrir la historia de estos queridos enemigos nuestros.
Así que armado de un buscador decidí descubrir a quién se le había ocurrido por primera vez la 'fantástica' idea. La realidad es que el primer resultado de google me convenció de que sería inútil buscar al autor primigenio, pero al menos me permitió localizar al primero que lo aplicó a gran escala.
A pesar de lo que el nombre del código Morse indica este no fue inventado por Samuel Morse, aunque sí patentado, si no por Alfred Vail mientras desarrollaban conjuntamente el telégrafo en 1840, un claro ejemplo de lo injusta que es la historia. Es fácil visualizar como ambas mentes pensantes le daban vueltas a la cabeza para imaginar una posible utilidad de los rudimentarios telégrafos de los que disponían. La idea de Alfred fue aprovechada por Samuel, se ve que tenía una mejor visión comercial que su compañero.
El alfabeto morse codifica los caracteres del alfabeto latino y las cifras del 0 al 9 y durante un tiempo fue la principal forma de comunicación a larga distancia tanto a través de cables como usando la radio. De hecho hasta hace relativamente poco tiempo era obligatorio pasar un exámen de código morse para conseguir la licencia de radioaficionado.
El primer alfabeto digital fue el código Baudot propuesto en 1870 y [se ve que Émile

era más avispado que Alfred] patentado cuatro años más tarde. Se trata de un código de cinco bits que además añadía innovaciones tan importantes como códigos para valores nulos, espacios, retornos de carro, fin de línea... ¿a que os va sonando? Si os fijáis además los caracteres del código están organizados según un teclado tipo qwerty como a los que estamos acostumbrados hoy en día. Esta y otras innovaciones dejaron obsoleto el telégrafo y pasaron a lo que sería el último grito en comunicaciones, el teletipo.

El teletipo aportaba muchas innovaciones: alfabeto digital, comunicación no-atendida,
gran volumen de comunicación, ... de hecho fue el gran líder en comunicaciones durante buena parte del pasado siglo XX. Otra de las innovaciones curiosas fue el uso de impresoras de cintas perforadas que además permitían ser leídas por otras máquinas, un primitivo precedente de nuestros dispositivos de almacenamiento masivo.
En otra entrada contaré el lío que se montó en los años sesenta del siglo pasado y cómo no se ha resuelto [y sólo parcialmente] hasta hace bastante poco.
domingo, 23 de enero de 2011
Presentación
Una de las cosas que creo que tienen en común todos los desarrolladores del mundo es que acabas desarrollando una especie de Síndrome de Estocolmo con el lenguaje en el que trabajas. A pesar de todos los quebraderos de cabeza que te puede provocar Java, .NET, Delphy o Haskell cualquier desarrollador de estos lenguajes defenderá las características del suyo frente a todos los demás como si le fuera la vida en ello.En estas entradas espero plasmar el día a día de todos nosotros, habrá cosa muy javeras y otras que se puede aplicar a cualquiera que viva en este mundo. Entradas en las que expondremos soluciones a algunos problemas y otras en las que simplemente expresemos opiniones o las usemos para liberar un poco de la tensión que acumulamos todos los días.
Espero que sirva sobre todo para mi salud mental, pero si en algún momento esto ayuda a alguien o, al menos, alguien se siente identificado, estaré más que satisfecho de haber comenzado esta pequeñísima aventura.
Suscribirse a:
Comentarios (Atom)
