Mostrando entradas con la etiqueta Apps. Mostrar todas las entradas
Mostrando entradas con la etiqueta Apps. Mostrar todas las entradas

viernes, 10 de marzo de 2017

Xamarin ¿Dónde comienzo?

Última actualización Marzo de 2017

He conocido mucha gente a la que le interesa aprender sobre Xamarin y me contactan para preguntarme sobre donde pueden encontrar contenido para iniciar a aprender, por esta razón decidí escribir este post.

En esta ocasión solo voy a hablar de contenido online y lo voy a dividir en dos partes, primero hablaré sobre el contenido en inglés del cual hay mucho y luego hablaré un poco del contenido en español, que si bien no hay mucho, podemos encontrar una base para comenzar y aprender algunas cosas.

*Actualización 18/04/2016: Como dato adicional, para los que no sepan programar en C# recomiendo los cursos del canal de youtube de Ti Capacitación  estos son gratuitos, yo hace como 5 años aprendí con el curso Introducción al lenguaje de Programación C#

Contenido en inglés

Si tienes 2000 USD para pagar la suscripción anual puedes comprar esta y dejar de leer todo lo que sigue, Xamarin University ofrece sesiones en vivo y grabadas con temas sobre todos los productos Xamarin, así como de C#, también tiene definido un listado de clases que al cursar dan acceso al examen de certificación. En pocas palabras con la suscripción puedes aprender todo lo básico y muchas cosas avanzadas sobre Xamarin, lo cual es suficiente para crear apps complejas ya solo necesitando consultar cosas específicas en la red.

Como la mayoría de la gente no puede pagar esta cantidad (incluyéndome) o en algunos casos la inversión es muy fuerte para alguien que quiere explorar la plataforma, Xamarin University también tiene algo de material gratuito el cual es suficiente para comenzar, creando una cuenta desde Visual Studio Dev Essentials podemos obtener el código de acceso a estos recursos

jueves, 20 de agosto de 2015

Guardar datos de contacto en una etiqueta NFC con WP 8.1

Hace unos días encontré una etiqueta NFC que tengo desde hace unos años y por curiosidad decidí probar si aun funcionaba. Después de comprobar que aun funciona decidí actualizar mi App, la cual estaba hecha para Windows Phone 8, a Windows Phone 8.1 utilizando la función que sirve para generar una vCard para compartir datos de contacto mediante NFC.

Parte teórica

Elegí esta función sobre otras (escribir un “Hola Mundo” o un enlace a una página web) debido a que el crear una vCard involucra entender de mejor manera un estándar para almacenar datos NFC, voy a tratar de explicarlo de manera muy rápida, dejando algunas fuentes que me sirvieron por si quieren conocer mas a fondo del tema.

El estándar NDEF (Data Exchange Format) creado por el NFC Forum sirve para definir la estructura de datos de aplicación que se transmiten entre dos dispositivos NFC. Por otro lado el NFC Forum también definió el concepto de “NFC Forum Type Tag Operations” el cual sirve para identificar el tipo de operación que va a realizar una TAG NFC.

Para una referencia formal sobre este tema pueden visitar este documento; http://www.nxp.com/documents/other/R_10014.pdf y por supuesto la página del NFC Forum con las especificaciones http://members.nfc-forum.org/specs/spec_list/ 

Ya entrando al tema importante del post, lo primero es tener el formato en que se guardara la información de contacto en la etiqueta NFC, el cual es el siguiente para este ejemplo:

BEGIN:VCARD
VERSION:2.1
FN:
N:;
TEL;CELL:
EMAIL;INTERNET:
END:VCARD

Se pueden agregar mas datos siguiendo el estándar de una vCard, en este caso con la información de Wikipedia es suficiente https://en.wikipedia.org/wiki/VCard

Resumiendo todo lo mencionado anteriormente, lo que se va a hacer el lo que muestra este diagrama tomado del primer pdf sobre NDEF que deje mas arriba
image
  1. La entrada son los datos que se van a almacenar, en este caso los de la tarjeta de contacto
  2. El mensaje NDEF que encapsula lo anterior. Este mensaje tiene la siguiente estructura:
image
Parte importante aquí es que el mensaje define el tipo de dato que contiene, en el PDF se encuentra una lista muy completa de los tipos de dato. Algunos ejemplos (incluido el que usaremos)
image
  1. El NFC Type Tag Platform, para entender mejor esto si hay que leer la especificación del NFC Forum  debido a que habla de las especificaciones de las etiquetas como la memoria, velocidad, etc.
  2. Y finalmente la etiqueta donde se va a almacenar esta información.

Parte practica

Ahora si ya viene el código, para empezar definimos la interfaz XAML de nuestra aplicación, la cual simplemente contiene los campos con los datos (Nombre, apellido, teléfono y e-mail)
<Page
    x:Class="NfcVCard.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:NfcVCard"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">


    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contiene el nombre de la aplicación y el título de la página-->
        <StackPanel Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Text="NFC Writer" Style="{StaticResource SubheaderTextBlockStyle}"/>
            <TextBlock Text="vcard" Margin="9,-7,0,0" Style="{StaticResource HeaderTextBlockStyle}"/>
        </StackPanel>

        <!--ContentPanel. Colocar aquí el contenido adicional-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel>
                <TextBlock>Nombre</TextBlock>
                <TextBox InputScope="NameOrPhoneNumber" x:Name="txtNombre"></TextBox>
                <TextBlock>Apellido</TextBlock>
                <TextBox InputScope="NameOrPhoneNumber" x:Name="txtApellido"></TextBox>
                <TextBlock>Telefono</TextBlock>
                <TextBox InputScope="TelephoneNumber" x:Name="txtTelefono"></TextBox>
                <TextBlock>Mail</TextBlock>
                <TextBox InputScope="EmailSmtpAddress" x:Name="txtMail"></TextBox>
                <Button x:Name="btnEscribir" Click="btnEscribir_Click">Escribir Tag</Button>
            </StackPanel>
        </Grid>
    </Grid>


</Page>



Y el código de funcionalidad es el siguiente:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Networking.Proximity;
using Windows.Storage.Streams;
using Windows.UI.Popups;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=391641

namespace NfcVCard
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;

        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.
        /// This parameter is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // TODO: Prepare page for display here.

            // TODO: If your application contains multiple pages, ensure that you are
            // handling the hardware Back button by registering for the
            // Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
            // If you are using the NavigationHelper provided by some templates,
            // this event is handled for you.

        }

        ProximityDevice _device;
        private void btnEscribir_Click(object sender, RoutedEventArgs e)
        {
            StatusBarProgressIndicator progressbar = StatusBar.GetForCurrentView().ProgressIndicator;
            progressbar.ShowAsync();
            progressbar.Text = "Acerca la etiqueta";
            btnEscribir.IsEnabled = false;

            string nombreCompleto = txtNombre.Text + " " + txtApellido.Text;
            string nombre = txtNombre.Text;
            string apellido = txtApellido.Text;
            string celular = txtTelefono.Text;
            string mail = txtMail.Text;
     //Obtenemos el dispositivo NFC del teléfono
            _device = ProximityDevice.GetDefault();
            //Creamos la tarjeta virtual con el formato que debe ser
            var vcard = string.Format("BEGIN:VCARD\nVERSION:2.1\nFN:{0}\nN:{1};{2}\nTEL;CELL:{3}\nEMAIL;INTERNET:{4}\nEND:VCARD", nombreCompleto, apellido, nombre, celular, mail);
            //El DataWriter que contiene los datos para escribir el mensaje binario a la etiqueta NFC
            var dataWriter = new DataWriter() { UnicodeEncoding = UnicodeEncoding.Utf8 }; dataWriter.WriteString(vcard);
            //Publicamos el mensaje binario en la etiqueta NFC, definimos el tipo de mensaje que es y támbien que método se va a ejecutar al finalizar el guardado
            _device.PublishBinaryMessage("WindowsMime:WriteTag.text/vcard", dataWriter.DetachBuffer(), MesssageTransmitted);
        }

        private async void MesssageTransmitted(ProximityDevice sender, long messageId)
        {
            //Le indicamos al dispositivo que deje de escribir el mensaje
            _device.StopPublishingMessage(messageId);



            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                StatusBarProgressIndicator progressbar = StatusBar.GetForCurrentView().ProgressIndicator;
                progressbar.HideAsync();
                btnEscribir.IsEnabled = true;
                new MessageDialog("Contenido guardado").ShowAsync();
            });
        }
    }
}

Para que lo anterior funcione de manera correcta hay que hacer dos cosas extra, hay que darle los permisos necesarios a la aplicación para que pueda usar el sensor NFC, de lo contrario obtendremos el error

An exception of type 'System.UnauthorizedAccessException' occurred in NfcVCard.ni.EXE but was not handled in user code

Additional information: Access is denied.

Esto se hace en el Manifiesto en la secciones de “Requirements” y “Capabilities”

image

image

En este enlace dejo el código fuente: Proyecto NFC

Aquí también un pequeño video de muestra de como se ve el proyecto en acción y como la etiqueta se puede leer perfectamente desde WP y desde un dispositivo con Android.


sábado, 2 de marzo de 2013

Un desarrollo más WOW con Visual Studio 2012

Durante los últimos meses se estuvieron llevando a cabo sesiones online sobre el desarrollo con Visual Studio 2012, las cuales fueron impartidas por algunos MVPs de Latinoamérica.

Aquí les dejo la lista de sesiones con su respectivo vinculo para poder verla, la verdad es material muy recomendable y lo mejor de todo es que esta en español, cosas que muy pocas  veces vemos cuando hablamos de las ultimas versiones de los productos.

Sin mas que decir aquí la lista.

Rangers Projects - Cesar Solís
Desarrollo de aplicaciones en ambientes heterogéneos - Raúl Guerrero
Desarrollo de aplicaciones modernas con Calidad - Javier Arguello
Desarrollo con Office/SharePoint - Haaron Gonzalez
Nuevas características de desarrollo en Visual Studio 2012 - Carlos Lone
Testing Tools - Gerson García
Desarrollo ágil con Scrum - Miguel Mendoza
Desarrollo con Windows 8 - Miguel Muñoz
Desarrollo Windows Phone - Roberto Alvarado
Gestión de proyectos con TFS - Francisco Fagas
Administración de requerimientos - Francisco Fagas
ALM de punta a punta - Raúl Guerrero

Vía Blog de MVPS de Latam

domingo, 4 de noviembre de 2012

Verificar si nuestra computadora puede ejecutar el Emulador de Windows Phone 8

Para instalar el emulador de Windows Phone 8 es necesario que nuestra PC cumpla con algunos requisitos, los cuales podemos encontrar en a página de descarga del SDK de WP8 http://www.microsoft.com/es-es/download/details.aspx?id=35471


Requisitos del sistema
Sistemas operativos admitidos: Windows 8; Windows 8 Pro
Versiones de cliente Windows 8 de 64 bits (x64)

Hardware:
4 GB de espacio disponible en disco duro
4 GB de RAM
CPU de 64 bits (x64)

Windows Phone 8 Emulator:
Edición Windows 8 Pro o superior
Requiere un procesador que admita la traducción de direcciones de segundo nivel (SLAT)

*Si tu equipo cumple los requisitos de hardware y de sistema operativo, el SDK de Windows Phone 8.0 se instalará y se podrá ejecutar aunque el equipo no cumpla los requisitos de Windows Phone 8 Emulator. Sin embargo, Windows Phone 8 Emulator no funcionará y no podrás implementar ni probar aplicaciones en él.

Los requisitos para el SDK realmente no tienen ninguna complicación, en cambio en el caso del emulador muchos nos preguntamos como comprobar si nuestro equipo admite la virtualización y SLAT y por lo tanto va a poder ejecutarlo, esta es la razón de ser de este post en el cual explicare una manera sencilla de verificar si nuestro procesador soporta la virtualización por hardware y traducción de direcciones de segundo nivel (SLAT).