Escribiendo código a la defensiva y manejando excepciones,

Desde el lanzamiento de .NET y su aplicación al desarrollo de aplicaciones Web (ASP.NET), uno de los principios esenciales es el desarrollar código seguro, pues qué puede significar eso?

No solamente es evitar inyecciones al código de tipo SQL, sino tambien implementar una serie de políticas que eviten el mal uso de este código, y sobre todo hacer que nuestras aplicaciones no se "caigan" de forma catastrófica (léase la típica pantalla de error de .NET) frente al usuario.

Dentro de nuestra organización  hemos tratado e imprimir una serie de reglas en el desarrollo de nuestras aplicaciones de las cuales enumero algunas:

  1. Nunca confíes en el input del usuario:
    Una de las causas más comunes de errores no controlados, el asumir que el usuario ubicará datos congruentes en cualquiera de los mecanismos de ingreso de información. De manera que todo "absolutamente todo" es validado a todo nivel, desde las formas ASP.NET hasta la capa de datos.

  2. Nunca permitas que la interfaz de usuario "se caiga":
    El usuario no debería perder la interacción con la aplicación. Si se llegase a generar una excepción, no debería ser el fin del mundo!, de esta manera tratamos de informarle al usuario: Qué paso? Qué tipo de excepción es?, Por qué pudo haberse generado el error? y Qué puede hacer para remediarlo?: Si es un error de input que ubique los valores adecuados o si es un error no manejable por el usuario a quién tiene que contactar para resolverlo.

  3. Capturar la mayor cantidad de excepciones posibles y registrarlas:
    El poder analizar los métodos dentro de los componentes, datos o presentación clasificando excepciones podría resultar una tarea ardua, pero enriquecedora en cuanto a resultados, mucho más si registramos las excepciones generadas, nos ha ayudado muchísimo a resolver problemas insospechados de forma relativamente rápida y efectiva. Aquí incluyo la clasificación de excepciones: comenzamos entre las "Excepciones Catastróficas" y el "Resto", para priorizar... lógicamente esta división se amplió a categorización por módulo, importancia, frecuencia, etc.

  4. Verificación de nulidad de objectos:
    Asumir que el objeto (sea control, instancia de clase, etc) podría ser nulo ("null") en cualquier momento. Esta estrategia te libera de muchos problemas derivados de la omisión.

  5. Implementar mecanismos de reporte de Bugs:
    Una vez que la aplicación está en producción, al usuario detectar un bug o excepción, tiene la posibilidad de reportarlo mediante mecanismos de comunicación con nuestro departamento de soporte. Esencial en aplicaciones de alto desempeño. Seamos razonables, la aplicación libre de bugs no existe, por lo tanto lo mejor es tratar de manejarlos, reportarlos e incluirlos dentro del flujo de soporte. Muy buenos resultados, sobre todo hacia la imagen que damos al usuario.

Son algunas cosas, pocas, las que he mencionado, pero que ayudan realmente en construir código realmente seguro y sobre todo enfocado hacia el soporte al usuario asegurando un ciclo de vida lo más correcto posible de la aplicación.

Espero seguir escribiendo sobre esto en algún post más... saludos. 

Actualmente calificado con 4.5 por 2 personas

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Credo para el Desarrollador que trabaja en equipo

Cuando se construye un equipo, como ahora en mi oficina. Se debe pensar que es muy importante manejar la cultura de equipo de tal manera que se pueda ser lo más productivo posible. A través del tiempo trabajando con equipos con difierentes disciplinas se podría ubicar un lista de actitudes e ideas que beneficien al equipo de desarrollo. Se la podría denominar el Credo de Desarrollo

Este es un artículo que Eric Wase ha publicado y me permito reproducir en su extensión. 

 Yo <Tu nombre> soy un  desarrollador.

Entiendo que la razón por la cual yo existo, es para servir y resolver las necesidades de los usuarios.  Tomaré los requerimientos del usuario seriamente y seré un apasionado del servicio al cliente. No mostraré ningun desdén por el usuario que no entienda lo que yo hago y siempre trataré de cruzar el puente entre el mundo técnico y el del usuario para poder comprenderlo mejor. Al lograr entender al usuario puedo ganarme su confianza, y con esta confianza tendré un socio valioso en el proceso de desarrollo.

Entiendo que cada uno de los miembros del staff de IT es importante para lograr alcanzar mis metas. Los administradores de Bases de Datos protegen mis datos y me ayudan a asegurar el desempeño. Los Administradores de Red aseguran que mis respaldos (backups) están seguros y que tengo los accesos, permisos, software y sistemas adecuados y funcionando para realizar mi trabajo. No formaré un "gueto" de desarrolladores ni tendré una mentalidad "nosotros vs ellos". Apoyaré a los miembros de mi equipo que no sean desarrolladores como si fuera otro cliente o compañero.

Entiendo que cada uno de los desarrolladores de mi equipo es mi compañero. Como compañeros, ellos tendrán mi respeto y así lograré tener el de ellos. Con una relación basada en confianza y respeto, no voy a temer al formular preguntas, plantear inquietudes, o de otro modo ayudar a mis compañeros en la creación de código de alta calidad. Considero cualquier conflicto intelectual como una función saludable y natural de los equipos para encontrar la mejor ruta de acción para completar una tarea. Cuando el conflicto haya concluido y una dirección haya sido decidida por el equipo, apoyaré de todo corazón el enfoque adoptado, incluso si mi sugerencia no fue la "ganadora".

Entiendo que el ego en todas sus formas es destructivo y perjudicial para el equipo. Voy a recordar que el equipo es el propietario del código, no el individuo. A pesar de que debería sentirme orgulloso de mis logros personales, siempre recordaré darle crédito a la ayuda que el equipo me haya dado para cumplir estos logros, y nunca mostraré egoismo sobre mi código y técnicas hacia mis compañeros. Voy a alentar a mis compañeros a entender mi código y siempre sentar como bienvenidas cualquier crítica constructiva. Me doy cuenta de que todo el código puede ser mejorado y tomaré la crítica como una oportunidad para el debate intelectual y una experencia de aprendizaje, mas no como algo personal.

Entiendo que mi campo de acción está en constante crecimiento y evolución. Voy a crear oportunidades para explorar nuevos conceptos y estaré abierto a nuevas Ideas. No me cerraré en patrones particulares o prácticas de desarrollo en las cuales me siento a gusto pero que no son apropiadas en ciertas situaciones. Cuando uso patrones y prácticas particulares, voy a sopesar cuidadosamente los beneficios e inconvenientes de dichos patrones y tomaré las decisiones que sean siempre lo mejor para el equipo. Aunque guste de aprender cosas nuevas, me resistiré a usar herramientes y prácticas de desarrollo sólo porque son nuevas o "avanzadas", si es que no agregan valor real al código, servicio o producto que estoy haciendo.  

Tengo como idea principal que a pesar de que soy el primero en escribir algún código en particular, no voy a ser el último en mantenerlo, administrarlo o hacerle cambios. Voy a tratar de mantener mi código legible, bien documentado y que tenga la menor complejidad posible. No asumiré que ya que conozco de una herramienta o patrón de desarrollo el resto de desarrolladores lo conocerá. Documento cuidadosamente los usos y justificativos para usar un patrón o herramienta para que los que vengan detrás de mí puedan entender mejor lo que yo estaba tratando de lograr con este código. Nunca construiré código "obscuro" o difícil de entender, solo por intentar lograr "un empleo seguro" o demostrar lo listo que soy.

Léelo Completo: My Team's Developer Credo en - Eric Wase Blog

 

Actualmente calificado con 5.0 por 1 personas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

ASP.NET MVC Design Philosophy

Eilon Lipton, el desarrollador líder del proyecto ASP.NET MVC comparte algunos de sus pensamientos sobre la filosofía de diseño alrededor de la figura del nuevo framework.

A pesar de que existen muchos artículos y post que describen lo que es este framework y cómo realizar tareas, lo realmente útil es tener información a la mano que nos permita tomar decisiones al momento de tratar de implementar este framework. Así como determinar la mejor estrategia para realizar el "salto" de nuestras aplicaciones utilizando las nuevas características que Microsoft nos presenta.

Una de las características que más me interesan es el incluir el "mindset" de pruebas al desarrollar sitios y aplicaciones web. A pesar que ya existen formas de hacerlo, hacía falta algo que nos obligue a hacerlo... para muchos quienes trabajamos desarrollando aplicaciones web, el tema de pruebas no es muy tomado en cuenta.

Estoy seguro que será de gran utilidad... léanlo, realmente despeja muchas dudas.

ASP.NET MVC Design Philosophy

Eilon Lipton's Blog 

Sea el primero en calificar este post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Guerra Open-Source: terrorismo y software libre

Open source communism Sin palabras...

Léan el artículo original y opinen....

Open Source Warfare en  IEEE Spectrum Online

 

 

Vía Geeks.ms 

 

 

 

 

 

Sea el primero en calificar este post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Microsoft Live Labs: Volta, Web development using only the Materials in the Room

La tecnología Volta (technology preview) es un set de herramientas para desarrolladores que permite construir aplicaciones web multi-capa, aplicando técnicas familiars y patrones. Suena bastante interesante... demasiado interesante diría yo!.

Según textualmente indica el sitio oficial:

First, design and build your application as a .NET client application, then assign the portions of the application to run on the server and the client tiers late in the development process. The compiler creates cross-browser JavaScript for the client tier, web services for the server tier, and communication, serialization, synchronization, security, and other boilerplate code to tie the tiers together.

En teoría los desarrolladores podríamos utilizar ya sea web browser o el CLR como clientes y Volta manejaría la complejidad del manejo de capas (tier-splitting). Volta comprende herramientas para ejecutar tareas de profiling a todo nivel con la finalidad de realizar refactoring a nivel de arquitectura y optimizaciones de forma simple y rápida.

Me he bajado el technology preview y te anticipo los requerimientos:

Design Time Requirements:

  • Visual Studio 2008 (Beta 2 [20706.1] or RTM [21022.8]) with .NET Framework 3.5, and
  • A web browser (Internet Explorer 6+ or Firefox 2) for integrated debugging

Client Run Time Requirements:

Volta applications can be compiled target either the full .NET framework runtime version 3.5 or standards-conformant web browsers with JavaScript support.

Server Run Time Requirements (Remote Deployment):

On the server tier Volta applications require version 3.5 of the Microsoft .NET framework, Internet Information Services (IIS) version 6 or 7, and ASP.NET.

Samples

Qué sería de la mención a este projecto sin algo de ejemplos, aquí los ubico: 

Word Worm

Una aplicación de Búsqueda de palabras en Inglés con mecanismo de sugerencias... Realmente sorprendedor...

 

Virtual Earth SDK - Volta Style

Un subset del actual SDK de Virtual, a diferencia del original, este utiliza Volta, de manera que todo el código es C#.

 

 

Descarga.

Yo no esperaría demasiado... siempre es bueno aprender:

 http://labs.live.com/volta/download/

 

 

Sea el primero en calificar este post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categorías

Sponsors


    Blogroll