TEDxResistencia, una realidad

December 17th, 2011

Algunos probablemente se enteraron en el día de ayer que la gente del NEAValley consiguió una licencia para poder realizar un evento TEDx en Resistencia, este post pretende explicarles que es es TED.

TED proviene de Tecnología, Entretenimiento y Diseño, es una organización sin ánimos de lucro la cual se encarga a difundir ideas que valen la pena (ideas worth spreading). Para difundir estas ideas la gente de TED organiza las conocididas TED Talks en las cuales gente muy importante habla presenta durante unos minutos alguna idea. Gente que alguna vez anduvo por una TEDTalks fue por ejemplo Bill Gates, Bill Clinton, Larry Page y miles mas.

Con el tiempo esta organización fue creando nuevos programas para realizar el mismo tipo de eventos en otras partes del mundo, así nació TED Global. Con el tiempo esto también quedo chico, por ello crearon el programa TEDx donde la X proviene de independiente, esto significa, gente que se asocia, arma un plan, lo presenta a TED y ellos otorgan una licencia para el uso de la marca con muchas instrucciones que debería seguir para que el evento siga la misma talla del evento original.

Y que representa esto para el Chaco, bueno, mirandolo rápidamente vamos a contar con un evento muy bueno el cual tendrá oradores increíbles los cuales nos van a dejar alguna idea para explotar. Segundo, probablemente, vamos a tener un intercambio de conocimiento con otros TEDx (Tucuman, Rio De La Plata, Buenos Aires) los cuales colaborarán con experiencia previa. Por último, estamos mostrandonos para el resto del mundo, estos eventos son vistos online por muchísima gente en todo el mundo y post evento los videos siguen siendo vistos en Youtube por ejemplo; mostrar al mundo lo que hacemos es genial, por que, como dice el amigo @Guitarrear, pone al NEA en el mapa mundial.

Quiero extender mis felicitaciones a esfuerzo de la gente del NEAValley (@Guitarrear, @ElLuish, @matipalmer (si me olvide de alguien please me avisan)) que sin haber hecho una presentación oficial ya estan mostrando signos de vida.

Les recuerdo que este martes 20 es la “presentación” oficial del NEAValley, espero poder verlos a todos. Mas info del evento aquí http://neavalley.org/2011/12/14/primer-evento/.

Ahora los dejo con algunas charlas TED que me volaron la cabeza.

Mas Videos

http://www.youtube.com/user/tedtalksdirector?blend=1&ob=4

Y el link a TEDxRioDeLaPlata, sitio que hicimos varios Globers dentro de las oficinas de Globant Chaco, allí podrán ver varios videos en español.

http://www.tedxriodelaplata.org/

  • Share/Bookmark

PD que ?, PDO !

November 17th, 2011

En los principios de PHP solo teníamos librerías nativas para interactuar con bases de datos. La más conocida son las nativas de mysql (mysql_connect, mysql_query, mysql_*).  Dichas librerías son muy efectivas y funcionan perfectamente, pero podemos encontrarnos con dos cuestiones que pueden molestarnos.

- No son orientadas a objetos

- Son especificas y acoplan al RDBMS con nuestro código

Para solventar estos problemas deberíamos agregar bastante código a nuestra aplicación a fin de darle soporte a múltiples bases de datos y armar una abstracción orientada a objetos.

Recuerdo la primera vez que vi ADO.NET y JDBC, ambas librerías, en sus lenguajes respectivos, subsanaban los problemas aquí comentados; nosotros en PHP3 no teníamos nada parecido. Con el pasar del tiempo aparecieron algunas abstracciones como MDB (http://pear.php.net/package/MDB/redirected) y ADOdb las cuales pretendían solventar este problema.

Con la salida de PHP5 y el nuevo modelo de Objetos incorporado al lenguage se incorporó una librería llamada PDO (PHP Data Objects) la cual es un librería abstracta, orientada a objetos para interactuar con bases de datos.

PDO Definie básicamente es un conjunto de interfaces para interactuar con bases de datos, los proveedores de drivers simplemente deben implementar dichas interfaces para proveer soporte PDO a su RDBMS.

PDO proporciona una capa de abstracción acceso a datos, que significa que, independientemente de la base de datos que está utilizando, se utiliza las mismas funciones para realizar consultas y obtener datos. PDO no proporciona una abstracción base de datos; reescribe SQL o emular características faltantes. Debe usar una capa de abstracción en toda regla, si necesita esto, para esto pueden ver Doctrine o Propel.

Lo interesante es que si programamos todo medianamente estándar, y en los casos particulares añadimos la compatibilidad necesaría para las bases de datos a soportar, podemos cambiar de RDBMS muy fácilmente.

Ademas de todo esto, PDO incorporá ventajas de optimización, seguridad, transacciones, pooling de conexiones y varias cosas mas.

Aquí el manual de PDO.

http://www.php.net/manual/es/intro.pdo.php

Instalación

Esta librería viene nativamente dentro de PHP5 o superior (salvo que su versión de PHP no este compilado con el flag de pdo); lo que no viene por defecto son los drivers concretos de cada RDBMs, estos deben instalarse por separado y habilitarlos en el php.ini como una extensión dado que estos componentes son binarios (.so en Unixes y .dll en windows). Si tienen la suerte de trabajar sobre debían podrán ver los paquetes que tenemos en los repositorios mediante apt-cache search

php5-mysql – MySQL module for php5
php5-odbc – ODBC module for php5
php5-pgsql – PostgreSQL module for php5
php5-sqlite – SQLite module for php5
php5-sybase – Sybase / MS SQL Server module for php5
php5-oracle – Oracle module for php5

Solo basta con hacer un apt-get install y reiniciar el servidor web para tener disponible el driver. Si su base de datos poseen un driver que no esta en los gestores de paquetes simplemente deben descargar el binario y añadir la extensión en el php.ini (extension=/path/al/binario.so).
Para verificar su correcta instalación y los drivers disponibles phpinfo() al rescate, aparece en el listado de features.
php5-mysql – MySQL module for php5
php5-odbc – ODBC module for php5
php5-pgsql – PostgreSQL module for php5
php5-sqlite – SQLite module for php5
php5-sybase – Sybase / MS SQL Server module for php5
php5-oracle – Oracle module for php5solo

Los Objetos de PDO

PDO cuenta con dos objetos principales, PDO y PDOStatement, el primero es el encargado de manejar las cuestiones de conexión, el segundo el encargado de manejar las consultas. Para realizar la conexión a la base de datos, PDO requiere un DSN (Data Source Name) que es un string que contiene los parámetros de conexión. Para conectarnos a la base necesitamos crear una nueva instancia de la clase PDO, pasando como argumentos al constructor el DSN, usuario y contraseña; en otras palabras, el DSN es tipo una url pero para especificar a donde conectarnos.

El DSN de PDO sigue la siguiente forma.

DRIVER:hots=IP;dbname=NOMDB

Donde

DRIVER: depende de la base a conectarse, (mysql, pgsql, oci (oracle),ibm(db2))

IP: es la dirección ip del servidor a conectarnos o su nombre de dominio

NOMDB: es el nombre de la base a conectarse.

Un ejemplo de conexión sería

$dbh = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass);

Deben tener en cuenta que mediante el objeto podremos realizar las operaciones con la base. Para desconectarse solo deben asignar null al objeto de conexión.

$dbh = null;

Consultas a la base

Las consultas se realizan a trabes del objeto de conexión y utilizando el método query. Este nos devuelve un arreglo con los resultado, lo que nos hace olvidar del fecth.

Veamos un ejemplo.

$res = $dbh->query(’SELECT * from FOO’);
foreach($res as $row) {
print_r($row);
}

En el caso querer obtener el arreglo por separado para tratarlo de otra manera se puede utilizar el método fetchAll para asignar toda la consulta en un arreglo. Por ejemplo.

$res = $dbh->query(”SELECT * FROM persona”);
$res_arr = $res->fetchAll();

Si queremos ir obteniando de a uno los registros como arreglos podemos usar fetch, esto avanza el puntero interno de los resultados y al llegar al final devuelve falso.

Prepared Statement

La ventaja mas potente de PDO es la de poder crear Consultas Preparadas, o Prepared Statement. Esta fija el formato de la Consulta a una determinada manera y luego recibe los parámetros tal como nosotros especificamos. Esta separación del formato de la consulta y los parámetros evita el problema de la Injección SQL dado que es imposible realizarla en una consulta Preparada. Por otro lado este tipo de consultas otorgan al RDBMs mucha mejor facilidad de tratamiento de las consultas dado que pueden tener preparado el plan de ejecución de las mismas optimizando un poco el rendimiento general de la aplicación.

Para crear una consulta preparada se utiliza el Prepare de PDO, esa operación devolverá un Statement al cual mediante el método bindParam asociaremos los parámetros y mediante execute tendremos los resultados de la consulta. Si execute devuelve falso podremos saber si se produjo un error. Una vez realizado el método execute podremos tratar los resultados en el Statement.

Veamos un ejemplo.

Transacciones

Una transacción es un conjunto de operaciones que deben ser realizadas todas juntas o no debe realizarse ninguna. Para trabajar con transacciones debemos enviar señalizadores al RDBMS de como es el proceso, donde empieza (begin), cuando termina ok (commit) y si fallo (rollback) para que vuelva atrás los cambios realizados. En PDO contamos con dichos metodos para señalizar la operación de transacción.

Métodos provistos por PDO

PDO::beginTransaction – Inicia la Transacción.
PDO::commit – Confirma los Cambios y finaliza la transacción.
PDO::rollback – Deshace los cambios realizados y finaliza la transacción.

Ejemplo

Conclusión

PDO es muy ordenado y limpio para trabajar como pueden ver, es muy util para el trabajo cotidiano. Varios de los proveedores de drivers últimamente solo estan soportando drivers para esta interfaz. Su aprendizaje puede tomar una o dos tardes, es muy sencillo de utilizar y la ganancia es grande.

Mi romendación, comiencen a utilizar esta librería lo antes posible y olvidensé de mysql_connect (al menos por un rato).

  • Share/Bookmark

Ciclo de Conferencias en la FACENA

October 11th, 2011

Por medio de comunidad TIC me entero que en la FACENA (Unne), se estan dictando una serie de charlas relacionadas con el IT de la mano del Polo IT de Corrientes, algunas estan muy interesantes.

Ciclo de Conferencias de Actualización en el marco de la Industria del
Software del Nordeste
Organiza: Dpto de Informática- FACENA y POLO IT.- Corrientes
Conferencia 1: Viernes 7 de octubre
Desarrollo y Administración de Proyectos de Software.
Disertantes: Ing. Fabián Bobadilla, Mario Alejandro Acevedo. ALIARE S.R.L. , 3TREX
S.R.L.
Conferencia 2: Viernes 14 de octubre
Disertantes: Framework de aplicaciones web de código abierto.
Disertante: Lic. Carlos Barbiero . IPCORP S.R.L.
Conferencia 3: Viernes 21 de octubre
Gestión de Proyectos.
Disertantes: Ing José Fernandez, Ing. Diego Morales. DESARROLLOS NEA S.R.L.
Conferencia 4: Viernes 28 de octubre
Exportaciones y mercados regionales.
Disertantes: Ing José Tagliarini , Ing. Darío Almeida. SP S.A. , CONINFO.NET
Conferencia 5: Viernes 4 de noviembre
Accesibilidad en la Web. Aspectos técnicos y legales,
Disertantes: Lic. Mariño y Lic. Acevedo
Inscripciones hasta media hora antes del evento o personalmente en
Dpto de Informática de FACENA: 16 a 21 hs.-
Lugar: FACENA ( 9 de julio 1449) : AULA 5 .- 20 hs.
  • Share/Bookmark

JavaScript – Enlace de Eventos

September 15th, 2011
Una de las cosas fundamentales a concer en el mundo de JavaScript es el Sistema de Eventos, es una de las cosas mas utilizadas cuando uno desarrolla interactividad en la UI basada en Js; tambien es una de las cosas peor aprendida por los novatos en JavaScript.
Lo primero que se aprende es a definir un evento de manera inline dentro del tag HTML
<div onClick=”doSomethingOnClick();”>…</div>
Esta es una forma fácil pero es la peor, razones, varias, las más importantes
1 – Estamos acomplando fuertemente nuestra lógica programática con la presentación
2 – Esta forma ejecuta el código definido como valor del atributo onClick mediante un eval, es decir
que este código se evalua al momento de ejecutarse, esto es algo pésimo.
Nunca deberíamos realizar este tipo de declaraciones de eventos.
Avanzando un poco mas, nos cruzamos con otra técnica muy común para definir eventos. Supongamos
que tenemos este fragmento dentro de un documento.
<div id=”main”>
Hello this is main
<div id=”inner”>
And this it’s inner
</div>
<div>
Y queremos asociar una funcion al evento click en el elemento de Id igual a main.
Vía código podemos hacer esto:
var eventElement = document.getElementById(’main’);
eventElement.onclick = doSomeDummyEvent; //Esto es una funcion
Esto es correcto, mejor que el caso anterior pero cuenta con otro inconveninte, al realizar
el enlace de la funcion al elemento, este enlace se guarda como un atributo del elemento,
por si se sobrescribe dicho atributo el enlace previo se pierde. En otras palabras
//En algun momento se carga este fragmento de código
var eventElement = document.getElementById(’main’);
eventElement.onclick = doSomeDummyEvent; //Esto es una funcion
//Posteriormente se carga este
var eventElement = document.getElementById(’main’);
eventElement.onclick = doSomeOtherDummyEvent; //Esto es una funcion
Se terminará ejecutando doSomeOtherDummyEvent y nunca se ejecutará doSomeDummyEvent.
Esto por estupido que les parezca es muy grave dado que si cargamos liberías de diferentes
proveedores, o código desarrollado por dos programadores diferentes dentro del mismo proyecto,
puede provocar colisiones y llevar a errores inesperados. Moraleja, tampoco debería usarse al
menos que este conciente de lo que hace.
El tercer y último caso, este ya no tan conocido por todos, es añadir el evento a una cola de
eventos, para esto Js y DOM nos proveen del método addEventListener y removeEventListener.
Mediante este mecanismo podemos enlazar todos los manejadores de eventos que sean necesarios
para un evento determinado a un elemento particular. El orden de ejecución será determinado
por la manera en que los eventos fueron registrandose. Vemos un ejemplo de uso
var eventElement = document.getElementById(’main’);
eventElement.addEventListener(’click’,doSomeDummyEvent);
eventElement.addEventListener(’click’,doSomeOtherEvent);
El problema de addEventListener es que en IE no se llama así, se llama attachEvent y deatachEvent, la
lógica sigue siendo la misma.
Relación en JQuery.
En Jquery estas dos últimas situaciones estan reflejadas, si hacemos
$(’#main’).click(function() { …. });
Estamos en el primer caso.
$(’#main’).bind(’click’,function() {…});
Estamos en el segundo caso.
Moraleja, utilizar .bind, .[evento] solo si estan seguros de lo que estan buscando.
Queda mucho mas para hablar de eventos, se los contaré en próximos posts.
Les dejo unos links interesantes
Estandar
http://www.w3.org/TR/DOM-Level-2-Events/events.html
AddEventListener
https://developer.mozilla.org/en/DOM/element.addEventListener
Attach Event
http://msdn.microsoft.com/en-us/library/ms536343(v=vs.85).aspx
Jquery
http://api.jquery.com/click/
http://api.jquery.com/bind/

Una de las cosas fundamentales a conocer en el mundo de JavaScript es el Sistema de Eventos, es una de las cosas mas utilizadas cuando uno desarrolla interactividad en la UI basada en Js; tambien es una de las cosas peor aprendida por los novatos en JavaScript.

Enlace Inline

Lo primero que se aprende es a definir un evento de manera inline dentro del tag HTML

<div onClick=”doSomethingOnClick();”>…</div>

Esta es una forma fácil pero es la peor, razones, varias, las más importantes

1 – Estamos acomplando fuertemente nuestra lógica programática con la presentación

2 – Esta forma ejecuta el código definido como valor del atributo onClick mediante un eval, es decir que este código se evalúa al momento de ejecutarse, esto es algo pésimo.

Nunca deberíamos realizar este tipo de declaraciones de eventos. Avanzando un poco mas, nos cruzamos con otra técnica muy común para definir eventos. Supongamos que tenemos este fragmento dentro de un documento.

<div id=”main”>

Hello this is main

<div id=”inner”>

And this it’s inner

</div>

<div>

Enlace por atributos del elemento

Y queremos asociar una funcion al evento click en el elemento de Id igual a main.  Vía código podemos hacer esto:

var eventElement = document.getElementById(’main’);

eventElement.onclick = doSomeDummyEvent; //doSomeDummyEvent es una funcion

Esto es correcto, mejor que el caso anterior pero cuenta con otro inconveninte, al realizar  el enlace de la funcion al elemento, este enlace se guarda como un atributo del elemento, por si se sobrescribe dicho atributo el enlace previo se pierde. En otras palabras

//En algun momento se carga este fragmento de código

var eventElement = document.getElementById(’main’);

eventElement.onclick = doSomeDummyEvent;

….

//Posteriormente se carga este

var eventElement = document.getElementById(’main’);

eventElement.onclick = doSomeOtherDummyEvent;

Se terminará ejecutando doSomeOtherDummyEvent y nunca se ejecutará doSomeDummyEvent.

Esto por estúpido que les parezca es muy grave dado que si cargamos liberías de diferentes proveedores, o código desarrollado por dos programadores diferentes dentro del mismo proyecto, puede provocar colisiones y llevar a errores inesperados. Moraleja, tampoco debería usarse al menos que este consciente de lo que hace.

Enlace por medio de la cola de eventos

El tercer y último caso, este ya no tan conocido por todos, es añadir el evento a una cola de eventos, para esto Js y DOM nos proveen del método addEventListener y removeEventListener.

Mediante este mecanismo podemos enlazar todos los manejadores de eventos que sean necesarios para un evento determinado a un elemento particular. El orden de ejecución será determinado por la manera en que los eventos fueron registrandose. Vemos un ejemplo de uso

var eventElement = document.getElementById(’main’);

eventElement.addEventListener(’click’,doSomeDummyEvent);

eventElement.addEventListener(’click’,doSomeOtherEvent);

El problema de addEventListener es que en IE no se llama así, se llama attachEvent y deatachEvent, la lógica sigue siendo la misma.

Relación en JQuery.

En Jquery estas dos últimas situaciones estan reflejadas, si hacemos

$(’#main’).click(function() { …. });

Estamos en el primer caso.

$(’#main’).bind(’click’,function() {…});

Estamos en el segundo caso.

Moraleja, utilizar .bind, .[evento] solo si estan seguros de lo que estan buscando.

Queda mucho mas para hablar de eventos, se los contaré en próximos posts. Les dejo unos ejemplos completos sencillos para que vean el caso 2 y 3 (No son cross browser, lo hice para chrome y firefox)[Descargar].

Tambien dejo unos links interesantes

Estándar

http://www.w3.org/TR/DOM-Level-2-Events/events.html

AddEventListener

https://developer.mozilla.org/en/DOM/element.addEventListener

Attach Event

http://msdn.microsoft.com/en-us/library/ms536343(v=vs.85).aspx

Jquery

http://api.jquery.com/click/

http://api.jquery.com/bind/

  • Share/Bookmark

PHP odbc_connect sobre Windows 2003 en 64bits

September 13th, 2011

Ayer me cruce con un problema super interesante, me consultaron por un desarrollo que estaban realizando bajo windows, con PHP, IIS, SQLServer y para realizar la conneción utilizaban las librerías nativas de PHP para odbc (odbc_*).

postgres-odbcImagen del ODBC connection manager

El problema era que cuando estaban en entorno de desarrollo funcionaba todo fantástico, cuando pasaban a producción la conección odbc no funcionaba, la cuestión concreta,  no podía encontrar el DSN. Después de chequear varias veces en el odbc connection manager de windows, el DSN estaba registrado y funcionaba perfecto.

Dimos varias vueltas hasta encontrar el problema, dado que en desarrollo utilizaban windows para 32bits y en producción utilizaban windows para 64bits, en las versiones de 64bits windows posee dos versiones del odbc connection manager las cuales no comparten los mismos datos.  Como el interprete de PHP era para 32 bits utilizaba los datos registrados mediante el odbc connection manager de 32bits, por el panel de control solo se puede acceder a la versión de 64bits, por ende nuestras configuraciones solo funcionaban para 64bits.

Solución, bueno, muy sencilla, abrir el odbc connection manager para 32bits (C:\Windows\SysWOW64\odbcad32.exe), [OJO!, el de 64 también dice 32 pero esta en otro directorio, tienen que abrir este] y configurar la conexiones nuevamente. Después de eso funcionara todo perfecto.

Nuevamente, lo único que puedo decir, gracias M$ por los servicios ofrecidos :P

  • Share/Bookmark

Las skills de un Ingeniero PHP

July 16th, 2011

Escucho muy seguido gente que no confía en PHP por que dice que es una lenguaje que no escala, que es cochino y que no provee elementos “avanzados de programación” como threads, tipos de datos y otras cosas así. Si bien esto tiene algo de cierto no todo es tan negro. PHP es un lenguaje sencillo pero poderoso dado que provee una API gigantesca para interactuar casi con cualquier estandard de manera muy sencilla; provee una flexibilidad asombrosa ante los cambios, los deploys no son una tarea preocupante y la compatibilidad con las plataforma de Hardware es asombrosa (hasta corre sobre iSeries (ex AS400)).

Esta sencillez provista por PHP a su vez impacta en que gente no especializada en el desarrollo de aplicaciones se involucre en el mundo del desarrollo web y haciendo sites funcionales pero utilizando solo el 10% de las herramientas provistas por PHP; cuando un verdadero ingeniero de software se cruza con esta gente y comienza a preguntar cosas sobre POO, Escalabilidad, Extensibilidad, Reutilización llega a la conclusión de que la gran mayoría de los desarrolladores PHP no saben mucho de desarrollo en general y que no pueden implementar soluciones grandes.

Me duele decirlo pero en gran parte esta conclusión no es tan errada. La mayoría de los desarrolladores PHP que conozco todavía siguen programando proceduralmente, con scripts aislados, utilizando mysql_connect y olvidándose de millones de buenas prácticas. Esto es algo que me preocupa por que veo poca madurez de los desarrolladores PHP en general (hablando de la región y la gente con la que habitualmente me cruzo).

Que debería conocer un Desarrollador PHP hoy en día?, si de verdad quieren hacer desarrollos profesionales, escalables y de gran embergadura. Bueno deberíamos estar hablando para empezar de POO, estos conceptos tienen que ser moneda corriente en la vida del desarrollador, cuestiones que no pueden escaparse son:

- Análisis y Modelado
- Herencia
- Clases Abstractas
- Interfaces
- Polimorfismo

Necesitan crear componentes de software basado en estos conceptos (mas allá de nombrar la definición del libro). PHP provee una implementación de Objetos muy copada, piola y sencilla, es un desperdicio no aprovecharla.

De la mano a la POO viene el tema de los patrones de Diseño, esto es otro tema en el que reiteradamente insisto a mis conocidos que aprendan y apliquen. Empezando desde el MVC, siguiendo por los ORM y hasta el que se les ocurra, pero es necesario que manejen estos conceptos para desarrollar una verdadera implementación flexible en sus aplicaciones con PHP.

Para facilitar su camino en el aprendizaje en estas cuestiones les recomiendo siempre comenzar a utilizar algún Framework y analizar su Core. Como siempre el framework que recomiendo estudiar es Symfony, pero si este no es de su agrado puedo ver Zend, Cake, Code Igniter o Kohana.

Ademas de estas cuestiones tenemos otra cosas para ver como las librerías típicas de PHP, PDO, Xdebug, GD, ImageMagic, SimpleXml, Curl, PHPUnit entre otras … estas librerías debe conocerse.

Otras skills que un desarrollador PHP debe tener en su maletín son;

- Administración de Apache, levantar Virtual Hosts, Analizar logs, Mod Rewrite, etc.
- Administración del SO, Networking, Firewalls, Permisos, etc.
- Manejo de un CVS, Subversion o Git son buenas opciones
- Dominio de SQL, queries, vistas, subqueries, permisos, triggers, sql optimization, etc.
- Caching (Memcache, Varnish, Squid, Mod Proxy)

Y podríamos seguir la lista, pero no quiero asustarlos :P … esto es lo mínimo que un verdadero Ingeniero PHP debe conocer y saber; sino no dejan de saber hacer un par de simple scripts.

Adicionalmente a todo esto, los devs PHP siempre están muy relacionados con las UI (PHP es un lenguaje muy usado para el frontend de las aplicaciones), por ello también se busca conocimientos en HTML, CSS y JS, pero eso lo dejo para otro día :) .

  • Share/Bookmark

Instalar PHPUnit

June 15th, 2011

Escribo este post por que siempre me olvido de los pasos para instalar PHPUnit y los quiero tener a mano. Espero que les sirva a ustedes tambien :D . Estos comandos deberían ejecutarse como root.


apt-get install php5-curl php5-xdebug
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear upgrade PEAR
pear install phpunit/PHPUnit

Si estas detraz de un proxy, antes que nada setalo.

pear config-set http_proxy http://url.a.tu.proxy:3128

Mas info http://www.phpunit.de/manual/3.5/en/index.html

  • Share/Bookmark

BarCampNea 2011

June 12th, 2011


Después de asistir a la BarCampLitoral en el mes de Mayo, con Marcos decidimos que teníamos que empezar a mover el guiso y hacer una para nuestra región; por que ?, dos razones principales, la primera es que el espacio de intercambio e ideas y experiencias que ofrece una BarCamp es único y segundo por que pensamos que necesitamos juntar mas a los profesionales de la zona, sentimos que estamos muy aislados, cada uno muy metidos en lo nuestro y no estamos haciendo nada diferente para salir todos juntos adelante.

De allí que empezamos a pingear a los contactos que teníamos a ver quien nos podía dar una mano para el evento, el primero en responder fue Luis, quien nos dio la mano mas grande consiguiendo el lugar para el evento. De ahí en mas mucha otra gente se esta moviendo para conseguir las cosas que necesitamos, hasta gente de otras provincias esta tratando de promocionar el evento en sus localidades. Esto fue un fenómeno que nos sorprendió un monto dado que por un par de twits la gente se prendió inmediatamente a ayudarnos.

Como es la mecánica de la BarCamp, bueno, la idea es que abriríamos para las 10:00 y empezamos a registrar charlas sobre un pizarron gigante el cual contendrá una grilla Hora / Sala, a medida que la gente asistente comience a ofrecer charlas estas serán asignadas en el pizarron y los interesados en presenciar charlas podrán ver en la pizarra que es o que se viene. En el medio, si no tenes ganas de asistir a charlas, tendremos stands de empresas que vendrán a mostrar productos. También podrás hablar y discutir cosas con la gente asistente.

Esperamos que todos los interesados en cuestiones de Seguridad, Programación. Redes Sociales, El impacto de la Tecnología en la Socidad, Negocios basados Tecnología, Emprendedorismo, Networking, Robótica, se acerquen a este espació que tanto trabajo nos esta llevando para armarlo y expongan sus ideas o como mínimo vengan para escuchar a los que tienen algo para decir.

Estamos muy ansiosos y esperamos que esto sea un hito en la historia de la informática regional.

Los esperamos a todos el 25 de Junio de 2011 en la UTN-FRRE, Resistencia Chaco Argentina para pasar un buen momento Geek !

http://barcampnea.com.ar/

Mientras tanto nos podes seguir por twitter @barcampnea o en nuestro grupo de Facebook

  • Share/Bookmark

Linux Cumplió 20 años

April 8th, 2011

Recuerdo como si fuese ayer mi primera instalación de Linux en el año 2000, tenía un Red Hat 5.2 que me vino en una revista de computación española. Lo había instalado en mi Pentium 233MMX con 16MB de ram, creo que la instalación me llevo como una semana y perdí una bocha de información personal. Mis primeros pasos no fueron de lo mas agradable, mi placa de audio no funcionaba, después de pelear casi un mes y quien sabe después de cuantas recompiladas de kernel pude lograr hacer funcionar mi placa de audio.

Después de un tiempo mi maquina se rompió, el disco rígido se rompió y no contaba con el dinero para comprarme uno nuevo (mala época económica). Entonces conocí Ututo, una de las primeras distros live. Contaba con KDE, Star Office y varias cosas mas, la use como un mes hasta que conseguí un disco rígido y volví con Red Hat 7.2.

Recuerdo en esa época con Marcos eramos super talibanes, queríamos matar a todos los que no usarán Linux y software libre, peleabamos con cuanto profesor se nos cruzaba para mostrarle los beneficios del Software Libre y lo copado que estaba Linux. Conocimos un monton de gente que hacia lo mismo que nosotros por otros lados, como Pelín, Andres S., Jose M., Jorge R., Puppi y varios otros, entre todos armamos el Gulfrre, (Grupo de Usuarios de Linux Facultad Regional Resistencia), después de idas y vueltas, cambios de forma gente que iba y gente que venía, termino prácticamente desapareciendo. Nunca hicimos nada relevante, pero fue un hermoso espacio para intercambiar ideas y conocimiento.

Con el tiempo fuimos madurando y no dimos cuenta que solo los siths piensan en absoluto, nosotros como Jedis debíamos aceptar que habían alternativas, asi que dejamos de ser tan talibanes. Igualmente el uso de Linux cada día se intesificaba mas, recorrimos los rincones mas obscuros de la internet para encontrar algún software libre que cumpla con nuestras necesidades, no importaba cuan experimental era, lo usábamos igual. Comenzamos a aprender cuanta tecnología pasaba en frente, PHP, PostgreSQL, MySQL, Perl, Bash, Apache, Postfix, Ldap, Iptable, Ipchains, Mono, Java y asi.

Después de varios años y al haber alcanzado cierto conocimiento comenzamos a armar charlas con el fin de mostrarle a la gente todas las bondades del Software Libre. Asi surgieron Expolinux, Flisoles, Developer Days, Linux Day, Software Freedom Day.

en dichos eventos conocimos nueva gente como Pablito T, Mati S, M.C, el Pelado M. y muchos mas.

Con algunos armamos negocios,

otros nos consiguieron trabajo, con otros solamente tomamos cervezas :P .

Conocer Linux me abrió la puerta en muchisimos sentidos, me ayudo a conocer mejor la informática, me ayudo a conocer procesos de desarrollo, me enseño a involucrarme en proyectos, a conocer tecnologías, a tener un mi propio web server, a crear mis propios dispositivos de red, a programar, etc etc etc. En otras palabras creo que Linux, y la comunidad, me dieron muchisimo y en general creo que cambió el mundo.

Hey, vos que estas ahí, por que no te dejas de jugar con Windows y empezas a vivir la vida Hoy !

  • Share/Bookmark

Js Debugging con Internet Explorer

March 29th, 2011

Siguiendo con el tema debugging de JavaScript, ahora llego el turno de Internet Explorer, después de varios días de tortura, dado que sufro cada vez que tengo que usar algo de Microsoft, encontré un conjunto de herramientas que me ayudaron a realizar el trabajo de debuggear sobre Internet Explorer.

La versión de IE con la que mejor pude realizar el trabajo es IE8, 7 y 6 carecen de herramientas para realizar este trabajo de una manera sencilla, pero con IE8 podes acercarte bastante a que funcione en IE7 …. IE6 es un mundo aparte, hoy en día no funciona casi nada en dicho navegador. IE8 cuenta con una herramienta para desarrollo web muy similar a Firebug pero no idéntica, esta herramienta posee un visor del DOM, visor de CSS, visor de Scripts, y una consola para debbuging compatible con la consola de Firebug (log, warn, error, etc).

Lo que no posee esta herramienta es un monitor de Red pero eso lo podemos complementar con otra herramienta llamada Friddle.

Adicionalmente tambien podemos instalar DebugBar que viene al pelo para ver el DOM y CSS, tambien posee monitor HTTP.

Me recomendaron tambien VS 2010 Expresss para realizar el debugging, pero no la alcanzé a probar, en realidad no me animo, a ver si todavía me gusta :P .

Para probar en las diferentes versiones de IE pueden usar IETester, emula todas las versiones de IE, muy piola la herramienta.

Aqui la lista de Herramientas y Links

IE Tester http://www.my-debugbar.com/wiki/IETester/HomePage
Debug Bar http://www.debugbar.com/?langage=en
Fiddler2 http://www.fiddler2.com/fiddler2/
Web Development Helper  http://www.nikhilk.net/

Y aqui unos links a algunos Docs

http://msdn.microsoft.com/en-us/library/dd565628(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/dd565625(v=vs.85).aspx

http://www.developertipoftheday.com/2010/12/output-to-built-in-ie-developer-console.html

http://msdn.microsoft.com/en-us/library/dd565622(v=VS.85).aspx

  • Share/Bookmark