Latín y web 2.0

Hoy he descubierto que facebook soporta latín. Afortunadamente pude estudiar latín cuando se cursaba segundo de BUP, y aunque nunca llegué a hablar con fluidez (ni de lejos), me ha parecido parte importante del curriculum estudiantil de una persona culta. Aunque lo denominan una lengua muerta porque no existe ninguna comunidad que lo use como primera lengua vehicular, no quiere decir que no lo use alguna comunidad como los estudiosos de la cultura clásica romana.

Me parece una fantástica noticia para la cultura, y más que la iniciativa haya partido de Facebook.

Publicada en General | Etiquetas , | Dejar un comentario

PC-BSD

Debido a que el portátil de mi hermana se estropeó y no queria comprar un nuevo, al fin y al cabo estamos en crisis, decidí desempolvar mi viejo portátil, un acer travelmate de la serie 4100, y con la idea de que ella trabajara con un sistema operativo abierto, me decidi por instalar un Linux, concretamente un ubuntu, pero desistí porque no conseguí que se conectara via inalámbrica al router casero. Lo curioso es que la tarjeta wireless funcionaba correctamente, y otras redes eran visibles menos la de interés. Debo reconocer que ese router y mi portátil siempre se llevaron mal.

Como siempre he tirado más para UNIX decidí darle una oportunidad a FreeBSD, pero como el usuario final iba a ser mi hermana y no yo, opté por buscar una variante mas amigable. Y encontré PC-BSD.

Grabé el CD para una instalación mínima y completarla por Internet, y debo decir que fue muy satisfactoria: el instalador es totalmente gráfico y detectó y configuró todo sin problemas. No en vano el portatil tiene ya sus años y daba por hecho que estaría soportado.

El interfaz gráfico es KDE en su versión 4.2 con un acabado muy agradable, y donde la instalación de nuevos programas se ha simplificado mucho comparado con la compilación vía ports tradicional de FreeBSD. El sistema de paquetes que propone esta distribución se base en incluir todo en el binario, sin presuponer la existencia de librerías en el sistema, de una forma similar a como opera OS X. Seguramente no es la solución óptima, pero funciona y sin quebraderos de cabeza. Instalé Mozilla Firefox como navegador predeterminado y tras comprobar que visualizaba correctamente webs de correo electrónico y de redes sociales, lo dí por finiquitado y se lo cedí a mi hermana que se ha mostrado encantada.

Finalmente, aunque recomendaba Ubuntu Linux a los amigos que se querían iniciar o deseaban alargar la vida útil de su computadora, esta variación BSD me parece que ha hecho un excelente trabajo simplificando la instalación del sistema operativo y la gestión del software mediante su sistema PBI. KDE como interfaz gráfico me parece correcto, porque a pesar de ser una aplicación pesada corre fluidamente en un hardware de hace casi cinco años.

Publicada en General | Etiquetas , , , , , , , | Dejar un comentario

Trabajando de noche

Sin duda muchos de nosotros han pasado largas horas delante del ordenador, y en más de una ocasión trabajando a destajo para finiquitar una tarea urgente.

Todos estamos de acuerdo en que el principal inconveniente de trabajar tarde es que nuestros ojos están cansados y los sometemos a más estrés. Sin duda la mejor opción es evitar trabajar sin luz natural, pero cuando no es posible lo mejor es que realizar dicha tarea sea lo más cómodo posible.

Vía applesfera he encontrado una utilidad que me ha ayudado bastante: f.lux

Esencialmente lo que hace es mostrar colores acordes a la iluminación disponible, y que hemos indicado, que se traduce en la sensación de observar una pantalla de color pastel.

Vuelvo a recomendar que lo mejor es irse a la cama, pero de no hacerlo y tras finalizar, tus ojos no los notarás tan cansados.

Publicada en General | Etiquetas , , , , , , , | Dejar un comentario

La importancia de la documentación

Cualquier proyecto de ingeniería por la complejidad que acarrea requiere de un esfuerzo especial para plasmar las idea principal y cómo desarrollarla de principio a fin. En el caso de los proyectos de software no nos encontramos en una situación muy diferente.

Pero cómo se puede documentar un proyecto software de forma sencilla y satisfactoria? En los tiempos en que UNIX era practicamente el único sistema operativo se usaban ficheros de texto plano, de hecho muchos de las guías rápidas de Linux o howtos también.

Si a estas alturas eso no nos parece una barbaridad debe faltar poco. Y por supuesto sustituir los ficheros de texto plano por archivos de Word no me parece una solución aceptable. Al fin y al cabo el hecho de tener que cambiar de aplicación para realizar una consulta es de todo menos eficiente, máxime cuando a pesar de las mejoras en potencia de cálculo sigue tardando una eternidad en abrir un simple fichero más o menos formateado.

Y si además se considera que los diferentes desarrolladores pueden no estar geográficamente (ni temporalmente seamos relativistas) en el mismo lugar. Se puede argüir que el correo electrónico salva este inconveniente. Pero en este caso hay que utilizar una segunda aplicación: el cliente de correo electrónico, para descargar el fichero y abrirlo con otra aplicación.

Sin duda alguna los proyectos de software libre, que adoro, han resuelto de forma satisfactoria este problema porque su propia supervivencia dependía de ello. Al ser proyectos colaborativos internacionales, y donde principalmente los desarrolladores aportan su conocimiento, ganas y tiempo libre, es de vital importancia que cada miembro sepa lo que debe hacer, para averiguar cómo hacerlo, y todo ello en el menor tiempo posible.

Es aquí donde el hipertexto o HTML demuestra sus virtudes:

  • Información accesible en línea
  • Referencias enlazadas en el documento principal gracias a los hiperenlaces
  • Estándar

A día de hoy donde muchas de las aplicaciones software a desarrollar hacen uso del navegador, tiene sentido usar esa misma herramienta para presentar la documentación. Al hilo de esta idea han surgido diferentes propuestas como wikis y blogs que además permiten la edición colaborativa.

Pero a todo esto le veo un problema. Por ser un aficionado a la lectura aprecio una correcta impresión, y se debe reconocer que un fichero HTML impreso es de una calidad inferior a un libro barato. De hecho durante bastante tiempo he usado LaTeX para generar documentación impresa de calidad como es costumbre entre científicos e ingenieros (de verdad).

Y aunque LaTeX está bien, por sus muchas virtudes, alguno de sus inconvenientes es aprender un lenguaje de macros (es anterior a la popularización de HTML) y que fue concebido como generador de documentos a imprimir.

Existe algo a día de hoy omnipresente en la sociedad de la información, que estructure correctamente la información, independiente de plataforma, a ser posible un estándar, donde prime el contenido, relevándonos de los detalles de composición y que permita un procesado ágil? Sí, XML.

Publicada en General | Etiquetas , , , , , , , , , , , | Dejar un comentario

Desarrollo web MAMP con CakePHP (III)

En esta tercera y última parte se va a desarrollar la aplicación a partir del esqueleto ya disponible en la aplicación pastelito. La aplicación va listar los productos disponibles y su precio, en este caso tartas, por lo que siguiendo las convenciones de CakePHP se va a crear un modelo (Tarta) que implementa los datos, un controlador (TartasController) que realizará la lógica, y una vista (tartas/index.ctp) que mostrará la información y se corresponde con la función definida en el controlador.

Recordemos que en la base de datos se tiene una única tabla (tartas) que contiene un registro de cada tarta, de ahí que el modelo se denomine en singular, y se crea en /pastelito/models/tarta.php con el siguiente código:

<?php
class Tarta extends AppModel {
var $name = 'Tarta';
}
?>

Por otro lado el controlador /pastelito/controllers/tartas_controller.php contiene:

<?php
class TartasController extends AppController {
var $name = 'Tartas';

function index() {
$this->set('tartas', $this->Tarta->findAll());
}
}
?>

que define una función que invoca a la vista tartas/index.ctp pasando como parámetro todos los registros del modelo Tarta.

Finalmente la vista debe presentar el resultado, ahora la vista será un directorio /pastelito/views/tartas, con un fichero index.ctp que genera el código HTML a mostrar por el navegador:

<h1>Tartas</h1>

<table>
<tr>
<th>Id</th>
<th>Producto</th>
<th>Precio (eur.)</th>
</tr>

<?php foreach ($tartas as $tarta): ?>
<tr>
<td><?php echo $tarta['Tarta']['id']; ?></td>
<td><?php echo $tarta['Tarta']['nombre']; ?></td>
<td><?php echo $tarta['Tarta']['precio']; ?></td>
</tr>
<?php endforeach; ?>
</table>

Se puede ver el resultado visualizando la URL http://www.onestic.dev/tartas.

listatartas

Todo bien, pero la aplicación no deja de ser muy sencilla, se va a añadir funcionalidad: al pinchar sobre el producto se ve un detalle del mismo.

Se modifica index.ctp de forma que el identificador sea un hiperenlace que nos lleve a una nueva vista:

<td><?php echo $html -> link($tarta['Tarta']['id'], "/tartas/view/".$tarta['Tarta']['id']); ?></td>

Se crea view.ctp que será la vista y que recibe como parámetro de entrada el identificador, para recuperar ese registro:

<h1><?php echo $tarta['Tarta']['nombre']?></h1>
<p><small>Precio: <?php echo $tarta['Tarta']['precio']?></small></p>
<p><?php echo $tarta['Tarta']['descripcion']?></p>

Y se añade la acción asociada a la nueva vista en el controllador con la siguiente función:

function view($id = null) {
$this->Tarta->id = $id;
$this->set('tarta', $this->Tarta->read());
}

Nótese la correspondencia de nombres, la función view lee el registro con identificador = id y la vista view.ctp muestra el resultado.

Información del elemento seleccionado.

Finalmente se edita /pastelito/config/core.php para modificar el nivel de depurado,
Configure::write('debug', 0);
y routes.php para redirigir automáticamente a la página inicial que deseemos: http://www.onestic.dev.

Router::connect('/', array('controller' => 'tartas', 'action' => 'index'));

Publicada en PHP | Etiquetas , , , , | Dejar un comentario

Desarrollo web MAMP con CakePHP (II)

En la anterior entrada se ha configurado la parte web para los desarrollos. Con respecto a la base de datos, no se va a entrar en detalles ahora, se recomienda instalar la versión empaquetada para OS X de MySQL, pues es muy sencilla y autoexplicativa.

A continuación se descarga el framework CakePHP y se descomprime donde uno desee, pero se va a añadir la consola de este framework a la variable PATH por comodidad, para ello se edita el fichero .bashrc y se añade la siguiente línea:

export PATH=$PATH:/Users/onestic/Sites/cake/cake/console

y se ejecuta . .bashrc para actualizar los cambios.

Recordamos que se había configurado un servidor virtual en /Users/onestic/Sites/pastelito y que vamos a aprovechar para servir la sencilla aplicación web siguiente: un listado de pasteles y precios de una pastelería virtual, al fin y al cabo esto es CakePHP.

Lo primero será borrar el directorio pastelito pues se va a volver a crear conteniendo el esqueleto de una aplicación web basada en CakePHP usando la utilidad de consola que provee, y donde aceptaremos las opciones por defecto salvo en la sección de configuración de base de datos, que en nuestro caso y por tratarse de desarrollo local se usará el usuario root sin contraseña y el nombre de la base de datos.

cd Sites
cake bake pastelito

Se adjuntan unas capturas de pantalla como orientación:

Consola Cake (I).

Consola Cake (II).
A continuación se crea la base de datos (pastelito) con una tabla (tartas) para la persistencia de datos. El nombre de la tabla puede confundir un poco, y es que CakePHP defiende la práctica de convención sobre configuración, y el modelo de datos lógico se nombra en singular mientras que la tabla que almacena los registros de este modelo se denomina en plural pero según la convención anglosajona, esto es, con una s final. De ahí que hayamos optado por tarta y tartas en vez de pastel o pastele por pastels o pasteles.

mysql -u root
CREATE DATABASE pastelito;
USE pastelito;
CREATE TABLE tartas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
descripcion TEXT,
precio FLOAT);

INSERT INTO tartas (nombre, descripcion, precio) VALUES (
'Lujuría de chocolate', 'Deliciosa tarta con tres variedades de exquisitos chocolates.', 30.99);

INSERT INTO tartas (nombre, descripcion, precio) VALUES (
'Tarta de Santiago', 'Tradicional tarta elaborada a base de almendras.', 20.99);

En este punto podemos comprobar que va todo bien visitando la URL del servidor virtual y se debe ver algo como lo siguiente:

Nuestra aplicación al principio.

Publicada en PHP | Etiquetas , , , , , , , | Dejar un comentario

Desarrollo web MAMP con CakePHP

Es de todos conocidos el paradigma de programación web LAMP, acrónimo de Linux, Apache, MySQL y PHP/Perl/Python. Y debido a su popularidad han surgido variantes como SAMP para Solaris o MAMP para Mac OS X. Con respecto a MAMP vamos a comentar que se ha referenciado a un proyecto “todo en uno”, aunque aquí se van a tratar los elementos por separado por ser el enfoque más general y aprovecha el software preinstalado en OS X (apache y php).

Como lenguaje de programación trataremos PHP, y concretamente el framework CakePHP para desarrollar rápidamente aplicaciones web.

OS X en su última versión a fecha de hoy, viene con el servidor Apache 2 instalado y que podemos iniciar a través de System Preferences/Sharing, donde se nos informa de los dos directorios preparados para servir contenidos web. Sin duda es engorroso estar limitado a sólo dos directorios, pues un desarrollador puede estar fácilmente involucrado en varios proyectos, por lo que vamos a presentar la configuración para tener un servidor virtual por nombre.

Se abre una sesión de consola y se edita el fichero de configuración de apache (/etc/apache2/httpd.conf) descomentando las líneas para habilitar soporte PHP y servidores virtuales:

LoadModule php5_module libexec/apache2/libphp5.so

# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

A continuación se edita el fichero de configuración de servidores virtuales (httpd-vhosts.conf) y se inserta el siguiente código:

<VirtualHost *:80>
DocumentRoot "/Users/onestic/Sites/pastelito"
ServerName onestic.dev
ServerAlias www.onestic.dev
<Directory "/Users/onestic/Sites/pastelito/">
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

Finalmente se edita el fichero /etc/hosts para resolver correctamente el nuevo servidor virtual.

127.0.0.1 www.onestic.dev

Para comprobar que todo funciona correctamente se crea el fichero index.php en la ruta física del servidor virtual (ver etiqueta Directory) con el siguiente código:

<?php phpinfo(); ?>

Y si se visualiza una pantalla similar se ha configurado con éxito un servidor virtual que ejecuta código PHP.

Servidor virtual con PHP.

Publicada en PHP | Etiquetas , , , , , | Dejar un comentario

Presentación

Hola,

esta es la primera entrada de un blog que mantiene un servidor, en colaboración con sus amigos de onestic.com. Llevamos unos cuantos años inmersos en las tecnologías de la información desarrollando soluciones software para diversas compañías y organismos públicos.

Aunque la documentación existente es abundante, sin duda demasiado y donde predomina el idioma inglés, este blog nace con la vocación de facilitar el acceso de documentación e información para la implantación exitosa de proyectos software a los desarrolladores de lengua hispana.

Somos conscientes de las numerosas dificultades que se presentan en un proyecto software, en todas sus etapas sin excepción, y desde aquí queremos presentar nuestra experiencia profesional con la humilde intención de facilitaros vuestro día a día de nueve a cinco.

Esperamos que os sirva de ayuda.

Publicada en General | Dejar un comentario