Archivo

Archivo para la categoría ‘kodegeek’

Book review: HTML5 up and running, by Mark Pilgrim

Jueves, 2 de septiembre de 2010

HTML5 up and running

Thanks to O’Reilly I got the chance to review the book ‘HTML5 up and running‘, by Mark Pilgrim. Please read below to get an idea on what to expect about this new title from O’Reilly ($34.99).

Synopsis:

HTML5 is a set of technologies that came together as HTML, JavaScript and the Internet in general evolved. The author tries to explain how all the pieces fit together along with some important history lessons.

This is a practical and fun book, so keep your computer on all the times while you read it.

How is it organized:

  1. How did we get there?: History of some web standards, where they succeeded and where they failed because of being impractical. If you want to learn more about the history of software usability and common pitfalls then this is a must.
  2. Detecting HTML5 features: How to deal with different HTML5 compatibility levels (oh yeah, you thought the nightmares are over, think again!). Lots of boilerplate code, but still a foundation of things to come.
  3. What does it all mean?: Explains the structure of an HTML document, along changes that are mean to make it easier to maintain and create.
  4. Let’s call it a draw(ing surface): In my opinion the best chapter of the book. This is where HTML5 (with JavaScript) overlaps and competes with other technologies like JavaFx and Flash. There are examples, but I was left wanting more code to show how some features work. Also, I got the impression than mouse events are a pain in the neck to handle in HTML5, something than is easily accomplished in JavaFX or Flash.
  5. Video on the web: Very detailed explanation of most popular formats, how they ‘embedded’ video magic works, how royalties licenses can break your pocket. Pay attention to the upcoming WebM format
  6. You are here (and so everybody else): Describes the Geolocation API. This is a tricky subject and the author shows how the different browser API complexity can be handled with third party libraries and also how to deal with important issues like permissions (the user doesn’t want to tell where it is), precision, timeouts and others. Code is simple enough to understand the basics and move forward.
  7. The past, present, and future of local storage for web applications: The author tries to explain the new local storage API, which is a great improvement over cookies. Quickly explains several important limitations (storage size, everything is saved as strings) and suggest how to use Google Gears instead, which is not a bad thing.
  8. Let’s take this offline: Caching website contents for offline use. Can improve the user experience a lot, but as the author says the developer work here is a tough one as debugging is very primitive. Offline mode requires careful thinking of what server side and client side settings to change, plus not all the browsers support this feature (like IE8). Google Gears comes to the rescue
  9. A form of madness: New form elements and how to use them so even users of old browsers can have a ‘degraded’ experience. You will be probably changing ALL your form pages after reading this chapter, very useful :)
  10. “Distributed”, “Extensibility”, and other fancy words: This is all about how to use ‘microdata’ to decorate existing HTML and embed extra information without breaking your documents. Very interesting indeed as this information can easily end up displayed on the search engine or consumed by other applications that interact with your web application.
  11. Missing things:

    Sometimes I felt than there were too many mentions of Open Source frameworks to do repetitive tasks, one has to wonder if HTML5 is mature enough or if you just rather use tools like Modernize and Google Gears and forget about the browser madness (there is still plenty). Also more complex programming examples feel missing, specially for the canvas chapter (still the code shown is simple and good to the point so you can say this is a minor fault).

    Conclusion:

    The book is easy to read, well written and does a very good job explaining what is the set of technologies that made HTML5. It is not a book for beginners as it assumes you know how to code a little in JavaScript and at least you wrote an page in HTML4 before. It is not an advanced book either on the topics covered but will definitely will give you a good head start if you want to go deep on this new set of technologies.

    Kodegeek stars: 4 of 5.

internet, kodegeek, programación

¿Acaso no somos unas p*t@s todos los que trabajamos en Wall Street?

Lunes, 16 de agosto de 2010

Algunos de los escritos de este blog son de pequeñas reflexiones, hoy los invito a leer una de ellas.

Hace unos días yo y otra persona tuvimos una acalorada discusión sobre varios temas. Básicamente hubo un punto en el cual ambos criticamos posiciones del otro, en particular la visión personal que cada quien tiene de su trabajo, y de allí salieron varias ideas las cuales he visto repetidas en otros lados, me refiero a distintas personas y momentos.

Y es que la forma como nos vemos en el trabajo dista mucho de ser algo objetivo, pasamos allí 8 o más horas al día conviviendo con extraños a los cuales vemos más a menudo que a nuestra familia de sangre o amigos; Si por el contrarió nuestro trabajo nos obliga a viajar entonces el cuarto de un hotel y las relaciones en linea toman vigor.

Me tomé la libertad de citar solamente dos frases que considero interesantes, aún sin el resto de los correos las ideas no están fuera de contexto. También coloqué enlaces a algunos conceptos que quizas usted no esté muy familiarizado, pido disculpas si no es el caso pero no quiero perder mucho tiempo explicando tecnicismos. Finalmente, tenga un poco de paciencia cada vez que vea la palabra “Wall Street” en este articulo ya que la verá hasta el cansancio :)

Pero bueno, empecemos a desglosar el asunto, la idea de este escrito es un pequeño viaje mental así que agarre sus maletas y vénganse conmigo:

Trabajo = prostitución (al menos en ciertos casos)

¿Acaso no somos unas p*t@s todos los que trabajamos en Wall Street?

¿Qué entiende usted entre líneas?:

  • ¿Qué tanto está dispuesto usted a dejarse vejar por dinero?
  • Todos tenemos un precio, dice la frase, ¿no es así?
  • Tampoco le tiene que gustar lo que hace, con tal y paguen bien, ¿no?

Todo trabajo tiene compromisos, especialmente si hay compensación monetaria de por medio. Por ejemplo, si usted quiere tener cierta seguridad e ingreso fijo (el riesgo monetario lo asume el empleador) entonces trabaja para alguien, haciendo cosas que ese alguien le pide, en especial porque es él quien está asumiendo la mayor parte del riesgo con el negocio). Si por el contrario usted es un consultor entonces tiene un poco más de libertad a la hora de escoger el trabajo, pero hay más incertidumbre en cuanto a la continuidad del ingreso.

Las cosas NO son tan blanco y negro como las pinta la idea de las ‘p*t@s’, especialmente en Walls Street. Mi opinión es que la mayoría de la gente que trabaja en el área de finanzas y tecnología (si, el matrimonio de las dos ramas es más viejo de lo que usted cree) lo hace porque:

  • Disfrutan resolviendo problemas complejos lo más rápido posible. No importa si trabaja en el trading floor (esta persona por cierto adora que yo escriba que yo trabajo allí ;) ), midoffice, negocios o tecnología solamente ya que cada posición tiene sus desafíos particulares.
  • La remuneración ES buena. La compensación industria es definitivamente alta ya que la idea es atraer a los más competitivos y preparados, además de que quienes hacen las estrategias asumen más riesgo (por ejemplo los Quants si no hacen estrategias que hagan dinero simplemente van para afuera. Un desarrollador de servicios para la industria financiera tiene en cambio más cancha para equivocarse (depende de que tipo de software escriba también, ojo)
  • Se utiliza tecnología de punta ya los geek les gusta eso. Algoritmic trading,, especialmente high frecuency trading van de la mano con los servidores más potentes, la tecnología de redes más sofisticada, complejos algoritmos de programación, integración con múltiples sistemas. Una vainitia :)
  • Tiene la capacidad de combinar el negocio con tecnología: Una buena parte de los traders son ingenieros, lo suficientemente versatiles como para trabajar en finanzas y ser exitosos. Para trabajar con el negocio tendrá que aprender sobre instrumentos financieros (bonos, acciones, opciones, futuros, y por allí va la cosa). No necesariamente como se valúan (al menos que usted sea un Quant) pero al menos los conceptos básicos deben estar allí. Yo aún estoy leyendo vainas y preguntándole a los corredores (no se si es la mejor traducción para ‘traders‘) que tienen paciencia como trabaja esto o aquello. Es un viaje lleno de descubrimientos :D

Mucha gente combate los síntomas del “venderse por dinero” con actividades fuera de la oficina. Pero sobre todo, balanceando trabajo con la vida personal. Ese es un problema y desgraciadamente no se aprende hasta que uno se ha quemado varias veces :(

De aquí vamos a la siguiente idea:

La gran mayoría de nosotros somos simplemente parte del engranaje

Son pocos los carajos en Wall Street que realmente hacen cosas importantes para su compañía. La gran mayoría de nosotros somos simplemente parte del engranaje.

Reemplace de nuevo ‘Wall Street’ con ‘la industria en la cual trabajo‘ y el resultado es el mismo. Sentirse como una hormiga dentro de la colmena no es bueno.

¿Pero, y es verdad?

Yo soy de los que creo que todos hacemos una contribución dentro del sitio el cual trabajamos. Que contribuciones tienen más impacto que otra tiene que ver mucho con la línea de negocios, la industria y muchos otros factores, pero el asunto es que una sola persona no es el negocio. Por ejemplo, la tecnología se ve muchas veces como un costo dentro de un banco de negocios (sin ella no se puede operar y requiere mantenimiento) pero eso es una visión ultra-simplificada del asunto; La tecnología previene gastos innecesarios, ayuda a disminuir riesgo en las inversiones, provee herramientas en la toma de decisiones (con las cuales se pueden hacer aún más dinero) y muchas veces es el negocio mismo (computadoras comprando y vendiendo acciones por ejemplo).

Les cuento mi anécdota durante la bancarrota de Lehman Brothers (el día que anunciaron que la compañía dejaba de existir), la cual me hace pensar que el argumento del la insignificancia dentro de la maquina no es cierto en muchos casos. Lo he pensado muchas veces antes de contarlo por el blog, pero que carajo, creo que ustedes pueden sacar un par de cosas buenas de todo esto: desgraciadamente no puedo escribirlo aún en el blog, dada las politicas de divulgación de información de la compañía en la cual laboro. En otra ocasión será.

Y así los lanzo hacia la última idea, esta es mia.

Papá, ¿como te ganas la vida? (describa su trabajo en una línea. Suena fácil, ¿no?

A la hora de escribir esto Sebastian tiene sólo 3 años y medio y aún no he ha hecho esa famosa pregunta. Yo se que mi trabajo no está curando el Cáncer, o limpiando agua potable para quienes no la tienen y la respuesta de que “a market maker” ayuda al sistema financiero generando liquidez no creo que le sirva de mucho.

Pero esto si: Yo soy bueno resolviendo cierto tipo de problemas. Muchas veces problemas complejos en corto tiempo, y eso me gusta. A la gente le gusta la forma en como yo resuelvo esos problemas y me dan más para resolver, y además de eso me dan dinero por hacerlo por ellos.

No soy un SNOB porque escribo sobre mi trabajo. Escribo porque es algo que me da orgullo ya que mucha gente se beneficia con lo que hago, y en el proceso de narrar mis experiencias aprendo algo (no tienen idea la cantidad de gente que escribe después de un articulo y las cosas que se aprenden). Es la misma idea de cuando era un administrador en la Universidad en Mérida en donde me gradué, en donde hacia páginas web en el periódico en Caracas en donde trabaje por primera vez una vez graduado o en la pequeña y tormentosa compañía con la cual conseguí mi primer trabajo en los Estados Unidos, siempre hay orgullo en lo bueno y malo que se que se hace.

¡Las p*t@s son las únicas que trabajan con el cliente encima!

Nadie es indispensable en un trabajo, así como el esfuerzo individual no se diluye completamente dentro la gran maquinaria. El sentirse como una p*t@ o no es un asunto estrictamente personal, todos caemos en algún momento y del que cuesta salirse. Hay muchas maneras de salir del atolladero, lo importante es mantener las cosas en perspectiva y no dejar de pensar nunca en la importancia que todos tenemos como individuos dentro de un grupo de trabajo, así sea mientras buscamos otro mejor; Créame, es mucho más difícil sentirse como tal si se ven las cosas así :)

Así que no se sienta mal, usted no es el único y de usted depende no sentirse así.

–José

kodegeek , ,

Ser un corcho y estar saludable: ¿Metas en conflicto? (I)

Domingo, 25 de julio de 2010

Desde un buen tiempo para acá he estado debatiendo si escribir o acerca de las ventajas de hacer ejercicio; Esto es una completa contradicción para quienes me conocen de mucho tiempo atrás ya que ellos saben que no soy fanático de los deportes (solamente sigo la copa mundial de fútbol cada 4 años), y mucho menos los practicaba.

¿Así que porqué empezar ahora?

No todo el tiempo fui gordo, de hecho muchos de mis amigos me recuerdan como el ‘flaco’ (si, irónico). Durante mis años de adolescente y comienzos de la Universidad yo jugaba fútbol con mis amigos e iba regularmente al gimnasio (sin mucha disciplina claro está). Mi metabolismo era tan bueno que me permitía ingerir cualquier clase de comidas en grandes cantidades, todo eso sin aparente consecuencia (¿alguien recuerda el dicho de ‘buenos genes’?

Todo eso se acabo cuando cumplí 28 años y de allí fue una lenta, pero suculenta, espiral en ganar peso, hasta que llegué a pesar 88 Kilogramos (más o menos 192 libras). No suena mucho, considerando que mi altura es 1 metro 80 centímetros, pero definitivamente estaba fuera de forma.

Pero dejemos de hablar de mi, seguro usted ya se está preguntando ¿y que tiene que ver todo esto con usted? Bueno, hoy en día hay muchas herramientas que lo pueden ayudar a volver a estar en forma y en especial si usted es un ‘Geek’, así que la única excusa es un poco de tiempo y un poco de constancia :) . Sin más preámbulo (y sin un orden especial de importancia) les enumero algunas de las que yo utilicé para ponerme en forma (no estoy promocionando ninguno de estos productos pero los menciono porque me han funcionado bien):

  • Cuantifique daño:Usted ya sospecha que tiene sobrepeso (nada más fácil que usar una balanza), ¿pero que tan mal está la situación? Hay muchas formas de saber pero una muy contundente es averiguar el BMI o indice de masa corporal (Body Masss Index) y el indice de grasa (Body fat percentage). Cuando yo comencé a hacer ejercicio yo tenia un BMI de 25 y un indice de grasa de 26% (¡sorpresa, obeso!). Hoy en día estoy en BMI de 21.6 e indice de grasa de 7.1%. Existen muchas maneras de obtener estos números, yo en particular utilizo una máquina que emplea un impulso eléctrico de bajo poder (asegúrese de medirse siempre a la misma hora y nunca después de hacer ejercicio por el asunto de que la temperatura corporal afecta las mediciones).
  • El pez muere por la boca: Lo más importante es controlar lo que se come. Hoy en día comemos peor que nunca, todos apurados y lo es lo que tragamos que tiene poco valor alimenticio. El conocer lo que se come es quizas una de las partes más importantes del asunto, y no importa cuanto ejercicio haga usted al día solamente con ejercicio no va a eliminar el exceso de calorías. ¿No sabe donde empezar? Bueno, al menos debería saber que no comer (por ejemplo puede revisar eathis.com).
    Recuerde también que cuando se está perdiendo peso lo que se quiere es eliminar grasa y no masa muscular, así que usar la balanza solamente para medir el progreso es un error común. Además de observar el BMI (mi favorito es BMI calculator) y el indice de grasa usted debería llevar un control de cuantas calorías consume al día (lo que se conoce como contar calorías). Para ello yo utilizo Tap & Track, en mi Itouch. También le permite llevar un registro detallado de su peso al día.
  • Establezca metas: ¿Si no sabe a donde quiere ir entonces como espera llegar a algún sitio? Si por ejemplo usted está levantando pesas (entrenamiento de resistencia) entonces debería llevar un registro de cuantas repeticiones realiza, cuanto peso en cada una, cuanto tiempo le toma completar el circuito e incluso colocar rutinas de entrenamiento (BodyBook Fitness Journal). Si usted trota entonces cuanta distancia y tiempo (Nike Ipod+Run). Y así la lista continua, nada causa más satisfacción que poder cuantificar el progreso.
  • Vístase bien: Ropa cómoda, no hay necesidad de algo sofisticado, la ropa adecuada le puede ayudar a evitar lesiones. No me gusta comprar de un sólo vendedor (por ejemplo zapatos, pantalones cortos y camisas vienen de distintos vendedores). La idea es que usted se mantenga fresco y cómodo; En particular yo utilizo algunos productos que comprimen el musculo para minimizar desgarres y dolor producto del ácido láctico (nunca se olvide de hacer pre-calentamiento)
  • Suplementos alimenticios: Este punto prefiero no discutirlo ya que no soy médico y no pienso recomendar ningún producto. Hay muchos productos que se usan dependiendo del tipo de deporte que se práctica, además del resultado deseado (antes, durante y después del entrenamiento). Consulte a su medico primero y tenga cuidado con cualquier cosa que se vea complicada y que promueva milagros sin ejercicio (como los productos para perder peso). ¡Nada como comer natural y balanceado :) !
  • Manténgase motivado: Nada como escuchar buena música mientras se corre o se levantan pesas. Mi Itouch se ha portado de maravilla, yo le compre una correa para hacer ejercicio (la cual me deja organizar el cable) y desde entonces nunca lo dejo antes de entrenar. También lo utilizo para llevar en mi calendario las fechas en las cuales tengo que entrenar con otra persona

No hay que hacer mucho ejercicio, solamente tener un buen plan y una dieta balanceada hacen el truco. En un próximo articulo les escribiré un poco más sobre los programas que mencioné anteriormente y como se puede medir el progreso (y mejorar el entrenamiento) viendo esos datos.

Los invito a compartir sus sugerencias y experiencias, seguro todos saldremos beneficiados :)

kodegeek

You know you’re a trully dedicated geek when you…

Domingo, 20 de junio de 2010

I just got this email from the Tomcat mailing list and I though it was too good not to share with all of you:

XXXX, XXXX XX wrote:
(Sent from my iPhone on a ferry in the middle of Lake Michigan.)

Posters to this forum, observe the incredible dedication of some of the contributors here.
I’m willing to bet that if the ferry was sinking, Chuck would be the last one on board, making sure there wasn’t any unanswered message on this forum (or at least any wrong and uncorrected answer lingering).

We should have a competition about whom can post a message from the most unlikely location, or circumstances. The middle of lake Michigan isn’t bad for a start.
We would need some means of checking though.

So you know you’re a truly dedicated geek when you can answer emails from your Iphone from the middle of nowhere (or in this case in a ferry in the middle of Lake Michigan ;) )

LOL :)

internet, kodegeek

Pido ayuda a todos los internautas: BocaProyectos.com

Domingo, 6 de junio de 2010

Saludos a los pocos lectores de este humilde blog :)

Necesito de su ayuda, estamos lanzando una nueva versión de http://bocaproyectos.com y queremos su opinión. En particular comenten que les gusta, que no, problemas de velocidad, funcionalidad rota, en fin ¡cualquier cosa relacionada con el sitio!

Muy agradecido con su valiosa ayuda :)

–José

kodegeek, php, programación, venezuela

Aventuras con JavaFX 1.3 y NetBean 6.9

Sábado, 1 de mayo de 2010

Bueno, después de una larga espera Oracle nos trae JavaFX 1.3. El entorno de ejecución promete muchas mejoras, lo único es que el entorno de desarrollo es NetBeans 6.9 BETA.

Si, beta. Tiene una lista de problemas (entre esos la depuración de programas). Sin embargo, si escribo mis ‘unit tests’ debería estar más o menos bien, ¿no es así?

Lo primero que intenté hacer es convertir el método ‘main’ de una de mis clases en Java (no JavaFX) a Junit:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/*
 * Helper class used to parse and process CVS data comming from an InputStream
 * License: GPL
 * @author josevnz at kodegeek dot com
 */
 
package com.kodegeek.blog.javafx.workout.app;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
 
 
/**
 *
 * @author josevnz
 */
final public class CsvDataParser {
 
private List <list <Object>>data;
private static final Pattern splitPattern = Pattern.compile(",\\s*");
private SimpleDateFormat format;
private Pattern skipNonNumberPatter = Pattern.compile("^\\D+");
 
/**
 * Expected default number of data observations
 */
public static final int DEFAULT_DAY_COUNT = 365;
 
/**
 * Expected default number of series to display on the same chart
 */
public static final int DEFAULT_SERIES = 50;
 
    /**
     * Constructor
     * @param numSeries expected number of series on the stream
     */
    public CsvDataParser(int numSeries) {
 
        /*
         * Ddata is a list of lists where:
         * data(0): List of dates
         * data(n): Values of each series.
         * data is a rectangular array, every value matches a date
         */
        data = new ArrayList</list><list <Object>>();
        List<object> dates = new ArrayList</object><object>();
        data.add(0, dates);
        for (int i = 1; i < numSeries; i++) {
            List<Object> values =
                    new ArrayList</object><object>();
            data.add(i, values);
        }
 
        format = new SimpleDateFormat("MM/dd/yy");
    }
 
    /**
     * Parse a given input stream for data. Not thread safe. It is assumed than
     * the number of tokens on the stream is constant and there
     * are no data holes. The caller is responsible from closing the stream
     * @param io The data source
     * @throws Exception If there is a problem reading the stream
     */
    public void parse(InputStream io) throws Exception {
        BufferedReader lineRdr = new BufferedReader(new InputStreamReader(io));
        String line = null;
 
        try {
 
            while ((line = lineRdr.readLine()) != null) {
 
                if (skipNonNumberPatter.matcher(line).find()) {
                    continue;
                }
 
                String[] tokens = splitPattern.split(line, -1);
                int numSeries = tokens.length;
                if (numSeries ==0 || tokens[0] == null) {
                    return;
                }
 
                if (numSeries != data.size()) {
                    String error = String.format(
                            "Number of expected tokens is %s, got %s",
                            data.size(),
                            numSeries);
                    throw new Exception(error);
                }
 
                // Store dates as numbers, let the caller do any conversions
                List</object><object> dates = (List</object><object>) data.get(0);
                dates.add(format.parse(tokens[0]).getTime());
 
                // Get the values for each series now (rest of the tokens)
                for (int i = 1; i < numSeries; i++) {
                    List<Object> values = (List</object><object>) data.get(i);
                    values.add(Float.parseFloat(tokens[i]));
                }
 
            }
        } catch (Exception exp) {
            throw exp;
        }
 
    }
 
    /**
     * Get the collected data as a List of Lists. First element of the returned
     * list contains the dates as Epoch long dates, after that the series
     * @return Array of dates as epoch long
     */
    public Long [] getDates() {
        return data.get(0).toArray(new Long[0]);
    }
 
    /**
     * Get the values as a list of
     * @param index Valid ranges go from 1 to n
     * @return Array of float series values
     */
    public Float [] getSeriesValues(int index) {
        if (index < 1 || index > data.size()) {
            throw new IllegalArgumentException(
                    String.format("Invalid series index %d", index));
        }
        return data.get(index).toArray(new Float[0]);
    }
 
 
    /**
     * Unit test, show how the parser works on a CSV file. THIS SHOULD BE A
     * JUNIT TEST INSTEAD!!!
     * Program expects the property.
     * @param args List of files to parse. Each one like: numTokens:fullpathFile
     * @throws Exception If there are any problems
     */
    public static void main(final String [] tokens) throws Exception {
        for (String token: tokens) {
            String [] parts = token.split(":", -1);
            InputStream in = null;
            try {
                int nTokens = Integer.parseInt(parts[0]);
                File f = new File(parts[1]);
                if (f.canRead() && f.isFile()) {
                    in = new FileInputStream(f);
                    CsvDataParser instance = new CsvDataParser(nTokens);
                    instance.parse(in);
                    in.close();
                    Long [] dates = instance.getDates();
                    Float [] values = instance.getSeriesValues(1);
                    for (int i = 0; i < dates.length; i++) {
                        System.out.println(
                                String.format("%s -> %s",
                                new Date(dates[i]), values[i]));
                    }
                }
            } catch (NumberFormatException nfe) {
                System.err.println(
                        String.format(
                        "Invalid expected token value: '%s'", parts[0]));
            } catch (Exception exp) {
                throw exp;
            } finally {
                if (in != null) {
                    in.close();
                }
            }
        }
    }
 
}
</object></list>

Sin embargo la interfaz gráfica me abofetea con este error: No tests root folder was found

Que fastidio. No soy un experto en NetBeans (me defiendo mucho más con Eclipse), así que en vez de estar echando código ando resolviendo estos problemas. ¡Que perdida de tiempo!

Me pregunto si Oracle piensa competir en serio con Adobe Flash si su editor principal aún tiene este tipo de problemas.

Amanecerá y veremos, por los momentos ando tratando de resolver el asunto yo mismo, al mismo tiempo pedí ayuda en los foros oficiales. Una vez resuelto, podré correr Junit para JavaFX como lo indica este excelente blog.

java, javafx, kodegeek, oracle

Venezuela prohibe juegos de video violentos: El estado como niñera

Jueves, 11 de marzo de 2010

Hoy terminé de jugar ‘Call of Duty: Modern Warfare 2‘. El juego tiene los mejores gráficos que he visto hasta la fecha en el XBOX 360, la acción te sumerge de cabeza en la historia y simplemente no puedes dejar de jugar hasta que terminas.

El juego es increíblemente violento, cargado de estereotipos (los Musulmanes pobres subversivos, los rusos bélicos e invasores). En una de las escenas uno participa en una masacre en un aeropuerto, en contra de civiles indefensos para luego ser traicionado y ejecutado en el sitio (nota, el juego ofrece una opción para saltar estas misiones porque estan claros que son ofensivas aunque por otro lado si es asi entonces ¿porqué fueron incluidas?).

¿Es un mal juego? Hay una linea muy delgada aquí. A mi me pareció entretenido, lo renté (no lo compré) y pienso moverme al siguiente juego. Yo estoy claro que hay cosas equivocadas con el juego pero al mismo tiempo me provocó ponerme en los zapatos de estos soldados ficticios, jugar al agente de misiones especiales (similar a James Bond).

Es por eso que los juegos tienen una categoría por edad en los Estados Unidos. Este juego es catalogado como “Apto para adultos” (Mature) y se supone que usted es mayor de edad para comprarlo. La libertad de expresión le permite a usted no comprar el juego y decidir si sus hijos pueden jugarlo o no.

En los Estados Unidos la gente se queja con el congreso y cuando hay juegos que se pasan de la raya le se pasan leyes para tener mejor control. La gente no compra estos juegos, los critican y estos pierden valor en el mercado, lo cual le da un escarmiento a las compañías que abusan de la libertad de expresión.

No es un sistema perfecto, pero al menos la gente tiene la última palabra.

¿Que se hace en Venezuela? En Venezuela se prohíben y se ofrece cárcel a quienes los vendan. Sin preguntarle a nadie.

Esta medida que tiene poco tiempo de haber sido implantada en Venezuela y si usted sabe utilizar Google (¿qué, usted utiliza otra cosa? :) ) seguro encontrará sitios como este reseñando la medida.

Esta ley en mi opinión no resuelva problemas serios y no ofrece una protección real en contra de los juegos violentos. En mi opinión:

  • Le quita poder de decisión al consumidor. Es responsabilidad de los padres el educar a sus hijos y decirles que es correcto. Si bien hay muchos idiotas que prefieren que tomen decisiones por ellos todavía existen los padres capacitados que puede decidir por si mismos lo que es mejor para sus hijos
  • La línea de lo que es violento y lo que no es muy sutil en muchos casos. Sin un estándar esta medida se convertirá en una fuente de abusos y discriminación
  • ¿Quien se va a a segurar que estas leyes se cumplan, cuando no hay un reglamento claro?¿cuanto va a costar eso? ¿quien va a pagar para que este sistema se mantenga?

Me parece que es un arreglo a medias o peor aún un intento poco sutil de tapar las verdaderas razones de la inseguridad en Venezuela. Si bien es cierto que hay mucha basura en los vídeo juegos de hoy en día también hay que reconocer que el consumidor es inteligente y que sabe lo que hay que comprarle a un niño. El estado Venezolano tiene mejores cosas que hacer (como solucionar la creciente crisis energética) que andar preocupándose de lo que juegan unos pocos privilegiados en el país (que alguien me corrija y me diga si una vídeo consola es barata en Venezuela en donde los importadores le ganan hasta 2 veces más el precio al hardware).

La gente no es estúpida y puede decidir por si misma si un producto es bueno o malo. El estado no debe decidir por ellos, en todo caso debe proporcionar herramienta para castigar a quienes tratan de tomar ventaja del sistema.

Bueno, no me voy a extender más. Voy a ir a jugar otro juego violento, Halo ODST el cual no dejo que lo vea mi hijo Sebastian por razones obvias :)

kodegeek, venezuela , ,

¿Amanda se vuelve una solución comercial?

Sábado, 27 de febrero de 2010

Hoy leyendo mis correos de la lista de Amanda (a la cual estoy metido más por razones sentimentales que otra cosa) me conseguí con esto:

Greetings;

I have taken note that there have been no new snapshots made available in a
bit over 3 weeks now, and other than the downloads page, all of the rest of
the new web pages point to paid support.

What is the future direction of amanda?

No es una sorpresa, yo ya habia visto algo de esto en Community East con ZAmanda. Amanda es en mi opinión el mejor software de respaldo de código abierto que existe hoy en día y su evolución hacia software comercial con raíces de código abierto (como MySQL) es evolucionaría.

Yo realmente creo que el producto va a mejorar, sobre todo que ahora puede ser considerado una alternativa con soporte pago para las empresas (y definitivamente no creo que lo cierren).

java, kodegeek, linux, opensource , , ,

Kodegeek busca colaboradores para el blog

Lunes, 1 de febrero de 2010

Kodegeek, uno de los blogs con más tiempo en la blogosfera Venezolana está buscando colaboradores para escribir artículos relacionados con tecnología. Puede ser de cualquier lenguaje de programación, análisis de tecnologías o de cualquier cosa relacionada con el mundo Geek. ¡Si estas interesado envíame tu curriculum y dime porque que quieres escribir en el blog!

La idea es darle más pluralidad al blog para que otras personas se beneficien con múltiples puntos de vista.

Puedes contactarme en la siguiente dirección: josevnz ‘at’ kodegeek.com, este es el momento perfecto para intercambiar ideas.

kodegeek, venezuela , ,

Aprendiendo JavaFX: Animaciones

Domingo, 24 de enero de 2010

Más código del curso de JavaFX. Aún sigo retrazado, la entrega final es el 3 de Febrero pero aún tengo esperanzas de llegar a tiempo :) .

En este caso, estuve trabajando en la lección de animaciones; La idea es hacer que un par de tiburones se paseen por la pantalla de manera indefinida:

Animación de tiburones en JavaFX

Animación de tiburones en JavaFX

El código como siempre se lo pueden bajar desde la página de KodeGeek en Source Forge.

Las gracias a Sebastian (mi hijo de 3 años) ya que me dio una pista sobre como resolver el problema. Hasta que la animación no salió no se fué a jugar con sus juguetes :D

¡Que lo disfruten!

java, javafx, kodegeek, programación , ,