lunes, 28 de noviembre de 2011

Nociones de PHP

Esto es un resumen que hice hace un par de años en mi primer contacto con PHP:

* La sintaxis es tipo C.
* Las páginas tienen extensión '.php', empiezan por '' y acaban por '?>'.
* Todas las variables son por referencia y todas tiene el prefijo '$' (p.e. $num). Si se antepone el prefijo '&' (p.e. &$num) accedemos al puntero de la variable.
* No es necesario declarar la variables explícitamente, aunque puede ser buena idea hacerlo con los arrays.
* Por defecto solo se puede acceder a las variables locales. Para acceder a una variable global hay que anteponer 'global' (p.e. global $num).
* Las constantes (p.e. const max_num) sí pueden ser globales, pero solo pueden ser tipos simples.
* El comparador de igualdad es '==' aunque se puede usar también '===' que además fuerza a que los elementos comparados sean del mismo tipo (idem con '!=' y '!==').
* Para imprimir un texto en pantalla se utiliza 'echo()' (p.e. echo('Hola.\n');).
* Las cadenas pueden representarse entre comillas simples o entre comillas dobles. Las primeras son literales, mientras que las segundas realizan sustitución de contenido. P.e. si tenemos una variable $texto con el valor 'hola', echo('Prueba: $texto'); devuelve 'Prueba: $texto', mientras que echo("Prueba: $texto"); devuelve 'Prueba: hola'.
* El operador de concatenación de cadenas es el punto '.' por lo que el ejemplo anterior se podría haber escrito como echo('Prueba: ' . $texto);.
* El "if compacto" tiene esta forma: (evaluación ? parte cierta : parte falsa). P.e.: 'echo($num < 0 ? -1 : $num);' es equivalente a 'if ($num < 0) echo(-1); else echo($num);'.
* Ejemplo de asignación de valor por defecto a los parámetros de las funciones: 'function f1($num = -1) {...}'.
* Ejemplo de definición de clase: 'class Clase1 { private static $my_write = NULL;...}'. Ejemplo de uso de clase: 'Clase1::$my_write...'. Ejemplo de uso de clase llamándose a si misma: 'self::$my_write...'.
* Los arrays son muy flexibles. Son más bien árboles que pueden contener elementos de tipo y número diferente. Además se puede acceder a los elementos por índice o por nombre, y los índices no tienen por qué ser consecutivos.
* 'print_r()' recorre un array e imprime cada elemento junto con el nombre de su índice.
* Ejemplo de impresión de array: $tabla = array('cero' => 0, 1 => 'uno', 8 => 'ocho', 'doce' => 12); $tabla[3] = 'tres'; print_r($tabla);
* 'extract()' lee las partes de un array y genera automáticamente tantas variables como elementos con el nombre y valor correspondiente. Ejemplo para el array anterior: 'extract($tabla); echo($doce);'.
* Para depuración de errores por pantalla puede ser muy útil 'debug_print_backtrace()'.
* Para acceder a una BDD MySQL sin ODBC se debe instalar el paquete 'php5-mysql'. Ejemplo de uso: '$conn = new mysqli($host, $username, $password);'.

jueves, 24 de noviembre de 2011

Añadir acción al menú contextual en Windows

La aplicación GNU 'gzip.exe' es de consola de comandos y por comodidad he creado la acción 'Comprimir APK a gz' que ejecuta 'gzip -k' sobre ficheros del tipo APK:
  1. Copiamos 'gzip.exe' a 'C:\WINNT' (es un buen sitio porque está en los "Path")
  2. En una carpeta cualquiera, abrimos 'Herramientas -> Opciones de carpeta'
  3. En 'Tipos de archivo' añadimos una nueva extensión (si no existe ya)
  4. En 'Opciones avanzadas' añadimos una nueva acción con:
  • Acción: Comprimir APK a gz
  • Aplicación: C:\WINNT\gzip.exe -k "%1"

martes, 27 de septiembre de 2011

Conferencia Empresas de Software Libre

El sábado 24 asistí a una conferencia de empresas de Software Libre. Tres empresas españolas explicaron cómo hacen dinero desarrollando software libre.

Todas ellas coincidieron en que la mayoría de sus proyectos tienen una parte de software privativo, bien por conveniencia a la hora de ciertas negociaciones, bien por facilitar convencer a los directivos o bien porque en ese momento es la pieza clave que les hace ser competitivos (en ese caso suele liberarse el código más adelante).

Los tres coincidieron en resaltar que lo importante es el modelo de negocio, entender quién eres como empresa y no el software libre en sí, que lo veían más como una herramienta útil, que como un modelo ético.

  • Javier Viñuales, Yaco
    • Destacó la importancia de una buena red de contactos para conseguir empleados, asesoramiento... Para mantener dicha red hay que contribuir a la comunidad publicando código en proyectos libres.
  • Alvaro del Castillo, Andago
    • Comenzó con un vídeo de Stallman sobre el que comentó que no puede usarse como presentación ante nadie, aunque sus ideales son muy importantes para no perder el norte en cuanto a la libertad del software. Participan mucho en concursos específicos de software libre, en los que se cobra por la implantación y soporte.
  • Juan José Sanchez, Igalia
    • No pudo asistir y en su lugar hablaron dos compañeros suyos. Este empresa tiene una peculiaridad sorprendente: es completamente horizontal. Todas las decisiones importantes se toman en asamblea donde todos los empleados tienen un voto (tanto los recién llegados como los socios fundadores), todos los empleados que están en la misma fase cobran exactamente lo mismo y todos ellos llegan a ser socios en la última fase. Esto les obliga a aumentar sus ingresos constantemente, para lo cual se han internacionalizado de forma bastante abrupta y procuran involucrarse en proyectos muy especializados, que pocas empresas puedan realizar y por los que las grandes multinacionales pagan grandes cantidades.

viernes, 14 de enero de 2011

DNI Electrónico en GNU/Linux Ubuntu

Esta é unha guía para por a funcionar o DNIe en sistemas baseados en Ubuntu. En concreto probeino en Galinux 9.10 e Trisquel Awen 3.5 (ambos baseados en Ubuntu 9.10 Karmic Koala de 32bits).

A maioría dos tutoriales que encontrei son de cando non existía software DNIe para Karmic e tíñase que empregar o software de Jaunty Jakalope. Agora xa hai software para Karmic. Funcionoume cos dous.

Básicamente hai que dar tres pasos:
  1. Instalar o software do lector
  2. Instalar o software do DNI Electrónico
  3. Configurar o navegador Web Mozilla Firefox (ou baseado nel)

Paso1
Enlace
Instalamos por este orden:
  1. libopensc2_0.11.7-7_i386.deb
  2. opensc_0.11.7-7_i386.deb
Estes paquetes están en http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Ubuntu_Jaunty_32/Ubuntu_Jaunty_opensc-dnie_1.4.6-2_i386.deb.tar

Agora hai que indicar ó Synaptic que bloquee estes paquetes para que non se actualicen, senon deixará de funcionar.



Paso2

Instalamos:
  • opensc-dnie_1.4.7-1_i386.deb
Este paquete está en http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.7.Ubuntu_Karmic_32/Ubuntu_Karmic_opensc-dnie_1.4.7-2_i386.tar

Nota: nun dos sistemas tiven que engadir os seguintes paquetes para que funcionara todo:
  • pcscd
  • pcsc-tools (creo que esto solo é necesario se queremos usar o comando de consola 'pcsc_scan' para verificar o funcionamento do lector)
Agora podemos facer unhas comprobacións executando nunha consola 'pcsc_scan':
  • conectamos o lector ó PC e debe aparecer a súa identificación na consola
  • introducimos o DNIe no lector e debe aparecer a súa identificación na consola



Paso3
  • Executamos 'Aplicacións > Ofimática > Rexistrar módulo DNIe PKCS#11'.
  • Comprobamos que se instalou o certificado no navegador Web en 'Editar > Preferencias > Opcións avanzadas > Cifrado > Ver certificados > Autoridares > DIRECCION GENERAL DE LA POLICIA'.
  • Instalamos o dispositivo de seguridad no navegador Web en 'Editar > Preferencias > Opcións avanzadas > Cifrado > Dispositivos de seguranza > Cargar'. Indicamos como nome "DNIe PKCS#11", e como ruta '/usr/lib/opensc-pkcs11.so'.
  • Reiniciamos o navegador Web e volvemos a 'Dispositivos de seguranza' para comprobar que agora un dos 'Virtual Slot' aparece como 'DNI electrónico (PIN1)' ó meter o DNIe no lector. Se pinchamos nel pediranos o PIN que nos entregaron na policía.
  • Agora xa podemos usar o DNIe para identificarnos nas Web que o implementen. Esta páxina é so para verificar que a identificación co navegador Web funciona: http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html


Tutoriais:
  • http://nauj27.com/blog/2009/11/17/dnie-en-ubuntu-9-10-karmic-koala/
  • http://bitelia.com/2009/12/como-instalar-un-lector-de-dnie-en-ubuntu-9-10
  • http://monkiki.wordpress.com/2010/02/09/instalacion-y-uso-del-dni-electronico-en-ubuntu/
  • http://www.agnix.org/?q=node/2493



Utilidades: