miércoles, julio 08, 2009

Tip: Solución al Max(id) de MySQL en CakePhp

En determinadas ocasiones se requiere el ultimo id que se tiene en una base de datos en MySQL. La forma más práctica de hacer esto es usar la instrucción:

   1: SELECT MAX(id) as MaxId FROM Table




Ahora bien lograr esta instrucción en cakephp tiene su truco, algo que podemos hacer es usar la propiedad “query” de objeto model, pero el resultado es un poco difícil de acceder pues arroja un arreglo de 3 dimensiones. Lo mas sencillo, es usar las prestaciones de Cakephp y el modelo de acceso a la base de datos que maneja, de esta manera existe la propiedad find (‘first’) que permitirá arrojar un solo resultado, con la combinación de unos parámetros para el orden de los datos lograremos encontrar el ultimo id:





   1: $MaxId = $this->Model->find('first', array('order'=>'Model.id DESC'));



   2: $this->set('maxid', $MaxId['Model']['id']);




Lo anterior lo coloque dentro de un controlador.



Listo!

miércoles, junio 24, 2009

Manejando palabras acentuadas en PHP y Javascript

Antes de comenzar con el aspecto de la programación, una regla sobre gramática: las mayúsculas siempre, siempre, siempre se acentúan.

Dicho lo anterior, me tope con el caso en php que tenia una lista de opciones basadas en un select que no me mostraba los acentos correctamente. MySQL y php por omisión usan utf-8, por lo que es buena practica poner nuestro html en utf-8:

   1: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">




Ahora bien, Javascript no utiliza por omisión utf-8, asi que cuando coloque un texto mediante document.write, la pantalla desplego el texto acentuado como un carácter especial de html (html entity):





   1: function changecities( formObj )


   2:  {


   3:    statesObj = eval( "formObj.states" );


   4:  


   5:    state = statesObj[statesObj.selectedIndex].value;


   6:    citiesObj = eval( "formObj.elements['cities']" );


   7:  


   8:    // remove all entries


   9:    citiesNum = citiesObj.length;


  10:    for (i=(citiesNum-1); i >= 0; i--)


  11:    {


  12:      citiesObj.options[i] = null;


  13:    }


  14:    // add entries based on area selected


  15:    switch (state){


  16: case "3":


  17:    citiesObj.options[0] = new Option("Comondú",17);


  18:    citiesObj.options[1] = new Option("La Paz",18);


  19:    citiesObj.options[2] = new Option("Loreto",19);


  20:    citiesObj.options[3] = new Option("Los Cabos",20);


  21:    citiesObj.options[4] = new Option("Mulegé",21);


  22:    citiesObj.options[0].selected = true;


  23:    break;


  24:  


  25:     }


  26: }...




image



Php tiene una instrucción para transformar esto caracteres, de su valor al carácter que queremos:





   1: <?php html_entity_decode(“&#250”); ?>




Debe dar como resultado “ú”



image



Pero como vemos en la imagen, el select no se despliega correctamente pues en realidad la instrucción html_entity_decode da como resultado un conjunto de caracteres “ISO-8859-1”, así que podemos optar por hacer una de dos cosas:




  1. Usar utf8_encode:



       1: <?php utf8_encode(html_entity_decode(“&#250”)); ?>





  2. Cambiar la opción del conjunto de caracteres en la instrucción html_entity_decode(string,quotestyle,character-set):




  3.    1: <?php html_entity_decode("&250;",ENT_COMPAT,"UTF-8") ?>







El despliegue es:



image



Listo!

viernes, junio 12, 2009

Cambiar el tamaño de un archivo vdi de VirtualBox

No me gusta colocar tutoriales que se ubican en otro sitio web, pero en este caso, además de que el tutorial resolvió el problema que tenia con el tamaño inicial del disco de windows xp en virtualbox, es tan claro de seguir que no tuve problemas con llevar el cambio de tamaño del disco duro virtual de la partición.

http://www.my-guides.net/en/content/view/122/26/

Si a alguien le interesa de todos modos una traduccion, solo avisar.

Listo!

lunes, junio 01, 2009

¿Dónde esta el folder de patrones en Fireworks CS3?

En ocasiones me pongo a realizar maquetas de algun sitio web en Fireworks, aun cuando trato de usar Photoshop, lo cierto es que FW es bastante ligero y no me da lata sobretodo para la maquetacion.  Estoy trabajando en él para un sitio y se me ocurrio casi terminar el diseño del sitio.

Pero al momento de comenzar con la creacion de los archivos de CSS para la parte grafica me tope que no sabia cual era el tamaño de los patrones que habia colocado como relleno en algunos de los fondos, lo anterior es importante para optimizar el tamaño de las imagenes.

Asi que como me pase un ratito en la busqueda, pongo el folder exacto que se usa en WIndows Vista:

C:\Program Files\Adobe\Adobe Fireworks CS3\Configuration\Textures

Listo!

jueves, mayo 07, 2009

Instalando Ubuntu 9.04 en una Compaq Presario 1200 LA

Me tomo un par de dias realizar la instalación de Ubuntu 9.04 en una Laptop Compaq Presario 1200. Hace tiempo ya le había instalado Ubuntu 6.10, y había funcionado de maravilla, recuerdo que en su momento probé varias versiones de Linux y la que mejor me respondió, de inicio a fin fue la de Ubuntu. Sigue gustandome esa interface que muestra. Preste esta Laptop a mi primo por una temporada, en lo que me movía de lugar y resolvía algunas cosas de la oficina. Cuando la tenia de vuelta le habian instalado Windows XP. Por supuesto que estaba muy lenta. Horas sólo para que apareciera el Internet Explorer.
Por lo que enseguida me dí a la tarea de montar de nuevo linux. Revisé que ya estaba la nueva versión de ubuntu, la 9.04, que como su número indica representa la del mes de abril del 2009 (cada 6 meses lanzan una versión), decidí bajarla mediante un torrent, y obtuve la imagen ISO para quemar en CD. En una tarde obtuve el software para instalar.
Ya una vez que inserte el CD, aparecio una bonita pantalla que me decía si quería instalarlo o solo ejecutarlo de forma "Live". Y de aquí en adelante la aventura.
Resulta que desde la versión 7.10, Ubuntu maneja una versión actualizada del sistema Xorg, que trata de encontrar de forma automatica el mejor driver, monitor y resolución de la computadora donde se instala, pero en mi caso, mi tarjeta Trident no fue detectada. Esto no lo supe hasta el siguiente día en que me puse a verificar, el por qué me aparecia una pantalla vacía después de quererse instalar.
El truco aquí es instalar Ubuntu en "modo seguro de gráficos", al momento de la pantalla inicial se debe apretar el botón F4. De esta manera se puede lograr la instalación. Una vez finalizado el paso anterior, es importante colocar la configuración pertinente sobre la tarjeta de video. Después de varias preguntas en ubuntuforums.org y un poco de lectura sobre el asunto. Termine con la siguiente modificacion al archivo xorg.conf (una buena recomendación es respaldar el archivo antes de cambiarlo):

/etc/X11/xorg.conf

Section "Device"

   Identifier "Trident Microsystems CyberBlade XPAi1"

   Driver "trident"

   BusID "PCI:1:0:0"

EndSection


Section "Monitor"

   Identifier "Generic Monitor"

   Option "DPMS"

   HorizSync 28-51

   VertRefresh 43-60

EndSection


Section "Screen"

   Identifier "Default Screen"

   Monitor "Generic Monitor"

   Device "Trident Microsystems CyberBlade XPAi1"

   SubSection "Display"

     Depth 8

     Modes "1024x768"

   EndSubSection

   SubSection "Display"

     Depth 16

     Modes "1024x768"

   EndSubSection

   SubSection "Display" 

     Depth 24

     Modes "1024x768"

   EndSubSection

   SubSection "Display"

     Depth 32

     Modes "1024x768"

   EndSubSection

EndSection


De esta manera al reiniciar la laptop, ya contaba con Ubuntu 9.04 en todo su esplendor a 1024*768 sin problemas.

Listo!