Buscar aquí

martes, 11 de noviembre de 2014

Imprimir datos de tipo enum en una lista desplegable en cakephp

Supongamos que se debe tener 'datos conocidos' de una tabla, algo así como en una tabla llamada 'sexo' y los campos son 'Masculino' y 'Femenino', pero todavía no tenemos la tabla. Se puede implementar 'mientras tanto' un campo de tipo enum[1] con esos datos.

Ahora, supongamos que tenemos dos o mas tablas y queremos traer datos de ellas para luego mostrarlos en una lista desplegable, entonces podemos hacer lo siguiente:

En el controlador se define una función llamada addEnums que toma como parámetros el nombre del campo de la tabla y el modelo que se va a usar:

public function addEnums($name, $modelo){
$this->loadModel($modelo);

$type = $this->$modelo->getColumnType($name);
preg_match_all("/'(.*?)'/", $type, $enums);
foreach ($enums[1] as $n){
$data[$n]=$n;
}

$this->set($name, $data);
}

Luego, en el mismo controlador, se llama de la siguiente forma (tengo dos tablas, Users y Players. Users tiene un campo que se llama 'sex' y Player un campo que se llama 'position'):

$this->addEnums('sex','User');
$this->addEnums('position', 'Player');


Y luego, en la vista, se muestran de la siguiente forma:

echo $this->Form->input('sex', array('options'=>$sex));
echo $this->Form->input('position', array('options'=>$position));

Y listo!

[1] http://dev.mysql.com/doc/refman/5.0/en/enum.html

viernes, 31 de octubre de 2014

Agregar tipos de archivo a Bluefish

Uno de los editores por defecto que tiene ubuntu es bluefish. Cuenta con resaltado de sintaxis y reconoce muchos lenguajes, pero no los tiene todos, por ejemplo la extensión ctp, que es la que usa CakePHP[1] para mostrar las vistas. Entonces, éste tipo de archivo se ve en blanco y negro. Horrible.

Otra de las cosas que tiene bluefish es que no se puede añadir otro tipo de archivo desde la interfaz gráfica, por lo que aquí está una solución a ese problema.

Lo hacemos con ctp, que es igual a php, pero para cake.

Se copia el archivo donde se especifica cómo se comportará el editor para un lenguaje (php) con el nombre que queremos que aparezca (ctp)

sudo cp /usr/share/bluefish/bflang/php.bflang2 /usr/share/bluefish/bflang/ctp.bflang2

Luego se edita ese archivo

sudo gedit /usr/share/bluefish/bflang/ctp.bflang2

Y reemplazamos con coincidencias de capitalización las palabras PHP por CTP y php por ctp

Y listo!

Al iniciar bluefish coloreará nuestro ctp

[1]http://cakephp.org/

miércoles, 29 de octubre de 2014

SFTP con otra instancia de SSH

Buen día

Supongamos que se contrata un servicio de VPS al que se puede acceder solo por ssh y con una llave como en amazon ec2, y que este VPS va a ser un servidor web. Los usuarios desarrolladores del VPS necesitan acceder a este servidor, pero el administrador no puede dar la llave por seguridad. ¿Solución? Un servidor ftp, por ejemplo, pero ftp es inseguro [1], pero podemos asegurar mediante ssl o pasarlo por un túnel ssh. Supongamos que no queremos todavía ssl, y accedemos a la segunda opción. ¿Cómo hacerlo en la instancia de amazon?

Bueno, he aquí una solución:

Seleccionamos un puerto que no esté siendo usado y lo abrimos en el firewall de amazon añadiéndolo a las reglas de seguridad del grupo. Para el ejemplo será el 2221.

Se crea un usuario para editar los archivos web. En amazon el usuario por defecto es www-data. Así que podemos cambiarlo. Para nuestro ejemplo, creamos el usuario con nombre http. Hacemos que apache arranque con este usuario.

Detenemos apache

sudo service apache2 stop

Editamos /etc/apache2/envvars

Cambiamos www-data por http

Editamos /etc/passwd

Cambiamos /home/http por /var/www

Cambiamos los permisos del directorio /var/www PERO no del directorio en si. Este debe ser de root

chown http:http -R /var/www
chown root:root /var/www


Reiniciamos apache

sudo service apache2 start

Copiamos /etc/ssh/sshd_config con otro nombre /etc/ssh/sshd_ftp_config y editamos ese archivo

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_ftp_config

sudo nano /etc/ssh/sshd_ftp_config


Cambiamos 22 por 2221

Cambiamos ChallengeResponseAuthentication no por ChallengeResponseAuthentication yes

Cambiamos PasswordAuthentication no por PasswordAuthentication yes

Cambiamos Subsystem sftp /usr/lib/openssh/sftp-server por Subsystem sftp internal-sftp

Y agregamos al final

Match User http
    ChrootDirectory /var/www
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

Y arrancamos el nuevo servicio

sudo /usr/sbin/sshd -f /etc/ssh/sshd_ftp_config

Y listo, Ya podemos conectarnos por filezilla por sftp

sftp://[ip] 

[1]http://juan0022.blogspot.com/2012/09/ftp-es-un-protocolo-inseguro.html

martes, 28 de octubre de 2014

Descargar fuentes de Mac y iOS

Esto es para que no se me olvide y, para futuras referencias. Para descargar las fuentes de Mac e iOS, proporcionadas oficialmente por Apple, ir a la página:

http://opensource.apple.com/tarballs/