Object-Oriented Software Construction Bertrand Meyer

Me gustaría recomendar este maravilloso libro sobre los fundamentos del paradigma de programación de orientación a objetos.

En mi opinión, está entre los mejores en esta temática y creo que toda persona que quiera iniciarse en la carrera de programador de software debería de conocer.

Además, en su segunda edición, cubre temas como:

  • Concurrencia, distribución, cliente-servidor e Internet.
  • Bases de datos orientadas a objetos, persistencia, evolución de esquemas.
  • Diseño por contrato: cómo crear software que funcione a la primera.
  • Un estudio de patrones de diseño fundamentales.
  • Cómo diseñar las clases y muchos otros temas de metodología orientada a objetos.
  • Cómo utilizar bien la herencia y detectar abusos.
  • Tipos de datos abstractos: la teoría detrás de la tecnología de objetos.
  • Tipado: rol, problemas y soluciones.
  • Más de 400 referencias a libros, artículos, páginas web, grupos de noticias; glosario de tecnología de objetos.
  • Y muchas novedades sobre los temas de la primera edición: reutilización, modularidad, calidad del software, lenguajes O-O, técnicas de herencia, genéricaidad, gestión de memoria, etc.

Y qué decir de su autor, Bertrand Meyer, es uno de los pioneros de la ingeniería de software moderna, cuya experiencia abarca tanto la industria como la academia. Ha dirigido el desarrollo de librerías y productos O-O de gran éxito. Sus libros de Prentice Hall incluyen Object Success (una introducción a la tecnología de objetos para managers), Introducción a la teoría de los lenguajes de programación, Eiffel: el lenguaje, aplicaciones orientadas a objetos y software reutilizable. Es orador principal frecuente en conferencias internacionales y consultor para compañías Fortune 500, editor de Object-Oriented Series, miembro asociado de la sección de aplicaciones de la Academia de Ciencias de Francia, presidente de la serie de conferencias TOOLS y editor del departamento de Object Technology de IEEE Computer.

 

 

Azure DevOps

Azure DevOps son los servicios en la nube de Microsoft para enfrentarnos a cualquier reto SecDevOps de nuestros proyectos de software.

Está formado por:

  • Azure Boards para realizar el seguimiento de tareas y de trabajo pendiente.
  • Azure Repos para guardar nuestro código fuente  y gestión de ramas.
  • Azure Pipelines para gestionar todo lo relativo a CI/CD.
  • Azure Test Plans para ejecutar los test de integración y test de carga.
  • Azure Artifacts para gestión de nuestro software paquetizado en Nuget o npm.

Si te interesa seguir profundizando y tener más información sobre esta suite de SecDevOps, te invito a visitar mi artículo sobre Azure DevOps.

 

Windows Azure SDK 1.7 y Microsoft.WindowsAzure.Diagnostics

Si habéis migrado una aplicación de Windows Azure SDK 1.* al nuevo Windows Azure SDK 1.7 y hacéis uso del tracing en el Windows Azure Table Storage habréis observado un comportamiento errático, incluso habréis obtenido este mensaje a la hora de hacer tracing:

Could not load file or assembly ‘Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file or assembly ‘Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IO.FileLoadException: Could not load file or assembly ‘Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Bien, esto es debido a que hay que actualizar la referencia al ensamblado Microsoft.WindowsAzure.Diagnostics de vuestro fichero de configuración. Hay que pasar de esto:

<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,

Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35" name="MyDiagnostics">


a esto:

<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,

Microsoft.WindowsAzure.Diagnostics, Version=1.7.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35" name="MyDiagnostics">



Era demasiado largo para un tweet Smile with tongue out

Talentous

Me gustaría compartir con vosotros la aventura profesional en la que me encuentro inmerso en el mundo de las startups.

Hemos creado Talentous la red profesional del talento. En Talentous podrás dibujar tu perfil de talento a través de tests psicométricos diseñados por la Facultad de Psicología de la Universidad Complutense de Madrid. Además, podrás valorar de manera anónima a todo profesional con el que hayas tenido una relación laboral, así contribuirás a dibujar un retrato de talento que ayudará a las personas a encajar mejor en ofertas de trabajo.

image

Así podréis tener un perfil público como este:

https://www.talentous.com/talentprofile/vicente-garcia-diez

 

image

 

También puedes compartir tus principales fortalezas en tus redes sociales, ya que dentro de la plataforma contarás con una versión mucho más detallada de tu perfil, con un Informe de Talento con los resultados de los tests y de las valoraciones que tus compañeros, jefes, clientes, colaboradores, alumnos, etc.

 

 

Además, estamos participando en un concurso de startups en TodoStartups.com en el que agradeceré tu colaboración, solo tienes que hacer click en la estrellita que hay encima de la imagen para darnos un UP!

Y por último y no menos importante, y debido a la buena acogida de la primera versión que en un mes ha conseguido 3000 visitas y 1000 registrados, estamos buscando el ampliar nuestro equipo técnico.

 

Descripción del puesto:

Dependiendo del CTO, serás responsable de desarrollo de la plataforma social Talentous.

Queda mucho por hacer, por lo que podrás especializarte y aportar en lo que más te guste. ;-D

Tus labores tendrán parte de arquitecto, parte de desarrollador y parte de jefe de equipo.

Va a ser una gran aventura.

 

Experiencia deseada:

La plataforma Talentous está desarrollada con tecnologías Microsoft y alojada en Windows Azure y SQL Azure, por lo que el perfil deseable sería unos tres años de experiencia en lo siguiente:

Altos conocimientos en orientación a objetos.

Conocimientos de Visual C# y Microsoft .NET

Conocimientos en desarrollo web: ASP.NET MVC + Razor HTML5 + CSS + JavaScript

Conocimiento de Entity Framework y SQL Server.

Manejo de Microsoft Visual Studio 2010

Manejo de Microsoft Team Foundation Server (TFS online)

Creer que los tests de unidad pueden salvarte la vida 🙂

Deseables conocimientos de Windows Azure Platform y SQL Azure.

Deseables conocimientos de metodología ágil SCRUM.

 

Competencias buscadas:

Haz nuestro test de talento y déjate valorar por otros profesionales para mostrarnos tu marca personal. Eso dirá mucho a tu favor 😉

Algunas de las competencias que encajan con el puesto:

Trabajo en equipo, Liderazgo, Entusiasmo, Persistencia, Adaptabilidad al cambio, Flexibilidad.

Remuneración:

Pregúntanos. ¡Tienes más que ganar que qué perder!

 

Si crees que puedes encajar y tienes un espíritu emprendedor, apasionado e involucrado, envíame un correo a vicente.garcia@talentous.com con la dirección de tu perfil de talento Smile

Muchas gracias por tu tiempo y tu apoyo Smile

ASP.NET MVC, SEO y diferentes idiomas

Un valor muy importante de nuestras webs públicas es su posicionamiento en los motores de búsqueda. Si a ello le añadimos que debemos de soportar múltiples idiomas y que queremos aparecer bien posicionados en las búsquedas en diferentes lenguajes de los buscadores, el tema se puede poner bastante divertido.

Hay que tener en cuenta que los buscadores van a realizar su indexación sin especificar una culture en su petición, por lo que las técnicas de obtener la culture del usuario a través de la petición o de una cookie o similar no van a funcionar.

Otro aspecto a tener en cuenta es que los buscadores solo indexarán un idioma por url. ¿Esto qué quiere decir? Si, por ejemplo, tenemos la url http://myshop.com y dependiendo de la culture de la petición vamos a mostrar la página en un idioma u otro, el bot del buscador solo indexará la url para un idioma, que será el que tengamos configurado por defecto, para esa url.

Si queremos tener nuestra web correctamente indexada para inglés, español y alemán debemos tener algo similar a esto:

http://myshop.com/es

http://myshop.com/de

http://myshop.com/en

Así incluso podremos facilitarle al buscador un sitemap.xml con estas url para su indexación en varios idiomas.

¿Dónde entra ASP.NET MVC en todo esto? Pues si hemos desarrollado nuestra web con esta tecnología, podemos contar con la ventaja del sistema de enrutamiento. Registrando la siguiente ruta:

routes.MapRoute("Default",
                "{culture}/{controller}/{action}/{id}",
                 new { 
                      controller = "Home", 
                      action = "Index", 
                      id = UrlParameter.Optional, 
                      culture = "en" }  
                 );
Y teniendo un controlador base similar a este:
public class BaseController : Controller
{        
   public string CurrentLanguage { get; set; }         
   protected override void OnActionExecuting(ActionExecutingContext filterContext)
   {
             if (filterContext.RouteData.Values["culture"] != null)
             {                 
                 string culture = filterContext.RouteData.Values["culture"].ToString().ToLower();
                 if (culture == "es" || culture == "en" || culture == "de")
                 {                     
                     CurrentLanguage = culture;                     
                     Thread.CurrentThread.CurrentCulture 
                                                = CultureInfo.CreateSpecificCulture(CurrentLanguage);
                     Thread.CurrentThread.CurrentUICulture 
                                                = CultureInfo.CreateSpecificCulture(CurrentLanguage);
                 }             
              }             
     base.OnActionExecuting(filterContext);         
    }     
}
Podremos redigir automáticamente a nuestras vistas con la cultura adecuada.
Para cargar una u otra vista, dependiendo de su idioma hay múltiples técnicas, hay programadores que prefieren utilizar las mismas 
vistas y cargar diferentes ficheros de recursos y hay otros que prefieren tener diferentes vistas en cada uno de los idiomas. 
Yo prefiero una mezcla de las dos soluciones:
- Me gusta tener las cadenas en un fichero de recursos porque se pueden localizar y traducir más facilmente. Además, se pueden especificar las etiquetas lang, meta description y meta keywords para una mejor indexación por parte del bot del buscador.
- Y me gusta tener diferentes vistas por idioma porque, dependiendo del idioma utilizado, las cadenas de texto pueden ocupar una u otra longitud, por lo que, por cuestiones de diseño,
esta opción puede ser interesante.

Seguridad en .NET 4

Uno de los aspectos del framework que ha cambiado de manera más radical es su modelo de seguridad. En la versión .NET 4 se ha dejado obsoleto al CAS policy.

CAS policy es una tecnología potente que permitía la aplicación de permisos de una manera muy detallada, pero demasiado engorrosa, ya que ni siquiera se pueden aplicar políticas para varias versiones del framework, etc.

Con la salida de .NET 4, Microsoft decidió cambiar la manera de hacer las cosas y trasladó la responsabilidad de la seguridad del runtime al sistema operativo, sustituyendo así las políticas a nivel de máquina y trantando de igual manera a ensamblados manejados y ensamblados nativos.

Muchos de nosotros nos habremos encontrado con la necesidad de migrar código de versiones anteriores a la nueva versión del framework y hemos tenido que hacer uso de:

<NetFx40_LegacySecurityPolicy enabled=»true» />

para habilitar la compatibilidad con CAS policy de nuestros nuevos ensamblados.

 

Para facilitar la creación de entornos sandbox, hemos pasado de la farragosa vía que CAS policy ofrecía a una manera simple y directa, con dos niveles: Partial Trust y Full Trust. Ahorrándonos la evaluación de evidencias, utilizadas ahora como meros contenedores de información.

 

El mecanismo que garantiza este comportamiento ya fue introducido en el framework .NET 2.0 y se llama Security Transparency, solo que esta primera versión era principalmente utilizada como herramienta de autidoría. En esta segunda versión incluida en .NET 4 es la herramienta que separa el código seguro de ejecutar del que no lo es.

Separa al código en tres categorías: Transparent, Safe Critical y Critical. Robando una imagen de la MSDN, sería algo así:

securitytransparencymodel

Donde las fechas verdes representan llamadas válidas y las rojas llamadas inválidas.

 

Un atributo que hemos visto en la nueva versión del framework y que puede decorar nuestros ensamblados es AllowPartiallyTrustedCallers, informando de que ese ensamblado expone cierta funcionalidad sensible en terminos de seguridad a ensamblados Partial Trust.

Para evitar que cualquier ensamblado Partial Trust pueda llamar a esa funcionalidad, se ha introducido un condicionante que, a través de una lista de hosts, hace visible esa funcionalidad solo para los nombres de esa lista.