30 October 2008

No More Checks

Apparently Knuth suffered of a financial fiasco, therefore he decide not give away more checks for awards of finding bugs in his books. For sure these checks are going to get a more romantic value in the years.

Now he made a fictional bank (called The Bank of San Serriffe) with accounts of people who have found some bugs, I can see my account with 0x$1.20 :)

It's sad to see how criminals uses anything to get profit, even destroy a nice ludic way to support Science.



Al parecer Knuth sufrió de una estafa, por lo cual ha decidido no dar más cheques de recompensa a las personas que encuentren bugs en sus libros. Seguramente estos cheques van a tener un valor más romántico a través de los años.

Ahora hizo un banco ficticio (llamado The Bank of San Serriffe) con cuentas de personas que hayan encontrado bugs, puedo ver mi cuenta que tiene 0x$1.20 :)

Es triste ver como los delicuentes usan lo que sea para obtener ganancias, incluso destruyen una manera lúdica para apoyar las Ciencias.

Instant Insanity

despues de encontrar este puzzle en una feria... y el vendedor me dio las instrucciones al revés.


  • primero lo encontre como DNA, después como Instant Insanity
  • hice la tipica busqueda de fuerza bruta por las mismas intrucciones erroneas que el vendedor me dio.

Usando povray hice las soluciones:






---

Hay un blog parecido que mostro una solucion de fuerza bruta tambien
http://nat.org/blog/?p=831


29 September 2008

El Arte del Diseño de Juegos con Microcomputadora


El famoso libro de Chris Crawford es de 1981 y habla de la creación de video juegos analizando juegos de la época, hechos por él y los blockbusters del mercado de terceros, a pesar, de la antigüedad aun se mantienen muy frescas las ideas planteadas.

El libro original The Art of Computer Game Design en inglés y existe de forma libre desde el sitio de la Washington State University.

Con el permiso de Chris Crawford ahora estoy publicando la versión en español de su libro llamado: El Arte del Diseño de Juegos con Microcomputadora. (27MB)

Esta versión esta en formato PDF de escaneos directos del libro original, de igual forma que el proyecto en inglés es para la disponibilidad de estudiantes y quienes estén interesados en diseño de video juegos.

Si alguien se entusiasma en traspasar a texto este libro (OCR, Manualmente), que sea bienvenido, por favor no dude en hacerlo y me puede avisar para también subirlo a mi sitio web.

26 September 2008

Binary Decision Diagrams

Good news, once again Dr. Knuth has published a new draft from his classical The Art of Computer Programming (every time closer to finish Volume 4). It can be found in his site.

This draft is about Binary Decision Diagrams, which is a data structure to represent and manipulate Boolean functions.

 



09 September 2008

Martin Gardner’s New Mathematical Library

Martin Gardner esta sacando versiones actualizadas de sus clásicas columnas de Juegos Recreativos de la Revista Scientific American llamada The New Martin Gardner Mathematical Library. Los editores son de nivel mundial: Donald J. Albers, Gerald L. Alexanderson, John H. Conway, Richard K. Guy, Donald E. Knuth, Peter L. Renz.

Además en el blog de Cambridge se esta regalando/sorteando copias gratis al resolver un puzzle clásico de Gardner, cada semana. Van a ser 6 libros, asi que todos pueden concursar. Lo interesante es que si uno responde mejorando la respuesta ya conocida se supera el filtro del sorteo y tendrá la chance de ganar el libro directamente, pero lejos es mejor la satisfacción lograda al dar una respuesta mejor a algún problema del mítico Gardner.

http://www.cambridge.org/series/sSeries.asp?code=NGML

https://www.cambridge.org/core/series/new-martin-gardner-mathematical-library/F9984B4DE23B5BF13BB06E332D9280B7

 

10 June 2008

J2ME Game Development - Mex al Rescate

This game (not finished) was based on fiction characters to create a mixture between maze/puzzle and action to play in mobile phones.

The big achievement of this project was to design a complete game with characters, levels, bosses, etc. being this one of the hardest process as Chris Crawford mentions in his classic book The Art of Game Design.

The principal J2ME literature and game framework was based on the famous book:
J2ME Game Programming, Martin Wells, Premier Press 2004, ISBN : 1-59200-118-1 , this has a funny rhetoric to explain how to obtain the best solutions to typical problems developing for MIDP-1, by limitations of this architecture. Its source code is freeware to be used and learn from it, any doubts please contact the author, who answered me questions about it.


The artwork was made by Guden, which becomes the most professional Project’s part.

The music at the cover page was made by Mex, which is the same principal character of the game :)

All source code, music, graphics are under license GPL v2.0

Binaries: MexRescate-bin.zip
Source Code: MexRescate-src.zip

You can download it and contribute it at http://sourceforge.net/projects/mexrescate





Este juego (no-terminado) fue basado en caracteres ficticios para generar una mezcla entre laberinto/puzzle y acción para jugar en celulares.

El gran mérito de este proyecto fue el poder diseñar un juego completo con caracteres, niveles, jefes, etc. siendo esta parte una de las más complejas tal como Chris Crawford menciona en su clásico libro The Art of Computer Game Design.

La literatura J2ME y marco de trabajo del juego fue basado en el famoso libro:
J2ME Game Programming, Martin Wells, Premier Press 2004, ISBN : 1-59200-118-1 , este posee una entretenida retórica para ir explicando como soluciono de mejor manera típicos problemas para MIDP-1, por su misma arquitectura con límites. Siendo su código freeware para su uso y aprendizaje, cualquier duda por favor contacten al autor que de muy buena disposición me contestó dudas al respecto.

La gráfica fue hecha por Guden, llegando a ser lo mas profesional del proyecto.

La música de introducción fue hecha por Mex, quien es el mismo personaje principal del juego :)

Todo el código fuente, música, gráficos esta bajo licencia GPL v2.0

Binarios: MexRescate-bin.zip
Código FUente: MexRescate-src.zip

Puedes bajarlo y contribuir en: http://sourceforge.net/projects/mexrescate





24 January 2008

Falsos Amigos

Hace tiempo que he tenido la inquietud del mal uso de traducciones de palabras de Inglés a Castellano. Es muy común sobre todo en mi area (programación) que se diga libreria a una biblioteca por el simple hecho que en Inglés es library. La primera página web que recuerdo haber leido que hace referencia a este fenómeno es del Profesor Ricardo Baeza.


Después empecé a encontrar diferentes palabras que ocurria lo mismo como interface, deprecate, actually, etc.

Por último navegando en la web me doy cuenta que este tipo de palabras están identificados por los linguistas/traductores como Falsos Amigos (simpático nombre), inclusive existen diccionarios al respecto. Además existen varias páginas web de listas de falsos amigos dentro de las cuales destacan cuales tienen una lista bastante grande y con explicación del falso amigo: Saber Inglés y la siempre útil Wikipedia.

26 September 2007

Precedence Operator

Kernighan & Pike in The Practice of Programming says ``Parenthesize to resolve ambiguity. Parentheses specify grouping and can be used to make the intent clear even when they are not required.'' p.6-7.

Many times the programmers use a few parenthesis to save code, however this is error-prone at operator precedence, a good concrete example I found was for Unpaws project made in Pascal, where the unary logic "not" operator has more precedence over the Set than the enumeration.

Fix diff patch:
530c530
< else if not (c in[6,13,16,17,18,19,20,21,22,23]) then inc(XPos);
---
> else if not c in[6,13,16,17,18,19,20,21,22,23] then inc(XPos);


Also from A Programmer's Guide to Java Certification, Second Edition says respect to unary operators: ``Expressions where variables are modified multiple times during the evaluation should be avoided, because the order of evaluation is not always immediately apparent.'' p.64

31 July 2007

Neo-vintage: Checkboxes in Struts

This is a small tip, but for its awkwardness, I'm publishing here because there is no much information about it (although it's quite old).

Just it says in the Struts' API, we have to leave in false every checkbox in the form, if that Action has Session scope otherwise the checkboxes keep those values. The reset() method doesn't work for it (Listing 1).

The other trick is to use a dummy variable to keep the values from the form modified by the user, because when we are in the Action the values is lost in the checkbox and it can be changed based on this dummy variable updating on JSP by Javascript then in the Java code (Listing 2 & 3).





Este es un pequeño consejo, pero por su extrañeza, lo estoy publicando aca porque no hay mucha información al respecto (aunque es bastante viejo).

Como dice en el api de Struts hay que dejar en falso todos los checkboxes si ese Action es de scope de Session o si no se queda estaticos esos valores. El metodo reset() no funciona para tal caso.(Listing 1)

El otro truco es usar una variable auxiliar para mantener los valores desde el formulario modificado por el usuario, porque cuando estamos en el Action los valores se pierden en el checkbox y puede ser cambiado basandose en esta variable auxiliar actualizandola en el jsp a traves de javascript y despues en el codigo Java (Listing 2 & 3).

http://struts.apache.org/1.x/apidocs/org/apache/struts/action/ActionForm.html
http://husted.com/struts/tips/007.html



Listing 1
//let's assume we run through a collection of checkboxes, we have to assign to false
Collection contracts = (Vector)form.get("contracts");
Iterator it = contracts.iterator();
while (it.hasNext()) {
   Contract contract = (Contract)it.next();

   if(contract.isSelected()){
   //here we do our business, if the checkbox is selected

   ContractPdf cpdf = new ContractPdf();
   cpdf.setP_id_contract( (int)contract.getNum_contract() );
   //.... more code
}

//because it's a checkbox and has session scope we assign to false.
contract.setSelected(false);
}

Listing 2

//asign dummy values depending of checkbox
f = document.forms[0];

if (f.p_all.checked) {
   f.p_all.value = "ALL";
   f.p_all_dum.value = "on";
} else {
   f.p_all.value = "NONE";
   f.p_all_dum.value = "off";
}

Listing 3

//update the checkbox parameter based on the dummy variable on Java tier.
if("on".equals((String)formulario.get("p_all_dum"))){
   formulario.set("p_all", "ALL");
}else{
   formulario.set("p_all", "ALL");
}


30 July 2007

Ninety Ninety Rule

http://en.wikipedia.org/wiki/Ninety-ninety_rule

``The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.''

Good criteria, It happens lately with projects at my job. Even better is what says at the end of the article, where the number you have calculated has to be multiply by 2 or even better by Pi (.31415 :P).




"El primer 90% del código toma el primer 90% del tiempo de desarrollo. El 10% restante del código toma el otro 90% del tiempo de desarrollo."

Buen criterio, me ha pasado últimamente con proyectos del trabajo. Mejor aun es lo que dice al final es interesante donde dice que el tiempo mejor calculado por uno hay que multiplicarlo por la constante 2 (Aranda2003) y mejor aun por Pi. ( 3.1415 :P ).

Blog Archive

Disclaimer

Qux