miércoles, 29 de diciembre de 2010

Crear un componente (control) Font ComboBox personalizado

Para este post me apoyo en la documentación oficial de CSharp correspondiente a la creación de componentes y controles personalizados.

Lo primero que haremos sera agregar una nueva clase a nuestro proyecto en CSharp con el nombre FontComboBox y heredamos de la clase ComboBox lo siguiente por hacer es rellenar el control con el listado de fuentes del sistema.

Código

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.ComponentModel;

namespace CustomControl
{
internal class FontComboBox : ComboBox
{

Pen p = new Pen(Color.Black);
StringFormat sf = new StringFormat();
Font f = new Font("Arial", 8);

internal FontComboBox()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
sf.Trimming = StringTrimming.None;
sf.FormatFlags = StringFormatFlags.NoWrap;
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
ListFonts();
this.DropDownHeight = 300;
this.Font = new Font(this.Font.Name, 12);
this.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.AutoCompleteSource = AutoCompleteSource.ListItems;
this.MaxDropDownItems = 20;
}

protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);

try
{
FontFamily ff = new FontFamily(this.Items[e.Index].ToString());

if (ff.IsStyleAvailable(FontStyle.Regular) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Regular);
}
else if (ff.IsStyleAvailable(FontStyle.Italic) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Italic);
}
else if (ff.IsStyleAvailable(FontStyle.Bold) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
else
{
f = new Font("Microsoft Sans Serif", this.Font.Size, FontStyle.Regular);
}
}
catch (Exception)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
p = new Pen(this.ForeColor);

e.DrawBackground();

e.Graphics.DrawString(this.Items[e.Index].ToString(), f, p.Brush, e.Bounds);

if (e.State == DrawItemState.Focus)
e.DrawFocusRectangle();

//Liberamos la memoria
p.Dispose();
f.Dispose();
}

private void ListFonts()
{
this.Items.Clear();
System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection();
this.BeginUpdate();
foreach (FontFamily ff in ifc.Families)
{
this.Items.Add(ff.Name);
}

this.EndUpdate();
}

}
}



He agregado el código y un par de personalizaciones visible como auto-completado.

jueves, 16 de diciembre de 2010

QT DevDay disponible

el día de hoy me dado una pasada por el portal de QT, donde me encuentro con la novedad de que y a se encuentran disponible en video la primera tanda (parte) de videos elaborados por el equipo de aprendizaje de qt en la presentaciones DevDay de este año, ademas están disponible para descarga las diapositivas utilizadas durante las exposiciones.

aqui les dejo el enlace a los detalles de esta recopilación, lo cual es algo que me parece excelente.


martes, 14 de diciembre de 2010

Convertir .p12 a .pem

ya algunos compañeros y uno que otro forero me había preguntado antes ¿Como convierto un fichero .p12 a .pem? creo esto ya seria un post para mi blog.

Un fichero .P12 contiene toda la información que compone un certiricado digital x.509 basado en PKCS #12 el cual puede ser utilizado para firmar documentos digitales, mensajes soap entre otros.

es bueno utilizar openssl para trabajar con ficheros .p12 (certificados en general), en el link podras encontrar la documentación correspondiente a openssl y su forma de uso.

luego de descargar e instalar openssl podemos convertir nuestro .P12 a .PEM asi:

openssl pkcs12 -clcerts -nokeys -in certificado.p12 -out nuevoCertificado.pem
openssl pkcs12 -nocerts -in certificado.p12 -out nuevaKey.pem

como puedes es algo claro lo que se hace verdad? ahora el proceso invertido seria asi:

openssl pkcs12 -export -out certificado.p12 -inkey ./nuevaKey.pem -in ./nuevoCertificado.pem

Tambien podemos utilizar algunas herramientas para trabajar con archivos de certificados como: QuickPar, PGP Desktop, OpenPGP, XCA.

miércoles, 6 de octubre de 2010

Reporte Global de Competitividad

El Reporte Global de Competitividad (RGC) es una publicación anual del Programa de Competitividad Global del FEM que presenta una evaluación comparativa de las debilidades y fortalezas de las 104 economías del mundo para el año 2004 desde el punto de vista de su competitividad internacional. El RGC basa su análisis es dos enfoques diferentes pero complementarios en el análisis de la competitividad económica.

El primero, liderado por Jeffrey D. Sachs del Centro de Desarrollo Internacional de la Universidad de Harvard se basa en el concepto de competitividad global como «el conjunto de instituciones y políticas económicas que sirven de apoyo a la existencia de altas tasas de crecimiento económico en el mediano plazo». Las ediciones del RGC previas al año 2000 publicaban un índice general basado en este enfoque, conocido simplemente como el índice de competitividad. Desde el año 2000, este indicador fue renombrado como el Índice de Crecimiento de la Competitividad (ICC). Con base en fundamentos macroeconómicos teóricos y empíricos, el FEM calcula el ICC como la mejor estimación de las perspectivas de crecimiento durante los próximos cinco años para las 102 economías analizadas.

El segundo enfoque que se sigue en el RGC corresponde al liderado por Michael E. Porter del Instituto de Estrategia y Competitividad de la Escuela de Administración de la Universidad de Harvard, el cual es capturado por el Índice de Competitividad Actual (ICA), presentado en la edición 2000 pero que para el año 2003 es nombrado como Índice de Competitividad Empresarial (ICE). El ICE hace uso de indicadores microeconómicos para la medición del «conjunto de instituciones, estructuras de mercado y políticas económicas que sirven de base para el logro de altos niveles de prosperidad». Lo que se refiere principalmente a la efectiva utilización que hace la economía de su acervo actual de recursos. Así, este índice evalúa el potencial productivo actual de las mismas 102 economías analizadas. En conjunto, el ICC y el ICE presentan dos enfoques distintos pero complementarios con los que se exploran las fuentes de la competitividad nacional.

Tanto el ICC como el ICE combinan datos cuantitativos con datos cualitativos obtenidos de la aplicación de una encuesta de opinión diseñada para evaluar aspectos relacionados con la competitividad de un amplio grupo de países. De gran importancia para el cálculo de estos indicadores es la encuesta de opinión empresarial adelantada anualmente por el Foro Económico Mundial, la cual permite derivar datos sobre una buena cantidad de aspectos de la economía de un país para los que no existen datos cuantitativos, tales como la eficiencia de las instituciones de gobierno, la sofisticación de las redes de abastecimiento local, o la naturaleza de las prácticas competitivas.

Como gran novedad para este año, el reporte incluye un nuevo índice de competitividad: El Índice Global de Competitividad (IGC). Este se diseñó con el objeto de unificar los dos índices actualmente utilizados, y se prevé que sean remplazados eventualmente en el RGC.

La publicación del RGC tiene lugar cada año en el mes de octubre.

Con base en los resultados del Reporte Global de Competitividad se elabora anualmente para Colombia lo que se conoce como Matriz de Competitividad, (Archivo.zip)) (Para ver este archivo, debe descargarlo, primero, al disco duro).

Esta matriz fue desarrollada como un instrumento de recopilación y análisis de las variables que componen los factores de competitividad del FEM (tomando como el RGC 1999, año de lanzamiento de la Política Nacional de Productividad y Competitividad) con el objetivo de identificar sistemáticamente campos prioritarios de acción conjunta entre los sectores público y privado en el campo de la competitividad. De esta forma, la matriz se ha constituido en el instrumento que permite priorizar las acciones a desarrollar por las Redes Especializadas de la Red Colombia Compite

Usted puede consultar el documento de analisis elaborado por el Ministerio de Comercio Exterior, sobre la posición de Colombia en este estudio:

jueves, 13 de mayo de 2010

uff, ya tenia tiempo de no publicar entradas en mi blog, pues bien, me he enterado en una conversación sobre algo que suena muy interesante aun que en un principio no me lo creía, me he tomado la molestia de validar y efectivamente es asi, cuando sea en cortas distancias.

Nueva tecnología permitirá transmitir hasta 7 gigabit por segundo en redes inalámbricas; es decir, 10 veces más datos que el estándar actual.

La organización Wi-Fi Alliance ha suscrito un acuerdo de cooperación con Wigig Alliance para la integración de la tecnología Wigig en futuros productos WLAN.

Durante el fin de semana, Wigig presentó las primeras especificaciones oficiales para la versión 1.0 de la tecnología, que funciona en el área de los 60 Ghz. En comparación, las actuales redes WLAN funcionan en el tramo de 2,4 a 5 Ghz.

La alta frecuencia implica que la velocidad puede ser incrementada hasta 7 Gbps, velocidad 10 veces mayor a la alcanzada con una red inalámbrica 802.11n corriente.
Sin embargo, la alta velocidad solo es posible en un radio de 10 metros, informa Wigig.

Wigig 1.0 es totalmente compatible con MAC (Medium Access Control) en IEEE 802.11, por lo que no debería haber inconveniente para su inclusión en tecnologías Wi-Fi existentes.

Las futuras unidades certificadas para Wi-Fi estarán en condiciones de enviar y recibir en las tres frecuencias; 2,4 y 5 Ghz para redes inalámbricas convencionales y 60 Ghz para redes Wigig. Asimismo, los usuarios podrán alternar entre las redes sin interrumpir la conexión.

El reducido radio de alcance de las redes; es decir, 10 metros, hará que el formato sea óptimo para sustituir cables entre PC, monitores y otras unidades externas.

Los principales fabricantes de la industria TI, como Intel, Samsung, Dell, Nokia, Cisco y Microsoft ya se han incorporado a Wigig Alliance.

Fuente: Wi-Fi Alliance

sábado, 6 de marzo de 2010

Introducción al desarrollo de aplicaciones web con Mono.

Cuando oímos hablar de tecnologías libres relacionadas con las aplicaciones web, rara vez pensamos en Mono. Prueba de ello es que pocos proyectos de importancia se han implementado haciendo uso de la tecnología liderada por Miguel de Icaza. Al igual que la plataforma .NET de Microsoft, Mono además de permitir el desarrollo de aplicaciones de escritorio, es una excelente plataforma para el desarrollo de aplicaciones web. Le falta madurar un poco y una pequeña mejora en el rendimiento, pero es una opción valida a tener en cuenta y a lo largo de este artículo veremos algunas pasos para llevarlo a cabo.

pesar de los recelos que crea la plataforma Mono dentro de la comunidad libre, debido a ser una especie de “adaptación” de la tecnología .NET de Microsoft, creo que es una opción más a tener en cuenta. Desde su nacimiento hasta hoy en día, ha evolucionado fuertemente y ha llegado a ocupar un lugar importante en las aplicaciones de escritorio.
Prueba de ello es que Gnome incorpora aplicaciones desarrolladas con Mono en su entorno de escritorio. En la distribución más popular de todas para el escritorio, Ubuntu, podemos encontrarlo en programas como F-Spot, por poner sólo un ejemplo. Sin embargo, otros enfoques de Mono están poco explotados. Un caso claro de ello son las tecnologías web. 

Mono las soporta y para ello utiliza el lenguaje de programación de la familia .NET, ASP.NET. Apache, el servidor web más laureado del software libre, tiene soporte para Mono y podemos aspirar a desarrollar cualquier tipo de aplicación web con esta tecnología. Los problemas que tiene, al menos por ahora, son la falta de madurez y el rendimiento. Ya hemos dicho que todavía no es muy frecuente el uso de Mono en proyectos web populares, por lo que es posible que tenga todavía errores por pulir en despliegues de cierto tamaño. Otro punto a tener en cuenta es el rendimiento. Otros lenguajes interpretados, a mayor o menor nivel, como puedan ser PHP o JSP, están más maduros, depurados y ejecutan en menos tiempo.

Dejando de lado estos problemas, Mono es una alternativa más para este tipo de labores y, por lo tanto, es conveniente conocer qué posibilidades nos ofrece, sabiendo qué limitaciones tenemos y qué pasos hemos de dar para comenzar un proyecto de este tipo. Al ser una parte más de Mono, tendremos fácil acceso a todo tipo de funcionalidades interesantes para el desarrollo de aplicaciones web, como pueden ser la conexión con bases de datos, el tratamiento de datos con arquitecturas como ADO.NET o el manejo de ficheros XML.

Es conveniente que tengáis conocimientos, aunque sean básicos, sobre los lenguajes HTML y C# y sobre el funcionamiento de las aplicaciones web. Aún así, dado el carácter introductorio del artículo, creo que todos podréis leerlo sin dificultad.

Preparación e instalación

Aunque existan lenguajes como PHP que son interpretados por los servidores web en la mayoría de las ocasiones, nada más instalarlos, al tratar con una tecnología menos difundida, tendremos que centrarnos algo más en este paso. Lo primero será elegir qué servidor web utilizar. Tenemos dos opciones. La primera se llama XSP, un servidor escrito en C# cuyo propósito es servir de plataforma didáctica y para el desarrollo de prototipos. Para el desarrollo de aplicaciones de cara a producción, siempre será mejor utilizar Apache junto con el módulo mod_mono.


XSP

Como ya hemos comentado es un servidor ligero realizado en C# para aplicaciones que no están dirigidas a producción. Su nombre proviene del nombre que Microsoft puso a ASP.NET cuando todavía era un proyecto. Finalmente, le cambiaron el nombre de XSP a ASP.NET cuando lanzaron la plataforma al mercado. XSP es capaz de ejecutar sobre Mono o sobre un marco de trabajo .NET. También soporta SSL. Para instalarlo podéis descargaros de los repositorios SVN del Proyecto Mono el código fuente o directamente hacer uso de vuestro gestor de paquetes, opción esta última que recomiendo. La versión de XSP que debemos instalar es la que soporta ASP.NET 2. En Debian el paquete viene nombrado en el repositorio como mono-xsp, en otras distribuciones el nombre del paquete puede variar a xsp2 o mono-xsp2. Junto con este paquete también debemos instalar el paquete con ejemplos asp.net2-examples.
Una vez instalado, para comprobar que todo funciona bien hacemos lo siguiente:

  • Desde la terminal nos dirigimos al directorio donde se encuentren los ejemplos, /usr/share/asp.net2-demos/
  • Ejecutamos el servidor: xsp2
  • Comprobamos que hay a la escucha en el puerto 8080 de tu equipo con un navegador. Para esto último introduce en la dirección: http://localhost:8080.
  • Si todo ha ido bien deberá salirnos una pantalla indicándonos una serie de ejemplos.

Bien, en mi proximo post continuare con este articulo, con el cual seguiremos viendo que no es tan complejo el uso de esta alternativa.

Saludos.


miércoles, 3 de marzo de 2010

Google lanzará su propio teléfono en 2010


Saludos, para realizar la apertura de mi blog me gustaría contarles un poco sobre un articulo que lei esta semana en la revista Linux+ sobre Nexus One.

Muchos han sido los rumores en los últimos días sobre el lanzamiento de Google de su propio terminal y la información parece haber cobrado fuerza. Ha sido la propia compañía, a través de una entrada en su blog corporativo, quien ha confirmado la fabricación de un teléfono en colaboración con un socio aun sin nombrar, el cual ya estaría disponible para ser testeado por los propios trabajadores de Mountain View.

El terminal, denominado “Nexus One” se venderá libre y sin estar asociado a ningún operador, según fuentes cercanas a la compañía. Se tratará de un smartphone que incorporará el sistema operativo Android 2.1 y podría tener una pantalla OLED capacitiva similar a la del HTC Dragon, sin teclado físico. Incluiría además el procesador Snapdragon y pantalla táctil OLED, dos micros y especiales capacidades de transformación de voz en texto.

Según afirma The Wall Street Journal, el dispositivo se pondrá a la venta el próximo año y Google lo comercializará directamente. Serán los usuarios quienes decidan con quien contratar sus servicios inalámbricos. Esto proporciona a la compañía una gran libertad para incluir software de servicios como su e-mail o su herramienta de mapas sin estar sujeto a las normas de las operadoras.

El lanzamiento deja entrever las intenciones de la firma de competir directamente con el iPhone de Apple y no deja de ser curioso que pueda presentarse sin depender de ninguna otra empresa. Últimamente, entre operadoras y fabricantes de teléfonos, un total de 32 empresas han anunciado el lanzamiento de algún teléfono con el sistema Android.

Las primeras imágenes muestran un diseño similar al del iPhone con un único botón en la parte inferior, debajo de la pantalla, que actúa en realidad como joypad.

De momento se desconocen los precios de este dispositivo así como los países donde podría desembarcar. Según afirmaciones, se comercializará a partir de enero del año que viene.