martes, 27 de noviembre de 2007

Creá Webs Accesibles

A vos, diseñador, programador web, creá webs accesibles!
Y sacate una foto!!


Me sumo a la iniciativa de, como no podia ser de otra manera: creawebsaccesibles.com.ar/

Hay mucha información y fotos, la idea es, primero que todo, difundir la usabilidad y accesibilidad como parámetros de buen diseño.

Bueno, en el sitio está toda la info, incluso el folletito para bajar y sacarte una fotito :D




Technorati Tags: ,

Directorio de Delivery en córdoba

Buenas! Queria contarles de uno de mi nuevo proyecto, Blupo, que por ahora es un directorio de delivery de córdoba, donde pueden encontrar desde taxis y pizzas hasta kioscos y peluquerías (si, peluquerías para llevar!) a domicilio.
Y si no lo encontrás, lo agregás.
Y como le queremos poner todas las pilas, por cada negocio que se agregue te damos un numerito, y en abril
sorteamos un mp4!! (por lotería de córdoba, para que sea todo limpio y transparente)
fuaaaaaaa (como el paté de fuaaa)!!!

Bueno, la verdad es que espero que sea super útil para todos los vagos de córdoba, y que se prendan a la iniciativa. y si alguno tiene un comentario, crítica, insulto o lo que sea, que no dude en mandarlo, que nos hace felices :D



Technorati Tags: , , ,

Por Fin: Editor de blogs externo

Excelentisimo!!! lo que estuve esperando durante tanto tiempo!
Estoy subiendo este post desde ScribeFire, un excelentísimo plugin de firefox, que me permite escribir, dar formato y postear entradas al blog. Genial.
Algunas de las features principales:

  • Edicion WYSIWYG
  • Edicion HTML
  • Vista Previa en vivo
  • Puedo poner titulo (en algunos otros no podia!)
  • tags
  • crear nuevos blogs
  • manejar mis blogs
  • etc,etc,etc
Todo esto para el nuevo blogger de google, que tenia unos problemillas de compatibilidad.

En definitiva: Se la re banca, me encantó y voy a seguir usandolo.

Hasta la proxima.


Technorati Tags: , , ,

Powered by ScribeFire.

jueves, 25 de octubre de 2007

Frameworks de desarrollo web

He probado algunos (no todos) de los frameworks web que hay en el mercado, para Java (Struts), PHP (Cakephp), y Ruby (Ruby on Rails). Paso a enumerar ventajas y desventajas segun mi humilde opinion:

* Struts: Ventajas: ninguna, es pesado, hay que configurar uno o más xmls gigantes, en fin, no me gusta para nada, y no lo volvería a usar.

* Cakephp: Muy buen entorno inspirado en rails, anda bien con php 4 y 5, anda en casi cualquier hosting (todos soportan php). Desventajas: es php, es un lenguaje bastante feo. y le falta la capacidad sintáctica de ruby como para tener un framework realmente excelente.

* Ruby On Rails: La diva de los entornos de desarrollo web,
excelente, super cómodo, elegante, rápido, extensible, etc etc. desventajas: no todos los hostingss soportan ruby on rails. Mi hosting (bluehost) si. y la verdad que anda bastante lindo.


Conclusión: Estoy volviendo al poderoso Ruby on Rails. Subiendo la productividad y la calidad de los sitios :)

jueves, 13 de septiembre de 2007

El Truncate de cakephp me rompe el layout

Y si, para un sitio que hice (un blog), en la pagina de listado tenia el primer pedazo de cada post cortado a, digamos 600 caracteres... el problema: abria un div y no lo cerraba y me cortaba justo al medio. Como estoy usando cakephp termine con la siguiente solucion:

agregar en views/helpers/advtext.php


class AdvtextHelper extends Helper {
/**
* Truncates text.
*
* Cuts a string to the length of $length and replaces the last characters
* with the ending if the text is longer than length.
*
* @param string $text String to truncate.
* @param integer $length Length of returned string, including ellipsis.
* @param string $ending Ending to be appended to the trimmed string.
* @param boolean $exact If false, $text will not be cut mid-word
* @param boolean $considerHtml If true, HTML tags would be handled correctly
* @return string Trimmed string.
*/
function truncate($text, $length = 100, $ending = '...', $exact = true, $considerHtml = false) {
if ($considerHtml) {
// if the plain text is shorter than the maximum length, return the whole text
if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
return $text;
}

// splits all html-tags to scanable lines
preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER);

$total_length = strlen($ending);
$open_tags = array();
$truncate = '';

foreach ($lines as $line_matchings) {
// if there is any html-tag in this line, handle it and add it (uncounted) to the output
if (!empty($line_matchings[1])) {
// if it's an "empty element" with or without xhtml-conform closing slash (f.e.
)
if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) {
// do nothing
// if tag is a closing tag (f.e. )
} else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) {
// delete tag from $open_tags list
$pos = array_search($tag_matchings[1], $open_tags);
if ($pos !== false) {
unset($open_tags[$pos]);
}
// if tag is an opening tag (f.e. <b>)
} else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) {
// add tag to the beginning of $open_tags list
array_unshift($open_tags, strtolower($tag_matchings[1]));
}
// add html-tag to $truncate'd text
$truncate .= $line_matchings[1];
}

// calculate the length of the plain text part of the line; handle entities as one character
$content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $line_matchings[2]));
if ($total_length+$content_length > $length) {
// the number of characters which are left
$left = $length - $total_length;
$entities_length = 0;
// search for html entities
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) {
// calculate the real length of all entities in the legal range
foreach ($entities[0] as $entity) {
if ($entity[1]+1-$entities_length <= $left) {
$left--;
$entities_length += strlen($entity[0]);
} else {
// no more characters left
break;
}
}
}
$truncate .= substr($line_matchings[2], 0, $left+$entities_length);
// maximum lenght is reached, so get off the loop
break;
} else {
$truncate .= $line_matchings[2];
$total_length += $content_length;
}

// if the maximum length is reached, get off the loop
if($total_length >= $length) {
break;
}
}
} else {
if (strlen($text) <= $length) {
return $text;
} else {
$truncate = substr($text, 0, $length - strlen($ending));
}
}

// if the words shouldn't be cut in the middle...
if (!$exact) {
// ...search the last occurance of a space...
$spacepos = strrpos($truncate, ' ');
if (isset($spacepos)) {
// ...and cut the text in this position
$truncate = substr($truncate, 0, $spacepos);
}
}

// add the defined ending to the text
$truncate .= $ending;

if($considerHtml) {
// close all unclosed html-tags
foreach ($open_tags as $tag) {
$truncate .= '';
}
}

return $truncate;

}
}
?>

el helper, se usa igual que html->truncate, pero con un parametro extra, que en true toma en cuenta el html para le truncado, y hasta lo cierra bien y todo.


<
?=$advtext->truncate($text,600,'[...]',false,true)?> asi lo uso yo.

jueves, 9 de agosto de 2007

Aplicación de escritorio para postear a blogger

Hoy me puse a jugar un rato con python, (despues de tanto huirle), y la verdad que hace las cosas bastante faciles... muy a pesar mío.En Este momento estoy usando mi primer aplicación hecha en este lenguaje, es una gui en gtk para postear a blogger. Este post de hecho, esta creado con mi programilla, que si bien muy básico, me deja escribir y previsualizar al mismo tiempo, y ya tiene funcionalidad de postear entradas con titulo, texto y etiquetas

El proyecto empezó cuanto intentéusar un programa que supuestamente sirve para esto mismo,BloGTK, pero lamentablemente no funciona con blogger. Intente usar otros, pero ninguno andaba con blogger y la verdad no estan muy mantenidos. Así que huce lo que debía, le mande un mail al señor de blogtk, pero al no haber respuesta, y al ganarme mi curiosidad, lo rehice de cero...

Hay muchisimas cosas para agregarle, estaria muy bueno hacerlo bien, y aumentar la utilidad al máximo, el tiempo dirási esto sigue mantenido. Hasta incluso que si a alguien le parece útil, se podría armar un proyecto (GPL, obviamente) para que se siga manteniendo y mejorando esto.

Bueno, es hora de probar el boton "Save", asi que si este post aparece en mi blog, es que la magia ha funcionado. Espero que si

jueves, 12 de julio de 2007

Arnet

Arnet, Arnet arnet arnet arnet arnet y más arnet.
Arnet rima con la peor internet. El peor servicio de internet.
Se que todos lo saben, pero para usted, señoran, que esta por contratar arnet:
NO!!!!
Arnet es malisimo! Se cae a cada rato, no podes cancelar el plan, llamas para quejarte y cortan, te dejan con toda la bronca estos tipos de arnet.

Una vez más les dejo el mensaje proselitista: no contraten arnet.
hasta la proxima.