Google Web

4 jun. 2015

Tubular en Java, o sea mi vida no vale nada

Por cierto proyecto que querían usar Tubular, me pidieron ayuda para usarlo con JAVA. Aunque Tubular soporta OData, al parecer en el proyecto no era posible tener servicios OData, solo unos servicios REST en Spring.

Me di a la tarea de ayudarlos y comenzar a programar en JAVA, cosa que no hacía en varios años, y la verdad que recuerdo porque dejo de hacerlo. JAVA es feo. Tarde un rato haciendo esas cosas locas como manejar el POM, configurar el JPA, hacer que Hibernate no se matara y sobre todo que el horrible Eclipse no se colgara cada 5 minutos.

La vida en Visual Studio me volvio más holgazan quizás, o Eclipse es tan horrible que deberían quemarlo con fuego. Aún así logre mi cometido, y deje un ejemplo funcional conectado a MySQL para presentar Tubular. Un éxito. Por si estan interesados en el código (que no forma parte del proyecto) esta en mi cuenta de GitHub como tubular-spring-hibernate.

20 may. 2015

EmbedIO Extras

Estos últimos días he estado trabajando en un proyecto adicional a EmbedIO para extender la funcionalidad del mismo por medio de módulos, unos interesantes y otros solo por el #LOL. Los que si valen la pena revisar, y que ya estan en Nugets son:

EmbedIO Bearer Token Module - Que permite utilizar autentificación por medio de Bearer Tokens directamente en EmbedIO con una plataforma muy similar a la que cuenta en ASP.NET. El Nuget esta disponible como EmbedIO.BearerToken.

EmbedIO Owin integration - Este paquete incluye dos maneras de trabajar la integración con OWIN:


  • Usar EmbedIO directamente como un server de OWIN y por lo tanto recibir todo el pipeline en los Modulos de EmbedIO.
  • Si no quieres cargar con todo OWIN, puedes usar modulos Middleware de OWIN directamente en EmbedIO, registrando el modulo de EmbedIO especializado.


En el sitio web de EmbedIO Extra hay ejemplos, me falta documentarlo un poco mas. El Nuget se llama EmbedIO.OWIN

14 may. 2015

EmbedIO v1.0.5

EmbedIO ha estado en proceso de actualización y se han agregado mejoras (aunque hay muchas todavía en lista de espera), pero por si están interesados en detalles:


  • Se agrego soporte a async Tasks en los métodos de los WebAPI's Controllers. Que no le veo tantísima utilidad pero un fan lo pidio.
  • Se implementaron métodos de extensión para permitir trabajar el WebServer con metodos encadenados (Fluent Interface) para tu sabes:

var server = WebServer
                .CreateWithConsole(url)
                .WithLocalSession()
                .WithStaticFolderAt("c:/web");


Ya pueden encontrar el Nuget actualizado. 

7 may. 2015

Documentando Directivas de AngularJS

Me encontraba en la necesidad de documentar el código de Tubular para que sea visible todos los atributos y hermosos controles que tenemos. Apenas estaba pensando que quizás solo haría un montón de documentos planos y que Pikachu guiara mi camino de dolor a la salvación. Pero me dije, si AngularJS tiene documentación no tan mal, seguramente algo estan haciendo.

Llegue al documento de AngularJS en Github titulado Writing-AngularJS-Documentation que explican, nada claro, como realizar la documentación por medio. Para realizar la documentación necesitas comenzar con escribir en tu código todo lo que necesitas explicar usando ngDoc que es un sabor extendido de jsDoc. Es lo mismo pero solo con unos campos adicionales especificos para AngularJS.

Ya con tus archivos JS llenos de comentarios relevantes y detalles que casi nadie lee. Es momento que comience lo bueno, pues hay que montar un paquete llamado Dgeni (nota: por favor instala el Dgeni-packages porque Dgeni por si mismo hace nada) y comenzar a escribir un Javascript que debera procesar los comentarios jsDoc.

Dgeni soporta muchas formas de exportar el contenido, y en los paquetes trae soporte para nunjunks que es una especie de template engine, no tan cool, que puedes usar para generar unos lindos HTML con todo. La verdad que al principio configurar dgeni es un poco raro, por eso mejor les dejo el siguiente ejemplo que use para comenzar https://github.com/petebacondarwin/dgeni-angular. El archivo "dgeni-conf.js" es donde sucede gran parte de la magía.

Finalmente ya puedes mover tu monton de archivos HTML con links internos, o como yo que los bote para usar un método de AngularJS acoplado a un controller que hice. El resultado se puede ver ya en línea: Tubular Documentation. Falta terminar de detallar, pero ya tenemos API DOC!

4 may. 2015

Novedades Tubular

El desarrollo de Tubular continua  y ahora ya tenemos un nuevo y elegante generador usando la plataforma de Yeoman, que funciona con NodeJS. Las tareas que se pueden hacer con el generator-tubular son:


  • Iniciar un nuevo proyecto Tubular (con AngularJS y Bootstrap) que puede usar tanto Bower como un CDN para cargar las librerías.
  • Crear vistas de ejemplo o desde un archivo JSON.
  • Generar una vista de Grid directamente a tu proyecto actual usando un OData, con opciones para personalizar (similares a las del generador en línea).
  • Generar una vista de Form, igual con un servicio OData.
Faltan detalles, pero está luciendo bastante bien. Ya no me da tanto "flojera" programar con NodeJS, no es tan feo después de todo.

29 abr. 2015

Visual Studio CODE

Pongamos un nuevo editor multiplataforma dijeron, y boom Visual Studio Code. Extrañamente explota en mi maquina, y no lo puedo probar. Seguire intentando.

En otras notas, EmbedIO tiene nueva versión con algunas correcciones y mejoras como el EmbedIO CLI para tener un webserver rápido con soporte a WebAPI y WebSockets.

25 abr. 2015

Tubular 0.9.6 con generadores de código

La nueva versión de Tubular ya esta aquí con algunos cambios y mejoras sobre todo en los formularios. Pero lo mejor esta en los nuevos generadores de código tanto para Grids como Forms, que permiten generar a partir de un JSON (arreglo u objeto) o un servicio OData.

El generador interpretara el modelo para presentar un fácil diseñador de columnas o campos con opciones para extender el código AngularJS final. Y lo mejor de todo es que con un simple click se puede mandar al servicio de Plunker todos los archivos necesarios para generar un proyecto.

El generador de código para Grids se encuentra en http://unosquare.github.io/tubular/#/Generator y para Forms en http://unosquare.github.io/tubular/#/FormGenerator. De hecho también actualice la documentación y mejore un poco el diseño del sitio web.

La nueva versión ya esta en Nuget y quizás en unas horas en JsDelivr.

21 abr. 2015

Novedades DEV

Ya termine una herramienta que empece en la raspberry pi, despues de morir al intentar instalar nodejs. Que dificil es tener herramientas de desarrollo actualizadas hoy en día. En fin la herramienta hace un simple backup de las imagenes publicadas en un blog de Ghost. Dado que la supuesta funcionalidad de backup que tiene no te deja bajarlas. El código se encuentra en https://github.com/geoperez/ghost_tools y es la primer herramienta que hago en NodeJS y no estoy orgulloso.

Lo que si esta quedando realmente guapo es el Tubular Web Generator que permite generar todo el markup para un grid de Tubular desde un modelo JSON, hasta te permite exportar todo tu diseño a Plunker para mandarlo a Git o que se yo.

20 abr. 2015

Tubular 0.9.4

Nueva versión de Tubular, detallitos en GitHub. Pendiente actualizar los NuGets, y ver que el jsDeliver actualice solito de nuevo. Entr los cambios:
  • Columns visibility 
  • Cell Templates linked to Columns Definition 
  • Column Selector control in dropdown menu 
  • Basic grouping
El asunto con el grouping esta muy muy beta, pero ya es un inicio hacia la gloria.

18 abr. 2015

GitHub Pages desde Raspberry Pi

El sábado me dio la idea de que podría divertirme un poco en la mañana montando un blog en mi GitHub Pages personal que se supone puede activarse por Jekyll. Hacerlo en la raspberry pi no fue mi idea inicial pero dije porque no? ERROR FATAL.

Jekyll esta hecho en Ruby y según las instrucciones un gem y bundle y estamos listos. Mentiras sucias mentiras. Al menos en la rpi y en Windows. De Windows, que intente también no hablare, pero en el pobre Linux esta triste.

Raspi trabajando como nunca


Inicie mi rpi y vi que si tenía Ruby instalado, versión 1.9, desconozco de sus versiones y la documentación de GitPages dice 1.9.3.  Me dije a mi mismo, pues calale a ver si pega. Mi error. Bundle instalo pero al instalar los bundles, suena ridículo por cierto, todo explotó. Primero que porque no tenía ruby-dev. Que tonterías para que quiero el paquete dev para un simple bundle de un blog. Aparte el bundle en cuestión era un parser de Textile. Dios que tan difícil puede ser.

Me decidí a actualizar con Aptitude mi versión de Ruby, nada... Tenía que correr un script de mil horas que compilara todo rvm y Ruby 2. Agonía. Yo solo quería hacer bundle install y probar Jekyll.
Paso el tiempo y la compilación terminó. Al parecer el script no quito el Ruby 1.9 y a pesar de cargar el rvm el tonto Gem apunta a 1.9. DOLOR. Quite la versión 1.9 y reinstale Bundle que ya Gem tomo bien. 

Muerte lenta en mi televisor

Era el momento de bundle install y la librería de RedCloth,  la misma de Textile a HTML, volvió a fallar. No podía creerlo, solo quería bloggear poquito. OK Gem es tu turno, Bundle es un marica.
Por fin con Gem logre instalar tan ridículo y dependiente librería, por cierto que Textile es old fashion lo de hoy es Markdown, sabe. Volví a darle un bundle install. El miedo se desvanecía conforme avanzaba el proceso. Mil librerias inútiles solo para un sistema de blogging. Ni PHP es tan hediondo que esto.

WOW por el número de dependencias que tiene Jekyll. Fue como dos vidas para que el bundle install terminará. Al final lo logre y dije, ¿y ahora qué? Necesito considerar si muevo este blog de lugar. Quizás lo haga. Blogger es tan de los 90's.

17 abr. 2015

Tubular en JsDelivr, lease un CDN

Ya puedes fetchear Tubular directamente de un CDN, en particular de JsDelivr. Chequen las documentación que ya actualice de como optimizar la carga de múltiples archivos con JsDeliver, y bueno faltaría solo agregar tubular al request.

Por el momento solo esta publicada la version 0.9.2, igual que en el NuGet, pero en GitHub hay avances de una nueva versión más ligera y posiblemente termine con un nuevo control de menu para poder seleccionar columnas. Algo así como en este menu de Kendo Grid.

15 abr. 2015

Tubular 0.9.2

Nueva versión de Tubular en NuGet. Incluye pequeñas correciones y sobre todo cambio en el control de autocomplete. También incluye versiones minificadas, por si acaso.


Pendiente todavía integración para bower y grunt o algo así. Eso e intentar subirlo a un CDN, que previamente ya he intentado con otra librería y mori.

Revisión de cambios a partir del commit 73650e175b206c930191caae8176b73bef3cb2e5 en GitHub.

14 abr. 2015

Git y yo

La vida es eso que pasa cuando haces clone a un repo de nuevo, porque tu intento de hacer un squash fracaso, reflejo de mi vida o la de becario. Creo que mas bien que la del becario. Oh ironias.



geoperez@LOL ~
$ git clone https://github.com/geoperez/cdnjs
Cloning into 'cdnjs'...
remote: Counting objects: 293563, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 293563 (delta 3), reused 0 (delta 0), pack-reused 293549
Receiving objects: 100% (293563/293563), 600.09 MiB | 6.01 MiB/s, done.
Resolving deltas: 100% (124052/124052), done.
Checking connectivity... done.
Checking out files:   7% (56310/727861)

13 abr. 2015

Tubular 0.9.1

Nueva versión de Tubular en NuGet, quite la librería de AllMightyAutoComplete que simplemente en CDNJS no me dejaron subir. Gracias.

Quizás nueva versión de la documentación pronto.

10 abr. 2015

Muriendo con CDNJS

Entonces me di cuenta que puedes meter tus propias librerias en CDNJS, y dije, porque no? Ya bajo como 600 megas del GitHub... Intentare subir tambien otras librerias que uso de dependencia y pensar como manejar las dependencias directas del CDN si que sea tan complicado.

9 abr. 2015

Tubular NuGets

Tenemos nugets, y los quieres... En la cuenta de Unosquare de NuGet, estan disponibles dos.


  • Tubular - Este NuGet contiene solo el bundle de CSS y Javascript.
  • Tubular Server side - Server side incluye un assembly que permite generar los modelos de Request y Response usando System.Linq.Dynamic. Lo cual es como la mitad del trabajo.
Comentarios son siempre bienvenidos.

6 abr. 2015

Tubular Nodejs

Estaba pensando en separar quizás un poco el proyecto de Tubular del codigo C# e incluir un proyecto nodejs en la solución de Visuek Studio. No he usado nodejs, pero supongo que quedaría bien y sin esfuerzo usando el servicio de OData.

Quizás pueda incluir algo en npm o así. Por cierto hay actualización en el código y en la documentación. Me acosan las dependencias. Pero usar RequireJs fue un fracaso con AngularJS.

1 abr. 2015

EmbedIO + Tubular

He estado algo ocupado en GitHub, los demos de Tubular ya tienen forma y estan trabajando con OData. Como había comentado agregue un demo de EmbedIO y Tubular el cual es fácil de usar para comenzar algun pequeño sitio web con UI rápida y sencilla. Quizás haga falta un scaffolder, o similar, aunque no me gustan mucho.

Por cierto ya tengo los Nugets de Tubular, pendientes de publicar. Uno con el client-side, solamente el bundle de Javascript y CSS y otro con el server-side que incluye los helpers de Dynamic LINQ para generar los payloads. Este último trae como dependencia al client-side. En el siguiente post publico los links.

30 mar. 2015

Tubular - Sitio demo

Estoy trabajando en un sitio demo, para mostrar el uso y features de Tubular en Github Pages. Por el momento hay poco que ver porque tengo que agregar soporte a Tubular para OData. Que ya esta un empezado y puede que termine en próximos días.

La liga para el demo esta en: http://unosquare.github.io/tubular/.

Necesito trabajar en un demo de Tubular/EmbedIO también.

27 mar. 2015

Amazon Cloud Drive - La Venganza

Hace algunos años, recuerdo que abri una cuenta del nuevo y no tan bueno servicio de Amazon Cloud Drive. Una tonta apuesta de Amazon por dar un servicio similar a SkyDrive y Dropbox. La verdad que abri la cuenta  y la olvide... hasta hoy. Recibi un tonto correo de Amazon diciendome que mi plan esta muerto, entonces dije, ¿cuál plan?

Your 5 GB plan is no longer available and has been replaced with a free 3-month trial of one of the Unlimited plans. Access to your existing files has not changed. You can continue to download and view your content. In order to upload new files you will need to pick one of the free 3-month trials. 

Accedi a mi cuenta y asi todo mágico me es imposible dar de baja el servicio. Solo existe la opción escoge un trial para luego cobrarte, y ya. Ni tengo nada en el servicio. ¿Porqué Amazon? ¿PORQUE? Solo espero que no tome mi información de tarjeta de crédito y haga una tontería...

Y asi es como una empresa con muchos servicios y muchas tonterías, hace un servicio de respaldo en línea sin un plan gratis y sin forma de matar una cuenta previa.

26 mar. 2015

Tubular en GitHub

El framework en AngularJS que comente en posts anteriores ya esta público en GitHub en el URL https://github.com/unosquare/tubular. Hay un ejemplo de como se usa, pero estoy pensando en generar una GitPage con explicación paso a paso como armar un grid y otras tareas.

Solo espero tener un poco de tiempo para comenzar a hacer el tutorial. Mientras tanto pueden curiosar el código.

25 mar. 2015

EmbedIO - Bitacora del Capitan - Fork

Para hacer los cambios que comentaba previamente de EmbedIO, decidi hace un nuevo fork en https://github.com/geoperez/embedio. Por el momento removi la dependencia a log4net, gracias, y estoy revisando que más cambios se pueden realizar.

Tuve algunos problemas con WebSockets, necesito darle un poco de tiempo para ver que es lo que esta pasando ahi. Eso y quizás pensar en algun Bearer Tokens, eso estaría muy bien.

24 mar. 2015

FutureWiz

Tenía tiempo pensando en una app que no he visto antes. Cuyo concepto me queda claro en la cabeza, pero aún no he logrado descrifrar como realizar. La idea es algo sencilla:


  1. Se tiene una lista de "destinos" que se pueden definir como metas al futuro que tienen dependencias de otras metas y tienen un valor particular de necesidad de cierto recurso (dinero o tiempo)
  2. Definir los valores iniciales, reglas, del "ejercicio" que podría ser, más no limitarse, a número de dinero disponible o tiempo que podría invertirse en intervalos de tiempo.
  3. Verificar en base a las reglas cuales destinos son realizables y los que no, definir porque regla quedan fuera. Por ejemplo, cantidad de dinero acumulable no es suficiente.
  4. Representar toda la información del escenario "más probable" en base a las reglas actuales.
  5. Permitir modificar las reglas en base a recomendaciones generadas por el sistema.
Quizás no suena del todo entendible, pero la idea base es poder proyectar como invertir recursos de una forma visual. Algo entendible para cualquier simio con un browser.

Por el momento el código, que intento mantener en lo mejor hablando de visualización, esta disponible en GitHub en https://github.com/geoperez/futurewiz. Espero pronto hablar un poco más.

Sobre los detalles técnicos el sistema esta en AngularJS nada mas, pienso utilizar Google Spreadsheet como datastore, para mantenerlo todo rápido de correr en cualquier browser sin necesidad de un server. Para el almacenaje, quizás tomar en cuenta este post.

22 mar. 2015

EmbedIO

EmbedIO es un proyecto que hicieron en mi trabajo, que a diferencia del montón de aburridas pantallas de CRUD, si es interesante. Que por cierto esta en Github.

Como sea, EmbedIO es un pequeño web server de en C# que te da acceso a una versión ligera y amable de WebAPI, sin tanto drama y Web Sockets, que dios me libre nunca he usado y espero no hacer. Tiene otros detalles interesante como Static Files y Web Sessions. Claro que no tiene Razor o algún Template Engine, pero en estos días del JSON a quien le importa.

Una de las utilidades que le he visto, y en que he utilizado EmbedIO en dos proyectos, es para generar la UI de aplicaciones de escritorio que corren en Windows y Linux. De hecho tengo que probarlo en OSX con Mono, ojala y si funcione a la primera. En estos casos con la UI simplemente hubiera muerto intentando usar Winforms o Gtk#. La última app la estoy diseñando con una UI Framework en AngularJS que espero pronto me den permiso de publicar en Github de nombre Tubular, yo no escojo los nombres.

Hay algunos puntos que puede mejorar el Web Server, por ejemplo tiene de dependencia log4net, lo que se me hace absurdo y necesito trabajar en algún tipo de dependency injector sencillo para el log. No es decente depender de una librería así en un componente.

Este es solo un pequeño recordatorio para mi de la existencia del blog, aunque si posteare una pequeña guía en la semana de como trabajar con EmbedIO y Tubular. Por cierto EmbedIO tiene un Nuget, asi que no hay forma de decirle que no.