Hace un tiempo que me decidí a usar algún framework para PHP, cansado de tener que usar mis libs, que por supuesto estaban lejos de ser perfectas, pero que en su momento me fueron útiles. Terminé elegiendo, por ahora, CakePHP. Es bastante fácil de entender, mucho mas que el framework de Zend y se ajusta a lo que necesito... hacer mucho con poco esfuerzo ;)
Lo único que me faltaba era decidirme por un IDE o un editor de código, a pesar de los grandes IDE como Eclipse y otros. Me terminé decidiendo por Vim, ya sé que muchos me recordaran que siempre me incliné por Emacs (ping Pepe) pero a pesar de es el mejor editor de texto, creo que Vim gana por su sencillez.
Así que ahora a configurar Vim para hacer más fácil la vida con CakePHP. Lo que voy a mostrar es como agregar el resaltado de sintaxis para los archivos .thtml usados en CakePHP.
Sacado de The Bakery, sitio donde se cocina CakePHP, estan estos sencillos pasos
mkdir ~/.vim
vi ~/.vim/filetype.vim
y agregamos esto
" my filetype file
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.thtml setfiletype html
augroup END
Solo queda guardar, salir y voilà!
martes, 8 de abril de 2008
Vim para CakePHP
jueves, 4 de octubre de 2007
wpa sin networkmanager
Algo que no me convencía era depender de networkmanager (y de gnome por lo tanto) para poder asociarme a una red wpa, así que aquí va la papa..
ejemplo práctico:
root@casper:/# apt-get install wpasupplicant
root@casper:/# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 unassociated ESSID:"HOMELINUX"
Mode:Managed Frequency=2.462 GHz Access Point: Not-Associated
Bit Rate:0 kb/s Tx-Power=20 dBm Sensitivity=8/0
Retry limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:25 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:18 Missed beacon:0
root@casper:/# iwlist eth1 scan
eth1 Scan completed :
Cell 01 - Address: 00:0E:2E:8D:2A:2A
ESSID:"HOMELINUX"
Protocol:IEEE 802.11bg
Mode:Master
Channel:11
Encryption key:on
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
48 Mb/s; 54 Mb/s
Quality=91/100 Signal level=-37 dBm
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
Extra: Last beacon: 32ms ago
editamos /etc/wpa_supplicant.conf y agregamos
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="HOMELINUX"
proto=WPA RSN
key_mgmt=WPA-PSK
pairwise=TKIP CCMP
group=TKIP CCMP
psk="acavalaclaveentextoplano"
priority=5
}
y con esto ya estamos en condiciones de empezar a trabajar.
bastará con hacer:
wpa_supplicant -Bw -Dwext -ieth1 -c/etc/wpa_supplicant.conf
y revisar con iwconfig que estemos realmente asociados
root@casper:/# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 IEEE 802.11g ESSID:"HOMELINUX"
Mode:Managed Frequency:2.462 GHz Access Point: 00:0E:2E:8D:2A:2A
Bit Rate:54 Mb/s Tx-Power=20 dBm Sensitivity=8/0
Retry limit:7 RTS thr:off Fragment thr:off
Encryption key:5493-7EE8-B928-CB64-E684-7AE5-21BF-AF6A-6B89-B569-3A7B-853F-2133-45DE-384F-9EF6 Security mode:open
Power Management:off
Link Quality=85/100 Signal level=-45 dBm Noise level=-89 dBm
Rx invalid nwid:0 Rx invalid crypt:26 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:18 Missed beacon:0
por último tomaremos ip (en este caso por dhcp) con
dhclient eth1
Listening on LPF/eth1/00:16:6f:2f:a7:7c
Sending on LPF/eth1/00:16:6f:2f:a7:7c
Sending on Socket/fallback
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.11 -- renewal in 391401 seconds.
root@casper:/# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:16:6F:2F:A7:7C
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:81 errors:26 dropped:44 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:639358 (624.3 KiB) TX bytes:261481 (255.3 KiB)
Interrupt:17 Base address:0xa000 Memory:bc008000-bc008fff
Y eso es todo...
si queremos mantenerlo de forma persistente y evitar estos pasos basta con editar /etc/network/interfaces
auto eth1
iface eth1 inet dhcp
wireless-essid HOMELINUX
pre-up wpa_supplicant -Bw -Dwext -iethX -c/etc/wpa_supplicant.conf
post-down killall -q wpa_supplicant
EOF
miércoles, 19 de septiembre de 2007
renombrar archivos con espacios
post estúpido para no olvidarlo luego, de cualquier forma me falta agregarle qe deje la primera letra (no número) en mayúscula y que vaya explorando recursivamente los directorios
for i in *;do archivonuevo=`echo "$i"| tr A-Z a-z`;mv "$i" "$archivonuevo";done
martes, 18 de septiembre de 2007
rsync: respaldando la notebook a un disco extraible
Bueno en esta entrega aprenderemos a hacer un backup de nuestro sistema... digo, porque nunca se tienen suficientes backups y aparte puede partir nuestro disco en el momento menos esperado
#!/bin/bash
LIST="/bin /boot /etc /home /lib /opt /root /sbin /usr /var"
destination="/media/extraible/respaldo/backup-casper/"
for i in $LIST; do
echo "haciendo backup de $i"
rsync -Cavz --delete $LIST $destination
echo "$i completo"
done
echo "backup completo"
####
totalmente barato y entendible puede mejorarse en mil aspectos (incrementales, rotación de backups, permitir que sea dinámico, avisos a través de DBUS, cronearlo .. que se yo) pero cumple con lo que necesito. En mi caso tengo un disco serial ata conectado por usb en el cual voy a guardar el backup de mi notebook completa (salvo los directorios de información como peliculas musica y otras cosillas.. que eso será sincronizado aparte) para actualizarlo de vez en cuando.
La gracia de usar rsync y no cp es que produce menos tráfico (importante cuando se tiene solo usb2.0) y solo re transmitirá lo que vea que haya cambiado. Con -Cavz lo que hacemos es preservar todos los permisos ignorar algunos errores y hacerlo en modo "verbose", --delete es para que si al sincronizar habíamos eliminado algo del directorio de origen sea también eliminado en el directorio de destino, y lo hice finalmente con un for para poder hacer un rsync independiente por cada directorio importante ya que mis anteriores intentos de hacerlo directamente con "/" y --exclude (para cada directorio que no queria respaldar) me daba problemas al momento re comenzar la sincronización si por algún motivo se me había cortado.
y bueno, eso es todo en escencia
miércoles, 11 de abril de 2007
ej filtro con bash
un poco de scripteria barata... (si no después me olvido y no tengo ganas de ponerme a pensar ni un minuto en algo qe ya hice antes jejeje)
deberia devolver mails enviados a cierto usuario en un dia determinado mostrando id del mensaje + direccion de correo de la persona que lo mando + hora de llegada + hora de entrega
for i in $(grep usuario /var/log/exim4/mainlog.1 | grep "=>" | grep "04-10" | cut -d " " -f 3) ; do echo;echo $i; grep $i /var/log/exim4/mainlog.1 | grep "<=" | cut -d " " -f 5;grep $i /var/log/exim4/mainlog.1 | grep "=" | cut -d " " -f 2;done>salida
viernes, 23 de febrero de 2007
mmm... rotar slogan con Drupal
Quizás no muchos sepan que últimamente me estoy dedicando, entre otras cosas, a desarrollar módulos para un CMS llamado Drupal.
La idea es que tengo ganas de hacer un módulo que eliga de una lista de slogans uno al azar para mostrar cada vez que se carga alguna página del sitio web. Puede ser que esta idea no sea muy original, es más quizás ya existe este módulo. Pero bueno si existe voy a ver en que estado está y sino lo voy a crear.
De más esta decir lo bueno que esta Drupal para desarrollar sitios web, es increíble!!, bien documentado, diseño modular, claro, etc....
miércoles, 14 de febrero de 2007
halt LG-LW20
Hi, this is my first post here...
Keep this easy. Mini HowTo about poweroff + ubuntu Edgy + LG LW20
Trouble: when i press shutdown, the system is halted but dont poweroff the notebook. the module snd_hda_intel isn`t unloaded correctly.
Solution: create a script that force module unload before halt signal.
joe@mobile:~$ nano -w /etc/init.d/kill_lame_snd
#!/bin/sh
case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop|"")
rmmod -f snd_hda_intel
rmmod -f snd_hda_codec
;;
*)
echo "Usage: kill_lame_snd [start|stop]" >&2
exit 3
;;
esac
then do chmod +x /etc/init.d/kill_lame_snd and update-rc.d kill_lame_snd start 80 0 6 .
enjoy halting !!!
EOF
lunes, 11 de diciembre de 2006
Como setear el número de columnas en Emacs
Algo que siempre olvido, al menos por ahora que estoy comenzando a usar Emacs, es como setear la cantidad de columnas a 72. Por lo general lo uso así cuando quiero editar documentos o notas en texto plano, solo para que se vean un poco más prolijas.
Buscando un poco en Google encontré la esta página que mas o menos decía lo que estaba buscando.
Resumiendo, las opciones son
- column-number-mode para ver el número de columna.
- set-fill-column para establecer la cantidad de columnas. En este caso es necesario pasarle como argumento el número de columnas. Lo podemos hacer con 'C-u 3 Alt-x' o 'ESC 3 Alt-x' 'Alt-3 Alt-x'.
- auto-fill-mode para que corte automáticamente las líneas al ancho de las columnas.