Archive

Archive for the ‘desarrollo’ Category

Como ignorar los cambios de permisos (chmod) en Git

October 23, 2014 1 comment

Por si os preguntais alguna vez como evitar que Git registre los cambios de permisos o de “modo” de los archivos, aquí va una pequeña explicación que debería ayudaros.

La respuesta corta, como indicado en un post interesante de Stackoverflow, es de posicionarse dentro de la carpeta del repositorio Git local, en línea de comando, y lanzar:

git config core.fileMode false

Si se desea hacer esto una sola vez (para un solo comando) en vez de configurarlo para todos los commits futuros, hay que lanzar el comando:

git -c core.fileMode=false diff

Si ha cambio desea cambiarlo de una sola vez para *todos* sus repositorios, hay que hacer:

git config --global core.filemode false

o

git config --add --global core.filemode false

Luego, si desea retroceder algun cambio de permisos (para archivos y carpetas sucesivamente):

git diff --summary | grep --color 'mode change 100755 => 100644' \
 | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' \
 | cut -d' ' -f7- | xargs -d'\n' chmod -x

Este artículo es una mera traducción resumida del post en Stackoverflow, así que si quereis más detalles, seguid el enlace de arriba.

Advertisements
Categories: Best practices, desarrollo, Spanish Tags: ,

Guía de puntos críticos al actualizar PHP

October 18, 2014 Leave a comment

Si, como nosotros en BeezNest, con Chamilo, tiene que tomar a cargo el mantenimiento de una aplicación PHP masiva (varios cientos de miles de líneas) en el tiempo, esta guía le será útil.

En muchas oportunidades, tendrá que asegurar que su sistema soporte actualizaciones de PHP, y también que soporte varias versiones al mismo tiempo, según los casos presentados por sus clientes.

Habiendo desarrollado una aplicación años atrás, con las tecnologías del momento, tendrá que modificar el código para asegurar el soporte de cada nueva versión de PHP. En esto no solo tendrá que actualizar el código que usa cosas abandonadas (deprecated) en la siguiente versión de PHP, sino también tendrá, si desea asegurar el soporte de versiones anteriores, que asegurar que su sistema funcione con la menor versión posible de PHP.

Ante todo, es importante ubicar los cambios notables entre versiones de PHP. Para ello, puede consultar la página de Changelog de PHP 5 si desea todos los detalles, o la página de apéndice con los procedimientos de actualización de una versión a otra de PHP si prefiere una versión más explicada.

Si bien es cierto no todas las versiones de PHP fueron de la 5, es importante entender que hoy en día la versión 4 de PHP es muy insuficiente para hacer cualquier aplicación compleja, y probablemente no esté soportada por la mayoría de servidores existentes, pero también podemos estar relativamente tranquilos mirando hacia el futuro: si bien existieron grandes planes para PHP 6 (con un gran enfoque en la internacionalización) hacen unos años, estos planes se quedaron dormidos por ahora y la comunidad de desarrolladores de PHP se está principalmente enfocando en nuevas versiones de PHP 5.*.

La lista que les entrego aquí es una lista *resumida* proviniente de los procedimientos de actualización en la página indicada arriba, y que considero una lista suficiente para el 90% de las aplicaciones.

De PHP 5.2 a 5.3

  • Aparición de los namespaces
  • Aparición de los closures (funciones sin nombre)
  • Aparición del operador ternario ( COND ? A : B; )
  • Aparición del acceso dinámico a clases estáticas tipo $clase::$prop
  • Aparición de excepciones anidadas
  • Garbage colector cíclico (no implica ningún cambio pero reduce las fugas de memoria con objetos que contienen objetos)

De PHP 5.3 a 5.4

  • Aparición de traits
  • Habilitación de $this en los closures
  • Aparición de forma corta de definición de arrays tipo $a = [1, 2, 3];
  • Aparición de la dereferencia de arrays, tipo foo()[0]
  • Habilitación automática de la posibilidad de usar la forma corta de tag PHP “<?=”
  • Habilitación de la posibilidad de usar la forma corta (new Foo)->bar()
  • Mejora (o sea… cambio) en los mensajes de errores (ayudando al debug de aplicaciones PHP)
  • Habilitación general de la funcionalidad de progreso de subida (upload progress) que anteriormente requería un módulo de PEAR. Esto es lo que permite mostrar, en una página en PHP con JS, una barra de progreso mientras el archivo está siendo subido.

De PHP 5.4 a 5.5

  • Aparición de los generators
  • Habilitación de la forma: foreach ($array as list($ a, $b))
  • Habilitación de la dereferenciación para strings y arrays: echo [1, 2, 3][0]; / echo ‘PHP'[0];
  • Inclusión fácil de Zend OPCache (Zend Optimizer Plus), permitiendo un remplazo de APC, que definitivamente generaba un montón de inconsistencias con sistemas complejos como Drupal y WordPress, entre otros, con más estabilidad y un poco más de eficiencia (ver el Benchmark de Zend OPCode)
  • Inclusión del formato WebP (la versión imágenes del codec WebM de Google) en GD

De PHP 5.5 a 5.6

  • Aparición de Variadic, un mecanismo para declarar una función con una cantidad de parámetros variable
  • Escaladores de constantes, tipo TWO = ONE*2
  • Aparición del operador de exponente (antes “pow()”) como “a**b” (2**3 = 8)
  • Aparición del stream php://input
  • Habilitación del soporte de archivos de tamaño superior a 2GB (large files uploads)
  • Mejoras importantes de seguridad dentro de la librería mcrypt.

Es importante entender que, si bien todas estas mejoras son buenas para PHP y sus aplicaciones, solo podrá usarlas si “abandona” el soporte para una versión anterior de PHP.

Por ejemplo, si quiere usar Zend OPCache dentro de su aplicación como elemento obligatorio, su aplicación deberá indicar muy claramente que funciona con versiones de PHP “a partir de PHP 5.5”.

Existen mecanismos alternativos, a veces, que permiten ofrecer un soporte de versiones anteriores y, si alguna funcionalidad más eficiente está presente, usarla, pero en la práctica muchas no lo permiten. Por lo tanto, ofrecer el soporte para versiones anteriores de PHP también implica menor eficiencia para aplicaciones grandes en ambientes muy exigentes.

Chamilo

Chamilo LMS es un sistema de e-learning de software libre, que tiene como objetivo ofrecer herramientas potentes para la mejora de la educación y de la disponibilidad de esta para toda la humanidad. Sus características principales son: extrema usabilidad y poco uso de recursos. Puede descargar Chamilo desde su sitio web: http://www.chamilo.org o probarlo gratuitamente en https://campus.chamilo.org.

BeezNest

BeezNest es una organización internacional (be, es, fr, de, uk, pe, mx) creada en el 2002, que desarrolla el software Chamilo LMS y se especializa en ofrecer toda la gama de servicios especializados (consultoría, implementación, instalación, modificación, capacitación, alojamiento, etc) sobre este software, y optimización de servidores web que permiten alcanzar mayor productividad con sus aplicaciones web en PHP.

Experimentando con Digital Ocean… primeras impresiones

September 23, 2013 4 comments

El equipo de BeezNest estuvo experimentando con el servicio de alquiler de máquinas virtuales de Digital Ocean estos 2 últimos meses, y en el espíritu del compartir, aquí les damos nuestras primeras impresiones.

https://www.digitalocean.com/

Costo

Ante todo, hablemos de costos. Se pueden obtener máquinas virtuales con disco SSD a partir de $5/mes. Esto es todo incluido, pagado desde PayPal o por tarjeta de crédito. Es más, existen algunos vouchers que permiten aprovechar de promociones de $10 “para probar”.

Con una máquina virtual (llamada “droplet” en este caso) de $5/mes, que es de 512MB de memoria y 20GB de disco duro, no se hace mucho, pero es suficiente, por ejemplo, para montar un pequeño sitio web Drupal o unas instalaciones de Chamilo LMS, de momento que el uso no sea masivo.

Lo que consideramos muy bueno es la accesibilidad para unas máquinas de entrada. Como que el costo no deja realmente lugar para pensar. Además, si solo lo usa dos semanas, pagará la mitad. Se descuenta por hora. Pero ojo, hay que apagarla, sacar una imagen de backup (snapshot) y borrar la máquina para que deje de descontar…

Accesibilidad

En términos de accesibilidad (y no estamos hablando de discapacidades, sino de facilidad de acceso al servicio), el servicio es impresionante de claridad: los costos aumentan en una proporción casi igual a los recursos: $10/mes para 30GB de disco SSD, 1 core y 1GB de RAM, $20/mes para 40GB, 2 cores y 2GB de RAM, etc. La lista de costos indica hasta máquinas de 24 cores y 96GB de RAM (pero claro, ahí sale costoso, a $960/mes, pero se puede tomar por horas a $1.429/h).

La lista de costos está a un clic de la página principal del sitio, y permite ver el costo por mes y por hora.

La creación de una cuenta de usuario es sencilla (usuario y contraseña), y a partir del momento en que paga en PayPal (link “Billing” y después “Manage payments” en la interface del usuario registrado) o por tarjeta de crédito, se activa el botón de creación de imágenes. En 2 clics y 2 minutos de espera, ya tiene una máquina virtual corriendo.

Disponibilidad de imágenes predefinidas

La lista de imágenes disponibles es bastante extendida, con 9 versiones de Ubuntu (incluyendo una de Ubuntu 10.04 64bit que permite instalar facílmente un servidor de videoconferencia BigBlueButton), 4 versiones de CentOS, Debian, ArchLinux y Fedora, además de unas imágenes de aplicativos pre-instalados como WordPress o Redmine. En fin, hay para todos los gustos o casi, por lo menos en Linux.

Comunicación

La información comunicada por e-mail es corta y al punto para quien conoce un poco de gestión de servidores y conexiones por SSH. Después de crear una nueva imagen, el tiempo de espera para recibir el correo con los accesos es mínimo: alrededor de 1 minutos (hasta 5 minutos en un caso).

Soporte

Si bien existe poca (si alguna) información en Español, la calidad y rapidez del soporte es buena. En 5 comunicaciones con ellos, el tiempo promedio de atención fue de 30 minutos (tuvimos mala suerte en un caso, al parecer, ya que la mayoría de la gente en el foro indica que dan respuesta en menos de 5 minutos, y a nosotros una vez demoró 4 horas). Existen unos temas todavía un poco obscuros, para el equipo de soporte también, como la gestión del volumen de transferencia hasta la fecha, que si bien indica un límite en las características de las imagenes, parece que todavía no está controlado.

Tampoco queda claro si, una vez que se contabilice, se podrá hacer “pooling” (es decir compartir el volumen de transferencia entre varias máquinas) y si el límite es proporcional a la cantidad de horas usadas, o si, de frente, nos dan la cantidad correspondiente a un mes de uso.

Redimensionamiento

El redimensionamiento de las máquinas no se hace en caliente. Es necesario tomar un snapshot, apagar la máquina virtual y volver a crear una nueva máquina de mayor dimensión. Existe una funcionalidad de redimensionamiento (“Resize”) pero no funciona para aumentar la capacidad en disco, por lo que se recomienda proceder por el apagado y el remplazo del droplet.

El remplazo del droplet mismo mantiene la dirección IP, aunque Digital Ocean no ofrece garantía sobre este punto (pero dicen que “en general” su sistema reserva esta IP por “un rato” para usted después de que el droplet haya sido eliminado. Muy importante entonces, para no tener que redefinir nombres de dominios y cosas así, solo apagar momentáneamente sus droplets y proceder uno por uno (no apagar 4 a la vez y después volver a crear imágenes en cualquier orden).

En nuestro caso, no tuvimos problemas de redimensionamiento, pero queda claro que si usan 25GB de disco y redimensionan a un droplet de 20GB de disco, van a enfrentarse con problemas…

Particionamiento

El mayor problema que encontramos hasta la fecha fue la imposibilidad de redimensionar o distribuir a su gusto las particiones en el disco de las imágenes proveidas. Esto impide una serie de cosas, como el compartido de particiones entre varias máquinas (NFS, OCFS2, etc) y el uso de espacios de swap (en caso pase encima de la memoria autorizada).

API

Digital Ocean ofrce una API REST muy simple y bonita que permite crear nuevas imágenes a partir de un snapshot y un número de tipo de droplet, apagarlas, redimensionarlas, reiniciarlas, etc.

Como es REST, se puede probar hasta a partir de la ruta de un navegador.

También econtramos una librería PHP (de terceros) ya preparada para el uso de esta API, lo que reduce todavía los obstáculos para armar un sistema de gestión bien concreto con redimensionamiento adaptativo.

Esto siendo dicho, el panel de control todavía no ofrece opciones avanzadas para el redimensionamiento.

Calidad de las máquinas y servicios

Aunque no hayamos hecho benchmarking en los discos, como es de esperar para un disco SSD (que no presenta los mismos defectos que discos magneticos para el contexto de máquinas virtuales), el disco parece muy rápido.

También parecen tener mirrors de Debian y Ubuntu en su red, ya que la descarga de nuevos paquetes y las actualizaciones de estos dos sistemas es fulgurante (llegamos a 10MB/s para la instalación de BigBlueButton, que requiere más de 800MB de descarga).

Cuando se usan al extremo y se alcanza el límite de memoria, los servicios corriendo en la máquina se apagan, como es de esperar bajo Linux, por lo que es importante medir bien las primeras utilizaciones y dimensionar correctamente la máquina virtual.

Últimamente, y bajo presión popular al parecer, se agregó private networking dentro del segundo data center de Nueva York (y solo este). No hemos podido probarlo, pero entendemos que este permite generar menor latencia entre máquinas, en particular para el caso de replicación de bases de datos MySQL, por ejemplo.

Puede definir registros PTR a través de la interface.

Percances

En una (sola) oportunidad, quisimos acceder al panel de control un domingo en la mañana para redimensionar una máquina pero no se pudo, lo que nos generó bastante preocupación, pues no habíamos visto ninguna información correspondiente acerca de esta indisponibilidad. Todo el sitio de Digital Ocean siendo inaccesible, no pudimos verificar que estaba pasando, y solo teníamos una máquina virtual levantada, que no respondía. Por lo tanto, nos fue imposible determinar si esto había sido un caso excepcional o algo común. De lo observado desde este entonces (hace más de un mes ahora), no fue posible volver a observar este problema.

Conclusión

En esta etapa, todavía sigue siendo difícil entender exactamente el compromiso de Digital Ocean en términos de persistencia de los datos y de disponibilidad de la infraestructura, por lo que preferimos no usarlo para sistemas críticos. La dificultad de compartir particiones rinde imposible o por lo menos impráctico la elaboración de clusters totalmente redundantes. Esperamos encontrar una solución acerca de esto pronto.

Por lo general, estamos impresionados por la calidad del servicio ofrecido por Digital Ocean, en comparación con su costo, y recomendamos a todos los desarrolladores web trantando de comprobar la validez de nuevos sistemas de usar sus máquinas virtuales. Son muy prácticas y eficientes. Solo no se olviden de apagarlas y destruir el droplet después de haber tomado un snapshot para no seguir pagando mientras no las usan. Los montos pueden subir rápidamente, pero creemos que definitivamente representa un ahorro considerable en consideración del tiempo que se podría dedicar normalmente a la configuración de todas estas máquinas virtuales en un ambiente propio.

Cursos de desarrollo especializado Chamilo LMS 1.9

February 4, 2013 3 comments

En BeezNest estamos actualizando nuestro equipo de desarrollo a las
nuevas estructuras de desarrollo en Chamilo LMS 1.9.

Por ello, de todas maneras estaremos dictando unos cursos internos
*informales* en las oficinas de BeezNest Latino (oficina de Miraflores, Lima, Perú)

Nuestra infraestructura no nos permite trasmitir en buena calidad estos
cursos en streaming (principalmente por una obra que se está ejecutando
al costado de nuestro edificio), pero si desean, y aunque nuestro local
esté modesto y les advertimos con muy poca anticipación (falta menos de
una hora para el primero), estos cursos son abiertos a paticipación de
personas externas, y ustedes tanto como sus colegas están bienvenidos (previa
coordinación telefónica para evitar reventar el local) para participar
en ellos. Coordinar con Michela al 01/7195191.

Lunes 4/02/2013: 10am-1pm:
* El proceso de validación y calidad de código en Chamilo LMS
* Proceso de instalación (a nivel de código y estructura de datos) de
Chamilo LMS 1.9
* Global.inc.php: inicialización del sistema
* Estructura de página principal de cursos

Martes 5/02/2013: 10am-1pm
* Pruebas unitarias y sus ventajas para la calidad de software
* Generar pruebas unitarias
* Herramientas de curso (estructura de datos y requerimientos para crear
más herramientas)

Miércoles 6/02/2013: 10am-1pm
* Sistema de plantillas Twig
* Herramienta de ejercicios
* Herramienta de foros

Jueves 7/02/2013: 10am-1pm
* Sesiones
* Herramientas de reportes
* Herramientas de administración

No habrá entrega de certificados. Se trata de un curso de participación
libre con el objetivo de capacitar a futuros desarrolladores de Chamilo.

No es necesario participar a todos los cursos, pero no habrà material
digital/impreso distribuido, por lo que… lo que no se ve, se pierde.

Curso: Medición con XHProf y técnicas comunes de optimización, con diferencias entre PHP4 y PHP5

June 12, 2012 2 comments

Como de toda forma tengo que preparar el programa de mi curso: Medición con XHProf y técnicas comunes de optimización, con diferencias entre PHP4 y PHP5, lo cuelgo por aquí por si interesa alguien.

PHP

  • Historia del proyecto PHP (15′)
  • Diferencias entre PHP4.3, PHP5, PHP5.2, PHP5.3 y PHP5.4 (30′)

Profiling

  • Zend Debugger, XDebug y XHProf (15′)
  • Instalación y configuración XHProf (30′)
  • Medición con XHProf, Xdebug y KCacheGrind (30′)

Optimización

  • Optimización de servidores (hardware + SO) (10′)
  • Optimización de servidores web (10′)
  • Optimización de bases de datos (10′)
  • Técnicas de micro-optimización de PHP (15′)
  • Caché: system, opcode, script/variables (30′)
  • PHP-FPM (15′)
  • Integración continua con Jenkins PHP (30′)

Referencias

Problemas al crear cursos en chamilo despues de una instalación – ERROR 500

April 21, 2012 49 comments

Hola a todos,

Me acaban de llamar y escribir para reportarme un error que es común cuando se hace una instalación de la plataforma Chamilo 1.8.4.2 en un hosting y para no volverlo a repetir o tener problemas, por que no estoy disponible. Informo y detallo el error y la solución:

ERROR 500

Este usuario ha instalado su plataforma, pero al crear un curso le muestra este error:

SOLUCIÓN:

Paso 1: Ingresar como administrador al portal

Paso 2: Ingresar a la pestaña de: Administrador > Parámetros de Configuración de la Plataforma > Seguridad

Paso 3:  Buscar dentro de la configuración “Seguridad”

  • Permisos para los nuevos directorios (0777)
  • Permisos para los nuevos archivos (0666)

Paso 4 :Cambiar los permisos de seguridad:

  • Permisos para los nuevos directorios (0755)
  • Permisos para los nuevos archivos (0644)

Guardar configuración y Listo!  :)

Nota: Este arreglo sera visible solo para los nuevos cursos (cursos creados después del arreglo), cursos (antes del arreglo) tienen que ser eliminados y creados otra vez.

 

Bolsa de trabajo: Desarrollador PHP5

November 30, 2011 Leave a comment

Estimado(a),

La empresa BeezNest Latino S.A.C requiere de (02) colaboradores para trabajar en el área de DESARROLLO bajo proyectos de software libre (Drupal / Chamilo)

Que tenga experiencia técnica COMPROBADA en la mayor cantidad de estos temas:
1. Conocimientos avanzado de Lenguaje de Programación PHP5 (Experiencia mínima de 2 años en desarrollo web)
2. Conocimientos de Base de Datos MySQL
3. Conocimiento avanzado de inglés
4. Conocimiento en herramientas de desarrollo web no-gráficas (clientes FTP/SFTP, SSH, Eclipse, CVS/SVN, …), Linux.

A nivel personal se requiere que el postulante sea:

1. Muy hábil y con buen nivel de comunicación.
2. Proactivo, responsable y puntual.
3. Ordenado.
4. Trabajo en equipo y dispuesto a compartir responsabilidades con sus
compañeros.
5. Habituado al trato directo con diferentes áreas de la organización.
6. Facilidad de Adaptación, sentido crítico y Adquisición de Conocimientos.

Beneficios:

– Formar parte del equipo BeezNest.
– Capacitación continua 100% subvencionado por BeezNest para el curso: Experto en PHP web http://www.beeznest.com/es/diplomado/experto-php
– Desarrollar y Perfeccionar sus conocimientos de análisis y desarrollo bajo PHP.
– Horarios de Lunes a Viernes de 9:00am a 6:00pm (1 Hora de refrigerio)
– Crédito de una laptop para el trabajo en BeezNest.
– Excelente ambiente de trabajo.
– Salario competitivo y en crecimiento de acuerdo a las competencias mostradas.
– Jefe directo: Ing. Yannick Warnier (Desarrollador con más de 9 años de experiencia en desarrollo PHP, líder en el desarrollo de la plataforma de código abierto Chamilo, certificado Zend, reconocido por sus contribuciones importantes al cambio de valores sobre el software libre en Perú y las importantes aplicaciones del mismo en el ámbito educativo y empresarial)

Interesados enviar su CV en FORMATO .PDF a mmosquera@beeznest.com

(IMPORTANTE ADJUNTAR REFERENCIAS DE TRABAJOS ANTERIORES, INDICANDO NUMERO Y PERSONA DE CONTACTO PARA VERIFICACIÓN)

Saludos cordiales,
Michela Mosquera
BeezNest Latino S.A.C

%d bloggers like this: