[CodingHorror] El primero de la lista :)

30 05 2008

Hace un tiempo vengo trabajando en uno de esos proyectos que uno hace, y empieza a crecer y crecer y se tiene que terminar para ayer. Que luego reza para no tener que seguir y se lo pasen a otro, bueno en este caso yo soy el “otro”.

Me llegó el proyecto, bastante complejo por cierto, y lo analicé por un rato. Luego voy a ver las tablas de la DB a ver si me “contaban” un poco como estaba hecha la solución y…. OHHHHH!!!! las tablas no tenían ni primary keys ni foreign keys!!!, no empezamos bien no?…

Luego de modificar las tablas y agregar las relaciones para mantener una integridad referencial, voy a modificar el código para soportar algunos valores nulos que surgieron de este refactoring de la DB. Que me encuentro??? Cáda módulo (aprox 12) tenía su propia capa de acceso a datos!!!!, había que modificar los 12 módulos!!!!!!!, y todo mezclado código generado a mano con otro autogenerado con CodeSmith :’(. Veo unas clases parciales, LA SALVACIÓN!, digo bueno los métodos creeados a mano estan en las clases parciales que decían <Clase>.exteder.vb, reviso y…. EN BLANCO!, si los métodos creados a mano estaban en las mismas partial clases que los autogenerados.

Bueno, luego de renegar, hacer un único acceso a datos y refactortizar un poco, me contré con esto, que fue el motivo del post:

If isPageIndexChanging And 1 < 0 Then    dv.Sort = String.Format("{0}
{1}", Me.SortExpression, Me.SortDirection)Else    dv.Sort = String.Format("{0}
{1}", Me.SortExpression, Me.SortDirection)End If

Donde vemos la hermosa coparación lógica 1 < 0, y que las dos sentencias del If son iguales :)

Excelente!!!

PD: No hagan esto en sus aplicaciones…





Alternativa al Tren Bala, el Tren para TODOS

18 05 2008

Revisando los email me contrè con un foward acerca de algo que ya habìa leido, pero esta vez con una iniciativa concreta.

Un sitio web para registrarnos y “firmar” virtualmente, una petición para que se tenga en cuenta la iniciativa un Tren para Todos.

Si son de Argentina van a saber de lo que estoy hablando y sino obvien este post. Le pido a todos los argentinos que aunque sea sumemos esfuerzos, que entre todos, por mìnimo que sea el esfuerzo simamos fuerzas.

El sitio es: TREN para TODOS (http://www.trenparatodos.com.ar).

 





Web Developers: No hagan esto en su aplicación!!!

16 05 2008

Navegando un poco y buscando algún CMS para .NET como alternativa a DotNetNuke me encontré con el post Un candidato a peor “captcha” de la historia (http://rafavargas.wordpress.com/2008/05/14/un-candidato-a-peor-captcha-de-la-historia/), la verdad IMPERDIBLE!!!





SQL para obtener Schema de una base de datos en SQL Server

3 04 2008

Hoy me encontré con el problema de obtener todas las tablas de una base de datos dado con SQL. Releyendo el post
SQL para obtener Schema de una tabla en SQL Server y hacindo un par de modificaciones obtuve la sentencia SQL para obtener todas las tablas de la DB.

SELECT
       TABLE_NAME
 FROM
      INFORMATION_SCHEMA.TABLES
 WHERE
       TABLE_TYPE = 'BASE TABLE'
       AND TABLE_CATALOG='DATABASE_NAME'

donde dice DATABASE_NAME colocamos el nombre de la base de datos de la cual queremos saber su schema.

Enjoy!





Provincia de Buenos Aires por el buen camino

29 03 2008

Acabo de leer un post en Mi Carrera Laboral En Informàtica & Tecnologìa, en el cual explican y dan a conocer sobre los nuevos beneficios que las empresas de IT tendràn al instalarse en la provincia de Buenos Aires. Buscando de esta forma el gobierno incentivar la industria.

Me parece una medida muy acertada, y muy buenos los beneficios que otorgan.

Saludos, y a mudarnos a Buenos Aires! ;)





10:1 - Un buen desarrollador equivale a diez programadores con baja productividad

29 03 2008

Esxcelente post sobre la productividad de los desarrolladores.

Pueden encontrar la versiòn original en inglès en Haccked.

O la traducciòn hecha por la gente de Mi Carrera Laboral en Informàtica & Tecnologìa 

Saludos, y espero que se hagan valer en sus organizaciones.





Javascript addEvent() simplificado y crossbrowser

29 03 2008

Hola a todos, esta noche querìa comentarles dos scripts javascript para “limpiar” nuestro (X)HTML de javascript. Mediante la utilizaciòn de javascript no intrusivo.
Una pràctica comùn para agregarle comportamiento a los diferentes elementos de nuestras pàginas es mediante los atributos onClick, onMouseOver, etc. Esto lo que logra es que nuestra presentaciòn (elementos HTML, que definen el contenido) se “mezclen” con el comportamiento(scritps javascript). Un ejemplo de esta práctica podrìa ser:

<html>    <head><title>Test</title>

<link type="javascript" rel="text/javascript" href="funciones.js">

</head>

<body>

<img id="agrandar" src="lupa_agrandar.png" onClick="agrandarTexto()"/>

<img id="achicar" src="lupa_achicar.png" onClick="achicarTexto()"/>

<p class="Texto">

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

</p>

</body>

</html>

Esto lo que genera es mezclar mucho javascript con HTML. En este ejemplo no se llega a notar ya que es muy simple, pero toma fundamental importancia en aplicaciones web ricas (Rich Internet Applications - RIA) y que utilizan AJAX.

Una soluciòn es agregar handlers a cada tipo de evento a los elementos a travès de su id. Nuestro ejemplo quedìa asì:

<html>    <head><title>Test</title>

<link type="javascript" rel="text/javascript" href="funciones.js">

</head>

<body>

<img id="agrandar" src="lupa_agrandar.png"/>

<img id="achicar" src="lupa_achicar.png"/>

<p class="Texto">

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

</p>

</body>

</html>

Y el archivo js quedarìa parecido a:

function agrandar() {...}function achicar() {...}var agrandar = document.getElementById("agrandar");addEvent(agrandar, "click", agrandar);

var achicar = document.getElementById("achicar");

addEvent(agrandar, "click", achicar);

Bueno la màgia aquì està en la funciòn addEvent(), que es el propòsito del post :).

Hay MUCHISIMAS implementaciones de esta funciòn. Actualmente no estoy usando ninguna, pero por los proyectos si las utilizan saque como conclusiòn que estas son dos de las mejorcitas:

Y por ùltimo querìa nombrar un concurso sobre esta funciòn: PPK’s addEvent() Recoding Contest aquì podràn encontrar MUCHAS soluciones alternativas.

Saludos y happy coding!!! (con javascript no intrusivo :)





Definir estilos CSS especìficos para cada browser y OS

29 03 2008

Leyendo un par de fuentes y navegando un poco me encontrè con esta herramienta/script CSS Browser Selector.

Consiste en un un script javascript MUY pequeño (893 bytes), y la utilizaciòn de estilos como selectores de browser y OS como muestra la misma pàgina en sus ejemplos.

html.gecko div#header { margin: 1em; } .opera #header { margin: 1.2em; } .ie .mylink { font-weight: bold; } .mac.ie .mylink { font-weight: bold; } .[os].[browser] .mylink { font-weight: bold; } -> without space between .[os] and .[browser]

    Creo que puede ser de gran ayuda para cualquier web developer a la hora de realizar los benditos hacks.

    Happy Coding!





    Instalar IE6 en Windows Vista: Y llegó el infierno.

    4 03 2008

    Muy buen post sobre como ejecutar IE6 en Windows Vista sin morir en el intento.  Ya que este no es para nada compatible con el kernel del nuevo sistema operativo.

    La vida de un web developer no es fácil… :(





    Escribiendo desde Word 2007

    6 02 2008

    Hola a todos,

    Esta vez me encuentro probando la nueva funcionalidad de Word 2007, que es escribir Blogs, directamente desde el mismo Word.

    Quizás si tengo tiempo más adelante, postee unas capturas de cómo se hace.

    Saludos!