11/03/2008
Algo que me atraso en la madrugada era que CakePHP escapa todas las condicionales que le mandas en una consulta SQL, y si la condicional de casualidad esta formada con una funcion de MySQL, esta obviamente no se ejecuta.
Por ejemplo, esto no funcionara: (busca que el campo created sea mas reciente que hace 1 día)
1
2
3
4
5
| $conditions = array
(
"created" => "> date_sub( curdate(), interval 1 day)"
);
$this->Model->findAll( $conditions, null, "depart_date ASC"); |
Para evitar esto CakePHP implementa un operador mágico “-!” que le indica no escapar esa sentencia y nuestra consulta se ejecute como pretendemos.
1
2
3
4
5
| $conditions = array
(
"created" => "> -!date_sub( curdate(), interval 1 day)"
);
$this->Model->findAll( $conditions, null, "depart_date ASC"); |
Voilà!
25/02/2008
Si tienes montones de imágenes a las cuales tener que editarles algo, lo que sea, como recortarlas, ponerles un texto, aplicarles contorno redondeado, rotarlas y similares, estarás de acuerdo que es un dolor de cabeza hacerlo de una por una con programas de edición como gimp o photoshop.
En linux como para casi todo, hay mil maneras de solucionar esto (scripts para el mismo nautilus, plugins para gimp, etc) y una muy buena es usando Phatch (Photo Batch), que te permite hacer eso y muchos tipos de ediciones mas.
Un gran punto a favor es el poder agregar cada tipo de edición como una acción y poder combinarlas entre si para lograr diferentes resultados, ademas de poder guardar tus listas de acciones por si realizas lo mismo seguido.

Enlace: Phatch
10/02/2008
Eclipse tiene algún problema para correr aplicaciones gráficas que corren con librerías de Swing en Java 5 (1.5), a pesar de que el código este bien y corra perfectamente normal si lo compilas y lo corres desde consola, al correrlo sobre Eclipse solo conseguirás que cualquier menú gráfico como un simple Input Dialog se bloquee.

Este problema se soluciono con Java 6 (1.6), así que es recomendable actualizar, en Ubuntu puedes conseguir el paquete de Sun en el repositorio.
sudo aptitude install sun-java6-jdk
Enseguida puedes seleccionar que versión de Java esta utilizando tu sistema.
sudo update-alternatives –config java
Y finalmente configurar tus projectos existentes en Eclipse para que funcionen con la nueva versión.
Window -> Preferences -> Java -> Installed JREs

9/02/2008
Dato cultural que me traia loco un buen rato.
Si estas usando el driver de JDBC para conectarte a una base de datos MySQL desde Java y estas teniendo esta excepción al simplemente iniciar la conexión:
Exception: Error during query: Unexpected Exception: java.io.CharConversionException message given: null
Pueden ser dos cosas:
- Estas usando java 1.4, si es asi, solo actualiza a java 1.5 y problema solucionado.
- No tienes seteado utf8 en la configuración de MySQL, modifica tu archivo my.cnf (/etc/mysql/) y agrega los siguientes parametros, reinicia MySQL después de eso y listo.
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
7/12/2007
Los archivos CHM, son un formato para la ayuda de Microsoft, y son mas que HTML empaquetados en realidad, para verlos en Gnome existe el excelente GnoCHM, que funciona muy bien, pero necesite tenerlos en otro formato.
Para desempaquetarlos en Ubuntu solo tienes que instalar los binarios de libchm y utilizar un unico comando:
$ sudo aptitude install libchm-bin
$ extract_chmLib mi_archivo.chm carpeta_destino/
5/11/2007
Desde hace meses hay bastante ruido acerca de que Google sacaría un móvil que competiría directamente con el afamado iPhone de Apple. Afortunadamente Google es Google, y en lugar de hacer otro sistema cerrado y solamente basado en el factor estético, anunció que esta desarrollando toda una plataforma opensource para móviles.
La plataforma se llama Android, y esta compuesta de todo software que puede necesitar un móvil, sistema operativo y aplicaciones. Con el objetivo de unificar una sola plataforma, hacer mas sencillas las tareas como navegar por web y hacer que el teléfono se parezca cada vez mas a una PC, todo bellamente publicado bajo una licencia de código libre.
Nos preguntaremos en que le beneficia a una empresa sacar toda una plataforma sin cobrar nada? En el caso de Google es simplemente expandir su mercado de publicidad en línea, mientras mas gente lo vea, mas beneficios para ellos, según sus mismas palabras, se estima que hay 1500 millones de personas que pueden ver la publicidad de Google en una PC, en contraste, hay 3000 millones de personas con teléfonos móviles. ¿Nada tontos verdad?
Finalmente los objetivos de proyectos como OpenMoko se ven mucho mas cercanos ahora que hay un proyecto un tanto similar de una empresa con cantidades obscenas de capital. Excelente noticia!
1/10/2007
Me encantó esa frase de una nueva campaña de Nokia (Vía The Wired Blog), criticando indirectamente la nueva actualización del iPhone que deja inservible teléfonos desbloqueados.
“Los teléfonos deben ser abiertos a lo que sea” | “Los mejores dispositivos no tienen limites”

Y es que es cierto.
Algo que me encanta de los móviles de Nokia, es su preferencia por Symbian OS. Es simplemente agradable poder instalar cualquier cosa, de cualquier 3er persona, emuladores, editores, reproductores o desarrollarlo tu mismo, cualquier cosa, tal como una PC.
¿Cual es la ventaja del iPhone sobre otros teléfonos en su rango? ¿Cual es la ventaja del iPod Touch sobre un iPod Classic? El factor farol (para los no entendidos, presumir).
No digo que sean malos aparatos, pero si me van a vender algo con características de un teléfono de otro competidor de dos generaciones atrás, solo por agregarle una pantalla de touch screen y adémas de todo bloquearlo para no poder juguetear con el, pues como que no.
Prefiero babear con el futuro de OpenMoko.
Actualización:
Mark Pilgrim, ha escrito un articulo sobre el tema como leyéndome el cerebro.
24/08/2007
Una de las tantas (y tontas) patentes que no deberían de ser patentes, es el suavizado de fuentes por parte de Apple. Es una de las grandes razones por las que OSX se ve tan bien.
Uno de los muchos tips que se encuentra uno en los foros de Ubuntu, y que hago en toda nueva instalación, es activar el suavizado de fuentes de la siguiente manera:
Editar/Crear el archivo ~/.fonts.conf con el siguiente contenido.
Salte e inicia sesión y notaras la diferencia.
Antes

Después

Es un pequeño detalle que para mi hace una gran diferencia, no puedo trabajar a gusto sino estoy cómodo con lo que veo en pantalla :D
14/08/2007
Wt es un framework de desarrollo web que incluye su propio servidor web, si eres un empedernido desarrollador de C posiblemente te sera muy útil.
Especialmente si eres alguien que no tiene interes alguno en aprender a utilizar lenguajes interpretados que normalmente usamos los mortales (php, ruby, python, etc) o te importa poco lo que signifique DHTML, javascript, CSS, AJAX, ETC. Wt se encarga de la presentación y tu de la funcionalidad y los contenidos.
De los 11 beneficios que menciona el autor, el único que considero 100% válido es el portar viejas aplicaciones de escritorio en C++ a web fácilmente, pero de cualquier manera esta muy interesante el proyecto,
También existen otras opciones, como Tntnet, que es un servidor web que te permite crear templates con código de C++ embebido por medio de tags, tal como lo hace PHP o ASP.
Este es el código, de ejemplo en un simple Hello World con un Botón (clic para verlo funcionando).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| /*
* Copyright (C) 2006 Wim Dumon
*/
#include <WApplication>
#include <WContainerWidget>
#include <WText>
#include <WPushButton>
using namespace Wt;
// Este es el punto de entrada para nuevas sesiones
//
// Esta funcion se ejecuta cuando un nuevo usuario navega en la aplicacion,
// y despues que la libreria ha negociado el soporte para el navegador.
// Debe regresar un nuevo objeto WApplication
WApplication *createApplication(const WEnvironment& env)
{
// Instanciando a la aplicacion Wt.
WApplication *appl = new WApplication(env);
// Estableciendo el titulo de la aplicacion
appl->setTitle("Hello world!");
// Se pueden agregar Widgets a un padre llamando addWidget()...
// WApplication::root() es un WContainerWidget que esta asociado con
// la ventana completa del navegador.
appl->root()->addWidget(new WText(L"<h1>Hello, World!</h1>"));
// .. o especificando un pariente en la construccion
WPushButton *Button = new WPushButton(L"Quit", appl->root());
// Escuchar eventos del usuario usando un mecanismo de señales.
Button->clicked.connect(SLOT(appl, WApplication::quit));
return appl;
}
int main(int argc, char **argv)
{
return WRun(argc, argv, &createApplication);
} |
Prefiero mil veces usar algo para lo que fue hecho originalmente en lugar de complicar las cosas, pero nunca esta de mas saberlo.
9/08/2007
Esto es cochino, sucio y hay 99% de posibilidad de que si necesitas hacer esto, estes en un error de conceptos y lo que intentes hacer se pueda hacer mejor de otra forma.
Los Helpers fueron pensados para ser usados dentro de las Vistas. Punto.
Aún asi no deja de ser interesante el saber como utilizarlos dentro de un Controller, quien sabe, talvez algún día te saque de algún apuro.
1
2
3
4
5
6
7
| class UsersController extends AppController {
function index() {
loadHelper('Html');
$html = new HtmlHelper();
debug($html->link('Un buen link', 'http://cakephp.org'));
}
} |
Vía | CakeBaker