Home

PHP5 vs el resto del mundo

posted May 19, 2011, 8:49 PM by Claudio Dobniewski

Nuevamente, a punto de irme a dormir, me acorde un topico recurrente en charlas entre programadores (no geeks, no nerds, no ñoños. salvo algunas excepciones, claro... ) nunca falta el que al hablar de lenguajes, dice "php? si, pero no es un lenguaje "de verdad" orientaod a objetos, es algo que nacio para scripting, mira, se basa en funciones primitivas, las colecciones que maneja... realmente, no es un lenguaje serio..."

Bueno... no puedo refutar (ni esta en mi animo hacerlo) ninguna de estas afirmaciones. Si por refutar se entiende "demostrar que esa posición esta equivocada, y la opuesta si lo es".

Si entrar en disquisiciones filosoficas, y admitiendo que ese extracto de conversaciones tiene su base en la experiencia de gente muy capaz en estos temas, tambien es cierto que es un lenguaje que se ha propagado, y es hoy dia el lenguaje "por exelencia" que dan los hostings (por suerte estan abriendose a perl y python también, la variedad es buena), que hay muchos buenos sistemas que funcionan muy bien en ese lenguaje, que no requiere de gran ingeniería para desarrollo, deploy, puesta en marcha. Bien, lo mismo podríamos decir, quizás, de python, que en muchos aspectos se lo puede usar de manera similar, ambos pueden, por ejemplo, tener como webserver a apache, son lenguajes que permiten el scripting, interpretados, y la verdad tienen una curva de aprendizaje. No se requiere compilar (lo que suele sumar complejidad al que recien se inicia, y alarga los ciclos de desarrollo, testing, claro, tiene grandes ventajas como mayor velocidad de ejecucion, depuracion en tiempo de compilacion).

"Es lento" agrega alguien que recien se suma a la conversacion. ¿Lento? ¿comparado con C, C++, Java, Python....? si, seguramente es lento en esos terminos. pero existen acceleradores, que cachean codigo precompilado o compilado (admito que no tengo claro en este momento ese punto), y uau!, la velocidad se multiplica en la ejecucion de codigo. El apache permte los procesos en paralelo (PHP5.2.x no tiene threads, para mi sorpresa... existen los llamados exec()  system() y otros, como la extension pcntl_fork que llama a la instruccion fork del sistema, pero no es mismo que tienen los lenguajes que mencione).

Y a pesar de todo, tiene su utilidad. Primero, un lenguaje con el grado de difusion, y la cantidad de desarrollos (desde simples scripts lineales hasta el potente uso de modulos, herramientas, plugins y frameworks, como ser symfony, code igniter,  todo PEAR, smarty, etc etc etc) los CMS, ecommerce y lo que se les ocurra. puede no ser el mas lindo, pero algo tiene. Yo no soy muy amigo de Windows (tm) ni la mayoria de sus productos, pero si llego a tener la exclusividad de sistemas operativos hogareños y casi exclusivo de pequeñas y medianas empresas (no tengo estadisticas, pero creo que se entiende el punto), tenia algun merito, aun entre muchos defectos, poniendonos en contexto, entre lasposibildiades de queel entonces, te permitia algo "facil" que otros no, que para las otras opciones o era mucho mas caro, o necesitabas un experto en sistemas para la cosa mas elemental.

Bueno, yo mantengo y desarrollo varias aplicaciones en PHP5.2.x enentornos de alta carga, 7x24 hs, y PHP tiene muchas ventajas para desarrollar rapido, testing, temas de compatibilidad de entornos (SO, versiones de software, suite de testing, debug, los errores son claros )
"Pero Python tambien..." si, amigo, python tambien. No se porque Python no ocupa hoy dia el lugar de Php, estoy bastante seguro que podria, de hecho en muchos desarrollos importantes se esta luciendo, es tanto un lenguaje WEB como un lenguaje de aplicaciones y herramientas. Y de scripting. y funciona muy bien.

No se, quizas es una cuestion que Php supo promocionarse mas, supo exprimir su veta WEB, supieron posicionarse. Pero como se suele decir en el ambiente del open source: Si no te gusta, hazlo mejor. Al que no le guste Php, que use lo que le gusta. Al final, todas las apliaciones son modulos que se comunican por alguna interface comun, un XML enviado por http., un .csv o quizas conectando por IRC o Webservice.

¿En que quedamos? en nada, amigo, en nada... si yo no se programar... haga lo que le parezca.

Mas vale tarde que nunca...

posted May 19, 2011, 8:40 PM by Claudio Dobniewski

Simplemente, olvide activar los "comentarios" para este blog... nobleza obliga el derecho a replica y devolución.

Hasta muy pronto

Diferenciacion e integracion

posted May 16, 2011, 8:29 PM by Claudio Dobniewski

"Diferenciación e integración" es uno de los principios básicos de la la administración (Teoría General de la Administración), y se aplica a todo sistema u organización. Vamos, a todo conjunto relacionado de elementos, en donde haya algún grado de especialización para optimizar el resultado general.
Por un lado, queremos especialización. La clásica navaja suiza o cortaplumas, que hace de todo, pero es incomoda para todo, es útil cuando necesitamos llevar pocas cosas, y poco peso.
Pero en la vida diaria, necesitamos una silla cómoda, una cafetera que haga buen café, una heladera que enfrié, un teléfono con el que comunicarnos... necesitamos una serie de objetos, que mejor prestación tienen cuanto mas especializados.
Entonces... cual es el problema??
A ver, mi queridos desconocidos, ¿ustedes tienen un televisor en casa? si? al menos uno? (si no, considérense desahuciados sociales).
Perfecto! y ese televisor... tiene un control remoto? si? que bueno! hoy día todos los TVs tiene uno. Sube volumen, Baja volumen, prende, apaga, cambia canales! hace todo lo que se puede hacer con su TV.
¿ Y tienen un DVD, o VHS o Blueray? ¿si? ¿y tiene un control remoto? play, pause,stop, rewind, fastforward, menues del aparato,etc,etc,etc. contamos ahora 1 control remoto por cada reproductor de video.
Ya se que abuso, pero... tienen ustedes... un equipo de musica? con o sin MP3, no importa, es probable que tenga también un control remoto, parecido al del DVD, pero mas sencillo.

Bien, cada uno de estos aparatos, esta especializado en algo, y adicional mente puede tener una serie de funciones extra (como escuchar música en el DVD, o sintonizar en un VHS), pero cada uno tiene un set de funciones especificas, por el que lo adquirimos. Y a su vez, cada uno tiene un control de mandos remoto, también especifico a el aparato con que debe interarticular.
Y para integrarlos, cada uno tiene una interfaz común.
Control remoto: infrarrojos
Reproductores de audio y video, con el display (TV), por cables, que siguen también ( no nos engañemos) un protocolo estándar, desde el simple coaxil,el audio/video a los mas completos por componente, s-video, hdmi.  Cada uno de estos, sigue una cantidad importante de estándares para poder integrarse.

Alguien recuerda las viejas épocas, cuando un VHS deba ser PAL-N o NTSC ? luego vinieron bi-norma, pero al inicio, lamentablemente, si tenias PAL-N y el video era NTSC (o incluso si el video y el reproductor eran de la misma norma... pero el tv no), lastima, no había manera de ver correctamente la película. No podías invertir en equipos si no eran compatibles.

¿Y que tiene que ver todo esto? Dios sabrá! pero si aun están leyendo, mas vale que se me ocurra algo interesante, o voy a perder a mis 7 fieles lectores (si, mi familia coopera).
Bueno... lo primero que me viene a la mente es la frase "¡Es lo mismo!", que en este momento de deseperacion y asociacion libre, podria significar, por ejemplo, que (y contrario al método científico deductivo) digo que esto se cumple también para la actividad humana, desde que unos salían a cazar y otros se quedaban a criar los niños,  preparar la comida y todo lo que no era cazar, en general.
Era bastante sencillo (de entender, la verdad era jodido vivir en esa época, no creas que cazaban todos los días), o eras cazador... o no lo eras. Ademas había algún lugar especial, como el shaman de la tribu, o alguien que tenia algún carisma especial, pero no mas que eso.
Obviando los miles de años intermedios, llegamos al 2011, donde tenemos nuestras TVs como sinónimo mismo de la sociedad. ¿Sera esto ejemplo de uno de los principios de la dialéctica? no se, nunca lo estudie.
Si vas a una escuela, estas en una organizacion (aun como portero, padre, estudiante o docente), si trabajas, mas que claro, si cooperas en cualquier institución (iglesia, scouts, la que te guste), también. Y si tienes teléfono, agua luz gas, estas alcanzado por grandes organizaciones (ni hablar del estado), y sufres sus constantes fuerzas internas que pugnan en la eterna lucha entre la diferenciación y la integración.
Cada área es creada como respuesta a una necesidad. En una organizacion grande, pues la cantidad de áreas y sub áreas crece exponencial mente. Eso es fácil.
Ahora, cada una de estas celulas que se reprodujeron en un caldo de cultivo optimo... tienen que trabajar juntas! y aqui tenemos la diferencia entre cien millones de celulas vivas, y un ser vivo complejo. Es como decia (mas o menos) Carl Sagan (¿o era Isaac Asimov?) mostraba un cilindro de metro y medio de acrilico transparente. Volcaba dentro todos los compuestos que tiene un ser humano adulto como ser agua, carbono,hierro, etc,etc,etc., Lo revolvia... y nada. No era un ser Humano.
Lo mismo sucede con cualquier tipo de organizacion. Los elementos componentes son condición necesaria, pero de ningún modo suficiente.
¿A que apunto con esto? dios mio, quien me manda a medianoche a divagar sobre estos temas... en fin, vayamos cerrando que es hora de dormir.
La idea es que, cuanto mas especifico es un area, menos interactua con el resto. De hecho casi pareceria independiente del resto (internamente digamos que lo es). Y esto para las organizaciones humanas, es necesario, y a la vez un problema. Necesario, porque no podrian hacer su trabajo si estarian fuertemente condicionadas por las otras areas externas a si mismas (solo debieran estarlo respecto de alguna con la que esten altamente relacionadas), pero por otro lado... se tiene a olvidar que se es parte de un todo. No voy a emitir juicio de valor sobre esto, porque, sepanlo, se ve distinto si uno analiza la organizacion, que si uno es un empleado del area analizada, les aseguro que la objetividad se me hace dificil.
Bueno, los empleados (o colaboradores) no ven el conjunto de la organizacion, como su trabajo es lo que mas ven, tienden a sobreestimarlo, en terminos de suponer que solo lo que ellos hacen es importantisimo para la organizacion, y que todo problema (entiendase tareas que los cargan mas de lo que consideran necesario) es culpa de la ineficiencia de otras areas, y jamas de imprevistos, desiciones estrategicas o simplemente parte de la dinamica del negocio. Y aqui la integracion peligra. En la adminsitracion (o gerenciamiento mas bien) se sabe que hay areas que son "enemigos naturales", porque unas compiten con las otras por recursos, o porque una es encargada de auditar a la otra, o simplemente, porque se responsabilizan de toda novedad como "si ellos no se hubieran equivocado, no estariamos nosotros solucionando sus problemas". Se va perdiendo conciencia de el complejo entramado de flujos de informacion, por lo que se toman decisiones operativas (o se ejecutan las tareas) de forma que choca mas adelante en el devenir de la información, no teniendo en cuenta normativas o condicionantes que afectan a quien viene después en el proceso. Pero el perjuicio no es quien viene después. Mucha gente tiene que trabajar de mas por cosas como estas. Si recordamos el principio de excepción, que dice "todo debe estar según la norma, y cuando controlamos, solo nos ocupamos de aquello que no respeta la norma", o sea, lo que se sale del estándar, lo que no cumple las reglas, lo que no esta apto para darle un ok y enviárselo a quien sigue en la ruta.
Esto dispara no solo una corrección, haa seria fantástico!. No, esto inicia que quien detecto la anomalía, separe del proceso ese articulo (por ponerle un nombre), e inicie un proceso "hacia atrás", donde alguien debería recibir estos casos, pero claro, como son "anormales" muchas veces no esta contemplados, por lo que no hay un proceso estándar que seguir... entonces se consulta a mucha gente de todas las áreas, que cual es el problema, que como se puede solucionar... y quien es responsable de ello. algo que seria terminado en 24 hs, pasa al limbo de los procesos.
Finalmente, seamos optimistas, corrigen un dato faltante, un formulario mal llenado, y solo demoro 3 dias mas de lo habitual...y necesito 3 veces mas gente de lo que debiera requerir. Estos casos son INEVITABLES, lo que se espera es que sean marginales, y no habituales. Entocnes se recurre a fuertes normas de estandarizacion, que empeoran los casos no estandar. Intenten pedir en McDonalds (McDonalds y acrocs dorados son propiedad de su srespectivos dueños, no son mios) y pidan algo fuera del menu. No sera tan sencillo comod ecirle que no lo tienen en el menú. Van a ver que las respuestas son incoherentes, y que algo muy sencillo (quiero ese emparedado, pero con la hamburguesa de esa otra foto), y por dios, es increíble lo que sucede. Es como patearles el hormiguero.
diferenciacion, integracion. Lo importante es que las areas esten lo suficientemente especializadas para hacer lo mejor posible su trabajo, tomando en cuenta cual es el costo para el resto de la organizacion (si pudieramos correr a 200 km/h es posible que el indice de mortalidad por accidentes al correr sea mas alto que el de cancer) y al mismo tiempo, como integra al resto, y ahi es recien donde tiene utilidad esa area especializada. Si yo pudiera levantar 1500 Kg con mis manos, me partiria la espalda y se me arrancarian los hombros. Tendria que tener el resto del cuerpo coherente con esa característica.

Bueno, espero que al menos se hayan entretenido un poco, que era al fin y al cabo el objetivo de estas lineas.
Saludos a los 7 lectores, y sera hasta el próximo ataque de inspiración.

Claudio

Mama Mama! ¿por que me conviene usar un framework?

posted Apr 26, 2011, 7:29 PM by Claudio Dobniewski

Mira Nene! si vas a dedicarte a "esto de la programación", escucha a tu madre, que tiene algunos años mas que vos, y aprende de su experiencia.

Primero, ¿que es eso de un "framework"? so bestia, si andas preguntando, debieras saberlo. Pero para eso tenes una madre que te quiere.

Un framework es un conjunto de herramientas, aplicaciones y/o funciones "prefabricadas" pero a la vez genéricas, para que no tengamos que hacer todo de cero, ni hacer mil veces lo mismo.

Cuando iniciamos un proyecto "de verdad", tenemos que considerar que vamos a usar, mayormente (deja de mirar por la ventana y presta atención!)

1) Seguridad (user, pass)
2) Roles (administrador y usuario como lo mas básico) que determinan que opciones y pantallas (o elementos de las mismas) están disponibles para cada rol.
3) Persistencia, entiéndase que no tengamos que empezar de cero cada ves que arranca el programa, ni desarrollar toda la lógica implicada, que es un re-quilombo, para cada idea brillante que queramos llevar a la practica.
4) Visualización (layout, interacción, look&feel)
5) Sesiones
6) ABM o backoffice donde dar de alta usuarios, gestionar roles, contenidos de paginas, listados o categorías de items, etc.

y muchas otras cosas.

Por ejemplo, a tu madre el otro dia le cayo una papa caliente, "necesitamos una pagina web donde se vean todos los mensajes recibidos de los usuarios (en este caso los mensajes se originaban por SMS, pero eso no importa en este caso) y poder leerlos para un evento en vivo". Estamos de acuerdo, la consigna es mas bien amplia.

El tema es que tenia una restricción de tiempo, a todo el trabajo pendiente se sumaba esto, y solo tenia una semana para tener algo presentable y seguro. Esto lo usaría un alto directivo de Movistar en Mexico, en vivo. No se puede quedar mal.

Como el proyecto en si no era "grande", sino mas bien desarrollo rapido, y venia con muchas ganas de meter algo en Python (mi primer amor), pase por la pagina de Django, y mire el primer tuto (4 cortas paginas). Eso me convencio que me servia perfecto para lo que queria.

Instalarlo fue muy fácil, como todo lo que es python. Viene con un webserver básico para testing, configurar el Apache como webserver me tomo algo mas de tiempo, pero no hay misterio, solo una buena referencia y estar practico con python.

Se configura la conexión a BD y un par de detalles, como el path de instalación, y esta listo para usar.

Para iniciar el desarrollo, genere una app que tenia el modelo de datos que necesitaba, verifique como mapeo URLs a clases/metodos. La verdad es muy sencillo. Con el modelo de datos creado (y generada la tabla en BD, mediante instruccion de Django) me toco generar el admin, ya que como se pueden customizar acceso a usuarios definiendo roles, aun dentro del admin, el admin provee de por si un gestor de los datos de un modelo, o sea, de todos los registros.

ejemplo, hago la clase "Mensaje", y cada mensaje que llega, cargo los datos (que llegan por request HTTP GET) y guardo (asi de simple, instancio la clase y le digo "save()" y listo, tengo un registro mas en la BD, que lo puedo rescatar de nuevo como objeto (eso hace un ORM, es lo máximo!).

Así que creando finalmente un usuario "operador" con permiso de acceso solo al admin de "Mensajes" y customizando un poco esa pantalla , ya que es prácticamente todo configurable con casi nada de código, tenia listo mi backoffice para el cliente. modificando los CSS y agregando el logo, cambiando 2 textos, listo, tenia mi pequeño site terminado.

Les digo, es mas lo que pase probando y cambiando que el codigo resultante que lo que finalmente quedo de desarrollo. El SVN no me deja mentir, debo haber tocado o generado unas 60 lineas de codigo, config, y estilos, no mas. Y partiendo de cero (nada de conocimiento de Django, nada preparado de antemano salvo lo que viene en el Framewrok).

Por eso, querido mio, si programas en Java (springs), en Python (django), en Php (cake,symfony,codeigniter), en Ruby (ror), o en cualquier otro extraño lenguaje, deja de perder el tiempo inventando la rueda. Dedicate a probar Frameworks para saber cual te gusta, cual te conviene, porque luego migrar es doloroso, pregunta a tus amiguetes, sobretodo, escucha la opinión de los que mas saben, y siente la experiencia de desarrollar rápido, de modificar poco, y de tener una infraestructura que parecería crecer contigo. a medida que la vas aprovechando.

Y si no quieres escuchar a tu madre, no vengas a llorar cuando tu seguridad sea vulnerada o los modelos jamas se terminen de persistir correctamente.

He dicho.

Probando Blog 1.. 2.. 3.. probando! hola hola...

posted Apr 15, 2011, 12:11 PM by Claudio Dobniewski

Bueno, probando nuevas entradas, empece a acomodar titulos, a formatear contenidos... cuanto trabajo por delante, es como limpiar la habitacion!

Remodelacion

posted Apr 14, 2011, 7:15 AM by Claudio Dobniewski

Hola gentes de la internet, para los que se dieron cuenta, hace años que no actualizo esta pagina.
Luego de haber instalado en diferentes hosts gratuitos o economicos (lease "baratos" sin aludir a su calidad sino a su precio), he regresado al google sites, porque he notado que avanzo años lus de cuando inicie esta pagina.

Mis experiencias intermedias, con un WordPress  (que maravilla el WP!) se trunco ante las malas prestaciones de BD que le quitan performances hasta el punto de falla permanente, haber sido victima de un par de ataques y directamente las malas prestaciones y atencion de algun host pago (gracias Dattatec!)

Tambien motiva esta desicion, que la verdad no pienso hacer un sitio innovador, generando increibles logros programando cosas maravillosas. No dispongo de ese tiempo, ni las interfaces WEB son lo que mas me gusta hacer.

Asi que, ante las nuevas features de google, y su integracion  de apps, decidi apostar de nuevo a la simplicidad, descargandome de la mayor parte del trabajo necesario para tener un site levantado.

Espero reordenar el sitio, y acomodarlo mas a lo que hoy es mi perfil, menos 3D (lamentablemente) y mas programacion y otras yerbas.

Si llegaste hasta aqui, tienes una paciencia formidable!

Gracias por la visita.

Claudio alias Cejota

1-6 of 6

Comments