Google Web

29 dic 2009

Se acabo el 2009, pero no con ello #x

Grandes eventos marcaron la historia del hombre este 2009, las multiples fallas del LHC, muerte y destrucción, Geekologie robando corazones, el desarrollo de #x, el boom de twitter y otras chorradas dignas de los libros de historia de cinicos profesores de primaria. Y hablando de #x, me sorprende la cantidad absurda de codigo que se ha arrojado. Simplemente yo he defecado codigo en C, C++, ObjC y JAVA. Indirectamente en PHP y JScript. Siendo una plataforma casi digna de llamarse Kraken (como en The Daily WTF!) jajajaja.

Que más puedo decir?! Que BlackBerry es una perra, que C/C++ sigue siendo para nerds muerde almohadas y ObjC es tan distante de la humanidad como la luna. Lo veo, y casi puedo tocarlo, pero cada dia esta más y más lejos de mi. Algún llegare a ti, tan pronto comprenda "the rocket science". Fuera de romanticas frases, creo que no fue un glorioso año para WebCore, o si? Tengo que checar el SVN, pero creo que su verdadero poder fue codeado en 2008. Ya ahorita solo son lujos innecesarios, quien necesita acceso a Azure, por favor.

Les diria que "espero" el proximo año bloggear como la gente bien, pero por favor no me hagan decirles mentiras que no lo hare. Solo lo hago cuando me da gana, cuando no me siento depresivo por el odio que me tiene JAVA y cuando ASP me deja respirar en las noches. Ya va siendo noche, es momento de partir a casa a depositar mi mirada al frente y esperar el fin de Facebook, muerte al rey!

15 dic 2009

Update

Que hace el Simio?! Pues bien, no conformes con hundirme en oceano de depresión y soledad con hambruna en PHP y iPhone. Fue condenado al exilio de debuggear aplicaciones JAVA en BlackBerry. Horrible, simplemente horrible. No se lo deseo ni a Babuchas, jajaja.

Trabajar con el JRE de RIM y sus simuladores, en resumén con todas las cosas mágicas que giran en torno a crear una vil aplicación que haga HTTPRequest, es un dolor en los pelotas. Creo que peor que eso, es una patada en las pelotas por un burro descontrolado y con herrajes recien puestos. En otra ocasión les dare cuentas de horribles técnicas y pasajes oscuros de la formación de software en formato COD.

Pero las penurias no terminan ahí, sino que ahora tengo que compilar sabe que extraño game framework en C/C++ con Xcode para que corra en Mac. Él cual después de ciertas optimizaciones dignas de un SimioMeister (borrar archivos, relinkear dependencias e ignorar directivas), compila y "corre" arrojandome un horrible y criptico "Previous frame inner to this frame (gdb could not unwind past this frame)" en el gdb.

Habra alla afuera algún amo de la compilación de code en Mac que me explique porque gdb no me da razones de nada y simplemente tengo BAD_ACCESS exceptions?! Espero que haya afuera existan formas humanoides con razón a mis suplicas y me traigan paz y samples!

15 oct 2009

Google Wave

Tengo Google Wave, y mi vida no ha cambiado!

Además voy a discutir que:

1 - No entiendo Google Wave.
2 - Google Wave no tiene un listado de bots y gadgets oficial.
3 - No tiene Settings!
4 - No puedes buscar amigos para jugar ahorita que es Beta.
5 - Me gusta más Gmail.

30 sept 2009

Google Gadget

Son la onda, son pequeños, de colores y funciones tan variadas como el arcoiris. Por eso quize ser la onda de mis amiguetes y construi un pequeño Google Gadget, de la forma más cool! Agregarlo ahora a su Gmail, GCalengar, iGoogle, en su blog o donde quieran, spread the DeleitaMe Word! Aqui al lado del post lo pueden probar, no es lindo?!

El URL es: http://www.deleita.me/gadgets/buscadorDeleitame.xml

PD. Para usarlo en GMail tienen que tener Labs activado.

28 sept 2009

Mollos

Hoy la señorita Dekar me recordo la desaparecida Dev-vil y con ello quiero hacer un homenaje con una creatura favorita. Ilustración por el artista vago-local Crow:



HONOR A LOS MOLLOS!

DropBox

Spread the word...

Solo quiero alucinar un rato, con DropBox, invito a todos seguir el link y prepararse para usar una de las mejores herramientas GRATIS jamás existidas.

22 sept 2009

Más joyitas del pasado, pero ahora visuales

Los seguire molestando con joyitas del pasado, algunos epicos screenshoots:


El MP3 Renamer de Iunk, que old-fashion


El primer CWD (quien recuerda HWD?) corriendo en Linux


Simio probando Longhorn


AgentS en pleno vuelo


Y tengo más, jajaja!

21 sept 2009

El backup de los recuerdos

Mirando un poco en mis antiguos codigos, me encontre con perlitas, que no recordaba a ver creado y quiero compartir, dada su simpleza y belleza, ja! Digan lo que digan. Así que en este post, les muestro un elegante checador de server en C++ que abria un socket para mandar correo por SMTP. Creo que lo interesante es el modesto uso de un Winsock para hacer una tarea simple, no como las niñas novatas de hoy en dia, que si no encuentran una librería SMTP se matan.

Les dejo el código:


#include
#include "winsock2.h"

#pragma comment(lib,"Shell32.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"Ws2_32.lib")

SOCKET SMTPSock;

void rd() {
char recvbuf[512] = "";
recv(SMTPSock, recvbuf, 512, 0);
printf("Server - %s\n", recvbuf);
}

void snd(char * cmd, int ret) {
printf("Client - %s\n", cmd);
send(SMTPSock, cmd, strlen(cmd), 0);
if (ret > 0) { rd(); }
}

void sendmail(char * to, char * subject, char * mess)
{
char To[265], Subject[256], Mess[256];
strcpy(To, "RCPT TO:");
strcat(To, to);
strcat(To, "\r\n\0");
strcpy(Subject, "SUBJECT:");
strcat(Subject, subject);
strcat(Subject, "\r\n\0");
strcpy(Mess, mess);
strcat(Mess, "\r\n.\r\n\0");

WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");

SMTPSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (SMTPSock == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}

sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("MYIP");
clientService.sin_port = htons(25);

if (connect(SMTPSock, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
rd();
snd("HELO\r\n", 1);
snd("MAIL FROM:Servidores\r\n", 1);
snd(To, 1);
snd("DATA\r\n", 1);
snd(Subject, 0);
snd(Mess, 0);
snd("QUIT\r\n", 1);

WSACleanup();
}

void main() {
__int64 tspace, fspace;
SHGetDiskFreeSpaceEx("C:\\", NULL, (PULARGE_INTEGER) &tspace, (PULARGE_INTEGER) &fspace);
tspace = (tspace / 1024) / 1024;
fspace = (fspace / 1024) / 1024;

if (fspace < (tspace/2)) {
char buffer[256], buffer2[50], subject[256];
DWORD dw = 50;
sprintf(buffer, "El servidor cuenta con: %I64dMb/%I64dMb", fspace, tspace);
printf("OK1");
GetComputerName(buffer2, &dw);
printf("OK2");
strcpy(subject, "Espacio en disco muy bajo en ");
strcat(subject, buffer2);
printf("OK3");
sendmail("Simio Geek", subject, buffer);
}
return;
}

15 sept 2009

iPhone esperando

Asi es, no he publicado más sobre el iPhone, porque simplemente no he hecho nada para el iPhone, porque soy un hombre muy ocupado, tan ocupado que no he puesto el café. Ahora bien, lo que si he realizado es un poco de Mac dev, hasta que me dolieran los huesos.

Todo el Mac dev, ha ido bien, no me puedo quejar. Aunque el modelo de delegados/controllers de iPhone es mas entendible, el de Mac no es tán malo, pero si le faltan explicaciones como porque chingados necesitas un ArrayController para llenar un combobox, esta de WTF!

Otro punto, es que no he logrado montar una animación QuartzComposer encima de mis objetos y que se vea bien, el maldito comando Clean me manda al carajo y no limpia el canvas y mi animación se torna un cuadro horrible de color full! Alguién en el mundo Mac dev que me ayude?!

24 ago 2009

No Cert No Debug Parte 3 de n

Me encuentro detenido en el espacio/tiempo del iphone/dev... ya me dieron un iphone para hacer pruebas "en dispositivo", pero oh sorpresa, no registration => no certs, no certs => no compilation!!!!!!!!!!

Por lo que sigo esperando el correo de activación de Apple (que se registraron el viernes por la mañana) y aún no se dignan en darnos. Asi que no habra patoaventuras para ustedes, hasta que no consiga mi certificado feroz. Como plus les dire, que usar Audio es de lo más fácil, ni en .NET es tan fácil! Después les dare uno lindos snippets y tips.

11 ago 2009

iPhone daemon! Parte 2 de n

OK - Se hace la GUI

Después que la revolución gráfica se vio humillada por el temor a Objective-C con pseudoQuartz, Dios miro al frente y dijo "bueno pues, que sea Cocoa Touch y ya...". La GUI es un Controller común y convencional, asi que no dare detalles... Después del sketch malformado, era el momento idoneo de meter biz logic. Esta llego en forma de Core Data. Me mantuve esceptico de este framework. Veia algunas entidades, data context, y soporte para SQLite, quizás podría darle una oportunida (o el framework darme una a mí).

Después de la primer media hora, el amor verdadero me invadió. Había creado un hermoso singleton que delegaba todo lo necesario para crear mi repositorio SQLite, y manejar el control de mi DataContext. La verdad que me sorprendio mucho la facilidad con que podía crear una entidad y con magico save en el context (asi como lo hace LinqToSql) tener mi entidad persistida. Añade a esto un selector con pseudoclausas WHERE, y tienes un DAL de primer mundo con pocas líneas en tu pequeño mundo iPhone.

Ya tengo como guardar mis lindos datos, pero el siguiente issue que viene a mi es parsear el XML que viene de un web service, con los datos que necesito insertar. El proceso de descargar esta simplon, NSUrlRequest es el amigo de los niños. Pero para parsear, oh no, oh noooo! Es un mar de complicaciones, NSXmlParser de iPhone es un "has lo que quieras" parser, lease implementa todos los delegados para cuando el parser encuentra un tag o atributo. Cosa nada buena, asi que justo ahora experimento con una open source library llamada TouchXml, esta dos tres, pero me sorprende que la mitad del codigo esta comentada, que planea estos sujetos?!

Seguire dando polea hasta que logre poblar mis tablas y este listo para comenzar la daemonizacion! Punto extra, permitir a la app daemonizada hacer llamadas xD.

5 ago 2009

iPhone daemon! Parte 1 de n

OK - Comienza el caos.

Se me fue asignado un nuevo proyecto, de esos complicados y que te hacen recapacitar si aún deseas ser programador, jajaja. En esta ocasión, tenemos un cliente ocasionalmente conectado (todo bien aqui), en iPhone (empieza el caos), que se lanze cada n minutos (tengo miedo) e interrumpa lo que sea. En un mundo de maravillas sería fácil, pero como todos sabemos iPhoneOS no soporta "background process", asi que oh My Ape God, que haremos?!

La realización de este proyecto, parece un poco exagerada y complicada, sin embargo no es imposible. A lo largo de mi travesía ire narrando como muero en el proceso de hacer un hook en el SpringBoard que este dormido con un timer y las implicaciones que eso me llevaran. Por el momento ya cuento con un poco de lectura, http://code.google.com/p/iphone-backgrounder/ esperemos que sea de ayuda las técnicas de estos sujetos.

Plus - La aplicación debe usar uso de OpenGL y Quartz, dado que la GUI será "3D" no con los controles estandares. Hermoso no?!

24 jul 2009

Google Gears!

En estos simiescos dias, me he dado a la tarea de investigar los usos de Google Gears, y realmente es una maravilla. Tiene cosillas absurdas como el Canvas (???), que te hacen decir, bueno ya que. Pero el LocalStore y el motor SQLite, son una maravilla. Estoy trabajando en una especie de wrapper de estos ultimos para mi amado WebCore3, cosa algo complicada dado que es fácil apuntar client-side a server-side, pero el contrario es un poco paradojico.

Al momento tenga la percepción de realizar dos tareas, encapsular mis recursos (JScripts, Images & CSSs) con el local store y segundo replicar un cache en el SQLite, obviamente todo desde un hermoso helper Webcorizado. Teniendo GUI y database offline, ya estaría a un paso, pero llego al paso más complejo, e importante, generar un código JScript que en lugar de postear mis AJAX actions, se mate en el SQLite.

Quizás no me di a entender, pero ya veran, les dare un bonito sample de como WebCore llegara al escritorio de forma elegante e indiscreta, creo que hare un pequeño sample con la base de Deleita.Me, a modo que puedas correr el buscador de restaurantes offline.

15 jul 2009

Firefox 3.5

Firefox en su nueva y "nada flamante" versión 3.5 se merece un destierro a los confines del abismo del olvido. ES HORRIBLE!!! Mientras escribo esto, estoy bajando Firefox anterior, dado que no puedo más, no puedo. He sido paciente, pero recibir

onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass

en medio de cada llamado AJAX, una y otra

onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass

vez comienza a convertirse en una fuerte pesadilla... Y no solo eso, claro que no, ya no tenemos soporte para Google Gear

onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass

algunos diran que eso es culpa de Google, quizás si, quizás no, pero como rompes tanto tu API de un punto zero a un punto cinco, es una verdadera falta de

onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass

respeto, como este FAIL!

Regreso despues de instalar Firefox 3.0.

PD. El nuevo Firebug si es hermoso, lo único...

onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass
onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass
onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass

4 jun 2009

Humor

Esta noche me siento de humor para bloggear, aqui con mi cerveza y cigarrillo quiero platicarles las nuevas ocurrencias que traigo en cuestión de development. Primero quiero dar a conocer que ya tengo un prototipo algo funcional de mi primer app para iPhone. Se trata de un player para un cliente de unosquare que ya logre comunicar con los servicios REST del cliente y parece que no es "tan complicado" trabajar con Objective-C. El amigo Babuchas intenta hacer lo mismo con Java para BlackBerry pero muere, jajaja.

Continuando con el caos, estoy haciendo una version iPhone para Deleita.Me (http://www.deleita.me/iphone.php), la cual esta muy de prueba pero bueno ya es algo. Continuando con Deleita.Me, estoy leyendo un poco de Facebook Apps, no parece tan complicado asi que quizás me agregue un extensión (si otra más Willis) de WebCore para crear apps de FB.

En WebCore estoy dando un giro nuevo al modelo MVC que usamos para crear Business Rules a los modelos, Willis estaba un poco desconfiado de esto pero la prueba de concepto le agrado. Espero pronto ver un poco de WebCore en unosquare para empezar a crear RIA con este framework ya dentro de poco cumple un año de intenso desarrollo.

3 jun 2009

unosquare

Entonces emigre a las tierras altas de unosquare. Asi es pequeños, ahora ya estoy laborando en una nueva empresa llamada unosquare, haciendo lo que mejor se hacer, codear como si no hubiera mañana.

La verdad me agrada mucho este lugar, la oficina esta en un lugar muy agradable y pues el ambiente de trabajo es de lo mejor, y el café es GRATIS! Principio #20 de mi religión. Así que haremos un poco de caos por aquí con nuevos desarrollos en tecnologías misteriosas, ya comentare.

Les dejo el link al sitio para que le den un ojo, http://unosquare.com

22 may 2009

VS.NET 2010 Beta 1

Ayer me di a la tarea de dejar bajando e instalando el nuevo Visual Studio, después de no se cuantas horas (El internet aquí no es muy rápido que digamos), pude abrirlo y darme cuenta que le falta mucho.

El IDE tiene una GUI azul con tramado, que en mi opinión (y de otros) es horrible. No tiene nada que ver con las anteriores que se veían serias y profesionales. A simple vista, encontre que mi amado y casi nunca usado F#, ya figura como estandar en los proyectos. De WPF, Silverlight y WinForms, no logre hacer nada, dado que ningúno de los designers de estos tres funcionan, por desconocidas razónes simplmente. Inclusive las referencias de assemblies explotan, y el editor de XAML no me da intellisense, ni nada.

En resumén, una perdida de tiempo valioso. Así que esperare que liberen algo más interesante, por ejemplo ver algo de DLR directo en VS.NET. Esperemos..

12 may 2009

Deleita.Me

Tan solo quiero invitar, a mis nulos lectores (lo se, lo se, me pierdo y dejo de bloggear) que he abierto un abierto un nuevo sitio para que todos los usuarios ansiosos de buscar buena comida en Guadalajara y Zapopan, les sea fácil y ameno. El sitio se llama Deleita.Me (sensual no?) y el URL es http://www.deleita.me no olviden registrarse y comentar, hagan pedazos o bendigan los restaurantes listados. Esa es la idea.

Cualquier comentario, sugerencia o mensaje corto, es bien recibido por cualquier medio.

BTW, solo para mostrarles, técnicamente, como WebCore3 es una realidad. Todo Deleita.Me esta corriendo este hermoso framework, aprecien el buen arte en coding. Pronto les comentare detalles técnicos del sitio, problemas que me enfrente y como los resolvi.

31 ene 2009

Google MUERTO?!

No puedo usar Google, y creo que no soy el unico, por una mistica y extraña razón todos los links aparecen con la leyenda "This site may harm your computer.". Al parecer no soy el unico, en Yahoo Answers! la gente ya se pregunta que pasa.

En Google Blogoscoped no hay dicho nada al respecto, cosa rara, soy hay un comment en el ultimo post de un tio diciendo que Google tiene un bug. Lo que me da entender que fue una especie de Google Bomb, y alguien se divirtio registrando como malware todos los resultados de Google, jajaja, insane.

Esperemos que Google regrese a la vida, copiar y pegar el URL no es lo más efectivo que he visto. Y no es una conspiración MUNDIAL DEL MUNDO de Google para que todos usen Chrome, en su browser tenemos el mismo problema.

EDIT - Ya quedo corregido, como que duro una media hora el caos. Buscare al respecto.

23 ene 2009

Street View GDL!!!

Creo que más de alguno ha visto ya Street View de Google Maps, el cual te deja ver las calles de EU, una parte de España/Francia/Italia, Japón y Australia. Pues bien, hoy mientras conducia para mi trabajo, por Av. Vallarta a la altura de Cd. Granja, me encontre dos flamantes Pontiac G5 negros con unas torretas en el techo, tenian placas chilangas. Dije que diablos? Asi que me acerque a ellos y vi una pequeña calcomania de Google Maps en ambos, y note que eran camaras (pero desmotadas, no estaban fotografiando) aquellas torretas.

Los intente seguir (sin desviarme de mi trabajo) para que me tomaran una foto simiesca jajaja, pero en Lazaro Cardenaz a la altura de San Ignacio los perdi. Por lo que solo queda esperar las que Street View aparezca con fotos de las calles de Wanatos, o bien mañana ir a buscarlos y salir una y otra vez en las fotos xD.

16 ene 2009

WebCore & Firebug

Algunos sabran que trabajo "arduamente" en un framework PHP junto con el señor Mario, que incluye mucho nonsense que no contare hoy, para crear hermosas aplicaciones web. Pues bien, ayer mientras veia la lluvias invernales, me preguntaba que tan cute sería Firebug Lite como un agregado a WebCore, y que tanto lo podria utilizar. Asi que deje de pensar y comenze el code.

La WebCore tiene un manager de logs, que basado en la configuración de la webapp incluye niveles de debug distintos y soporte para escribir en log file o database. Asi que parte del camino ya estaba hecha, para tener lo que yo llamo, DebugInClient o debug del server en cliente. Para los flojos como yo, que no pueden abrir un archivo LOG y ver que ha pasado.

El primer paso fue tener Firebug Lite funcionando. Cosa fácil, me baje el Firebug Lite y modifique el inyector de dependencias de WebCore para que incluyera este JS y CSS cuando el nivel de debug fuera correcto. Punto 1, resuelto, si mi webapp tiene el nivel de debug en cliente, Firebug aparece magicamente en cada pagina ya sea que este en IE, Chrome o FF, no importa. El siguiente paso era tener un control de todo lo que se hace en el lado server, para ello modifique el JS del Controller de WebCore. El Controller de WebCore, como todo buen MVC, se encarga de la entrega de todo, asi que aparte de su versión PHP, tenemos una versión en JS que ayuda a enviar y recibir hacia el Controller server. Las modificaciones fueron ligeras, unas cuantas funciones y vamonos.

this.log = function(msg)
{
if (this.isDebugEnabled)
{
firebug.d.console.cmd.log(msg);
}
},

this.error = function(msg)
{
if (this.isDebugEnabled)
{
firebug.d.console.cmd.error(msg);
}
},

this.warn = function(msg)
{
if (this.isDebugEnabled)
{
firebug.d.console.cmd.warn(msg);
}
}

Despues interrumpi el LogManager (que tiene el error y excepción handler default) para que las entradas del log las escribiera en llamadas al Controller, por lo que todo se escribia en el injector, dandonos hermosos warning de PHP directamente en la consola de Firebug.

Se que suena tricky y raro, pero más tarde les pongo un sample para que vean el poder xD.