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

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

Fetishcode...Thinking in objects

Abrir enlace en nueva ventana

Junio 30th, 2008 - [Enlace local]

A

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

Variable not found

Desplegables en cascada con ASP.NET MVC y jQuery

Junio 30th, 2008 - [Enlace local]

Una cascadaLos desplegables en cascada (también llamados cascading dropdowns o enlazados) son elementos muy frecuentes en todo tipo de aplicaciones, pues suponen una gran ayuda al usuario y dotan de mucho dinamismo al interfaz.

En pocas palabras, consiste en llenar una lista desplegable con elementos elegidos en función de una decisión previa, como la selección en otra lista. El ejemplo típico lo encontramos en aplicaciones donde debemos introducir una dirección y nos ponen por delante un desplegable con las provincias y otro con los municipios, y en éste último sólo aparecen aquellos que pertenecen a la provincia seleccionada.

Esto, que en aplicaciones de escritorio no tiene dificultad alguna, en el entorno Web se complica un poco debido a la falta de comunicación entre la capa cliente (HTML, javascript) y servidor (ASP, .NET, JSP, PHP...), propia de un protocolo desconectado como HTTP.

Años atrás (e incluso todavía hoy) una forma de solucionar el problema es forzando un postback, es decir, una recarga de la página completa, con objeto de llenar el desplegable dependiente en función del valor seleccionado en el principal. Supongo que no es necesario detallar los inconvenientes: tiempos de espera, asombro del usuario ante el pantallazo, problemas asociados al mantenimiento del estado...

La aparición de Ajax (¡en minúsculas!) supuso una revolución para las aplicaciones Web, añadiendo a las amplias capacidades de Javascript para la manipulación del interfaz e información en cliente mecanismos ágiles para conseguir comunicación en tiempo real con el lado del servidor.

En este post explicaré cómo conseguir desplegables en cascada utilizando la plataforma ASP.NET MVC (Preview 3) en el lado servidor y Javascript en el lado cliente, apoyándome en la librería jQuery, que tanto juego da. Aprovecharé de paso para comentar algunos aspectos interesantes de la preview 3 del framework MVC, de jQuery y de novedades de C# 3.0. Tocho de post, por tanto ;-)

El resultado será un formulario como el mostrado en la siguiente imagen:

El proyecto en ejecución

Antes de nada: estructurar la solución

Para lograr el objetivo pretendido respetando el patrón MVC, debemos contar con los siguientes elementos:

Primero: el modelo

En escenarios reales será el conjunto de entidades que representen el modelo de datos del sistema. En este caso montaremos un ejemplo muy simple, basado en un diccionario en memoria, y un par de métodos de consulta de la información en él mantenida.
public class Datos
{
private static Dictionary<string, string[]> datos =
new Dictionary<string, string[]>
{
{ "Animal", new[] { "Perro", "Gato", "Pez"} },
{ "Vegetal", new[] { "Flor", "Árbol", "Espárrago"} },
{ "Mineral", new[] { "Cuarzo", "Pirita", "Feldespato"} }
};

public static IEnumerable<string> GetCategories()
{
return datos.Keys;
}

public static IEnumerable<string> GetElementsForCategory(string category)
{
string[] els = null;
datos.TryGetValue(category, out els);
return els;
}
}

Destacar del código anterior los siguientes aspectos:


Segundo: la vista

Para nuestro ejemplo sólo necesitamos una vista, el formulario con los desplegables, que crearemos en el archivo Index.aspx. Además de componer el interfaz, la vista gestionará la interacción con el usuario haciendo que ante la selección de una opción del desplegable de categorías se invoque al controlador para solicitarle la lista de elementos de la categoría seleccionada, y cargar con ella el segundo desplegable.

El código fuente del proyecto completo lo podéis encontrar en un enlace al pie del post, pero incluiré aquí las porciones más importantes. En primer lugar, el formulario HTML se compone así:
<form method="post" action="#">
<fieldset><legend>Formulario</legend>
<label for="ddCategory">Categoría:</label>
<%= Html.DropDownList("ddCategory") %>
<label for="ddElement">Elemento:</label>
<%= Html.DropDownList("ddElement") %>
</fieldset>
</form>

Fijaos un momento en el código. Los desplegables, en lugar de utilizar el tag HTML <select> se han definido utilizando los métodos de ayuda (Html helpers) incluidos en el framework MVC. Estos, además de generar las etiquetas apropiadas, realizan otra serie de tareas como establecer valores de la lista, que nos ahorrarán mucho tiempo. En el controlador veremos cómo se le inyectan los elementos (los distintos <option>) desde código de forma muy sencilla.

jQuery logoDespués del formulario, llegamos a la parte de scripting de la página, la implementación de la obtención y llenado del desplegable de elementos en función de la opción seleccionada, al más puro estilo Ajax. Utilizaremos jQuery, pero los conceptos son idénticos para otros sistemas; de hecho, esto mismo podríamos realizarlo con cualquier otra librería Javascript que permita enviar peticiones JSON, e incluso, aunque es bastante más trabajoso, sería posible hacerlo "a pelo" utilizando las facilidades nativas (HttpRequest).
<script type="text/javascript">

// Inicialización

$(document).ready(function() {
$("#ddCategory").change(function() {
cambiaElementos($("#ddCategory").val());
});
cambiaElementos($("#ddCategory").val());
});

// Carga el desplegable de elementos en función
// de la categoría que le llega como parámetro.


function cambiaElementos(cat) {

var dd = document.getElementById("ddElement");
dd.options.length = 0;
dd.options[0] = new Option("Espere...");
dd.selectedIndex = 0;
dd.disabled = true;

// Control de errores

$("#ddElement").ajaxError(function(event, request, settings) {
dd.options[0] = new Option("Categoría incorrecta");
});

// Obtenemos los datos...

$.getJSON(
'<%= Url.Action("GetElements") %>', // URL a la acción
{ category: cat }, // Objeto JSON con parámetros
function(data) { // Función de retorno exitoso
$.each(data, function(i, item) {
dd.options[i] = new Option(item, item);
});
dd.disabled = false;
});
}
</script>
 
En la primera parte se utiliza el evento jQuery ready, ejecutada cuando la página está lista para ser manipulada, para introducir código de inicialización. En este momento se asocia al evento change del desplegable de categorías la llamada apropiada a la función cambiaElementos(), pasándole la categoría seleccionada. También se aprovecha para realizar la primera carga de elementos.

Carga del desplegable en procesoSeguidamente está la función cambiaElementos, que se encargará de actualizar el desplegable con los elementos asociados a la categoría seleccionada. Para ello, en primer lugar, se introduce en el dropdown un elemento con el texto "Espere...", que aparecerá mientras el sistema obtiene los datos desde el servidor, a la vez que se deshabilita el control para evitar manipulación del usuario.

Después se define la función que se ejecutará si durante la llamada Ajax se produce un error. Para ello utilizamos el evento ajaxError, al que asociamos una función anónima que, simplemente, cargará en el desplegable secundario el texto "Categoría incorrecta" y lo dejará deshabilitado.

Por último, utilizamos el método getJSON para efectuar la llamada al servidor y realizar la carga del desplegable con la información devuelta. Son tres los parámetros que se le envían al método:

Tercero: el controlador

Es el intermediario en toda esta historia: recibe las peticiones del cliente a través la invocación de acciones, ejecuta las tareas apropiadas y provoca la aparición o actualización de las vistas, utilizando para ello las clases ofrecidas por el Modelo.

El controlador define dos acciones: la primera de ellas (Index) es la encargada de cargar los valores iniciales de los desplegables y enviar al usuario la vista correspondiente (Index.aspx). La segunda es la responsable de devolver un objeto en notación JSON con los elementos de la categoría enviada como parámetro.

El código es el siguiente:

public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["ddCategory"] = new SelectList( Datos.GetCategories() );
ViewData["ddElement"] = new SelectList( new [] {"(Selecciona)"} );
return View();
}

public ActionResult GetElements(string category)
{
IEnumerable<string> elements = Datos.GetElementsForCategory(category);
if (elements == null)
throw new ArgumentException("Categoría " + category +" no es correcta");

Thread.Sleep(1000); // Simulamos tiempo de proceso...

return Json(elements);
}
}
 
Hay varios puntos que me gustaría destacar en este código. En primer lugar, observad que ya las acciones siguen la nueva convención introducida en la preview 3, retornando objetos de tipo ActionResult. En el primer método, el return View() (sin parámetros) hace que el sistema envíe al cliente la vista cuyo nombre coincide con la acción actual (es decir, Index.aspx); en el segundo método se retorna un objeto de tipo JSonResult que serializará la información suministrada en formato JSON.

También es destacable la ayuda introducida en la tercera Preview para llenar listas de formularios utilizando la clase SelectList. Como podéis ver, basta con crear en el diccionario ViewData un elemento con el mismo nombre que el del desplegable y asignarle una instancia del SelectList inicializada con una colección de elementos (cualquier tipo que implemente IEnumerable). Él se encargará, al renderizar la página, de iterar sobre la colección y crear las etiquetas <option> oportunas.

Asimismo, se puede observar el uso del Modelo en ambos métodos para leer los datos. En este caso se utiliza una clase que encapsularía la lógica de obtención de información, pero nada impediría, por ejemplo, asumir que las clases del Modelo son las generadas desde el diseñador de Linq2Sql y utilizar consultas Linq desde el Controlador.

Observad también el lanzamiento de la excepción cuando la categoría especificada no existe. Lo que llega al navegador en este caso es un error HTTP que es capturado por la función que especificamos para el evento ajaxError, haciendo que en el desplegable enlazado aparezca un mensaje de error.

Por último, la inclusión de la orden Thread.Sleep() es por pura estética, para que se vea lo bien que queda el mensaje "Espere..." en el desplegable mientras carga los datos. En un escenario real este tiempo sería consumido por las comunicaciones cliente-servidor y la obtención de datos desde el modelo, que habitualmente utilizará una base de datos u otro mecanismo de persistencia.

Descargar proyecto Descargar proyecto (Visual Web Developer Express 2008 + SP1 + ASP.NET MVC Preview 3).

Publicado en: http://www.variablenotfound.com/.

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

psé

El problema del feedback

Junio 30th, 2008 - [Enlace local]

Últimamente estoy un poco obsesionado con el feedback y no en especial con la información que me llega, que eso es tema para otro post, si no por la información que soy capaz de usar de forma adecuada.

Parto de la premisa de que no soy una persona tipo seguramente para nada de lo que desarrollo y es muy posible que lo que para ti sea la feature del siglo, para los demás sea algo que está ahí, pero que le importa muy poco.

Recientemente me ha pasado. He creado una herramienta para exportación de datos de agroguía al PC, de forma que en google earth puedes ver los trabajos realizados. Para mi la feature mola la leche, pero a los agricultores parece importarles muy poco. Lógico, ya que no suelen usar el PC para hacer este tipo de cosas (salvo excepciones), así que era de esperar.

¿Es una __cagada__ o una pérdida de tiempo? pues posiblemente comercialmente lo sea, por lo menos en este momento. Podría haber invertido ese tiempo en una feature más solicitada? seguro que sí y además seguro que gracias a esa feautre podría haber vendido más, pero y lo importante que es estar contento con lo que haces? y el feedback que puedo obtener de esos datos? Como dice Steve Jobs, espero poder algún día unir puntos hacia atrás. También opino, aunque sea una osadía nisiquiera comparar mi afirmación con la suya, que tarde o temprano todo lo que has aprendido/hecho servirá para algo.

Me voy a dar un paseo por el campo a darme feedback y despejarme un poco, se encuentra cosas curiosas:

- Un conejo a 2 metros de mi, con lo asustadizos que son:



- Hay cosas curiosas, cosas que todos los días ves y nunca te paras a pensar. Últimamente me ha dado por los pivots de riego... en esta foto se ve perfectamente como las bocas de más lejos echan más agua sobre el cultivo, parece lógico si piensas el área que cubre cada una sabiendo que al proporción de agua debe ser constante (o no, imaginemos que tenemos mapas ed rendimiento...)

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

knocte :: MonoTema

PreGuadecs events

Junio 30th, 2008 - [Enlace local]

Yes! I'm going to GuadecES this week and to GUADEC next week! I'll be giving one talk in both, talking about our Novell's accessibility project. But this weekend has been not less exciting than Guadecs promise to be! I'm not used to blog about personal things but I can't resist to try to make someone laugh a bit! Firstly, on Saturday I went to Rock In Rio festival in Madrid. Many concerts,

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

Cerebro en la Sombra

Insertar imágenes en RichTextEditor de Flex

Junio 30th, 2008 - [Enlace local]

Esta semana, a raíz de un mensaje en la lista de correo de Made in Flex, recordé una de las primeras aplicaciones que hice en Flex hace ya dos años con lo cual me lancé a recuperar aquél código, limpiarlo de cosas supérfluas y publicarlo. Os dejo también el enlace a un post mio en la lista Flexcoders donde explicaba como hacerlo, de hecho ha sido mucha la gente que, a partir de ese post, me ha escrito preguntando detalles.

Para los puristas, os aviso de antemano que puede haber cosas que no funcionen bien, código extraño y mil historias más, es un código que tiene dos años, si hacéis cuentas veréis que justo estos días Flex2 cumple dos años. Sí, lo comencé con las primeras betas de aquella versión. Lo único que he hecho ha sido crearlo en Flex3 y dejar la aplicación limpia para que se vea el funcionamiento. Si me váis a dejar un comentario diciendo que tal o cual cosa no funciona bien, podéis ahorrárosla.

Como una imagen vale más que mil palabras, aquí tienes el ejemplo y el código fuente de todo el proyecto.

Todos a los que en algún momento se nos ocurrió utilizar Flex para crear un gestor de contenidos nos hemos dado con un grave problema en la frente: el componente ideal para escribir y actualizar contenidos, RichTextEditor, NO permite, por defecto, insertar imágenes, con lo cual pierde prácticamente su utilidad. Escarbando en la ayuda, sin embargo, te das cuenta de que entre los tag HTML soportados por el componente Textarea se encuentra <IMG>, con lo que, a priori, nada impediría insertar una imagen. En efecto así es y en eso se basa todo este artículo/proyecto. Un detalle importante es que la utilización de imágenes no está bien conseguida en el propio Flash Player, con lo que si comenzamos a añadir y quitar imágenes llegará un momento en el que todo el Textarea será inestable y hará cosas extrañas.

El proyecto se basa en dos componentes, nuestro editor de texto y un explorador de archivos. Desde el editor tendremos un botón Insertar imagen que abrirá un explorador al más puro estilo del escritorio del sistema operativo donde nos mostrará los archivos que tenemos en el servidor, pudiendo subir y eliminar. La lógica del explorador con el servidor la he eliminado al máximo, dejando sólamente unos XML estáticos que listan las carpetas e imágenes disponibles. Para hacerlo bien haríais un script con salida similar a esta pero que liste lo que en realidad hubiese en una ruta de tu servidor.

Nuestro editor de texto

Intentaré explicar como hice todo el proceso, pero fue hace bastante tiempo así que es posible que se me olvide algún detalle.

La idea era hacer un editor avanzado, con las caracteristicas que le faltaban al RichTextEditor original:

Partimos para ello de un RichTextEditor al que le quitamos el botón predefinido de Añadir link y añadimos nuestros nuevos botones. Siguiendo el código entenderás lo que hacen, por lo que nos centraremos en el de imágenes que es el objeto del artículo. Primero os explico en qué consiste el botón de tabular datos. Es muy sencillo. Si quisiésemos, en el RichTextEditor, crear una tabla de valores con el tabulador, no podríamos, ya que al presionar tabulador saldría el foco del Textarea de escribir  y se iría, por defecto, al selector de fuente. Para solucionarlo añadimos un botón que lo único que hace es añadir un carácter de tabulación (\t) en el texto, con lo que comprobaréis que ya puedes tabular datos perfectamente. Muy útil el truco.

Pasemos pues al botón de insertar imágenes. El botón, tal y como expliqué anteriormente, abre el popup del explorador de archivos, con lo que esta parte la veremos en la siguiente sección. Cuando en el explorador seleccionamos la imagen a insertar se devuelve el control al editor y es éste el que añade la imagen. Para añadir la imagen inserta en la posición del cursor el tag <IMG> con los parámetros necesarios. Aparentemente no tiene más truco, pero al empezar a probar cosas nos damos cuenta que sí que lo tiene.

Para empezar, si guardamos el htmltext de este RichTextEditor en la base de datos y posteriormente intentamos recuperarlo recibiremos un desagradable error de validación XML. Quiero aclarar antes de nada, que este error me ocurría en aquél entonces, quizás, ojalá, las ultimas versiones de Flex lo hayan solucionado, te ahorraría muchos problemas. La causa del error de validación era que internamente, aunque tu añadieses un tag <img … /> (o <img…></img>) válido, el editor te devolvía siempre <img .. > , es decir, el XML sin cerrar, con lo cual al cargarlo de nuevo saltaba error de validación. Para solucionar este problema creamos un método desProcesaTexto que lo que hace es convertir todos los tags <img..> no válidos a tag válidos, con lo que tenemos el primer problema resuelto. Utilizando expresiones regulares será extremadamente sencillo.

  1. var pattern:RegExp = /<IMG([^>]*)>/gi;
  2. texto=texto.replace(pattern, "<IMG $1 ></IMG>");

Segundo problema. Una vez insertamos una imagen, ¿cómo podemos quitarla o modificarla? Aquí viene parte del truco. La idea, básicamente, es añadir a cada imagen un link de manera que al hacer click en ella se nos abra un popup que nos permita eliminar la imagen o modificar sus atributos. Esto genera otro inconveniente. Cuando queremos recuperar el contenido del Textarea para guardarlo en la base de datos debemos eliminar estos links falsos añadidos para la interfaz de usuario, pero que no queremos que salgan cuando se muestre el texto. Por contra, cuando cargamos un texto desde la base de datos debemos procesar los atributos de imágenes para añadirles este link y podamos operar con ellos.

  1. var temp:XML=XML("<texto>"+texto+"</texto>");
  2. var allTags: XMLList;
  3. var item:XML;
  4. var tempitem:XML;allTags= temp..IMG;
  5. for each(item in allTags) {
  6.     var xlcParent:XMLListCollection = new XMLListCollection(item.parent().parent().children());
  7.     tempitem=XML(xlcParent.toXMLString());
  8.     xlcParent.setItemAt(item, 0);
  9. }

Como se aprecia en el código, bucamos todos los tags <IMG> y, asumiendo que todos tendrán un tag <A> anterior, reemplazamos el nodo <A> completo por el <IMG> y todo solucionado, más sencillo de lo que parece una vez se entiende el procedimiento.

Para contemplar estas peculiaridades cada vez que asignamos el texto al componente o cada vez que lo recuperamos, tenemos los siguientes métodos:

  1. public function getHtmlText():String{
  2.     return desProcesaTexto(this.htmlText);
  3. }
  4.  
  5. public function setHtmlText(texto:String):void{
  6.     this.htmlText=procesaTexto(texto);
  7. }

No hay mucho más que explicar. Como peculiaridad, veremos como procesaríamos los tags <IMG> cuando cargamos un texto nuevo en el componente. La idea, básicamente, es añadir el link que nos permita modificarla, pero este link necesita conocer los datos de la imagen (src, width, height..).

  1. allTags= temp..IMG;
  2. for each(item in allTags) {
  3.     var xlcParent:XMLListCollection = new XMLListCollection(item.parent().children());
  4.     var iIndex:int = xlcParent.getItemIndex(item);    idlink=Math.round((Math.random()*100000)*(Math.random()*100000));
  5.     nuevoNodo="<A href=\"event:IMAGEN##||##"+item.@ID+"##||##"+item.@SRC+"##||##"+item.@WIDTH +
  6.     "##||##"+item.@HEIGHT+"##||##"+item.@VSPACE+"##||##"+item.@HSPACE+"##||##"+item.@ALIGN +
  7.     "##||##"+idlink.toString()+"\" ID=\""+idlink.toString()+"\">"+xlcParent.toXMLString()+"</A>";
  8.  
  9.     xlcParent.setItemAt(XML(nuevoNodo), iIndex);
  10. }

Sencillo.

El explorador de archivos

El explorador de archivos es un componente bastante resultón que, si lo trabajas un poco, te puede solucionar muchas tareas. Igual que el Explorador de Archivos de Windows, tienes a la izquierda un árbol de directorios y a la derecha los archivos de la carpeta seleccionada y sus detalles. Arriba tenemos botones para subir archivos nuevos y crear nuevas carpetas (la lógica de estos botones es cosa tuya) y, sobre todo, un combo para cambiar el modo de ver los archivos de manera que puedes ver la lista de los mismos o las miniaturas. Si, si listas imágenes verás un thumbnail de las mismas, perfecto para nuestro editor. No voy a enrollarme mucho más con el funcionamiento ya que en el código fuente tienes todo lo necesario. El evento interesante es el doble click sobre un archivo, que devuelve el control a una nueva ventana donde puede configurar los parametros de la imagen a insertar. Con el ejemplo lo entenderas.

En tu editor deberás crear los métodos adecuados en el servidor para listar las carpetas y archivos de tu directorio de uploads si quieres que todo sea dinámico y el usuario pueda organizarse por su cuenta los archivos.

Tal como había comentado, no he sido tan explícito como en otras ocasiones. Si tienes algún problema no dudéis en dejar un comentario e intentaré solucionarlo a la mayor brevedad posible.

Aquí tienes el ejemplo y el código fuente de todo el proyecto.

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

soft·in·spain

Todo llega a su fin …

Junio 30th, 2008 - [Enlace local]

Hoy, gran día para el deporte nacional, para el fútbol, para los sufridores aficionados al deporte rey, hoy digo que uno de los proyectos que empecé, llega a su fin.

Debería haber echado el cierre hace un año, no tengo muy claro porque lo aguanté, pero hoy cierro gpsmania.es.

Nunca ha sido un proyecto de muchas visitas, picos de 300 diarias con medias los últimos meses de 100. Lo cual es nada. Bien es verdad que tampoco le he dedicado el esfuerzo que se merecía.

¿Y de que ha servido? Pues para mucho: aprendí a instalar y configurar el WordPress, aprendí de que iba eso del AdSense, del posicionamiento, de la importancia de ser constante (cosa que no he sido en este caso).

He decido centrarme en pocas cosas, básicamente dos: Arcadina y mi familia. De la primera espero poder confirmar pronto buenas noticias, que para eso nos lo estamos currando. De la segunda, que cada vez tengo más ganas de pasar más tiempo con mis nanos y mi mujer.

Por cierto…



¡¡¡ENHORABUENA CAMPEONES!!!

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

PHP Senior

Nuevos intercambios sobre el Proyecto Kumbia Framework

Junio 30th, 2008 - [Enlace local]

Hace pocos días hice una suerte de "review rápida" del proyecto "Kumbia Framework", a lo que derivó algunos comentarios en VivaPHP y posteriormente una publicación en el mismo sitio oficial.

Creo que vale la pena hacer un resumen en portada con el intercambio que estamos teniendo, ya que he visto en muchos proyectos y a muchos desarrolladores cometer los mismos errores, por consiguiente creo les puede ser útil.

En mi post anterior recibí el siguiente comentario de uno de los responsables del proyecto con lo siguente:

Blogger Deivinson Tejeda dijo...

Hola enrique bueno hay cosas que tomo para mejorar el framework y otras que desde mi modesto punto de vista(mas no malcriades) no vienen al caso o simplemente no pueden ser criticas.

Criticas que Acepto.

1->Clases con Atributos públicos iremos corrigiendo esto paulatinamente.

2->Métodos Extensos...

Critas que NO Acepto

1->Nomenclatura CamelCase solo lo utilizamos para las class, nadie dice q eso se debe utilizar tal y como comentas. Al momento de crearse el framework se decidio tomar para nombres de metodos la notacion small-case

2-> Chasert a pesar que el utf-8 es el mas utilizado no quiere decir que todos se van a regir por ese nuestro framework esta pensado para una comunidad hispana esto quiere decir que existen caracteres especiales por ende el mas idonio para para eso es ISO-8859-1 de paso el framework no te obliga a utilizarlo si el usuario que decide utilizar el framework le gusta mas utf-8 u otro charset lo puede cambiar sin problema...

Pero sin duda que tus criticas caen bien claro con las aclaraciones pertinentes...

25/6/08 10:51 AM

A lo cual le respondo párrafo por párrafo:

Blogger enrique_place dijo...

Estimado Deivinson Tejeda:

Gracias por tus comentarios, te respondo por puntos:

> Hola enrique bueno hay cosas que
> tomo para mejorar el framework y
> otras que desde mi modesto punto
> de vista(mas no malcriades) no
> vienen al caso o simplemente no
> pueden ser criticas.

Bien, está aclarado en mi post que "me tomo el atrevimiento de hacer la siguiente revisión rápida", pero de todas formas no comparto tu opinión (ahora te lo aclaro).

> Critas que NO Acepto

> 1->Nomenclatura CamelCase solo
> lo utilizamos para las class,
> nadie dice q eso se debe
> utilizar tal y como comentas.

Es un estandar en la mayoría (por no decir todos) los lenguajes POO, muchos desarrolladores siguen usando el estándar viejo porque así inició PHP con la práctica estructurada y todas sus funciones usan esa nomenclatura, pero no se debe seguir cuando se habla de objetos.

Por ejemplo, se sabe que Sun define todos los estándares de Java y a nadie se le ocurre no seguirlos, en nuestro caso están empezando a existir fuertes "sugerencias" de parte de Zend ("nuestra Sun") para seguir el criterio "camelcase", porque justamente, lo usan la mayoría de los lenguajes POO (nuevamente, por no decir todos).

Por consiguiente es de sentido común hacerlo así.

Aquí te dejo un enlace de Zend hacia los estándares de codificación: presentación.

De la misma forma, está en la documentación de Zend, pero esto no tiene nada que ver por el framework, es en sí porque la programación que hacen dentro y fuera es siguiendo prácticas generalizadas de POO.

Lo que ustedes están haciendo es seguir las "malas prácticas" de toda la vida que se han realizado en PHP (y lamentablemente es muy común verlo en nuestro rubro).

> 2-> Chasert a pesar que el utf-8
> es el mas utilizado no quiere
> decir que todos se van a regir
> por ese nuestro framework esta

No es correcto, UTF-8 sustituye a ISO como una evolución hacia un sistema que resuelve los problemas del sistema anterior (justamente, los caracteres especiales).

Leer UTF-8

"Por supuesto, la ventaja más notable de cualquier Formato de Transformación Unicode sobre codificaciones heredadas es que este puede codificar cualquier carácter."

UTF-8 sustituye a ISO. Si usan todo UTF-8, pueden escribir cualquier carácter directamente y funcionará sin tener que hacer nada especial.

La única contra es que PHP5 aún no es compatible con UTF-8 a nivel de funciones, es decir, hay muchas funcines que devolverán ISO, pero para la mayoría de los casos es transparente (o a lo sumo usas funciones de encode y decode).

El 90% del desarrollo de PHP6 es migrar todas las funciones para que sean 100% compatibles con UTF-8.

En resumen a "grueso modo" se puede decir que "ISO casi desaparece a partir de PHP6".

Otro artículo de este blog sobre el tema

> pensado para una comunidad
> hispana esto quiere decir que
> existen caracteres especiales
> por ende el mas idonio para para
> eso es ISO-8859-1 de paso el

Falso, existe UTF-8 para cada uno de los idiomas existentes. Si te fijas, cuando creas una base de datos también te preguntará y le puedes decir "utf8_spanish"


> framework no te obliga a
> utilizarlo si el usuario que
> decide utilizar el framework le
> gusta mas utf-8 u otro charset
> lo puede cambiar sin problema...

La idea es que cuando se use un determinado tipo de charset, se use en todas las capas de forma uniforme, de lo contrario puedes tener problemas de "roturas" de caracteres.

Se debe grabar en utf-8, colocar en el cabezal html utf-8, y crear la base de datos en utf-8 (no así las tablas ni los campos, así queda todo estándar según la base).

> Pero sin duda que tus criticas
> caen bien claro con las
> aclaraciones pertinentes...

Las aclaraciones son erróneas, espero que se comprenda.

25/6/08 11:44 AM


A lo cual posteriormente anexo:


Blogger enrique_place dijo...

Adjunto anexo a la discusión, que me parece aporta y complementa:

Post: "¿La empresa cuenta con framework propio?"

Algunos puntos interesantes que comenta el autor:

- "A 2008, el mundo del software no necesita otro framework casero realizado por mentes privilegiadas"

- "El tener un framework propio es indicador, en el 99% de los casos, de estar reinventando la rueda."

- "En serio, cualquier cosa que no implique corregir los errores del creador de un framework casero, será más que suficiente"

Con esto no quiero decir que esté de acuerdo o no con el desarrollo de un framework (como en este caso es Kumbia), sino todos los puntos que hay que tener en cuenta, tanto "en contra" como "a favor" a la hora de hacer un proyecto como este, que de por sí es una carrera que se hace "de atrás" y "perdiendo".

25/6/08 12:13 PM


En resumen:


En más de un blog he comentado antes que prefiero evitar reinventar la rueda (hay demasiadas para reusar) y construir "plataformas" que se apoyen sobre estas herramientas, así no perder el objetivo primario y esencial que es "desarrollar sistemas", no "frameworks" (si el objetivo es otro, obviamente esta sugerencia no se aplica).


Seamos pragmáticos. No se justifica los argumento de "si el autor de Ruby On Rails pensara así, no existiría el framework", ya que muy difícilmente estemos dentro de ese grupo de "iluminados" o estemos pensando en crear un framework masivo. Si quieres aprender a hacer uno, bienvenido, pero no se justifica perder el tiempo más allá de lo necesario cada vez que vas a iniciar un nuevo proyecto o cada vez que tienes un nuevo cliente.


Tu cliente o tus usuarios valorarán el proyecto terminado, no necesariamente con qué lo hiciste, si con Zend o con Ruby On Rails, sí que funcione y haga lo que promete.


Como dice la propia presentación de Zend sobre "buenas prácticas":


"no eres tan especial como para necesitar inventar tu propio estándar".


Yo diría que se puede extender también al tema de los "frameworks":


"no eres tan especial como para necesitar inventar tu propio framework".



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

EsLoMas.com

Usando Iteradores para recorrer colecciones en PHP5

Junio 30th, 2008 - [Enlace local]

Los iteradores nos permiten recorrer de forma fácil colecciones de objetos, de forma similar a como recorreríamos un array o una lista con un while o un foreach. Imaginemos que tenemos una aplicación en la que tenemos una clase Book que representa libros y queremos utilizar una colección de libros. Una forma sería simplemente utilizar un array y utilizar las opciones que ofrece PHP para insertar o eliminar elementos, así como recorrer los existentes. Sin embargo esto podría no ser lo más adecuado desde el punto de vista de orientación a objetos ya que implica un acoplamiento alto entre la forma en la que implementamos la colección (un array) y los diferentes puntos de la apliación desde la que se usa.

En muchos casos es más conveniente crear una nueva clase BookCollection que represente la lógica de una colección, en este caso de libros. Esta clase abstraería a las clases usuarias de la implementación interna que se haga de la colección, que podría ser un array o cualquier otra estructura de datos, permitiendo cambiar esta implementación sin tener que tocar nada en el resto de la aplicación.

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

Cerebro en la Sombra

Hoy todo importa un poco menos… Euro’08

Junio 30th, 2008 - [Enlace local]

Da igual si no llegas a final de mes, si tu curro es un asco o si sube el Euribor. Da igual la desaceleración, que el IPC crezca desesuradamente o que el paro vaya en aumento contínuo.

Hoy todo es un poquito mejor porque hoy…

 SOMOS LOS MEJORES DE EUROPA

 

img_3576.JPGimg_3577.JPGdsc00186.JPGdsc00188.JPGdsc00190.JPGimg_3574.JPG

Tenía 8 años cuando un 27 de junio vimos perder a España su merecida Eurocopa ante Francia tras aquél agónico 12-1 a Malta de la fase de clasificación.
Tenía 18 años cuando el codo de Tassoti y la nariz sangrante de Luis Enrique nos mandaron a casa tras una impresionante trayectoria.
Tenía 24 años cuando un penalty fallado por Raúl ante Francia nos mandó a casa en la Eurocopa de 2000.
Tenía 26 años cuando un mal árbitro y el penalty fallado por Joaquín ante Corea nos mandaron de vuelta a casa

Hoy, con 32 años, lo hemos logrado, podemos celebrar algo importante y, lo mejor de todo, lo hemos hecho a lo grande, sin perder ni un partido, sin perder los papeles, limpiamente, jugando al fútbol, con inteligencia.

29062008195.jpg29062008196.jpg29062008200.jpg29062008203.jpg29062008205.jpg30062008206.jpg

Por Arconada, por  Luis Enrique y su nariz, por el NO gol de Michel a Brasil en Mexico’86 (y por el 5-1 de Dinamarca, y por los penaltys también), por el penalty de Raúl en la Eurocopa de 2000, por el penalty de Joaquín en Corea 2002, por la medalla olímpica en Barcelona’92, por los penaltys ante Inglaterra en la Eurocopa del 96… y por tantos y tantos sufrimientos que hemos pasado a lo largo de estos años.

Esta vez sí…

PUDIMOS

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

Arragonán

We are the champions!

Junio 29th, 2008 - [Enlace local]

¡Campeones!

Foto de Visentico / Sento

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

Navegapolis

Fundamentalismo

Junio 29th, 2008 - [Enlace local]

mandamientosEntre la lista de posts pendientes de leer, encuentro otro ("Are you really using Scrum") de ayuda para saber si avanzamos por el camino recto, o andamos descarriados y apartados de la doctrina; para lo que prescribe, como suele ser habitual en estos casos, algunos mandamientos: ¿Las iteraciones son de menos de 4 semanas?, ¿Probamos el software al final de cada iteración?...

Dejando a un lado cuál pueda ser el porcentaje de conocimiento, y cual el de majadería o de "post-copio - post-pego" con el que se ha elaborado la lista; hacer afirmaciones del tipo "esta es la verdad" no ayuda mucho a la evolución dialéctica del conocimiento, ni a la riqueza que supone el mestizaje desde el convencimiento de que ninguna verdad es absoluta, comenzando por la de uno mismo; y puede ser algo pretencioso, sobre todo en escenarios dialécticos rápidos de conocimientos adolescentes como el de la ingenieria de software.

Scrum, DSDM, Extreme Programming, CMMI, ISO 15504, Crystal, FDD, Prince2 PMI, ... son algunos de los modelos de procesos, métodologías o conjuntos de prácticas para mejorar el desarrollo de software y aportan un conocimiento muy importante, pero resultan mezquinos cuando afiman ser la doctrina verdadera, y empobrecen a los profesionales que se lo creen, anclándolos en sus convicciones, mientras el entorno sigue avanzando.

Fundamentalismo (RAE): Exigencia intransigente de sometimiento a una doctrina o práctica establecida.

 

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

Es intuitivo

Momentos historicos en Internet

Junio 28th, 2008 - [Enlace local]

Me enteré de cosas que jamás habia ni eschcuchado, los momentos van desde como fue que empezó a expandirse las webcam hasta el "download day", ¡BUENISIMO! acá el link.

...

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

avemundi, blog de un micro-isv » Desarrollo de software

dos to-do list interesantes

Junio 28th, 2008 - [Enlace local]

Estas últimas semanas he estado probando dos programas para gestionar listas de tareas que me han llamado la atención. Y lo han hecho no por sus funcionalidades, sino por las herramientas con las que están hechos los programas.

El primero es Simple Task v2 que está hecho con Ext JS, que es un framework RIA pero se ejecuta sobre la plataforma Adobe AIR.

La segunda aplicación es TodoPaper, que sigue la estela de aplicaciones GTD minimalistas al estilo de TaskPaper. Lo que me ha llamado la atención es que está hecha con Python y la librería multiplataforma wxPython, que era la recomendación que me hizo Daniel Ribes en el post sobre REALbasic.

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

Bitácora de Javier Gutiérrez Chamorro (Guti)

Abstracción de datos

Junio 28th, 2008 - [Enlace local]

En los lenguajes actuales, gozamos de una característica que aunque es en general tremendamente útil, nos hace olvidar que está ahí, y quitarle la importancia que merece.

Se trata de las capas lógicas que permiten la abstracción de datos, es decir, atacar a diferentes bases de datos, sin tener que hacer cambios de operativa en el código.

ODBC en Windows; ADO o ADO.NET en entornos Microsoft; JDBC en plataformas Java, o ADODB para PHP, nos permiten escribir un código único, capaz de acceder a datos, independientemente del sistema dónde estén almacenados.

Bien es cierto, que si realmente queremos ser independientes del SGBD (Sistema de Gestión de Base de Datos), las operaciones deben limitarse al mínimo común entre ellas, sin embargo, ya de por si, es un gran avance.

Los sistemas de abstracción de datos, tienen sus raices en la tecnología RDD (Replaceable Database Drivers), presentada por Nantucket en el Clipper 5.0 allá por el año 1990.

Desde el punto de vista actual, la base de RDD, que basicamene ofrecía la posibilidad de enlazar con diferentes librerías de accceso a datos nuestro programa, puede resultar algo tosca, pero en efecto, no dista demasiado de los mecanismos que utilizamos hoy día.




Artículo publicado originalmente en Bitácora de Javier Gutiérrez Chamorro (Guti) - http://guti.bitacoras.com.

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

Jorge Dieguez Blog

Content Rating for MOSS 2007

Junio 28th, 2008 - [Enlace local]

Es un interesante proyecto en Codeplex. Se trata de una solución desarrollada por Microsoft y permite incorporar valoración de contenidos en los portales MOSS(no funciona en WSS:-().
El cacharro es bastante completo y tiene muy buena pinta(aun no lo he podido probar). La valoración se realiza tanto por medio de visual(estrellas) como introduciendo una valoración textual.

También es muy interesante el documento que describe la arquitectura y la implementación del mismo. La solución combina una Base de Datos externa, listas de configuración, webparts, custom fields. Es interesante estudiar como se puede implementar un servicio en MOSS utilizando de forma efectiva distintas piezas de arquitectura. 

http://www.codeplex.com/sptoolbox/Release/ProjectReleases.aspx?ReleaseId=13878

 Publicado en http://jdieguez.wordpress.com

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

Jorge Dieguez Blog

Content Rating for MOSS 2007

Junio 28th, 2008 - [Enlace local]

Es un interesante proyecto en Codeplex. Se trata de una solución desarrollada por Microsoft y permite incorporar valoración de contenidos en los portales MOSS(no funciona en WSS:-().
El cacharro es bastante completo y tiene muy buena pinta(aun no lo he podido probar). La valoración se realiza tanto por medio de visual(estrellas) como introduciendo una valoración textual.

image
image
image

 

También es muy interesante el documento que describe la arquitectura y la implementación del mismo. La solución combina una Base de Datos externa, listas de configuración, webparts, custom fields. Es interesante estudiar como se puede implementar un servicio en MOSS utilizando de forma efectiva distintas piezas de arquitectura.
image

Un detalle importantísimo es la disponibilidad del código fuente, es una fuente de información alucinante para todos los que estamos trabajando con SharePoint.
Creo que la disponibilidad de código fuente de soluciones con tantas piezas es lo mejor que puede hacer Microsoft para que el producto tenga mucha mayor aceptación y que los desarrolladores estemos mejor preparados para abordar proyectos complejos.


http://www.codeplex.com/sptoolbox/Release/ProjectReleases.aspx?ReleaseId=13878

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

{ Radamanthys }

Search Plugin para Sibu

Junio 27th, 2008 - [Enlace local]

search sibu

Dejo para descarga 2 plugins que pueden utilizar para hacer busquedas en SibuWiki y la pagina principal de la Comunidad Sibu desde la barra de Firefox/Iceweasel(en teoria funciona con IE pero no me consta).

Descarga :

Busquedas en Comunidad Sibu : sibu.xml

<searchplugin xmlns="http://www.mozilla.org/2006/browser/search/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/">
<os :ShortName>Sibu</os>
<os :Description>Comunidad Sibu, Costa Rica</os>
<os :InputEncoding>UTF-8</os>
<os :Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1%2BjfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP%2BHj8y%2FAAAACXBIWXMAAB5zAAAecwFCmCoXAAAAB3RJTUUH2AYYEwoOK2NmlgAAAbJJREFUKM9t0U9IkwEYx%2FHv%2B2fvfJdbzc2lBr6Q9EcHhTZQBCM8iLekLuIhKOgQnYro0N9TXbzUQeiQBxEi8FAeFClQsHBNySkSBeH6s0wG0dbL3LutbU8HS3foOT08fA4Pvx9UzYK6fO7d1Jtg9U39t8wrYHbPja4fUeQ%2FYKW%2FfnIhqJmONtGSnnnbugsUgFj95vv8lnUY41viVjDAjc2G9khqG%2BivFc10nVgKqP72%2B0Xfat0GKZYbzxyLxjxDzmjXbz10pVRrPzpgP%2FB9vJpnkSxefMVCkoJ2XWnijpq4ljuq%2Ba3CL57ynO%2BAi4Zc2TYOrgU%2BXAL9kzE3GD47bWR33soxua8%2F7tS89J12gNmRi5VmUUWVXjkvPRISxBBL%2BuSyLI0Asdros0FxSVg2JC4TsiohUeS43M7M34vtAbUza9wNl2vwkCBJiS8Ibnpk4MLJm51boELF9pZ1fpLEogUHDQ9Wsbj4Nweg5BE3NmOYKOQx0DBt0jugnGlMtTbHecF2CXvp5tA6TlXU8bb0w1enZvXPVGijN9Mx7h%2BOJKsARDWjIz30o8%2Fr3v%2BEx5Gvu2X9AXeRoyL4D2b1AAAAAElFTkSuQmCC</os>
<os :Url type="text/html" method="GET" template="http://sibu.homelinux.org/?s={searchTerms}"></os>
<os :Url type="application/x-suggestions+json" method="GET" template="http://sibu.homelinux.org/?s={searchTerms}"></os>
</searchplugin>

Busquedas en el wiki : sibuwiki.xml

<searchplugin xmlns="http://www.mozilla.org/2006/browser/search/">
<shortname>SibuWiki</shortname>
<description>Comunidad Sibu, Costa Rica</description>
<inputencoding>UTF-8</inputencoding>
<image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1%2BjfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP%2BHj8y%2FAAAACXBIWXMAAB5zAAAecwFCmCoXAAAAB3RJTUUH2AYYEwoOK2NmlgAAAbJJREFUKM9t0U9IkwEYx%2FHv%2B2fvfJdbzc2lBr6Q9EcHhTZQBCM8iLekLuIhKOgQnYro0N9TXbzUQeiQBxEi8FAeFClQsHBNySkSBeH6s0wG0dbL3LutbU8HS3foOT08fA4Pvx9UzYK6fO7d1Jtg9U39t8wrYHbPja4fUeQ%2FYKW%2FfnIhqJmONtGSnnnbugsUgFj95vv8lnUY41viVjDAjc2G9khqG%2BivFc10nVgKqP72%2B0Xfat0GKZYbzxyLxjxDzmjXbz10pVRrPzpgP%2FB9vJpnkSxefMVCkoJ2XWnijpq4ljuq%2Ba3CL57ynO%2BAi4Zc2TYOrgU%2BXAL9kzE3GD47bWR33soxua8%2F7tS89J12gNmRi5VmUUWVXjkvPRISxBBL%2BuSyLI0Asdros0FxSVg2JC4TsiohUeS43M7M34vtAbUza9wNl2vwkCBJiS8Ibnpk4MLJm51boELF9pZ1fpLEogUHDQ9Wsbj4Nweg5BE3NmOYKOQx0DBt0jugnGlMtTbHecF2CXvp5tA6TlXU8bb0w1enZvXPVGijN9Mx7h%2BOJKsARDWjIz30o8%2Fr3v%2BEx5Gvu2X9AXeRoyL4D2b1AAAAAElFTkSuQmCC</image>
<url type="application/x-suggestions+json" method="GET" template="http://sibuwiki.homelinux.org/index.php/Special:Search">
  <param name="action" value="opensearch"/>
  <param name="search" value="{searchTerms}"/>
</url>
<url type="text/html" method="GET" template="http://sibuwiki.homelinux.org/index.php/Special:Search">
  <param name="search" value="{searchTerms}"/>
  <param name="sourceid" value="Mozilla-search"/>
</url>
<searchform>http://sibuwiki.homelinux.org/index.php/Special:Search</searchform>
</searchplugin>

Instalacion :

Windows :

Copiar a C:\Archivos de programa\Mozilla Firefox\searchplugins.

GNU/Linux :

(Iceweasel) Copiar a /usr/share/iceweasel/searchplugins.

(Firefox) Copiar a /usr/share/firefox/searchplugins.

Por ultimo, reiniciar el navegador.

Mas informacion: http://developer.mozilla.org

ShareThis

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

niko's mini factory

Visualización de la historia de commits de Eclipse IDE

Junio 27th, 2008 - [Enlace local]

read this in english


code_swarm - Eclipse (short ver.) from Michael Ogawa on Vimeo.

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

.NET o no .NET, esa es la cuestión

La pareja perfecta

Junio 27th, 2008 - [Enlace local]

En la Vida Real ™ han vivido parejas de éxito, como Bonnie and Clyde, el Gordo y el Flaco, el Coyote y el Correcaminos, Tom y Jerry, Piolín y el gato malo maloso, Rajoy y Zapatero… Sí, ya sé, las cuatro últimas parejas no pertenecen a la Vida Real ™, pero como si lo fueran. ¿O no has vivido, y quizás todavía vivas, todas las escenas que estos dúos sufren en sus episodios y te partes de risa viéndolos por la caja tonta? Por lo tanto, son parejas de la Vida Real ™. Q.E.D. [Que no significa “Que Enpaz Descanse”, sino “Quod Erat Demonstrandum", aunque alguna de esas parejas se merezcan la primera acepción].

Como locos informáticos que somos, nosotros tenemos otros dúos: Linux y Windows, programar con dos monitores, tener dos teclados y confundirte de teclas cuando cambias entre uno y otro, e incluso, a veces, comprar un software y disponer de dos licencias, una para tu ordenador fijo y otra para tu portátil.

Y como jodíos developers programadores que somos, usamos Visual Studio (evidentemente habrá quien no lo haga, quizás muchos, así que libéreseme –coñis, el Word entiende el palabro- de lo evidente), y a veces, sobre todo para los pobrecitos que seguimos con C++ (aunque luego ese C++ lo usemos desde .NET mediante Interop, pero una compañía no debe dejar de lado ni a los Builderos, Delphínicos, Visual Basiceros de antes, gnueros, o incluso fortraneros, por qué no), nos encontramos con que hay cosas dentro de Visual Studio que no funcionan todo lo bien que debieran, como el IntelliSense que, si bien en C# marcha de forma impecable, en C++, sobre todo si picas rápido, cuando quiere enterarse, tu ya has terminado la clase y hasta el programa entero.

Ahora, según el guión, toca poner una pantalla del editor de Visual Studio con C++ tal y como lo trajo al mundo Microsoft (para los curiosos, el código que se muestra pertenece a mi zxDelTemp):

clip_image002

Y ahora vamos a poner otra:

clip_image004

¿Veis la diferencia? Yo sí, no sé vosotros. Yo le doy un vistazo a la segunda pantalla y reconozco casi lo que es cada cosa al primer vistazo. Fijaros arriba, que hay dos ventanitas extra. Sirven para saltar a un método en concreto del fichero abierto, y funciona perfectamente, no como las que trae Visual Studio, que a veces se van por los Cerros de Úbeda o más allá.

Y ahora volvemos al IntelliSense y su variante multicolor, como el mundo de la Abeja Maya. Imaginaros que tenemos un objeto o un puntero a objeto y, al picar el punto, se abriera un IntelliSense que te ofreciera, no sólo los métodos de ese objeto, sino posibles “adelantos” de lo que quieres picar, y que encima, con una probabilidad bastante alta, ese “adelanto” fuera “el adelanto” justo que te hace falta. Y encima, si el objeto es un puntero a objeto, te cambie el punto por la flechita.

Sigue imaginando. Imagina que comenzaras a picar unas comillas para un texto y que el entorno te pusiera las de cierre, te cierre los paréntesis y te de una indicación visual de a qué paréntesis de apertura se corresponde. Lo mismo con las llaves. Imagina que empezaras a picar un texto, cualquier texto y encima con algún error tipográfico, que el editor te ofreciera posibilidades y que una de esas posibilidades fuera la correcta, pulsaras enter y tuvieras la palabra correcta y corregida.

Imagina que te equivoques al mecanografiar, sobre todo en los comentarios, pero a veces en el código fuente, ya sea porque el editor ha fallado en ofrecerte posibilidades (que a veces lo hace, igual que ofrecerte mal el cierre de los paréntesis) y que piques un símbolo que no existe. ¿Qué tal que el editor te lo subrayara como erróneo? ¿Qué tal si pudieras añadir el español o cualquier otro idioma a la lista de palabras a corregir, aparte de los símbolos incorrectos?

Y por último, imagina por un momento que no añadiera apenas sobrecarga al Visual Studio, y que no notaras diferencia de rendimiento entre tenerlo y no.

¿Fantasías animadas de ayer y de hoy, como algunos de las parejas perfectas con las que empezaba esta entrada? ¿Eso no existe?

Pues sí, sí que existe. Se llama Visual Assist, la empresa se llama TWhole Tomato, y tiene, a fecha de hoy, el módico precio de 99$ (Dólares USA, no Euros) si lo compras sin mantenimiento. Tiene más cosas aparte de las comentadas, y no sólo sirve para C++, sino que también funciona con otros lenguajes, la licencia es válida para instalar en dos equipos propios, y yo, personalmente, no puedo pasar sin él. Y os prometo que no es publicidad encubierta, quien me conozca sabe que no miento.

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

Pwned's blog - Desarrollo de Tecnologia

Silverlight Desktop

Junio 27th, 2008 - [Enlace local]


Un framework que le permite cargar dinámicamente módulos de Silverlight dentro de ventanas de tamaño ajustables.

Características de SilverlightDesktop: http://silverlightdesktop.net/Features/tabid/60/Default.aspx

Un vivo ejemplo y la información adicional disponible en la página del proyecto: SilverlightDesktop.net

via: CodePlex

Entradas relacionadas:


© Pwned's Blog

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

Pwned's blog - Desarrollo de Tecnologia

Microsoft lanza Hyper-V

Junio 27th, 2008 - [Enlace local]

Se ha anunciado oficialmente la disponibilidad de Windows Server 2008 Hyper-V. Este es un gran inicio en la liberación de un Hypervisor basado en la tecnologia de virtualizacion como un rol clave en Windows Server 2008. Se cree que la virtualización debe ser básico para el sistema operativo y la liberación de Hyper-V es un paso básico en esa dirección. Puedes descargar Hyper-V en http://www.microsoft.com/hyper-v y obtener toda la información que necesitas para empezar a tomar una ventaja de la nueva tecnología.

Así que para mí es el momento de ir a actualizar todos mis hosts y VM,…un saludo y suerte en su configuracion!

Entradas relacionadas:


© Pwned's Blog

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

Pensamientos ágiles

IONA

Junio 26th, 2008 - [Enlace local]


IONA (Technologies) es una de esas compañías que ha marcado una era. Surgida del Trinity College en Dublin como startup allá por el 1991, es una de esas compañías que a los de mi época comenzaba a sonarnos un poquillo cuando andábamos por la Universidad, y que al salir y descubrir un poco el mundo exterior y empezar a leer las revistillas, y las páginas web, pues descubrías que era la empresa donde más se innovaba en el momento. La empresa donde cualquier ingeniero de software le gustaría trabajar, la empresa que acaparabalos titulares de los TheServerSide de la época.

En Answers.com tienen una biografía excepcional de la compañía. Su mayor éxito fue Orbix ORB. Top ventas donde los haya y que todavía se vende. La primera implementación comercial de un estándar, que empezaba a sonar en la época, llamado CORBA. Esa innovación, el ser los primeros en adoptar un estándar avalado por HP, IBM, Sun, Apple, y todo el resto de miembros del OMG, les valió el convertirse en la empresa del momento, y una de las de mayor éxito de la década de los 90.

Un Object Request Broker, nada más y nada menos, lo que ahora mirado desde lejos parece lo más sencillo del mundo, pero que en aquella época era algo que daba vértigo sólo de pensarlo. ¡O al menos a mi me lo daba en las prácticas de CORBA! Leyendo la biografía es sorprendente todo lo que crearon durante esa época. OrbixTalk lo que suena a los modernos Event Driven Servers que nos venden hoy en día, Orbix Transaction Monitor, Orbix MX (multimedia, video streaming, ...), Orbix COMet (para crear aplicaciones Windows y ejecutarlas en otros sistemas operativos), partnetship con Visual Cafe (¿quién se acuerda de ese IDE?), Homebase EJB, ... y otro montón de productos que supongo que pasaron con más pena que gloria.

Según comentan los irlandeses, y en general todo el sector, el golpe del 2000 fue demasiado para ellos. Nunca consiguieron levantar cabeza al nivel de antes (5ª compañía en el Nasdaq 1997), y muchos de los miembros aprovecharon para canjear las acciones y comprarse unas buenas casitas como cuenta Joe Drumgoole en su blog. Como también comenta, el gran fallo es que nunca supieron realmente como unirse al carro de Java y EJB, y probablemente hayan lamentado el no comprar WebLogic en su momento si son ciertos los rumores.

En los últimos años la esperanza de IONA ha sido el Open Source, pero siempre dando esa impresión de no tener un rumbo fijo. La compra de C24 y ServiceMix parece haber enfocado su negocio en el mundo de la integración, interoperabilidad entre estándares y el Open Source. Tiene productos interesantes (casualmente esta semana he estado en un seminario sobre uno de ellos), pero siguen dando exactamente esa impresión de no saber realmente donde está su negocio.

Esta semana IONA ha sido comprada por Progress, por un precio de 163 millones de dólares, o lo que es lo mismo sobre 4 dólares por acción, en lo que claramente es una operación para deshacerse de la compañía. Un precio bastante miserable para una compañía que en el 1997 valía 1 billón de dólares. Mucho me temo que en la oficina estarán ya pensando en cuando caerán los despidos. Malos tiempos para Irlanda que pierde a lo que ha sido la compañía de software más importante que ha salido de la isla.

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

Pwned's blog - Desarrollo de Tecnologia

Where the hell is Matt Harding?

Junio 26th, 2008 - [Enlace local]

Alguien recuerda a Matt Harding, el australiano que tuvo la loca idea de viajar por todo el mundo y bailar por algunos de los lugares mas hermosos?. Bueno él lo ha hecho de nuevo, y aquí está el resultado de su última escapada. A disfrutar!


Where the Hell is Matt? (2008) from Matthew Harding on Vimeo.


Entradas relacionadas:

© Pwned's Blog

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

Yet Another Programming Weblog

Lenguajes de la A a la Z: Entrevistas

Junio 26th, 2008 - [Enlace local]

En Computerworld están publicando extensas entrevistas acerca de un montón de lenguajes de la A a la Z. La verdad es que había visto alguna referencia, pero después de la de Stroustrup (y sus repercusiones en Slashdot y reddit) le he prestado más atención y parece que pueden ser bastante curiosas. También en LtU - The A-Z of Programming Languages prometen seguirles la pista, enlazando a su vez a las pasadas:

Actualización: La entrevista a Stroustrup también se comenta en la portada de barrapunto

La misma entrada y más comentarios en Lenguajes de la A a la Z: Entrevistas en barrapunto

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

Picando Código

Corrigiendo trabajos obligatorios con Calc

Junio 26th, 2008 - [Enlace local]

Acabo de pasar una noche corrigiendo trabajos obligatorios… El obligatorio constaba de dos partes:

Al principio como que demoraba bastante, pero a medida que fui avanzando le agarré la mano. Les cuento cómo hice para generar las notas. Me creé una hoja de cálculo en OpenOffice Calc, que me calculó dinámicamente la nota de cada alumno.

Hoja de cálculos - Notas

El tema es así: la primera parte son 14 preguntas, y la segunda 6 ejercicios. Obviamente lo más difícil es la segunda parte, así que ésta lleva el 70% del puntaje total del trabajo. La primera parte, es un 30%. La nota es sobre 100 para no complicarme, después divido los 100 puntos del curso en los trabajos obligatorios y parciales que se hicieron, según su importancia.

Separé la primera parte, con sus 14 columnas, y la segunda con sus 6 columnas. Para cada apartado, tanto los 14 de la primera parte, como los 6 de la segunda, iba dando un puntaje según lo que se pedía en la letra, y criterio personal. La columna A la reservé para anotaciones personales, en B están los estudiantes, de C a P las primeras 14 notas y de R a W las segundas 6.

Las segundas 6 notas representan el 70% de la nota total, y la suma de sus puntajes es de 70. Como uno de los ejercicios mostraba mayor complejidad, le puse 20 puntos en vez de 10.

La columna X tiene la fórmula:
=SUM(C3:P3)*3/14+SUM(R3:W3)
Que suma los puntajes de la primera parte y hace la regla de 3 para determinar cuánto representan esos puntos sobre el puntaje total, y se lo suma a los posibles 70 puntos de la segunda parte.

Ahora, a eso le agregué la columna Y, llamada “Comentarios (Bonus)”, donde agregué comentarios del estilo “Destacada tal cosa de tal ejercicio“, “Código muy prolijo“, etc. Éstos comentarios llevan un puntaje bonus según la importancia, que agrego en la columna Z. Y finalmente, la columna AA redondea el resultado final de X + Z.

Así que lo único que tenía que hacer era ir mirando los ejercicios y poniéndoles nota para cada alumno :D

Escucha
este post

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