Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Anunciarse aquí

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

melkorcete.com

Convertir saltos de linea

Agosto 31st, 2006 - [Enlace local]

PHP
Por lo general, si guardas los datos de tu página en una Base de Datos como MySQL, te habrás percatado de que al volcar los datos directamente con un print $fila["Columna"], no respetaba los saltos de carro (tecla enter) que no fueran creados en XHTML con <br />.

A partir de ahora no tendras ese problema, sólo tienes que usar esta función:

// Creamos la consulta y la ejecutamos
$resultado = mysql_query("select * from posts where idpost = 2") or die (mysql_error());
$fila = mysql_fetch_array($resultado);

// Si solo quereis convertir el /n en <br /> :
print nl2br( $fila["POST"]);

// Si ademas quereis convertir el XHTML para evitar que se interprete:
print nl2br(htmlentities($fila["POST"]));



A los que os preocupe un posible fallo de validación de XHTML, no os preocupeis, se renderiza con <br /> no con <br> así que es perfectamente válido.


Artículos Relacionados:

Techanorati Tags Technorati Tags: Programming, PHP, MySQL, XHTML
Add to del.icio.us Menéalo Digg Fresqui BlogMemes Furl NeoDiario Permalink

» Leer más, comentarios, etc...

AlexdwBlog()

GridEditor 1.0

Agosto 31st, 2006 - [Enlace local]

Después del post sobre el uso de remoting para realizar consultas a bases de datos se me ocurrió que en numerosas ocasiones necesitamos cargar datos pero no deseamos que aparezcan en el Datagrid. En nuestro caso podríamos desear que no apareciese el dato usuarioID, pero este es necesario que lo tengamos para posteriormente poder eliminar [...]

» Leer más, comentarios, etc...

melkorcete.com

Feliz BlogDay2006

Agosto 31st, 2006 - [Enlace local]

PHP
Hoy es el BlogDay2006, un evento que se celebra por segundo año consecutivo y que sirve como lanzadera para los nuevos talentos de la blogosfera. La costumbre en este día es escribir una pequeña reseña sobre cinco blogs que hayas descubierto recientemente y que quieras dar a conocer. Aquí os dejo cinco blogs que sigo desde hace relativamente poco y que ya se han convertido en imprescindibles en mi agregador de feeds.

FeedBuayacorp. Me encanta, trata los artículos con mucho mimo para que lleguen a todos los públicos. Me encantó su reciente iniciativa de sortear un voucher para una certificacón de Microsoft. Recomendable sin duda para todos.

FeedAnieto2k. ¿Qué decir que no se sepa ya? La he descubierto gracias al Planet Webdev y desde entonces soy un lector asiduo. Me encanta su diseño y su visión de la Programación Web. Sus artículos te traerán lo más novedoso de nuestro mundillo de forma clara y con ejemplos.

FeedRecortex. Aunque no sea un Blog propiamente dicho, es uno de mis fijos en el RSS. Directorio de Códigos con explicaciones y a disposición de todos los visitantes. Todo el material a tu disposición. (Por cortesía de Juanjo Navarro)

FeedASP.NET. Por motivos de trabajo, me aficione a este directorio donde la gente sube sus artículos relacionados con el ASP.NET. Muchos me han sido de gran utilidad, o me han dado ideas para otros métodos. Sinceramente recomendado a todos aquellos que se dediquen al .NET

FeedEl cajón Desastre. Esta es la nueva web de mi gran amigo dubas. Se centra en programación más que en diseño. Contenidos muy currados, sin dejar nada al azar. Aprende todo lo que tiene que enseñarnos, ¡que es mucho!


Techanorati Tags Technorati Tags: BlogDay2006, Programming

Add to del.icio.us Menéalo Digg Fresqui BlogMemes Furl NeoDiario Permalink

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering

El IDE ha muerto viva el ISE

Agosto 31st, 2006 - [Enlace local]

Interesante artículo donde se explica lo que es un ISE, a diferencia de los IDE (Integrated Development Environment) Los ISE proporciona las funcionalidades necesarias para permitir diseñar y desarrollar servicios es decir soportar SOA (Arquitectura orientada a servicios) . También se menciona en el artículo herramientas libres y de pago que soportan estas funcionalidades.
La noticia la encontré en el Blog de Arquitectura Orientada a servicios, ampliamente recomendado.


powered by performancing firefox

» Leer más, comentarios, etc...

el feRoRcarril

Problemas con pruebas en Rails

Agosto 31st, 2006 - [Enlace local]

Hace poco, con la publicación de PatchServer y toda la pesca, me puse a juguetear con las pruebas de Rails, para actualizar las que tenía y escribir algunas nuevas.

En general todo fue más o menos bien, excepto dos cosas:

  1. Tenía problemas para crear una vista en el volcado de la base de datos de pruebas funcionales, ya que no puede estar dentro del db/schema.rb (yo lo podría haber añadido a mano, pero al siguiente rake migrate se iba a borrar, así que vaya gracia).

  2. Dos de las pruebas funcionales me fallaban con un error interno de Test::Unit. Los dos errores daban en un assert_redirect_to. Mu raro.

Crear una vista en el volcado de pruebas

Después de estar investigando un rato, vi que una solución podía ser crear la vista a mano (no me gusta, porque viola el DRY, pero ahora mismo, el uso de vistas y otras cosas no muy «Raileras» suele llevar a problemas así).

El caso es que no parecía haber soluciones mucho mejores, así que investigué cómo era, y resultó ser bastante sencillo: simplemente añadir un nuevo trozo de código para la tarea db:test:prepare del Rakefile. Y hacer eso es tan fácil como crear un fichero *.rake en el directorio lib/tasks, tal que así:

namespace :db do
  namespace :test do
    task :prepare do |t|
      ActiveRecord::Migration.execute <<EOS
      CREATE VIEW patch_view AS SELECT patches.*, ...
EOS
    end
  end
end

Problema 1 solucionado. Ahora quedaba, con todas las demás pruebas funcionales dando positivos, ver por qué quedaban dos que fallaban.

Problema con el assert_redirect_to

El error que daba era algo así:

  1) Error:
test_add_item(PatchesControllerTest):
RuntimeError: The number of parameters does not match the number of substitutions.
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:92:in `assert_redirected_to'
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:313:in `clean_backtrace'
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:74:in `assert_redirected_to'
    ./test/functional/patches_controller_test.rb:49:in `test_add_item'

  2) Error:
test_update(PatchesControllerTest):
RuntimeError: The number of parameters does not match the number of substitutions.
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:92:in `assert_redirected_to'
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:313:in `clean_backtrace'
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/assertions.rb:74:in `assert_redirected_to'
    ./test/functional/patches_controller_test.rb:67:in `test_update'

14 tests, 48 assertions, 0 failures, 2 errors
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby...]

(See full trace by running task with --trace)

Lo cual no tenía ningún sentido para mí. Entonces, busqué en Internet el error, a ver si le había pasado a alguien…. y nada :-( Así que seguí mirando, y me di cuenta de que había otras llamadas a assert_redirect_to que no fallaban… ¿qué diferencia había entre unas y otras?

La diferencia era que las dos que fallaban necesitaban una sesión abierta con un usuario con permisos apropiados. Jur.

Si a alguien le pasa, espero que encuentre esta entrada :-) Ahora, a ver cómo creo una sesión de pega para que la aplicación de pruebas se lo crea…

ACTUALIZACIÓN (2006-08-31): Se me olvidó comentar que, para el que no use o no conozca la de objetivos útiles que tiene el Rakefile que viene de serie con los proyectos Rails, hay una orden muy interesante: rake --tasks. Más sobre esto en el wiki de Rails, en WhatIsRakeAndWhatDoesItDo.

» Leer más, comentarios, etc...

Buayacorp

ClickOnce y Firefox

Agosto 31st, 2006 - [Enlace local]

La implementación ClickOnce permite publicar aplicaciones basadas en Windows en un servidor Web o en recurso compartido de archivos de red para simplificar la instalación. Visual Studio ofrece compatibilidad total para la publicación y actualización de aplicaciones implementadas con ClickOnce. La implementación ClickOnce está disponible para los proyectos creados con Visual Basic, Visual C# y Visual J#, pero no para Visual C++

Fuente: MSDN.

Leyendo uno de los mensajes de la lista de desarrollo de mono, me enteré que existe -desde hace un buen tiempo- una extensión para Firefox, que permite instalar las aplicaciones desplegadas con ClickOnce de una manera similar a lo que se hace con IE.

Sin duda una extensión muy útil para los zealots de .NET y Firefox. :-D

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering

Crea documentos PDF con .NET

Agosto 31st, 2006 - [Enlace local]

Intreresante Librería para crear documentos PDF en .NET


powered by performancing firefox

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering

Aprediendo SCRUM

Agosto 30th, 2006 - [Enlace local]

A través de un post en Navegapolis me entere del blog UnKasoft, UnKasoft es una empresa que tiene implementado SCRUM en sus proyectos, bueno lo interesante de este blog son las lecciones que te dan cabe resaltar que las lecciones no son teóricas sino se plantean desde escenarios reales, es decir como lo práctica esta empresa, así resalto los siguientes post de este blog

Planificación del Sprint
El Sprint BackLog
El Daily Meeting

Otros links que he encontrado muy interesantes desde su blog son:

Five signs of trouble in an Iteration
An XP Team Room


» Leer más, comentarios, etc...

design-nation.blog/es

Aplicaciones multiusuario con Unity ( y actionscript y xml )

Agosto 30th, 2006 - [Enlace local]

Hace poco, y tras una demostración, a la empresa le entró el proyecto de una aplicación multiusuario. Una comunidad virtual que recientemente vio la luz ( y de qué manera, con anuncio en el telediario de la cadena incluido ).

Como ya se había utilizado tanto para la demo, como para un proyecto interno de la empresa, se decidió utilizar Unity Socket Server, y UClient, el set de librerías AS2 desarrolladas por Colin Moock,( el autor de los famosos libros de actionscript ) para trabajar con Unity. El resultado: fabuloso. A pesar de ciertos fallos, que según reflejaba Colin en la lista de correo, se corregirán en la versión 3 de Unity, me parece un servidor fabuloso. Eso sí, hay ciertas pegas o al menos una gran pega. A pesar de que la API está relativamente bien documentada ( desde luego mucho mejor que mis desarrollos ( documentando v1 / documentando v2 ) ), los tutoriales son muy escasos y relacionados con aplicaciones muy básicas y sencillas. El desarrollo de una aplicación tan grande ( en cuanto a complejidad y comprensión del servidor ) ha sido muy costoso.

Algunas características de UClient son:


Algunas características del desarrollo para la aplicación son:


Conclusión. Otro desarrollo costoso ( ha sido como un parto ). Pero por primera vez en mi vida como desarrollador ( en lo que a proyectos muy grandes se refiere ) estoy muy contento con los códigos realizados. La aplicación no solo es robusta, sino que es muy fácilmente extensible, gracias al ya comentado uso de interfaces. La abstracción y desconocimiento de unas zonas de la aplicación por otras, ayuda muy mucho en esto.

Hay desarrollos en los que el resultado final es muy vistoso, pero el código no es extensible o es directamente código espagueti. En este caso no solo estoy contento con el resultado, sino que también estoy muy satisfecho con los códigos. Baste decir una cosa. Aunque la comunidad ha visto la luz ahora, se desarrolló en enero y febrero. El caso es que dada la favorable acogida que ha tenido por los usuarios a los que iba dirigida ( el cliente está como se dice coloquialmente "que no mea" ), está en proceso el desarrollo de más salas, y a pesar de haber pasado seis meses, y haber tirado miles de línea de código entre medias, no estoy teniendo dificultades en añadir los nuevos contenidos ( vamos, que me sorprendo hasta yo mismo a medida que repaso los códigos de lo bien que estaba ).

Así que ya saben, a tunear el coche del neng, que es lo que me da de comer. ;D


( Como verán hago mucho hincapié en el uso de interfaces. En los cursos avanzados de programación que he impartido he notado como la mayoría de los flasheros, o no sabían lo que era un interfaz, o se habían quedado en la definición "es un contrato que obliga a desarrollar los métodos en la clase que implementa el interfaz que los declara" sin ir más allá. Si me permiten un consejo, investiguen más, esfuércense y entiendan el polimorfismo a través de interfaces. Cuando pasar un interface como parámetro, o tipar un objeto no como el tipo de la clase de la que es instancia, sino como tipo interface implementado por esa clase, sea parte habitual de su trabajo, vivirán mucho más felices, al menos si tienen que realizar desarrollos grandes o pretenden reutilizar códigos entre proyectos )

» Leer más, comentarios, etc...

design-nation.blog/es

Motor de aventuras gráficas con AS2 y XML ( version 2 )

Agosto 30th, 2006 - [Enlace local]

En una entrada anterior, hablamos del desarrollo de un motor para aventuras gráficas, con ActionScript 2 y gestionado completamente por XML, que permitía una muy rápida generación de aventuras gráficas.

Con aquel motor, y si no me engaña la memoria, fueron 26 los cdroms que se realizaron ( entre castellano, catalán, valenciano y gallego ) en 4 meses.

En el momento de escribir esta entrada, ya son varios los cdroms ( en diferentes lenguas ) que han salido con la "versión 2" del motor.

¿ En qué consiste ?. Repasemos primero lo que ofrecía la versión 1.

La conclusión es que, con este motor se podía trabajar-y se trabajaba- ( sin tener que escribir ni una sola linea de código ) en varios cdroms a la vez con un equipo de guionistas, animadores y personas escribiendo archivos xml de configuración de escenas por cada cd.

Todo esto está muy bien, pero.. ¿ se podía mejorar ?. Sí, y eso es lo que se hizo en la versión 2 del motor, en la que se añadieron:

Con este motor, y gracias a los divertidos guiones realizados por el departamento de guión, a las fabulosas animaciones realizadas por el departamento de animación, los grafismos del departamento de diseño, y la elaboración de los xml de configuración de escenas por tecnología, se han podido realizar ( y se siguen realizando ) numerosos cdroms, en diferentes idiomas, y trabajando en tres o cuatro a la vez ( dado que no es necesario tirar una sola línea de código ). Y a los niños, les gusta el juego ( aunque haya preguntas de matemáticas, o de lengua ).


Y sí, realizar el motor, .... ha sido difícil. Pero ha quedado chulo. Podéis ver el resultado a partir de septiembre, cuando empiece el curso escolar y distribuyan los discos ( creo que se los entregan a los profesores y estos los instalan en los ordenadores de los colegios, pero no estoy seguro ). Y podréis seguir las aventuras de los agentes secretos "Zeta" y "Hache".

( Por cierto, ya hay una versión tres del motor, que permite lo que todas las buenas aventuras gráficas, una navegación no lineal, pudiendo volver a escenas ya pasadas en donde, mediante el uso de mementos, se recuerda el estado de las mismas, y un montón de novedades más que ya contaré )

» Leer más, comentarios, etc...

ZingZang.org

Regalar palabras

Agosto 30th, 2006 - [Enlace local]

Sé que no suelo escribir sobre estas cosas, pero creo que lo voy a convertir en una costumbre:

Guantánamo es una vergüenza. El hecho de que exista un sitio donde se recluye a gente, en la mayoría de los casos (¿en todos?) sin tener siquiera una acusación de un delito común reconocible, y encima a la vista del mundo, es primitivo e incivilizado, una vergüenza para La Humanidad.

Algunas organizaciones (Amnistía es sólo con la que tengo más relación) llevan años haciendo grandes esfuerzos porque esta situación pare, y porque no se vaya de la memoria de la gente. Una de las actividades que monta A.I. con frecuencia (no sólo para los de Guantánamo; para cualquier preso) es un ejercicio de regalar tus palabras. El ejercicio es muy sencillo, y en algunos casos muy efectivo. Consiste simplemente en escribir una carta pequeña (ni siquiera tienes que sacar lápiz y papel ni comprar sellos; es todo por Internet) a alguno de los presos que te presentan. Esto tiene varios objetivos:

1) No olvidar que hay gente que sufre, pudriéndose en cárceles, que necesita nuestro apoyo. Generalmente los casos de Amnistía son gente encarcelada por defender los derechos humanos, o en general por sus convicciones, por oponerse al gobierno de su país, o por su orientación sexual. Presos políticos o de conciencia, vamos. En este caso concreto, tampoco olvidar que sigue existiendo el centro de detención de Guantánamo.

2) Dar ánimos a la gente que está encarcelada. Recibir de pronto cientos de cartas debe levantar bastante la moral, después de estar más solo que la una sin dejarte ver ni a tus familiares.

3) Alertar a sus potenciales torturadores, y a los que lo tienen retenido, de que se sabe lo que están haciendo y de que no lo olvidamos. Eso hace mella (no sé si en este caso hará mucha, pero en general sí hace).

Pues eso, les recomiendo que regalen sus palabras, que se hace en un momento y es bastante efectivo.

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

XHTML 2.0… el futuro

Agosto 30th, 2006 - [Enlace local]

En el sitio sigt.net publicaron un resumen sobre el último borraro presentado sobre XHTML 2.0

Luego de leer la nota hay cosas que me llamaron la atención... muchas etiquetas y atributos pasarán a ser muy generales y "multifaceticos", como la etiqueta objet que podran cargar tanto archivos swf (flash), imagnes, archivos css, etc o atributo href que ya no estara limitado a la etiqueta a... son cosas realmente interesantes pero tambien puede llevar a confuciones.

Creo que su adopción podría ser un poco drástica y lenta si consideramos que aún hay muchos desarrolladores que sigen programando con HTML, maquetan sitios con tablas, no usan las bondades de CSS, etc...

 

Fuente: sigt.net

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

XHTML 2.0… el futuro

Agosto 30th, 2006 - [Enlace local]

En el sitio sigt.net publicaron un resumen sobre el último borraro presentado sobre XHTML 2.0

Luego de leer la nota hay cosas que me llamaron la atención... muchas etiquetas y atributos pasarán a ser muy generales y "multifaceticos", como la etiqueta objet que podran cargar tanto archivos swf (flash), imagnes, archivos css, etc o atributo href que ya no estara limitado a la etiqueta a... son cosas realmente interesantes pero tambien puede llevar a confuciones.

Creo que su adopción podría ser un poco drástica y lenta si consideramos que aún hay muchos desarrolladores que sigen programando con HTML, maquetan sitios con tablas, no usan las bondades de CSS, etc...

 

Fuente: sigt.net

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

XHTML 2.0… el futuro

Agosto 30th, 2006 - [Enlace local]

En el sitio sigt.net publicaron un resumen sobre el último borraro presentado sobre XHTML 2.0

Luego de leer la nota hay cosas que me llamaron la atención... muchas etiquetas y atributos pasarán a ser muy generales y "multifaceticos", como la etiqueta objet que podran cargar tanto archivos swf (flash), imagnes, archivos css, etc o atributo href que ya no estara limitado a la etiqueta a... son cosas realmente interesantes pero tambien puede llevar a confuciones.

Creo que su adopción podría ser un poco drástica y lenta si consideramos que aún hay muchos desarrolladores que sigen programando con HTML, maquetan sitios con tablas, no usan las bondades de CSS, etc...

 

Fuente: sigt.net

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Script para separar los post por meses

Agosto 30th, 2006 - [Enlace local]

Si vemos cualquier blog que haya en internet veremos un menu que contiene los posteos separados por meses y años de la siguiente manera

 

Diciembre 2005

Enero 2006

Febrero 2006

...

 

Un ejemplo de eso lo podemos ver en el menu de este blog. 

Para poder realizar esto debemos tener en la tabla de posteros un campo llamado "fecha" del tipo date.

Luego mediante la consulta SQL dividimos por meses


<div class="menu">
   <ul>
    <li class="m-tit">Archivos</li>
   <?
   $meses 
= array("Enero""Febrero""Marzo""Abril""Mayo""Junio""Julio""Agosto""Septiembre""Octubre""Noviembre""Diciembre");
   
$sql "SELECT distinct(month(fechaPost)) mes, year(fechaPost) anio FROM posteos order by anio desc, mes desc";
 
$r $this->bd->bbdd_query($sql);
   while(
$row $this->bd->bbdd_fetch($r)){
   
?>
    <li class="cat"><a xhref="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>" title="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>">&nbsp; <?=$meses[$row["mes"]-1]." ".$row["anio"]?></a></li>
   <?}?>
   </ul>
  </div>

 

Saludos

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Script para separar los post por meses

Agosto 30th, 2006 - [Enlace local]

Si vemos cualquier blog que haya en internet veremos un menu que contiene los posteos separados por meses y años de la siguiente manera

 

Diciembre 2005

Enero 2006

Febrero 2006

...

 

Un ejemplo de eso lo podemos ver en el menu de este blog. 

Para poder realizar esto debemos tener en la tabla de posteros un campo llamado "fecha" del tipo date.

Luego mediante la consulta SQL dividimos por meses


<div class="menu">
            <ul>
                <li class="m-tit">Archivos</li>
            <?
            $meses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
            $sql = "SELECT distinct(month(fechaPost)) mes, year(fechaPost) anio FROM posteos order by anio desc, mes desc";
            $r = $this->bd->bbdd_query($sql);
            while($row = $this->bd->bbdd_fetch($r)){
            ?>
                <li class="cat"><a xhref="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>" title="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>">&nbsp; <?=$meses[$row["mes"]-1]." ".$row["anio"]?></a></li>
            <?}?>
            </ul>
        </div>

 

Saludos

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Script para separar los post por meses

Agosto 30th, 2006 - [Enlace local]

Si vemos cualquier blog que haya en internet veremos un menu que contiene los posteos separados por meses y años de la siguiente manera

 

Diciembre 2005

Enero 2006

Febrero 2006

...

 

Un ejemplo de eso lo podemos ver en el menu de este blog. 

Para poder realizar esto debemos tener en la tabla de posteros un campo llamado "fecha" del tipo date.

Luego mediante la consulta SQL dividimos por meses


<div class="menu">
            <ul>
                <li class="m-tit">Archivos</li>
            <?
            $meses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
            $sql = "SELECT distinct(month(fechaPost)) mes, year(fechaPost) anio FROM posteos order by anio desc, mes desc";
            $r = $this->bd->bbdd_query($sql);
            while($row = $this->bd->bbdd_fetch($r)){
            ?>
                <li class="cat"><a xhref="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>" title="<?=$_SERVER["PHP_SELF"]?>?mes=<?=$row["mes"]?>&anio=<?=$row["anio"]?>">&nbsp; <?=$meses[$row["mes"]-1]." ".$row["anio"]?></a></li>
            <?}?>
            </ul>
        </div>

 

Saludos

» Leer más, comentarios, etc...

Buayacorp

Mono 1.1.17

Agosto 30th, 2006 - [Enlace local]

Acaba de liberarse la versión 1.1.17 de mono, una de las novedades más importantes de este release es que las versiones anteriores del compilador y runtime de Visual Basic .NET -hechas en C#- han sido eliminadas en favor de un nuevo runtime y compilador, ambos desarrollados íntegramente en Visual Basic .NET. Otra de las "novedades" es que mi primer y muy simple parche ha sido incluido esta versión :-P .

Las descargas están disponibles en http://www.mono-project.com/Downloads

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Filtrando registros en un listado

Agosto 29th, 2006 - [Enlace local]

En mas de una oportunidad, todos los que hacemos ABMs, nos hemos encontrado con listados interminables (por ejemplo, un ABM de productos podria terner mas de 100 registros).

Al tener tantos registros surgen dos problemas, el primero es como hacer para listar tanta cantidad de registros y el segundo es la busqueda de algun/os registro/s particular/es.

La solución al primero es utilizar "paginados", esta técnica funciona como un "libro" en el cual dividimos los registros en varias paginas y mediante una serie de links vamos navegando dichas páginas, hace un tiempo realice dos posteos hacerca de esto (Link1 , Link2 )

El segundo problema se soluciona con la realización de filtros. Un filtro es como un buscador, solo que la busqueda se realiza en una/s tabla/s de nuestra base de datos, y devuelve una cierta cantidad de registros satisfagan una condicion.

Para ejemplificar esto, itilizaremos como ejemplo una tabla de la siguiente manera.


CREATE TABLE `articulo` ( 
 `cod_articulo` varchar(11) default NULL, 
 `proveedor` varchar(10) NOT NULL default '', 
 `id_tipo_producto` int(11) default NULL, 
 `descripcion_articulo` text,
  `precio` int(11) default NULL,
 )
 

Teniendo esta tabla podriamos buscar por uno o varios de sus campos. Para ello debemos tener un formalario que nos permita espesificar los valores que necesitamos buscar.

Un formulario de ejemplo podria ser este



<form action="" method="POST">
 <div>
 <label>Proveedores</label>
 <select name="proveedor">
 <option value="0">Eleguir... </option>
 <option value="idProv1">Prov1</option>
 <option value="idProv2">Prov2</option>
 <option value="idProv3">Prov3</option>
 </select>
 </div>
 <div>
 <label>Precio</label>
 <input type="text" name="precio" value=""/>
 </div>
</form>


Nota: Podes mirar el post sobre formularios accesibles desde aca

Luego el SQL de la consultar la armariamos de la siguiente manera

<?
$sql 
"SELECT * FROM articulo";
$where "";
if(
$_POST["proveedor"] != 0)
 
$where = ($where=="")?" WHERE proveedor = '".$_POST["proveedor"]."'":" AND proveedor = '".$_POST["proveedor"]."'";

if(
$_POST["precio"] != "")
 
$where = ($where=="")?" WHERE precio= '".$_POST["precio= "]."'":" AND precio= = '".$_POST["precio= "]."'";

$sql .= $where." ORDER BY id_articulo ASC";

?>


De esta forma la consulta solo nos devolveria aquellos registros que cumplan con las condiciones del WHERE.

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Filtrando registros en un listado

Agosto 29th, 2006 - [Enlace local]

En mas de una oportunidad, todos los que hacemos ABMs, nos hemos encontrado con listados interminables (por ejemplo, un ABM de productos podria terner mas de 100 registros).

Al tener tantos registros surgen dos problemas, el primero es como hacer para listar tanta cantidad de registros y el segundo es la busqueda de algun/os registro/s particular/es.

La solución al primero es utilizar "paginados", esta técnica funciona como un "libro" en el cual dividimos los registros en varias paginas y mediante una serie de links vamos navegando dichas páginas, hace un tiempo realice dos posteos hacerca de esto (Link1 , Link2 )

El segundo problema se soluciona con la realización de filtros. Un filtro es como un buscador, solo que la busqueda se realiza en una/s tabla/s de nuestra base de datos, y devuelve una cierta cantidad de registros satisfagan una condicion.

Para ejemplificar esto, itilizaremos como ejemplo una tabla de la siguiente manera.


CREATE TABLE `articulo` (                           
            `cod_articulo` varchar(11) default NULL,          
            `proveedor` varchar(10) NOT NULL default '',  
            `id_tipo_producto` int(11) default NULL,          
            `descripcion_articulo` text,
        `precio` int(11) default NULL,                        
          )
 

Teniendo esta tabla podriamos buscar por uno o varios de sus campos. Para ello debemos tener un formalario que nos permita espesificar los valores que necesitamos buscar.

Un formulario de ejemplo podria ser este



<form action="" method="POST">
    <div>
        <label>Proveedores</label>
        <select name="proveedor">
            <option value="0">Eleguir... </option>
            <option value="idProv1">Prov1</option>
            <option value="idProv2">Prov2</option>
            <option value="idProv3">Prov3</option>
        </select>
    </div>
    <div>
        <label>Precio</label>
        <input type="text" name="precio" value=""/>
    </div>
</form>


Nota: Podes mirar el post sobre formularios accesibles desde aca

Luego el SQL de la consultar la armariamos de la siguiente manera

<?
$sql = "SELECT * FROM articulo";
$where = "";
if($_POST["proveedor"] != 0)
    $where = ($where=="")?" WHERE proveedor = '".$_POST["proveedor"]."'":" AND proveedor = '".$_POST["proveedor"]."'";

if($_POST["precio"] != "")
    $where = ($where=="")?" WHERE precio= '".$_POST["precio= "]."'":" AND precio=  = '".$_POST["precio= "]."'";

$sql .= $where." ORDER BY id_articulo ASC";

?>


De esta forma la consulta solo nos devolveria aquellos registros que cumplan con las condiciones del WHERE.

» Leer más, comentarios, etc...

BLOG - 3wstudio.com.ar

Filtrando registros en un listado

Agosto 29th, 2006 - [Enlace local]

En mas de una oportunidad, todos los que hacemos ABMs, nos hemos encontrado con listados interminables (por ejemplo, un ABM de productos podria terner mas de 100 registros).

Al tener tantos registros surgen dos problemas, el primero es como hacer para listar tanta cantidad de registros y el segundo es la busqueda de algun/os registro/s particular/es.

La solución al primero es utilizar "paginados", esta técnica funciona como un "libro" en el cual dividimos los registros en varias paginas y mediante una serie de links vamos navegando dichas páginas, hace un tiempo realice dos posteos hacerca de esto (Link1 , Link2 )

El segundo problema se soluciona con la realización de filtros. Un filtro es como un buscador, solo que la busqueda se realiza en una/s tabla/s de nuestra base de datos, y devuelve una cierta cantidad de registros satisfagan una condicion.

Para ejemplificar esto, itilizaremos como ejemplo una tabla de la siguiente manera.


CREATE TABLE `articulo` (                           
            `cod_articulo` varchar(11) default NULL,          
            `proveedor` varchar(10) NOT NULL default '',  
            `id_tipo_producto` int(11) default NULL,          
            `descripcion_articulo` text,
        `precio` int(11) default NULL,                        
          )
 

Teniendo esta tabla podriamos buscar por uno o varios de sus campos. Para ello debemos tener un formalario que nos permita espesificar los valores que necesitamos buscar.

Un formulario de ejemplo podria ser este



<form action="" method="POST">
    <div>
        <label>Proveedores</label>
        <select name="proveedor">
            <option value="0">Eleguir... </option>
            <option value="idProv1">Prov1</option>
            <option value="idProv2">Prov2</option>
            <option value="idProv3">Prov3</option>
        </select>
    </div>
    <div>
        <label>Precio</label>
        <input type="text" name="precio" value=""/>
    </div>
</form>


Nota: Podes mirar el post sobre formularios accesibles desde aca

Luego el SQL de la consultar la armariamos de la siguiente manera

<?
$sql = "SELECT * FROM articulo";
$where = "";
if($_POST["proveedor"] != 0)
    $where = ($where=="")?" WHERE proveedor = '".$_POST["proveedor"]."'":" AND proveedor = '".$_POST["proveedor"]."'";

if($_POST["precio"] != "")
    $where = ($where=="")?" WHERE precio= '".$_POST["precio= "]."'":" AND precio=  = '".$_POST["precio= "]."'";

$sql .= $where." ORDER BY id_articulo ASC";

?>


De esta forma la consulta solo nos devolveria aquellos registros que cumplan con las condiciones del WHERE.

» Leer más, comentarios, etc...

Navegapolis

RecorteX

Agosto 29th, 2006 - [Enlace local]

Recortex Recortex es un lugar de intercambio útil y enriquecedor para programadores. Se trata del recién estrenado proyecto de Juanjo Navarro: un repositorio para guardar y compartir colecciones de código, esas rutinas y fragmentos que se necesitan de forma recurente.

Se pueden consultar las rutinas a través de tags, y suscribirse a los que nos interesen para recibir las novedades en el lector RSS.

Blogalaxia Tags: RecorteX programación repositorio+de+código

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering

SCRUM II

Agosto 29th, 2006 - [Enlace local]

Jeff Sutherland publica una presentación de lo que es SCRUM II, datos importantes son:


Además presenta gráficas comparativas con otras metodologías.

» Leer más, comentarios, etc...

Blog de Diego Gómez Deck

SWT (Squeak Widgets Toolkit) - Algo para mostrar

Agosto 29th, 2006 - [Enlace local]

Después de unos (pocos (muy pocos)) días de vacaciones, volví al trabajo con más fuerzas y, para probarlo, les muestro en que estado está el desarrollo del LiveWiki que prometí hacer.

Usando el JS2JS, ahora estoy desarrollando un juego de widgets para los navegadores de Internet. Esta primera versión es muy simple, pero ya tiene lo suficiente para ver la idea completa: Se escribe código Smalltalk y se ejecuta en los navegadores de internet (previa conversión ST > JS). Pueden descargar la versión actual en SqueakSource.

Esto es un método, de la clase SWTExampleApplication, que crea unos simples (y aburridos) textos.

SWTExampleApplication>>createSimpleTexts

| root |

root := self rootWidget.

root addHorizontalRule.
root addWidget: (SWTHeader level: 2 contents: 'Simple texts').
root addWidget: (SWTText contents: 'some plain text. bla, bla, bla, bla, bla.').

root addWidget: (SWTText contents: 'text in red').
root lastWidget
color: S2SColor red.

root addWidget: (SWTText contents: 'text in blue/green').
root lastWidget
color: S2SColor blue;
backgroundColor: S2SColor green.

root addBreak.


El método que está a continuación muestra como es el manejo de eventos. Se ve claramente el uso de los bloques de Smalltalk (que se mapean a funciones de JS):

SWTExampleApplication>>createButtons

| root button |

root := self rootWidget.

root addHorizontalRule.
root addWidget: (SWTHeader level: 2 contents: 'Buttons').
root addWidget: (SWTButton caption: 'inspect event' onClick: [:event | event inspect]).
root addWidget: (SWTButton caption: 'inspect root panel' onClick: [:event | root inspect]).

root addWidget: (button := SWTButton caption: 'button with several event handlers').

button onClick: [:event | event inspect].
button onClick: [:event | self inform: '2st handler: ' , event asString].
button onClick: [:event | self inform: '3rd handler: ' , event asString].

button
color: S2SColor blue;
backgroundColor: S2SColor blue muchLighter.

button onFocus: [:event |
event source
color: S2SColor red;
backgroundColor: S2SColor red muchLighter
].

button onBlur: [:event |
event source
color: S2SColor blue;
backgroundColor: S2SColor blue muchLighter
].




Si algo tiene de interesante esta primera versión es que ya estoy jugando con los widgets "Edit In Place" (Modificar en el Lugar) que usaré para la modificación en vivo del LiveWiki. Este es el método que crea algunos textos "EditInPlace" y, también, crea un botón para crear más textos editables.

SWTExampleApplication>>createEditableTexts

| root |

root := self rootWidget.

root addHorizontalRule.
root addWidget: (SWTHeader level: 2 contents: 'Edit-In-Place texts').

root addWidget: (SWTButton caption: 'add a new edit-in-place text' onClick: [:event | self addNewEditInPlaceText]).
root lastWidget backgroundColor: S2SColor yellow muchLighter.
root addBreak.


root addWidget: (SWTEditInPlaceText contents: 'One edit-in-place text, click on me to edit').
root addBreak.

root addWidget: (SWTEditInPlaceText contents: 'Another edit-in-place text (with background color), double click on me to edit').
root lastWidget
editOnDblClick;
backgroundColor: S2SColor blue muchLighter.
root addBreak.

root addWidget: (SWTEditInPlaceText contents: 'Just another edit-in-place text (with background color), move mouse over me to edit').
root lastWidget
editOnMouseOver;
backgroundColor: S2SColor red muchLighter.
root addBreak.

root addWidget: (SWTEditInPlaceText contents: 'And just another edit-in-place text (with background color), move mouse over me to edit').
root lastWidget
editOnMouseOver;
backgroundColor: S2SColor green muchLighter.
root addBreak.


Para los bagos de siempre (que no quieren instalar nada en sus Squeaks) les subí un HTML 100% autónomo que incluye todo el código Javascript generado desde Smalltalk (126Kb).

Los próximos pasos, en el desarrollo, es integrar los widgets con el Asteroid (Implementación de Comet para Squeak) para poder implementar un Observer Pattern (aka un MVC) distribuido entre el Squeak y los navegadores de Internet.

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering

SQL Server Data Types and Their .NET Framework Equivalents

Agosto 29th, 2006 - [Enlace local]

Cuantas veces nos hemos encontrado con el problema de no saber los equivalentes en tipos de datos, aqui una página donde se muestra una tabla de equivalencias entre SQL Server y .NET

» Leer más, comentarios, etc...