domingo, 30 de diciembre de 2012

La Web 3.0


¿Conoces las versiones de la web? Si bien esto no surgió de forma oficial más bien parece algo de marketing, ni es un término acuñado por programadores, aunque pienso que si es buena idea llamar o distinguir los periodos o “eras” en la web donde ha evolucionado y tomado drásticos giros, tenemos la “web 1.0” donde todo era estático y solo se presentaban las paginas como contenido de un libro o revista tal vez con algo de animaciones pero nada más. Luego llego la “web 2.0” donde hubo un punto de inflexión se empezó a brindar dinamismo a las paginas, con lo que ahora puedes interactuar con ellas, ejemplos de ello son los webs como facebook, blogger, google plus, google docs, youtube y un largo etc.


Pues bien estos términos cada vez se empiezan a reconocer y a aceptar más, la web 3.0 es el paso a la web semántica como también se le conoce y es más aceptada que el primero por la comunidad profesional, es una web con significado es decir ahora las web podrán interactuar entre ellas y ofrecer contenidos mas inteligentes.

Hasta ahora las web tenían un código (HTML) que es leído por el navegador y este dibuja la pagina en pantalla, pues ahora se trata de agregar un segundo código que sea legible por los motores de búsqueda y cualquier servicio o pagina web que integre un “agente inteligente” para esto se harán uso básicamente de tres lenguajes HTML5, SPARQL,RDF y OWL que son los que promueve la W3C el consorcio internacional que vela por el orden en el internet. ¿Qué se consigue con esto? Pues con esto en un futuro los usuarios podrían realizar búsquedas verdaderamente inteligentes, literalmente le podrás preguntar a google como si fuera otra persona y te responderá con contenido correcto y exacto, o podrás usar algún servicio web que por ejemplo te brinde información de las agencias de viajes y que en cierta ocasión necesites saber sobre “vuelos para mañana” hacia “Londres” que partan a mas tardar “mañana” con ello se te desplegara un listado de agencias de vuelo que están dando vuelos con esas características, si eso lo intentas justo ahora, no obtendrás el resultado deseado, ya que la web semántica aun está en fase de desarrollo. Debemos estar preparados para recibirla ya que como lo hizo la 2.0 esta también revolucionara la web, no vaya a ser como con la web 2.0 donde a muchos se nos fue el tren de las oportunidades.

mas detalles aqui y aqui

Saludos y hasta la próxima.

jueves, 27 de diciembre de 2012

Algoritmos Geneticos



Pocos saben que la controvertida teoría de la evolución tiene aplicaciones reales en las actividades humanas, si así es ni mas ni menos. En la ciencia de la Informática, se han estado aplicando las bases teóricas de la evolución para resolver problemas tan complejos que dejan sencillamente pasmados a sus diseñadores, aproximadamente desde los 70's.


Esta antena (imagen a la derecha) de aspecto extraño es producto de un AG y funciona a la perfección en el ambiente al que fue destinado, fue "creada" por Altshuler y Linden en 1997 y supero los diseños de los ingenieros.

 El objetivo de este post no es discutir si es o no valida la teoría de la evolución, lo que es un echo contundente es que se le aplica a la vida real, con resultados que dejan sin palabras a cualquier persona, sin mas vamos al grano.

 Un algoritmo genético se trata de una serie de pasos para resolver un problema, pero usando los postulados de la evolución que a groso modo, se trata de lo siguiente:

 Primero obtener una forma de codificar (material genético) las características de la solución (individuo) con el objetivo al mismo tiempo de que este pueda heredar sus características (genes) a las próximas generaciones, echo esto se inicia el algoritmo:

 Primero obtener una población inicial ya sea de soluciones que se sabe funcionan y/o una generada aleatoriamente, por lo regular se usa la segunda opción.

 Segundo se fija una condición de termino, en donde se evalúan las soluciones para ello una función llamada de aptitud se encarga de ver que tan buenas son las soluciones. El algoritmo genético se deberá detener cuando se alcance la solución óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el AG un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población.

 Tercero mientras tanto selecciona aquellos que resultaron las soluciones mas "buenas" después de ser evaluadas.

 Cuarto se hace un cruzamiento de los individuos seleccionados.

 Quinto se induce una mutación aleatoria en el momento de su cruzamiento.

 Sexto se reemplaza la generación anterior y se vuelve al segundo paso.

 Los algoritmos genéticos básicamente son buscadores de soluciones, solo que son capaces de generar las mismas y de forma múltiple (con muchas posibles soluciones).

 Y para muestra un botón, citare textualmente incluso con faltas ortográficas XD de la siguiente fuente http://the-geek.org/docs/algen/


"Keane y Brown 1996[43] utilizadon un AG para producir un nuevo diseño para un brazo o jirafa para transportar carga que pudiese montarse en órbita y utilizarse con satélites, estaciones espaciales y otros proyectos de construcción aeroespacial. El resultado, una estructura retorcida con aspecto orgánico que se ha comparado con un fémur humano, no utiliza más material que el diseño de brazo estándar, pero es ligera, fuerte y muy superior a la hora de amortiguar las vibraciones perjudiciales, como confirmaron las pruebas reales del producto final. Y sin embargo ``Ninguna inteligencia produjo los diseños. Simplemente evolucionaron'' (Petit 1998[43]). Los autores del artículo comentan además que su AG sólo se ejecutó durante 10 generaciones, debido a la naturaleza computacionalmente costosa de la simulación, y la población no se había estancado todavía. Haber proseguido la ejecución durante más generaciones habría producido indudablemente mayores mejoras de rendimiento."

 Y las aplicaciones son innumerables, en el mismo sitio que mencione se pueden ver una gran cantidad de ellas, creo que cualquier programador debería acercarse a esta técnica salida de las investigaciones en el campo de la inteligencia artificial, y podría sacarle mucho jugo. Yo todavía no encuentro donde podría ser aplicado en mi trabajo XD

 Saludos y hasta la próxima.

lunes, 3 de septiembre de 2012

Apache 2.4 vs Nginx en un entorno mas real

Nginx es un servidor web, que ultimamente a tomado mucha fuerza y ahora a superado a IIS aunque por muy poco en la cuota de uso en los servidores web del mundo, con lo que ahora es el segundo mas usado, aunque Apache mantiene y por mucho el liderato.

Existen muchos benchmarks donde se compara Nginx contra Apache 2.2 una version desde luego que debe ser tomada por obsoleta, en dichas comparativas Nginx aplasta en su capacidad de respuesta y consumo de recursos.

Pero recientemente salio la version 2.4 (recientemente en realidad ya lleva muchos meses XD) con lo que la historia cambia, si bien Apache 2.4 no fue lo que algunos esperaban (me incluyo), si que hubo mejoras importantes en el rendimiento. Si bien la mayoria de estas pruebas son injustas, ya que prueban a nginx el solo y sirviendo una simple pagina estatica vs apache con muchos modulos cargados, solo algunas pruebas son dignas de tomarse en serio.

Pues bien, decidi probar yo mismo y no dejarme guiar por lo que algunos dicen y que se han casado con Nginx, a lo mejor podran decir que yo me case con Apache, pero la verdad es que hay mas puntos a favor de Apache que de Nginx, aqui van:

1.- Apache es mas robusto, esto por la modularidad que le otorga un nivel mejor que Nginx.

2.- Un web server no se mide por la importancia de los sitios web que lo usan, muchos fanboys de Nginx esgrimen que sitios como github lo usan, pero ¿no creen que saldria perdiendo nginx si se trata de medir un webserver por los sitios que lo usan? ¿cuantos sitios usaran apache? así que esto no es valido para decidir que web server usar.

3.- Mejor seguridad, Apache en definitiva es mas maduro en este aspecto.

4.- aprovechamiento de recursos, aquí es donde mas pretenden fanboys desbancar a Apache, pero vamos a cuestionar que tan validos son muchos de los benchmark que pululan al respecto y que por supuesto algunos se muestran parciales.

Mi punto en este post se resume a una sola pregunta ¿Un web server al día de hoy solo servirá paginas estáticas, que hay entonces de la configuración mas común PHP + MySql?

Exacto, en eso consiste mi benchmark. Ok empezamos, en un equipo con Lubuntu 12.04, con la siguiente configuración Hardware:

Atom n455 a 1.6 Ghz
2gb memoria ram

No es precisamente un servidor, ni un equipo ideal para ello, pero esto no debería ser obstáculo para un benchmark y no hay razón de sustento para creer que una configuración así de baja en potencia, altere de algún modo el resultado de las pruebas, simplemente se ajustan sendas pruebas para un equipo de este tamaño.

Se instalaron los siguientes entornos

nginx + php5-fpm + mysql + memcache

y

apache + php5 + mysql + apc

El script que se uso para las pruebas es uno que realizaba una conexión a MySql y consultaba 2 registros en una tabla para luego mostrar dichos registros.

Se uso la herramienta para benchmarks llamada ab que se instala como apache2-utils se realizo exactamente la misma prueba en ambos entornos.

El resultado puede resumirse en un par de lineas:

nginx        378 request por segundo
apache      456 request por segundo

Queda claro que Apache responde mejor en situaciones MAS REALISTAS y no simples benchmark que no reflejan ni de lejos lo que podría ser una situación de producción.

Una disculpa si alguien se molesta con esto, pero es la realidad, si me equivoco en algo no duden en marcarme lo, no soy un experto en benchmarking pero creo que los resultados son obvios.

La razón por la que nginx no pudo en una situación mas realista, es que su forma de funcionar es radicalmente distinta, se basa en el echo de que nginx atiende los request, pero todo lo referente a php lo manda a un servicio php escuchando en el puerto 9000 el cual esta operando con todo el tramite que implica el protocolo TCP, es aquí donde ocurre el cuello de botella.

Nginx le veo futuro, siento que llego para quedarse, pero por ahora, Apache sigue siendo el web server por excelencia, por años servidores web han ido y venido bajo la todo poderosa mirada de Apache.

Saludos.

sábado, 1 de septiembre de 2012

PHP correcto (parte 3)

Bien, la vez anterior vimos detalles un poco técnicos sobre como desarrollar aplicaciones mas profesionales.

Ahora veremos lo que es mas encumbrado en el desarrollo, se trata de TDD y BDD, son acronimos en ingles los cuales son Test Driven Development (desarrollo guiado por pruebas) y behavior driven development (desarrollo guiado por pruebas) se tratan de procesos de desarrollo de software que deben ser ampliamente conocidos por los ingenieros y licenciados que estudian carreras afines, desde luego esto no esta limitado a ellos y no debe ser un pretexto no contar con dicho nivel de escolaridad para no aplicarlos.

Se trata de no solo una buena practica si no de ingeniería de software, solo así daremos mucha calidad a nuestros desarrollos.

En TDD invertimos la forma tradicional de programador donde se escribía el código y luego las pruebas, ahora primero son las pruebas y luego el código, con lo que aseguramos que nuestro código salga bien y a la primera. Para este tipo de desarrollo se puede usar PHPUnit o Simpletest que también es un framework para esta tarea.

Cabe señalar que después de esto, no es suficiente y podría necesitarse hacer lo que se llama pruebas funcionales, donde se prueba el sistema en conjunto (ensamblado), ya no son solo pruebas unitarias, ahora son sobre el funcionamiento del sistema. Para ello disponemos de Codeception.

En BDD el desarrollo se orienta al comportamiento que debe tener nuestra aplicación y existen dos caminos, una es Story BDD donde se enfoca al negocio a como deben comportarse las características de nuestra aplicación.

Mientras que en Spec BDD se enfoca en el comportamiento técnico que deberá tener el código, lo que se espera que hagan nuestras funciones o métodos, para esto tenemos la herramienta PHPSpec.

Conclusión.

Finalmente Escribí esta pequeña guía, solo para servir de orientación de por donde empezar, finalmente es el programador quien elige el camino, como en el principio vuelvo a reiterar, no existe una forma canónica de programar en PHP, pero si una manera de ser mejores y mas profesionales programadores. Muchos de los conceptos si no es que todos, son aplicables a cualquier lenguaje no solo para PHP.

Saludos.

domingo, 26 de agosto de 2012

PHP Correcto (parte 2)

Continuando con la mini guía, para conseguir una mayor eficiencia y eficacia en nuestras habilidades como programadores.

El el primer post, hablamos de los pasos a seguir para ser buenos programadores, los enumeramos y seguiremos con la numeración, pero antes un paréntesis, hablamos de que debemos elegir un framework, empezar a usarlo y familiarizarse con el, esto es absolutamente necesario si queremos ser mejores programadores, es importante notar que no es bueno hacernos el programador macho que todo lo puede hacer y desde cero, no tiene nada de malo crear grandes cosas "ensamblando", como programadores debemos aprender de otros, los programadores son una comunidad. No, no hablo de los script kiddies que se la pasan siguiendo tutos, copiando y pegando código sin entender nada, no estoy diciendo que seguir tutos y que copiar y pegar código este mal, si no que hay que experimentar con el código copiado, pero sobre todo leer mucho, mucha teoría, la practica no se comprende sin teoría previa de lo contrario no sabrás que hace lo que acabas de copiar y pegar.

Bueno después del paréntesis, entremos en detalle. los siguientes pasos:

4.- Leer y aprender sobre patrones de diseño, los siguientes, evidentemente no son todos, pero son los mas usados y muchos se mezclan:

         MVC (Model-View-Controller) el patrón modelo vista controlador, consiste en dividir nuestras aplicaciones en 3 capas, a saber:

                      Modelo que cosiste en toda la lógica de negocio, mas fácilmente en la forma como se almacenan nuestros datos, como se recuperan, hacer una abstracción de estos datos es lo mas usual, por ejemplo usar un ORM que es un mapeo objeto relacional, donde las entidades de la base de datos se transforman en objetos dentro del programa.

                      Vista es la capa de presentación de datos, donde no se mezcla nada del funcionamiento o tratamiento de los datos.

                      Controlador se encarga de responder a los eventos generados por el usuario a través de la vista, procesar datos "servidos" por el modelo, en general es la lógica de funcionamiento de nuestro programa.

          Este patrón, ofrece muchas ventajas a la hora de escalar nuestros programas, ademas de que permite a equipos de desarrollo trabajar de forma mas eficiente y ordenada.

         DI (Dependency Injection) inyección de dependencias, consiste en que el acoplamiento o dependencia entre nuestros módulos (clases) sea suministrada a través de la parametrizacion en objetos de las clases que requieran, en vez de que ellas mismas los creen, es decir, la clase A necesita a la clase B, inyectar esa dependencia seria que por medio del constructor de A o un setter se le envié (parametrice) dicha dependencia, ejemplo:
                     objeto = new ClaseA(new ClaseB())
                     //por un setter
                     objeto = new ClaseA()
                     objeto.setClaseB(new ClaseB())
         La forma mas común de implementar este patrón es por medio de un contenedor de dependencias, que suministra los objetos a cada clase con forme los necesitan, esta relación de dependencias puede ser plasmada en un fichero de configuración, esto va muy ligado a la inversión de control.

         IoC (Inversion of Control) Inversión de Control es un concepto un tanto escurridizo, consiste en simple y llanamente invertir el "flujo del programa" tipicamente estamos acostumbrados a la programación imperativa donde, le decimos como hacer las cosas a un modulo o programa, luego hacemos procedure calls o llamadas a funciones durante el funcionamiento de nuestro programa, en la inversión de control esperamos respuestas, ejemplo: en el patrón anterior (DI) vimos que la forma de implementar DI era por medio de un contenedor de dependencias, pues bien, este contenedor de dependencias es un IoC ya que es el quien llama a nuestras clases, esto suele usarse cuando una biblioteca implementa estructuras de alto nivel y es el usuario (programador) quien implementa las tareas de bajo nivel, esto es muy común en los frameworks de desarrollo, donde un contenedor se encarga de crear las instancias de los objetos creados por el usuario.

        existen otros que también son importantes de estudiar, como son singleton, factory, strategy, adapter y decorator, aquí pueden ver una explicación excelente para entenderlos: http://www.baluart.net/articulo/introduccion-a-los-patrones-de-diseno-con-php 

5.- A cuantos de nosotros no nos paso, que mientras codificamos nuestros scripts, tendíamos a probarlos directamente sobre nuestro navegador, tratando de simular la actividad de un usuario. Pero luego sufríamos cuando nos aparecían errores que no sabíamos de donde salían, conforme nuestro desarrollo crecía, se volvía mas tortuoso este tema. Esto nos hace perder tiempo y esfuerzo, la razón es porque en realidad esta forma de desarrollar es muy improvisada si bien la mas rápida para desarrollos cortos, para largos es una tortura. Una buena practica de programación, es aprender a manejar las excepciones y a implementar pruebas unitarias.

            Las pruebas unitarias no son mas que el testeo de rutinas que realizan una tarea concreta, pero desacopladas totalmente de la aplicación donde serán destinadas, de forma que al hacerle pruebas únicamente a un "trozo" de código, sabremos exactamente donde esta el error en caso de que se presente, ademas de que sabremos hacerle todos los "supuestos" cosa imposible de hacer una vez "montada" toda la aplicación,  una herramienta que nos ayuda a esta tarea es PHPUnit, este es un framework para implementar nuestras pruebas. Al principio aprender a usar este framework nos resultara una perdida de tiempo o que realmente no sirve, pero a la larga, ahorrara mucho esfuerzo y con esto logramos darle una robustez a nuestros desarrollos como nunca antes se la habíamos dado, esto diferencia a los buenos programadores de los demás.

            Control de excepciones, con esto hacemos que nuestro programa no se paralice completamente, sabemos que sucede exactamente y podemos tomar decisiones al ocurrir una excepción, a esto se le llama cachar una excepción. Otro uso es que si tenemos un modulo que sera usado por otro, con esto podemos avisar a dicho modulo que ha ocurrido un error a esto se le llama lanzar una excepción. PHP en sus versiones recientes, permite el manejo de las excepciones, aunque todavía no lo hace con las funciones nativas, si podemos hacerlo con las nuestras e incluso personalizarlas. Con esto damos mayor robustez a nuestros programas también.

Continuaremos en la próxima con lo que considero la cima de esta montaña.

Saludos. :)


jueves, 16 de agosto de 2012

PHP correcto (parte 1)

Bueno, después de ausentarme mucho tiempo, estoy de vuelta :)

Ahora les hablare de la manera correcta (como yo lo entiendo) de desarrollar en PHP. Muchos programadores, me incluyo, comienzan mal, pero no esta mal, es un proceso natural, lo que si estaría mal, es estancarse y conformarse con una forma de programación. Si bien no existe una forma canónica de programar en PHP, si hay métodos para hacerlo mejor. Esto pretende ser una guía muy simple para orientar y así conseguir mayor eficacia y eficiencia en nuestros desarrollos.

PHP desde que lo conocí, ha sufrido muchisimos cambios, últimamente a tenido transformaciones muy notables, que hay cambiado por completo la forma de ver este lenguaje, en ultimas versiones se han integrado conceptos avanzados como son: traits, espacios de nombres, reflexión, paradigma de programación funcional (lambda), entre otros. Con esto PHP se vuelve cada vez mas poderoso y esto solo indica que es un lenguaje que permanecerá por muchisimo tiempo mas y dudo mucho que otras tecnologías lo alcancen, asi que quienes desarrollan en este lenguaje y obtienen ganancias por el, pueden estar tranquilos que va a durar muchos años mas como el lenguaje predilecto para la web.

Comencemos. Después de hacer código espagueti, uno termina preguntándose, si hay maneras de no solo hacer su código mas escalable y mantenible, si no de ser un programador mas productivo y profesional. PHP es muy flexible y permite infinidad de formas de lograrlo, pero se han desarrollado técnicas mas apropiadamente principios, patrones de diseño y herramientas tales como DI, IoC, mvc, frameworks, TTD, BDD, etc. que están mas que probadas, sin ir mas lejos los principales frameworks hacen uso de estos técnicas de ingeniería de software.

En forma de lista iniciaremos:

1.- Instalar el entorno mas actual de PHP y MySql (a estas alturas ya dominamos todos este tema).

2.- Elegir un framework de desarrollo, que nos permitirá implementar el mas importante paradigma de programación utilizado en la web y el cual es el MVC (modelo vista controlador) así como una abstracción de datos, entre otros. Esta elección queda a total discreción del programador, yo recomendaría el "oficial" zend framework 2 y uno que es increíblemente rápido y sobre todo sencillo de aprender, ademas de que es hispano, KumbiaPHP, aunque esta en versión beta es muy estable.

 3.- Estudiar sobre los principios de desarrollo, estas trascienden a un paradigma o patrón de desarrollo, hablamos de quizá las tres mas determinantes:

            DRY (Don't Repeat Yourself) conocido también como "no te repitas".

           "no reinventes la rueda" se basa en la premisa de que si estas por codificar una rutina para una tarea muy común, seguramente alguien, o mas bien debería decir, alguna comunidad ya lo hizo y mejor.

            KISS (Keep It Simple, Stupid) "mantenlo simple, estúpido" un poco agresivo pero necesario ya que muchos son necios en este tema y pretenden hacerse los "programadores machos" y crear códigos ilegibles e imposibles de mantener o algoritmos muy complejos para tareas que no lo requieren.

           SOLID este es especifico al desarrollo orientado a objetos, que como sabemos es el mas usado. Es un acronimo mnemonico en ingles de:
                      S - SRP (Single responsibility principle) los objetos tienen una única responsabilidad
                      O - OCP (Open/Close Principle) las entidades de software deben ser cerradas para su modificación, pero abiertas a su extensión.
                      L - (Liskov Substitution Principle) los objetos deben ser reemplazables por instancias de sus subtipos sin alterar el funcionamiento del programa.
                              I - ISP (Interface segregation principle) muchas interfaces especificas son mejor que una sola de propósito general.
                      D - DIP (Dependency inversion principle) se debe depender de abstracciones no de concreciones.
       
         aqui una explicación mas amplia del principio SOLID, se puede investigar uno por uno, para comprender los mejor. http://www.genbetadev.com/paradigmas-de-programacion/solid-cinco-principios-basicos-de-diseno-de-clases

Lo anterior fija las bases con las que nos guiaremos al codificar de ahora en adelante, desde luego hay que profundizar en estos temas.


Seguiremos hablando mas sobre esta pequeña guía, en próximas entradas.

Saludos.

jueves, 5 de abril de 2012

PHP en Andriod

Pues aquellos que estén interesados en desarrollar scripts en PHP y que se ejecuten en la plataforma Android como si lo hicieran en un PC con un servidor web, aquí esta este proyecto, se llama PHP for Android (PFA)

Esta app requiere para su instalación como mínimo la versión 1.5 de Android.

Que se habilite la opción "unknown sources" en la configuración de aplicaciones.

La instalación del entorno de scripts de Android (SL4A).

Para finalmente instalar el PhpForAndroid.apk

En su pagina oficial viene el manual de uso, y por supuesto el de instalación, esta es la dirección:

http://phpforandroid.net/start   las descargas se encuentran ahí y para mayor comodidad aquellos que cuenten con lector de código de barras podrán hacer el proceso automatizado.


Saludos y felices códigos :).

domingo, 12 de febrero de 2012

Python una alternativa 1

Ahora les hablare acerca de Python, un lenguaje que les podrá sonar a nuevo, pero es mas antiguo incluso que el famoso y legendario PHP. ¿Porque una alternativa a PHP o a otros como Java? bien empezaremos por hablar un poco de su historia.

Python fue creado a finales de los 80's por Guido Van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC. El nombre proviene de la afición de Guido por los humoristas británicos Monty Python. en 1991 Guido publica la versión 0.9 aun en etapa de desarrollo, llegando a la versión 1.0 en 1994.  Desde entonces se reconoce el continuo e importante rol de Guido, en la evolución que toma Python. Actualmente se encuentra en la versión 2.7.2 y la 3.2.2.

Hablemos ahora de sus características. Python es un lenguaje de alto nivel que se enfoca mucho en el código limpio y de fácil lectura, algunos creen que es de los que mas se acerca al lenguaje natural humano, es multiparadigma porque soporta orientación a objetos, estructurada y un poco de funcional, es fuertemente tipado lo que nos obliga a declarar las variables con un tipo de datos especifico, si bien es considerado como interpretado, su funcionamiento interno se parece mas a JAVA ¿o sera que JAVA es interpretado finalmente? no lo se, hay algo de confusión en ese tema.

Es un lenguaje mantenido por la Python software Fundation y tiene su propia licencia aunque es compatible con la licencia GNU, la comunidad de programadores es amplia aunque no como en PHP, si bien tiene una gigantesca colección de librerías con la que puedes hacer de todo como en PHP, la documentación de dicho lenguaje en Español es muy escasa.

Para mi en el ámbito web no existe ningún lenguaje mas potente que otro, solo programadores mas capaces que otros, tomar la decisión de usar Python es mas personal que técnica. Yo lo he empezado a usar en proyectos personales, por puro placer, esperemos que su uso se extienda mas y en los web host se ofrezca junto a PHP. Claro en un futuro que espero que no sea muy lejano. Si lo decides usar tu mismo veras sus ventajas y desventajas.

Bueno llegados a este punto, veremos en la segunda entrega, como instalar Python, analizaremos e implementaremos un framework de desarrollo web para el mismo (y no es django), que nos facilitara mucho las cosas, el cual tiene algunos plus como el de crear servlets como en Java para mejorar el rendimiento y en la tercera entrega veremos como configurar lo.

Saludos.

domingo, 5 de febrero de 2012

Persistencia en Javascript

La persistencia ya sean de variables o de objetos es un tema, que a mas de uno ha dado problemas sobre todo para quienes empiezan en la programación web. La naturaleza de la web impide que los datos se mantengan en cuanto cambiamos de script en el caso de PHP (para este caso ya vimos una forma fácil y rápida en el post persistencia de objetos en php) y cuando cambiamos de pagina en el caso de JavaScript.

Para el caso de JavaScript que es el que veremos ahora, podemos hacer 2 cosas, la siguiente no es la forma correcta pero es fácil y rápida:

usamos la propiedad name del objeto window, ya que este objeto se mantiene, incluso cuando se recarga la pagina, excepto claro cuando cerramos el navegador. La forma de usarlo seria tan fácil como sigue:

window.name='{"variable1": valor, "variable2": valor2}';

y para acceder posteriormente usamos la siguiente sintaxis:

window.access = new function ('return ' + window.name)();
window.alert(window.access.variable1);

Ahora la segunda forma es mas eficiente, pero se tiene que saber si el navegador soporta HTML5 y el DOM Storage, con esta forma podemos incluso conservar objetos y se usa de la siguiente forma:

localStorage.set('variable1', valor);
localStorage.set('variable2', valor2);

Para acceder a las variable usamos esto:

variable1 = localStorage.get('variable1');
variable2 = localStorage.get('variable2');

Fácil ¿no? incluso se pueden almacenar objetos, pero los tenemos que serializar con JSON#stringify y JSON#parse de la siguiente forma:

var obj = new Object();
obj.variable1 = valor;
obj.variable2 = valor2;
//serializamos
objetoS = JSON.stringify(obj);
localStorage.set('objetoPersistente', objetoS);

Y para traerlo de nuevo a la vida XD, hacemos lo siguiente:

objetoS = localStorage.get('objetoPersistente');
obj = JSON.parse(objetoS);
window.alert(obj.variable1);

Bueno hasta la próxima y saludos.

miércoles, 18 de enero de 2012

Ley SOPA

Hoy 18 de enero de 2012 algunos sitios como php.net en forma de protesta "bloquearon sus sitios" como ocurriría con la ley SOPA y esto es muy importante que lo sepan, en estas fechas se esta dando una ley llamada SOPA que su acronimo en ingles significa Stop Online Piracy Act. Supuesta mente pretende acabar con la piratería o el mal uso de los derechos de autor, con lo que el Internet tal como lo conocemos tu y yo cambiaría definitivamente a una red árida y desolada, se acabarían cosas como youtube (adiós a vazquezsounds y cosas por el estilo) Flickr, Wikipedia incluso el mismo Twitter, Facebook y los blogs no existirán. La forma en que usas internet cambiaría radicalmente y créeme que lo vas a extrañar. El Internet se volvería algo congelado como cuando en sus inicios a simples paginas informativas, ya que todo mundo se estaría cuidando de no incurrir en "faltas a los derechos de autor".


Pero eso no es todo, tecnologías como el torrent no existirían, imagina las tecnologías de las que nos podríamos perder, gracias a esta tonta ley que lo único que hará es detener el avance de la humanidad, ya que para mi Internet es un precursor del cambio hacia la civilización planetaria, esa es mi opinión y así veo a esta red, tal vez le doy mucha importancia o tal vez los demás no le dan la importancia trascendental que tiene el Internet, creo que Internet en un futuro se hablara como el que inicio el cambio en el planeta, ya que una comunicación eficiente como solo Internet lo permite, hace un acercamiento a las distintas culturas, formas de vida, de pensar, etc. y por lo tanto a una concientizacion ya de nivel planetario. Fenómenos recientes como los ocurridos en los países árabes, se dieron gracias a las redes sociales y no es un acontecimiento menor, ya que indican claramente hacia donde va la humanidad. Conceptos como la computadora planetaria y cosas por el estilo solo se podrían concebir a travez de Internet. Pues todo esto se podría acabar con esta ley.


Hay una pagina que me interesa que vean, ya que habla de como seria Internet si SOPA existiera hace 10 años
http://www.elmundo.es/blogs/elmundo/catalejo/2012/01/18/si-la-ley-sopa-hubiese-existido-hace-10.html

Este post de taringa me gusto como expone la vida en un futuro con SOPA impuesta
http://www.taringa.net/posts/info/13228699/Ley-Sopa-Vs-Internet-Libre_-_Que-podemos-hacer_.html

Como afectara la ley SOPA a México
http://www.cnnexpansion.com/tecnologia/2012/01/18/como-afecta-la-ley-sopa-a-mexico

CUIDADO!! así empezaron en estados unidos estas leyes, en México los panistas ya caminan hacia SOPA
http://www.proceso.com.mx/?p=295222


En la wikipedia hay mucha mas información sobre esta ley
http://es.wikipedia.org/wiki/Stop_Online_Piracy_Act

Que podemos hacer, ya que esta ley es en Estados Unidos, por lo tanto la no ser ciudadanos de dicho país, no podemos votar, pero por el momento lo que puedes hacer es difundir este mensaje a todos tus contactos, redacta emails notificando de este suceso a tus conocidos, posiblemente no tengas mucho tiempo o no tengas ganas o simplemente no te importa, créeme que después podrías lamentarlo mucho.

Si tienes amigos o conocidos que sean ciudadanos Estadounidenses, habla con ellos y convencelos de tomar parte activa en contra de esta ley o si eres uno y hablas español y ves mi post, por favor actúa una vez mas el mundo los necesita ;)

para ellos se hizo esta iniciativa, donde podrán votar en contra
http://americancensorship.org/

Saludos.

Todo sobre desarrollo web

Hola, pues resulta que andaba un día haciendo un cambio en un desarrollo web, cuando de repente olvide como hacer cierta cosa, así que me acorde de que en mi blog lo tenia, así que lo consulte. Entonces me di cuenta de que encontrar un tema en un blog es muy difícil, la naturaleza del mismo no permite una estructura mas organizada.

Así que se me ocurre hacer un especie de indice temático como post, bueno sin mas aquí el indice:

Persistencia de objetos en PHP
Crear un servidor web con php y mysql
Usar PHP y Flash
Metaprogramacion en PHP
Usar PHP y AJAX
DART un lenguaje para la web
Automatizar scripts de PHP en el servidor
Script escucha puertos
Empezar a usar HTML5
La optimizacion extrema final de PHP
Optimizar código PHP
Comparativa Python, Java y PHP
Optimizar PHP con APC
Instalar APC en Linux
Seguridad PHP la programación (parte 3)
Seguridad PHP la configuracion (parte 2)
Seguridad PHP la configuracion (parte 1)
Seguridad PHP el login

Saludos.

martes, 17 de enero de 2012

Persistencia de objetos en PHP

En algunas ocasiones puede presentarsenos el problema de que persista un objeto que hemos creado, al siguiente Script, pero esto por la naturaleza de funcionamiento del interprete de PHP no es posible. Hay una forma que tal vez ya conocen y que es muy fácil. Al igual que las variables se pueden hacer que persistan al utilizar sesiones, también es igual con los objetos. Aunque esta no es la forma mas adecuada para esto.

Bien, lo que tenemos que hacer es crear nuestra clase en un script aparte esto es muy importante ya que lo necesitaremos incluir en cada script en el que queramos que persista nuestro objeto, ejemplo:

Creamos el archivo clase.php y dentro.

class una_clase{
   private $mensaje;
   public function __construct{
       $this->metodo(){
   }
}

En un script distinto, instanciamos la clase y la serializamos en una variable de sesión, así:

creamos el archivo pag1.php y dentro.

include_once("clase.php");
session_start();
$objeto=new una_clase();
$_SESSION['elobjeto']=$objeto;
header("Location: script3.php");

posteriormente y en un tercer script, lo siguiente:

creamos el archivo script3.php

include_once("clase.php");
session_start();
echo $_SESSION['elobjeto']->mensaje; //aqui se mostrara el contenido de la propiedad mensaje;


Ya es cuestión de imaginación el resto, saludos.

lunes, 16 de enero de 2012

Servidor Web con PHP y Mysql

Hola, a todos.

Pues esta vez hablare rápidamente de como tener un servidor web con soporte a php y mysql entre otras cosas, de forma casera, para hacer nuestros primeros pininos en el desarrollo web, desde luego ya se pueden ir dando se cuenta que esta vez no escribo para lectores mas avanzados si no para aquellos que apenas empiezan.

Si bien ya hay muchísimos tutoriales en Internet, sobre esto, espero que les sirva de ayuda.

Bien uno de los programas mas usados es wamp, pero para mi gusto es mejor Xampp que tambien es bastante común, pero este no solo te ofrece PHP y Mysql aparte de Apache como servidor web, si no que también te ofrece SSL (protocolo para manejar conexiones encriptadas), Tomcat (el servidor para las paginas web desarrolladas en Java ¡¡ ojo !! no en javascript que es muy distinto, a lo mejor esto ya lo saben :)) un servidor FTP fileZilla, un servidor de correo Mercury y desde luego PHPMyAdmin para administrar las bases de datos, aunque prefiero otra opción para esto ultimo.

Xampp incluso tiene add-ons para ejecutar scripts en lenguajes como Perl y Python aunque este ultimo esta todavía en fase inicial.

Bueno este software es un todo en uno, con lo que instalaran todos estos componentes a sencillos clics en Windows claro esta, en esta dirección pueden descargar Xampp http://www.apachefriends.org/en/xampp-windows.html#641

La instalación es tan sencilla que seguramente perderían mas tiempo leyendo si les intentara explicar paso a paso la misma, asi que adelante con toda confianza, los espero XD.

Bueno ya que terminaron de instalar, ahora pueden ir aquí y descargar HeidiSQL http://www.heidisql.com/download.php es un FrontEnd o GUI que te permite manipular tu manejador de bases de datos en este caso MySql de forma totalmente gráfica, es muy cómodo y fácil de usar a diferencia de PHPMyadmin.

Como notas:

Todo lo que desarrollen deberá ir en la carpeta htdocs en el directorio de instalación de Xampp.

Si requieren hacer configuraciones al archivo php.ini este se encuentra en la carpeta php (igual es es muy obvio jeje).

En tmp se almacenan las sesiones y pache/logs están los archivos de error.log y access.log

Bueno eso es todo, saludos y suerte