Archivo

Archivo para marzo, 2009

Libro grátis de programación; How to think like a Computer Scientist

Lunes, 30 de marzo de 2009

Este fin de semana me puse a jugar con la librería de cursos del MIT en linea (la cual ha abierto el contenido de sus cursos en el formato de Creative Commons. Una maravilla). Entre esas busquedas, me conseguí con el libro “How to think like a Computer Scientist“. No es un libro profundo sobre Java (en especial en API sólo le interesan a los programadores en casos muy particulares), pero si sobre como aprender a programar (el lenguaje utilizado es Java, pero aplica a otros lenguajes).

Lo mejor es que la descarga es legal :)

Veneblogs: , , , , ,

Blogalaxia: , , , , ,

To2blogs: , , , , ,

Technorati: , , , , ,

Del.icio.us: , , , , ,

programación , , , , ,

Invitaciones para Kenai.com

Lunes, 23 de marzo de 2009

Kenai.com es un nuevo servicio para el hospedaje de proyectos OpenSource, con la diferencia que hace enfasis en conectar a sus usuarios con redes sociales como Twitter, Facebook y otras. El proyecto ahorita esta en beta pero yo tengo 3 invitaciones para quienes quieran utilizarlo.

No hay truco, es grátis, ningún compromiso conmigo. Solamente escriban de vuelta mencionando su dirección de correo electrónico para mandarles la invitación.

Veneblogs: , ,

Blogalaxia: , ,

To2blogs: , ,

Technorati: , ,

Del.icio.us: , ,

kodegeek, opensource , ,

El Kernel de Linux tiene una nueva mascota: TUZ

Domingo, 22 de marzo de 2009

Parece ser que el pinguino TUX se va a tomar unas vacaciones y en cambio llega un nuevo animalito (TUZ), según la gente de Linux foundation.

¿Qué les parece? Yo en particular prefiero a TUX, aunque es una buena causa la de salvar a los demonios de Tazmania :)

Veneblogs: , , , ,

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

linux, opensource , , , ,

Resumen de CommunityEastOne Dia 2

Jueves, 19 de marzo de 2009

Hoy fué el último día de los tutoriales de CommunityOne East. Yo me decidí a asistir al curso de MySQL para desarrolladores en la mañana y la continuación de MySQL para desarrolladores en la tarde.

El instructor hizo un gran esfuerzo concentrando un par de cursos que se dan durante el transcurso de una semana en sólo un día; Muchísima información, pero sobre todo me dió una idea de que seguir estudiando para profundizar mis conocimientos.

Hubo tips de todos los colores y sabores; Uno de los mejores fué la lista de cosas por hacer en una nueva instalación de MySQL del veterano George Trujillo.

En general valió la pena. Será hasta el año que viene ;)

java, kodegeek, linux, opensource, perl, programación , , , ,

Resumen de CommunityEastOne Dia 1

Miércoles, 18 de marzo de 2009

Es una de las pocas excepciones en las cuales sólo puedo decir que no sé por donde empezar. ¡WOW!; Este año me decidí a tomar videos sobre mis experiencias en vez de tomar fotos, al mismo tiempo que escribía casi en tiempo real sobre la conferencia en Facebook, Twitter y el blog. Debo decir que es la primera vez que me quedo sin baterías por andar jodiendo la paciencia ;)

El énfasis de la conferencia fué Cloud Computing; Sun definitivamente está apostando a que este va a ser el siguiente gran boom (junto con otras compañías como Amazon.com) y durante el evento mostraron muchas de sus herramientas de desarrollo, administración y virtualización (en el video pueden ver a David Douglas, Senior Vice President, Cloud Computing and Developer Plarforms quien abrió el evento.):

Me encanto ver compañias como ZAmanda, las cuales han llevado el famoso programa de backup Amanda al mundo enpresarial y ahora también soportan el paradigma de respaldos en Cloud Computing.

No pude ir a todas las charlas (si quieren ver los videos revizen mi grupo en Flickr); Por razones de tiempo tuve que escoger entre las que más me interesaban, así que aquí les doy un pequeño resumen:

Moving Forward: High-Performance Application Development in a Multicore World: Michael Marden, de AMD junto con Patrick Leonard (Rogue Wave), David Maples (Allinea Software) y Duncan Mc Callum (Cilk Arts) se encargaron de explicar las últimas tendencias en cuanto al uso de procesadores multicore y como nos afecta a los desarrolladores.

Si bien no hubo demostraciones de productos ni código estuvo interesante en cuanto a las explicaciones de los problemas actuales y sus posibles soluciones. Pero eso si, preparese para ver más cores por procesador (hasta 48 en dos años) y siga el siguiente consejo: Si no tiene que utilizar multithreading entonces no lo haga :)

Les recomiendo el sitio de desarrolladores de AMD el cual tiene varios documentos y herramientas al respecto de este tema.

Sigo con la descripción, no hay más vídeos porque mi camara se quedó sin baterías :(


Cloud Computing for the Enterprise Software Developers:
Aburridisima, sólo mostraron herramientas y la teoría detrás del funcionamiento de la plataforma que mostraron fué floja. Parecía más un “informercial” que otra cosa. Perdí una hora de mi vida allí :(

Beyond Impossible: How Jruby Evolved the Java Platform
: La mejor charla del día en mi opinión. El trabajo que el desarrollador Charles Nutter de Sun y sus compañeros hicieron con JRuby es admirable. No sólo reprodujeron a C Ruby en Java, sino que en el proceso le agregaron más funcionalidad a la máquina virtual de Java (versión 7). Nos demostraron como JRuby es más rápido que C Ruby 1.9 en varios demos (uno de fractales en particular), además de las historias heroicas de ciertos desarrolladores, ¡como el que portó la librería de expresiones regulares en C de Ruby (JAnigurama) en sólo un mes!

Yo pregunté cual es la estrategia de Sun a largo plazo con todos estos lenguajes; La respuesta es soportar a aquellos que tengan las comunidades más grandes, pero en teoría todos los lenguajes. Este es el legado de Java, aunque el lenguaje muera este va a seguir con implementaciones de otros lenguajes en la máquina virtual.

Si quiere saber más sobre Jruby y el progreso de otros lenguajes dinamicos en la máquina virtual de Java (como Jython, Groovy, Scala) entonces visite el blog de Chales Nutter

Building an Atom-Enabled, Map-Driven, Location-Aware, Web-Centric Mobile Application with POJOs and Android: Verga, leer el titulo cansa imagine escribirlo ;) . Sin embargo la charla estuvo super interesante ya que el autor (Tim Bray, un experto en Cloud Computing) nos mostró una aplicación que escribió para Android en sólo 4 días (el programa, llamado storyteller, permite guardar historias en el telefono, haciendo anotaciones de texto y voz).

Datos curiosos de esta charla:

  • Microsoft es el jugador más debil del mercado móvil, con sólo %3 de todo la torta. Symbian es el mostruo con más de %27
  • Pese a la recesión mundial y a que menos usuarios compraron celulares el trimestre pasado comparado con el 2007, el mercado creció en un %5. ¡Carajo, este es el único mercado a prueba de recesión en el mundo!
  • El Java de Android no es realmente Java. Por ejemplo, este no puede correr JRuby. Por otro lado, tener root shell en el telefono de desarrollador simplemente no tiene precio :) )
  • Mientras probaba la aplicación, el programa se fué a un sitio que tenía la palabra “f*ck” en todos los colores y tamaños. Tim lo manejó muy bien diciendo que nunca nos ibamos a olvidar de su charla :)

Fué interesante ver como funciona el modelo de programación de aplicaciones en Android (les recomiendo el blog androiddiary.com para más detalles)

Building a Twitter Analisys Tool from Scratch Using PHP, MySQL, Yahoo UI and Netbeans: Eso es lo que yo llamo una demostración en caliente. Justin Bolter, de Sun, se lanzó de cabeza y escribió esa aplicación de memoria en una hora. Paso a paso demostró un dominio increíble de Netbeans (y sus capacidades) y al final nos dejó loco con un programa que mostraba los twitters (y sus detalles) usando un motor de búsqueda el cual guardaba sus datos en MySQL. Demasiado bueno.

JavaFX: The New Platform for Rich Internet Applications: Fué decepcionante ya que Chuk-Munn Lee de Sun sólo leyó la presentación sin detenerse mucho en los ejemplos con código (y Dios, si habia código). Pudo haber sido mejor aunque se nota que Lee sabia de lo que estaba hablando.

En general hubo muchos participantes de otros países (yo conté un viaje de gente de Japón, Alemania y Rusia por ejemplo. Sólo conté dos hispanos, yo y un Mejicano) y aproveche para preguntar sobre algunas cosas interesantes:

  • La adquisión de SUN por parte de IBM: Nadie quiso hablar de eso. Sin embargo el precio de SUN subió hoy de $4 a $8 :)
  • Open Storage:Mi grupo tiene un apetito inmenso por almacenamiento y Sun procalama que sus Storage Servers 7000 cuestan %75 menos que la competencia ya que estan basados en Open Solaris, y utilizan componentes comunes (han estado en venta desde Noviembre del año pasado, estoy averiguando a ver que tal)
  • Sun está alejandose de Java.net y en cambio está proponiendo una nueva plataforma, la cual va a soportar Cloud Computing: Kenai.com. Por haber asistido al evento y por tener un proyecto en java.net me dieron una cuenta, ya les contaré como me fué con esta nueva iniciativa de SUN en el mundo OpenSource la cual compite con SourceForge
  • Bueno, mañana me toca el dia 2 del evento, llamado “Deep Dive“. Son los tutoriales pagos en tecnologías OpenSource, me voy a lanzar un curso completo de un día sobre MySQL. Ya les comentaré como me fué ;)

Veneblogs: , , , , , , , , , , , ,

Blogalaxia: , , , , , , , , , , , ,

To2blogs: , , , , , , , , , , , ,

Technorati: , , , , , , , , , , , ,

Del.icio.us: , , , , , , , , , , , ,

comics, java, kodegeek, linux, opensource, programación, ruby , , , , , , , , , , , , ,

Escribiendo desde CommunityOne

Miércoles, 18 de marzo de 2009

Bueno, ya estoy en el Marriot. Tratare de escribir Durante el Dia de hoy, sin embargo siganme en twitter para actualizaciones en tiempo real: http://twitter.com/josevnz

java, kodegeek, linux, opensource, ruby , ,

Mañana es Sun CommunityOne East

Martes, 17 de marzo de 2009

Bueno, ya quedan sólo horas para el Sun CommunityOne East. Yo ando imprimiendo mis entradas, preparando mi camara y sobre todo abriendo el cerebro para todo lo que voy a aprender el día de mañana.

Ya les contaré como me fué, esten pendientes por este espacio. También puede seguir el progreso del evento en Twitter y Facebook.

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

java, linux, opensource, programación, ruby , , ,

Construyendo un servidor de logs usando Netcat, tail y Bash

Sábado, 14 de marzo de 2009

Me toco entre estos días escribir un hack (no por lo malo sino por lo rápido que tenia que hacerlo) un servidor que debía proporcional el contenido de una bitacora la cual crece de manera continua durante el día. El grupo que nos pidio esto es de auditoria, lo cual implica que no debe perderse información.

Primero les muestro el código del programa y explico como funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# author: josevnz@kodegeek.com
#
set -o monitor
declare -a pids
declare -r SCRIPT=${0##*/}
declare -r FIFO="/tmp/$SCRIPT-$$.fifo"
 
if [ -z "$1" ]; then
        echo "Please provide the file to tail and try again"
        exit 192
fi
 
if [ -z "$2" ]; then
        echo "Please provide port and try again"
        exit 192
fi
 
trap cleanup exit INT TERM
 
if [ ! -e "$FIFO" ]; then
        mkfifo "$FIFO"
        if [ $? != 0 ]; then
                exit $?
        fi
fi
 
tail -F "$1" > "$FIFO" &
trap "test -e $FIFO && rm -f $FIFO" exit INT TERM
while true; do
        test -e "$FIFO" && netcat -v -v -v -l -p $2 < "$FIFO"
done
trap "kill -9 $! $$" exit INT TERM

La idea es revisar los contenidos del archivo usando ‘tail -F’. La opción ‘-F’ le dice a tail que reintente si tiene problemas eyendo el archivo; De allí redirigimos los contenidos a una cola (FIFO, first in first out) en Unix la cual garantiza que aunque el servidor TCP muera los datos estaran allí listos para ser enviados al cliente. Dejamos a tail corriendo en segundo plano…

El siguiente paso es arrancar nuestro servidor TCP. Netcat recibe los contenidos de la cola que creamos en el paso anterior. Fijense como lo encerramos en un ciclo infinito ya que si el cliente se muere (o desconecta por otra razón) Netcat cerrará la conexión.

Finalmente le decimos al script que mate todos los procesos hijos o el mismo programa si decidimos matar al servidor o nos matan el proceso.

Bueno, aqui les muestro como correr el servidor:

auyan:~ josevnz$ ./nettail fakelog.log 9000
Listening on any address 9000 (cslistener)
Connection from 127.0.0.1:50754
Total received bytes: 0
Total sent bytes: 432
Listening on any address 9000 (cslistener)
Connection from 127.0.0.1:50819

Y un ejemplo de como conectarse:

auyan:~ josevnz$ nc -v -v -v localhost 9000
nc: connect to localhost port 9000 (tcp) failed: Connection refused
Connection to localhost 9000 port [tcp/cslistener] succeeded!
This is a kodegeek test: Sat Mar 14 00:02:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:02:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:03:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:03:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:04:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:04:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:05:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:05:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:06:15 EDT 2009

Espero les guste esta solución de 5 minutos :)

Veneblogs: , , , ,

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

java, linux, opensource, ruby, venezuela

Facebook puzzles: (II, Hoppity)

Martes, 3 de marzo de 2009

Un nuevo rompecabezas, un poco más complicado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.kodegeek.blog.jobsearch.facebook.hoppity;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
/**
 * To help test whether your puzzle submissions fit the guidelines, try this simple test puzzle.
 * Your solution must follow the guidelines like any other puzzle.
 * Write a program that takes as input a single argument on the command line.
 * This argument must be a file name, which contains a single positive integer.
 * The program should read this file and obtain the integer within, and then output a sequence of strings
 * based upon the number (details below).
 * @author josevnz@kodegeek.com
 *
 */
public final class Hoppity {
 
	/**
	 * The input file will contain a single positive integer (in base 10) expressed as a string using standard ASCII text
	 * (e.g. for example, the number "15" but without the double quotes).
	 * This number may or may not be padded on either side with white space.
	 * There will be no commas, periods, or any other non-numeric characters present within the number.
	 * The file may or may not terminate in a single new line character ("\n")
	 * @param file file with the number
	 * @return integer
	 * @throws IOException
	 */
	private static int readNumber(File file) throws IOException {
		int aNumber = -1;
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			// Trim any spaces and then try to parse the number
			aNumber = Integer.parseInt(reader.readLine().replaceAll("\\s*", ""));
		} catch (IOException ioExp) {
			throw ioExp;
		} finally {
			if (reader != null) {
				reader.close();
			}
		}
		return aNumber;
	}
 
	/**
	 * @param args args[0] = Full path to input file
	 */
	public static void main(String[] args) throws Exception {
		if (args != null &amp;&amp; args.length == 1 &amp;&amp; args[0] != null) {
			File numFile = new File(args[0]);
			if (numFile.exists() &amp;&amp; numFile.canRead()) {
				int number = readNumber(numFile);
				for (int i = 1; i &lt; = number; i++) {
					boolean mod3 = i % 3 == 0;
					boolean mod5 = i % 5 == 0;
					if (mod5 &amp;&amp; mod3) {
						System.out.println("Hop");
					} else if (mod3) {
						System.out.println("Hoppity");
					} else if (mod5) {
						System.out.println("Hophop");
					} else {
						continue;
					}
				}
			}
		}
		return;
	}
}

Lo más complicado aquí es asegurarnos que el número pueda ser leido si tiene espacios. No hay otras restricciones aparentes.

No muestro el wrapper ni el archivo de compilación Ant ya que son muy parecidos al del problema anterior.

Veneblogs: , , ,
Blogalaxia: , , ,

To2blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

java, programación , ,

Facebook Puzzles (I, MeepMeep)

Lunes, 2 de marzo de 2009

La gente de Facebook tiene un enlace permanente con rompecabezas para quienes quieren aplicar a una posición allí; La conseguí por un aviso clasificado que ellos mostraban en su sitio web y después de leerlos les puedo decir que me quedé pegado tratando de resolverlos.

Ya les iré contando como me fué con cada uno de los problemas, el primero de ellos es sólo para probar que el código enviado compila, para lo cual prepare mi archivo Ant:

1
2
3
4
5
&lt; ?xml version="1.0" encoding="ISO-8859-1"?&gt;
 
Solution for puzzles from 'Puzzle Master Facebook Page',
Solution sent to address: perl -e 'printf "%d\@facebook.com\n", 0xFACEB00C&gt;&gt;2'
Author: josevnz@kodegeek.com. http://kodegeek.com/blog/

El código de ‘MeepMeep’

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.kodegeek.blog.jobsearch.facebook.meepmeep;
 
/**
 * Write a program that takes as input a single argument on the command line.
 * This argument must be a file name, which contains text.
 * The program should completely ignore this argument and instead print
 * to standard out the string "Meep meep!" (without the double quotes) followed by a newline.
 * @author josevnz@kodegeek.com
 *
 */
public final class MeepMeep {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Meep meep!");
 
	}
}

Y el wrapper:

1
exec java -classpath . com.kodegeek.blog.jobsearch.facebook.meepmeep.MeepMeep $*

Ellos piden que lo envies a la siguiente dirección: {0xFACEB00C>>2 in decimal}@facebook.com

Decodificarla es trivial en Perl y en cualquier otro lenguaje:

 lang="Perl">
perl -e 'printf "%d\@facebook.com\n", 0xFACEB00C>>2'

Si todo sale bien, el robot de Facebook les dirá lo siguiente:

Dear submitter,

Thank you for your test submission of a puzzle solution to Facebook! After running your solution to meepmeep, I have determined it to be correct. Since your test has been successful, you are all set to try one of the other puzzles. Best of luck!

Sincerely,
-The puzzle robot

Veneblogs: , , ,
Blogalaxia: , , ,

To2blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

java, perl, programación , , ,