December 10th, 2009 Category: Programacion
8 Comments »

Es común siendo parte de este rubro que al comentar con alguien que te dedicas al desarrollo web, comenten cosas como “ahhh haces paginitas web“, “yo con el dreamweber hice algunas paginas”. Y la verdad es entendendible viniendo de alguien que desconoce el rubro, pero nosotros tenemos que ser consientes de que es algo mas que hacer paginitas.
Muchas personas alguna vez agarraron el frontpage o dreamweber e hicieron la pagina de su empresa o la del colegio. Pero esto no es un problema ya que no varia mucho de hacer una presentacion con el Powerpoint, de hecho hay una funcion de MS Word para exportar un documento como web. Esto es lo genial de html, es realmente simple.
El problema viene que muchos intentaron hacer sitios un poco mas complejo o con una idea mas amplia que solo dar a conocer una empresa. Muchos intentaron dar servicios a traves de la web, vender productos, o armar redes sociales, pero siguieron usando el frontpage o algun editor parecido. Hoy en dia vemos cantidad infinita de estos sitios que se caen a pedazos pero por antiguedad por suerte, o vaya a saber porque, tienen un trafico superior a lo que realmente se merece el producto que están mostrando. No hablo solo de una cuestión estética sino un sitio en general, vemos sitios con trafico de 400000 visitas mensuales donde ni siquiera aplicaron uno de las herramientas basicas que nos brinda un lenguaje del lado del servidor como php, como es la inclusión de partes de nuestra web para no tener que repetir el header, menu, footer, etc. Sitios donde cada pagina es toda una web, donde el mismo archivo se procesa toda la informacion que se va a mostrar, se envian mails y se genera el html a mostrar. No estoy hablando de aplicar MVC, sino un poco de sentido comun.
Me sorprenderia que algun programador con mas de un año de experiencia no haya visto sitios como este que doy como ejemplo.
La verdad es que en mis desarrollos anteriores cometi muchos errores (en los actuales tambien), pero siempre tuve la intencion de hacer lo mejor posible. Siempre busque la forma de mejorar, y veo que esto no le paso a todo el mundo.
El tiempo que estuve en Easytech valore siempre las ganas de todos de hacer el mejor desarrollo posible, esto encabezado por los jefes, y seguido de toda la cuadrilla de programadores, no había un solo eslabon en la cadena de produccion que no le interesara hacer el mejor desarrollo. Creo que se lograron grandes cosas y realmente aprendi muchisimo.
Es importante aunque sea una temporada corta encontrarse con gente de estas caracteristicas, porque mas alla de que uno tenga mas experiencia que otros, siempre vas a aprender algo nuevo.
La contra cara de easytech es bothmedia, lamentablemente herede un desarrollo de ellos, y dia a dia estoy sufriendo por cada error que encuentro, increiblemente el desarrollo no es de los 90, es de ahora, creo que lo terminaron hace 7 u 8 meses, sin embargo es increible ver como hay gente que se vende como una super consultora internacional, hace desastres. No son mas que diseñadores de paginitas web con su super frontpage 2022, que copian y pegan codigo de phpclasses, o hotscripts, ni saben para que sirven, pero esto les sirve para considerarse programadores PHP. No conozco a la gente que esta a cargo de esta consultora, mi intención no es desprestigiar, lamentablemente este ultimo mes estuve lidiando con este software, y quizás me volví intolerante con bothmedia, pero tengo mis razones.
Creo no exagerar en las criticas como la gente de scriptia.net
Pero devuelta aclaro, todos fuimos novatos, cometimos errores, hicimos DESASTRES, pero siempre a pesar de nuestras limitaciones tenemos que buscar perfeccionarnos.
Para mi una forma de perfeccionarme fue usar un framework, ser estricto con el estilo de mi codigo, ser estructurado en algunos sentidos, y flexibles en otros. Buscar soluciones en la experiencia de otros usuarios, ver un problema y tratar de ver las diferentes posibilidades.
Es importante que aprendan a leer directamente de la documentacion oficial. Leer blogs para aprender sobre la experiencia de otros usuarios. Estar en alguna lista o foro donde se toquen los temas que te interesan. Aprender todos los puestos que involucran el desarrollo web, Diseno, Programacion, DBA, SysAdmin, esto nos va a dar una amplitud mayor a la hora de plantear una nueva arquitectura. Busquen nuevas herramientas, esten al tanto de las novedades. Apoyen el Open Source, que el les va a retribuir de forma que ni se imaginan.
Bueno es todo, sufienciente por hoy, ya me descargue, esa es la magia de tener un blog.
December 8th, 2009 Category: Programacion SEO Zend Framework
2 Comments »
Me paso muchas veces de hablar con gente que necesitaban un sistema web o una web institucional, y al comentarles que iba a utilizar Zend Framework mucho coincidían en preguntar, si Zend Framework era compatible con SEO.
Si bien esta pregunta puede sonar ridícula para la mayoría de los programadores web, es una realidad que hay muchas personas que piensan que ZF o cualquier framework puede llegar a tener problemas con lo que a SEO se refiere.
La respuesta es fácil, si, ZF es compatible con SEO, por muchas razones, pero principalmente porque el SEO no es afectado por la tecnología que uses del lado del servidor para procesar los pedidos.
Hace un tiempo que estoy siguiendo bastante el tema de SEO, aprendí mucho este ultimo año sobre las manías de los buscadores, y como lograr posicionase mejor. Es un trabajo de hormiga y requiere mucho trabajo de análisis, por mas que nosotros como desarrolladores armemos toda la tecnología necesaria para hacer un buen SEO, todo esto no sirve sin alguien que este encima de lo que buscan o necesitan los usuarios. Es impresionante ver como cambiando alguna palabra en el contendio url, h1, o title, puede variar tanto el resultado de búsqueda. Pero centremonos en la parte tecnológica.
ZF nos brinda muchas herramientas para que podamos implementar un buen SEO en nuestros sistemas web. En la version 1.8 o 1.9 no recuerdo bien se agrego un helper para generar sitemaps. Si bien no es ninguna ciencia hacer un sitemap de nuestro contenido nunca viene mal una ayudita o helper
. También se agrego un helper para los breadcrumbs quie es otro de los eslabones para un buen SEO. Con Zend_Layout podemos editar facilmente nuestros metas y title, pudiendo controlar facilmente desde nuestros action el valor que van a tener estos en la pagina a mostrar. Pero sin duda uno de los mas importantes es Zend_Controller_Router, con este componente nosotros podemos enrutar todos nuestros actions, con url mucho mas amistosas y lo mas importante, es super facil de configurar. No solo rutas estaticas, sino dinamicas, que varíen dependiendo de algún parámetro que podamos capturar con alguna regular expresión.
Hace poco una familia amiga me pidio hacer un sitio con un catalogo de revistas importadas para empezar a captar clientes por internet y no depender de la forma tradicional que era distribuyendo revistas a los canillitas de Buenos Aires.
Lo particular de esto es que es el unico distribuidor de revistas importadas del pais, lo que lo hacia bastante atractivo para captar clientes por internet. La idea del sitio era bastante basica, un catalogo de revistas importadas online, la gente que estaba interesada los llamaba por telefeno y se les acerca al canillita mas cercano. Pero creo que le dimos una vuelta de rosca mas al sitio refinandolo para que realmente sea atractivo para google.
Todavia hay varias cosas que estamos refinando pero el sitio ya tiene a unas pocas semanas de estar online suficiente visitas por google para saber que el esfuerzo valio la pena.
Los puntos que tuve en cuenta para lograr esto son simples, una organizacion clara del contenido por categorias un buscador y una forma facil y rapida de comunicarse con los empleados de la distribuidora. Es importante tambine un interlinkeado de contenido, por eso en los detalles de las revistas no solo se sugiere otras revistas que esten en la misma categoria sino tambien busquedas relacionadas.
Usar un motor de busqueda que genere una url por cada busqueda y hacer que esos links sean indexables por google es uno de los recursos mas comunes, por eso hoy en dia vemos sitios como ar.emagister.com con mas paginas que Taringa. Siendo esto un poco ilogico ya que taringa tiene miles de usuarios generando contenido e emagister argentina unos cuantos data entries. Pero este es un recurso totalmente legal, y util, ya que no solo generamos mas url para nuestro sitio, y mas contenido, sino que ademas generamos urls con las palabras claves que usan nuestros usuarios para llegar al contenido.
Todo esto no tendria sentido si solo agregaramos el contenido al sitemap, tambien es necesario darle fuerza a traves del interlinkeado como es en el caso que les estoy presentando.
El mundo de SEO es muy interesante debido a los resultados que obtenemos con el. Pero tambien nos ayuda a hacer mejores web, a veces vamos a sufrir un poco de spam en el contenido con urls rozando el limite de lo tolerante o h1 que superan el ancho total de una pagina, pero esto seguramente sea penalizado en algun momento con mas firmeza por los buscadores, y tengamos una web mejor.
Es importante que como desarrolladores tengamos en cuenta las mejores practicas para hacer web semanticas y validas. Con funcionalidades que permitan mayor usabilidad.
Zend Framework en cada release nos da nuevas herramientas para llevar esto a cabo, pero el exito que tengamos va a depender de como nostros implementemos estas herramientas.
El sitio que les comentaba es http://www.revistasimportadas.com no hace falta mucha perspicacia para darse cuenta que tambien el nombre el dominio fue elegido para favorecer el SEO.
December 8th, 2009 Category: Internet
5 Comments »
Hace un tiempo atras el unico podcast que veia era Pindonga tv, por alguna razon que nunca me entere dejo de emitir. Hace unos dias mis feeds se llenaron de post que hablaban sobre el regreso de Pindonga.
Pindonga TV basciamente es un podcast de actualidad sobre internet. Siempre desde un lado divertido. Y realmente siempre se esfuerzan por ser creativos. En este ultimo capitulo subieron un poco mas la apuesta y realmente quedo un producto muy bueno.
El primer capitulo de esta nueva etapa me facino, lo suficiente para escribir una entrada que no tenga relacion con el desarrollo web en este blog.
En este capitulo participan Bloggers famosos, entre ellos Cristian de Maestros del Web, que ustedes conoceran mejor que yo, pero lo realmente genial es como esta armado, la historia.
Es interesante ver ademas el crecimiento de este genero. Muchos estan trascendiendo los blogs para hacer podcasts, como es el caso de FORAT, un excelente blog taller sobre linux, que ahora tiene podcast, Vacasvolando.com es otro ejemplo, que se hizo famoso cuando contaron “La verdadera historia de Taringa!”, y que hoy en dia tienen varios podcast sobre diferentes temas.
Este es un generemo en crecimiento constante y seguramente este crecimiento seguira de forma exponencial si seguimos encontrando productos de calidad como el de Pindonga.TV.
Viendo el lado tecnologico creo que les falta un poco mas de desarrollo a su web, es demasiado simple. Creo que un poco de trabajo podria mejorar muchisimo la usabilidad.
En cuanto a lo comercial me llamo mucho la atencion no ver publicidad ni nada parecido. Tampoco se esforzaron mucho por el SEO.
Ya veremos con el tiempo como sobreviven este tipo de proyecto.
Vean el video en pindonga.tv
December 3rd, 2009 Category: Programacion Zend Framework
7 Comments »
Cron para Backup y Optimizacion de tablas con PHP + Zend Framework
Hace mucho no escribía un post, y quiero volver a retomar el habito con este pequeño scripts realizado con Zend Framework para optimizar todas las tablas de una base de datos mysql y además generar un dump por cada tabla, los resultados los vamos a comprimir para que no ocupe espacio innecesario.
Mantener un backup de nuestras tablas es mas que recomendable, uno nunca sabe cuando lo va a necesitar, sobre todo porque es muy fácil implementar un sistema automatico para generar backups como vamos a ver a continuacion.
En este post aunque es corto quiero demostrar que es posible realizar lo siguientes puntos:
1- Correr php desde la consola de linux
2- Correr Zend Framework desde la consola ( si es posible! ) y usar componentes de Zend Framework sin la necesidad de usar MVC, Zend_Application.
3- Realizar backups diarios de sus base de datos.
1- Correr php desde la consola de linux.
Esto espero que no sea una ciencia para ninguno, realmente es muy fácil. Creamos un scripts antes de los tags <?php ?> agregamos #!ruta_de_php en mi caso seria #!/usr/bin/php con esta linea le decimos a quien llamar para ejecutar el código que viene a continuación.
Un ejemplo simple seria el siguiente.
#!/usr/bin/php
echo "Estoy imprimiendo directamente en la consola";
Guardamos el archivo como test.php, y le damos permisos de ejecución con el comando
$ chmod a+x test.php
Ahora lo ejecutamos
$ ./test.php
El resultado es el siguiente
2- Correr Zend Framework desde la consola ( si es posible! ).
Zend Framework mas allá de un montón de herramientas que nos brinda y formas de trabajo. Así como Zend_Application, Estructura de directorios organizadas, MVC, etc tambien nos permite usar sus componentes individualmente.
Si nosotros quisieramos usar Zend_Db, y todos los beneficios que este trae, solo necesitamos una configuracion mínima y listo. Podemos usar Zend_Db sin usar MVC o Zend_Application y mantener nuestra estructura de directorios.
En este caso voy a usar Zend_Db para conectarme a una base y conseguir un listado de tablas.
El código es el siguiente.
#!/usr/bin/php
set_include_path( implode( PATH_SEPARATOR, array(
realpath( 'library' ),
get_include_path(),
)));
require_once( "library/Zend/Db.php" );
/** Conectamos a la base de datos con ZF */
$db = Zend_Db::factory( 'Pdo_Mysql',
array(
'adapterNamespace' => Zend_Db_Adapter,
'dbname' => 'mysql',
'host' => 'localhost',
'username' => 'test',
'password' => 'qwerty'
)
);
$db->getConnection();
$rowset = $db->fetchAll( "SHOW TABLES" );
print_r( serialize( $rowset ));
Para el ejemplo yo use Pdo_Mysql pero puden usar el adapter que quieran. Yo serialize el array $rowset para que sea mas claro en la imagen que se ve a continuacion que muestra todas las tablas que tiene la base de datos mysql.
3- Incentivar a realizar backups diarios de sus base de datos.
Es muy comun que una tabla se rompa o alguien cometa algun error y se pierdan datos o dañe una tabla o toda una base. Hay mil factores que pueden hacer que necesitemos un backup reciente de nuestra base. Si creamos un dump entero de nuestra base cuando queramos recuperar una tabla se nos va a complicar un poco realizar esta tarea sin tener que abrir un archivo que vaya a saber cuando miles de mega ocupe. Por eso es conveniente hacer backup de las tablas individualmente, asi en el caso que tengamos problemas con una sola tabla recuperar esa tabla se hace una tarea facil .
Hacer un script que genere este backup diariamente no es complicado, creamos el scripts, y configuramos el cron para que se ejecute a la hora que tengamos la menor cantidad de visitas.
Este script esta en PHP, en realidad la manera mas optima seria hacerlo en shell scripting pero tambien queria demostrar los 2 puntos anteriores.
Mi script es muy sencillo y es facil de entender. Primero trae todas las tablas de la base que estamos usando. Ejecutamos un optimize para cada tabla, inmediatamente generamos un backup de esa tabla en una carpeta temporal, cuando terminamos de hacer estas acciones con todas las tablas comprimimos la carpeta y borramos la carpeta orginal, para que no ocupe espacio.
Para ejecutar los comandos de linux use noFollow y no me preocupe mucho en validarlo, cada uno puede buscar la forma de optimizar el codigo.
El script cuenta con dos archvios. Un application.ini donde guardo toda la info de la base de datos
config/application.ini
[db]
adapter = Pdo_Mysql
params.adapterNamespace = Zend_Db_Adapter
params.host = localhost
params.username = test
params.password = “qwerty”
params.dbname = mibase
params.port = 3306
params.options.autoQuoteIdentifiers = 0
Y el script completo
#!/usr/bin/php
set_time_limit( 0 );
set_include_path( implode( PATH_SEPARATOR, array(
realpath( 'library' ),
get_include_path(),
)));
require_once( "library/Zend/Config/Ini.php" );
require_once( "library/Zend/Db.php" );
/** Conectamos a la base de datos con ZF */
$applicationConfig = new Zend_Config_Ini( 'config/application.ini' );
$db = Zend_Db::factory(
$applicationConfig->db
);
$db->getConnection();
$rootPath = "/home/backup/db/";
$destination = $rootPath . date("Y.m.d") ;
mkdir ( $destination );
$config = $db->getConfig();
$rowset = $db->fetchAll( "SHOW TABLES" );
foreach ( $rowset as $row ){
/** Optimizamos la tabla */
$query = "OPTIMIZE TABLE " . $row['Tables_in_' . $config['dbname'] ] ;
$db->query( $query );
$path = $destination . "/{$row['Tables_in_' . $config['dbname'] ]}." . date("Y.m.d") . ".sql" ;
/** Generamos un dump de la tabla */
system( "mysqldump --opt -u {$config['username']} -p{$config['password']} -h {$config['host']} {$config['dbname']} {$row['Tables_in_' . $config['dbname'] ]} > $path " );
}
/** Comprimimos la carpeta con los dump de la fecha y borramos la carpeta */
system( "tar zcf {$destination}.tar.gz {$destination}" );
system( "rm -rf $destination" );
$db->closeConnection();
echo "ndone!nn";
Antes de ejecutar el script tienen que crear la carpeta /home/backup/db y darle permisos de escritura
$ sudo mkdir -p /home/backup/db
$ sudo chmod -R a+rw /home/backup/db
lo agregamos al crontab y listo.
$ sudo vim /var/spool/cron/crontabs/root
Agregamos la siguiente linea para que se ejecute todos los dias a las 2:20 am
20 2 * * * /var/www/html/scripts/cronOptimize.php > /dev/null 2> /dev/null
Y listo
Recuerden que tienen que tener instalado php5-cli
$ sudo aptitude install php5-cli



