Un link :: Un Blog :: La ventana IoT de MS al mundo 🙂
Microsoft Internet of Things (http://blogs.microsoft.com/iot/)
PepLluis,
Un link :: Un Blog :: La ventana IoT de MS al mundo 🙂
Microsoft Internet of Things (http://blogs.microsoft.com/iot/)
PepLluis,
En mas de una ocasión me habéis leído escribiendo sobre ‘Wearables» e «IoT» cuantificándolo en términos de «punta del iceberg» , pues bien :
Hace exactamente dos años, junto a un publicista con perfil comercial estuvimos barajando una propuesta (que por cierto no prospero) cuyo objetivo era dotar de una pulsera a todos los usuarios de un conocido parque 🙂 con el objetivo de mejorar su experiencia en términos de localizador, control de accesos, medio de pago, un montón de utilidades… y además evitar cargarle con toda la parafernalia de objetos innecesarios como tarjetas de pago, tarjetas de identificación, móviles, etc. pues es obvio que son esos los objetos que mas estorban cuando te precipitas sobre los railes del tan conocido dragón.
Largo tiempo después, o sea en fecha 28 de Octubre 2014 leo la implementación de una gran visión : «MagicBand – How Disney Transforms the Customer Experience with a Wearable» (puedes clicar el link después de leerlo todo el post y quedarte de pasta de moniato como yo !)
Vaya!! que buena idea! pero… no se me había ocurrido a mi?
La madurez nos enseña que los tópicos, son tópicos y a veces oímos frases como «cualquier Estadounidense puede llegar a ser presidente». Según el mismo ‘argumentario’ me atrevería en afirmar con cariño que «cualquier par de tontos pueden triunfar en estados unidos con una buena idea». Sin embargo matizándolo bien es todo lo contrario, la lectura quedaría como «la tecnología con madurez empresarial permite convertir una buena idea en una facilidad que consiga cambiar la forma en que percibimos las cosas mas cotidianas», a la vista esta : una pulsera que apenas llega a los 50 cents, eso si con inspiración, receta y una gran complicidad. Dicho sea de paso no disponible en todos los países 🙂
Bravo por la estadounidense que ha sido capaz de ver el gran potencial de una propuesta simple con una gran repercusión, tan solo aprovechando el uso de tecnologías que están sobradamente maduradas y disponibles en cualquier país desarrollado.
Y lo mas importante; Bravo! por hacer realidad algo que en países como el nuestro termina siendo un » y a pekin… pa ke? » como frase colofón por parte de los de operaciones.
Lo mas duro de digerir y la recurrente «con lo que esta cayendo», es que cuando lo implementemos aquí en Spain seguramente se lo compraremos a la compañía suministradora del parque estadounidense. Es evidente que no podría ser de otra forma… si viene del pacifico seguro que se trata de tecnología punta! o quizás como presuntamente ocurre según los medios de comunicación en algunos ayuntamientos… ahorraran un montón de dinero de sus contribuyentes implementando sistemas de eficiencia energética que pagaremos a una multinacional francesa.
LoL!
Con todo esto : mientras aquí «los avanzaos» somos fantasiosos y no nos comemos un rosco, en otros lugares rentabilizan las ideas y crean negocios.
Espero sinceramente que el 2014 sea un gran revulsivo para cambiar mentalidades y adaptarnos a un nuevo escenario mundial, donde el desarrollo tecnológico es una importante locomotora que de ninguna forma podemos dejar pasar.
Si estás cerca de Barcelona, no puedes faltar a nuestra próxima cita. Únete con nosotros y nuestros invitados de honor Gleen, Merwan o Dan en las oficinas de knowtech (Diagonal 188) durante dos horas podremos disfrutar de :
Gleen Block (1h) :
While Visual Studio, and other IDEs, are powerful tools, they can sometimes hinder productivity more than they promote it. You don’t always need, or want, the overhead of a creating a new solution or project. Sometimes you want to just type away in your favorite text editor.
scriptcs frees you from Visual Studio, without sacrificing the advantages of a strongly-typed language. Aqui tienes los enlaces !
Merwan Hade: Start talking during ~30-40 minutes:
Azure Mobile Services.
I’ll be speaking about Building Microsoft Azure Mobile Services with Visual Studio – Today’s data-driven apps are all powered by an easy-to-use backend. In this session, we take deep dive into one such backend: Azure Mobile Services. Learn how to connect your app to a .NET Mobile Service, how to add authentication, and send push notifications using notification hubs. We also discuss Mobile Service concepts like scheduled jobs and how to publish your Mobile Service. Finally and most importantly, learn how to effectively troubleshoot and diagnose issues with your .NET Mobile Service. By building a sample app in the session, we take a comprehensive look at both Mobile Services and the tools in Visual Studio to help you succeed.
Dan Fernandez: ~30-40 minutes into:
Fun with .NET – Driving a .NET controlled LEGO Mindstorm using SignalR and Azure
In this demo-packed session, we’ll walk through building your first .NET controlled LEGO Mindstorm using Windows Phone. You’ll learn about the LEGO EV3 API, how to control motors and read sensor data, and how to batch commands to the robot. Once we have a working, drivable robot, we’ll switch to cloud-enabling the robot so that you can drive the robot remotely via a Web site hosted in Microsoft Azure.
Gleen : http://www.meetup.com/catdotnet/events/213376142/
Merwan : http://www.meetup.com/catdotnet/events/215529032/
Dan : http://www.meetup.com/catdotnet/events/215529182/
Te esperamos!
PepLluis,
Dime obsesivo… pero me gustaría desvelar la extraña razón de porque últimamente me invade la inquietante sensación de que se me ha pasado el arroz!… alguna idea?
A los veteranos se nos hace difícil alcanzar a los jóvenes por su gran capacidad en ‘cores’, aunque pensándolo bien y a estas alturas pudiendo elegir no se si preferiría la hiperactividad de un montón de diminutos ‘cores’ difíciles de manejar, frente a un ‘cuore’ de los de ‘sin prisas pero sin pausa’ con sus inherentes capacidades para compartir ‘things’.
Con el tiempo quizás la simultaneidad cuántica se reinvente en un modelo positrónico simple «como el de Asimov :-)» … dejando a la ‘core mania’ en una pura anécdota dentro de la evolución del silicio, con su algorimetrica del paralelismo y asincronía.
Lo mejor esta por venir!!
LoL!
Desde la aparición de Windows 8, se ha escrito mucho sobre la utilización de los espacios de nombres de .NET desde WinRT. Es divertido observar como muchos nos aferramos a estereotipos aparentemente para no tener que cambiar la forma en que utilizamos o hacemos las cosas.
El contenido del siguiente post no es valido si estáis pensando en aplicaciones para la versión RT de Windows… es obvio que difícilmente encontrareis puertos nativos en dispositivos con «RT» ni USB’s de terceras partes con drivers que los soporten… dicho lo cual :
Esta es una de aquellas discusiones en foros y publicaciones en las que justificamos el porque WinRT no dispone de una implementación para utilizar los eternos «serial ports».
Mas que la motivación por escribir un simple post, me mueve la inquietud generada al conversar con un responsable de RD en el que discutíamos sobre la decisión de desarrollar una solución en WPF por las limitaciones de WinRT para soportar la herencia de antiguos dispositivos unidos con algún tipo de «Hardware» cuyos drivers llegaron como mucho a «Windows 7».
De hecho la respuesta oficial, es que Windows 8 y posteriores soportan puertos series «CDC» a con WINUSB… la realidad es que no todos los fabricantes han actualizado el «firmware» para que sus drivers se sustenten en «WinUSB».
Dicho lo cual incluso antes que apareciera la inquietud de acceder a los puertos series nativos desde aplicaciones para la tienda, he utilizado WCF para compartir la comunicación con algún dispositivo de forma concurrente… no olvidéis que al tratarse de una comunicación PeerToPeer si nuestra aplicación «abre» el puerto serie nadie mas podrá acceder a el hasta que liberemos el recurso.
Aquí es donde entra en juego la implementación de un modelo «singlet» que nos permita acceder al envió y recepción de tramas de forma compartida.
Que mas fácil que llamar a un servicio WCF desde Windows 8.x para poder acceder a cualquier objeto que expongamos de .NET, simpre y cuando no estemos en uno de los escenarios donde PCL «Portable Class Library» nos cubra las necesidades.
El siguiente código muestra un punto de partida, entendible, simple y fácil… a petición vuestra podríamos ir desarrollando el tema si es de interés general.
Empezaremos creando un servicio con una simple función de enviar una trama al puerto serie («con total independencia de si es un puerto nativo, CDC USB…etc»)
<ServiceContract()> Public Interface ISerialPortService <OperationContract()> Function PortWrite(frame As String) As String End Interface
Imports WcfSerialPort Public Class SerialPortService Implements ISerialPortService Public Property mySerialPort As New System.IO.Ports.SerialPort Public Function writePort(frame As String) As String Implements ISerialPortService.PortWrite Try mySerialPort.ReadTimeout = 1000 mySerialPort.NewLine = vbCrLf mySerialPort.PortName = "COM4" mySerialPort.BaudRate = 1200 mySerialPort.Open() mySerialPort.Write(frame + vbCrLf) Dim response = ReadResponse() mySerialPort.Close() Return response Catch ex As Exception Return ex.Message End Try End Function Private Function ReadResponse() As String Try Return mySerialPort.ReadLine() Catch ex As Exception Return ex.Message End Try End Function End Class
Una vez tengamos en servicio en marcha solo tendremos que añadir un proyecto nuevo para la tienda y listo!!
Public NotInheritable Class MainPage Inherits Page Private miSerialPort As New WcfSerialPort.SerialPortServiceClient Async Sub Btn_Click(sender As Object, e As RoutedEventArgs) Dim result = Await miSerialPort.PortWriteAsync ("Hello Windows 8.1 App!!") Dim msgbox As New Windows.UI.Popups.MessageDialog(result) Await msgbox.ShowAsync() End Sub End Class
Como veis… no muy difícil para empezar 🙂
Me gustara que continuéis en este post, con vuestras conversaciones. Saludos domingueros!!
PepLluis,
Uniéndose a las ultimas actualizaciones, recién salido del horno ya tenemos disponible la versión de .NET Gadgeteer para VS2013/VS2012 o VS2010.
Os refresco los links : http://gadgeteer.codeplex.com/releases/view/134757
Beta para el SDK-R2 de MicroFramework 4.3 : http://netmf.codeplex.com/releases/view/133285
OpenTech de Microsoft : http://msopentech.com/
NetMF : http://www.netmf.com/
Saludos,
PepLluis,
Después de un periodo de sombra… parece ser que el tirón de IoT vuelve a poner en escena a Microframework y Gadgeteer.
Para los que sintáis curiosidad os dejo un enlace a un «overview» en ch9 posteado hace poquitas horas.
Para los asiduos y seguidores mas que sorprenderos, vale la pena escuchar a Salvador Ramírez (microframework team), creo que aclara direcciones y planes de futuro.
Que lo disfrutéis!
PepLluis,
En los últimos macro-eventos de Microsoft hemos sido testigos de grandes anuncios, compromisos y cambios de orientación que la compañía promete introducir en un futuro casi inmediato. Los primeros discursos de Satya Nadella dejaron definidas de forma clara las líneas que marcan la nueva orientación, y que dicho de paso generan buenas expectativas para un gran numero de desarrolladores deseosos de explorar nuevos horizontes.
Si recopilamos alguno de los mensajes muchas de estas iniciativas están directamente relacionadas con palabras que giran en torno al Cloud, Open Source y obviamente cualquier cosa relacionada con el IoT o el “Internet of yours things”.
Simultáneamente asistimos a una decidida apuesta por “Windows on Devices” integrando plataformas diversas entorno a “SoC’s” con Intel Atom o Quark. Sin duda una ventana enorme para los que apuestan por el internet de las cosas, como uno de los escenarios más propicios para generar potentes oportunidades de tecnología, innovación y negocio.
Muchos de los que seguimos de cerca la progresión de MicroFramework hemos estado durante meses esperando “alguna noticia” que despejara las dudas que se estaban generando sobre los planes que el equipo de MS tenía en su Roadmap. La gran explosión de IoT con WindowsOnDevices y los futuros Azure Intelligent System Services, sumados al hecho de que MicroFramework no estaba soportado en Visual Studio 2013 ponía en tela de juicio cualquier comentario sobre los planes más optimistas.
Pues bien como siempre el silencio y la calma no es más que el preludio de un gran revuelo. Hace pocas horas el equipo de NetMF anunciaba la disponibilidad en BETA del SDK-R2 de MicroFramework para Visual Studio 2013.
Es una gran noticia para la comunidad de NetMF que además viene respaldada por una renovada filosofía… de nuevo grandes cambios, grandes retos! 🙂
El proyecto ha sido asignado al equipo OpenTech de Microsoft : http://msopentech.com/
NetMF se renueva en su site : http://www.netmf.com/
Beta para el SDK-R2 de MicroFramework 4.3 : http://netmf.codeplex.com/releases/view/133285
En cuanto pueda os posteare otro corto con las características que se añadirán a este R2. Saludos, PepLluis,
Continuando con los remix, un antiguo pero recurrente ejemplo solicitado a menudo para enlazar datos a través de binding.
' Respondiendo a como añadir o modificar registros ' de una tabla de SQL con bindings y al viejo estilo ' ' Utilizaremos las columnas de Nombre y Teléfono ' de la tabla ‘Shippers’ ' Después de insertar un nuevo registro, usaremos el ' botón de actualizar para actualizar la BD. Imports System.Data Imports System.Data.SqlClient Public Class miContenedor ' 'Constructores para tabla ‘Shippers’ ' ...con su correspondiente BindingSource Private MiConexion As New SqlConnection(“Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Temp\Northwind\NORTHWND.MDF” + “;Integrated Security=True;Connect Timeout=30;User Instance=True”) Private MiDataSet As New DataSet() Private MiAdaptador As New SqlDataAdapter(“SELECT * FROM Shippers”, MiConexion) Private MiEnlazador As New BindingSource Private Sub Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ' Panel con los textbox para la entrada/modificación Dim Nombre As New TextBox Dim Telefono As New TextBox Dim marcoDatos = New FlowLayoutPanel marcoDatos.Dock = DockStyle.Top marcoDatos.Controls.AddRange(New Control() {Nombre, Telefono}) Me.Controls.AddRange(New Control() {marcoDatos}) ' ' Panel conteniendo los botones de control Dim Avanza As New Button Dim Retrocede As New Button Dim Insertar As New Button Dim Actualizar As New Button Dim Controles As New FlowLayoutPanel Controles.Dock = DockStyle.Bottom Retrocede.Text = “<- Re” Avanza.Text = “Av ->” Insertar.Text = “Insertar” Actualizar.Text = “Actualizar” Controles.Controls.AddRange(New Control() {Retrocede, Avanza, Insertar, Actualizar}) Me.Controls.AddRange(New Control() {Controles}) ' ' Asignar el eventos a las funciones AddHandler Retrocede.Click, AddressOf retroceder AddHandler Avanza.Click, AddressOf Avanzar AddHandler Insertar.Click, AddressOf Nuevo AddHandler Actualizar.Click, AddressOf Actualizacion ' ' Conexión,relleno y asignacion del enlace al datos MiConexion.Open() MiAdaptador.Fill(MiDataSet) MiEnlazador.DataSource = MiDataSet.Tables(0) Dim Micommandbuilder As New SqlCommandBuilder(Me.MiAdaptador) ' ' Enlace de los TextBox a sus omologos en la tabla Dim EnlaceNombre As New Binding(“Text”, MiEnlazador, “CompanyName”) Nombre.DataBindings.Add(EnlaceNombre) Dim EnlaceDireccion As New Binding(“Text”, MiEnlazador, “Phone”) Telefono.DataBindings.Add(EnlaceDireccion) End Sub ' Avanzar un registro dentro del ‘recordset’ :-) Sub Avanzar() MiEnlazador.MoveNext() End Sub ' Retroceder un registro Sub retroceder() MiEnlazador.MovePrevious() End Sub 'Añadir un registro Sub Nuevo() MiEnlazador.AddNew() End Sub ' Actualizar el registro en curso o el recien creado Sub Actualizacion() MiEnlazador.EndEdit() MiAdaptador.Update(CType(Me.MiEnlazador.DataSource, DataTable)) End Sub
Saludos, Pep Lluis,
El cambio de blog ha provocado que algunos de los post mas famosos no puedan visualizarse correctamente. algunos de vosotros me habéis pedido un «Remix» aquí tenéis uno de los mas visitados!
' Principales mandatos para utilizar el puerto serie: Serie = My.Computer.Ports.OpenSerialPort("COM1") 'Constructor ' 'Definir las características de la comunicación Serie.BaudRate = 19200 'velocidad de comunicaciones Serie.DataBits = 8 'Longitud para Byte de datos Serie.Parity = Parity.Even 'paridad(enumeracion parity) Serie.StopBits = StopBits.Two 'Bits parada después datos
' 'Abrir/Control/Liberar Puerto Serie.Open() 'Abrir el puerto Serie Serie.Close() 'Cerrar el Puerto Serie Serie.Dispose() 'Liberar objecto Dim SiNo As Integer SiNo = Serie.IsOpen 'El Puerto esta abierto? Dim Puerto As String Puerto = Serie.PortName 'Nombre del puerto
' 'Manejo y Control de señales Dim Estado As Boolean 'True=Activa / False=Inactiva Estado = Serie.CDHolding 'Estado de la señal carrier detect Estado = Serie.CtsHolding 'Señal Clear to Send Estado = Serie.DsrHolding 'Señal Data Set Ready Serie.DtrEnable = True 'Activar de Data Terminal Ready Serie.RtsEnable = True 'Activar Request To Send
' 'Control Transmission/Recepcion Serie.ReadBufferSize = 1024 'Definir tamaño buffer recepcion Serie.WriteBufferSize = 1024 'Definir tamaño buffer envio Serie.ReadTimeout = 10 'Fuera de tiempo en receción Serie.WriteTimeout = 10 'Fuera de tiempo en transmisión Serie.Handshake = Handshake.XOnXOff 'Control recepcion/envio Serie.DiscardInBuffer() 'Borrar buffer de entrada Serie.DiscardOutBuffer() 'Borrar buffer de salida
' 'Enviar datos Contador = Serie.BytesToWrite 'Bytes en espera de ser escritos Serie.Write("Hola Mundo") 'Enviar una cadena de caracteres Serie.WriteLine("Hola Mundo") 'Enviar una linea
' 'Leer datos Dim Contador as Integer Contador = Serie.BytesToRead 'Bytes en espera de ser leidos Serie.ReadByte() 'Leer un byte Serie.ReadChar() 'Leer un char Serie.ReadLine() 'Leer una linea Serie.ReadExisting() 'Leer datos existentes en buffer
PepLluis :-)