Hazte Indie

Para introducir qué es eso de un desarrollador indie o indie developer os dejo aquí un nuevo recurso. Se trata de una charla de José Vazquez [@josevazquez - http://www.littlemustard.com] que impartió él mismo en la Second Conf (Chicago) el pasado mes de octubre. La podeis oír tanto en español como en inglés.

Hazte Indie

Se da la coincidencia de que José se dedica a la programación iOS, por lo que este recurso encaja perfectamente en el blog. Espero que os resulte de interés.

Publicado en Recursos | Etiquetado , | Deja un comentario

Moveable Feasts: dando la vuelta al mundo

Tras los primeros once días en el App Store no puedo más que sentirme afortunado por la gran difusión que está teniendo Moveable Feasts. Como puede apreciarse en la gráfica, se ha descargado desde un total de 36 países diferentes, algunos de ellos bastante pintorescos e inesperados. Cabe destacar la gran mayoría de usuarios españoles, practicamente el 50% del total, y la alta participación de usuarios procedentes de China.

Descargas porcentuales por procedencia

Las cosas marchan bien. Aunque no es, ni mucho menos, una venta espectacular, ha superado sobradamente todas mis espectativas. Ya está lista la nueva versión 1.2, por lo que se encontrará disponible muy pronto en la App Store.

Publicado en Mis apps | Etiquetado , , | 2 comentarios

Moveable Feasts: “Cómo se hizo”

Lo cierto es que este programita tan sencillo, extremadamente monográfico y sectorizado lleva conmigo desde muchos años antes de que a Steve jobs se le ocurriera algo remotamente parecido a un iPhone. Vamos a dar un breve repaso sobre cómo hemos llegado hasta aquí.

Un poco de historia

Esta historia comienza a finales de siglo pasado (siempre quise decirlo). Como os podeis imaginar, aunque internet ya existía de una forma muy parecida a la actual, las personas que teníamos acceso a ella desde casa eramos una minoría que se gastaba un dinero curioso a fin de mes, sin tarifas planas todavía, por una conexión con un modem por RTB a 33’6. No era tan fácil en ese momento encontrar tanta información sobre estas cuestiones como la que puede haber hoy. En este contexto de lentitud, cutrez y desconexiones constantes, es normal que la idea inicial de todo partiera de aplicarle ingeniería inversa a… una agenda-dietario de oficina. Recordareis que, en estos “libros” al final suele haber un mapa de carretera, un santoral y un calendario perpetuo entre otras cosas. Pues tomé el calendario perpetuo de fiestas móviles, que no eran sino una serie de tablas y sus correspondientes pasos para llegar al resultado deseado. No tenia ni pies ni cabeza, pero en un simple ejercicio de racionalización extraje el algoritmo y se me ocurrió implementarlo con Javascript. Todo esto debió suceder ya alrededor de 1999. Lo publiqué en mi web y mi sorpresa fue enorme cuando varios años después, tras buscar en el ya todopoderoso google, había dado la vuelta al mundo.

Tuve la idea, cuando lo publiqué, de poner una especie de licencia que invitaba a que cualquier persona se copiara el script a cambio de una simple atribución de autoría. En la vida imaginé que pudiera haber interesado a nadie, pero la realidad es que se convirtió en un recurso muy extendido entre los webs católicos de todo el mundo.

Captura de http://www.lapasion.orgÉsta es la pinta que tenía en la versión que se personalizó la gente de http://www.lapasion.org con sus “colores”, allá por 2001. Me ha hecho mucha ilusión encontrarmelo en Internet Archive Wayback Machine.

El algoritmo

Resulta que, al cabo de los años, y gracias a las facilidades del internet de hoy en día en el que todo está tan indexado, me entero de que lo que yo estaba usando en aquel entonces se llama Algoritmo de Butcher, y es uno de los varios que hay para realizar este cálculo. Rivaliza con el ideado por el mismísimo Gauss por ser uno de los más empleados. Lo usé en aquella ocasión para implementar mi primer programa en Javascript, y desde entonces lo empleo como mi propio “hola mundo” personal cada vez que me meto a aprender algo nuevo. Os dejo la pinta que tenía mi implementación original.

  1. function calcular()
  2. {
  3. if (verificar(anio)){
  4. A = (anio % 19);
  5. B = (anio % 4);
  6. C = (anio % 7);
  7. D = (( 19 * A + 24 ) % 30);
  8. E = (( 2 * B + 4 * C + 6 * D + 5 ) % 7);
  9. F = 15 + D + E;
  10.  
  11. if((D+E) > 16){
  12. mes="Abril";
  13. F=F-31;
  14. }
  15. else{
  16. mes="Marzo";
  17. }
  18.  
  19. resultado=F + " de " + mes;
  20. }
  21. else{
  22. alert("Ha introducido un año incorrecto");
  23. resultado=0;
  24. }
  25.  
  26. return (resultado);
  27. }

Como puede apreciarse, es más simple que el mecanismo de un cubo. Quizá esa sea una de sus virtudes. Con estas pocas lineas se consigue calcular ni más ni menos que la fecha de la primera luna llena de primavera, conocida como Luna de Nisán en recuerdo al mes del calendario judio. Una vez que se obtiene, se hacen las traslaciones para el cuadre con el día concreto de la semana que corresponde.

Aquí teneis mi implementación en Objetive C, la misma que uso en Moveable Feast.

  1. NSUInteger A = anio % 19;
  2. NSUInteger B = anio / 100;
  3. NSUInteger C = anio % 100;
  4. NSUInteger D = B / 4;
  5. NSUInteger E = B % 4;
  6. NSUInteger F = ( B + 8 ) / 25;
  7. NSUInteger G = (B - F + 1) / 3;
  8. NSUInteger H = ((19 * A) + B - D - G + 15) % 30;
  9. NSUInteger I = C / 4;
  10. NSUInteger K = C % 4;
  11. NSUInteger L = (32 + (2 * E) + (2 * I) - H - K) % 7;
  12. NSUInteger M = (A + (11 * H) + (22 * L)) / 451;
  13. NSUInteger P = H + L - (7 * M) + 114;
  14.  
  15. NSDateComponents *componentes = [[[NSDateComponents alloc] init] autorelease];
  16. [componentes setDay:(NSUInteger)((P % 31) + 1)];
  17. [componentes setMonth:(NSUInteger)(P / 31)];
  18. [componentes setYear:(NSUInteger)anio];
  19.  
  20. NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar] autorelease];
  21.  
  22. domingoResurreccion = [[gregorian dateFromComponents: componentes] retain];

Como puede apreciarse, las dos versiones no son exactamente iguales. La explicación es que la primera de ellas en Javascript calcula realmente el Domingo de Ramos, y la segunda en Objetive C lo que calcula es el Domingo de Resurrección y usa un desarrollo un poco más largo para evitar el condicional que averigua el mes,  que en su día tuve que improvisar yo mismo para el primer caso.

No me enredo más, que esto está quedando ya muy largo y no quiero aburrir a nadie. Aprovecho la ocasión para informaros de que está prácticamente finalizada la primera actualización de Moveable Feasts, que traerá varias novedades que serán comentadas por aquí. Esta semana la enviaré a Apple, y estará disponible en varios días.

Publicado en Mis apps | Etiquetado , | Deja un comentario

Moveable Feasts destacado en el App Store

Creo que para ser una primera aplicación y no haberme querido meter en complicaciones no está saliendo la cosa demasiado mal. Desde el primer momento pretendí que fuera una experiencia piloto de cara a próximos productos más serios. Por eso fue que elegí esta idea tan sencilla. Pues bien, los dos primeros días en el App Store están superando con creces mis expectativas, al menos teniendo en cuenta de lo que se trata, tanto en número de descargas como en la cantidad de países desde los que se están produciendo. Desde la primera versión he querido que estuviese traducida al inglés para facilitar en lo posible el uso de Moveable Feasts en cualquier parte del mundo, y parece que ha sido un acierto a tenor de los resultados.

Captura del App Store

La última sorpresa que me he llevado es la inclusión de Moveable Feasts en el segundo lugar (primera de las gratuitas) entre la selección “Nuevo y digno de destacar” (enmarcado en rojo en la imagen superior) dentro de la sección “Utilidades”. No me lo esperaba para nada y ha supuesto una gran satisfacción.

Aprovecho la ocasión para comunicar que estoy cerrando la lista de requisitos, mejoras y correcciones para la primera actualización, entre los que casi con total seguridad va a encontrarse la traducción al portugués, y no dejo de lado el próximo proyecto, que será algo más serio. Ya informaré más adelante. Gracias a todos los usuarios por vuestro apoyo.

Publicado en Mis apps | Etiquetado , | 2 comentarios