miércoles, 4 de junio de 2008
¡Mudanza!
lunes, 5 de mayo de 2008
Caminando con Pier #6 - Crear un componente de "Novedades"
Por ejemplo, un componente que muestre las novedades suele ser necesario, y pier tiene una solución muy simple para eso: ¡un blog!
Los blogs son medios ideales para comunicar las novedades, pero claro, eso obliga a los interesados a entrar en el blog, y en realidad lo más cómodo (y “publicitariamente correcto”) es tenerlo en la página inicial, de entrada (si vemos el diseño del sitio que estamos armando como ejemplo, hay una sección de novedades incluidas)
Para construir un componente de novedades hay que seguir los siguientes pasos:
Crear una página embebida de novedades
Se crea una página embebida común, de la forma que vimos en los posts anteriores, haciendo click sobre “news”.
El template que yo quiero para mi página de novedades es el que sigue:
!Novedades
+newsBlog+
*Más novedades>/Blogs*
Como se vé en esta imágen:
Eso logrará que la página tenga un header (Novedades) y un footer (Más novedades), que apunta directamente al blog que creamos con anterioridad.
Esta página tiene también un componente embebido, +newsBlog+, que debemos definir.
Creando el enlace a las novedades
Para mostrar las novedades (que se encuentran en el blog), selecciono +newsBlog+, y lo defino como un componente.
Después, solo me queda configurarlo, lo cual consigo seleccionando “Settings”.
Hay que ingresar el link que será tomado como fuente y si queremos, podemos modificar la cantidad de posts y la longitud máxima a mostrar.
¡Listo!
Para probarlo alcanza con poner un post en el blog y verlo como novedad en la página principal.
martes, 22 de abril de 2008
Caminando con Pier #5 - Creando una págína con estructura
Por suerte, para este ejemplo, el header, logo y menú ya lo tengo por defecto, con la configuración estándar de Pier.
Entonces, lo que se necesita es crear la estructura interna: los tres paneles (animation, news y others).
Crear esta estructura, con ciertas limitaciones, es bastante simple:
Selecciono el “Home”.
Del sidebar, selecciono “Edit”.
Cambio el título por: “¡Bienvenido!”
En los contents, ingreso la estructura XHTML con la que desee ver la página:
Después, es tan simple como agregar las páginas o componentes internos seleccionando los componentes, para lograr una estructura de la forma que queramos.
Detalle: Embeber componentes en Pier.
Esta es una de las características (features) únicas en Pier: embeber componentes. Esto es tan simple como poner entre “+” el nombre del componente a embeber, por ejemplo: +welcome+, +news+. Luego, será tan fácil como hacer click sobre los links generados y seguir el wizard de adicion de componentes, para obtener un componente embebido.
Además, es posible agregar componentes ya existentes (indicando el path, por ejemplo: ++).
Es importante destacar que esta es la forma en la que uno insertaría imágenes o links a documentos descargables: se embeben como cualquier componente, y luego se selecciona “File” como tipo de componente.
Problema: Según el diseño de las páginas de Pier, todas llevan un título. Para armar estructuras a veces es deseable no poner un título (veamos por ejemplo el diseño con el que estoy trabajando), pero no hemos encontrado una forma elegante de ocultarlo o eliminarlo. Hay, sin embargo, algunos workarounds:
Lo más fácil es simplemente cambiar el CSS para el título (H1), y ponerle “display: none” o alguna de las otras formas.
Es posible modificar la estructura desde Squeak, para sacarle el título.
- banner, tiene una imagen (animada, idealmente, pero por ahora no tengo). Despues del click, selecciono tipo File y subo la imagen que quiero usar.
- news, es una página embebida, con un listado de novedades (cubriremos esto en el proximo post), por ahora simplemente la agrego como una página: luego del click, selecciono tipo Page y salvo.
- welcome, es, al igual que news, una página embebida, pero con contenido (debo poner un mensaje de bienvenida, ¿no?). Para obtener esto repito lo hecho para las novedades, pero agrego como contenido el texto que quiero.
jueves, 17 de abril de 2008
La gente de Smallworks
Este post es para presentar a todos los que participan en mayor o menor medida de este sueño.
El proyecto lo comenzamos tres amigos en muchas charlas after-office en el lugar en que trabajábamos con anterioridad. Ahí, café, cerveza, vino o fernet de por medio (variando las circunstancias dependiendo del día, la hora, el clima, etc.) empezamos a trazar los principios y objetivos fundamentales que le dan forma a Smallworks.Juanjo, Diógenes y yo (Esteban) somos ese grupo de amigos que puso en marcha esto.
Por supuesto, tuvimos que incorporar rápidamente a otros participantes del proyecto (y, lamentablente, tuvimos que decirle “esperá un poco, a que arranquemos” a otros). Así, sumamos al equipo a gente que completa muy bien el equipo: Nic, en diseño gráfico y “arte”, es el responsable del logo de la empresa y será el responsable del diseño y mantenimiento de la página, así como del diseño gráfico de las herramientas que implementemos; Martín, responsable de ventas, en quien descansan nuestras esperanzas de hacernos ricos ;) Y además, tenemos una legión extranjera, que darán los pasos necesarios para hacernos conocidos -y populares- en España primero, y cualquier lugar de la UE después: German y Laura.
Y ya está, con este equipo podemos lograr nuestros objetivos de convertirnos en un lugar viable y sobre todo, divertido.
martes, 15 de abril de 2008
Caminando con Pier #4 - Agregar páginas y blogs
En esta entrega mostraré como hice para agregar las páginas y blog de la empresa.
Agregando páginas
Agregar una página es facilísimo:
Seleccione el “home” del sitio.
Importante: Asegurarse de seleccionar la página de la cual queremos “colgar” nuestras páginas. Las páginas se crearan como hijos la que se encuentre seleccionadas.
Seleccione “Add” del sidebar y complete el formulario para una página:
Y complete los datos en el siguiente diálogo.
Importante: Para obtener los botones que ayudan a la edición de texto tengo que instalar un package particular, Pier-EditorEnh-lr.12.mcz, que se puede encontrar en el repositorio http://source.lukas-renggli.ch/pieraddons.
Importante: El formato de los contenidos es una wiki, que utiliza el mismo formato que la swiki tradicional, sintaxis que se puede encontrar aquí. La única diferencia (al menos la única que vi) es la sintaxis para embeber componentes (que es una característica exclusiva de pier), el nombre del componente embebido se pone entre “+”, por ejemplo: +news+.
Agregando blogs
Agregar blogs es tan sencillo como agregar una página cualquiera. En este ejemplo, yo necesito crear más de un blog, que estarán concentrados en una página “Blogs”, por lo cual en lugar de seleccionar el Home, selecciono Blogs como padre, pero el procedimiento es similar:
Seleccione “Add” del sidebar y complete el formulario para un blog:
La única diferencia con respecto a crear una página común es que hay que cambiar el tipo de componente, por “Blog”.
Y complete los datos en el siguiente diálogo.
Hay varios campos obligatorios, pero en la mayoría puedo dejarle los defaults.
Detalle: Agregar un post a un blog, es tan simple como todo lo demás: simplemente seleccione “Add” del sidebar e ingrese el post. El formato del post es el mismo que el de una página wiki (misma sintaxis y misma forma de agregar imágenes, etc.)
Luego de unos minutos de trabajo, su sitio se verá más o menos así:
Problema: El menú “children”, que muestra las páginas de smallworks, está ordenado alfabéticamente, y probablemente ese no sea el orden en el que las querramos.
Existen dos soluciones posibles:
1) Reemplazar el componente de tipo children por un de tipo menú, que nos permite editar el mismo manualmente (pero se pierde el agregado dinámico de páginas).
2) Una solución medio “hacker” (hay que tocar la página desde squeak), pero es bastante sencilla: si tiene una versión de pier anterior a la 215, hay que actualizar a esta (Pier-Model-lr-215) o mayor y ejecutar en un workspace:
(PRKernel instanceNamed: 'Smallworks') propertyAt: #childrenSortBlock put: nil.Lamentablemente, todavía no hay interfaz gráfica para setear esto.
miércoles, 9 de abril de 2008
Valor...no es Mc Donalds
Antes de seguir quería decirles que este puede ser el ultimo post que escriba en blogger. Como escribo antes Esteban, breve vamos a tener listo nuestro sitio, el sitio de este sueño que dimos en llamar Smallworks [S|W]. Allí vamos a dividir en forma mas clara nuestros post, cada uno (estaban, juanjo, yo y cada uno de los que trabajamos en [S|W]) tendrá su propio blog para contar experiencia personales y habrá un blog general donde postearemos mayormente sobre tecnología y las experiencias de esta aventura con forma de empresa empresa.
De esta manera encontrarán mejor clasificados los tipos de posts. (Supongo que ya se habran dado cuenta del perfil de cada uno).
Ahora continuando con el tema de este post vamos de detallar las principales forma mostrar valor en nuestro contexto actual, siempre según mi humilde punto de vista.
Manifestaciones del Valor
"Comenzar algo solo y con las manos vacías asusta al mejor de los hombres. También dice muchísimo de cuán seguros están de que Dios está con ellos." [Un relato de los tres reyes]
Antes que nadie salte por la palabra "Dios" en el texto, e independientemente de mi fé, quise poner este extracto para mostrar la primera manisfestación del valor, "Las Convicciones".
Se puede decir que una persona es valiente cuando sus convicciones están sobre la realidad que sus sentidos le indican y lo que la razón aplicable en ese momento. Son estos tipos de personas que van mas allá de la media y son los verdaderos agentes de cambio. Son aquellos que gustosamente abandonan su zona de comodidad y se lanza a la exploración de nuevos terrenos por la promesa de cambio.
En la biblia define en forma muy sintética este tipo de comportamiento, "La certeza de los que no se conoce, la convicción de los que se espera", en Otra palabras "Fe", una persona que tiene fe en sus convicciones es una persona Valerosa.
"La oportunidad no es obligación". [Mile Nappa]
En esta frase, aunque muy oculta, esta la segunda manifestación del valor. "Decir que no"
Una de las primeras pruebas que tenemos que pasar cuando queremos ser diferentes y demostrar nuestro valor es "Decir que no". Tom Peter en su libro "La empresa de Servicios Profesiones " dice: "A cuantos clientes le a dicho que no en este tiempo?, Cuantos negocios ha dejado pasar? esta es una muy buena medida de su madurez". Decir que no es una
de las poderosas manifestaciones de valor. Esto demuestra 2 cosas, que tiene su visión clara y que tiene la madures para seguirla. Usted puede equivocarse en una decisión o en juicio de valor sobre algo, pero si pierde su visión y su personalidad, ya no es nadie. Se convertirá en uno mas de la masa. Ahora basta de retorica, decir que no, a que? Es muy simple, a lo vea en contra de su visión y mision en la vida, por ejemplo nosotros en Smallworks respetamos el ser humano como tal y conocemos lo que pasa(sufre) un profesional cuando es enviado a un cliente en el modelo de "Man Power". Es por eso que nosotros no hacemos "Man power", no importa el dinero que haya atrás. Smallworks no hace "Man power" y se los digo por experiencia, hay que ser muy valiente para decirle que no a un cheque "Gordo" cuando no tenes para el colectivo (autobus). Pero si lo aceptaramos no seríamos SmallWorks, seríamos algo que no queremos ser.
"Es una perdida de tiempo diseñar e implementar una estrategia de cambio hasta que no se descubre y acepta la realidad presente. Si no sabe donde está, es imposible llegar a donde tiene que estar. Lo que no sabe lo puede matar"[Andy Stanley]
Otra manisfestación del valor es reconocer la realidad de los que estamos viviendo, hay muchisima gente que se encierra en un mundo irreal para no enfrentar sus miedos y comenzar un cambio real de sus vidas, trabajo, pareja, en fin de todo su entorno. Sobre este punto puedo escribir horas pero lo voy a resumir en 7 "No" para asegurarnos que vivimos lo que "Es" y tenemos los pies bien plantados la tierra, porque esto también es valor:
- No fingir lo que no es
- No hace la vista gorda
- No Exagerar
- No Matar al mensajero(cuando trae malas noticias)
- No Esconderse detrás de las estadísticas y numero(perdiste a un empleado, no al 2,5% de tu Staff)
- No Obviar la critca (constructiva o no, muchas veces en la maldad de otros, verdades ocultas hay)
- No aislarse
Vea la realidad y si algo no le gusta "Cambielo"
"Las cosas se crean 2 veces, una en tu mente y las segunda en la realidad".
No tengas pequeños sueños, porque no apasionan los corazones de los hombres
En estas dos frases tenemos la ultima manifestación de valor que voy a sitar. Se por experiencia propia que es imposible el cambio sin sueños, que es imposible alcanzar ese estado que llamamos valor sin tener una meta en mente, sin tener enfrente un horizonte que justifique el esfuerzo de luchar contra el status quo. Las sociedades que se quedan con lo actual, están perferctamente preparadas para una realidad que ya no existe. Si quiere ser una persona valoroza atrevase a soñar en algo mejor, planifique y actue en consecuencia.
martes, 8 de abril de 2008
Caminando con Pier #3 - Configuración de acceso
Este proceso es muy simple, pero bastante complejo de explicar (y requiere varios pasos), así que si no se entiende, agradecería sus comentarios... así puedo arreglarlo.
Importante: Las páginas iniciales (aquellas que fueron creadas en el proceso de instalación) no tienen asignado un dueño específico y por lo tanto son de acceso público visibles en todo momento. Como regala general, siempre que una página carezca de dueño, por defecto será editable por todos los que puedan verla.
A. Login de usuario administrador
Esto es lo primero que debemos hacer, para poder cambiar todos los derechos de acceso.
Seleccionar “Login”, del sidebar.
La configuración inicial tiene como usuario administrador a “admin” con password “pier”.
Una vez ingresados, debemos cambiar el dueño de la página principal.
Seleccione “Change Owner”
Marcar “recursive” y seleccionar “admin” como el nuevo “Owner”. Eso hará que todas las páginas hijas de la página principal pasen a pertenecer al usuario “admin”.
Importante: No hay que cometer el error de hacer logout ahora, pues no hemos asignado derechos de lectura a usuarios generales ¡Si lo hacemos, no podremos ver absolutamente nada y habrá que repetir el proceso, o resolverlo desde el Pier-OmniBrowser! (que no cubrimos aquí)
C. Agregar propiedades de solo lectura para otros usuarios
Ahora, solo queda agregar derecho de lectura para cualquier usuario que no sea administrador.
Eso tiene dos pasos: 1) Habilitar derecho de lectura general y 2) deshabilitar otros derechos.
1. Habilitar derecho de lectura general.
De las opciones del sidebar, seleccionar “Change Other”, marcar “recursive” y seleccionar “View” de la lista de permisos.
Con esto asignamos derecho de lectura a todas las páginas a un visitante cualquiera de la página.
2. Deshabilitar derecho de lectura en páginas específicas.
Con el paso anterior habilitamos a un visitante a ver todas las páginas, pero hay aún algunas páginas que no deberían verse: Los que permiten visualizar la página (logs, historia, etc.) y los links del header, “Environment” e “Information”.
2.1 Ocultando visualización de la página
Seleccionar el link “Environment” y luego “Sidebar>Views”.
Del sidebar, seleccionar “Change Other”, marcar “recursive”, seleccionar “remove” como Operator y seleccionar “View” de la lista de permisos.
Ahora vamos a ocultar los links “Information” y “Environment”.
Seleccionar el link “Information”
Del sidebar, seleccionar “Settings” y marcar “Hide from menus”.
Importante: El componente “Environment” es el componente principal de la aplicación, porque define la estructura general de la misma (header, footer, contents, sidebar, todo absolutamente), aunque es “hijo” de la pagina principal, también la define a ella.
lunes, 7 de abril de 2008
Caminando con Pier #2 - Instalación
- Bajarse una imágen 3.10: Squeak3.10-7159-basic.zip
- En la imágen seleccionar el “Package Universe Browser”.
- Actualizar los packages, seleccionando "Update list from network"
- Seleccionar e instalar “Pier version current” (esta en la sección "Web Development")
- La instalación pregunta por un usuario y password de administración, para este ejemplo yo puse admin/admin.
- La instalación pregunta si quiero crear una aplicación de Seaside para Pier, le digo que sí.
- Nombre del kernel: “Smallworks”
- Entry Point: “smallworks”
- Puerto: 8080
La instalación estándar de pier me deja una aplicación corriendo, en este caso en http://localhost:8080/seaside/smallworks
Alternativa: Instalando desde monticello
El metapackage “Pier version current” instala un montón de cosas, aunque a veces no las más nuevas. Esto es particularmente crítico porque tanto Seaside como Pier se actualizan muy frecuentemente, y a veces nos conviene -o simplemente queremos- tener versiones más nuevas.
El siguiente es un script que hace lo mismo que el metapackage que instalamos, pero con las últimas versiones (a la fecha):
"******************************"
"Level Playing Field (LPF)"
"Esta línea se baja de internet la última version del LPF, es necesario para poder instalar los últimos packages."
"******************************"
(HTTPSocket httpGet: 'installer.pbwiki.com/f/LPF.st') readStream fileIn.
"******************************"
"Comanche"
"Comanche es el servidor web default de Seaside.
Lo instalo de Universe, porque es bastante estable y no ha cambiado en los últimos tiempos"
"******************************"
Installer universe
addPackage: 'KomHttpServer(7.0.30)';
addPackage: 'KomServices(1.12)';
install.
"******************************"
"Seaside con Scriptaculous"
"Instalo la última versión estable de Seaside 2.8 y de Scriptaculous.
Las últimas versiones son distintas de las del universo, así que instalo las que estan en
el SqueakSource"
"Este paso pedirá el nombre y contraseña para el usuario administrador de Seaside"
"******************************"
"Seaside + Scriptaculous"
Installer ss project: 'Seaside';
install: 'Seaside2.8a1-tbn.539.mcz';
install: 'Scriptaculous-mb.239.mcz'.
"******************************"
"Magritte"
"Pier utiliza Magritte para describir los componentes, las versiones se encuentran en el
repositorio de lukas renggli (creador de magritte, además de pier)
"******************************"
Installer lukas project: 'magritte';
install: 'Magritte-All-lr.261.mcz'.
"******************************"
"Pier"
"Pier también esta en el repositorio de lukas
Como curiosidad: Pier-All no instala el componente de blog, ni el de persistencia,
así que los instalamos explicitamente"
"Este paso preguntará si se desea publicar una apliación pier, y los datos correspondientes"
"******************************"
Installer lukas project: 'pier';
install: 'Pier-All-lr.282.mcz';
install: 'Pier-Blog-lr.72.mcz';
install: 'Pier-Squeak-Persistency-lr.1.mcz'.
"******************************"
"Limpieza"
"Esto limpia los cachés de monticello, que engordan bastante la imágen, y luego de
la instalación son inútiles"
"******************************"
MCFileBasedRepository flushAllCaches.
Smalltalk garbageCollect.
Este proceso deja algunas cosas sin instalar que el paquete del Universe instala: el Pier-OmniBrowser y sus dependencias, pero como en esta guía no lo voy a usar, los dejé a fuera.jueves, 3 de abril de 2008
Grupo
Hace menos de un mes comencé mi tercer año de Psicología Social. Cuanto más aprendo, más me convenzo de lo útil que puede resultar esta disciplina aplicada a nuestros equipos de desarrollo. Metodologías agiles como Scrum hacen especial enfasis en la autogestión de los grupos. El Dr Enrique Pichon Riviere define al grupo como un "Conjunto restringido de personas que ligadas por constante de tiempo y espacio y articuladas por su mutua representación interna, se propone en forma explícita o implícitamente una tarea que constituye una finalidad, interactuando a través de mecanismos de asunción y adjudicación de roles.". Muy loco, resulta ser que nuestros equipos de trabajo, al menos para Pichón Riviere, son grupos!
Lo de las personas ligadas por constante de tiempo y espacio queda más o menos claro, todos llegamos entre las 9 y las 11, y nos vamos a las 18 clavado :)
La tarea que constituye una finalidad, también está claro, somos un equipo de trabajo con algún objetivo claro. Puede ser un proyecto, mantenimiento, soporte o lo que fuera, pero sabemos para qué estamos trabajando.
Articuladas por la mutua representación interna está un poco menos obvio. Esto se basa en el concepto de comunicación que dice que la comunicación entre dos personas siempre es triangular, o sea, hay un emisor que emite un mensaje hacia un receptor, una persona que habla y emite sonidos que fisicamente son escuchados por el receptor, pero además de estas dos personas físicas, el emisor en realidad simboliza su mensaje hacia un receptor que está dentro de su cabeza y que es una imagen del receptor físico que tiene delante. Esto genera un cierto grado de distorsión en la comunicación ya que esa imagen internalizada está distorsionada por cantidad de información previa suministrada por el subconsciente (historias previas con el sujeto, prejuicios, estereotipos o transferencias) En el grupo esto funciona plenamente. En primer lugar genera cohesión en el grupo ya que uno tiene internalizado a todos los integrantes, esto hace que a veces cuando falte alguien, igual esté presente porque los demás lo hacen participar en sus imaginaciones "Si estuviera fulano te hubiera dicho que eso está mal". Por otro lado esta representación interna también articula los mecanismos de funcionamiento del grupo, ya que hay una transferencia de lo conocido a esas imágenes internalizadas de mis compañeros de grupo. Por ejemplo es muy probable que algún fulano me resuene parecido a mi hermano, entonces mis reacciones hacia fulano van a ser bastante resonantes con las que tengo con mi hermano. Eso a su vez hace que fulano me incorpore de una determinada manera y tenga reacciones que reacomodarán mi representación de fulano.
Todas estas interacciones que van formando y reacomodando la mutua representación interna configuran los mecanismos de asunción y adjudicación de roles. Estos mecanismos son únicos para cada grupo y además en un mismo grupo también van evolucionando en el tiempo. Estos roles no están asociados al cargo asignado formalmente en el equipo de trabajo, sino a los roles que dinámicamente se van adjudicando y asumiendo en el devenir del trabajo del grupo.
Bien, muy lindo todo, y qué aporta esto al desarrollo de sistemas. Nada y mucho a la vez. Los equipos de desarrollo son grupos de trabajo, y querramos aceptarlo o no, se van a mover mediante las reglas descriptas. Pretender definir procesos que encierren a los integrantes del grupo en un molde donde cada perfil tiene que responder de una manera premoldeada, es negar nuestra naturaleza humana. Se pueden delinear roles y responsabilidades, pero no se puede esconder nuestra naturaleza creativa.
Bueno, otro día sigo
Whiteboard, creo que terminé
Bien, en whiteboard manejamos posts. Cada usuario tiene una colección de posts, cada post tiene n usuarios asociados y el mismo post existe en cada una de las colecciones de los usuarios a los que pertenece.
Esto nos da una herramienta para organizar la información y compartirla a la vez.
Y vuelvo con un ejemplo.
Supongamos que tengo:
Un post con titulo smallworks y sin tags
Un post con título whiteboard y tags smallworks
Un post con título officious y tags whiteboard proyecto
Un post con titulo tracker y sin tags
Un post con título bug y tags tracker
Un post con título requirement y tags tracker
Si cargo un post con los tags bug officious, automáticamente este post va a recibir los tags whiteboard proyecto smallworks y tracker, esto nos va a permitir filtrar, por ejemplo, por tracker+officious para ver todos las entradas del tracker generadas para officious o también podría filtrar por bug para ver todos los bugs cargados para todos los proyectos
Ahora bien, qué se hace con eso? Para poder adaptarlo a cada situación hay un mecanismo de plugins. Cada plugin sabe qué tipo de post crear y cómo mostrarse en el menú.
De esta manera crear una aplicación que administre contenidos consiste en crear los tipos de posts necesarios y el plugin que sepa crearlos, de hecho, el plugin también es opcional. Es así como basandonos en whiteboard logramos construir officious que es una aplicación análoga a un foro, un sistema de subastas y estamos trabajando en un sitio de administración de activos. Para todo esto solo hizo falta crear nuevos plugins.
Todavía le falta mucho, es cierto, pero la verdad es que así como está ya nos dio muchas satisfacciones.
Whiteboard, te queremos!
viernes, 28 de marzo de 2008
Caminando con Pier - Introducción
Como parte de este trabajo (en realidad, como única parte realmente ardua de él), tuve que aprender Pier.
Es un Content Management System (CMS) hecho sobre Seaside, que corre en Squeak (hay ports para VisualWorks y GemStone, también). Pier tiene todos los elementos que requiere un CMS (facilidad de extensión y estilización y customización); tiene además algunos agregados que muchos otros no tienen: la orientación a componentes extensibles y una buena cantidad de componentes ya disponibles; finalmente, tiene algunas características con las que no cuenta ningún otro CMS: la posibilidad de “embeber” componentes en una página e inclusive incluir como componentes otras aplicaciones Seaside completas, transformándose así en una suerte de portal.
Toda esta maravillosa potencialidad viene con su costo: Si bien es increíblemente sencillo de usar, esto es así sólo después de dar un paso, hacer un pequeño “click” y entender el funcionamiento... al menos, eso me pasó a mí, quizás porque nunca antes había lidiado con un CMS... y como muchas de las cosas del mundo Squeak, Pier esta bastante pobremente documentado, lo cual es un problema, porque es realmente una herramienta muy poderosa.
En fin, como parte del trabajo de hacer andar nuestro sitio, escribí un pequeño “paso a paso” con todo lo que yo necesité hacer para tener la página andando bien. Sólo que es un poco largo para poner como un solo post... así que lo voy a partir en distintos posts, que insertaré en estos días.
Por cierto, en estos momentos hay una linda competencia en el mundo squeak para ver cual de los dos principales CMSs -Seaside/Pier o Aida/Scribo- utilizar para la página web. Por supuesto yo voto por Pier, pero sé que hay quienes leen este blog y prefieren Aida. De cualquier manera, eso esta aún lejos de ser definido... y no creo que a nadie le importe mucho mi opinión a la hora de decidirlo ;)
viernes, 21 de marzo de 2008
Whiteboard, parte 2
jueves, 20 de marzo de 2008
¿El año de Smalltalk?
"If there is any year for Smalltalk to regain a commercial visibility, this will be it. I mean, look at all the things coming together:
- the OLPC XO is putting Smalltalk into the hands of thousands of young kids
- Cincom and Gemstone are stepping up to support Seaside in a big way
- Gemstone is offering the single-instance free commercial license and GLASS quickstart appliance
- Squeak's license is finally getting cleaned up
- Seaside is reaching a nice level of maturity
- Seaside running on GNU Smalltalk for those that want a command-line environment
- Croquet is maturing, even being adopted as a commercial "virtual meeting" space
- Ruby on Rails has reestablished dynamic languages as useful for the web"
miércoles, 19 de marzo de 2008
Como saber si te estas conviertiendo en un lider?, simple, lee este post
Si un psicólogo lee este post seguramente va a decir que estoy buscando justificar la "Locura" o "Utopía" que puede parecer Smallworks. Y tiene razón, pero quería compartir con todos los que nos leen algunas de las cosas que "Nos" diferencian a los lideres.
Se que si estas leyendo este post seguramente hay mucho de estas cualidades en forma de potencial dentro tuyo, solo tienes que dar ese paso que hace la diferencia.
Cualidades de un Líder
Un líder es motivado por la mejora, el cambio. No hay nada mas deprimente para un líder estar en ambiente en el que no exista la posibilidad de cambio. Esto lo mata. Si estas en esta situación y te sentís que se te va la vida.... ya tienes la primera cualidad de un líder.
Un líder esta motivado, tiene miedo al cambio como cualquier, pero tiene el valor de enfrentarlo... la necesidad del cambio es mayor que el miedo y las estructuras en las que vive. Esta necesidad lo lleva a ir mas allá de lo que nunca llego. Un líder digno de seguir es aquel que te guía a lugares donde nunca llegaste... y el tampoco. Un líder no espera a controlar su miedo, viaja con él
Un líder no es una persona que tiene una capacidad especial para ver las oportunidad o la inteligencia para pensar mejor las cosas, es una persona que tiene las mismas cualidades intelectuales y cognitivas que vos, solo que tiene el valor de arriesgar lo necesario en pos de la promesa de un cambio.
Un líder es precavido, y ahora me voy a para un poco, porque es común encontrar muchas malas interpretaciones sobre este punto. El líder se preocupa por las personas que lo siguen y los efectos de sus acciones, pero no deja que esto lo frene. Hay muchos que esconden el miedo en la "precaución". Por eso algunas diferencias entre precaución y miedo. (según Andy Stanley).
- La precaución es cerebral, el miedo es emocional.
- La precaución tiene origen en la información, el miedo tiene origen en la imaginación.
- El precavido calcula riesgos, el temeroso evita los riesgos.
- La precaución tiene como objetivo el éxito, el temor tiene como objetivo no fracasar.
- La precaución esta enfocada en el progreso, el temor estar enfocado en la protección de lo actual.
Como lideres nunca sabemos los reales efectos de nuestras acciones, dado que nuestras acciones y sus resultados empujan a muchos otros a seguir el mismo camino, destrozando las antiguas estructuras y preconceptos.
Por ejemplo en Smallworks creemos fervientemente en un nuevo modelo de negocio del software, además que la calidad y la pasión de las cosas que nos gustan pueden coexistir. Realmente no sabemos si nuestros aportes a la comunidad en materia de administración y/o desarrollo de software (espacialmente en la comunidad squeak) van a generar algún cambio, pero en estos humildes comienzos, nuestra experiencia esta motivando a nuestros amigos (algunos informáticos y otros no.) a seguir sus sueños.
No se si a Amazon se le ocurrió vender libros por internet... pero ellos fuero los que tuvieron el valor de comenzar algo nuevo.
Google no invento los buscadores, pero ellos fueron los que tuvieron el valor de convertir su buscador en el mejor y a raíz de esto el mercado informático ya no es el mismo.
Y por ultimo, una de las señales que te van asegurar que sos un líder en lo que estas haciendo, es que muchas, pero muchas personas te van a decir que lo que queres cambiar no esta bien, no es rentable, no es posible y los no que se te ocurran.
No lo hacen de mala onda, sino que son gente que tiene el ingrediente fundamental de un líder, el "Valor de enfrentar sus miedos".
También como líder te va a rodear gente "rara", fuera de lo común. Ustedes se imaginan como lo catalogaron a Alan Kay cuando definio la DynaBook, seguramente lo habran catalogado de "raro". No te asustes porque es generalmente esta gente la que tiene la capacidad de ver el cambio.
Claro hay que diferenciar a los "locos", que hay muchos por ahí sin ver la realidad, pero no te asusten los "raros", seguramente alguien dice de vos los mismo por tus espaldas.
En resumen un líder es aquel que termina siendo un factor de cambio para su medio.
Si queres un mundo mejor, empezá a crearlo.
Si queres un trabajo mejor, empezá a crearlo.
Si queres crear algo nuevo, no evites el miedo y las ansiedades.... Enfrentalos.
Es posible que el seguir tu visión te lleve a lugares que aun no están iluminados...pero no temas, acordate cuando eras chicos y tenias miedo a la oscuridad...con el tiempo el miedo se va. Con el cambio , la innovación y el liderazgo es lo mismo.
jueves, 13 de marzo de 2008
IMS..una de nuestras aplicaciones
Al principio no pensábamos publicar aquí los proyectos que ejecutamos, pero por un pedido de la gente que nos lee vamos a hacerlo.
IMS es una aplicación que desarrollamos para un correo privado, una empresa de servicios postales. Esta aplicación fue construida sobre Squeak, con Seaside y Glorp como ORM. La base de datos es un PostgreSQL. Antes de continuar quería aclarar que estamos usando base de datos a pedido del cliente, además esta base después alimenta otros sistemas y un cubo OLAP.
Es por lo antes dicho que elegimos hacer la persistencia sobre una base de datos, y no sobre la misma imagen o sobre un magma. (La verdad que se nos paso por la cabeza GEMSTONE, pero la billetera aprieta y el cliente no nos miro con buena cara cuando hablamos de esa inversión. )
Esta aplicación es una aplicación de gestión como cualquier ERP, pero enfocada al negocio del correo postal.
Aparte de la aplicación web desarrollamos un panel de control en Morphic, para que un administrador pueda ver el estado de la aplicación y pueda realizar algunas operaciones basicas. El know how que hay en el cliente es casí nulo, así que debimos dejarle todo cocinado y al alcance la mano, "APB" como se dice en Argentina.
Usamos Scriptaculous para facilitar la interacción con el usuarios. (drap & drop, ligthboxes, etc.), además de hacer el entorno mas agradable al usuarios.(por los efectos...)
Aunque en muchos casos tuvimos que hacer mix, entre Javascript y Smalltalk, el resultados es satisfactorio.
De estas necesidades de mix uno de nuestro socios, nuestro TVP, se le ocurrió que sería bueno desarrollar una librería de componente WEB con SWT y ST2JS, cosa que ya propuso a la comunidad de Seaside. Aunque la versión actual no tiene estos componentes, esta nueva idea abrirá muchas posibilidades y por eso no quería dejar e mensionarla. Sobre este tema seguramente mi socio escribirá un post en la medida de lo posible.
IMS maneja un volumen mensual de aproximado de quinientas mil (500.000) piezas y es utilizado por casi todo el personal de nuestro cliente, que son 600 personas.
Nuestro cliente tiene 5 sucursales, las cuales operan vía VPN sobre un único servidor que se encuentra hosteado en sus oficinas centrales. Este servidor es un windows 2003 (personalmente hubiera puesto otra cosa, pero es lo que hay.), El hardware es un Dell chiquito, (PowerEdgeTM 840) que cuesta al rededor de U$S 1000.
Esto muchos no lo dicen pero, el hecho que squeak y seaside utilicen muchisimos menos recursos que su competencia del mainstream, termina redundando en que hay que hace una menor inversión en hardware.
La aplicación mantendrá un historia del 5 años para todas las operaciones sobre las piezas que se entreguen.
La verdad que hasta el momento, estamos muy contentos con la respuesta que esta teniendo el sistema.
El cliente, que al principio, no con mucha confianza, nos acepto que hiciéramos el sistema en esta tecnología, a pesar todos los mitos que hay dando vuelta al redodor de Smalltalk, esta mas que satisfecho.
Por ultimo y para terminar quería remarcar que gracias a que esta aplicación este construida en smalltalk, ya con 2 meses en producción, termino siendo una diferencial de negocio importante, porque pudimos adaptar su aplicación a nuevas funcionalidades , en tiempo record.
miércoles, 12 de marzo de 2008
Whiteboard, historia
martes, 11 de marzo de 2008
Tips #2: La performance se encuentra buscando la raiz de las cosas
Hoy estaba desarrollando y me encontré con una verdad que termina siendo un tip.
Algo que amo de Smalltalk y especialmente de Squeak es que se puede acceder directamente hasta el core de las cosas.
En la búsqueda que nace de nuestra curiosidad natural de seres humanos, se llega al conocimiento de la implementación de cada cosa.
De esta manera pude mejora la performace de mi desarrollo.
tenía en mi código algo parecido a:
|temp|
temp:=aCollection collect[:aObject | aObject doSomeThing ]
^temp size
resulta que la implementación de size, es un contador que suma 1 por cada elemento de la colección.
|tally|
tally := 0.
self do: [:each | tally := tally + 1].
^tally
En una aplicación que no maneja muchos registros, esto sería una cosa trivial, pero en mi aplicación que maneja cientos de miles de registros (una aplicación de servicio postal) cambiar el código anterior por el siguiente, significo una diferencia como la que existe entre el día y la noche , porque recorro una sola vez la colección.
^aCollection
inject: 0 into: [:cuenta :aObject |
aObject doSomeThing.
cuenta:= cuenta + 1 ]
Esto solo fue posible, por lo menos para mi, por tener la posibilidad de ver la implementación de cada uno los elementos (Collection en este caso particular.)que componen la plataforma. Cosas que otros ambiente del mainstream no pasa y estas atado a "prueba y error" o búsquedas interminables (googlear todo el día).
Aunque suene redundante, Amo este ambiente y cada día entiendo menos porque no es adoptado como tecnología principal por mas gente.
PD: Aquellos que tiene miedo a la performance de Squeak, les cuento que esta aplicación comenzó desarrollándose en dot.net con nhibernate y postgreSql como DB. Después de pasado un mes de desarrollo decidí tirar todo y desarrollarla en Squeak , con Seaside y Glorp como ORM. Esto me dio la oportunidad de comparar la performance en una aplicación real y no benchmarks de laboratorio (dado que ya tenía desarrollado un modulo en .net ) con el mismo modelo y el mismo soporte de persistencia (la DB), comparativamente hay una mejora de performance del 30% a favor de Squeak. Se pueden sacar muchas conclusiones y buscar la raíz de esta mejora en distintas partes de la plataforma, pero lo concluyente y la principal diferencia que termina afectando la perfomance es la cultura de la gente que esta detrás de cada entorno. Ya sea por su gente o por las prueba empíricas, puedo afirmar que Squeak esta listo para competir de par a par con cualquier plataforma comercial del mainstream y salir victorioso con mejora sustanciales. Por lo cual no tema y tirense a la pileta que hay agua.
jueves, 6 de marzo de 2008
Un sueño
miércoles, 5 de marzo de 2008
Procesos
Una alegría para el alma
Hoy empecé el día con una buena noticia, seleccionaron mi tesis (la generación "Y" y su impacto en el mercado informático), como una de las mejores del 2007 y el poster de la misma en este momento esta expuesto en el salón central de la facultad (UADE).
El cuerpo de la tesis estará disponible aquí y la nota que fue publicada en la revista .Code sobre el tema puede verse aqui .
Bueno Solo quería compartir mi alegría con todo ustedes y agradecerles a todos los que me apoyaron durante este duro tiempo de investigación.
lunes, 3 de marzo de 2008
Smalltalk vs. la ignorancia
Cuando era niño jugaba una versión del Trivia (juego de mesa estilo parchís, pero con preguntas y respuestas) que tenía una particularidad: si nadie sabía la respuesta, avanzaba en el tablero una ficha, normalmente negra, apodada “la ignorancia”. Yo odiaba que esa ficha llegara antes que nosotros, me sentía un tonto que no sabía nada.
Bueno, hace un par de semanas ocurrió un episodio que me hizo recordar esa etapa de mi vida, quisiera compartirlas con ustedes:
En una de sus charlas de negocio, uno de mis socios quedó consternado por una de las preguntas que le hizo uno de los socios de la empresa con la que se habría la posibilidad de asociarnos.
La charla fue más o menos como se había planificado, hasta ese momento: se presentó de una forma más bien poco profunda (así estaba pensada) nuestra forma de trabajar y nuestras tecnologías preferidas, así como las ventajas que veíamos, al menos para empresas medianas (pues creemos que las empresas grandes tienen compromisos -no fundados en razones tecnológicas, la mayoría de las veces-, que les impiden moverse en diferentes direcciones a las establecidas por lo que llamamos “el mainstream”, la corriente principal, la moda.
Volviendo al tema, la charla iba mas o menos bien, hasta que uno de los presentes interrumpió a mi socio y sin más soltó la pregunta: “¿Además de las ventajas de productividad, por qué deberíamos ofrecerle al Banco Galicia una solución en Smalltalk y Seaside, en lugar de hacerlo en .Net?”. Mi socio se quedó con la boca abierta. Después de todo, la charla había empezado aclarando que veíamos nuestra solución más bien para empresas medianas, y el Banco Galicia claramente no entra en esa escala.
En consecuencia, mi socio no tuvo una respuesta satisfactoria (ni ninguna respuesta, bah).
Y no es que no tengamos una, simplemente no queríamos darla: nos propusimos desde el primer día no defender una tecnología haciendo comparaciones con otras, sino a través de la ponderación de sus propias cualidades. Creemos que con eso alcanza para convencer a aquellos que busquen realmente una solución viable para su negocio.
Bien, pese a eso, yo me quedé con una espina clavada... creo que hay muy buenas razones para que un banco (El Galicia o cualquiera) pueda escoger una solución basada en Smalltalk para su negocio, voy a exponer las primeras tres que se me vienen a la mente:
- El principal propósito de Smalltalk es la simulación del mundo real. Es un ambiente donde el modelado de sistemas sumamente complejos se hace mucho más fácil que en cualquier otro. No es que en otros lenguajes u otras formas de ver el desarrollo de software no lo permita, es simplemente que en Smalltalk es mas sencillo, mas “natural”.
- Programar en Smalltalk es altamente productivo. Puedo demostrarlo en cualquier momento, pero detenerme en este detalle sería perder el foco del post (una búsqueda en google de “smalltalk productivity” arrojará literalmente miles de resultados. Cualquier negocio (bancario o de cualquier tipo) puede beneficiarse de esto.
- Smalltalk se adapta con facilidad a los cambios constantes. Los sistemas bancarios son particularmente dinámicos y requieren adaptaciones frecuentemente, debido a cambios en la legislación (en nuestro país esto es cosa de todos los días), pero también a la adaptación a un mercado altamente competitivo.
Sin embargo, y pese a la cantidad de cualidades y casos de éxito que hay, siempre existen los que se niegan a considerar siquiera la posibilidad de utilizar Smalltalk o cualquier otro lenguaje dinámico, siempre con las mismas excusas:
Soporte
Bien, sobre esto... me genera bastante mal humor, siempre que lo dicen.
Una plataforma que cambia cada dos o tres años, y te fuerza a migrar cada vez a su nueva “solución”, no es soporte de calidad.
Una plataforma que crea algo totalmente distinto cada dos o tres años, y te fuerza a cambiar tu arquitectura para adaptarse a la nueva cosa, no es soporte de calidad.
Una plataforma donde los que te atienden son empleados de un callcenter que tienen un manual de instrucciones y no los creadores de la misma, no es soporte de calidad. Si encima tiene el soporte tercerizado en el tercer mundo (donde vivimos) y el soporte “de calidad” esta en el primero, es aún peor.
Productividad
Psé... ni siquiera vale la pena detenerse aquí. Ya se sabe lo que pasa con las soluciones pre-hechas: no están realmente pensadas para el negocio que las requiere, sino para casos generales. Los componentes son caros y además tienen el código cerrado, por lo que entran en el ciclo de soporte lamentable mencionado en el punto 1.
Además, sostener que Smalltalk no es productivo es simplemente no tener idea de lo que se habla.
Falta de desarrolladores
Este es un punto altamente cuestionable, sobre todo en Argentina, donde todas las carreras serias tienen formación en programación orientada a objetos y en Smalltalk.
¿Quien utiliza Smalltalk?
Por supuesto, los “casos de éxito” son importantes: nadie quiere arriesgarse a utilizar una herramienta sin que sea plenamente probada, y si bien es cuestionable en determinados ámbitos, es cierto que no se puede pedir a ningún negocio que tome un riesgo si no tiene una buena razón para hacerlo. Afortunadamente, hay empresas de primer linea mundial (y nacional) que utilizan Smalltalk para sus soluciones... y lo que es más importante, muchas de ellas lo hacen desde hace muchos años. Las siguientes empresas las encontré haciendo una investigación de 5’ con google, no son las únicas ni mucho menos, pero bastan como ejemplo: JPMorgan, Telecom, Repsol-YPF, Texas Instruments, Mercap SRL, Merrill Lynch, Swiss National Bank, y muchos más....
sábado, 1 de marzo de 2008
Diseñando (con CSS) aplicaciones web
Por supuesto, se supone que siempre debería ser así, que los programadores no deberían tener nada que ver con el diseño, que los diseñadores no deberían meterse con el código, que blablabla... pero todos los que tenemos alguna experiencia en el desarrollo de aplicaciones web sabemos que no es así nunca, que el diseño de las pantallas tiene repercusiones en el diseño de la aplicación y viceversa.
Bueno, esta tarea, con Seaside se hace bastante trivial (en realidad, con cualquier framework orientado a componentes debería ser posible, pero en particular con Seaside, por algunas características como la capacidad de agregar decorators dinámicamente).
Para probar esto, trabajé durante dos semanas sin consideraciones “artísticas”, pero con algunas decisiones importantes en el armado de los componentes.
Para que se vea cuan cierto es que no me fijé, pueden ver como se veía la aplicación hasta ayer a la tarde:
Le falta mucho, pero a pesar de lo poderosos que son los componentes de Seaside y el CSS2, yo sigo siendo un humilde programador, con un talento para hacer el look&feel de las aplicaciones tendiente a cero. Imagínense lo que un verdadero diseñador puede hacer.
Para que esto funcione, hay que desarrollar los componentes siguiendo un par de pautas:
En primer lugar, todos los componentes plausibles de ser tocados por CSS deberían estar englobados en un div. Resolví esto creando un decorator, que se le puede agregar a cada componente que lo requiera.
En segundo lugar, internamente, los componentes también deben estar divididos en secciones, demarcadas por otros tantos divs.
Por ejemplo, un componente tendrá esta forma:
initialize
super initialize.
self addDecoration: SWCustomizableDecoration new.
renderContentOn: html
html heading level1; with: 'Edición de subasta'.
html heading level2; with: 'Datos generales'.
html form: [
html div class: #data; with: [ self renderBasicOn: html ].
html div class: #sheets; with: pliegos.
html div class: #buttons; with: [ self renderButtonsOn: html ] ]