Sigueme en Twitter

Archivo de artículos en la categoría "Software Libre"

Ir al inicio

Usando funciones de MySQL en CakePHP

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à!

3 Comentarios

Editando imágenes por lote en linux

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.

Phatch

Enlace: Phatch

2 Comentarios

Eclipse y sus problemas con Java en Linux

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.

Input Dialog

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

Agregando Java 6

2 Comentarios

Problemas de conexión entre Java y MySQL

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

4 Comentarios

Convertir CHM a HTML en Linux

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/

Sin Comentarios

Gphone? No, mejor que eso

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!

Sin Comentarios

Los mejores dispositivos no tienen límites

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”

Campaña de Nokia

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.

3 Comentarios

Suavizando fuentes en Ubuntu

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

Sin suavizar

Después

Suavizado

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

10 Comentarios

Wt Framework de desarrollo web en C++

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.

12 Comentarios

Helpers dentro de controllers en CakePHP

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

6 Comentarios