Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

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

Share/Save/Bookmark

» 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

Share/Save/Bookmark

» 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.

  1. Evolución de Wordpress hasta convertirse en un CMS completo, más allá de ser una estupenda plataforma de blogging.
  2. 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.
  3. 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.
  4. 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…
  5. 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).
  6. 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.
  7. 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.
  8. 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:


» 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:

En realidad no dejan de ser meros parches para maquillar las cuentas. No son soluciones.



Alternativas

Se echa en falta un poco de imaginación y de conocimiento del sector. ¿Por qué no hacer?



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

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:

diagramadeclase11

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:

  1. private static $instancia = null;
  2.  
  3. public static function getInstancia($asurl)
  4. {
  5.     $returnValue = null;
  6.     if (!isset(self::$instancia)) {
  7.             $class = _CLASS_;
  8.             self::$instancia = new $class($asurl);
  9.     }
  10.     $returnValue=self::$instancia;
  11.     return $returnValue;
  12. }

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.

  1. if (!function_exists(‘get_called_class’)){
  2.     function get_called_class(){
  3.         $bt = debug_backtrace();
  4.         $lines = file($bt[1][‘file’]);
  5.         preg_match(‘/([a-zA-Z0-9\_]+)::’.$bt[1][‘function’].‘/’, $lines[$bt[1][‘line’]-1], $matches);
  6.         return $matches[1];
  7.     }
  8. }

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

  1. class osusnet_com_Base
  2. {
  3.     private $asurl = ;
  4.     private static $instancia = array();
  5.     private $iVersion = null;
  6.     private $sAsConsumer = ;
  7.     private $debug = 0;
  8.     protected function __construct($asurl)
  9.     {
  10.         if($asurl==""){
  11.             return false;
  12.         }else{
  13.             $this->asurl=$asurl;
  14.             $this->iVersion=1;
  15.             $this->sAsConsumer="kk";
  16.             $this->debug=0;
  17.         }
  18.     }
  19.  
  20.     public static function getInstancia($asurl)
  21.     {
  22.         $returnValue = null;
  23.         $class = get_called_class();
  24.         if (!isset(self::$instancia[$class])) {
  25.             self::$instancia[$class] = new $class($asurl);
  26.             $returnValue=self::$instancia[$class];
  27.         }
  28.         return $returnValue;
  29.     }
  30. }

Clase1

  1. class osusnet_com_Clase1 extends osusnet_com_Base
  2. {
  3.     public function GetUserContext($cookie)
  4.     {
  5.     }
  6.     public function CheckStateUser()
  7.     {
  8.     }
  9.     public function LogIn()
  10.     {
  11.     }
  12. }

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:

  1. $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:

  1. $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:

  1. Intentar registrarse a través de groups.adobe.com
  2. 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

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:

Sin embargo, por mucho que indago me quedan las siguientes sensaciones:

Y, por último, una serie de preguntas, a ver quién me arroja algo de luz:

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:

  1. 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.*
  2. 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:

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:

xEdit marcas nuevo texto

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:

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….)

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

» Leer más, comentarios, etc...

Información legal y técnica