Les recuerdo que todos los Viernes últimos de cada mes tenemos las reuniones de la Comunidad de Usuarios de .NET del Distrito Federal en el piso 35 del World Trade Center.
La siguiente es el próximo Viernes 28 de Julio. Vamos a tener muchas platicas interesantes. Recuerden que no tiene costo y que no les tratamos de vender nada.
En esta ocasión voy a dar una plática de Windows Workflow Foundation.
Los esperamos.
7.18.2006
Introducción al .NET Framework 3.0
El Microsoft .NET Framework 3.0 (antes WinFX) es una plataforma completa de desarrollo que incluye importantes avances en tres áreas que impactan directamente nuestra productividad como desarrolladores:
1. Componentes comunes nuevos para desarrollar la capa de presentación (normalmente la interfaz de usuario) de nuestra aplicación que permite la construcción de experiencias interactivas mucho más atractivas y fáciles de usar. A esta parte de la plataforma Microsoft le llama Windows Presentation Foundation. También se conoce como WPF.
2. Un conjunto de elementos que facilitan enormemente el desarrollo de sistemas distribuidos e interconectados. Estos elementos van más allá de los servicios web para facilitar la comunicación entre desarrolladores. A esta parte de la plataforma Microsoft le llama Windows Communications Foundation. También se conoce como WCF.
3. Servicios de plataforma para sostener el desarrollo acelerado de aplicaciones con elementos de flujo de trabajo. Estos servicios administran el flujo de información para un proceso de trabajo sin imponer ninguna condición sobre los requerimientos de negocio de este. A esta parte de la plataforma Microsoft le llama Windows Workflow Foundation. También se conoce como WWF.
En los próximos meses estaré participando en el desarrollo de una aplicación sobre esta plataforma y voy a estar bloggeando (me comprometo una vez a la semana) sobre este tema.
Si quieren ir experimentando junto conmigo les recomiendo instalar:
· Windows Vista Beta 2.
· Los componentes de ejecución de WinFX Beta 2.
· Visual Studio 2005
· El SDK del WinFX Beta 2
· Las herramientas de desarrollo “Orcas” para WPF Beta 2.
· Las herramientas de desarrollo “Orcas” para WWF Beta 2.
· SQL Server 2005 Express Edition SP1
Nos estamos comunicando por aquí....
1. Componentes comunes nuevos para desarrollar la capa de presentación (normalmente la interfaz de usuario) de nuestra aplicación que permite la construcción de experiencias interactivas mucho más atractivas y fáciles de usar. A esta parte de la plataforma Microsoft le llama Windows Presentation Foundation. También se conoce como WPF.
2. Un conjunto de elementos que facilitan enormemente el desarrollo de sistemas distribuidos e interconectados. Estos elementos van más allá de los servicios web para facilitar la comunicación entre desarrolladores. A esta parte de la plataforma Microsoft le llama Windows Communications Foundation. También se conoce como WCF.
3. Servicios de plataforma para sostener el desarrollo acelerado de aplicaciones con elementos de flujo de trabajo. Estos servicios administran el flujo de información para un proceso de trabajo sin imponer ninguna condición sobre los requerimientos de negocio de este. A esta parte de la plataforma Microsoft le llama Windows Workflow Foundation. También se conoce como WWF.
En los próximos meses estaré participando en el desarrollo de una aplicación sobre esta plataforma y voy a estar bloggeando (me comprometo una vez a la semana) sobre este tema.
Si quieren ir experimentando junto conmigo les recomiendo instalar:
· Windows Vista Beta 2.
· Los componentes de ejecución de WinFX Beta 2.
· Visual Studio 2005
· El SDK del WinFX Beta 2
· Las herramientas de desarrollo “Orcas” para WPF Beta 2.
· Las herramientas de desarrollo “Orcas” para WWF Beta 2.
· SQL Server 2005 Express Edition SP1
Nos estamos comunicando por aquí....
5.25.2006
Impresiones Iniciales de Windows Vista Beta 2
Bueno, ayer estuve hasta las 4 a.m. instalando el Beta 2 de Windows Vista. Lo veo mucho mejor que la versión anterior que había probado (el CTP de Febrero).
- Este ya lo pude instalar en mi Dell XPS600 con RAID 0 (NVIDIA ya sacó los drivers necesarios).
- El performance es mucho mejor.
- La interfaz se ve mucho más acabada.
- El sidebar funciona bien y trae más gadgets.
- La instalación es más rápida (ayer instalé en una partición limpia).
También instalé el Beta 2 de Office 2007 pero he jugado poco con el. El Outlook al menos jaló bien. Lo demás no lo he visto, pero de un primer vistazo a Excel veo que no me va a ser tan fácil acostumbrarme a la nueva interfaz.
Me gustó tanto que hoy decidí hacer un respaldo de mi partición de Windows XP e intentar instalar Vista sobre XP. En este momento está aparentemente detenido en Gathering Files (99%) pero no se ha caído, así que le voy a tener paciencia un rato más.
- Este ya lo pude instalar en mi Dell XPS600 con RAID 0 (NVIDIA ya sacó los drivers necesarios).
- El performance es mucho mejor.
- La interfaz se ve mucho más acabada.
- El sidebar funciona bien y trae más gadgets.
- La instalación es más rápida (ayer instalé en una partición limpia).
También instalé el Beta 2 de Office 2007 pero he jugado poco con el. El Outlook al menos jaló bien. Lo demás no lo he visto, pero de un primer vistazo a Excel veo que no me va a ser tan fácil acostumbrarme a la nueva interfaz.
Me gustó tanto que hoy decidí hacer un respaldo de mi partición de Windows XP e intentar instalar Vista sobre XP. En este momento está aparentemente detenido en Gathering Files (99%) pero no se ha caído, así que le voy a tener paciencia un rato más.
Aventuras en un Framework de Seguridad en .NET (3)
En esta ocasión vamos a hablar del método Authorize (tomado del Microsoft Enterprise Library 2.o) y de los ajustes que son necesarios para llevar la funcionalidad de nuestro UserControl al .NET Compact Framework para soportar dispositivos móviles.
El método Authorize es el siguiente:
///
/// Evaluates the specified authority against the specified context.
///
/// Must be an object.
/// The name of the rule to evaluate.
///true if the expression evaluates to true,
/// otherwisefalse .
private bool Authorize(IPrincipal principal, string c, out Behavior b, out bool Evaluated)
{
Evaluated = false;
if (principal == null) throw new ArgumentNullException("principal");
if (c == null ) throw new ArgumentNullException("Control");
BooleanExpression booleanExpression = GetParsedControlExpression(m_strFormName,
c, out b, out Evaluated);
if (booleanExpression == null)
{
Evaluated = false;
return true;
}
bool result = booleanExpression.Evaluate(principal);
return result;
}
La clave aquí es la llamada a booleanExpression.Evaluate(principal) que es un muy útil evaluador de expresiones que viene incluído en el Enterprise Library 2.0. Esta función utiliza el método IsInRole del Principal para evaluar la expresión conforme a las reglas que se le pasan en la cadena c.
Otro aspecto que buscamos en esta librería, es que se pueda utilizar también en el .NET Compact Framework 2.0.
Para esto, la estrategia tiene algunos cambios con respecto al control de escritorio. Los principales son:
1. La evaluación de las expresiones no la hace el dispositivo móvil, sino un servidor a través de un servicio web. esto se debe a que en el caso de un dispositivo móvil, debemos de ser cuidadosos con el consumo de recursos o el desempeño de nuestra aplicación podría verse severamente afectado.
2. Los metodos que nos permiten utilizar reflection para ver que función nos está llamando en AuthorizeMethod no existen en el Compact Framework, por lo que necesitamos pasar explícitamente el nombre del método.
El método Authorize es el siguiente:
///
/// Evaluates the specified authority against the specified context.
///
/// Must be an
/// The name of the rule to evaluate.
///
/// otherwise
private bool Authorize(IPrincipal principal, string c, out Behavior b, out bool Evaluated)
{
Evaluated = false;
if (principal == null) throw new ArgumentNullException("principal");
if (c == null ) throw new ArgumentNullException("Control");
BooleanExpression booleanExpression = GetParsedControlExpression(m_strFormName,
c, out b, out Evaluated);
if (booleanExpression == null)
{
Evaluated = false;
return true;
}
bool result = booleanExpression.Evaluate(principal);
return result;
}
La clave aquí es la llamada a booleanExpression.Evaluate(principal) que es un muy útil evaluador de expresiones que viene incluído en el Enterprise Library 2.0. Esta función utiliza el método IsInRole del Principal para evaluar la expresión conforme a las reglas que se le pasan en la cadena c.
Otro aspecto que buscamos en esta librería, es que se pueda utilizar también en el .NET Compact Framework 2.0.
Para esto, la estrategia tiene algunos cambios con respecto al control de escritorio. Los principales son:
1. La evaluación de las expresiones no la hace el dispositivo móvil, sino un servidor a través de un servicio web. esto se debe a que en el caso de un dispositivo móvil, debemos de ser cuidadosos con el consumo de recursos o el desempeño de nuestra aplicación podría verse severamente afectado.
2. Los metodos que nos permiten utilizar reflection para ver que función nos está llamando en AuthorizeMethod no existen en el Compact Framework, por lo que necesitamos pasar explícitamente el nombre del método.
5.03.2006
Aventuras en un Framework de Seguridad en .NET (2)
En esta ocasión voy a analizar algunos elementos que se requieren para satisfacer los puntos 1 y 2 de mis requerimientos planteados anteriormente.
Recordemos brevemente:
1. Que los programadores puedan implementar la seguridad sin programar.
2. Que podamos hacer visibles/invisibles o habilitados/deshabilitados elementos de la IU de manera totalmente declarativa, ya sea en una BD o en XML.
Para satisfacer el punto 1, podemos desarrollar un control gráfico, que simplemente se arrastre con drag and drop a cada forma del proyecto en la que se desea tener seguridad (aquí estamos hablando de Windows Forms).
Mi primera intención fue crear un componente no gráfico (heredando de System.Windows.Forms.Component) ya que este implementador de seguridad no requiere de una interfaz gráfica para si mismo. Sin embargo, me enfrenté a la dificultad de que un componente de este tipo no puede determinar en tiempo de ejecución a que forma pertenece. Existen algunos trucos para determinar esto en tiempo de diseño pero no me gustaron ya que quedaría una solución frágil ante renombramientos y cambios de ese tipo.
Por lo tanto opté por desarrollar un control (heredando de System.Windows.Forms.UserControl) que se vuelve invisible en tiempo de ejecución. No tan elegante como quisiera pero funcional. Se parece al viejo timer de VB6, ¿se acuerdan?
Para que este control pueda encargarse de configurar la interfaz en tiempo de ejecución, necesita analizar al correr todos los elementos gráficos de la forma e ir encendiendo/apagando/habilitando/deshabilitando los elementos de la IU conforme a las reglas de seguridad declaradas. Sin embargo, no es suficiente con hacer esto al cargar la forma. ¿Qué pasa si el código del programador enciende o habilita programáticamente un control que no debería para el usuario firmado? Por esta razón es necesario también establecer manejadores de los eventos OnEnabledChanged y OnVisibleChanged de los controles bloqueados para poder levantar una excepción de seguridad en caso necesario.
El código que itera sobre los controles se ve más o menos así:
private void AuthorizeControls( Control main)
{
IPrincipal iprin = Thread.CurrentPrincipal;
Behavior b;
bool bEvaluated = false;
foreach (Control c in main.Controls)
{
if (c.Controls.Count > 0)
AuthorizeControls(c);
if (!Authorize(iprin, c.Name, out b, out bEvaluated))
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
}
}
else
{
if (bEvaluated)
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
}
}
}
}
}
void c_VisibleChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}
void c_EnabledChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}
Este código está un poco simplificado. Para completarlo hay que contemplar la posibilidad de manejar controles que viven dentro de objetos ToolStrip. Desafortunadamente estos contenedores no tienen a sus controles "hijos" en una colección Controls sino en Items por lo que hay que considerar esa diferencia también.
En la siguiente actualización voy a hablar de como se autorizan los controles (como funciona el método Authorize.
Recordemos brevemente:
1. Que los programadores puedan implementar la seguridad sin programar.
2. Que podamos hacer visibles/invisibles o habilitados/deshabilitados elementos de la IU de manera totalmente declarativa, ya sea en una BD o en XML.
Para satisfacer el punto 1, podemos desarrollar un control gráfico, que simplemente se arrastre con drag and drop a cada forma del proyecto en la que se desea tener seguridad (aquí estamos hablando de Windows Forms).
Mi primera intención fue crear un componente no gráfico (heredando de System.Windows.Forms.Component) ya que este implementador de seguridad no requiere de una interfaz gráfica para si mismo. Sin embargo, me enfrenté a la dificultad de que un componente de este tipo no puede determinar en tiempo de ejecución a que forma pertenece. Existen algunos trucos para determinar esto en tiempo de diseño pero no me gustaron ya que quedaría una solución frágil ante renombramientos y cambios de ese tipo.
Por lo tanto opté por desarrollar un control (heredando de System.Windows.Forms.UserControl) que se vuelve invisible en tiempo de ejecución. No tan elegante como quisiera pero funcional. Se parece al viejo timer de VB6, ¿se acuerdan?
Para que este control pueda encargarse de configurar la interfaz en tiempo de ejecución, necesita analizar al correr todos los elementos gráficos de la forma e ir encendiendo/apagando/habilitando/deshabilitando los elementos de la IU conforme a las reglas de seguridad declaradas. Sin embargo, no es suficiente con hacer esto al cargar la forma. ¿Qué pasa si el código del programador enciende o habilita programáticamente un control que no debería para el usuario firmado? Por esta razón es necesario también establecer manejadores de los eventos OnEnabledChanged y OnVisibleChanged de los controles bloqueados para poder levantar una excepción de seguridad en caso necesario.
El código que itera sobre los controles se ve más o menos así:
private void AuthorizeControls( Control main)
{
IPrincipal iprin = Thread.CurrentPrincipal;
Behavior b;
bool bEvaluated = false;
foreach (Control c in main.Controls)
{
if (c.Controls.Count > 0)
AuthorizeControls(c);
if (!Authorize(iprin, c.Name, out b, out bEvaluated))
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
}
}
else
{
if (bEvaluated)
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
}
}
}
}
}
void c_VisibleChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}
void c_EnabledChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}
Este código está un poco simplificado. Para completarlo hay que contemplar la posibilidad de manejar controles que viven dentro de objetos ToolStrip. Desafortunadamente estos contenedores no tienen a sus controles "hijos" en una colección Controls sino en Items por lo que hay que considerar esa diferencia también.
En la siguiente actualización voy a hablar de como se autorizan los controles (como funciona el método Authorize.
4.21.2006
Aventuras en un Framework de Seguridad en .NET (1)
He estado trabajando recientemente en crear un framework simple pero universal para poder manejar la autorización y los perfiles en nuestros proyectos de Windows Forms. Lo que quiero lograr es:
1. Que los programadores puedan implementar la seguridad sin programar.
2. Que podamos hacer visibles/invisibles o habilitados/deshabilitados elementos de la IU de una manera totalmente declarativa, ya sea en una BD o en XML.
3. Que esto funcione también en el .NET Compact Framework (v 2.0)
4. Que me pueda integrar a distintos proveedores de autentificación y membresía como los de ASP.NET 2.0 o el ActiveDirectory.
5. Que podamos validar si un método o proceso está autorizado para ejecutarse.
6. Que tengamos reglas simples con excpresiones de autorización.
Ya tengo bastante avance sobre este tema. Antes de empezar, evalué el Enterprise Library de Microsoft. Me pareció demasiado complejo, por lo que tomé algunas ideas de allí para hacer algo más simple. En particular, me gustó mucho el evaluador de expresiones booleanas que tiene para definir autorización. Sin embargo, no me gusta que todo el profiling se tiene que seguir haciendo en código. Quiero algo declarativo.
Lo que tengo listo hasta ahora es:
1. Un control gráfico que con hacer drag and drop en una forma se encarga de habilitar/deshabilitar cualquier control mediante reflection con base en las reglas declaradas para el usuario firmado.
2. La posibilidad de autorizar un método con una sóla función (AuthorizeMethod).
3. Flexibilidad para operar con el Membershipprovider de ASP.NET 2.0 o con Active Directory.
4. Ya funciona en Compact Framework.
1. Que los programadores puedan implementar la seguridad sin programar.
2. Que podamos hacer visibles/invisibles o habilitados/deshabilitados elementos de la IU de una manera totalmente declarativa, ya sea en una BD o en XML.
3. Que esto funcione también en el .NET Compact Framework (v 2.0)
4. Que me pueda integrar a distintos proveedores de autentificación y membresía como los de ASP.NET 2.0 o el ActiveDirectory.
5. Que podamos validar si un método o proceso está autorizado para ejecutarse.
6. Que tengamos reglas simples con excpresiones de autorización.
Ya tengo bastante avance sobre este tema. Antes de empezar, evalué el Enterprise Library de Microsoft. Me pareció demasiado complejo, por lo que tomé algunas ideas de allí para hacer algo más simple. En particular, me gustó mucho el evaluador de expresiones booleanas que tiene para definir autorización. Sin embargo, no me gusta que todo el profiling se tiene que seguir haciendo en código. Quiero algo declarativo.
Lo que tengo listo hasta ahora es:
1. Un control gráfico que con hacer drag and drop en una forma se encarga de habilitar/deshabilitar cualquier control mediante reflection con base en las reglas declaradas para el usuario firmado.
2. La posibilidad de autorizar un método con una sóla función (AuthorizeMethod).
3. Flexibilidad para operar con el Membershipprovider de ASP.NET 2.0 o con Active Directory.
4. Ya funciona en Compact Framework.
4.04.2006
Primera Reunión de la Comunidad de Usuarios de .NET de México D.F. en el 2006
Tuvimos nuestra primera reunión de la comunidad de usuarios de .NET en el World Trade Center de la Ciudad de México este pasado Viernes 31.
Estoy muy satisfechos con los resultados de la reunión. Además de las pláticas técnicas creo que sentamos las bases de una buena participación de los miembros de la comunidad.
Nos vamos a reunir el último Viernes de cada mes en el mismo lugar.
Me interesa mucho tu retroalimentación.
¿Que opinas de la reunión?
¿Qué te gustaría ver en reuniones futuras?
¿Te gustaría hablar de algún tema?
Estoy muy satisfechos con los resultados de la reunión. Además de las pláticas técnicas creo que sentamos las bases de una buena participación de los miembros de la comunidad.
Nos vamos a reunir el último Viernes de cada mes en el mismo lugar.
Me interesa mucho tu retroalimentación.
¿Que opinas de la reunión?
¿Qué te gustaría ver en reuniones futuras?
¿Te gustaría hablar de algún tema?
3.22.2006
Impresiones de Mix06
Esta semana tuve oportunidad de asistir a Las Vegas a Mix06, evento organizado por Microsoft dirigido principalmente a desarrolladores web, diseñadores, y tomadores de decisiones del mundo online.
En orden de más a menos, estos son los temas que me perecieron más interesantes:
1. ASP.NET Atlas
Atlas es un marco para desarrollar rápidamente aplicaciones con el modelo AJAX. Esta tecnología ya tiene una licencia GoLive! para usarse en sitios públicos. Me parece de aplicabilidad inmediata para mejorar la interactividad y respuesta de sitios web.
2. WPF
Windows Presentation Foundation es un nuevo motor para definición y presentación de la capa de interfaz de usuario en aplicaciones. WPF simplemente va a modificar dramáticamente las expectativas de los usuarios de aplicaciones tradicionales (Smart Client). La interfaz se puede definir en código tradicional o en un nuevo lenguaje declarativo llamado XAML. La introducción de este lenguaje declarativo facilita enormemente la cooperación entre diseñadores y desarrolladores en un proyecto de smart client. WPF en mi opinión va a revolucionar la facilidad de uso de nuestras aplicaciones. También creo que un conocimiento temprano de WPF puede ser un factor diferenciador muy importante cuando todo mundo continua haciendo aplicaciones basadas en formas.
3. WPF/E
Este es un subconjunto de WPF (la /E significa "Everywhere") para multiplataforma. Esta tecnología, aunque interesante, me parece que no es muy relevante por ahora ya que se liberará hasta principios (¿mediados?) de 2007. Para sitios públicos creo que va a ser difícil y va a tomar mucho tiempo para que se utilice esta tecnología en lugar de Flash por ejemplo.
Se presentaron algunas otras cosas interesantes como el Expression Intercative Designer con el cual diseñadores pueden crear interfases y contenido para WPF de una manera muy simple y poderosa. También son atractivos el API de Windows Media Center de Vista y los servicios de Windows Live.
En orden de más a menos, estos son los temas que me perecieron más interesantes:
1. ASP.NET Atlas
Atlas es un marco para desarrollar rápidamente aplicaciones con el modelo AJAX. Esta tecnología ya tiene una licencia GoLive! para usarse en sitios públicos. Me parece de aplicabilidad inmediata para mejorar la interactividad y respuesta de sitios web.
2. WPF
Windows Presentation Foundation es un nuevo motor para definición y presentación de la capa de interfaz de usuario en aplicaciones. WPF simplemente va a modificar dramáticamente las expectativas de los usuarios de aplicaciones tradicionales (Smart Client). La interfaz se puede definir en código tradicional o en un nuevo lenguaje declarativo llamado XAML. La introducción de este lenguaje declarativo facilita enormemente la cooperación entre diseñadores y desarrolladores en un proyecto de smart client. WPF en mi opinión va a revolucionar la facilidad de uso de nuestras aplicaciones. También creo que un conocimiento temprano de WPF puede ser un factor diferenciador muy importante cuando todo mundo continua haciendo aplicaciones basadas en formas.
3. WPF/E
Este es un subconjunto de WPF (la /E significa "Everywhere") para multiplataforma. Esta tecnología, aunque interesante, me parece que no es muy relevante por ahora ya que se liberará hasta principios (¿mediados?) de 2007. Para sitios públicos creo que va a ser difícil y va a tomar mucho tiempo para que se utilice esta tecnología en lugar de Flash por ejemplo.
Se presentaron algunas otras cosas interesantes como el Expression Intercative Designer con el cual diseñadores pueden crear interfases y contenido para WPF de una manera muy simple y poderosa. También son atractivos el API de Windows Media Center de Vista y los servicios de Windows Live.
2.27.2006
Reflexiones sobre Mis Viajes a Taiwán
En los últimos dos años he tenido oportunidad de viajar varias veces a Taiwán, siendo la más reciente apenas la semana pasada. Como Mexicano en cada viaje tengo una buena oportunidad para comparar un poco nuestra sociedad con la Taiwanesa.
Taiwán es muy diferente a México. Es un país donde el ingreso per capita es el doble que en México y el porcentaje de población que vive por debajo de la línea de pobreza es menor al 1%. Las diferencias en el nivel de ingreso son mucho menos marcadas que en México y el nivel de educación promedio es mucho mayor. La población en su mayoría es étnicamente china, de los Chinos que perdieron en la revolución comunista de la China continental.
Viniendo acá parece que salieron ganando con lo que han logrado hacer en esta isla. Este es un país que en los sesentas soñaba con alcanzar el nivel de desarrollo que México tenía en ese momento. Apostaron al futuro (a la industria de las tecnologías de información) y tomaron las medidas necesarias para convertirse en uno de los “tigres asiáticos” y hoy prácticamente son ya una economía desarrollada.
En mi experiencia tratar con un Taiwanés es siempre agradable, independientemente de si es para temas de negocios o simple amistad. He hecho un par de buenos amigos aquí. Siempre son amables y tienen muestran una humildad muy particular. Eso sí, trabajan como locos, toman muy pocas vacaciones y muestran una tenacidad pertinaz para todo lo que sea negocio. Una experiencia que me impactó fue conocer a un tipo dueño de una empresa de tecnología de buen tamaño que me presumía de cómo en 20 años sólo había tomado tres días de vacaciones y tenía una casa de 5 millones de dólares (¿para que puede alguien querer una casa de ese precio si nunca toma vacaciones?).
El éxito económico de Taiwán es innegable. Aún así, como Mexicano relativamente afortunado que soy de vivir con bastante comodidad (y que toma mucho más vacaciones), al hacer una comparación entre nuestras sociedades prefiero evitar saltar a la tan mentada conclusión sobre como tenemos que aprender de los tigres asiáticos. En ciertos aspectos sin duda habrá mucho que aprender, pero ¿hay que vivir para trabajar o trabajar para vivir?
Taiwán es muy diferente a México. Es un país donde el ingreso per capita es el doble que en México y el porcentaje de población que vive por debajo de la línea de pobreza es menor al 1%. Las diferencias en el nivel de ingreso son mucho menos marcadas que en México y el nivel de educación promedio es mucho mayor. La población en su mayoría es étnicamente china, de los Chinos que perdieron en la revolución comunista de la China continental.
Viniendo acá parece que salieron ganando con lo que han logrado hacer en esta isla. Este es un país que en los sesentas soñaba con alcanzar el nivel de desarrollo que México tenía en ese momento. Apostaron al futuro (a la industria de las tecnologías de información) y tomaron las medidas necesarias para convertirse en uno de los “tigres asiáticos” y hoy prácticamente son ya una economía desarrollada.
En mi experiencia tratar con un Taiwanés es siempre agradable, independientemente de si es para temas de negocios o simple amistad. He hecho un par de buenos amigos aquí. Siempre son amables y tienen muestran una humildad muy particular. Eso sí, trabajan como locos, toman muy pocas vacaciones y muestran una tenacidad pertinaz para todo lo que sea negocio. Una experiencia que me impactó fue conocer a un tipo dueño de una empresa de tecnología de buen tamaño que me presumía de cómo en 20 años sólo había tomado tres días de vacaciones y tenía una casa de 5 millones de dólares (¿para que puede alguien querer una casa de ese precio si nunca toma vacaciones?).
El éxito económico de Taiwán es innegable. Aún así, como Mexicano relativamente afortunado que soy de vivir con bastante comodidad (y que toma mucho más vacaciones), al hacer una comparación entre nuestras sociedades prefiero evitar saltar a la tan mentada conclusión sobre como tenemos que aprender de los tigres asiáticos. En ciertos aspectos sin duda habrá mucho que aprender, pero ¿hay que vivir para trabajar o trabajar para vivir?
2.16.2006
Seguridad en Nuestros Desarrollos
La seguridad es un tema que debe interesarnos como programadores profesionales. Basta con leer los titulares cualquier día en un sitio de tecnología (como http://www.news.com/) para darse cuenta de la gravedad del problema.
La realidad es que la mayor parte de los problemas de seguridad pueden evitarse con adecuadas técnicas de programación e incorporando la seguridad como un requerimiento de diseño en nuestros proyectos.
El día de hoy tuve la oportunidad de ofrecer un par de talleres dentro del evento WebSec. El primero sobre desarrollo seguro con C++ y C# y el segundo sobre desarrollo seguro con .NET. Las láminas de las presentaciones de estas pláticas están disponibles aquí y aquí en el sitio de emLink, empresa donde trabajo.
¿Ustedes qué opinan? ¿Por qué nos es tan difícil como programadores poner atención al asunto de la seguridad en nuestros desarrollos?
La realidad es que la mayor parte de los problemas de seguridad pueden evitarse con adecuadas técnicas de programación e incorporando la seguridad como un requerimiento de diseño en nuestros proyectos.
El día de hoy tuve la oportunidad de ofrecer un par de talleres dentro del evento WebSec. El primero sobre desarrollo seguro con C++ y C# y el segundo sobre desarrollo seguro con .NET. Las láminas de las presentaciones de estas pláticas están disponibles aquí y aquí en el sitio de emLink, empresa donde trabajo.
¿Ustedes qué opinan? ¿Por qué nos es tan difícil como programadores poner atención al asunto de la seguridad en nuestros desarrollos?
Suscribirse a:
Entradas (Atom)