GitHub y mi nuevo apoyo a la comunidad open source


Dojocat

GitHub es hoy en día la página web más importante para compartir código y proyectos. La comunidad open source en el contexto global en el que vivimos se ve super beneficiada cuando existen este tipo de webs y además gracias a la fantástica herramienta de estructura y organización para desarrollo distribuido que es Git es increible.

Así que sí y de poco a poco (no es lo máximo que he hecho, pero es por donde empecé, así que espero ayude a otros a empezar).

Les dejo el link a mi primer repositorio público con información (por ahora es más un how-to que código, pero ese ya llegará).

https://github.com/AquiGorka/build-swf-or-ipa-or-apk-from-as3-in-linux

Saludos,
Gorka


Google da de baja Google Affiliate Network


Affiliate Marketing

En un email que me llegó hoy, Google avisa que dará de una baja otro más de sus servicios (hasta Octubre de 2013 seguirá funcionando como hasta ahora). Es una decisión rara, si bien el sistema de afiliados no generó tanta voz como AdSense/Adwords yo siempre creí que era una gran herramienta para poder usar como webmaster para capitalizar tráfico web – siempre esperé el día que en México lo empezaran a usar y así agregar comerciantes más relevantes pero ahora veo que ese día no va a llegar.

Definitivamente hay algo más que no nos dicen, primero Google Reader, ahora Affiliate y ya desde hace tiempo se habla de Feedburner, si bien no entiendo la estrategia (y ni siquiera me atrevería a especular) por ahí leí que tiene que ver con el mundo/concepto social de la web (teniendo como producto principal G+).

Creo que, de la misma manera que está pasando con Reader (han aparecido MUCHAS opciones para satisfacer el hueco que ban a dejar) lo mismo pasará aqui y es sin duda una buena oportunidad de negocio (curioso que Feedburner empezó como algo chico, lo compraron, tal vez lo suelten y luego vuelvan a comprar algo similar cuando se vuelva grande de nuevo). El servicio de afiliados de google buscaba romper el esquema de comprar publicidad por oferta (que ellos mismos ofrecían y dominan el mercado) de una manera que siempre me pareció más dinámica y flexible – de hecho era el mismo webmaster el que podía escoger a los anunciantes que iban a desplegarse en sus websites (cosa que Adsense sólo te ayuda a limitar, pero no te deja saber cuanto vas a ganar ni quien va a aparecer). Me parece una mala movida ya que le quita poder a los webmasters, pero bueno, supongo que números rojos son números rojos… o quién sabe…

Saludos,
Gorka


Desarrollo Cross Platform Mobile con HTML, CSS y Javascript


Build Diagram

Siguiendo la línea de desarrollo mobile he estado desarrollando en un nuevo framework: en lugar de usar Actionscript3 de flash usé un StageWebView y el desarrollo fue directo en HTML, CSS y Javascript (con la ventaja que Safari Mobile – el engine del webview – puede entender la mayoría de tags de HTML5 y CSS3 – incluyendo transitions y transform).

Encontré un servicio (de un producto que ya tenía en mente exactamente para desarrollo con html) que lo que hace es tú le das tus archivos y ellos te compilan (vía cloud) para 7 u 8 plataformas diferentes (realmente a mí sólo me interesa iOS por ahora): PhoneGap Build (build.phonegap.com).

Lo que está muy cotorro es que para que funcione tienes que unir tu cuenta con un repositorio de github (para cada app) (gratis para repositorios abiertos y con costo para privados). Es una manera muy interesante que me forzó a meterme a ver más de Git y Github.

El API de phonegap está basado en el mismo API que se tiene con FLASH sólo que aqui le pegas desde Javascript (ya estuve viendo la documentación y la única real diferencia que vi es que no puedes hacer un embed en tiempo real de la cámara – y eso se usa bastante en realidad aumentada). Bastante completo y con posibles mejoras a corto y largo plazo que lo hacen una herramienta interesante.

Échenle un ojo y me avisan que les parece.

Saludos,
Gorka


Estructura Web


Web Structure

Así que, con los años he ido cambiando de manera de trabajar, originalmente hacía unas cosas medio raras (había carpetas Controller, Model y View públicas), luego aprendí a poner las cosas en su lugar (folders no públicos), luego aprendí a usar htaccess para tener un solo controlador principal que se hace cargo de todas las peticiones (excepto fotos y archivos que sí existan – onda wp) y mi propio framework ha ido evolucionando.

Tanto me ha gustado con los años que lo empecé a usar para mis apps.

Despúes, con las apps y leyendo y tratando de usar otros frameworks (emberJS especificamente) aprendí a reacomodar y volvió a evolucionar el framework – lo fregón es que es flexible, tan flexible que se puede usar tanto para backend como para frontend (con sus respectivas modificaciones).

Así que, volviendo, ahora lo que quiero hacer es volver a mejorarlo y traerme los proyectos que usan versiones viejas (trota estoy hablando de ti) a la siguiente versión.

En esta nueva versión he estado pensando mucho el tema de html estáticos. En wp hay un plugin que transfomra los posts y pages a .html y eso genera una mejora sustancial en performance – igual que usar un cdn para archivos multimedia – y es obvio, ya no hay un script que tiene que ponerse a trabajar para escribir el html.

Lo que quiero lograr es que los html estáticos representen “estados” del website (sería la manera web 1.0) y luego una app en javascript sea la que tome el control (entra web 2.0).

El principal problema es que este esquema de html estáticos es muy poco flexible (MUY POCO). Qué pasa si quiero agregar un nuevo link a mi menú principal? Tendría que cambiar más de 650 html estáticos? Se puede hacer uno por uno con programa, pero no me parece óptimo, y luego si eso se tuviera que hacer cada 30 minutos? pierdes realmente las ventajas de performance que se habían ganado.

Me puse a buscar como hacer algún tipo de import o include en los html estáticos para ver si con eso podemos mantener un solo archivo y que todos los html lo incluyen, así se puede cambiar un solo archivo según lo que se necesite y todo se actualiza. Encontré que con el tag object se puede hacer esto, y hay muy poco escrito así que no es casi usado. Tengo que ver si este método funciona para cuidar seo y otros detalles, pero ya iré escribiendo lo que encuentre.

Saludos,
Gorka

UPDATE – Aviso que las pruebas no son positivas. Ni con object, iframe, frame u embed – no hay manera que acepten el CSS del parent (y ni siquiera me he puesto a ver que onda con los links y el js). Pero existe una opción llamada Server Side Includes (que funciona en apache para exactamente este tipo de situaciones), quiero ver si en los cdn’s de cloud que quiero usar esto puede funcionar..


Wifi Tarjeta Realtek y Linux (Debian Based)


Realtek Chip

Medio que me estoy obligando a escribir este post (si no lo hago me voy a sentir muy mal y ya se que ‘luego’ no lo voy a escribir).

En algo que escribiré en un post después (si, ajá…) decidí aprovechar un disco duro que tenía por ahí sin usar. Decidí instalarle Windows y Linux (con la idea de ver si a través de Virtual Box podía usar Mac OS – y decidí el dual boot con windows porque mi hardware no daba para Xen con acceso directo a hardware). La parte de windows fue trivial (lo que me faltaba fue fácil encontrar ya que venía por default en mi otro disco duro, así que los drivers que faltaban los descargué directamente de Toshiba – windows 7). Para Linux escogí Debian (si les interesa saber porque me preguntan en los comments) y después de probar el LiveCD me mandé directo a ‘particionar’ y a instalar. Todo fluído hasta la parte del wifi, tuve que ir a conectarme por cable para tener Internet y así buscar cómo hacerlo funcionar.

Estuve toda la mañana de ayer y no logré nada. En resumen, varios links y foros donde decían que descargara los drivers de Realtek directamente para mi ‘chipset’ (que a su vez tenían que ser relacionados con mi kernel – y no se crean, mucho de esto también era griego para mí ayer – en un momento casi me lanzo a actualizarlo, pero luego vi que para arquitectura 64bits ya tenía la última versión – y que había que bajar el código fuente y compilarlo / otras opciones hablaban de agregar otro source descargar los headers de la versión y bajar el firmware y actualizar todo junto. Al bajar los drivers de realtek incluían un archivo con instrucciones para varios escenarios y un script que debía hacer las cosas correctamente – que no lo hizo y que además decía que justo con mi kernel hay problemas… pfff, de esas cosas que te ahuyentan. Ayer intenté todas esas opciones y nada, no pifaba.

Hoy decidí darle MUCHA lectura antes de hacer nada, con la ‘práctica’ del día anterior ya habría conceptos que no me dejarían con cara de ‘y si mejor bajo Ubuntu y a ver si ahí todo se hace por si mismo…’. Así que me leí todo un post ETERNO en un foro de gente con mi misma situación, intenté un par de opciones y luego como por arte de magia, pifó! y pifó bien, sin problemas de conexión y un tonel de otras posbiles situaciones que mencionan en el foro.

En resumidas cuentas (mis 2 centavos):

-Descargar archivo de driver (creo que está parchado por la gente del foro). Es un ‘tarball’ o .tar.gz.

Espero ayude a quien tenga que ayudar.

Saludos,
Gorka


El peor/mejor escenario posible con JS y XSS que se me ocurre


Computer Worm

Sin entrar a muchos detalles (eso lo haré en otro post), tuve la idea de hacer un programa que me permitiera en tiempo real conectarme a la sesión de un usuario en un browser en una página que yo controlo.

Hay muchas buenas razones para hacer algo así, yo lo pensé porque se podría ofrecer un servicio a clientes en tiempo real, algo que estaría muy cotorro (algo como el shared screen de skype).

Pero luego se me ocurrieron escenarios del ‘dark side’: si yo controlo el javascript en tiempo real de un navegador entonces el navegador es mío (de hecho aunque no sea en tiempo real, eso es xss). Y al tener eso las posibilidades son infinitas. Después de pensar un rato, se me ocurrió que hasta podría alargarse el ataque a otros websites (hoy en día gracias a peticiones asíncronas podríamos solicitar contenidos de cualquier web sin perder el control sobre el usuario – obviamente aqui hay una limitante de same origin petition pero hay maneras de saltar eso (server proxy o si el website final es vulnerable a xss directamente se envía al usuario a una url controlada)).

Esto no es nuevo, de hecho ya hay herramientas que permiten esto (BeEF), lo que no me convence es que se usa un server como centro de control y por lo tanto se puede rastrear el ataque. Entonces me puse a pensar que en lugar de conexión server – client podríamos hacer un programa que se conectara client – client, es decir, que una vez que se ejecutara el programa en un client hubiera manera de transmitirlo directamente a otros clients sin pasar por un server. Esto ayudaría mucho al anonimato (el problema es que el programa se perdería si el usuario cierra el browser, pero bueno si controlamos bien el browser y sus interacciones web entonces podemos tener una sesión bastante larga – y con un juego en tiempo real hasta podría existir el programa en ejecución siempre en browsers sin pasar por un lugar de persistencia).

Esto no es nada fácil, me refiero a conectar browser (sesión) con otro browser sesión, pero gracias a que html5 tiene websockets y que flash tiene sockets no es imposible.

Seguiré investigando y avisando si algo encuentro.

Saludos,
Gorka

Un poco de investigación que había hecho:


Seguimiento descargas app store (conversion tracking)


Follow up analytics

Así que bueno, la historia del sueño del desarrollador de apps:

  1. Se desarrolla una app y espera volverse millonario – el tiempo pasa y nada.
  2. Se contratan servicios de marketing y promoción online para llegar a clientes – el tiempo pasa y algo pasó.
  3. Se renuevan fuerzas, se aumenta el gasto en publicidad – el tiempo pasa y los resultados no mejoran.

¿Qué pasó?

Apple creó un “ecosistema” cerrado, es muy bueno ya que da oportunidad a los desarrolladores de enfocar sus esfuerzos hacía un canal de monetización más claro, sin embargo, el “ecosistema” cerrado es cerrado hasta para los desarrolladores: apple no te da herramientas de seguimiento de conversión de metas o campañas online. Entonces, ¿cómo podemos medir la eficiencia de una (o varias) campaña online?

Si tuvieramos esas métricas, podríamos más que especular y seguir gastando dinero a ver si “pega”. Para eso hay una manera, no es trivial, ni sencilla, pero por lo menos existe:

Apple tiene un programa de afiliados para ventas en el appstore. Para darse de alta en el programa se tiene que hacer a través de otra compañía que se llama LinkShare (es una gran compañia que se dedica a programas de afiliación). Linkshare tiene un sistema de métricas con el cual sí se puede dar seguimiento a links específicos (y por ende a campañas específicas / hasta promociones dentro de campañas, etc.). No es un sistema óptimo (y mucho menos fluído, yo llevo ya varias semanas tratando de que apple me acepte desde linkshare como canal afiliado), pero peor sería seguir a la ciega.

Una vez que a través de LinkShare tu canal es aceptado (o canales, cada website es un canal diferente y cada website tiene que ser aceptado por apple) se puede agregar los parámetros url necesarios para seguimiento de descargas. Los datos no son en tiempo real y pueden venir imprecisos (ya que miden todas las compras que se realizan a través de un link de afiliado, no la de una app sola – nunca fallan en contra, es decir, no es que no te van a medir correctamente tus ventas sino que pueden verse reflejados más números que no se entiendan directamente).

Al final pongo dos links de un “tutorial” donde el autor explica como hacer todo esto y también propone usar sistemas como bit.ly (url shorteners) para dar seguimiento (este sí en tiempo real) de los clicks a los links.

En fin, espero ayude a quién esté buscando algo así.

Saludos,
Gorka


Pagination