Categoría: Reflexiones

  • ¿Puede tener éxito una aplicación en PHP estructurado?

    ¿Puede tener éxito una aplicación en PHP estructurado?

    Para hacer un proyecto grande, ¿tenés que utilizar PHP Orientado a Objetos?

    ¿Podés lograr lo mismo programando estructurado mientras que lo hagas de forma limpia y organizada?

    ¿Tendrá futuro un proyecto desarrollado con PHP estructurado?

    Estas son algunas de las preguntas que surgen cuando tenés algo de experiencia programando y empezás a pensar en grande.

    A continuación te comentaré las ventajas de incorporar estas técnicas.

    También intentaré despejar la confusión sobre ciertos mitos para que puedas tomar la mejor decisión para tu carrera.

    Pero, antes de meterme en los detalles, contestaré a la pregunta original.

    Qué determina el éxito de una aplicación

    Para responder a ¿Puede tener éxito una aplicación en PHP estructurado? lo primero que necesitas es tener una definición clara de éxito.

    Parece una obviedad, sí, pero no creas que lo es tanto.

    Si por éxito te refieres a éxito comercial la respuesta es un sí rotundo. Proyectos muy exitosos desde el punto de vista comercial como remoteok se basan en un código extremadamente sencillo.

    En otras palabras: el éxito comercial y la estructura del código no guardan una relación estrecha en general.

    Por otro lado, si por éxito te refieres a la posibilidad de generar aplicaciones a las que puedas agregar funcionalidad en forma sencilla y eficiente la Programación Orientada a Objetos te ofrece mejores chances.

    Diferencias entre Programación Estructurada y Orientada a Objetos

    Las principales características de la Programación Estructurada son:

    • Una separación muy fuerte entre datos y procesos
    • Una forma de escribir los programas indicando con mucho detalle cómo deben ser resueltos los problemas

    La POO (Programación Orientada a Objetos) no es esencialmente diferente de la estructurada.

    La forma de resolver los problemas también se basa en una serie de instrucciones que la computadora ejecutará en forma secuencial.

    Pero las similitudes llegan prácticamente hasta aquí.

    En POO los programas se parecen más a descripciones de la colaboración entre diversos actores.

    Cada actor ofrecerá a los demás algunos servicios (Llamados métodos) y, a su vez, contará con una serie de propiedades o atributos, los cuales le servirán para llevar a cabo sus tareas.

    Tomemos por ejemplo un cruce de calles con semáforo. 

    En este escenario existen:

    • 2 semáforos (Cada uno de los cuales puede tener encendida una luz color rojo, amarillo o verde)
    • Autos que se acercan hasta la bocacalle

    Lo único que hacen los semáforos es cambiar el color de la luz encendida y esperar.

    Mientras tanto, los autos pueden acelerar, frenar, abrir sus puertas, etc…

    A su vez, las luces de colores pertenecen al semáforo, junto con la acción de cambiar la luz activa.

    En un programa diseñado bajo el paradigma estructurado escribirías una función de cambiar la luz activa de un semáforo.

    Probablemente esta función recibiría el número de semáforo como parámetro y el color de la luz de cada uno se guardaría en un arreglo.

    En POO sería el propio semáforo el reponsable de cambiar su luz activa, informar al sistema cuál es su estado actual y velar por que las transiciones sean correctas (Por ejemplo, que no se pase de Rojo directo a Verde).

    Como para darle algo más de concretud a estos conceptos, y para acercarlo un poco más a algo que ya conoces, los métodos se implementan mediante funciones (Sí, con la palabra clave function) y las propiedades mediante variables (De esas que empiezan con $).

    ¿Es malo Programar en PHP Estructurado?

    Existen algunos mitos como que los programas desarrollados usando POO son más seguros o más eficientes que sus pares desarrollados usando Programación Estructurada.

    Lamentablemente, el mundo no es blanco o negro… se pueden hacer muy buenos programas estructuras y muy malos programas Orientados a Objetos.

    La calidad de los desarrollos depende de factores más sutiles que el paradigma en que estén escritos los programas.

    Lo que sí diría es que, si se escribe correctamente, el código Orientado a Objetos es más sencillo de matener y testear.

    La Programación Orientada a Objetos y el mercado laboral

    Más allá de tus preferencias personales, hay una realidad que no te conviene ignorar: la gran mayoría de las empresas de programación utilizan Programación Orientada a Objetos.

    De hecho, un número cada vez más grande de desarrollos se realizan utilizando frameworks basados en POO (Laravel, Symfony, CodeIgniter y Yii son los ejemplos más prominentes).

    Personalmente, siempre que puedo, elijo Symfony, pero los otros también tienen sus méritos.

    ¿Vale la pena aprender Programación Orientada a Objetos con PHP?

    El soporte que tiene PHP para implementar los conceptos principales de Programación Orientada a Objetos es muy bueno (especialmente en las versiones superiores a la 7.0).

    En todo caso, no tenés por qué tomar una decisión a ciegas.

    Hacé alguna prueba con una aplicación simple (Una calculadora por ejemplo). Intentá hacerla usando POO y después contame cómo te fue.


    Si se está complicando incorporar los conceptos de Programación Orientada a Objetos esta guía puede serte útil.

  • ¿Cualquier aplicación PHP se puede dockerizar?

    ¿Cualquier aplicación PHP se puede dockerizar?

    ¿Vale la pena Dockerizar tu php?

    Permitime contestarte con un ejercicio.

    Imaginate esta situación:

    Venís trabajando sin descanso en una aplicación muy importante para entregar a un cliente.

    Vas a buen ritmo, vas a llegar a la entrega sin mucho problema.

    De pronto, te aparece la notificación de actualizar el sistema operativo y pensás: «Y… la verdad que no estaría mal… no puedo seguir toda la vida con la 1.0…».

    Le das aceptar y, luego de unos minutos, cuando todo terminó te das cuenta de que la aplicación que andaba perfecta dejó de funcionar.

    ¿Eh?

    ¿Cómo puede ser?

    Así como instintivamente tirás un php -v y comprobás que de 7.4 saltaste sin escalas a 8.1… y las cosas ya no son como antes.

    ¡Qué problema! Menos mal que es una situación hipotética ¿no?

    Pues… no tanto. Esta historia es una adaptación libre de esta conversación que leí recientemente:

    «se me actualizo php a la version 8 en Manjaro, y por ende se me descuadró todo, qué tengo que cambiar en el httpd.conf para que me funcione php8«

    «Soy usuario de manjaro y me pasó lo mismo. Pero por suerte tenia dockerizado mis proyectos y no sufrí demasiado, deberías considerarlo«

    Yo diría que suerte habría sido no tener que enfrentarse al problema.

    Tener tus proyectos php dockerizados no es suerte, es una decisión.

    Una decisión que en algún momento este desarrollador tomó y que también deberías, al menos, evaluar.

    Es un caso muy similar al que analizo acá.

    Pensando un poco en esto empecé a preguntarme: ¿Cualquier aplicación php se puede dockerizar?

    Qué significa dockerizar una aplicación PHP

    Cuando se habla de dockerizar (me encanta este verbo) una aplicación, se hace referencia a hacer las adaptaciones necesarias para poder correrla sobre contenedores docker, tanto en un etorno de desarrollo como en uno de producción.

    Estos ajustes dependen en gran medida de la naturaleza de la aplicación pero, a rasgos generales, se trata de:

    • Crear un Dockerfile (O al menos seleccionar una imagen pre-existente que sea compatible con las necesidades de la aplicación)
    • Cambiar, si las hubiera, referencias a localhost por otras que apunten a servicios dentro del ecosistema de docker
    • Crear una configuración de inicio de los servicios (Ya sea a través de Makefiles o similar o, mejor aún, a través de un archivo docker-compose)

    En principio creo que no hay mucho más, pero si te parece que me olvidé de algo importante, por favor dejame un comentario abajo.

    Qué se necesita para dockerizar una aplicación PHP

    Para dockerizar una aplicación PHP se necesita, primero que nada, contar, tanto en local como en producción, con el motor y el cliente de docker.

    Si se pretende usar docker-compose, también deberá estar presente en ambos lados.

    Más allá de eso, es conveniente contar con un buen IDE, aunque no es imprescindible.

    Técnicamente no se necesita nada más. Claro que saber lo que se está haciendo ayuda mucho.

    Cómo dockerizar una aplicación PHP

    Teniendo todo en su lugar el proceso es simple, aunque, dependiendo de la aplicación, puede ser más laborioso que en otros casos.

    Relevamiento

    Lo primero es entender cuáles son las dependencias:

    • ¿Qué versión de PHP usás en producción?
    • ¿Qué extensiones de PHP necesitás instaladas y habilitadas?
    • ¿Qué otros servicios de infraestructura se usan con tu aplicación? ¿MySQL? ¿Redis?
      • ¿Qué versiones?
    • ¿Cómo está la configuración del webserver?
    • ¿Cómo está la configuración de PHP?
    • ¿Qué permisos sobre archivos necesita la aplicación para funcionar?

    Con las respuestasa a estas preguntas podrás darte una idea de lo que requerirás en tu imagen docker.

    Instalación de las herramientas

    Si no las tienes disponibles, el próximo paso será instalar las herramientas necesarias (docker engine, docker client y docker-compose al menos).

    Adaptación de la aplicación

    Luego deberás preparar la aplicación:

    • Reemplazar referencias a servicios externos (Bases de datos, colas de mensajes, etc…) de IPs o nombres conocidos en el host a nombres conocidos dentro de la red de Docker
    • Reemplazar rutas absolutas por relativas
    • Reemplazar enlaces simbólicos por archivos concretos

    Creación de los archivos de Docker

    Es muy probable que tu aplicación tenga algunos requisitos específicos que no encuentres en una de las imágenes disponibles en el dockerhub. No te preocupes, siempre podés tomar una imagen lo más parecida posible a tus necesidades para usar como base y agregar tus cambios particulares.

    Si el sistema es suficientemente complejo (si requiere de otros componentes de infraestructura), es conveniente definir también un archivo docker-compose.yml para mayor comodidad.

    Pruebas y ajustes

    Una vez hayas pasado por los pasos anteriores será cuestión de probar la aplicación y validar que todo funciona.

    Los comandos exactos dependerán de cómo hayas armado los archivos de configuración, pero será algo así como:

    docker build . -t mi_php
    
    docker run -it mi_php 

    O, si usas docker-compose:

    docker-compose up --build

    Una vez estén levantados los servicios podrás entrar a http://localhost:8000 (Asumo que el puerto 8000 está mapeado al 80 en el contenedor) y ya podrás verificar que toda la aplicación funciona.

    Por qué dockerizar tus aplicaciones php

    Si te parece mucho trabajo, tenés razón, dockerizar una aplicación PHP puede ser molesto, especialmente cuando lo tienes que hacer por primera vez pero, si queda bien, es muy probable que no tengas que volver a hacerlo por mucho tiempo y, a la vez, tu aplicación quedará blindada ante cambios en el ambiente, tanto local como de producción.

    De pronto no se ve tan mal, ¿no?

  • ¿Es cierto que PHP está muerto?

    ¿Es cierto que PHP está muerto?

    Leo por ahí cosas como:

    «He vuelto a estudiar PHP porque quiero aprender bien a programar con él y no entiendo por qué siempre se termina hablando sobre si PHP está o no muerto, personalmente lo veo muy vivo pero cuando veo tanto vídeo de ese estilo dudo un poco en seguir estudiando PHP«

    «No entiendo mucho de back pero un amiguete siempre me dice que PHP está muerto.«

    Y no puedo dejar de dar mi visión 🙂

    Claramente la pregunta esconde otra, mucho más importante:

    ¿Vale la pena dedicar tiempo y esfuerzo a aprender php?

    Es claro que, si efectivamente PHP estuviese muerto (o muriendo) tendría poco sentido… y enfatizo la palabra poco porque hasta el viejo COBOL tiene su cuotita de mercado que, al menos desde un punto de vista financiero, no es nada despreciable.

    Pero vamos al punto central: ¿está muerto php o no?

    Mi respuesta corta es un rotundo NO, pero voy a intentar fundamentar un poco.

    Para empezar, PHP es el lenguaje que está detrás de nada más ni nada menos que WordPress.

    Podés pensar lo que quieras de WordPress (Yo mismo no soy ningún fanático), pero lo que no podés es ignorar que la enorme mayoría de los sitios web existentes se apoyan en esta tecnología.

    Sólo por eso yo diría que PHP todavía tiene unos cuántos años por delante.

    Claro que, si sólo de WordPress se tratara, bien podría entrar en una suerte de animación suspendida.

    La comunidad de programadores entera podría ponerse de acuerdo en dejar todo como está y simplemente mantener los sitios andando y listo.

    La realidad es bastante diferente.

    Al momento de escribir este post la versión que viene con una nueva instalación de Ubuntu es la 8.0 y ya se está discutiendo qué tendrá la 8.1.

    En cuanto a performance la curva viene en franco ascenso, con un salto muy marcado a partir de la versión 7.

    Los frameworks están super activos, hay conferencias internacionales por todos lados (Cada vez más).

    En definitiva: yo no veo señales de que PHP esté muerto ni mucho menos… más bien todo lo contrario.

    ¿Qué tan popular es PHP?

    Si bien no es exactamente el tema de este post, es una pregunta bastante relacionada así que intentaré contestarla.

    Para empezar, esta medición es bastante subjetiva.

    Alguna gente mida la popularidad de un lenguaje por la cantidad de preguntas que se hacen al respecto de él en sitios como StackOverflow.

    Otros por la cantidad de anuncios de trabajo publicados en sitios de empleo.

    Otra métrica posible sería cantidad de descargas de proyectos de GitHub basados en un lenguaje en particular (PHP en este caso).

    Como para resumir voy a tomar un gráfico de gente que hizo alguno de estos análisis:

    Está claro que PHP no es a día de hoy la opción más popular o sexy (aunque está definitivamente dentro del top 10), pero aún así…

    ¿Es importante elegir un lenguaje propular?

    La última pregunta que deberías hacerte al elegir un lenguaje es qué tan importante o conveniente es decantar por la opción más popular.

    La popularidad es efímera.

    Mirá este video por ejemplo:

    Más allá de las preferencias/gustos que podemos tener nosotros como técnicos, para las empresas no es muy simpático tener que re-escribir sus aplicaciones cada dos años, con lo cual no descartaría un lenguaje que tiene tanta penetración cómo PHP y que ha estado vivo por más de 25 años (y sigue en evolución constante).

    Si te quedan ganas de participar en un debate bastante acalorado que se armó a partir de este tema te invito a ver este meme que armé en LinkedIn.


    Ahora que tenés una idea más clara tal vez te gustaría saber por qué tantos programadores odian PHP.

  • ¿Por qué tantos programadores odian PHP?

    ¿Por qué tantos programadores odian PHP?

    PHP es un MAL lenguaje, es el VB de esta decada

    PHP hace que aumente la probabilidad de que te lleguen proyectos que sabes que no tendrán futuro.

    Un día entero desperdiciado gracias a php maldito seas.

    Muerte al php y apache admin

    ¿Te suena algo de esto? Apuesto a que sí.

    Y sin embargo, también se escuchan cosas como:

    Yo pensé que PHP era un mal lenguaje también. Pero me di cuenta que el idioma mejoró muchísimo después de la versión 7.

    2020 y sigue habiendo un montón de trabajo backend para PHP.

    yo no considero php mal lenguaje, solo existe desarrolladores con malas pràcticas

    Entonces… ¿en qué quedamos? PHP ¿es o no un mal lenguaje?

    Claramente la comunidad de desarrolladores está dividida en este punto.

    Quienes odian a PHP se han quedado con una visión bastante vieja de lo que era. Compartir en X

    Y sí, PHP fue un lenguaje muy malo… pero no olvides que se inventó por allá por 1994… ¿qué otro lenguaje de esa época todavía se usa?

    El PHP actual no tiene mucho que envidiarle a sus competidores más cercanos (Ruby, Python o NodeJs).

    • ¿Querés usar programación funcional en PHP? Es perfectamente posible.
    • ¿Querés usar un manejador de dependencias robusto? Probá composer.
    • ¿Querés hacer testing automatizado? Hay muchos frameworks que podés probar.

    Esto no significa que PHP no tenga sus problemas (como cualquier otro lenguaje), de hecho, su sintaxis no es de lo mejor.

    Un artículo muy conocido que resalta las falencias de PHP es este.

    Pero aún quienes odian el lenguaje no pueden pasar por alto el hecho de que más del 80% de la web está soportada por PHP.

    ¿Eso significa que el lenguaje es bueno? No necesariamente… pero lo que sí significa es que si vas a trabajar en la web, es muy probable que te encuentres con PHP en algún momento.

    ¿El lenguaje es malo o es malo el programador?

    Hay una realidad innegable: usando el mejor lenguaje se puede escribir código malo.

    Y lo inverso también es cierto: usando el peor lenguaje se puede escribir código bueno.

    En definitiva

    Es más importante la calidad del programador que la del lenguaje de programación. Compartir en X

    De modo que, si querés programar bien usando PHP:

    1. Conocé el lenguaje
    2. Conocé las buenas prácticas
    3. Conocé sus frameworks
    4. Compará con otros
    5. Sacá tus propias conclusiones

    Como en cualquier otro entorno, hacer las cosas bien con PHP es posible, pero requiere práctica y dedicación.

    Y sobre todo, la disciplina de no quedarse con la primera solución que viene a la mente.

    Si buscás mejorar tu forma de encarar tus desafíos acá hay algo que te puede interesar.

  • ¿Debo aprender php desde cero o ir directo con un framework?

    ¿Debo aprender php desde cero o ir directo con un framework?

    Una pregunta que se hace mucha gente que está queriendo empezar con PHP es, habiendo tantos frameworks y habiendo escuchado cosas tan buenas de los frameworks, ¿vale la pena aprender PHP «a secas»?

    Qué es un framework

    Empecemos por la definición para entender de qué estamos hablando: un framework es, ante todo, un conjunto de código que ya está escrito y que resuelve una cantidad de problemas genéricos (problemas que muchas aplicaciones diferentes deben resolver).

    En definitiva, un framework es un punto de partida muy bueno para una aplicación de cierta complejidad, podrías pensarlo como un atajo.

    Cómo está hecho un framework

    Salvo casos muy excepcionales (como Phalcon), los frameworks están escritos usando el mismo lenguaje que los programas «finales». En el caso de aplicaciones PHP, los frameworks son, técnicamente, código PHP.

    De modo que, para comprender qué es lo que hace un framework necesitas conocer el lenguaje.

    ¿Es necesario conocer PHP para usar un framework PHP?

    Pregunta difícil de responder  :).

    Yo diría que sí. Aunque sea muy por encima, se necesitan algunas nociones de Programación Orientada a Objetos (y específicamente de PHP para comprender la sintaxis).

    Digamos que si entendés lo que significa esto:

    <?php
    
    use MiFramework\App;
    
    $app = new App();
    $app->run();

    Sabés lo suficiente como para empezar a aprender a usar un framework.

    ¿Es conveniente conocer PHP para usar un framework PHP?

    Siempre es bueno conocer las bases de las herramientas que uno usa.

    Yo, por ejemplo, empecé estudiando C y C++ y, aunque ahora ya no los uso, conocer por dentro cómo funcionan lenguajes de más bajo nivel me permitió tener una comprensión mucho mayor de qué es lo que hago y, de esa forma, aprovechar mejor los recursos a mi alcance.

    Particularmente, cuando se trata de PHP, saber hacer las cosas sin framework te permite:

    • Avanzar ahí donde el framework elegido puede no ser ideal (o tus conocimientos sobre él no son suficientes)
    • Meterte en el código del framework (no necesariamente para hacer mejoras, pero muchas veces identificar errores es más simple si podés hacer esto)
    • Conocer nuevos modos de resolver problemas (Mediante una herramienta como xdebug podés seguir el código mientras se ejecuta e ir analizándolo)

    Conclusión

    Según el nivel en que te encuentres actualmente te recomendaría:

    • Si conocés PHP pero no dominás por completo la Programación Orientada a Objetos te conviene adquirir esos conocimientos (Este libro puede ayudarte)
    • Si ya estás familiarizado con la Programación Orientada a Objetos en PHP tenés todo lo necesario para sumergirte en un framework (Este curso puede ayudarte) 
  • ¿SQL vs. NoSQL?

    ¿SQL vs. NoSQL?

    Se escucha mucho últimamente que SQL pasó de moda, que hoy lo cool es usar NoSQL (MongoDB, CouchDB, etc…) pero… ¿es siempre así?

    Empecemos por entender qué es una base de datos NoSQL (formalmente no estoy muy convencido de que un almacenamiento que no respete las reglas ACID pueda llamarse base de datos, pero bueno… como para no entrar en más de una discusión a la vez, digamos que sí).

    De lo que estamos hablando es de un medio de almacenamiento no estructurado, comúnmente conocido como base de datos documental.

    Más allá de las formalidades (los registros de la base de datos relacional se llaman documentos en una base NoSQL, las tablas pasan a ser colecciones, etc..), existen diferencias muy concretas:

    1. Los documentos no tienen estructura (Pueden guardar literalmente cualquier cosa)
    2. No existen operaciones tipo JOIN

    Su razón de ser se encuentra en la premisa de que, en un ambiente como es la web, la cantidad de escrituras vs. lecturas es prácticamente despreciable, con lo cual, si se busca darle a un sitio la mejor performance posible, no tiene sentido optimizar el almacenamiento en función de la operación menos frecuente (como sería el caso de usar una base de datos relacional).

    Si bien esto es cierto, es muchas veces un arma de doble filo. Muchos desarrolladores poco experimentados (o seducidos por el último shinny object) olvidan hacerse la pregunta clave: ¿la premisa es válida en mi contexto?.

    En aplicaciones web que reciben una cantidad enorme de visitas de usuarios no registrados (Un diario, Wikipedia, etc…) es claro que la respuesta es un sí rotundo. Sin embargo, cuando se trata de aplicaciones transaccionales (Un home banking, un sistema de adminstración, etc…), lo contrario es lo que sucede.

    En estos casos la consistencia eventual que prometen las bases NoSQL no es un aliado si no más bien una carga pesada (Sí, me tocó trabajar con más de un sistema transaccional soportado por una NoSQL… no se lo deseo a nadie).

    Y si bien las operaciones JOIN son costosas, el no usar una base relacional no las vuelve innecesarias, es el objetivo de la aplicación el que determina si vamos a requerir cruzar tablas o no.

    Otra ventaja con la que se vende NoSQL es que, al no tener estructura, se puede desarrollar más rápido (No hay que perder tiempo en complejos diseños de estructuras de datos, migraciones y demás)… Mi opinión es que esto constituye un boomerang (Pero bueno, puede que ya esté poniéndome viejo…), ya que, por más que la base de datos no tenga siempre los mismos campos, la aplicación seguramente se beneficie de tener una estructura conocida (No habrá que andar llenando de if para ver qué tiene el objeto que estás queriendo manipular).

    En mi experiencia, lo mejor es, en los escenarios que lo ameriten, usar un mix de ambas, para tener lo mejor de los dos mundos: una base de datos relacional para el almacenamiento duro y alguna caché tipo clave-valor (Memcached por ejemplo) para acceso rápido a los objetos más comúnmente consultados.

    Los frameworks modernos ya vienen preparados para manejar la complejidad de invalidar los cachés en los momentos de escritura y aprovecharlos en los momentos de lectura, con lo cual… ¿para qué pelear? Todo en su justa medida y armoniosamente ayuda.

  • Cuál es el mejor hosting para PHP y Mysql

    Cuál es el mejor hosting para PHP y Mysql

    Tu aplicación está lista para abrirla al mundo, ¡felicitaciones!

    Ahora hay una pregunta ineludible: ¿dónde la vas a alojar?

    Es tentador usar un hosting compartido y que otro se encargue de la infraestructura, ¿no? Más aún si es gratuito… pero ¿qué pasa cuando se necesita algo más?

    No es para nada raro enfrentarte a situaciones como estas:

    «Tengo una aplicación muy sencilla alojada en hostinger. Iba bien hasta ayer que se cayó la web y resulta que tengo un ataque DDos y claro no puedo monitorear ni nada por que no tengo acceso ssh al servidor«


    «Mi proveedor de hosting me ha bloqueado todo acceso al cpanel y página web por tener el disco lleno, ahora me obliga a adquirir un plan superior para darme acceso al cpanel»


    «Durante meses estuvo funcionando bien hasta que los que me proveen el servicio de hosting se les ocurrio cambiar el servidor, a partir de ahí las variables $_SESSION llegan vacias a las otras paginas.»

    Claro que montar tu propio servidor tampoco es un paseito.

    Lo primero que tenés que pensar en esto es si vas a ser capaz de darle soporte (Qué pasa si se cae el Apache en la mitad de la noche por ejemplo).

    Después está el tema de qué le vas a instalar.

    ¿Sos un fanático del composer?

    ¿Necesitás Memcached?

    ¿APC?

    ¿Cronjobs?

    Otro tema importante es qué consumo de recursos tiene tu aplicación.

    ¿Qué tanto tráfico vas a tener?

    ¿Qué tanta memoria necesitan tus scripts para correr cómodamente?

    Como de costumbre, no existe una respuesta única y universal, cada alternativa tiene sus ventajas y desventajas.

    Ventajas de usar un servidor compartido

    1. Costo (El abono suele ser más económico, aunque algunas VPS como DigitalOcean tienen planes super interesantes)
    2. Soporte técnico incluido (Como siempre, no todos los proveedores te van a dar el mismo nivel de soporte, pero siempre vas a tener algún tipo de soporte ante inconvenientes)
    3. Actualizaciones a cargo del proveedor (No te vas a tener que preocupar por actualizar paquetes)

    Desventajas de usar un servidor compartido

    1. Actualizaciones a cargo del proveedor 🙂 (No, no es un chiste, si bien esto te libera de responsabilidad, te resta flexibilidad ya que para instalar cualquier paquete vas a tener que pedir permiso… ¡y puede ser que te lo nieguen!)
    2. Disponibilidad de recursos errática (Dependés de qué tan bien o mal se comporte el resto de las aplicaciones que compiten con la tuya por el uso de los recursos compartidos lo cual puede impactar negativamente en la experiencia de tus usuarios)
    3. Dificultad para ajustar la configuración de php (No siempre tendrás acceso a modificar el archivo php.ini por ejemplo).

    VPS o hosting compartido: cómo decidir

    Salvo que te encuentres en alguna de estas situaciones:

    • Tu proyecto es muy chicos
    • Tu sitio es mayormente estático
    • No sabés (ni querés aprender) cómo administrar un webserver con algún esquema de monitoreo automatizado

    La mejor opción será siempre ser dueño de tu servidor, aunque implique algo más de trabajo al comienzo, instalando una herramienta como monit vas a poder dormir tranquilo 🙂

    Así que ya sabés, en tu próximo proyecto, dale una oportunidad al VPS.

    De hecho, si no tenés mucha experiencia administrando tus propios servidores, un proveedor que puede resultarte sumamente interesante es Cloudways que ofrece un modelo híbrido:

    Para una gran cantidad de cosas se comporta como un hosting compartido, en el sentido de las herramientas simples que te brinda, pero en realidad opera como un VPS, o mejor dicho, como varios a la vez.

    Usando Cloudways podés tener un sistema multicloud a muy bajo costo y con muy poco esfuerzo de administración.

    Vale la pena conocerlo. Probalo.

  • Cuál es el mejor Framework PHP

    Cuál es el mejor Framework PHP

    Ya escuchaste muchas veces cosas como «¿Cómo que no usás un framework de php?», ¿verdad?

    Y seguramente, de tanto escucharlo te dió curiosidad pero… al buscar te encontrás con que hay tantas opciones para elegir que parece que nunca vas a lograrlo.

    La pregunta es inevitable: ¿cuál es el mejor framework?

    Esto es casi como preguntar ¿a quién querés más? ¿a tu mamá o a tu papá?

    Como en muchas otras áreas de la tecnología la gente tiende a fanatizarse en favor de las herramientas que le resultan más familiares, con lo cual, encontrar opiniones objetivas es ciertamente difícil.

    No voy a dar muchas vueltas, el framework que a mí más me gusta es Symfony, pero de ninguna forma diría que es «el mejor».

    Conozco unos cuantos buenos:

    También hay algunos que se conocen como micro-frameworks:

    Si algo no te convence (el código generado, la facilidad o no para hacer las tareas simples, etc…), es un buen momento para pasar al siguiente candidato por el pre-filtro y así sucesivamente hasta que encuentres la horma de tu zapato 🙂

    ¿Cuál es tu framework favorito?

    En definitiva, la elección siempre será tuya.

    Cómo elegir un framework PHP

    Si bien la última palabra siempre es tuya, te puedo dar algunas ideas que, espero, te ayudarán a tomar la mejor decisión:

    1. ¿Cuándo se hizo el último commit? (Asumo que se trata de un framework de código abierto).
      1. Si ves que hace más de 1 año que no hay un commit lo más probable es que este framework esté discontinuado… mala señal
    2. ¿Qué tan grande es la comunidad de usuarios/desarrolladores?
      1. Si te cuesta mucho encontrar foros de discusión, blogs y demás indicios de que hay mucha gente usando/trabajando en el framework es otro punto en contra
    3. ¿Hay buena documentación?
    4. ¿Tiene alguna finalidad específica? Y en tal caso, ¿coincide con tus necesidades?

    Si las respuestas a estas preguntas te satisfacen el próximo paso es descargar el framework, intentar armar una app sencilla (tipo «Hola Mundo!») y ver cómo te resulta.

    Si algo no te convence (el código generado, la facilidad o no para hacer las tareas simples, etc…), es un buen momento para pasar al siguiente candidato por el pre-filtro y así sucesivamente hasta que encuentres la horma de tu zapato 🙂

  • En qué casos conviene usar un framework PHP

    En qué casos conviene usar un framework PHP

    O en otras palabras: ¿Framework sí o framework no? Qué dilema…

    La respuesta corta es en todos.

    Vamos con la respuesta larga:

    Qué es un Framework

    Existen muchas definiciones diferentes de framework.

    En el consenso general, se trata de un conjunto de librerías que sirven como base de una aplicación.

    Por qué usar un Framework PHP

    Tuve esta discusión bastantes veces con compañeros de trabajo y demás colegas y debo decir que fueron largas horas difícilmente bien invertidas.

    Admito sin emabrgo (nobleza obliga) que fue hace mucho tiempo… es raro escuchar hoy a alguien sostener la postura opuesta (La discusión hoy pasa por cuál framework elegir).

    La respuesta más elaborada (por si tenés tiempo y querés leer un poco más) es esta:

    Salvo que pienses desarrollar un negocio alrededor de un framework de tu propia autoría o tengas mucho tiempo y ganas de aprender mucho PHP, usar un framework estándar es una decisión que no debería tomarte más de 10 segundos.

    ¿Por qué? Simple: ¡tenés muchísimos problemas más importantes por resolver!

    El desarrollo de una aplicación web implica la combinación de una cantidad enorme de elementos (PHP, MySQL, HTML, CSS, JavaScript, etc…) sólo para que «pase algo» y a eso tenés que sumarle lo más importante: la lógica propia de tu aplicación (Para eso te contrataron después de todo ¿no?).

    ¿Para qué te vas a cargar encima con la responsabilidad de resolver miles de problemas que ya están resueltos?

    Por qué NO usar frameworks PHP

    Los frameworks agregan un montón de complejidad que mi aplicación no necesita

    Es probable que esto haya sido cierto hace tiempo. Ls frameworks modernos son sumamente modulares, lo que te permite usar sólo lo que necesitás (Por ejemplo, usando Composer).

    Un framework estándar agrega mucho overhead… mi aplicación necesita ser rápida

    Toda aplicación web necesita ser rápida.

    Cualquier framework decente tiene excelentes herramientas de caché (seguramente mejores que las que podrías implementar vos mismo).

    No confío en el código que no fue producido in-house

    El propio intérprete de PHP no fue producido por tu empresa y, seguramente no tenés mucho problema para justificar su uso, ¿cierto?.

    Diría acá que, salvo que trabajes para Google o Amazon, seguramente el código de un framework bien establecido va a ser mucho mejor que el producido in-house.

    La curva de aprendizaje es muy empinada

    Es posible (siempre dependerá de tu elección de framework), pero se transita una sola vez.

    Cuando hayas dominado el framework, ese conocimiento te va a acompañar en todos los proyectos que encares (incluso si te vas de la empresa donde trabajás actualmente).

    En fin… podría seguir dando razones para usar frameworks, pero me parece que quedó claro el punto.

    Sobre la segunda pregunta (¿Qué framework usar?) escribí esto.

  • Por qué usar una máquina virtual para proyectos PHP

    Por qué usar una máquina virtual para proyectos PHP

    Respuesta rápida: para evitar sorpresas desagradables.

    Paso a detallar un poco de qué estoy hablando con un par de historias que me pasaron hace unos cuantos años durante el desarrollo de un proyecto personal.

    Como la mayoría de los desarrolladores que están empezando, tenía instalado en mi computadora (Windows en aquel entonces) el paquete XAMPP y mi forma de trabajo era programar y probar en mi propia computadora y luego, mediante FTP, subir mis cambios al hosting que había contratado con la empresa de un amigo.

    Un día una de las últimas actualizaciones que había realizado a mi código funcionaba perfectamente en mi casa, pero al subirla a mi hosting las cosas eran un poco diferentes (léase: no andaba nada :p).

    Hago la historia corta: yo había escrito los nombres de las tablas de mis consultas en mayúsculas (algo como SELECT * FROM USERS), cuando los nombres en la base estaban en minúsculas. Claro, mientras estaba en un entorno incapaz de distinguir mayúsculas de minúsculas (Windows) no había problema, pero al deployar sobre un BSD que sí lo era… aparecieron los problemas.

    Tardé unos cuantos días en darme cuenta del problema (Y unas cuantas veces pensé en cambiar de profesión).

    Otro problema similar que tuve fue todavía más difícil de encontrar: mi versión de MySQL era un poquitín superior a la que estaba usando el hosting (Con lo cual, una función de la que mi código dependía simplemente no estaba disponible en Producción).

    Conclusión:

    El modo más seguro de evitar que aparezcan sorpresas al llevar tu código a Producción (O a cualquier otro ambiente para el caso), es programar en un entorno lo más parecido posible al productivo.

    Hay dos opciones básicas para lograr esto:

    1. Tener tu propio servidor que puedas configurar de acuerdo a las necesidades de tu aplicación (Probablemente un VPS)
    2. Configurar tu entorno de desarrollo de acuerdo a las capacidades que te brindará el servidor donde vayas a montar tu aplicación

    Independientemente de cuál sea tu elección, tener una máquina virtual específica para tu proyecto es la forma más práctica de generar código que corra sin problemas en el ambiente productivo.

    Así que en definitiva, la pregunta sería «¿Por qué NO usar una máquina virtual para proyectos PHP?»