Feliz Navidad y Prospero año nuevo!
Con la esperanza de reconciliar a la sociedad para encontrar nuevas formas de recuperar puestos de trabajo y el bienestar de las personas necesitadas.
Sin duda necesitamos caminar juntos para definir nuevos escenarios para que el mundo sea relamente mejor.
Mis mejores deseos para que este 2013 se convierta en el Año de pan con azúcar y vino!
Merry Christmas to you and your family as well
Hoping reconcile the society to find new ways to recover jobs and the day to day welfare for the needy people.
With no doubt we need walk together to define a new scenario to make the world better.
My best wishes to make this 2013 becomes the Year of bread with sugar and wine!
:-))
Catalonian Claus.
This is an small sample code to show how to build our basic gadgeteer web server using VB with Spider and the 4.2 RTM Premium library's.
Start Visual Studio with a new gadgeteer project and copy/paste...That's all! (remember add library's references)
Imports System.Net
Imports System.Text
Imports Microsoft.SPOT.Hardware
Imports GHI.Premium.Net
Imports GT = Gadgeteer
Partial Public Class Program
Private WithEvents ethernet As New EthernetBuiltIn()
'
Private ip As New IPAddress(New Byte() {0, 0, 0, 0})
Private WithEvents myweb As WebEvent
'
Private WithEvents timer As GT.Timer = New GT.Timer(1000)
Public Sub ProgramStarted()
'Initialize adapter
ethernet.Open()
ethernet.NetworkInterface.EnableDhcp()
ethernet.NetworkInterface.EnableDynamicDns()
NetworkInterfaceExtension.AssignNetworkingStackTo(ethernet)
'app timer on
timer.Start()
End Sub
Private Sub ethernet_CableConnectivityChanged(sender As Object, e As GHI.Premium.Net.EthernetBuiltIn.CableConnectivityEventArgs) Handles ethernet.CableConnectivityChanged
If e.IsConnected Then
' reboot device after plug... to startup again
PowerState.RebootDevice(True)
End If
End Sub
Private Sub ReceivedWebEventHandler(path As String, method As WebServer.HttpMethod, responder As Responder) Handles myweb.WebEventReceived
' webb response
responder.Respond(New System.Text.UTF8Encoding().GetBytes("Hello from " + ip.ToString() + " At " + System.DateTime.Now.ToString()), "text/html")
End Sub
Private tic As Boolean
Private Sub timer_Tick(timer As Gadgeteer.Timer) Handles timer.Tick
' blink debug led... system working
tic = Not tic
Mainboard.SetDebugLED(tic)
' get an IP from DHCP if no previous one
If (ip.ToString = "0.0.0.0") And ethernet.IsCableConnected Then
ip = IPAddress.GetDefaultLocalAddress()
WebServer.StartLocalServer(ip.ToString(), 80)
myweb = WebServer.SetupWebEvent("Hello")
End If
End Sub
End Class
Regards,
PepLluis,
Pos Eso! :-) un nuevo gran recurso.
La Biblioteca de imagenes de Visual Studio contiene imágenes de aplicaciones que aparecen en Microsoft Visual Studio, Microsoft Windows, Office System y otros programas de Microsoft, esta biblioteca continene más de 5.000 imágenes que se pueden utilizar para crear aplicaciones que se parecezcan visualmente y de forma consistente con el estilo de software de Microsoft.
http://www.microsoft.com/en-us/download/details.aspx?id=35825
Saludos,
PepLluis,
Conversando con un compañero que en 2009 asistimos a una charla sobre Microframework en el TechEd de Barcelona, me comentaba que era una lástima que netmf no pudiera ejecutar hilos….. Mi respuesta fue: Pero hombre! desde entonces ha llovido mucho!! Jajajaja.
Si habrá llovido que incluso ya está en ruta la versión 4.3 que se integrara en Visual Studio 2012.
Evidentemente estos últimos cuatro años como ya vengo diciendo en los últimos post, han dado una sana madurez a netmf. Si además del montón de funcionalidades actuales de netmf también disponemos de threats.
Valga este modesto ejemplo, para manejar dos ‘threading.timers’ :
Imports Microsoft.SPOT
Imports System.Threading
Namespace MFConsoleApplication1
Public Module Module1
Private tmr1 As New Timer(New TimerCallback(AddressOf tic), Nothing, 1000, 500)
Private tmr2 As New Timer(New TimerCallback(AddressOf tac), Nothing, 1000, 500)
Sub Main()
' desfasar el primer hilo del segundo para crear el Tic Tac
Thread.Sleep(500)
' poner a dormir al hilo principal
Thread.Sleep(System.Threading.Timeout.Infinite)
End Sub
' CallBack para tic
Sub tic(ByVal state As Object)
Debug.Print("Tic")
End Sub
' CallBack para cac
Sub tac(ByVal state As Object)
Debug.Print("Tac")
End Sub
End Module
End Namespace
Saludos,
PepLluis,
Como probablemente sabréis el pasado 22 de noviembre se celebro en el teatro Goya de Madrid uno de los eventos anuales más importantes en torno a las tecnologías de Microsoft. Este evento reúne empresas y profesionales del sector entorno a conferencias temáticas específicas para desarrolladores y IT pros.
También fue una oportunidad única para esas reuniones “tu a tu” entre colegas, donde fraguar conversaciones que al fin y al cabo dinamizan a la comunidad en busca de esa inspiración donde compartir se convierte en la capacidad de visualizar nuestro futuro profesional más próximo.
Otro de los valores añadidos en este evento, fue la posibilidad de contactar con los principales expertos de las principales tecnologías de Microsoft. Los asistentes pudieron conversar en el “ATE” frente al mostrador de MVP’s.
En esta ocasión aproveche este fantástico escenario para presentar el Microsoft “Gadgeteer”, con el propósito de fundamentar una nueva “micro” comunidad entorno a este estupendo proyecto. En la “Show Room” J pudimos ver dos “bread boards” conteniendo una muestra de implementación de casi todos los procesadores disponibles en el mercado a día de hoy.

Muchos de vosotros mostrasteis un curioso interés sobre esta madura plataforma para pequeños dispositivos, que en breve podrá incluirse a Visual Studio 2012, por este motivo he considerado adecuado dedicar este pequeño corto, con el propósito de resposder a la repetida pregunta “y esto que es?” jajajaja.
Pues:
NET Micro Framework representa la versión más pequeña de punto NET. Está orientado a pequeños sistemas con recursos limitados, pero con alto grado de integración en periféricos embebidos dentro de un mismo procesador. Además cuenta con innovador y completo entorno desarrollo, ejecución y depuración, aportando la productividad de las herramientas modernas a programación de sistemas embebidos. En la actualidad se ofrece bajo una licencia de código abierto (Apache 2.0), aunque todavía su estatus de desarrollo está activo dentro de Microsoft, también se encuentra en coordinación con las contribuciones abiertas a la comunidad técnica.
· Fácil desarrollo de potentes aplicaciones interactivas, integradas y complejas.
· Conexión de dispositivos a través de protocolos inalámbricos o por cable.
· Desarrollo rápido de soluciones fiables y robustas a un menor coste.
· Desarrollo de soluciones para dispositivos conectados utilizando las mismas herramientas que se utilizan para desarrollar aplicaciones de servidor o para la nube.
Aprende más acerca de .NET Micro Framework en : MSDN › o NETMF.COM ›
En 2011 Microsoft Research anuncio la liberación de NET Gadgeteer, una plataforma que permite construir y depurar prototipos de dispositivos electrónicos de forma rápida y sencilla. En general está orientado a educadores, desarrolladores y aficionados, los prototipos se construyen uniendo distintas unidades NET Gadgeteer o módulos a una unidad central de proceso. Existe una amplia gama de módulos enchufables que proporcionan diferentes funcionalidades… visualización, control, comunicaciones, etc. Las principales claves radican en no requerir conocimientos previos de electrónica ni habilidades para realizar soldaduras, este nuevo concepto permite desarrollar refinados prototipos o dispositivos electrónicos en un tiempo extraordinariamente bajo.
"NET Gadgeteer es una plataforma de gran alcance que le permite crear muy rápidamente sofisticados dispositivos -. Incluso sin mucha experiencia previa", Según Steve Hodges, Principal ingeniero de hardware en Microsoft. "Este proyecto empezó como una herramienta interna para Microsoft Research Cambridge, rápidamente se hizo evidente su especial atractivo para personas ajenas al laboratorio. La liberación del código a la comunidad técnica hará que esta poderosa tecnología este disposición de los demás, incluyendo aficionados, profesores, investigadores y desarrolladores que nos han dado una respuesta tan positiva hasta la fecha. "
Espero vuestros comentarios y preguntas.
PepLluis,
Simplemente es un recordatorio sobre la disponibilidad de la primera actualización para Visual Studio 2012.
Aqui teneis el enlaze : http://www.microsoft.com/visualstudio/esn/downloads#d-visual-studio-2012-update
Saludos,
PepLluis,
La lista de mejoras es la siguiente :
Funcionalidades ALM adicionales en SharePoint (como el soporte para pruebas de carga y para pruebas de interfaz de usuario codificadas), mejoras de calidad, escalabilidad y agilidad.
Planificación ágil más sencilla con acceso web y nuevo soporte Kanban, además del soporte Scrum existente.
Mejoras para las pruebas, desde la organización de pruebas unitarias hasta un flujo de trabajo más flexible para la ejecución de pruebas manuales.
Desarrollo mejorado de aplicaciones de Windows 8, como el soporte para depurar aplicaciones mixtas administradas y nativas de la Tienda Windows y una depuración ARM mejorada para aplicaciones de Windows 8.
Antecedentes:
No se ha realizado ningún cambio en el servidor desde que se agrego la última colección con la consola de Team Fundation.
Aparentemente se completa todo el proceso, hasta que aparece un mensaje de error rezando que no se puede contactar con el servicio en http://{ServerName}:17012.
Al revisar IIS en el administrador, el pool del SCA está detenido. Si intentamos iniciarlo, vuelve a detenerlo en cuanto intentemos examinar de nuevo SCA y siempre recibiremos el “Service Unavailable” por respuesta.
Causas:
El pool no puede iniciarse porque la identidad del grupo, fue configurada con una cuenta personalizada. En tal caso cuando se cambian las credenciales de dicha cuenta, el pool deja de ponerse “En Servicio”.
Resolución:
Si continúas empeñado en utilizar una cuenta personalizada, deberás cambiar las credenciales asignadas inicialmente para que coincidan por las actuales. Asi de Simple! J
>Pool>Configuración Avanzada>Identidad de grupo de aplicaciones>Establecer Credenciales

Saludos,
PepLluis,
Otra de las nuevas para VB11 es la posibilidad de combinar Lambdas e Iteradores :-) me encanta la dulzura de las expresiones en VB y encima incrustando XML en el editor… no todos los lenguajes pueden alardear de ellos ;-) jajajajaja.
Llevamos tiempo hablando de expresiones Lambda, y a la mayoría nos cuesta adoptar de forma natural la escritura de la mismas dentro de nuestros escenarios habituales.
El siguiente ejemplo, intenta introducir y dar coherencia a su uso, poniendo en acento en las extensiones de unión ‘Yield’ para combinar el contenido con el cuerpo de literales XML.
No olvideis el 'Imports System.IO.Directory' para poder llamar a la funcion 'EnumerateFiles'.
Dim myExplorer As New WebBrowser
Dim myImageWall As XElement
Me.Controls.Add(myExplorer)
myImageWall =
<html>
<body>
<%= Iterator Function()
For Each filename In EnumerateFiles("C:\Users\PepLluis\Pictures", "*.jpg")
Yield <img src=<%= filename %>></img>
Next
End Function.Invoke() %>
</body>
</html>
myExplorer.DocumentText = myImageWall.ToString
Para los que lo ven todo simple es tan sencillo como incrustar sentencias y expresiones!
Espero que os guste.
PepLluis,
'Como empezar con "Cerberus" (Como atencion al Sr. Frederick)
'
' Descargar/Instalar el sdk 4.2QFE2 de netmf : http://netmf.codeplex.com/downloads/get/470705
' Descargar/Instalar el sdk 4.2RC2 de GHI : (puedes encontrarlo el la pagina de detalles "Cerberus".
'
' Una vez instalado...
' - Ejecutar una instancia de Visual Studio 2010
' - Nuevo Proyecto
' - Escoger Visual Basic>Gadgeteer>.Net Gadgeteer Aplication (NETMF 4.2)
' - Copiar y pegar este codigo... y listo!, el Led verde parpadeara hasta el fin de los tiempos :-)
Imports GT = Gadgeteer
Imports GTM = Gadgeteer.Modules
Partial Public Class Program
Public Sub ProgramStarted()
timer.Start()
Debug.Print("Program Started")
End Sub
Dim WithEvents timer As GT.Timer = New GT.Timer(1000) ' un cop per segon (1000ms)
Dim tic As Boolean = False
Private Sub timer_Tick(timer As Gadgeteer.Timer) Handles timer.Tick
tic = Not tic
Mainboard.SetDebugLED(tic)
End Sub
End Class

Creo que ya va siendo tiempo de que hablemos de las novedades del nuevo Visual Basic “Compilador VB11” y Visual Studio 2012 J
Esta es una de aquellas guindillas que simplifica el código, tales como la introducción de “no más _ de continuación de línea”.en VB10.
Pues en VB11 “No mas ByVal” en las firmas de método.
Aunque parezca una simpleza, mejora el aspecto visual y se hace mas agradable de leer cuando lo ves en las declaraciones de método.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
'ni ByVal... ni System en EventArg
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
End Sub
Enga... a picar!
Saludos,
Un pequeño post anunciando un gran recurso libre para la comunidad, la version express del producto ya puede descargarse en el siguiente link:
http://www.microsoft.com/visualstudio/esn/downloads#d-2012-express
Espero que lo disfruteis!
PepLluis,
Una de las características mas esperadas para "Visual Studio 2012" es sin duda las plantillas de app's para "Windows 8".
Debo advertiros que las plantillas no están disponibles si tu entrono de desarrollo no es "Windows 8", por lo tanto no estarán disponibles si lo instalas en un "Windows 7" :-)
Su versión en Ingles reza "Windows Metro Style", como ya sabéis "Spain is diferent" y en vez de hablar de aplicaciones "Metro"... en nuestro curriculum deberemos decir que somos programadores de "Tienda Windows" LOL!

Una simpática manera de empezar,
Saludos,
Por peticion de un amable lector...
Como punto de entrada para construir un 'WebServer' sin gadgeteer en C# y para microframework, os dejo la siguiente entrada :
NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces()[0];
WebEvent myweb;
void ProgramStarted()
{
Debug.Print("Program Started");
Debug.Print("IP Address: " + networkInterface.IPAddress.ToString());
Debug.Print("Subnet Mask: " + networkInterface.SubnetMask.ToString());
Debug.Print("Gateway: " + networkInterface.GatewayAddress.ToString());
System.Threading.Thread.Sleep(1000);
//
WebServer.StartLocalServer(networkInterface.IPAddress.ToString(), 80);
myweb = WebServer.SetupWebEvent("Hello");
myweb.WebEventReceived +=new WebEvent.ReceivedWebEventHandler(myweb_WebEventReceived);
}
void myweb_WebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
{
byte[] bte = new System.Text.UTF8Encoding().GetBytes("Hello from " + networkInterface.IPAddress.ToString() + "At " + System.DateTime.Now.ToString());
responder.Respond(bte, "text/html");
}
}
Saludos,
PepLluis,
Hace aproximadamente diez años me empeñe en introducirme al desarrollo de una pila TCP/IP para micro-controladores de recursos limitados. Constaba mas de trescientas paginas repletas de código C, ciertamente desistí de implementar mi propio “MicroWebServer” incrustado en un solo chip.
El tiempo pasa y es un verdadero lujo constatar como los sistemas embebidos toman el pulso a una nueva etapa donde ofrecer servicios integrados en micro dispositivos deja suelta a nuestra creatividad.
Fijaros en este código:
Imports GT = Gadgeteer
Partial Public Class Program
Private WithEvents adapter As New Ethernet(7)
Private WithEvents myweb As WebEvent
Private Sub ProgramStarted()
Debug.Print("Program Started")
adapter.UseStaticIP("192.168.1.1", "255.255.255.0", "192.168.1.1"
End Sub
Private Sub myweb_WebEventReceived(path As String,
method As Gadgeteer.Networking.WebServer.HttpMethod,
responder As Gadgeteer.Networking.Responder) Handles myweb.WebEventReceived
If path = "Ping" Then
Dim pag = "<html>" +
"<body>" +
"<h1>" +
"Response from " + adapter.NetworkSettings.IPAddress.ToString +
"</h1>" +
"</body>" +
"</html>"
Dim bte As Byte() = New System.Text.UTF8Encoding().GetBytes(pag)
responder.Respond(bte, "text/html")
End If
End Sub
Private Sub adapter_NetworkDown(sender As Gadgeteer.Modules.Module.NetworkModule,
state As Gadgeteer.Modules.Module.NetworkModule.NetworkState) Handles adapter.NetworkDown
Mainboard.SetDebugLED(False)
WebServer.StopLocalServer()
End Sub
Private Sub adapter_NetworkUp(sender As Gadgeteer.Modules.Module.NetworkModule,
state As Gadgeteer.Modules.Module.NetworkModule.NetworkState) Handles adapter.NetworkUp
Mainboard.SetDebugLED(True)
WebServer.StartLocalServer(adapter.NetworkSettings.IPAddress, 80)
Debug.Print(adapter.NetworkSettings.IPAddress)
End Sub
End Class
Me gustaría recibir vuestros comentarios,
PepLluis,
Esta claro que es mucho mejor agrupar que distribuir y en ese sentido continúo pensando que la mejor forma de formular y resolver nuestras dudas es en los foros de MSDN.
Sin embargo bien sea por preferencias o por cualquier otro motivo, algunos de vosotros estáis solicitando poder contactar directamente conmigo para formular vuestras dudas o preguntas.
Por este motivo, creo que la mejor opción será poner a vuestra disposición unos “foros” específicos, para evitar las tediosas conversaciones privadas iniciadas a través de la opción [Contact].
Espero que ahora que las conversaciones serán publicas “no os echéis atrás!” y que esto facilite ideas a otros desarrolladores con las mismas inquietudes.
Estaría encantado de que a partir de ahora, cuando necesitéis contactar conmigo lo hagáis posteando en alguno de estos foros : Desarrollo con VB , Desarrollo con C# , Puertos Serie
Ahora ya no hay excusas! :-)
PepLluis,
A todos lectores de este humilde blog.
Diariamente recibo decenas de preguntas a veces relacionadas con aspectos de los temas posteados y en gran parte con derivadas de las mismas que ayudarían a resolver, dudas y casuísticas particulares.
En general estoy hablando de preguntas concretas a las que me es imposible contestar, no porque no quiera sino porque la funcionalidad y diseño del “Blog” no esta pensada para ello.
La presente nota es a titulo de disculpa, pues lejos de ignorar vuestras preguntas me gustaría redirigirla a los foros de la comunidad MSDN:
http://social.msdn.microsoft.com/Forums/es-ES/categories/
Donde no solo me encontrareis a mi, si no que podréis gozar del soporte muchos empleados de MS,.de la mayoría de MVP’S en habla hispana asi como de los mejores profesionales del sector. Sin dejar por menos al grueso de partners, universitarios, estudiantes, entusiastas, aficionados y seguidores en general. Resumiendo "Todos estamos en el mismo ajo" :-)
En mi caso concreto, intento monitorizar y participar tanto como puedo en los de Lenguaje y Comunicación con dispositivos externos… nos vemos allí!
Ello no significa que renuncie a vuestros comentarios sobre los artículos y post de este Blog.
Gracias por vuestra compresión.
Buenos Juegos!
PepLluis,
Hoy se anuncia la liberación de Windows 8 y Windows Server 2012!... para no ser menos tambien se anuncia las compilaciones finales para Visual Studio 2012 y Framework 4.5!
Sin duda un 1 de agosto para recordar :-)
Visual Studio estara disponible para los subscriptores el proximo 15 de Agosto y su campaña de Lanzamiento el 12 de septiembre.
No te pierdas la celebración : http://visualstudiolaunch.com
Buenos Juegos! y Buenos Studios!
PepLluis,
Uno de los requerimientos habituales en nuestros diseños es la posibilidad de intercambiar tramas con otros dispositivos a través del puerto serie.
En este ejemplo, realizaremos el punto de entrada para el modulo “usbSerial” en un FEZ-Cerberus. En el siguiente ejemplo recibiremos los bytes enviados por el dispositivo anfitrión y simplemente los reenviaremos… efectivamente! “Echo Response!”.
Espero os sea útil.
PepLluis,

using Microsoft.SPOT;
using GT = Gadgeteer;
using Gadgeteer.Modules.GHIElectronics;
namespace usbSerialSample
{
public partial class Program
{
void ProgramStarted()
{
// Configurar el modulo serie
usbSerial.Configure(9600, GT.Interfaces.Serial.SerialParity.None, GT.Interfaces.Serial.SerialStopBits.One,8);
usbSerial.SerialLine.DataReceived += new GT.Interfaces.Serial.DataReceivedEventHandler(SerialLine_DataReceived);
usbSerial.SerialLine.Open();
}
void SerialLine_DataReceived(GT.Interfaces.Serial sender, System.IO.Ports.SerialData data)
{
try
{
led7r.TurnLightOn(1, true); // Indicar Recepción led 1 (modulo led7r)
int toRead = usbSerial.SerialLine.BytesToRead; // Cantidad de bytes disponibles para leer
byte[] buffer = new byte[toRead]; // Dimensionar array para leer del buffer
usbSerial.SerialLine.Read(buffer, 0, toRead); // leer bytes recibidos
usbSerial.SerialLine.Write(buffer, 0, toRead); // reenviar de vuelta bytes recibidos
led7r.TurnLightOff(7); // apagar led señalizacion "error"
led7r.TurnLightOff(1); // apagar led 1, para indicar fin operación
}
catch
{
led7r.TurnLightOn(7, true); // señalizar error encendiendo led rojo (led7r)
}
}
}
}
Esta seria la idea:
Imports Microsoft.Office.Interop
' Definir Aplicacion, Hoja y Rango
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oRg As Excel.Range
' Iniciar excel y obtener objeto "aplicacion"
oXL = New Excel.Application
' Ajustar propiedades a tu gusto
oXL.Visible = True
oXL.DisplayAlerts = False
' Obtener una nueva hoja
oWB = oXL.Workbooks.Add
' Trabajar con la hoja 1
Dim ws As Excel.Worksheet = DirectCast(oWB.Worksheets(1), Excel.Worksheet)
ws.Cells(1, 1) = "Titulo 1"
Dim Col As Integer = 2
Dim Row As Integer
' Imaginando un LineChar con valores numericos... distribuir series en columnas
For Each s As Charting.Series In LineChar2D1.chart1.Series
ws.Cells(1, Col) = s.Name
Row = 1
For Each p As Charting.DataPoint In LineChar2D1.chart1.Series(s.Name).Points
'Mostrar valores en columnas por series
ws.Cells(Row, Col) = p.YValues(0).ToString("N2")
Row += 1
Next
Col += 1
Next
' Ajustar aspecto final (Seleccionando rangos)
oRg = CType(ws.Columns("A", Type.Missing), Excel.Range)
oRg.AutoFit()
No olvideis que en chart tambien disponemos de la utilidad 'Points.DataBindXY' para procesarlos en bloque ;-)
Espero os sea util,
PepLluis,
PD. No olvideis importar el espacio de nombres de 'Office.Interop'
Nuestra visión de compilador continua siendo el proceso por el que el código entra por un extremo, produciendo los binarios que salen por el otro. No dejes de conocer "Roslyn" pues vas a ver como los compiladores de Visual Basic y C # como API's. Estas API's van a permitir tener una vista previa de la próxima generación de modelos de objetos y de idiomas para la generación de código, el análisis y la refactorización, y el soporte para el uso de secuencias de comandos interactivos para Visual Basic y C #.
http://msdn.microsoft.com/es-es/roslyn
Saludos,
PepLluis,
More Posts
« Previous page -
Next page »