knocte :: MonoTema
It’s all about synchronization
Mayo 31st, 2009 - [Enlace local]
It's been a while since I first blogged about iFolder. At that time it was a bit unstable and I didn't have a good experience overall with it. Unfortunately the development of new features stopped, but there were a lot of fixes to improve its stability, which made into the version 3.7. Unfortunately again, this version was not released on the open, but now Novell has rectified and iFolder is
» Leer más, comentarios, etc...
Arragonán
“Manual de desarrollo web con Grails” en español
Mayo 31st, 2009 - [Enlace local]
El 28 de Mayo se puso a la venta el libro Manual de desarrollo web con Grails (en pdf) escrito por Nacho Brito, editor de groovy.org.es y uno de los pioneros de la comunidad hispana en la adopción de Grails para los desarrollos desde su empresa ImaginaWorks.
Quizás sea casualidad, pero poco a poco voy encontrando algunos programadores que están interesados en aprender o que ya están experimentando, me consta que alguna empresa lo ha empezado a utilizar en sus desarrollos y que en algunos proyectos de internet también se ha usado Grails (entre ellos Jobsket :P).
En mi opinión, la publicación del libro es una muestra más(y otro empujoncito más), de que poco a poco la comunidad Grails hispana está creciendo.
Yo ya tengo mi copia
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Recursos ADF 11g
Mayo 31st, 2009 - [Enlace local]
A
» Leer más, comentarios, etc...
The New Cult of Dead Cow » desarrollo
Consultas en phpORM
Mayo 30th, 2009 - [Enlace local]
Hace poco un amigo del trabajo me pidio que se incluyera busquedas en campos de texto en phpORM. Despues de reponerme del shock, le dije que eso esta incluido hace ufff.
Evidentemente faltaban mas ejemplos en la documentacion. Asi que ahora vamos a dejar algunos ejemplos de consultas en phpORM.
Para realizar una consulta en phpORM primero debemos generar un ORMCollection, esto se logra llamando el metodo getAll().
$obj = new Alumno();
$col = $obj->getAll();
En este punto, ya disponemos de un objeto ORMCollection en la variable $col. Sin embargo, este objeto nos traera toda la informacion disponible y en la mayoria de los casos eso no es deseable. Asi que nosotros podemos incluirle filtros.
La manera mas sencilla de hacerlo es mediante los metodos whereAnd y whereOr. De esta manera podemos incluir en nuestra consulta multiples reglas aunque todas estaran a un mismo nivel. Si se desea se puede crear condiciones anidadas, pero para eso se debera utilizar ORMCondition de manera explicita.
Por ejemplo, si queremos a todos los alumnos con el estado matriculado en 1.
$col->whereAnd(”matriculado = “,1);
Cuando uno genera una condicion para la consulta esta siempre se compone de dos partes. La clave y el valor de la condicion. La clave es un combinado entre el campo a consultar y el operador logico con el cual se va a realizar. En este caso el campo es matriculado y el operador es el =.
Por ejemplo si desamos buscar un alumno por apellido.
$col->whereAnd(”apellido like “,”%hitt%”);
En este ejemplo, se busca en el campo apellido con el operador like cualquier coincidencia con la palabra hitt.
Si desearamos buscar en un conjunto de datos por ejemplo podriamos usar la siguiente expresion
$col->whereAnd(”edad in “,array(12,13,14));
En esta consulta, phpORM nos buscara los alumnos cuyas edades esten entre los 12 y 14 años.
O podriamos desear buscar a los alumnos que nacieron en el mes de junio del 1990.
$col->whereAnd(”fecnac between “,array(”1/05/1990″,”30/05/1990″);
Esta es la forma simplificada de realizar consultas en phpORM, si desean mayor complejidad en las condiciones pueden usar ORMCondition.
Saludos
NOTA: Este articulo es valido para phpORM-2.3.2
Tambien te puede interesar
» Leer más, comentarios, etc...
HardBit
Nuevo inicio
Mayo 30th, 2009 - [Enlace local]
Bien, tiene rato que no posteo y esta vez no sera tecnico, solo para mencionar que dejo mi empleo en Eviciti y me inicio en una nueva aventura (jojojo) en emlink, confio en que me ira bien y por supuesto seguire manteniendo este blog.
» Leer más, comentarios, etc...
The New Cult of Dead Cow » desarrollo
phpORM con soporte condicional completo
Mayo 29th, 2009 - [Enlace local]
Ya he terminado el soporte de phpORM para condiciones complejas en el Where, y de paso arregle un bug en el WhereOr.
El nuevo modelo incluye el uso de la clase ORMCondition, la cual se encarga de generar la estructura de arbol para las condiciones.
Por ejemplo, este seria un codigo de ejemplo en el uso de la nueva funcionalidad de phpORM
include_once(”models/boleto.php”);
ORMBase::debug(true);
$boleto = new Boleto();
$boleto->getAll()->WhereCondition(”reserva =”,0)->getArray();
$boleto->getAll()->WhereCondition(new ORMCondition(”reserva =”,0))->getArray();
$cond = new ORMCondition(”reserva =”,0);
$cond->orCondition(”TarjetaCorreo = “,”necudeco@necudeco.com”);
$boleto->getAll()->WhereCondition($cond)->getArray();
$cond->andCondition(”fechaCompra between”,array(”12/02/2008″,”12/03/2009″));
$cond->orCondition(”reserva in”,array(0,1,2));
$boleto->getAll()->WhereCondition($cond)->getArray();
?>
Como veran, ahora el sistema implementa el uso de la funcion WhereCondition, para especificar la o las condiciones de la busqueda.
El criterio tomando para desarrollar esta nueva funcionalidad, se basa en la recursividad. Toda consulta puede tener una o ninguna condicion, no mas.
Sin embargo toda condicion puede estar compuesta por otras condiciones.
Para mantener la compatiblidad con los sistemas ya desarrollados y tambien para mantener la simplicidad, las funciones WhereAnd y WhereOr seguiran existiendo,
$boleto->getAll()
->WhereAnd(”reserva =”,0)
->WhereOr(”reserva =”,1)
->getArray();
?>
pero internamente usaran la funcionalidad de ORMCondition.
Asi mismo se reparo un bug en WhereOR que efectuaba una mala consulta.
Tambien se actualizo la version de adodb que sirve como base para phpORM.
En la proxima semana, estaremos incluyendo nuevas mejoras. Espero sus correcciones y sugerencias.
Descarga phpORM-2.3.2
Saludos
Tambien te puede interesar
» Leer más, comentarios, etc...
programania
Tendencias en el desarrollo de software 2009
Mayo 29th, 2009 - [Enlace local]
He estado leyendo unos cuantos artículos sobre tendencias en desarrollo de software en 2009 y sí, me voy a permitir hacer un artículo cuando ya estamos en Junio, con lo que espero que quede claro que no pretendo ir de gurú del software ni nada por el estilo. Sólo me gustaría compartir mis impresiones a ver qué os parecen. Como siempre, me quedaré a la espera de lo que opinéis en los comentarios.
- Evolución de Wordpress hasta convertirse en un CMS completo, más allá de ser una estupenda plataforma de blogging.
- Mirando a Google y a sus APIS: cada vez menos uso de SOAP y más de REST. Desarrollo de aplicaciones web utilizando AJAX al máximo (frente al uso de Flex, Silverlight, JavaFX u otras RIA´s), lenguajes de scripting como python o ruby frente al uso de Java o .NET. Aplicaciones web que se actualizan casi en tiempo real como gMail o Friendfeed.
- Entre el uso de AJAX y de librerías como jQuery que sirven ya para un montón de situaciones relacionadas con la interfaz de usuario, el conocimiento profundo de javascript es esencial.
- Al hilo del punto anterior, dominar los lenguajes de backend como PHP, Java o .NET pierden importancia frente al dominio de API´s como Google Maps, Facebook Connect o conocimientos independientes del lenguaje como accesibilidad web, posicionamiento en buscadores, etc…
- Estandarización del patrón MVC como arquitectura básica de aplicaciones web, incluso en ASP.NET …. y la inyección de dependencias como forma básico de construir API´s (aunque ahora se usa más el nombre de DSL).
- Fusión entre lenguajes imperativos y funcionales. Instrucciones más declarativas. Hay incluso quien afirma que Java y C++ están muertos y van a ser sustituidos por Scala o Jython, porque permiten desarrollar código a más “alto nivel”. La programación funcional ofrece alternativas para reutilizar código que, en algunos casos, pueden sustituir a la orientación a objetos.
- SCRUM como forma de gestión de equipos y funcionalidades. Fracaso de RUP aunque no de UML. Por fin la Ingeniería del software tiene sus propios métodos, y no copia malas ideas de otras ingenierías alcanzando mayor madurez.
- Al hilo del punto 4, afloran en las dos principales plataformas de desarrollo, JAVA y .NET, la posibilidad de utilizar lenguajes de scripting, sobre todo para la capa de presentación.
Y, por último, dejo un par de artículos interesantes sobre el tema:
- La InfoQ publicó un artículo que iba en ésta dirección y que hablaba de tendencias como el uso de lenguajes dinámicos y funcionales, Saas y Cloud Computing, bases de datos no relacionales, virtualización, etc….
- Tech Republic publicó otro artículo donde también hablaba del crecimiento de los lenguajes dinámicos o funcionales, métodos ágiles, RIA, etc…
» Leer más, comentarios, etc...
MonoCaffe
Muerte al eBook (Actualizado)
Mayo 29th, 2009 - [Enlace local]
Me encanta el hardware del OLPC, sobre todo la pantalla que utiliza.

Esta pantalla está siendo desarrollada de manera particular por una empresa llamada Pixel Qi y hoy han afirmado que dentro de pocos meses, empezarán a surgir en el mercado netbooks con estas pantallas. Así que en menos de tres años, una tecnología que no ha sabido explotar el mercado ya ha quedado obsoleta.
Estas pantallas son especiales, porque tienen dos modos: uno LCD durante el cual la luz de fondo de la pantalla está funcionando, como cualquier pantalla normal y corriente. El segundo modo, apaga la luz de fondo y permite que la pantalla funcione como las famosas eInk, aunque con una menor resolución.
Seamos prácticos, un netbook, por precio y prestaciones le da cuatro patadas a un eBook. Una AA1 con la pantalla:
Via Engadget
Actualización
Aquí os dejo un vídeo de comparación entre las pantallas Pixel Qi, el Kindle, un Toshiba R600 y un TabletPC
» Leer más, comentarios, etc...
PROGRAMANDO EN .NET
Truco rápido: Histórico de cambios en una tabla usando un trigger
Mayo 29th, 2009 - [Enlace local]
No me voy a enrollar explicando que es un trigger ni para que sirve, tenéis información de sobra en este link: CREATE TRIGGER (Transact-SQL) Lo que voy a explicar aquí es como usar un trigger para que nos guarde en una tabla de históricos los cambios (INSERT y UPDATE) que se producen en una tabla. Para ello supongamos que tenemos una tabla con un identificador (campo Id) y un nombre (campo nombre
» Leer más, comentarios, etc...
Blog de Julio César Pérez Arques
Cuando la crisis golpea una consultora IT
Mayo 29th, 2009 - [Enlace local]
Estaba cantado. La crisis ha llegado a nuestro sector. Va a quedarse y va a hacer daño. Ha tardado lo justo en que las empresas del resto de sectores ya en crisis se han recortado su presupuesto en proyectos IT, tanto nuevos como de mantenimiento. El resultado (previsible) es que el modelo de negocio de las grandes consultoras IT no se sostiene y no se sabe adaptar a la nueva situación.
Son ya muchos años explotando un modelo de servicios desde un punto de vista basado unicamente en los números a corto plazo. Sin importar mucho más. Tecnología, conocimiento, proyectos, trabajadores o clientes. Son mentes financieras las que mueven los hilos al más alto nivel. Para ellas, el negocio IT no es muy diferente de cualquier otro, como podría ser el de las máquinas expendedoras.
Modelo de negocio Máquina expendedora
Existe una necesidad: el código. Y las consultoras hacen negocio con máquinas expendedoras de código. El código es un bien caro y se genera directamente dentro de las máquinas. Sin necesidad de comprar ninguna materia prima.Que un cliente necesita código, pues negocias cúantas máquinas de cada tipo le pones, por cúanto tiempo y, ala, a facturar.
Las máquinas no tienen coste inicial, sólo de mantenimiento (salario) pero tampoco es que sea mucho. Como cualquier coste, se intenta reducir al máximo. No tiene mucha más preocupación. La prueba está en que existe una generalizada inversión de salario, donde no siempre a una máquina que aporta mayor valor le corresponde un mayor coste (salario).
Las instalaciones tampoco es que sean excesivamente costosas (luz, agua, ordenadores, internet,...) o amplias, ni necesiten estar estrategicamente situadas. Además, con suerte, al cliente le da por tener las máquinas en sus propias instalaciones, por lo que es un gasto menos.
En realidad no hace falta un modelo de negocio muy sofisticado. Ya es un negocio por si solo!
Últimamente estaban teniendo el doble problema de que se iban demasiadas máquinas y que además habia escasez de nuevas máquinas. La solución (muy finaciera) ha sido (1) adquirir máquinas que no son expendedoras de código pero pueden pasar por ellas (o al menos se lo parece), (2) importar o usar máquinas de otros paises y (3) subcontratar a otras consultoras más pequeñas y baratas. En realidad nada grave que requiera cambiar el modelo.
El golpe
El modelo era un éxito. Los records de facturación se han ido sucediendo año tras año. Hasta ahora. Al caer la economía de los grandes clientes de código, las consultoras se encuentran con excedentes de máquinas, los beneficios han caido y los objetivos se alejan.Las primeras medidas
Una vez más, se toman medidas desde un punto de vista financiero. Dejar de contar con ese excedente de máquinas no es caro, mientras no sean muchas. Además las máquinas, de siempre, ni se quejan en exceso ni hacen mucho ruido. Así que no llevamos ni medio año de efecto crisis y ya asoman los primeros EREs. Y los que no se han dado ya es por no perder cotización en bolsa.Otras medidas a tomar, igual de rápidas que de injustas, son:
- Congelación de sueldos. El año pasado batiste record de facturación y se te paga congelándote el sueldo...
- Invitaciones al personal en available para tomarse unas vacaciones sin sueldo aunque cotizando.
- Reducción de la jornada laboral.
- Reducir el número de días de vacaciones. Claro, todo el mundo sabe que aumentando en número de horas trabajadas, aumentas la productividad. Ésto último era puro sarcasmo.
Alternativas
Se echa en falta un poco de imaginación y de conocimiento del sector. ¿Por qué no hacer?- Formación. Se puede impartir y recibir cursos en vivo u online. Personal más preparado sí es igual a mayor productividad.
- Investigación. Se puede investigar y evaluar nuevas tecnologías, herramientas y metodologías que permitan un verdadero aumento de la productividad.
- Desarrollo de productos. Para posteriormente intentar su venta. Vender productos no genera un beneficio tan inmediato como vender servicios porque primero hay que desarrollar el producto, pero da dinero y prestigio.
- Desarrollo de aplicaciones internas. Ya se sabe que en casa de herrero, cuchillo de palo, así que seguro que las aplicaciones internas son más que mejorables. Mejores aplicaciones intenas también mejora la productividad.
- Incrementar la dotación en los proyectos activos. Ésto supone perder dinero o ganar menos en estos proyectos, pero seguro que incrementaremos la satisfacción del cliente y nuestras opciones para obtener nuevos proyectos con él.
- Dar soporte a compañeros de otros equipos. Pocas veces eres el primero en resolver un problema, en vez de preguntar a Google o probar por probar, por qué no preguntar a un compañero de otro equipo.
- ¿Colaborar en proyectos open-source de los que tu empresa se lleva lucrando años? Ja, que me da la risa...
Futuro
La vida son ciclos. Al final la crisis se irá. Algunos habrán caido, otros se habrán mantenido a flote y los más preparados habrán crecido. Pero, ¿habremos aprendido algo?» Leer más, comentarios, etc...
Picando Código
Disponible revista Linux+ DVD junio 2009
Mayo 29th, 2009 - [Enlace local]
Linux+ 6/2009 (55) - Este número viene cargado con información del tema que viene llamando la atención de todos: “La nube”.

Linux + DVD Junio 2009
El tema central de este número es Cloud Computing
En el DVD adjunto encontraréis:
# CentOS 5.3
Community Enterprise Operating System, distribución basada en Red Hat Enterprise Linux
Versión 32 bit, bootable
# EyeOS
Cloud Computing Operating System
Versión 32 bit
# Bit Defender Antivirus Scanner for Unices
Una versátil solución antivirus bajo demanda diseñada para sistemas Linux y FreeBSD
También podréis leer los siguientes artículos:
Cloud Computing
¿Gran oportunidad para Linux?
EyeOS
Cloud Computing Operating System
Programación en Gambas
Creación de FrontEnds
Seguridad de datos
¿Cómo garantizar la privacidad de nuestra información?
Máquinas virtuales
Nos adentramos al mundo virtual
Aplicaciones de Internet Enriquecidas
Programando RIA con FLEX y AMFPHP
y otros…
http://www.lpmagazine.org/prt/view/pag-prin/issue/1031.html
» Leer más, comentarios, etc...
Cerebro en la Sombra » Técnico
Patrón singleton con herencia en PHP
Mayo 28th, 2009 - [Enlace local]
Pensaba que sería más sencillo. Me he tirado varios días hasta conseguir que todo funcione correctamente.
La idea es implementar el siguiente diagrama diseñado con ArgoUML:
Es decir, una clase base de la que heredan otras.
El escenario consiste en distintos webservices a los que tengo que llamar dentro de la aplicación. Lo que he hecho ha sido mapear cada webservice con una clase que contenga los mismos métodos que el webservice, de manera que lo que haya que hacer contra los webservice se haga contra clases del mismo nombre y con los mismos métodos devolviendo directamente la información devuelta.
Desde el principio planteé que las clases de los webservices extendiesen de una clase base que tuviese la funcionalidad común de todos, es decir, las llamadas a los webservices y el control de errores de los mismos, así evitaría duplicar esta funcionalidad en cada clase.
Posteriormente decidí que cada clase debía implementar el patrón singleton para asegurar que sólo hubiese una instancia de la misma clase en cada momento y evitar así que el código se viciase instanciando una nueva cada vez que se necesita.
La solución global era, por tanto, aplicar el singleton a la clase padre y que todas las que extendiesen de ésa tuviesen automáticamente el singleton y no tener que implementarlo en cada una de ellas. Idealmente es bonito, la práctica fue bastante peor.
La primera prueba fue declarar el método getInstancia encargado de asegurar el singleton de este modo:
-
-
{
-
$returnValue = null;
-
$class = _CLASS_;
-
self::$instancia = new $class($asurl);
-
}
-
$returnValue=self::$instancia;
-
return $returnValue;
-
}
Se suponía que haciéndolo así se crearía, en caso de no existir, una nueva instancia del objeto que fue llamado, en nuestro caso, por ejemplo, Clase1. Sin embargo al comenzar las pruebas nos dimos cuenta que _CLASS_ no devuelve el nombre de la clase a la que se llama sino el de la clase sobre la que se ejecuta, en este caso Base, con lo cual no nos servía para nuestro propósito.
A continuación encontramos una función de PHP que nos devuelve lo que nosotros necesitamos, es decir, el nombre de la clase llamada: get_called_class. Lástima que esté disponible a partir de PHP 5.3 (en beta). Aún así encontramos una implementación alternativa de esta función válida para versiones anteriores de PHP.
-
function get_called_class(){
-
return $matches[1];
-
}
-
}
Con esto ya podíamos crear la instancia de la clase que necesitábamos desde el singleton, pero nos aguardaba aún una sorpresa. No podíamos instanciar más de una clase (distinta) de las que heredan de un mismo padre, a pesar de ser distintos objetos asume que al heredar del mismo tiene que utilizar la misma instancia del singleton y no te deja, ya que instancia (la variable del código anterior) ya está generada y es de otro tipo.
Pongamos un ejemplo para verlo mejor. Creamos una instancia de Clase1, el singleton nos devolverá una nueva instancia ya que no existe. Ahora creamos otra de Clase2. El objeto devuelto es de tipo Clase1. Aunque nosotros queremos crear objetos distintos (Clase1 y Clase2), la instancia de Base es compartida por ambos. Como ya he instanciado Clase1, instancia es de tipo Clase1, con lo que al instanciar Clase2 te devuelve la instancia ya creada, Clase1. Podríamos comprobar que instancia (la variable) esté creada y sea del mismo tipo que la nueva que se quiere instanciar, pero al crear la nueva (Clase2) destruiríamos la antigua (Clase1) con lo que perderíamos este objeto, y eso no es lo que se busca.
¿La solución? Parecerá algo cutre, pero es esta:
Base
-
class osusnet_com_Base
-
{
-
private $asurl = ”;
-
private $iVersion = null;
-
private $sAsConsumer = ”;
-
private $debug = 0;
-
protected function __construct($asurl)
-
{
-
if($asurl==""){
-
return false;
-
}else{
-
$this->asurl=$asurl;
-
$this->iVersion=1;
-
$this->sAsConsumer="kk";
-
$this->debug=0;
-
}
-
}
-
-
{
-
$returnValue = null;
-
$class = get_called_class();
-
self::$instancia[$class] = new $class($asurl);
-
$returnValue=self::$instancia[$class];
-
}
-
return $returnValue;
-
}
-
}
Clase1
-
class osusnet_com_Clase1 extends osusnet_com_Base
-
{
-
public function GetUserContext($cookie)
-
{
-
}
-
public function CheckStateUser()
-
{
-
}
-
public function LogIn()
-
{
-
}
-
}
Es decir, instancia (la variable) pasa a ser un array donde guardaremos un elemento para cada instancia de cada una de las clases que lo heredan. Si buscamos un tipo ya creado nos devolverá esa instancia, en caso contrario la crea y la deja disponible para posteriores instancias. La base es única pero se crea un objeto de cada clase disponible.
Como cualquier patrón singleton, para usarlo debemos hacer:
-
$instancia = osusnet_com_Clase1::getInstancia($url);
Recuerda que el constructor está protegido con lo cual cualquier intento de querer instanciar una clase de estas directamente dará error, prueba a hacer:
-
$instancia=new osusnet_com_Clase1();
No se cual será el comportamiento en otros lenguajes, mis años de Java quedan ya algo atrás, ni siquiera se si la teoría de POO es el comportamiento aquí descrito o es una mala implementación de PHP, no soy un experto en la teoria de la programación orientada a objetos. A mi la lógica me dice que si instancias una clase de un tipo, te debería instanciar todo, sin compartir la clase base, aunque igual también tiene sentido que si todas extienden de Base y ésta tiene el singleton donde instancia y getInstancia son estáticos, sea común a todas. Cuando más lo pienso más me lío.
Al menos encontré una solución.
» Leer más, comentarios, etc...
xailer.info (esp)
Nueva versión de xaDbu con importantes descuentos
Mayo 28th, 2009 - [Enlace local]
Estimados usuarios de Xailer,
Ya está disponible una nueva versión de xaDbu con una importante reducción de su precio que pasa a ser de sólo 30 euros.
Aparte de subsanarse pequeños errores que tenía la anterior versión, esta nueva versión corrige un problema de uso de la versión demo con Windows Vista, incorpora un sistema de autoescalado de formularios cuando se utilizan fuentes grandes en la configuración de Windows y se han incluido nuevas opciones para poder mover físicamente registros hacia arriba o abajo.
Podéis descargar xaDbu desde el siguiente enlace:
www.xailer.com/files/xadbu.exe
Un cordial saludo,
El equipo de Xailer
» Leer más, comentarios, etc...
MadeInFlex
Fx4+Fc 2009 Global AUG Tour (update II)
Mayo 28th, 2009 - [Enlace local]
Debido al mal funcionamiento aleatorio que presenta el formulario de registro para el evento 2009 AUG tour en groups.adobe.com hemos decidido habilitar un sistema de registro alternativo para que nadie se quede fuera.
El proceso es el siguiente:
- Intentar registrarse a través de groups.adobe.com
- Si el sistema de groups.adobe.com no os permite acceder y completar el registro simplemente añadir un comentario en este post
Con esto se os garantiza el acceso (siempre que queden plazas disponibles).
Finalmente pediros disculpas por las molestias ocasionadas y deciros que Adobe está al tanto del problema y está trabajando para solucionarlo.
» Leer más, comentarios, etc...
Picando Código
Soy Certified Scrum Master
Mayo 28th, 2009 - [Enlace local]
Los días 14 y 15 de mayo de 2009 tuvo lugar en Montevideo-Uruguay el primer curso de Certificación Internacional de la Scrum Alliance. Fué organizado por la empresa AQuA.it
A partir de este evento hay 24 Scrum Master Certified, aprovechamos para felicitar a cada uno de ellos, son los primeras personas que pudieron obtener esta certificación en nuestro país.

Fernando Briano - Certified Scrum Master
Hace tiempo que no publicaba nada en el blog. No es que lo tenga abandonado, pero cada vez tengo menos tiempo. Esto se debe a los proyectos en los que estoy involucrado este año. De todas formas, aprovecho para comentarles que me certifiqué como Scrum Master. Scrum es una metodología de desarrollo ágil (no solo orientado al desarrollo de software, sino a proyectos en general).
Estoy empezando a implementar Scrum en el trabajo, y en el proyecto final de carrera. Aprendí mucho, y me convencí de las ventajas de la metodología. Como me sugirieron en foro agiles, voy a llevar una bitácora de lo que vaya implementando y aprendiendo en Scrum. Ya publicaré por acá las novedades.
» Leer más, comentarios, etc...
MonoCaffe
Siempre a mano: Guake y Yakuake
Mayo 28th, 2009 - [Enlace local]
No lo neguemos, la aplicación más importante en todo sistema GNU/Linux es la terminal. Guake, Yakuake llevan la idea de las consolas de los FPS a nuestro escritorio. Las dos son similares, excepto que la primera es para Gnome y la segunda para KDE. La premisa de las dos es la misma, tener siempre a mano una terminal, sin la necesidad de utilizar el ratón para buscar en el menú y pulsar el icono. Con pulsar alguna de las teclas designadas, aparecerá en la parte superior del escritorio, una terminal que además estará siempre por encima y en todos los escritorios virtuales.
Guake
Después de instalar Guake e iniciarlo, nos aparecerá un mensaje para informarnos de cual tecla debemos pulsar para poder mostrar la terminal y un icono en la zona de notificaciones de Guake desde el que podremos encontrar un menú con la opción de preferencias.

Estas se reducen a cuestiones visuales como el tamaño, transparencia, fuente y posición de las pestañas. Lo más importante, es poder configurar la tecla de acceso que vamos a utilizar. Por defecto es F12 pero ésta se encuentra un tanto alejada, por lo que recomiendo utilizar F1.

Yakuake
Yakuake es similar, aunque utiliza Qt, por lo que es más recomendable para funcionar en KDE.

Tiene algunas opciones para configurar la animación que se produce al mostrar la terminal, pero funcionan de forma similar.

Extra: Tilda
Funciona de forma similar a los dos anteriores: pulsa una tecla y una terminal aparecerá. Lo que hace a Tilda especial, es la posibilidad de modificar a discreción la posición y tamaño de la terminal que se muestra,

Sólo he tenido problemas con Tilda ya que al activar la transparencia del fondo, no se veía lo que escribía en el prompt y al dibujarse en pantalla ha sido un poco lento.
Estas aplicaciones ofrecen una funcionalidad muy interesante, ya que se reduce notablemente el tiempo que pasamos buscando una terminal ya abierta en algún escritorio virtual y dentro del mismo escritorio. Por otra parte, si tenéis un ordenador que vaya justo o muchas aplicaciones de peso funcionando, os recomiendo utilizar otra terminal tradicional y una de estas como complemento.
» Leer más, comentarios, etc...
PROGRAMANDO EN .NET
Cambio de aires
Mayo 27th, 2009 - [Enlace local]
Dicen que estamos en crisis y que es mal momento para encontrar trabajo ... igual es que yo tengo suerte porque hace un par de semanas que me he cambiado de empresa :DHe dejado un cliente final (en el que se vivía muy bien) para volver al fascinante mundo de la consultoría, por ahora en un muy buen proyecto (del que os aburriréis de oir hablar) y con un grupo majo de personas para currar :)A los
» Leer más, comentarios, etc...
programania
¿Está UML muerto? ¿y RUP? Pequeña encuesta
Mayo 27th, 2009 - [Enlace local]
Cuando estudié UML en la universidad parecía la panacea. Un salto cualitativo en el desarrollo de software que iba a dejar a la programación clásica a la altura del betún. Sin embargo, rara es la vez que lo utilizo, aunque sea para hacer algunos esquemas. UML prometía varias cosas:
- Convertirse en un lenguaje común por el que pasar especificaciones de programas entre programadores.
- A partir de los diagramas generados, “pulsar un botón” y generar el código de tu aplicación.
- A partir del código, “pulsar un botón” y generar la documentación de tu aplicación en UML.
Sin embargo, por mucho que indago me quedan las siguientes sensaciones:
- No existen herramientas eficaces que permitan generar código útil a partir de diagramas.
- Las que existen, se centran en el Modelo de dominio (que no es poco), pero desde luego no hay nada que coja un caso de uso, y lo convierta en código….
- Especificar lo suficiente un diagrama UML para poder generar código medianamente definido es un infierno. Da la sensación de que se tarda menos en programarlo.
- El UML puede servir para transmitir ideas informales entre programadores (esquemas rápidos) pero nunca servirán para transmitir esas ideas a un cliente profano en el tema. Y como la documentación para el cliente es totalmente inevitable, vale más la pena que los programadores se entiendan leyendo la documentación que también es para el cliente (SCRUM y su Product Backlog, por ejemplo).
- ¿Por qué a la gente le gusta tan poco codificar y tanto hacer dibujitos?
Y, por último, una serie de preguntas, a ver quién me arroja algo de luz:
- ¿En qué escenarios utilizáis UML? ¿Utilizáis UML?
- ¿Es un UML totalmente especificado o sólo un esquema?
- ¿Utilizáis alguna herramienta que genere código a partir de UML?
- ¿Y alguna de reverse engineering que a partir del código genere documentación?
- ¿Alguien utiliza RUP (Rationa Unified Process), que supuestamente es la metodología alrededor del UML, junto con UML?
- ¿Alguien combina UML con alguna metodología ágil como SCRUM? ¿Se puede ser ágil diagramando con UML?
Gracias adelantadas a el lector que se anime a comentar un poco el tema…
» Leer más, comentarios, etc...
Yet Another Programming Weblog
memcpy y la concurrencia
Mayo 26th, 2009 - [Enlace local]
Si el otro día comentaban en barrapunto que en MS marcaban como peligroso el uso de memcpy hoy podemos encontrar otra razón para usarlo con precaución. En memcpy() concurrency curiosities David Dice habla de un comportamiento antiintuitivo de dicha función que sale a la luz en entornos fuertemente concurrentes: sobreescribir la misma secuencia constante en memoria puede tener valores no válidos temporalmente durante su llamada, leídos por otros threads con resultado catastrófico si no se tiene cuidado. Otro caso más en el que las abstracciones que usamos evolucionan a su manera, quizás con explicación pero con resultados que contradicen la intuición y exigen, a veces, conocer que se cuece allá abajo. (No mucho) más en reddit
La misma entrada y más comentarios en memcpy y la concurrencia en barrapunto
» Leer más, comentarios, etc...
4 bits blog
Compartir impresoras con Samba
Mayo 26th, 2009 - [Enlace local]
Estos días en el trabajo me ha tocado lidiar con la configuración de un servidor que tenemos para almacenamiento e impresión, con sus directorios compartidos e impresora compartida.
Hasta hace poco este servidor utilizaba Windows 2003, hasta que un día decidió morir en extrañas circunstancias, así que como los que nos encargamos de dicho servidor nos manejamos mejor en Linux decidimos instalar Debian Lenny y utilizar Samba para los directorios compartidos y la impresora compartida, ya que en nuestra red tenemos variedad de Windows y Linux.
Instrucciones
Hay que tener instalado CUPS. Una vez instalado, realizar los siguientes pasos para configurar CUPS:
- Añadir la siguiente línea al archivo
/etc/cups/cupsd.conf, suponiendo que nuestra red sea 192.168.0.0/255.255.255.0:
Allow From 192.168.0.* - Descomentar la siguiente línea del archivo
/etc/cups/mime.convs:
application/octet-stream application/vnd.cups-raw 0 -
De este modo, CUPS permitirá compartir remotamente la impresora. Ahora hay que configurar Samba para que las máquinas con Windows puedan usar la impresora, así que a seguir los siguientes pasos:
Editar el archivo /etc/samba/smb.conf de modo que quede como similar a este que muestro:
[global] workgroup = GRUPO-DE-TRABAJO netbios name = NOMBRE-NETBIOS-MAQUINA #this section is only to share the printer printcap name = cups disable spoolss = yes show add printer wizard = no printing = cups [printers] comment = Printer in Linux path = /var/spool/samba guest ok = yes print ok = yes use client driver = yes browseable = no
El directorio /var/spool/samba se debe crear si no existe y tener permisos 0777.
Con esta configuración se comparte la impresora sin necesidad de autenticarse, ya que el nivel de seguridad lo permite (security = share) y se permite autenticarse como invitado (guest ok = yes). El elemento printers permite que samba comparta automáticamente todas las impresoras conectadas con las propiedades que se le indiquen en dicho elemento.
Si se quisiera obligar a autenticarse para poder usar la impresora, habría que añadir un usuario a samba ejecutando:
# smbpasswd -a usuario
Y cambiando el nivel de seguridad (con quitar la propiedad security valdría) y no permitiendo la autenticación como invitado (guest ok = no).
Para finalizar, sólo habría que reiniciar CUPS y Samba:
# /etc/init.d/cups restart # /etc/init.d/samba restart
Basado en Sharing a printer to XP clients with Samba and Cups de Debian Administration (en inglés).
» Leer más, comentarios, etc...
xailer.info (esp)
Nueva versión de xEdit
Mayo 26th, 2009 - [Enlace local]
Estimados usuarios de xailer y xBase en general,
Tenemos el gusto de presentaros una nueva versión de xEdit, nuestro entorno de desarrollo gratuito para Harbour y xHarbour. Esta nueva versión trae importantísimas novedades como son el soporte de nuevos compiladores para nuestros proyectos Harbour o Harbour. Actualmente ya soportamos los siguientes:
- Borland C++
- MinGW
- Pelles C
Debido a la inclusión de estos nuevos compiladores se ha realizado un completo cambio del sistema de ‘entornos de programación’ que tenía la versión anterior xEdit, de forma que ahora es muchísimo más sencilla la configuración de entornos y además es posible trabajar con varias versiones de Harbour o xHarbour al mismo tiempo. Con la nueva versión es posible que un proyecto se desarrolle con una versión antigua de xHarbour y otro poryecto con la versión más novedosa del mismo compilador.
Otras novedades importante de esta nueva versión es la posibilidad de comprimir con UPX el ejecutable final de forma completamente automática.
El editor también ha sido mejorado incluyendo una funcionalidad que seguramente será muy bien recibida por muchos de vosotros que consiste en que se marquen las líneas de texto nuevas o que han sido modificadas. Una imagen vale más que mil palabras:

En el anterior artículo publicado por José Giménez acerca de los compiladores de C podréis encontrar más información acerca del nuevo xEdit.
Podéis descargar la nueva versión de xEdit desde la siguiente dirección:
www.xailer.com/files/xeditsetup.exe
Un cordial saludo,
El equipo de Xailer
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Desarrollar Java en Ubuntu
Mayo 23rd, 2009 - [Enlace local]
A
» Leer más, comentarios, etc...
programania
Inyección de dependencias y PHP: la necesidad de un container
Mayo 22nd, 2009 - [Enlace local]
Fabien Potencier escribe una serie de artículos sobre la implementación de un container para hacer inyección de dependencias en PHP. A poco que se haya trabajado con inyección de dependencias en PHP, como por ejemplo en mi caso con el Zend Framework, uno se da cuenta de que las ventajas de éste patrón pueden ser muchas, pero construir una clase puede convertirse en un auténtico infierno.
Si éste artículo te interesa pero no tienes muy claro qué es la inyección de dependencias, qué ventajas tiene y qué es un container, ataca a éste artículo de Martin Fowler y a éste sobre Zend Framework.
El problema para mí con ésta solución está en dos cosas:
- si utilizas un container de esa manera estás consiguiendo anular todas las ventajas de la inyección de dependencias: esto es, tus clases estarán ligadas al container, y el container a tu código, con lo cuál pierdes toda ventaja, y todo ello habiendo tenido que escribir una gran cantidad de código (menos que sin el container, eso es verdad).
- esta solución puede ser necesaria sólo si se hace un uso MUY repetido de LA MISMA configuración, en caso contrario acabarías replicando código a mansalva.
- el uso de XML para la configuración. Precisamente los DSL (Domain Specific Languages) internos (aquellos que utilizan el propio lenguaje para escribirse, en éste caso PHP) han demostrado ser mucho más eficaces que aquellos que utilizan XML´s externos (cualquier programador de Java podrá contar miles de experiencias codificando XML´s infinitos e infernales).
Dicho esto dejo aquí una idea más sencilla y que me ha gustado más: un simple constructor de clases sin XML.
» Leer más, comentarios, etc...
programania
PHP y programación funcional: reutilización de código sin orientación a objetos… y más.
Mayo 22nd, 2009 - [Enlace local]
Cada vez está más cerca la llegada de PHP 5.3 y sus novedades a la hora de escribir código funcional con PHP. La verdad es que no me quedaban claras las ventajas de escribir éste tipo de código a parte de cambiar el estilo y hacer algunas cosas de manera más elegante. ¿Realmente vale la pena el viaje? Tras googelear y leerme una buena cantidad de artículos os dejo aquí los que más me han convencido. Especialmente os recomiendo uno de Procata donde realmente puede adivinarse la posibilidad de obtener una buena reutilización de código sin incurrir en sobreingeniería (overengineering) con la orientación a objetos (una cosa que creo que hago de vez en cuando, o esa sensación me queda….)
- Una estupenda entrevista con Lukas Kahwe Smith, el gestor de wiki.php.net, contándonos lo que vendrá en php 5.3: namespaces, closures, lamda functions, PHAR (que será algo parecido a los WAR en Java) y lo que vendrá en PHP 6: traits y Unicode. Además, habla de las mejoras en el rendimiento de PHP 5.3 y de cómo cree que no habrá ningún PHP 5.4. Nos habla de la incompatibilidad hacia atrás de PHP 6 y que no cree que será un problema para su adopción. Veremos.
- Aquí un post explicación las bondades de las lambda functions y las closures, pero afirmando que son una alternativa a la forma clásica de escribir código, pero no una auténtica mejora. Luego escribe, una segunda parte del artículo explicando cómo escribir código PHP al estilo de jQuery.
- En Procata contestan a los dos artículos anteriores con un ejemplo donde, la programción funcional (con lambda y closures) si supone una auténtica ventaja frente a la tradicional a la hora de escribir código reutilizable y limpio.
- Otro artículo revisando las ventajas de éstas nuevas funcionalidades. Por un lado comenta las ventajas evidentes de usarlo con array_map, array_reduce, etc… y por otro lado analiza la manera de utilizarlo como forma de inyección de dependencias.
- Artículo explicando que la programación funcional es una gran opción a la hora de reutilizar código y que muchas veces puede sustituir a la orientación a objetos.
- Y un último anuncio: closures y la programación funcional también llegarán a Java!
Para aquellos que, como yo, usen el Zend Framework para todo lo que pueden, os recuerdo que Zend Framework 2.0 saldrá al calor de PHP 5.3 y en algún aspectos será incompatible hacia atrás…
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Oracle Forms Look and Feel Project
Mayo 21st, 2009 - [Enlace local]
A
