¿Cómo escribir Hojas de Excel desde PHP?

Se utiliza la librería Spreadsheet Excel Writer del framework PEAR para php.

Esta librería nos permite crear hojas de Excel de forma rápida y sencilla, con la ventaja de no tener que necesitar los objetos COM, es decir puede funcionar desde LINUX, soporta, formulas, imágenes y una gran cantidad de formatos para celdas y texto.

Escribir documentos pdf con PHP

¿Qué es FPDF?

FPDF es una clase escrita en PHP que permite generar documentos PDF directamente desde PHP, es decir, sin usar la biblioteca PDFlib. La F de FPDF significa Free (gratis y libre): puede usted usarla para cualquier propósito y modificarla a su gusto para satisfacer sus necesidades.
FPDF tiene otras ventajas: funciones de alto nivel. Esta es una lista de sus principales características:
  • Elección de la unidad de medida, formato de página y márgenes
  • Gestión de cabeceras y pies de página
  • Salto de página automático
  • Salto de línea y justificación del texto automáticos
  • Admisión de imágenes (JPEG, PNG y GIF)
  • Colores
  • Enlaces
  • Admisión de fuentes TrueType, Type1 y codificación
  • Compresión de página
FPDF no necesita de ninguna extensión para PHP (excepto zlib para activar la compresión y GD para soporte a GIF) y funciona con PHP4 (≥ 4.3.10) y PHP5.

Fuente: http://www.fpdf.org/

¿Qué es Desarrollo Ágil de Software?

El desarrollo ágil de software son métodos de ingeniería del software basados en el desarrollo iterativo e incremental, donde los requerimientos y soluciones evolucionan mediante la colaboración de grupos auto organizados y multidisciplinarios. Existen muchos métodos de desarrollo ágil; la mayoría minimiza riesgos desarrollando software en lapsos cortos. El software desarrollado en una unidad de tiempo es llamado una iteración, la cual debe durar de una a cuatro semanas. Cada iteración del ciclo de vida incluye: planificación, análisis de requerimientos, diseño, codificación, revisión y documentación. Una iteración no debe agregar demasiada funcionalidad para justificar el lanzamiento del producto al mercado, pero la meta es tener una «demo» (sin errores) al final de cada iteración. Al final de cada iteración el equipo vuelve a evaluar las prioridades del proyecto.

Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación. La mayoría de los equipos ágiles están localizados en una simple oficina abierta, a veces llamadas "plataformas de lanzamiento" (bullpen en inglés). La oficina debe incluir revisores, escritores de documentación y ayuda, diseñadores de iteración y directores de proyecto. Los métodos ágiles también enfatizan que el software funcional es la primera medida del progreso. Combinado con la preferencia por las comunicaciones cara a cara, generalmente los métodos ágiles son criticados y tratados como "indisciplinados" por la falta de documentación técnica.

¿Qué es SCRUM?

Scrum es un proceso en el que se aplican de manera regular un conjunto de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el mejor resultado posible de un proyecto. Estas prácticas se apoyan unas a otras y su selección tiene origen en un estudio de la manera de trabajar de equipos altamente productivos.

En Scrum se realizan entregas parciales y regulares del producto final, priorizadas por el beneficio que aportan al receptor del proyecto. Por ello, Scrum está especialmente indicado para proyectos en entornos complejos, donde se necesita obtener resultados pronto, donde los requisitos son cambiantes o poco definidos, donde la innovación, la competitividad, la flexibilidad y la productividad son fundamentales.

Scrum también se utiliza para resolver situaciones en que no se está entregando al cliente lo que necesita, cuando las entregas se alargan demasiado, los costes se disparan o la calidad no es aceptable, cuando se necesita capacidad de reacción ante la competencia, cuando la moral de los equipos es baja y la rotación alta, cuando es necesario identificar y solucionar ineficiencias sistemáticamente o cuando se quiere trabajar utilizando un proceso especializado en el desarrollo de producto.

Dos formas de protección del software

La protección del software se puede dividir en dos partes:

  1. Protección del software desde la misma programación, desde el mismo código fuente.
  2. Protección del software utilizando Ingeniería Inversa. Esto se suele hacer con programas denominados packers.
Podríamos añadir una más y es la combinación de ambas, ya que determinados packers  permiten interactuar desde el código fuente y desde el código ensamblador final.
  • La protección desde el mismo código fuente la realiza el programador. El programador según su propia experiencia, conocimiento de Ingeniería Inversa, imaginación será el que ponga las dificultades al cracking de su software. Crear licencias, programa DEMO y protección puede ser una labor muy costosa en tiempo y pruebas, pero también existe muchísima información en la red.
  • La protección utilizando Ingeniería Inversa es a partir de tu programa ya compilado, crear impedimentos al cracking. Esto se hace normalmente con programas protectores denominados: packers, empacadores. La utilización de estos programas son una gran ventaja ya que permiten crear licencias, crear programas DEMO o con restricciones, crear protección contra debuggers y/o desensambladores, comprimir tu aplicación, crear un sólo ejecutable sin tener dependencias y unas cuantas opciones que dependen del packer que estemos utilizando.
Al final de todo esto, como puedes observar, el camino que queda es largo y muchos programadores dejan la protección de su software a las empresas de packers.