Servidor de sincronizacion BestSeller en OSX!

0 comentarios | 0 pingbacks | etiquetas: bestseller, osx
Alguien dijo alguna vez algo como
Peor que no tener nada, es recibir algo roto
Y es algo muy cierto en especial cuando se programa. Para evitar “reinventar la rueda” de forma rutinaria se utilizan funciones que ya están establecidas en los lenguajes de programación o en sus frameworks, suponiendo que son mejores de lo que uno puede hacer por si mismo — suposición que casi siempre es verdad -.
Para BestSeller utilizo una base de datos Sqlite, que es la solución perfecta en el iPhone. Sin embargo, Sqlite tiene tanto como caracteristica asi como deficiencia que todo lo almacena en formato de caracteres & integrales. No hay campos tipo fecha, o booleanos, o decimales, etc. asi como en otras bases de datos como Firebird o Sql Server.
Eso plantea un reto especial a la hora de almacenar fechas. Entre los desarrolladores de Objective-C/iPhone hay dos estrategias básicas:
-
Almacenar la fecha con
[NSDate timeIntervalSinceDate :], que básicamente retorna un valor tipoDouble, lo cual tiene la desventaja de que no es compatible con las funciones de fecha de Sqlite ni se puede leer por un humano o: - Almancer la fecha como un string, lo que puede ser compatbile con las funciones de Sqlite y se puede leer.
Mejor dicho, elegi la segunda opción (quien no?) y para evitar ambiguedades (que al manejar fechas, realmente hay muchas), utilizo el estandar ISO en especial el formato YYYY-MM-DDTHH:MM:SS.
Y como generarlo con Obj-C? Super facil, usando este código:
:::Objective-C
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
strValue = [NSString stringWithFormat:@"'%@'",[dateFormatter stringFromDate: date]];
[dateFormatter release];
Super fácil, no? Eso es lo que dice la documentación, eso es lo que aparece en los ejemplos, y eso es lo que funciono, hasta que descubri que hay un pernicioso bug que se revela cuando el usuario usa el iPhone en formato de 12 horas!. Eso genera una serie de confusos problemas, que se detallan aquí.
Afortunadamente, logre detectarlo (por error!) mientras hacia pruebas. Y la solución? Lo que se haya en internet hasta donde se, pesimas (en el link anterior el autor recomienda parsear el string resultante y hacer un hack poco elegante) asi que decidi implementarlo yo mismo. No resta decir que no es tan obvia la solución. Pero aquí esta (implementada como una categoria para NSDate):
:::Objective-C
@implementation NSDate (DateFunctions)
— (NSString *) formatAsISODate {
NSDateComponents *dateComp;
NSCalendar *cal = [NSCalendar currentCalendar];
dateComp = [cal
components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
| NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
fromDate:self];
return [NSString stringWithFormat:@"%02d-%02d-%02dT%02d:%02d:%02d",dateComp.year,
dateComp.month,dateComp.day,dateComp.hour,dateComp.minute,dateComp.second];
}
Así que la próxima vez que uses código que tiene que ver con internacionalización, asegurate que no esta roto.
0 comentarios | 0 pingbacks | etiquetas: iphone, objective-c, rant
Desde hace varios meses he estado desarrollando una nueva aplicación para el iPhone para el vendedor móvil, la toma de pedidos, facturas, cobro de cartera y se puede integrar con cualquier ERP.
Esta siendo usada con éxito en algunas distribuidoras mayoristas pero es hora de hacer pruebas mas internacionales. Es por eso que estoy reclutando beta testers para esta aplicación.
Inicialmente, requiero desarrolladores con conocimientos de como integrarse con ERPs/Contabilidades/Programas financieros para validar la interface de integración.
Si crees que cumples con el perfil, deseas colaborar y liberar tu código como un aporte open source, te invito a inscribirte aquí.
0 comentarios | 0 pingbacks | etiquetas: bestseller, beta, delphi, python
Por fin aceptado en Apple Dev Program para el iPhone
Luego de un (mas que deseado) largo proceso -que increiblemente requirio enviar faxes varias veces, llamadas telefonicas y correos- por fin recibi el acceso al Developer Program para el iPhone, que permitira publicar aplicaciones de El mlabarista en el AppStore y ser accesibles a mas de 30 millones de usuarios de iPhone & iPod touch en el mundo.
Pronto estare actualizando con mas noticias.
0 comentarios | 0 pingbacks | etiquetas: apple, iphone
Portando de FreePascal a Delphi (facilitar multi-plataforma)
Estoy en la fase de crear un mini-servidor de aplicaciones que se ejecutará en Windows & Linux.
He elegido a FreePascal como la herramienta para realizar la labor de portar el código de Delphi (Windows) a esta plataforma. Ya tengo resuelto los problemas mayores y el hecho de que librerias como la de RemObjects este ya portada a FreePascal es un gran alivio.
Sin embargo, siempre en el camino se van encontrando pequeños inconvenientes.
Una función importante del sistema, es su mecanismo de plugins, los cuales por múltiples razones (técnicas & aburridas) decidi invocarlos usando la tecnica “antigua” pero probada de encadenamiento de comandos y por ello necesito invocar de forma transparente scripts & ejecutables redireccionando la salida y los errores (stdin, stderror) de los comandos. Para los que no entiendan, es similar a abrir la consola del DOS y ejecutar “dir .” y capturar el resultado de pantalla, pero todo sin intervencion del usuario y sin que aparezca la ventana del DOS.
Hacer esto es muy simple. El ejemplo clasico se puede ver en este link. Y bueno, como hacerlo multiplataforma?
Se me ocurrio que ya que voy a portar el programa a FreePascal de todas maneras, pues mirar como lo hacen alli. Y encontre la informacion sobre la clase TProcess. Muy bueno y todo, pero ya que el IDE del FreePascal (lazarus) no es tan productivo como el de Delphi y que igual no he terminado el proceso de preparar el sistema para Freepascal me pregunte que tan viable era hacer una transferencia de codigo a la inversa: Del FreePascal al Delphi.
Y resulto ser mas fácil de lo que esperaba!.
- Bueno, primero se instala Lazarus desde la página oficial, el cual incluye el compilador FreePascal y el código fuente.
- El archivo que contiene la clases _TProcess _ esta en ´DIRECTORIO INSTALACION LAZARUS\lazarus\fpc\2.2.5\source\packages\fcl-process\src\process.pp´. (NOTA: La extensión .pp es la por defecto en freepascal).
- Copie el archivo process.pp & pipes.pp & la carpeta windows al directorio de la aplicación. Dentro de esta carpeta hay unos archivos .inc que son los que contienen el código especifico de cada plataforma, en este caso el windows.
- Ahora renombre los archivos .pp a .pas. Y copie el contenido de los archivos .inc dentro de cada .pas (por pura conveniencia).
- Ahora, borre la directiva {$mode objfpc} del inicio de cada .pas.
- Por último compilar y ver errores. Te saca que no encuentra unos tipos de datos (eje: DWORD), el cual se arregla fácil haciendo click derecho sobre el tipo, menu refactoring/Find Unit.
- Se corrige este código:
(Ubicado en pipes.pas):
Function CreatePipeHandles (Var Inhandle,OutHandle : THandle) : Boolean; begin Result := CreatePipe (@Inhandle,@OutHandle,@piInheritablePipe,PipeBufSize); end;
por:
Function CreatePipeHandles (Var Inhandle,OutHandle : THandle) : Boolean; begin Result := CreatePipe (Inhandle,OutHandle,@piInheritablePipe,0); end;
Y listo!
0 comentarios | 0 pingbacks | etiquetas: delphi, freepascal
Crear una mejor experiencia para el usuario: Guia del Logo para Windows
No hay nada mas frustrante que cuando estas con el computador y todo sale mal.
La experiencia del usuario es la combinacion del Hardware + Sistema Operativo + Resto del software. Muchas veces se le hecha la culpa a los 2 primeros pero de forma frequente el problema real esta en el ultimo.
Son incontables las veces que frente a un problema con el computador la solución haya sido “Reformatear el equipo” debido a que el software en cuestion hace algo mal hecho.
Como desarrolladores tenemos la responsabilidad de hacer aplicaciones funcionales y que no frusten a la gente. Solo que muchas veces desconocemos que existen guias & buenas practicas a seguir para tal fin.
Estas operan bajo el umbral del “Windows Logo Program” que es una certificacion que da Microsoft a los productores de software (es cuando encontramos esas etiquetas que dicen “Certificado para Windows Vista” & similares) que delinea buenas practicas a seguir. Aunque la certificacion oficial tiene un coste elevado, nada impide el seguir las pautas que se delinean.
Entre ellas se encuentran:
- Forma correcta de instalar aplicaciones que funcionen sin permisos de administrador y no muestren el molesto aviso del UAC en Vista
- Como hacer apliaciones que operen de forma segura
El documento se puede descargar de aquí.
0 comentarios | 0 pingbacks | etiquetas: delphi, programacion, windows
Como ser un programador contratable…
Aunque parezca que estoy con un trauma creativo con la poca actualización de este blog, la verdad es que…si, es asi. No! Realmente trabajando duro y conversando con la gente de los foros de www.clubdelphi.com . Esta conversación si fue bien interesante, trata sobre como aumentar las probabilidades de ser contratado en una empresa de software, asi que denle una mirada.
0 comentarios | 0 pingbacks | etiquetas: programacion
Ganador 7o concurso de planes de negocios
Durante al año pasado inscribi uno de los proyectos en los que estoy trabajando en el 7o concurso de planes de negocios, proyecto el cual salio premiado en el cluster de tecnología.

Este trata sobre un sistema de toma de pedidos para el iPhone — el cual es una versión mejorada del software del Vendedor Portátil para la plataforma PocketPC — que llevo más de un año implementando en varias distribuidoras del departamento de Antioquia.
El proyecto ya esta en marcha & prontamente estare posteando más información, y pretendo que sea mucho más accecible y funcional incluso para freelancers & pequeñas empresas.
0 comentarios | 0 pingbacks | etiquetas: anuncios
Mejorando los colores al editor de Delphi
Esta es la historia de como se amaestra a un elefante:
- Se captura de pequeño, y se ata a un arbol o poste con una cadena o cuerda. El elefantito ve que no se puede soltar.
- El elefante crece. Sigue atado al mismo poste o cadena. Pero ya dejo de intentar safarse…
Con las herramientas pasa lo mismo. Muchas veces uno asume que las cosas no se pueden cambiar, porque antes no se podia… o no se sabia como.
Una de las cosas que muchos programadores no se toman el trabajo de mejorar es el aspecto del editor de código. Lo cual es extraño, igual uno estara trabajando sobre el todo el tiempo.
Hace mucho salio este sitio:
que muestra diversos esquemas de colores para todos los gustos, optimizados para una mejor lectura… o solo porque a alguien le parece lindo ;).
El punto es que también se puede personalizar el editor de código de Delphi, solo que desafortunadamente no es tan intuitivo como parece, principalmente, porque el control que se utiliza en el dialogo de opciones para seleccionar los colores es una reliquia del windows 3.11 en cuanto a funcionalidad, lo cual seguro desanima a más de uno. Es su cadena que lo ata al arbol.
Pero hace mucho descubri como hacer el cambio — no proclamo ser el primero, sino más bien que algún día se me prendio el bombillito — y hoy quiero compartir el truco.
Primero, es necesario abrir el regedit y viajar a la carpeta:
HKEY_CURRENT_USER\Software\*CODEGEAR*\BDS\*VERSION*\Editor\Highlight
Nota: Reemplazar a Codegear por Borland y a Version por la versión interna del IDE de Delphi para ubicar la carpeta exacta. Si no sabe como, busque en el regedit por Assembler o Attribute Names que son nombres de las opciones en las opciones del Delphi para los colores del editor.
Allí se encuentran todas las opciones del editor de código y se pueden cambiar. Es importante notar que es mejor sacar un backup por si acaso (click derecho sobre HighlightExport), luego hay que buscar un esquema que te guste.
Para el mío, me baje a Intype que es un editor minimalista para programadores. En la carpeta donde se instala, en el directorio themes hay unos archivos con unos esquema muy buenos. Utilizando de referencia a pastels_on_dark.itTheme* y con la información descriptiva (pues, para un programador quiero decir!) que hay en esos archivos, emepza a modificar asi:
- En Delphi, elegi al esquema de color Twilight que es el único de fondo oscuro, y que sirve de base.
- Miro en el archivo *.itTheme el código hexadecimal del color (ej: background : ‘#211E1E’) y le cambio el simbolo # por $.
- Ahora, y esta es la parte molesta del proceso, es necesario ir a cada sub-rama de Highlight dentro del regedit y cambiar la opción Background Color New por el código hexadecimal $211E1E. IMPORTANTE solo hacerlo para los que estan preestablecidos como clBlack.
- Seguir ajustando las demás propiedades. Es casi obvio.
- Reiniciar el Delphi y ver que tal quedo todo. Igual por las opciones del Delphi se pueden hacer ajustes de ser necesario.
De esa manera, asi queda:

Espero que esto los anime a desatarse del arbol ;).
0 comentarios | 0 pingbacks | etiquetas: delphi
Migrando a un nuevo servidor.
Dentro de las próximas 2 semanas estare haciendo una migración de servidor a una versión más actualizada.
Durante ese tiempo, es posible que tenga momentos fuera de línea o que ciertas cosas no funcionen por momentos.
Quizas si me siento aventurero cambie apache modpython por otra cosa ;).
