Sigueme en Twitter

Archivo de artículos en la categoría "Programación"

Ir al inicio

Depura tus Hojas de Estilo

25/07/2007

Mike ha sacado un servicio bastante útil, cuantas veces no nos pasa que estamos modificando una hoja de estilos mientras desarrollas un diseño y al ir cambiando tus puntos de vista muchas quedan sobrando.

CSS Redundancy Checker

CSS Redundancy Checker sirve precisamente para detectar cuales son los estilos que tenemos de sobra, solo pasale la dirección de tu hoja de estilo, la dirección de la página que quieres checar y listo.

Un punto a tomar en cuenta, es que no detecta los estilos que asignas con javascript, lo cual es muy común en estos dias de ajaxmanía, asi que ten cuidado al borrar un estilo que si puedas estar utilizando.

Un link mas para delicio.us obligado.

Sin Comentarios

Tutorial de programación utilizando Java

17/07/2007

Esta es una excelente introducción a la programación, para quien se este iniciando, desde cosas simples como explicaciones sobre diferentes tipos de variables, hasta conceptos Orientados a Objetos. Todos breves y bien explicados.

También le puede ser muy útil a quien ya sabe programar pero desee enterarse de como se hacen las cosas con Java.

Por cierto, In English.

Introduction to Programming Using Java

2 Comentarios

El Ciclo de Vida en CakePHP

15/06/2007

Brandon Parise, creó un diagrama donde podemos apreciar el ciclo de vida del script al hacer una petición a CakePHP. (clic en la imagén para verlo completo)

Ciclo de Vida en CakePHP

En la página de Brandon se ira actualizando el diagrama.

Vía | Cakebaker

Sin Comentarios

Una de JS

15/06/2007

Ajaxian enlazo hoy un par de scripts de esos que te hacen pensar “eso me hubiera servido hace x tiempo”, “eso lo puedo aplicar a x proyecto”, que me parecen interesantes.

FancyUpload

Primero, un uploader hecho por Harald Kirschner, con el siempre bien recibido framework de MooTools. Soporta seleccionar varios archivos y tiene una elegante barra de progreso.

FancyUpload

El mismo Harald, ya ha publicado cosas interesantes antes, como el autocomplete con el mismo MooTools.

Instant.js

Segundo, Instant.js, un ligero script para darle un efecto Polaroid a las imágenes con simplemente agregarlas a una clase de estilos.

Instant.js

Sin Comentarios

Templates en Django

29/05/2007

Si alguna vez haz utilizado Smarty en PHP entenderás facilmente como va el sistema de templates en Django, tal como en Smarty, su objetivo es no mezclar la lógica de programación con el diseño.

Su poder se basa en el principio de la herencia, todo esta definido en base a un diseño de base ‘padre’.. a menos que un diseño ‘hijo’ diga lo contrario.

Como siempre un ejemplo vale mas que cualquier verbo:

Este es un archivo en HTML que tomamos como ejemplo.. un head, un body, nada especial.

1
2
3
4
5
6
7
8
9
<html>
<head>
    <title>Este es el titulo de mi pagina</title>
</head>
<body>
    <h1>Un granjero tenia un perro</h1>
    <p>Se llamaba bingoooooo ... </p>
</body>
</html>

Como vamos a repetir esta página en muchos lados, nos conviene etiquetar cada parte que sera repetida considerablemente en bloques, mas especificamente; en title, content y footer.

A este le llamaremos archivo ‘base.html’.

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
    <title>{% block title %}Este es el titulo de mi pagina{% endblock %}</title>
</head>
<body>
    <h1>Un granjero tenia un perro</h1>
    {% block content %}<p>Se llamaba bingoooooo ... </p>{% endblock %}
    {% block footer %}
    <p>Gracias por visitarme<p>
    {% endblock %}
</body>
</html>

Ya teniendo la base definida, solo tenemos que preocuparnos por el contenido especial en cada página diferente, ya que el sistema de heredación elimina toda redundancia, y cada nuevo template contiene código que sea solo unico para el mismo.

Para ilustrarme mejor, esta es una página que solo necesito cambiar el titulo.

1
2
{% extends 'base.html' %}
{% block title %}Este es un titulo personalizado{% endblock %}

Esta otra solo necesitó cambiar el pie de la página.

1
2
{% extends 'base.html' %}
{% block footer %}Yo soy un mejor pie{% endblock %}

Y esta cambia el titulo y el contenido, mas no el pie

1
2
3
{% extends 'base.html' %}
{% block title %}<h3>Titulo grande.. pero menor</h3>{% endblock %}
{% block content %}<p>Este es un nuevo y simple contenido</p>{% endblock %}

Como puedes ver, al extender el template ‘base.html’ tomamos toda su información tal cual, incluidos sus bloques, los que si no son sobreescritos, quedaran de la misma manera.

Obviamente no estas obligado a utilizar el sistema de templates de Django, puedes utilizar cualquier metodo que te venga en gana, pero yo considero que este tipo de templating cumple.. y con creces.

2 Comentarios

Componente de JSON en CakePHP

28/05/2007

Un componente muy útil desarrollado Eelco Wiersma en base al paquete de PEAR Service_JSON.

Su uso es muy simple, agregar el componente en tu controlador y esta listo para encoding y decoding en JSON.

1
2
3
4
5
6
7
8
var $components = array('json');
 
$valor = array('uno', 'dos', 'tres', array('arreglo', 'multiple'));
//convertimos el arreglo a json y lo guardamos en $resultado
$resultado = $this->json->encode($valor);
 
//ahora al revez.. lo pasamos de json a un objeto
$resultado = $this->json->decode($resultado);

Bajalo en CakeForge

Actualización

Las funciones de JSON también estan disponibles como extensiones de PECL para PHP y a partir de PHP 5.2 son incluidas en los binarios por default.

Sin Comentarios

Guardando varias filas en CakePHP

22/05/2007

Una característica extraña (util?) de CakePHP es que guarda el indice de el ultimo registro guardado automaticamente en $this->Model->id y como bien sabemos, cuando insertas algo en un modelo, que trae seteada una id que ya existe, actualiza los datos en lugar de insertar unos nuevos.

Es muy comodo en realidad, pero en este caso en particular que tengo varias filas a insertar, no lo es.

1
2
3
4
5
6
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
  $this->data['Modelo']['dato'] = $dato;
  $this->Modelo->save($this->data);
}

Esto resultara en que solo se va a crear una fila nueva que se ira actualizando constantemente segun tratamos de insertar y quedara con el valor de ‘tercero’ porque es el último dato.

Para solucionar esto hay que destruir el índice que crea despues de cada inserción.

1
2
3
4
5
6
7
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
   $this->data['Modelo']['dato'] = $dato;
   $this->Modelo->save($this->data);
   $this->Modelo->id = false;
}

Voilá!

3 Comentarios

Que nadie usa Ruby on Rails?

19/05/2007

Ruby on Rails

Frecuentemente se dice que Ruby on Rails es un framework para cosas pequeñas y que no esta realmente probado, esto junto con la escasez de desarrolladores con experiencia en Ruby, trae mucha desconfianza por parte de las empresas fuera de Estados Unidos.

El caso, es que Rails ha sido utilizado y sigue siendo utilizado por empresas grandes, hay que quitar esa imagen que se le da de ser una herramienta solo de geeks y startups.

Esta es una lista de algunas empresas que utilizan Ruby on Rails hecha por el sitio workingwithrails.com, una comunidad de desarrolladores.

8 Comentarios

Variables Dinámicas en PHP

18/05/2007

Notita cultural.

El operador $$ en PHP se utiliza para las variables dinámicas, es decir, lo utilizas cuando quieres que el valor de una variable, se convierta en otra variable por si mismo, un tanto confuso, pero resulta muy util.

Un código dice mas que mil palabras.

1
2
3
4
5
6
7
8
9
10
11
12
$dinamica  = 'variable';
$$dinamica = 'Algun valor tonto';
echo $variable;
//Algun valor tonto
 
$variable = 'Otro valor tonto';
echo $variable;
//Otro valor tonto
 
$$dinamica = 'Amigas';
echo "Las llaves son tus ${$dinamica}";
//Las llaves son tus Amigas
3 Comentarios

API para Abbrr.com en Python

16/05/2007

Esta es una implementación del API de Abbrr de Victor Bracco, me encontraba investigando acerca de urlib y esta pequeña aplicación me resulto un excelente ejemplo aplicado.

Si vas a copiar y pegar, ten cuidado con las tabulaciones.

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
#!/usr/bin/env python
 
'''
Implementacion del API de Abbrr.com de Victor Bracco
 
Author: Juan Pablo Ortiz Arechiga
http://www.pablasso.com
 
Ejemplos:
p = Abbrr('http://www.pablasso.com/contacto')
print p.get()
 
p.out = 'xml'
print p.get()
 
p.out = 'bbcode'
print p.get()
 
p.url = 'http://docs.python.org/api/api.html'
p.out = 'link'
print p.get()
'''
 
import urllib
 
class Abbrr:
 
def __init__(self, url, out='link'):
  self.url = url
  self.out = out
 
def get(self):
  got = urllib.urlopen('http://api.abbrr.com/api.php?out='+ self.out +'&url='+ self.url)
  return got.read()

abbrr.py

Sin Comentarios