Nadie los ha tenido tan gordos como yo como para rehacer los controles de ASP.NETWebForms desde su base, css friendly, con BootStrap como estilizador y en F#. Y con tests unitarios y de integración. Y extensible a AngularJS. Y a otras cosas. Y ultra-fast. Toma moreno.
Vuestra cara al leer lo de arriba
Pues este será mi reto personal. Montaré un repositorio e iré poniendo allí mis progresos y locuras y poco a poco os iré explicando las aventuras que viviré en este viaje largo y enriquecedor.
ACTUALIZACIÓN: He investigado un poco y he visto que no estaba usando la configuración requerida para la última versión de esta herramienta. Corrijo el post para que no os confundáis como yo.
ACTUALIZACIÓN 2: Tengo que practicar a no publicar a lo loco XD Gracias a vuestros comentarios he descubierto nuevas funcionalidades de esta herramienta la mar de interesantes que os expondré a continuación. Todo, o casi, está documentado en la web oficial pero encontrar esas piezas es bastante complicado.
ACTUALIZACIÓN 3: Tras varios bandazos he decidido dividir este post en varias partes. La verdad es que empezaba a incumplir el Principio de Responsabilidad Única. Sí, ¡porque los blogs también pueden ser SOLID! Así que ¡es hora de refactorizar!
Parte 1: Cómo usarlo en Blogger (Lo que lees) Parte 2: Los brushes (Próximamente) Parte 3: Configurando y trasteando (Próximamente)
Preparando mi blog necesitaba de alguna herramienta para poder insertar código formateado. Había visto muchos otros blogs con código formateado y ¡no podía quedarme atrás! Me puse a investigar (Googlear) y encontré esta herramienta: SyntaxHighlighter. Se encuentra en esta web: http://alexgorbatchev.com/SyntaxHighlighter/.
Esta herramienta te permite convertir algo así (escrito en C#):
public class Test
{
public int HelloKitty { get; set; }
}
En algo así:
public class Test
{
public int HelloKitty { get; set; }
}
Otros ejemplos:
SQL:
SELECT Id
, Name
FROM [Property].[Properties]
WHERE IsPublished = 1
XML:
ToveJaniReminder
Don't forget me this weekend!
JavaScript:
function myFunction() {
var str = document.getElementById("p1").innerHTML;
var pos = str.indexOf("locate");
document.getElementById("demo").innerHTML = pos;
}
Para poder usar esta magnífica herramienta, he tenido que modificar la plantilla maestra de Blogger. Ésta está localizada en el apartado Plantilla en la plataforma de gestión de tu blog en Blogger y, dentro de está, veréis un botón que pone Editar HTML, tal y como muestra la imagen a continuación.
Dentro del editor, justo antes del cierre del tag head, agregar el siguiente snippet:
Después, justo antes del cierre del tag body, agregar el siguiente snippet. Es importante que esté antes del cierre ya que si lo ponéis en el head no se os cargarán los estilos (¡Probado en este blog!):
Ojo con el detalle de la línea resaltada (línea nº 7). Es necesario poner el símbolo < como < ya que el editor de Blogger espera texto XML y éste es su correspondiente valor. Así no os dará error de validación XML:
En el fondo, cualquier carácter que tenga versión XML es necesario ponerlo con esa codificación. Por suerte las comillas simples (') y dobles (") las transforma sólo (' pasa a ser ' y " pasa a ser ").
¿Y como la uso en las entradas?
En el editor de las entradas como ésta, en modo HTML, escribir el código dentro de un tag pre como a continuación:
Como podemos comprobar, en el atributo class definimos el brush que queremos que la herramienta utilice mediante el uso de un alias, en este caso css. Si quereis javascript, podéis usar js. ¿C#? c#, y así hasta todos los alias definidos en la carga de la herramienta. En este enlace(http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/) podéis encontrar todos los lenguajes que reconoce y sus alias.
Hasta aquí podéis ya juguetear con la herramienta. En la próxima parte os explicaré qué son los brushes, cómo funcionan y cómo podéis crear de propios. ¡A tope!
Llevo un par de años obsesionado con que no puedo quedarme estancado con los pocos conocimientos que tenía desarrollando aplicaciones. Durante muchos años fui una persona que pensaba que simplemente con la experiencia de trabajo del día a día ya era suficiente para ser buen programador. A base de buenas hostias como panes comprobé que me equivocaba y que debía espabilar. Comencé a leer libros, blogs y todo lo que estuviera a mi alcance con el fin de aprender de buena mano toda aquella tecnología con la que trabajaba (C#, ASP.NET WebForms, NHibernate, StructureMap, etcétera). Mi idea no era conocerlos de memoria, sino tener consciencia de su filosofía, potencial y conocer la mayoría de sus características con el fin de poder sacar su máximo jugo. Así, si me encontraba conque debía de mapear una propiedad de forma especial en NHibernate con una columna de una tabla con tipo incompatible, saber que NHibernate ofrece la posibilidad de crear tipos de usuario especializados y extender su funcionalidad. De esto hablaré en otro post algún día.
Mientras leía me tope con este libro: Professional ASP.NET Design Patterns. Este libro me abrió los ojos. No tengo más que mis más gratas alabanzas a este libro. Ahora está un poquito desfasado tecnológicamente (¡¡¡2010 OMG!!!) pero aun así es bastante recomendable para todo aquel que desarrolle aplicaciones web en .NET. Este libro me abrió al mundo de los patrones de diseño y su aplicación en tecnologías web de ASP.NET, tanto WebForms como MVC. Me enseñó buenos patrones de diseño como el patrón nulo, el patrón decorador o el patrón cadena de responsabilidad entre otros. Me enseñó metodologías de diseño como es el DDD (Domain Driven Design, o en castizo Diseño Orientado a Dominio). Me enseñó patrones de presentación como MVC (Modelo-Vista-Controlador), Front Controller o MVP (Modelo-Vista-Presentador). Me enseñó de patrones de persistencia, como el Unit Of Work. Me enseñó la importancia de los principios de diseño SOLID y la importancia de todo lo que implica cada letra en el buen desarrollo de las aplicaciones. Pero todo esto palidece ante la forma en que realizaban los ejemplos de cada uno de estos patrones: Cada uno de ellos acompañaba de un ejemplo completo desde el html hasta la capa de datos demostrando su potencial. Y no solamente eso sino que se permite el lujo de decir "Haré este ejemplo del patrón decorador usando WebForms y NHibernate como acceso a la bd" y en otro ejemplo usar MVC con una capa de datos en memoria, o otro ejemplo solo usando Handlers. Lo que quiero decir es que lo que me enseñó este libro es que la tecnología esta al servicio del programador y que con buen uso y cabeza puedes conseguir todo lo que te propongas con cualquier tecnología que quieras usar. ¿Porqué encasillarse con MVC o con WebForms? ¿O con NHibernate o Entity Framework? ¿O con StructureMap o Unity? Trabaja con lo que estés más a gusto, al cliente le da igual qué tecnología escojas, mientras obtenga lo que pida. Y programando modularmente, otra cosa que me enseñó este libro, ¿que una tecnología elegida no te ofrece lo que necesitas? Por ejemplo, ¿que NHibernate no permite X caso y Entity Framework sí, y es necesaria? Implementas la capa de datos usando Entity Framework y simplemente cambias el módulo de capa de datos. El resto de capas o módulos no se enterarán de nada.
Tras leer este libro descubrí la importancia de los patrones de diseño, principios y demás amiguetes y mi obsesión por conocer las tecnologías con las que trabajaba se convirtió en obsesión en conocer todos lo relativo a best practices de código. DDD, patrones, MVP, SOLID. Intentaba buscar todo sobre ello. También intenté aplicarlos en el trabajo, cosa difícil. Pero algo se hizo. Una cosa que descubrí es que aplicar estos conceptos a medias es como pegarse un tiro en una pierna y correr una maratón. Los problemas aparecen solos, así que si lo intentáis, definid contextos completos y migrad estos contextos completamente. Tras un tiempo descubrí un nuevo mundo: CQRS. Pero esto es una historia para otro día.
Bienvenidos a mi blog. En este blog hablaré de cosas relacionadas con el mundo del software, haciendo especial incapié en el uso de tecnologías de .NET. Tambiés se hablará de arquitectura del software y best practices del diseño y programación de código en general. Me gusta mucho la arquitectura de software y este blog es un buen lugar para soltar todas mis locas ideas, buenas o no. Espero poder ser de ayuda a mucha gente con mis posts, así como poder aprender de vosotros. ¡Nos vemos pronto!