Callbacks in C

Function Pointers and Callbacks in C 

By Dibyendu Roy on February 28, 2012 in CodingDevelopers ·

Function pointers are among the most powerful tools in C, but are a bit of a pain during the initial stages of learning. This article demonstrates the basics of function pointers, and how to use them to implement function callbacks in C. C++ takes a slightly different route for callbacks, which is another journey altogether.

access the user interface from multiple threads

By 28 Jun 2012

Using Windows.Forms gets really ugly when you need to access the user interface from multiple threads. IMHO, this is an example of leaky abstraction.

When you run a program with this UI threading issue from within Visual Studio, it will always throw an exception. The same program running as a standalone EXE may not throw the exception. That is to say, the development environment is stricter than the .NET framework.

Windows 8

Seattle.- A medida que Microsoft Corp se prepara para demostrar al mundo lo que su nuevo Windows 8 puede hacer para la próxima generación de tabletas de alta potencia, las revisiones iniciales del nuevo sistema operativo en el hardware existente resaltan los desafíos que enfrenta la compañía con el nuevo diseño radical de su producto insignia.

La mayor compañía de software del mundo dice que millones de personas ya están utilizando una versión preliminar que descargaron de Windows 8 en sus Pcs, laptos y dispositivos táctiles antes de su introducción oficial este otoño boreal.

En un evento mediático en Los Angeles el lunes, la compañía tiene previsto discutir sus planes de superar al iPad de Apple Inc esta temporada de compras de fin de año.

Hasta el momento, la mayor parte de los críticos han elogiado el aspecto de estilo amigable táctil “Metro” de Windows 8, que está basado en coloridos cuadrados, o mosaicos, que representan aplicaciones como correo electrónico y actualizaciones en tiempo real. Pero también han resaltado lo difícil que será para los usuarios alejarse de lo que ya conocen y confían.

Es como una cierta lucha para la gente que está deliberadamente orientada a una PC, que está acostumbrada al mouse”, dijo el ex estratega de Microsoft Al Hilwa.

Hilwa, ahora un analista en la empresa de investigación tecnológica IDC, ha estado probando durante dos semanas la última muestra de la versión. “Sin la pantalla táctil, luchaba con un mouse para hacer ciertas cosas”, dijo.

La nueva interfaz Metro solo ejecuta programas diseñados para ella, por lo que los usuarios deben volver a sus tradicionales computadoras de escritorio para realizar ciertas tareas, tales como escuchar música en iTunes de Apple.

“Lo que realmente me enfurece es que las aplicaciones Metro y las aplicaciones que se ejecutan en las computadoras de escritorio no están al tanto de la existencia de la otra”, dijo el analista de Forrester Research David Johnson. “No existe una forma fácil de navegar entre ellas, no estoy muy seguro a qué se debe”.

La última versión de la prueba del software aún no está concluida. Y aparte de unos pocos examinadores de la industria, nadie ha probado a Windows 8 en una tableta impulsada por los ultra eficientes chips de ARM Holdings, que es lo más cerca que Microsoft se aproximará para desafiar al iPad.

Microsoft debe ofrecer más detalles el lunes, y existen rumores de que podría introducir una tableta con su propia marca. La compañía se negó a hacer comentarios respecto a la reacción al nuevo sistema y sobre sus planes para el evento del lunes.

No obstante, Microsoft no ha logrado convencer aún a algunos de sus usuarios más leales.

“En este momento, no me han comprado”, dijo el analista Michael Cherry de Directions on Microsoft, una empresa de investigación independiente que se enfoca en el gigante tecnológico.

Cherry dijo que había insistido con Windows 8 durante algunos días, pero que tuvo problemas para configurar el correo electrónico en su máquina de prueba.

“No puedo confiar en ella como una herramienta de producción”, dijo. “Aún no me puedo cambiar. Para este momento, debería haber sido capaz de dejar atrás a Windows 7”.

Cherry, un ex gerente de programas de Microsoft, dice que le preocupa que la complejidad inicial del nuevo sistema le impida ser un éxito inmediato, como su predecesor, Windows 7.

“Si una persona que ha utilizado Windows a partir de Windows 1.0 no lo puede entender, entonces imagino que hay otras personas ahí afuera que no lo podrán entender”, dijo. “No veremos las largas filas en las tiendas Best Buy a medianoche. Me encantaría ver eso, pero simplemente no sucederá”.

Los principales críticos tecnológicos como Walt Mossberg de Wall Street Journal o David Pogue del New York Times no han expresado aún su opinión respecto al tercer y último “anticipo” de Windows 8, disponible libremente en internet el 31 de mayo.

El puñado de comentarios en los blogs centrados en tecnología en general elogiaron el nuevo aspecto de Windows 8, pero prácticamente cada uno ha resaltado lo difícil que será para los usuarios hacer el cambio.

“No podría dar a mi madre -que tiene 76 años- Windows 8 y esperar que sea productiva con el sistema”, dijo Johnson de Forrester. “Pero tampoco estoy seguro de que alguien de 30, o incluso 20 años, no se confundirá inicialmente con la interfaz de Metro”.

Los consumidores individuales y potenciales compradores del iPad, más que clientes corporativos, son el objetivo principal de Windows 8. Muchas grandes compañías se encuentran aún en el proceso de gastar millones de dólares para cambiarse a Windows 7.

apr

Abstract classes vs. interfaces

Usar interfaces cuando se esperan cambios frecuentes en el código. Interfaces es un método más flexible que herencia para manejar opciones de comportamiento. Una clase abstracta funciona de manera similar pero además permite definir comportamientos comunes, forzando a las subclases a definir los comportamientos especializados. Una clase abstracta se parece a una interface en que ambos son una especie de contrato de como se debe comportar la clase en el mundo exterior. Resumiendo; interfaces permite a una clase tener varios padres, pero una interface no implementa ningún método, solo especifica que métodos se deben implementar.

Una clase abstracta no se puede instanciar pero puede implementar algunos métodos ( o todos). Interfaces hacen oficial la separación entre implementación y la firma de una clase, mientras que una clase abstracta permite definir comportamiento común, pero por lo mismo es más fácil romper el código en cascada al hacer un cambio. La siguiente tabla compara interfaces y clases abstractas en C#

Interface Abstract class
Una clase puede heredar múltiples interfaces. Una clase solo puede heredar de una clase abstracta.
sin implementación por defecto. Implementación por defecto.
Solo Static final constants. Constantes pueden ser estáticas y de instancia.
La interface define las características periféricas de una clase. Una clase abstracta define el comportamiento interno de una clase.
Si las implementaciones solo se parecen en la firma, entonces es mejor usar interfaces. Si las varias implementaciones usan comportamientos comunes, es mejor usar una clase abstracta.
Ejecución Lenta. Ejecución rápida.
Es necesario revisar todas las implementaciones para  agregar funcionalidad. Se puede agregar el nuevo método a la clase abstracta y todas las implementaciones lo incorporan.

http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html?page=1
http://www.codeproject.com/csharp/abstractsvsinterfaces.asp
C# Interface Based Development

.NET Compact Framework 2.0

OpenNETCF.org es un repositorio de información y código fuente sobre Microsoft .NET Compact Framework. OpenNETCF.org empezó como un proyecto de código abierto para extender la funcionalidad de .Net 1.x. A partir del Smart Device Framework 2.0 el código fuente dejo de ser libre.

En el mismo sito de Microsoft hay referencias a ejemplos de aplicaciones móviles que usan las extensiones de OpenNETCF.

El articulo Building a Wi-Fi Discovery Application with the .NET Compact Framework 2.0 explica a detalle una aplicación que usa estas librerías e incluye código fuente. Es un buen ejemplo para empezar a ver el ciclo complete de una aplicación móvil no trivial.

La solución de muestra incluye dos proyectos. La aplicación en si, y el código fuente OpenNETCF referenciado en la misma. Al construir la solución en Visual Studio 2005 se marcan warnings pero los proyectos se construyen con éxito. Se puede probar la aplicación en una Pocket PC 2003. Si la tarjetea de WiFi esta desactivada la aplicación genera una excepción. No es una aplicación de grado comercial pero es una buena referencia de lo que se puede hacer.

El articulo Deploying .NET Compact Framework 2.0 Applications with .cab and .msi Files continua con este ejemplo y explica como hacer un proyecto de instalación.

En un proyecto para aplicaciones inteligentes, cada archivo se marca con una acción de generación que se define en la ventana Propiedades del modo siguiente:

  • Un archivo marcado como Compile, valor predeterminado para todos los archivos y formularios de código, compilará los archivos en el ensamblado resultante.
  • Un archivo marcado como Content permite el empaquetado del archivo en el archivo .cab y su implementación en el proyecto. Asimismo, resulta útil para la implementación de archivos de configuración XML y bases de datos SQL Server CE.
  • Un archivo marcado como None simplemente se ignora. Esta acción resulta útil para incluir documentación en el proyecto, como diagramas de Visio que no se deben implementar.
  • Un archivo marcado como Embedded Resource se incluye en el ensamblado ejecutable como un recurso. Esta acción permite que el código escrito extraiga el recurso mediante programación. Asimismo, resulta eficaz para empaquetar imágenes y archivos de secuencias de comandos que se pueden utilizar posteriormente en la aplicación.


Antes de pasar a construir la aplicación para dispositivos inteligentes y crear los archivos .cab para la implementación, no se debe olvidar cambiar el modo de generación del proyecto de depuración a liberación. Esto reducirá el tamaño del ejecutable en el dispositivo (hecho importante en el caso de los dispositivos inteligentes de almacenamiento restringido) y aumentará la velocidad de ejecución.

Para hacer un proyecto de instalación automatica es necesario efectuar los siguientes pasos:

1. Crear archivos .cab para cada dispositivo donde va a correr la aplicación. Un .cab de instalación puede contener un archivo setup.dll con código no administrado, y por eso se requiere un .cab diferente para cada familia de procesadores. Si la aplicación no requiere de este archivo, entonces un solo .cab es suficiente.

2. Agregar los archivos y entradas de registro de la aplicación a los .cab

3. Proveer el código de acciones especiales a ejecutar durante la instalación y desinstalación de la aplicación.

4. Registrar la aplicación con ActiveSync para que se pueda instalar de la PC de escritorio a la Pocket PC.

5. Empacar todo en un archivo .msi

El primer paso es agregar un proyecto
Other Project types->Setup and deployment->Smart Device Cab Project
a la solución.

Al construir el proyecto se generan 3 archivos un .cab, un .log, y un .inf. El archivo .inf tiene parámetros de instalación que serán usados por ActiveSync.

El .cab es suficiente para instalar una aplicación en la Pocket PC pero es posible agregar un proyecto de instalación de escritorio para simplificar el proceso para el usuario.

Para aplicaciones móviles, hay dos cosas que el instalador debe hacer. Debe presentarle al usuario las pantallas del asistente de instalación en la PC de escritorio y debe instalar la aplicación en la Pocket PC.

La instalación en el Pocket PC se hace a través una aplicación llamada CeAppMgr.exe que es parte de ActiveSync. CeAppMgr.exe requires un archivo .ini que se debe agregar manualmente. En nuestro caso el .ini contiene lo siguiente:

[CEAppManager]
Version = 1.0
Component = OpenNETCF WiFiDiscovery

[OpenNETCF WiFiDiscovery]
Description = Sample WiFi Network Discovery Application using the SDF
CabFiles = WiFiDiscovery.cab

Para activar el modo de depuración de CeAppMgr.exe es necesario meterle mano al Registry. Para los valientes

[HKLMSoftwareMicrosoftWindows CE ServicesAppMgr]
“ReportErrors”=dword:1

Existen algunos requerimientos que, aunque no son estrictamente necesarios técnicamente, son prácticas establecidas y necesarias para certificación.

Aplicaciones registradas con CeAppMgr deben estar en un subfolder de ActiveSync por ejemplo. Estos requerimientos los maneja el instalador utilizando variables predefinidas de Windows para mayor flexibilidad y para facilitar localización del software en varios idiomas. Para ejecutar estas acciones se agrega una clase de instalación.

Agregamos un proyecto de librerí­a de Windows a la solución de Visual Studio. A este proyecto le agregamos la installer class. Esta clase soporta eventos relacionados con el proceso de instalación y permite definir acciones previas y posteriores al proceso de instalación y al de desinstalación. Por ejemplo,

public CustomInstaller()
{
InitializeComponent();
this.BeforeInstall +=
new InstallEventHandler(CustomInstaller_BeforeInstall);
this.AfterInstall +=
new InstallEventHandler(CustomInstaller_AfterInstall);
this.BeforeUninstall +=
new InstallEventHandler(CustomInstaller_BeforeUninstall);
}

Es necesario definir constantes para usar dentro del código en términos de entradas en el Registry, bajo la llave HKLM.

De esta manera el código sigue siendo valido bajo distintos idiomas y versiones de Windows.

private const string CEAPPMGR_PATH =
@”SOFTWAREMicrosoftWindowsCurrentVersionApp PathsCEAPPMGR.EXE”;
private const string ACTIVESYNC_INSTALL_PATH =
@”SOFTWAREMicrosoftWindows CE Services”;
private const string INSTALLED_DIR = “InstalledDir”;
private const string CEAPPMGR_EXE_FILE = @”CEAPPMGR.EXE”;
private const string CEAPPMGR_INI_FILE = @”WiFiDiscovery.ini”;
private const string APP_SUBDIR = @”OpenNETCF WiFiDiscovery”;
private string TEMP_PATH =
Environment.SystemDirectory + @”TEMPWiFiDiscovery”;

El ultimo paso es crear el proyecto de instalación.

Other project types ->Setup and deployment->Setup project

Despues de crear el proyecto, realizamos las siguientes acciones:

1. Cambiar el nombre del archivo de salida.

2. Indicar la ubicación de un directorio para guardar archivos temporales. Este direcorio debe estar ubicado de acuerdo a lo que definimos en la clase de instalación.

3. Definir las propiedades del proyecto como compañí­a, nombre de aplicación, etc.

4. Agregar los archivos de salida del proyecto CAB

5. Agregar en la carpeta de aplicación la salida de la clase de instalación

6. Agregar Custom Action usando la clase de instalación

7. Agregar archivo .ini

8. Construir todos los proyectos en la solución

9. Probar el instalador

Para mayor detalle se pueden consultar los articulos originales en el sitio de Microsoft.

El articulo Developing and Deploying Pocket PC Setup Applications aunque obsoleto tiene información complementaria y discute el caso .Net 1.x

Antes de poder ejecutar la aplicación, es preciso instalar .NET Compact Framework en el dispositivo. Si la aplicación requiere SQL Server CE, también será necesario instalar el archivo .cab adecuado. Aunque ambos se instalan automáticamente al implementar la aplicación desde Visual Studio .NET mediante el menú Implementar o al depurar el dispositivo, en producción será necesario emplear un mecanismo diferente.

Como se mencionó anteriormente, los archivos .cab creados para un proyecto no incluyen los archivos .cab correspondientes a .NET Compact Framework o SQL Server CE. Aunque Pocket PC 2003, y dispositivos posteriores, suelen incluir .NET Compact Framework en ROM, será preciso agregar los archivos .cab específicos de la plataforma en cuestión en el caso en que dichos dispositivos no los incluyan. Un modo sencillo de llevar a cabo esta operación para .NET Compact Framework es descargar y ejecutar el redistribuible.

Referencia:

Patrones de implementación para Microsoft .NET Compact Framework

How do I change the name of a label in blogger?

How do I change the name of a label?

Let’s say you have a number of posts with the label Label-1 but you’ve decided that you’d rather call it Label-2 instead. You can’t edit the name of a label directly, but there’s a simple workaround to accomplish your goal:

Go to the Posting | Edit Posts tab for your blog.
Click Label-1 in the label list.
Click Select All to select every post with this label.
From the Label Actions… menu, choose Apply label > New Label…
Enter Label-2 as your new label. (If you already have some posts with this label, you can simply add that label, without creating a new one.)
Now all the selected posts should have both labels. From the Label Actions… menu again, select Remove label > Label-1, and you’ve completed the switch.

Note: If you have a large number of posts with this label, they may not all appear on one page. You can show more posts at once using the Posts Per Page menu. If you still can’t show them all at once, then simply repeat the steps above until you’ve changed the labels on all the posts you wanted to affect

Un litro de luz

¿Porqué es necesario un proyecto del M.I.T. para descubrir como usar basura y agua para tener luz dentro de barrios de tejabanes?

Tenemos que utilizar mejor nuestros recursos en estos tiempos de crisis y ser creativos.

Interesante iniciativa, aplicable tambien en miles de hogares pobres del Perú.



Aquí está la idea y cómo se hace. El conocimiento no ocupa lugar, enriquece. La idea forma parte del proyecto “Un litro de luz” de la organización 
MyShelter Foundation Inc., que tiene la ambiciosa meta de llevar luz a un millón de hogares filipinos en 2012, en un país donde el alto costo de la electricidad es una de las principales preocupaciones. Con el uso de energía 100 por ciento renovable y materiales de fácil adquisición, la iniciativa mejora la calidad de vida y alivia el bolsillo de los filipinos, cuyos ingresos generalmente no sobrepasan los 18 dólares al mes.

La bombita solar es una innovación de los estudiantes del Instituto Tecnológico de Massachusetts (MIT)en EE.UU., y se basa en los principios de Tecnologías Apropiadas, un concepto que provee tecnología simple y fácilmente replicable para satisfacer las necesidades básicas de las comunidades en desarrollo. Hasta el momento ha traído beneficios a vecindarios de Brasil, México y Filipinas.

La lámpara no es más que una botella transparente de plástico llena 
con agua purificada y 
 Hipoclorito de Sodio en solución (lavandinay su función es evitar que se forme moho en el agua, que se inserta en orificios abiertos  en los techos para aprovechar la luz exterior durante el día.

El efecto es sorprendente. Los rayos del Sol viajan a través del envase 
y la mezcla genera una refracción brillante de 360 grados, que ilumina
cualquier habitación con la misma intensidad de una bombilla eléctrica 
de 55 watts, a un costo de 2 a 5 dólares.

El procedimiento es sencillo y no requiere mucho entrenamiento. Se 
llena la botella transparente de 1,5 litros con agua purificada y se 
agregan tres cucharadas de lavandina. Luego se sella herméticamente. 
La lavandina evita el desarrollo del moho en la solución, que puede 
durar hasta 5 años, mientras el agua destilada o purificada aporta 
mayor claridad.

Una vez preparada la mezcla, se hace un orificio en una lámina de 
zinc o fibra de vidrio, donde se inserta la botella hasta la mitad.

continuación se perfora un agujero similar en el techo de la casa y se ajusta con firmeza el artefacto, teniendo como tope la pequeña lámina. Finalmente se aplica un sellador potente para evitar filtraciones. 

¡Y se hizo la luz! No hizo falta un proyecto complejo de tendido eléctrico, ni quemar miles de litros de combustible. Una simple idea ha permitido atrapar la potencia del Sol en una botella para alumbrar las oscuras y desvencijadas viviendas de una humilde comunidad en Filipinas.

good programmers

Joel on Software

Hitting the High Notes

by Joel Spolsky
Monday, July 25, 2005

In March, 2000, I launched this site with the shaky claim that most people are wrong in thinking you need an idea to make a successful software company:

The common belief is that when you’re building a software company, the goal is to find a neat idea that solves some problem which hasn’t been solved before, implement it, and make a fortune. We’ll call this the build-a-better-mousetrap belief. But the real goal for software companies should be converting capital into software that works.

For the last five years I’ve been testing that theory in the real world. The formula for the company I started with Michael Pryor in September, 2000 can be summarized in four steps:

Best Working Conditions Best Programmers Best Software Profit!

It’s a pretty convenient formula, especially since our real goal in starting Fog Creek was to create a software company where we would want to work. I made the claim, in those days, that good working conditions (or, awkwardly, “building the company where the best software developers in the world would want to work”) would lead to profits as naturally as chocolate leads to chubbiness or cartoon sex in video games leads to gangland-style shooting sprees.

restore point

To create a restore point

  1. Open System by clicking the Start button Picture of the Start button, right-clicking Computer, and then clicking Properties.
  2. In the left pane, click System protection. Administrator permission required If you’re prompted for an administrator password or confirmation, type the password or provide confirmation.
  3. Click the System Protection tab, and then click Create.
  4. In the System Protection dialog box, type a description, and then click Create.
For more information about System Restore, see What is System Restore?

X Window Server

Xming is the leading [WWW]X Window Server for Microsoft XP/2008/Windows7. It is a fully featured X Server and is lean, fast, current, simple to install and because it is standalone native Microsoft Windows®, easily made portable (not needing a machine-specific installation).
Xming is totally secure when used with [WWW]SSH and optionally includes an enhanced PuTTY Link SSH client and a portable PuTTY replacement package. Xming can work completely independent of the Window’s registry when used with Xming-portablePuTTY.

http://www.ece.uvic.ca/computing/win-xsessions.shtml