DevelUY

Planeta de desarrolladores uruguayos

30 de julio de 2010

Fernando Briano

Curso de Introducción a Scrum en Montevideo, Uruguay

Replico por este blog la información publicada en Aplicando Scrum. Se está por dictar un curso de Introducción a Scrum con énfasis en la tarea del Scrum Master.

El curso va a tener un costo más accesible que la certificación CSM, una razón de peso para muchas personas que no han podido hacer la certificación.

Va a contar con Gabriel Ledesma, docente de ORT, candidato al certificado internacional de Scrum Professional y practicante de Scrum profesionalmente desde el año 2008.

También estará a cargo de Ariel Ber quien ha asistido en las certificaciones de Alan Cyment en varios países, y se ha dedicado a brindar capacitación a empresas en Argentina.

Les recomiendo el curso, anótense, y únanse a la comunidad ágil en Uruguay.

Ver más información del curso:
Curso de introducción a Scrum en Montevideo, Uruguay

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

por Fernando, el 30 de julio de 2010 a las 09:13

29 de julio de 2010

Alejandro Segovia

Papers Técnicos en SIGGRAPH 2010


El siguiente video presenta un resumen de los papers técnicos que están siendo presentados esta semana en la Conferencia SIGGRAPH 2010, en Los Angeles. Realmente muy impresionante.

Share/Bookmark

por Varrojo, el 29 de julio de 2010 a las 17:53

Dario Clavijo

Juegos GPL: Warsow

Warsow es un FPS resultante de la combinacion entre multimedia con copyright con el motor gráfico qfusion que es el resultado del motor de Quake2 que fue liberado hace tiempo bajo gpl con algunas modificaciones.

Este motor fue elegido porque se buscaba que la experiencia de juego fuese como estar dentro de un cartoon y no lo mas realista posible como hoy en día apuntan la mayoría de los juegos de computadora.
Para esto se mezclaron texturas de bajo detalle con efectos minimalistas pero bien ambos definidos con colores primarios.
Para lograr todo esto simplemente se le efectuaron unos pocos cambios al motor como soporte de shaders.

El estilo de este juego me hace acordar a las peliculas animadas TitanAE y Heavy metal 2000.

















Para instalarlo:

#apt-get install warsow

O podemos visitar la pagina de descargas.

por Daedalus (Daedalus2027@gmail.com), el 29 de julio de 2010 a las 01:07

28 de julio de 2010

Marcos Crispino

Agenda de contactos

Hoy en día lo más común es tener nuestras agendas de contactos (con números de teléfono, direcciones, direcciones de e-mail, etc.)  en formato electrónico, ya sea en el teléfono celular, en la computadora, en la nube (como por ejemplo los contactos de Google), etc.

Hay algo que me llama la atención, y es que ninguna de las aplicaciones que conozco para almacenar información de contactos está normalizada.

Por ejemplo, uno de mis contactos es una empresa. De la empresa tengo cierta información, como ser la dirección y el teléfono. Por otro lado, tengo un segundo contacto que trabaja en dicha empresa (información que le dí a la aplicación). ¿Por qué entonces me pide que ingrese el número de teléfono del trabajo? ¡Ese dato ya está en la agenda!

Hasta ahí parece trivial... ¿Por qué nadie lo ha implementado? O capaz que la aplicación existe y no la conozco.

Hay algún detalle más, por ejemplo, de una empresa tengo el teléfono, pero de una persona quisiera también conocer la extensión que tiene. De todas formas, el número de teléfono debería ser una referencia al teléfono de la empresa.

Otra cosa que puede pasar es que la empresa tenga dos direcciones, porque tiene dos oficinas distintas. Dada una persona que trabaja en dicha empresa, va a trabajar en una sola de esas oficinas. Pero tampoco sería complicado hacer que la referencia sea a una de las direcciones en lugar de ser a la entidad "empresa".

Cuanto más lo pienso más natural me parece la implementación... No me queda claro por qué nadie lo ha hecho así.

por noreply@blogger.com (Marcos Crispino), el 28 de julio de 2010 a las 21:49

Alejandro Revilla

jPOS-EE Things

Inspired by this talk, I got reminded to play with EAVs in jPOS-EE.

I’ve created a jPOS-EE modules called “things” that I believe it’s a good thing to have in most applications.

I don’t think this is a one-size-fits-all solution, you probably don’t want to store your core tables (such as the transaction log, miniGL stuff, whatever) using this open schema approach, but for everything else, having this open schema can save your day (in the same way a ‘flags’ field in most tables can help at some point).

Using it is very simple, you create a “thing” using the ThingsManager:

   DB db = new DB();   
   ThingsManager mgr = new ThingsManager(db);
   Thing t = mgr.create("MyThing");

Then you can put Strings, Longs, Dates, Timestamps, long Strings and BigDecimals to your thing, i.e:

   t.put ("AString",  "This is a string");
   t.put ("ALong", Long.MAX_VALUE);
   t.put ("MyInteger", i);
   t.put ("Date", d);
   t.put ("Timestamp", new Timestamp(now));
   t.put ("BigDecimal", ONE_THOUSAND);
   t.putText("Text", "The quick brown fox is brown and the dog is lazy, and jumps.");

The ThingsManager has some handy methods already, and we’ll add more as the need arise.

public List getAll (String type) ;
public Thing getLast (String type);
public List listByStringName (String type, String name);
public List listByStringValue (String type, String value);
public List listByStringNameValue (String type, String name,String value);
public List listByTextName (String type, String name);
public List listByTextValue (String type, String value);
...
...

Some immediate use comes to mind, we could use this to provide a more type-safe, versionable version of our existing SysConfig table (i.e. we could have a thing called ‘SysConfig’ and keep previous versions as ‘SysConfig;1′, ‘SysConfig;2′, etc. (or another numbering scheme if you find this one too VMS-eske). It’s also good to handle extremely proprietary stuff such as fee configuration, currency exchange, etc. found in many jPOS applications.

The things module is available in jPOS-EE as of r307

por apr, el 28 de julio de 2010 a las 17:23

27 de julio de 2010

Alejandro Segovia

Grupo Khronos anuncia OpenGL 4.1


Leo en opengl.org que el Grupo Khronos, anunció recientemente la disponibilidad de la especificación para OpenGL 4.1. Khronos realizó el anuncio durante la conferencia SIGGRAPH 2010 que se está llevando a cabo esta semana en Los Angeles.

Este es el sexto update a la especificación realizado en tan solo dos años. Entre las nuevas características anunciadas se encuentra soporte para la API de OpenGL ES 2.0 (ahora OpenGL es un superconjunto de OpenGL ES 2.0), soporte para trabajar con Shaders en formato binario y soporte para punto flotante de 64 bits para Vertex Shaders, entre otras.

De acuerdo con algunos sitios, las nuevas características estarían poniendo a OpenGL por delante de DirectX 11 en términos de funcionalidades, principalmente debido al hecho de poder desarrollar programas para dispositivos móviles y de escritorio utilizando la misma API, algo que de momento no se puede realizar con ninguna versión de DirectX.

Vía opengl.org

Share/Bookmark

por Varrojo, el 27 de julio de 2010 a las 17:46

26 de julio de 2010

Fernando Briano

RubyConf Uruguay 2010

¡Se viene la primera RubyConf Uruguay!

RubyConf Uruguay 2010

RubyConf Uruguay 2010

Los invitamos a asistir a RubyConf Uruguay, a realizarse el viernes 29 y sábado 30 de octubre de 2010 en Montevideo.

Este va a ser un evento orientado a todos los informáticos de la región que quieran aprender o actualizarse en tecnologías como Ruby, Ruby on Rails, Sinatra, Testing, SCRUM, JavaScript, SQL vs NoSQL, etc.

Nos gustaría además invitarlos a que nos envíen sus propuestas para presentar algún tema que les apasione (las instrucciones están en el sitio web).

Por más información sobre el evento visiten RubyConf y sígannos por twitter.

RubyOnRails es una de las tantas tecnologías interesantes que tengo pendientes de usar algún día. Me quedé con muchas ganas de asistir al curso intensivo de RubyOnRails que se dió en Montevideo el año pasado, pero ya no había cupo :S

Parece que esta va a ser otra buena oportunidad para acercarse al framework, además de aprender más sobre otras tecnologías. ¡Vayan agendando para finales de octubre!

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

por Fernando, el 26 de julio de 2010 a las 23:09

Marcos Crispino

Se terminan las direcciones IP(v4)?

Leo en ReadWriteWeb, que aparentemente en menos de un año se terminan las direcciones IPv4...

Hay una página en Twitter que lleva la cuenta regresiva. En este momento dice que en 340 días se terminan las direcciones IP.

¿Qué significa que se terminan? Significa que cuando alguien quiera publicar un nuevo sitio web, no va a poder.

Por suerte desde hace años existe el protocolo IPv6, que en lugar de usar direcciones de 32 bits usa direcciones de 128 bits, con lo cual se resuelve el problema por un buen tiempo (hay que multiplicar la cantidad de direcciones actuals por 7,9x1028 = 79,000,000,000,000,000,000,000,000,000 para obtener la cantidad que se pueden usar con el nuevo protocolo).

El único problema es que la adopción de IPv6 ha sido un tanto lenta... Capaz que a partir de ahora se empieza a acelerar.

El otro tema es la compatibilidad. El protocolo IPv6 es compatible hacia atrás, y por lo tanto puede acceder a direcciones IPv4. Pero el recíproco no es cierto... Si yo tengo una dirección IPv4, no puedo acceder a la red IPv6.

No es para que entren en pánico... pero ¿alguien sabe si ANTEL está trabajando en este tema?

Cambiando de tema... ¿Alguien ha notado que no existe un logo para Internet? Estaba buscando una foto para poner en la nota (buscando en Google aparecen muchos logos de Internet Explorer), pero no existe... ¿Alguien se anima a crearlo, y hacemos fuerza para que se adopte como estándar? :)

por noreply@blogger.com (Marcos Crispino), el 26 de julio de 2010 a las 22:39

Fernando Briano

De trabajo en trabajo

Cada vez que hay algún tipo de cambio importante en lo laboral o académico, el blog sufre de días de semi-abandono y escasez de posts. Esta vez, se debe entre otras cuestiones, a un cambio en lo laboral. Creo que el tiempo (o la falta de) no es el factor determinante a la hora de no postear. Mas bien, en estas situaciones, como que uno tiene la cabeza llena de cosas que lo distraen de tareas como escribir para el blog.

El miercoles fue mi último día en la oficina donde venía trabajando desde diciembre con Java EE y Flex/AIR. Además desde entonces he estado haciendo algunos trabajos freelance en paralelo, básicamente desarrollos web, maquetaciones, etc.

Escribí respecto a ciertos cambios laborales y geográficos en ese entonces, e hice un balance bastante positivo un mes después.

Captura escritorio trabajo

Captura escritorio trabajo

Dejo atrás un equipo humano excelente, al igual que en trabajos anteriores, valoro mucho las nuevas relaciones humanas ya que nuevamente me voy con nuevos amigos de una empresa.

Desde el punto de vista frío y profesional, se agregan jugadores importantes a la red profesional personal (que no solo de LinkedIn se forma :P ), más experiencia y nuevos conocimientos.

En general, cuando nos vamos de un trabajo a otro lo hacemos porque creemos que vamos a crecer, asumiendo el riesgo de cambiar.

Probablemente siga atento el proyecto en el que trabajaba, además de mantener el contacto con los amigos. Creo que lo que más voy a extrañar van a ser las partidas de Armagetron… (veremos de organizar alguna Lan Party cada tanto)

Hoy lunes empieza una nueva etapa, ya veremos qué se cuenta…

Dejo en el post una foto con la captura de pantalla de mi querida laptop, que me ha acompañado en este trabajo desde hace muchos meses. Siempre quise usar esa imagen de fondo, pero no tenía la excusa hasta que comencé a trabajar con Flex… el compilador es leeeento…

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

por Fernando, el 26 de julio de 2010 a las 08:02

24 de julio de 2010

Alejandro Revilla

Q2 transient services

In jCard and jPTS we use the concept of Stations, we have Source Stations (SS), Destination Stations (DS), Monitoring Stations (MS), Control Stations (CS) and Cryptographic Stations (HSMS), etc.

Every station usually requires a handful Q2 services (QBeans), such as a MUX or MUXPool, one or more ChannelAdaptors with their filters, LogonManager, KeyExchangeManagers, eventually an independent logger, etc.

You can configure those manually for a small set of stations, you can also use some scripts, but in order to support a large number of stations, and to easily manage them from the UI, we use a database to keep their basic configuration (station type, host, port, timeouts, etc.) and then use these new transient services provided by Q2.

When Q2 starts, it’s create an unique transient UUID, that FYI is displayed by the SystemMonitor task:

<log realm="org.jpos.q2.qbean.SystemMonitor" at="Sat Jul 24 20:14:14 UYT 2010.495">
  <info>
    <release>jPOS 1.6.9 r2950</release>
    <instance>e424833b-c2c1-4f8b-b743-8a69271912a2</instance>
    <uptime>00:00:00.170</uptime>
  </info>
   ...
   ...
</log>

When you deploy a QBean using Q2′s deployElement method (which is now public), you can flag that qbean as ‘transient’ (there’s a boolean parameter). In that case, Q2 will remove the file on exit, but just in case the system crashes, it also adds a ‘transient’ attribute to the QBean, i.e:

<server class="org.jpos.q2.iso.QServer" logger="Q2"  instance="e424833b-c2c1-4f8b-b743-8a69271912a2">
  ...
  ...
</server>

The next time it runs, Q2 will generate a new instance ID, so in the rare situation where an old deployment descriptor is present in the deploy directory, it will be ignored and deleted (as it should have been removed at the previous exit).

Q2.deployElement is a handy method that requires a JDom Element. If you are not a member of the JDom church, you can always create your QBean manually, you can get to know Q2′s instance ID by calling its getInstanceId() method that gives you an UUID,.

Note: when you deploy a bundle using Q2 –config=/path/to/your/bundle, Q2 now flags the exploded descriptors as transient.

This is available as of jPOS 1.6.9 r2950

por apr, el 24 de julio de 2010 a las 23:35

23 de julio de 2010

Fernando Briano

Este sábado: miniJAM! artístico por Ceibal Jam

La revolución generada por OLPC, y el Plan Ceibal en Uruguay, sigue avanzando. Vean la agenda para este Jam, y encontrarán un proyecto para transformar la ceibalita en un robot!

Este sábado se realizará el segundo miniJAM! artístico. Una instancia para explorar las posibilidades de las XO en el campo de las artes visuales y la robótica.

miniJAM artístico

miniJAM artístico

Programa:

14:00 Bienvenida (Enrique Aguerre, Gabriel Eirea)

14:15 Charla: OLPC, desde Austria hasta Nepal (Christoph Derndorfer). Plan Ceibal es el proyecto más grande de OLPC que hay en este momento. Pero tambien existe una comunidad global de OLPC y Sugar, y no solo en los paises donde existen proyectos activos. Grupos como OLPC Alemanía, OLPC Austria y OLPC Francia estan muy activos en contribuir a los esfuerzos globales. Esta charla va a presentar unos de los proyectos que se están realizando en Austria. Además vamos a ver a Nepal donde la ONG OLE Nepal ha estado trabajando en crear contenido interactivo para sus escuelas que usan los XO desde el 2007.

15:00 Charla/taller: Butia, transformando la XO en un robot móvil (Gonzalo Tejera y equipo de proyecto Butiá). A partir de este proyecto todo joven podrá, obteniendo elementos robóticos de bajo costo, transformar la computadora XO en un robot móvil autónomo. Este proyecto pretende acercar a los jóvenes de todo el país a la robótica, trabajando en aspectos mecánicos simples y poniendo énfasis en la programación. Se utilizan los lenguajes incluidos en la computadora XO (pe: Python y Tortugarte) para dotar de “inteligencia” al robot Butia. El proyecto Butia está financiado por la ANII y la Unidad de Extensión de la Facultad de Ingeniería de la Universidad de la República.

16:00 Taller: Animación artística Stop Motion en la XO (Victoria Barreiro y equipo de Múltiplo XO). Se realizará un taller para explorar a la XO como herramienta para la creación artística en el lenguaje de la animación: específicamente Stop Motion y Pixelation. Se utilizará captura de imágen y scratch.

18:30 Se realizará mosaico con las realizaciones visuales obtenidas en las XO.

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

por Fernando, el 23 de julio de 2010 a las 13:16

22 de julio de 2010

Bruno Buzzi

Simulación de un Workflow de Procesos y Documentos

Introducción

En la siguiente simulación mostramos parte de un Workflow de Procesos y Documentos de uno de nuestros clientes.

Dado que esta será una aplicación propietaria no publicaremos la Simulación final sino una de las simulaciones intermedias.

Este sistema tiene como objetivo administrar los proceso y documentos de la empresa. Cada usuario (o Rol) puede participar en más de un proceso de la empresa, y estos procesos del usuario pueden pertenecer a diferentes proyectos.

La idea general es que cuando un Rol entre al sistema vea o tenga sus Proceso, sus Documentos (MS Office), y los eventos relacionados (con los Procesos y Documentos) en los que este Rol tiene los permisos necesarios. Por ejemplo: si se termina la edición de un documento (se paso a Revision), y el Rol tiene permiso de Aprobar –> este evento debe aparecer en la lista de eventos de este rol.

Reglas Generales

* Los administradores (o jefes de proyecto) asignan a los demás roles a los diferentes procesos.

* Los procesos tiene diferentes permisos para los roles: Entrada, Continuar, Detener, Finalizar. Dependiendo de los permisos del Rol, los comandos disponibles (botones) para este en la página web.

* Los documentos del Rol dependen de los procesos en los que este asignado este rol, y de los permisos sobre estos. Permisos de documentos: Acceder, Aprobar, Editar, Publicar, Revisar.

Beneficios de la Simulación

Como el sistema tiene cierto nivel de complejidad, muchas fallas (u omisiones) en el diseño no se detectan. Solo cuando los programadores empiezan la implementación y estas fallas empiezan a surgir.

Cuanto más complejo el sistema más propenso a fallas de diseño estará. Estas fallas tiene diferentes características, es muy difícil listar todas. Un diseño puede tener fallas menores y fallas mayores. Entre las fallas menores se pueden encontrar: omisión de atributos de una clase, una relación entre clases no especificada, clases que no existen pero son necesarias, incongruencia entre clases, etc.

Las fallas mayores NO pueden ser detectadas (o al menos es muy difícil hacerlo) hasta tanto no se comience con la implementación.

Esto es porque el diseño esta especificado en documentación estática, ejemplo, documentos Word, diagramas de clases, diagramas de casos de uso, diagramas de secuencia, máquinas de estado,etc.  Es decir, si bien esta documentación es fundamental en todo proyecto, tambien hay que reconocer que es “letra muerta“.

Por “letra muerta” se tiene que entender que es algo estático, y es imposible para alguien tener en cuenta todos los casos que se puede dar en un sistema dinámico a partir de documentos estáticos (si bien sabemos que esta documentación es fundamental).

Este es el motivo por el cual todos los proyectos tienen varias etapas de diseño –> desarrollo –> diseño –> desarrollo, etc. Esta actividad de “prueba y error” entre el diseño y el desarrollo es extremadamente costosa.

En este punto es donde la simulación es un paso fundamental para asegurar la calidad de un diseño, y así evitar por completo o en un gran porcentaje, este vaivén entre el diseño y el desarrollo.

La simulación da una visión concreta de los problemas que tiene un diseño, y los errores en el diseño están 100% especificados en la simulación.

Esta simulación provee a los actores del proyecto con valiosa información.

Si a la simulación le sumamos el prototipado –> estamos en gran ventaja con respecto a la forma tradicional de diseño.

El prototipado permite al cliente tener una mejor visión de lo que será su sistema, permitiendo que este que pueda especificar mucho mejor sus requermientos, esto redunda en ahorro de costos (que generalmente es muy difícil de cuantificar).

Antes de describir el sistema adelanto la conclusión final…

Conclusión

Con esta simulación nuestro cliente llego a la etapa de desarrollo 100% seguro de que su diseño funcionahace lo esperado y además  es lo que quiere su cliente, ya que este participo de la simulación y el diseño del prototipo.

Diagrama de Clases

Clases principales: Rol, Proyecto, Proceso, Documento, VersionBásicamente: en el sistema existen Proyectos, cada Proyecto tiene un conjunto de Procesos, y cada Proceso tiene un conjunto de Documentos. A su vez cada Documento tiene un conjunto de Versiones, la cual la última versión del conjunto es la actual.

Los Roles se asigna a los Procesos de la siguiente manera: se debe crear uno o varios GrupoProceso para cada Proceso. Luego a cada GrupoProceso se le asignan los Roles y los Permisos sobre los procesos. De esta forma un Proceso(P1) puede tener el GrupoProceso(adm), este GrupoProceso(adm) contiene los roles que serán administradores del proceso, y los permisos correspondientes de administración (Entrada, Continuar, Detener, Finalizar).

Los mismo sucede para los documentos, si bien como usuario estoy en varios procesos, pero no tengo los mismos permisos para todos los documentos de mis procesos. Al igual que los procesos, los documentos tienen GrupoDocumento, donde se configuran los roles y los permisos para estos roles.

Cuando un proceso o un documento cambia de estado, entonces se crea un evento que es enviado a todos los roles que tenga alguna responsabilidad sobre este nuevo estado.

Diagramas de Estado

Simulación y Prototipo

Esta es la ventana que le aparece el Rol luego de acceder al sistema.

La siguiente muestra los GrupoDocumento que tiene asignado este Rol.

La siguiente imagen muestra el GrupoDocumento “Administrar Documentos”.

Para mostrar parte del código de la simulación usaremos el ejemplo de Publicar una nueva Versión de un Documento. La siguiente imagen muestra una Version a punto de ser publicada.

Ahora veremos el código que se encarga de mostrar o no el botón de “Publicar” al usuario actual del sistema. En el UML Almighty a cada método se le puede asignar otro método que indica si el primero puede ser ejecutado o no por el usuario actual del sistema.

En la siguiente imagen se muestra el ambiente de desarrollo del UML Almighty, y los métodos “publicar” y “puedePublicar:”  de la clase Version.

Aquí se esta indicando que el botón ”Publicar” (que ejecuta el método #publicar:) será dibujado en la página web solamente si el método #puedePublicarVersion: devuelve “true cuando se ejecute.

Estamos en la clase Version que es la responsable de publicar la nueva Version del Documento. El argumento unRol es pasado como parámetro por el UML Almighty a la hora de ejecutar el método. Para poder publicar la versión, esta tiene que estar en estado “Aprobada” y ademas el usuario actual unRol debe tener permisos para realizar esta operación, de lo contrario el botón no aparece.

Reglas:

* Si la Version no tiene estado actual no se puede publicar.

* Si la Version esta en un estado diferente al de “Aprobacionno se puede publicar.

- Se obtienen los GrupoDocumento (de este documento) en los que participa unRol.

* Si algún GrupoDocumento de unRol incluye el permiso Publicar –> el botón se dibuja en la página.

Este código se ejecuta cada vez que algún usuario entra en la página de alguna Version.

Ahora veremos el código para publicar una Versión

Reglas:

* Se crea la nueva la instancia del nuevo estado “Publicado”.

* Se pone este nuevo estado como el actual (es decir, se agrega a la colección de estados en la última posicion).

* Se envían los eventos a los usuarios correspondientes.

Código de como se cambia el estado actual

Este método es bastante sencillo, asigna la Version y Rol al nuevo EstadoDocumento. Agrega el estado a la colección de estados en la última posición, de esta forma el nuevo estado queda como actual.

Código de como se envían los eventos

Este método es un poco más complicado que el anterior.

Reglas:

* Se crea el Evento y se inicializa. Se le asigna al Evento el documento y version correspondiente, así como el estado y el permiso.

* La reglas siguientes son más complejas. Se separan en:

+ documento in: GrupoDocumento select: []. “[] – bloque de código”

+ eachGrupoDoc any: PermisoDocumento satisfy: []. “[] – bloque de código”

El primer mensaje itera sobre todos los GrupoDocumento de la Version, y selecciona solamente los GrupoDocumento que devuelvan “true” cuando se evalúa el bloque interno.

El bloque interno en este caso es el segundo mensaje #any:satisfy:, y devuelve “true” cuando al menos una de sus evaluaciones internas devuelve “true” (diferente de #all:satisfy:, donde todas tienen que ser true).

Por lo que [gruposConPermisos] son todos los GrupoDocumento que el tienen un permiso igual al permiso pasado por parametro <unPermiso>.

* Por último se agrega el Evento a todos los usuarios de los GrupoDocumento anteriores.

Conclusión

Con esta simulación nuestro cliente llego a la etapa de desarrollo 100% seguro de que su diseño funciona, hace lo esperado y además es lo que quiere su cliente, ya que este participo de la simulación y el diseño del prototipo.


por smalltalkuy, el 22 de julio de 2010 a las 17:04

21 de julio de 2010

Marcos Crispino

Cambio en la numeración telefónica en Uruguay

El próximo 29 de agosto, en Uruguay cambia la numeración de los teléfonos fijos, pasando a tener todos 8 dígitos.

Las reglas para el cambio de numeración no son muy complicadas:
  • Los números 0800, 0900, y los números cortos, no cambian.
  • Los demás, se les agrega la característica adelante, y pueden pasar dos cosas:
    • el número queda de 8 dígitos => ese es el número (es el caso de Montevideo y Maldonado)
    • el número queda de 7 dígitos => se le agrega un 4 adelante (para el resto del país).
Hay más información en el sitio de ANTEL.

Para los impacientes (como yo), que tienen todos los números en la agenda del celular, acá les dejo un tip. Si hoy el número es X XXX XXX, desde un celular se puede discar +598 2X XXX XXX, y funciona. Es de suponer que a partir del 29 de agosto también va a funcionar, porque ese es el número internacional...

Lo que no dice nada que vayan a cambiar los números de los celulares, que hoy son de 9 dígitos aunque el primero siempre es un cero (y como todos sabemos los ceros a la izquierda no cuentan...). De todas formas el tip también sirve: si el número es un celular, y por lo tanto es de la forma 09X XXX XXX, se puede discar +598 9X XXX XXX, y funciona ahora y seguramente funcione en el futuro.

Ahora, una reflexión un poco más profunda... ¿Qué sentido tiene tener "números" de teléfono? Es decir, el número en sí tiene muy poca información (la localidad o la zona, o si es móvil, pero nada más).

En pleno siglo XXI, pienso que podría hacerse mejor. Un número de 8 dígitos no significa nada... Claramente el motivo de que sean todos dígitos, tiene sus raíces en los comienzos de la telefonía, hace al rededor de 150 años.

Si yo tuviera que inventar una "numeración" telefónica hoy en día, la haría más parecida a una dirección de e-mail... Digamos, algo así como nombre@antel.tel.uy. Tiene bastante más información que un número de 8 dígitos, ¿no? Por supuesto, también tiene sus desventajas... ¿Qué pasa cuando hay dos personas con el mismo nombre? Tampoco es demasiado práctico si hay que "discarlo" en vez de buscarlo en la agenda.

En todo caso no es mi intensión dar una solución, sino plantear el problema... Seguramente si se le dedica más de 30 segundos a pensarlo se encuentre una solución mejor que los 8 dígitos.

por noreply@blogger.com (Marcos Crispino), el 21 de julio de 2010 a las 22:05

Martin Balao

SPF para la direcciones de correo en tu dominio

spf para tu direccion de correo .com.uy

Uno de los problemas más comunes en internet es la suplantación de identidad. Una de las aristas de este tema es el caso de envío de correos en nombre de otra persona. Como los protocolos no hacen ninguna verificación en ese sentido, cualquiera de nosotros puede enviar desde la dirección usuario@servidor.com que desee (exista o no). Así se propagan muchos fraudes y spam. Sin entrar en temas de seguridad informática y técnicas de firmado, vamos a hablar de un protocolo que se desarrolló hace unos años para hacer frente a esta situación.

La idea de SPF (Sender Policy Framework) es que un servidor de correo, al recibir un mensaje, tomará el dominio de la dirección remitente y le preguntará (consultando el registro TXT por DNS) las directivas. En las directivas estará indicado desde que servidores se pueden enviar emails con direcciones @dominio.com. El servidor de correo verificará si el servidor desde donde efectivamente se envió el mensaje es uno de los autorizados o no; y resolverá que hacer según la misma directiva.

Para que quede más claro:

1. Yo envío un correo desde mi servidor local con la dirección usuario1@ejemplo.com como remitente a la dirección usuario2@gmail.com.

2. El servidor de Gmail recibe el mensaje y hace una solicitud por DNS al dominio ejemplo.com para conocer la información del registro TXT.

3. En ese registro TXT está la directiva SPF de ejemplo.com que le dice si mi servidor -desde donde yo mandé el correo- está autorizado o no, y qué hacer en caso de que no (por ejemplo, rechazar el mensaje).

4. El servidor de Gmail ya sabe si el correo se originó en un servidor autorizado por el propietario del dominio o no. Lógicamente, si en las directivas está autorizada la IP de un shared hosting, no podemos asegurar que sea válido.

Obviamente para que esto funcione el servidor que recibe el mensaje debe implementar SPF. Actualmente los grandes proveedores de correo lo implementan. Si tenés una dirección @gmail.com, @hotmail.com, @yahoo.com, etc. no tenés que preocuparte. Adinet actualmente pareciera que también. Si en cambio tenés una dirección de correo @tudominio.com, vas a tener que agregar la directiva SPF en el registro TXT manualmente.

Ejemplo para dominio .com.uy y Google Apps como servidor exclusivo de correo:

En mi caso utilizo a Anteldata como hosting de DNS. Los registros MX están apuntados a los servidores de Google y el registro TXT que debemos agregar es “v=spf1 include:_spf.google.com ~all“.

Pueden ver más información y aprender más de la sintáxis en los siguientes lugares:
- http://www.openspf.org
- https://www.google.com/support/a/bin/answer.py?answer=178723

Consultas mediante nslookup:
- http://network-tools.com/nslook/Default.asp

por martin, el 21 de julio de 2010 a las 06:09

20 de julio de 2010

Martin Balao

Redirigir dominios .com.uy a URLs

redirigir dominios .com.uy a urls

El panel de administración de Anteldata para dominios .com.uy no brinda la posibilidad de hacer redirecciones a webs ni direcciones de correo -si alguien de allí lee esto, ya queda hecha la sugerencia :) -. La solución es hacer una delegación de autoridad a un servidor de DNS mediante registros NS (Name Server). Luego, en el servidor de DNS agregaremos URL Forwarding (o como la empresa lo llame). Por suerte hay varios hostings de DNS gratis. Propongo esta pequeña guía para hacer todo el proceso en uno de ellos, Afraid.org.

1. Registrarse en Afraid.org (gratis)

2. Ingresar y dirigirse a Domains (menu izquierdo)

3. Click en Add A Domain. En el formulario que verán solo hace falta escribir el dominio completo (sin http:// ni http://www.) y elegir si desean que sea público o privado. Un dominio público permitirá a otros usuarios de Afraid.org crear subdominios (para registros A, MX, AAAA, Url forwarding, etc).

4. Ingresar en el Panel de Anteldata y dirigirse al dominio en cuestión.

5. Clickear Administrar y agregar los siguientes registros NS:

NS1.AFRAID.ORG
NS2.AFRAID.ORG
NS3.AFRAID.ORG
NS4.AFRAID.ORG

6. Esperar a que se actualicen las DNS para que Afraid las reconozca. Puede llevar hasta 24 horas. Ingresen a la sección Domains de Afraid, que visitamos hoy, para comprobar el estado.

7. Una vez superado el punto anterior, en Afraid nos dirigimos a Web Forward (menú izquierdo).

8. Allí clickeamos Add y completamos el formulario. En Redirect From ponemos el subdominio (que puede ser vacío) y buscamos nuestro dominio en la lista. En Redirect to va la web a la que redirigimos. Cloak es para camuflarla y que el navegante en lugar de ver la dirección real en la barra de su navegador, vea nuestro dominio. Page Title es el título que se verá en la ventana del navegador si lo camuflamos y favicon el icono de la pestaña/favoritos.

9. Recomiendo repetir el paso 8 poniendo una vez vacío el subdominio de Redirect from y otra vez “www” para lograr que tanto http://dominio.com.uy como http://www.dominio.com.uy lleven al lugar correcto.

A las órdenes por cualquier consulta :)

por martin, el 20 de julio de 2010 a las 23:33

Instalar Gentoo Linux en VMware Workstation

install gentoo 10 in vmware workstation

Ayer terminé de instalar Gentoo en una máquina virtual VMware Workstation. Para los que no conozcan, Gentoo es diferente a la mayoría de las distros en el sentido de que no trabaja por defecto con paquetes precompilados. En su lugar, se descarga el source del repositorio y se compila en el momento según las directrices especificadas.

Se deduce de esto la cantidad de tiempo que lleva instalar algo, el nivel de dificultad para usuarios nuevos y la posibilidad de compilar programas sin determinadas funciones. Además, estamos hablando de una distribución rolling release, que está actualizando el software a su última versión continuamente. Como contrapartida, tenemos libertad para optimizar y hacer una configuración realmente a nuestra medida. El software estará siempre como recién salido del horno, con las nuevas funciones y bugfixes implementados. ¿Inestable? No sé, recién lo instalé. Lo que sí puedo asegurar es que si disponemos de tiempo y ganas, tenemos una excusa para aprender de lo lindo.

Gentoo es una distribución linux que nació en el año 1999 y en 2002 tomó su nombre actual (especie de pingüinos). Tiene una comunidad de usuarios grande, siempre dispuestos a ayudar, y una excelente documentación. El gestor de paquetes se llama Portage e implementa una serie de características avanzadas, como la resolución de dependencias, que hacen que instalar algo sea un comando simple (en una configuración básica). Este sistema está inspirado en los ports de FreeBSD.

Si bien en algunas versiones entre 2006 y 2008 se incorporó instalador gráfico, lo cierto es que la instalación actual es en modo de texto. Eso significa que debemos hacer todo a mano. Afortunadamente contamos con el Handbook que será nuestro mejor amigo.

Para los aventureros que se animen, no voy a repetir todo el proceso pero sí un pantallazo general. Lo que hacemos es arrancar con un minimal-live-cd que nos habilita una línea de comandos con las herramientas básicas. Lo siguiente es particionar y formatear el disco (fdisk para lo primero y lo segundo depende del sistema de archivos que vayamos a usar). Bajamos el Stage3 (un sistema Gentoo básico, compilado) y trabajamos en él con un entorno chroot. Compilamos el kernel. Podemos hacerlo manualmente o con un programita llamado genkernel. Luego del kernel, siguiendo la guía, iremos instalando otro software imprescindible y las configuraciones en cada uno. Hasta allí, en algunas horas, tenemos un sistema andando en modo consola. Lo siguiente, para los que deseen, es instalar X y KDE o Gnome. Para que funcione se deben instalar Dbus, Hal y ConsoleKit. No olviden luego setear todo esto para que inicie junto con el sistema en runlevel 3 (rc-update). Si quieren entrar a KDE con el usuario root -como yo-, editen el archivo /usr/share/config/kdm/kdmrc.

Dejo a disposición el archivo /etc/X11/xorg.conf para hacerlo andar en una VMware 7. Las VMware-tools se pueden instalar sin problemas. Se reconoce el mouse, teclado, sonido, la tarjeta de red y todo lo que he probado hasta el momento.

Si todo esto no les inspira pero quieren probarlo, hay un LiveDVD oficial -que me anduvo algo lento y no tiene instalador obviamente-.

Como conclusión, creo vale la pena probar y aprender. No sé si es una solución definitiva para aquellos que buscan cierta “comodidad” y configuración “por defecto”. Como dato anecdótico, la compilación me insumió unas 30 horas continuas :)

por martin, el 20 de julio de 2010 a las 08:07

Alejandro Segovia

Big-O


Enconté mediante Reddit un post en Stack Overflow que explica en términos sencillos en qué consiste la notación “Big-O”, utilizada para representar la complejidad de un algoritmo.

Traduzco solo una parte del post aquí, les recomiendo leer el post completo si es que te encuentras en duda o necesitas repasar en qué consiste esta notación.

La notación Big-O es una representación relativa de la complejidad de un algoritmo.

Hay algunas palabras importantes deliberadamente elejidas en esta oración:

  • relativa: únicamente puedes comparar manzanas con manzanas. No puedes comparar un algoritmo que hace multiplicación aritmética con uno que ordena una lista de enteros. No obstante, [comparar] dos algoritmos que hacen operaciones aritmeticas (uno multiplicación y otro suma) te dirá algo significativo.
  • representación: Big-O (en su forma más simple) reduce la comparación entre algoritmos a una única variable. Esa variable es elegida basandose en observaciones y supuestos. Por ejemplo, [los] algoritmos para ordenar son típicamente comparados en base a operaciones de comparación (comparar dos nodos para determinar su orden relativo). Esto asume que comparar es costoso. ¿Pero qué si comparar es barato e intercambiar costoso? Cambia la comparación; y
  • complejidad: si me toma un segundo ordenar 10.000 elementos, ¿cuánto me llevará ordenar un millón? La complejidad, en esta instancia, es una medida relativa de algo más.

Continuar leyendo en Stack Overflow…

Share/Bookmark

por Varrojo, el 20 de julio de 2010 a las 02:00

17 de julio de 2010

Marcos Crispino

Matemática... ¿Estás ahí?

Hace unos días terminé de leer el libro Matemática... ¿Estás ahí? de Adrián Paenza.

Realmente está muy bueno, vale la pena leerlo. Se puede bajar (legalmente, para uso personal) del sitio de la Universidad de Bs. As., junto con el resto de los libros de la serie (cinco en total, pero por ahora solo leí el primero).

Me tomo la libertad de reproducir acá un fragmento, donde demuestra por el absurdo que todos los números naturales son "interesantes".
Números interesantes
Voy a probar ahora que todos los números naturales son números “interesantes”. Claro, la primera pregunta que surge es: ¿qué quiere decir que un número sea interesante? Vamos a decir que un número lo es cuando tiene algún atractivo, algo que lo distinga, algo que merezca destacarlo de los otros, que tenga algún borde o alguna particularidad. Creo que todos entendemos ahora lo que quiero decir con interesante. Ahora, la demostración.
El número uno es interesante porque es el primero de todos. Lo distingue entonces el hecho de ser el más chico de todos los números naturales.
El número dos es interesante por varias razones: es el primer número par, es el primer número primo. Creo que con estos dos argumentos ya podemos distinguirlo.
El número tres también es interesante, porque es el primer número impar que es primo (por elegir una razón de las muchas que habría).
El número cuatro es interesante porque es una potencia de dos.
El número cinco es interesante porque es un número primo. Y de aquí en adelante deberíamos ponernos de acuerdo en que cuando un número es primo, ya tiene una característica fuerte que lo distingue y lo podríamos considerar interesante sin buscar otros argumentos.
Sigamos un poco más.
El número seis es interesante porque es el primer número compuesto (o sea, no es un número primo) que no sea una potencia de dos. Recuerde que el primer número compuesto que apareció es el cuatro, pero es una potencia de dos.
El número siete es interesante, y no hace falta argumentar más porque es primo.
Y así podríamos seguir. Lo que quiero probar con ustedes es que:
“Dado un número entero positivo cualquiera siempre... siempre... hay algo que lo transforma en ‘interesante’ o ‘atractivo’ o ‘distinguible’”.
¿Cómo hacer para probar esto con todos los números, si son infinitos? Supongamos que no fuera así. Entonces, eso quiere decir que hay números que llamaremos no interesantes. A esos números los ponemos en una bolsa (y supondremos que esta bolsa no está vacía). Es decir, tenemos una bolsa llena de números no interesantes. Vamos a ver que esto nos lleva a una contradicción. Esa bolsa —como todos los números que contiene son números naturales, o sea, enteros positivos— tiene que tener un primer elemento. Es decir, un número que sea el menor de todos los que están en la bolsa.
Pero entonces, el supuesto primer número no interesante se transforma en interesante. El hecho que lo distingue es que sería el primero de todos los números no interesantes, una razón más que suficiente para declararlo interesante. ¿No les parece? El error, entonces, provino de haber pensado que había números no interesantes. No es así. Esa bolsa (la de los números no interesantes) no puede contener elementos, porque si los tiene, alguno tiene que ser el primero, con lo que pasaría a ser interesante un número que por estar en la bolsa debería ser no interesante.
MORALEJA: “Todo número natural ES interesante”.
Simplemente genial :)

por noreply@blogger.com (Marcos Crispino), el 17 de julio de 2010 a las 21:51

16 de julio de 2010

Gabriel Claramunt

Short break for a long hiatus

Hi! Anybody out there?
I guess twitter totally killed whatever energy I had for blogging :)
For lazy people like me, the fact that instead of inaccurately express your idea in a couple of paragraph you're able to slap one phrase and that's enough... it doesn't even need to be coherent!






Noteworthy things that happen in between (in no particular order whatsoever):
  • I'm learning Scheme by the AWESOME book "The Little Schemer" (Amazon link: The Little Schemer - 4th Edition) and using PLT Scheme / Racket. I'm getting over to my aversion to prefix notation and now I can somehow understand Lisp code and I'm getting ready to learn Clojure 
  • I'm back in my home country, Uruguay (go team! we made it to the semifinals!!)
  • I badly broke my ankle, had two surgeries and I still limp after a couple of months
  • I'm expecting another baby!
  • Scala 2.8 is out!!!!!!! Go get it while still hot
  • I need to learn Haskell
  • I went to the east coast Scala lift-off and meet awesome people
  • Don't be afraid of powerful languages, believe it or not, they make your life easier
  • I bought more Star wars legos than I needed
  • I have a couple of unfinished blog posts that someday I'll finish :)
Thanks for stopping by, I'll promise more useful posts in the future.
(I'm adding a totally unrelated picture of a alien spider I found lying on a wall)

por noreply@blogger.com (Gabriel C.), el 16 de julio de 2010 a las 02:40