feb 25, 2011

Acceso a datos desde WP7 a tablas MySQL

 

Supongo que empiezo la casa por el tejado pero mi primer post sobre desarrollo para Windows Phone 7 va a estar dedicado a la captura de datos de MySQL. El ejemplo que voy a implementar os ayudará a capturar datos desde vuestra aplicación WP7 de una Base de Datos MySQL que tengáis accesible en vuestro servidor.

La verdad es que este tema me ha generado bastantes dolores de cabeza y la auséncia de información en Internet me ha llevado a resumiros el procedimiento que he seguido. Espero que os sea de ayuda. Empezamos:

Bien, el primer concepto que debemos tener en cuenta es que no se puede acceder directamente desde vuestra aplicación de WP7 a las tablas MySQL, o eso es lo que he deducido después de buscar información. Necesitaremos crear un servicio WCF que resumiendo torpemente, es la aplicación puente que utilizaremos para acceder a datos externos alojados en la nube. En esta aplicación implementaremos todas las funciones necesárias para recoger o insertar y las llamaremos más tarde desde nuestra aplicación WP7.

El primer paso será crear un proyecto tipo WCF Service Application. Seguidamente descargaremos el Connector MySQL para .NET desde aquí. Después de instalar el fichero descargado tendremos que añadir la referencia a nuestra aplicación WCF de la DLL MySql.Data.dll que se encuentra en mi caso en la ruta C:\Program Files\MySQL\MySQL Connector Net 6.2.4\Assemblies\.

Ahora ya podemos añadir las referencias a la librería en el fichero Service1.svc.cs.

using System.Data;
using System.Data.Sql;
using System.Data.OleDb;
using MySql.Data.MySqlClient;

Ahora imeplementaré una función que devolverá un valor de la Base de Datos MySQL recibiendo como parámetro un filtro.

namespace WcfService1
{
 
    public class Service1 : IService1
    {
 
        MySqlConnection myConn;
        string a;
 
        public string GetData(int value)
        {
            myConn = new MySqlConnection("user id=usuario; password=contraseña; database=basededatos; server=ipservidor");
            myConn.Open();
            string[] myList = new string[10];
            string strSQL = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA="+value;
 
            MySqlCommand mysqlCmd = new MySqlCommand(strSQL, myConn);
            MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
 
            int i = 0;
            while (mysqlReader.Read())
            {
 
                if (mysqlReader.GetString(1).ToString() != null)
                {
                    a = mysqlReader.GetString(1).ToString();
                    //myList = mysqlReader.GetString(0).ToString();
                }
                else
                {
                    a = null;
                }
                i++;
 
            }
            myConn.Close();
 
            return string.Format(a);
        }
    }
}

Esta función devuelve el nombre de una empresa pasándole como parámetro su ID.  Es una función chorras pero me sirve para el propósito de este post.


Lo siguiente que haremos será vincular el servicio WCF a una aplicación WP7.

Desde nuestro proyecto WCF si hacemos click derecho encima del proyecto tenemos la opción View in Browser (Ver en navegador), aceptamos y se nos abrirá una página web, copiamos la dirección al clipboard.

Creamos un proyecto tipo Windows Phone Application y iremos a Add Service Reference, solo deberemos pegar la dirección web que habíamos copiado anteriormente y ya tendremos vinculado nuestro servicio web.

Como ejemplo he añadido a la aplicación un boón y una área de texto. En el evento click del boón le pasaremos un parámetro id de empresa al web service y el nombre de empresa que devuelve lo pondremos en el campo de texto de la aplicación móvil.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
 
using WindowsPhoneApplication4.ServiceReference1;
 
namespace WindowsPhoneApplication4
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Service1Client client = new Service1Client();
            client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
            client.GetDataAsync(5, client);
        }
 
        void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
        {
            Service1Client client = e.UserState as Service1Client;
            client.GetDataCompleted -= client_GetDataCompleted;
 
            if (e.Error != null)
            {
                //TODO: Gestionar el error
                return;
            }
 
            string getDataResult = e.Result;
            //getDataResult = "You entered: 5";
            textBox1.Text = e.Result;
        }
 
    }
}

Ya solo queda probar nuestra aplicación. Así de cutre y así de complicado se me ha hecho encontrar este método. Espero haberos sido de ayuda.

 

**** Actualización 08/04/11 ****

Se ha añadido el código de la aplicación de test de este capítulo. Podréis observar que lo he variado un poco pero es prácticamente el mismo. Además se han añadido algunas capturas de pantalla nuevas para hacer más comprensible el método.

Archivo: MySQLConnection-1.0.zip (Versión 1.0)

 

**** Actualización 10/05/11 ****

Consulta que devuelve más de un valor

En esta segunda revisión del ejemplo se han añadido las funciones para capturar múltiples valores de un registro de la Base de Datos MySQL.  En este ejemplo os muestro como quedaría la función en nuestro servicio WCF.

public List<Models.Empresa> DatosEmpresa2(int idEmpresa)
        {
            List<Models.Empresa> ListaEmpresas = new List<Models.Empresa>();
 
            myConn = new MySqlConnection(Models.Config.ConnectionString);
            myConn.Open();
 
            string Sql = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA=" + idEmpresa;
 
            MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
            MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
 
            //int i = 0;
            while (mysqlReader.Read())
            {
                if (mysqlReader.GetString(1).ToString() != null)
                {
                    Models.Empresa Item = new Models.Empresa();
                    Item.Id = Convert.ToInt32(mysqlReader.GetString("ID_EMPRESA").ToString());
                    Item.Nombre = mysqlReader.GetString("NOMBRE").ToString();
                    Item.Actividad = mysqlReader.GetString("ACTIVIDAD").ToString();
                    Item.Contacto = mysqlReader.GetString("CONTACTO").ToString();
                    Item.Zona = mysqlReader.GetString("ZONA").ToString();
 
                    ListaEmpresas.Add(Item);
                }
                //i++;
            }
            myConn.Close();
            return ListaEmpresas;
        }

Archivo: MySQLConnection-2.0.zip (Versión 2.0)

 

**** Actualización 20/05/11 ****

Consulta de inserción (INSERT)

Aprovecho para colgar una función de inserción en la Base de Datos. Es una función de ejemplo muy simple pero quizá os pueda servir para vuestros propósitos.

public void InsertItem(string Nombre, string Actividad, string Contacto)
        {
            myConn = new MySqlConnection(Models.Config.ConnectionString);
            myConn.Open();
 
            String Sql = "INSERT INTO EMPRESAS (NOMBRE, ACTIVIDAD, CONTACTO) VALUES ( " +
                "'" + Nombre + "', '" + Actividad + "', '" + Contacto + "')";
 
            MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
            mysqlCmd.ExecuteNonQuery();
        }

Y este sería el código de la aplicación WP7 que llama a la función de insertar. Está testeado y a mi personalmente me ha funcionado. Es un código muy simple, mediante el evento de un botón se inserta en la BBDD MySQL el valor de 3 campos de texto.

private void InsertButton_Click(object sender, RoutedEventArgs e)
        {
            Service1Client client = new Service1Client();
 
            client.InsertItemAsync(textBox3.Text, textBox4.Text, textBox5.Text);
 
        }

Actualizo el fichero con el código testeado.

Archivo: MySQLConnection-3.0.zip

PD: El proyecto WCF no podréis crearlo sin la plantilla del proyecto instalada y la mala notícia es que no viene con Windows Phone Toolkit. Necesitaréis descargarla o tener el Visual Studio completo.

 

nov 18, 2010

Comienzo rápido con Zend Framework

Cansado de programar a pelo en PHP al final me decidí a adentrarme en el maravilloso mundo de Zend Framework. De lo primero que te das cuenta es que la información que existe en español en la red es muy pobre. Eso me ha llevado a empezar a escribir este post y espero que os sea de alguna utilidad.

ZF es un framework creado por los mismos creadores de PHP y eso, quieras que no, da confianza a la hora de escoger el framwork que quieres utilizar. No me voy a adentrar en la explicación de que es un framwork ni que es ZF porque para eso ya hay muchas línias escritas en Internet. Empezaremos explicando como crear un proyecto vacío (quickstart) con la herramienta Zend Tool en Windows.

Al final de realizar muchas pruebas siguiendo los pasos de la web de ZF descubrí que crear un proyecto vacío de Zend Framwork no es tan complicado. En mi caso tengo un hosting de pago que no me permite acceder vía ssh de manera fácil o sea que, para crear mi plantilla desde el servidor lo vi complicado. No me quedaba más remedio que hacerlo desde mi Pc y después subirlo al hosting. Estos son los pasos que seguí:

1) Instalar Xampp. Con este paso se nos instalará Apache y PHP (necesario) entre otras cosas.

2) Ir a la consola de MS-DOS de Windows (ejecutar->cmd) y adentrarnos en el directorio c:\xampp\php

3) Ejecutaremos: zf create project  quickstart. Después de esto se nos ha creado una carpeta quickstart con todo el proyecto ZF vacío dentro.

4) Descargaremos la última versión de ZF y copiaremos la carpeta Zend dentro de la carpeta library de nuestro proyecto vacío.

5) Subiremos a nuestro hosting el proyecto y podremos ver si funciona accediendo desde el navegador a nuestro proyecto /public.

Hasta aquí la primera entrega de la serie de posts que pretendo escribir sobre este Framework a medida que me vaya familiarizando con él.

oct 29, 2010

Auto Kindle eBook Converter, convierte tus eBooks

Auto Kindle eBook Converter es un programa en fase Beta que te ayudará a convertir ebooks a formato MOBI, un formato comprensible para tu Kindle.

Es compatible con los formatos PDF, HTML, LIT, PDB y los archivos CHM. El programa abre un explorador de archivos de Windows. Se debe elegir el archivo que deseas convertir, pulsas Abrir y a continuación seleccionarás la carpeta de destino. La conversión es bastante rápida, aunque esto depende de la longitud del documento. Cuando haya finalizado deberás conectar el Kindle a tu ordenador y copiar el archivo al dispositivo.

Se trata de un software libre y además puedes descargarte el código si eres programador. No tiene interfaz gráfica pero es para lo que es, un utilidad más que nos puede ayudar en ciertos momentos.

Descarga

oct 28, 2010

Activar visor de imágenes en Kindle

El visor de imágenes de Kindle es una opción que Amazon no ha hecho pública y la verdad es que todavía me pregunto el por qué. Supongo que debe estar en fase Beta y su rendimiento no es el mejor posible. Uno de los motivos podría ser que páginas es sustancialmente lento. De todas maneras os explico la manera de activarlo y de esa manera poder visualizar imágenes y cómics en vuestro Kindle.

Pasos a seguir para activar el visor de imágenes:

1) Conectamos nuestro Kindle al Pc mediante el cable USB.

2) Una vez mapeada la unidad en nuestra máquina crearemos una carpeta llamada pictures en la raíz del dispositivo. Es decir, se crará la carpeta en el mismo directorio que documents, music y audible.

3) Crearemos dentro de pictures una carpeta contenedora y pondremos ahí nuestras imágenes. En otro artículo ya explicamos como insertar cómics en nuestro Kindle y este se basa en lo mismo esencialmente. Un ejemplo, si queremos crear un album de un viaje, crearemos dentro de pictures una carpeta llamada viaje 2010 y dentro pondremos nuestras imágenes. En la lista de libros de Kindle aparecerá Viaje 2010 y accedermos anuestras fotos.

4) Si al copiar las imágenes no nos saliese nada en el menú Home de Kindle, con Alt+Z en el teclado actualizaremos el menú.

Por cierto, Amazon Kindle soporta los formatos de imágen jpg, png y gif.

mar 19, 2010

En defensa de los derechos fundamentales en Internet

El Consejo de Ministros aprobará hoy viernes en Sevilla – en pleno puente de San José – ese engendro llamado “Ley de Economía Sostenible”, que incluye la conocida como “Ley Sinde”, que permitirá el cierre de páginas web en sólo cuatro días. Me sumo a los blogs que republican hoy el manifiesto conjunto del pasado mes de diciembre. Es la primera vez en este blog que se repite una entrada, pero la extrema gravedad del tema lo merece. Si tienes página en la red, si publicaste en su momento el manifiesto, si la red es para ti algo importante; te invito a hacer lo mismo:

Ante la inclusión en el Poyectroyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que:

  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
mar 19, 2010

VB.NET Quick Reference

Os dejo una guía rápida de VB.NET bastante útil. Os la podéis descargar en PDF desde este link.

VB.NET Quick Reference

oct 2, 2009

¿Puede Javascript enviar un formulario por mail?

email-icon¿Puede Javascript enviar un formulario por mail? La respuesta es no, Javascript no puede enviar un formulario por mail de una manera directa. Últimamente he estado buscando información acerca de este tema porque necesitaba enviar los datos de un formulario por mail sin utilizar PHP ni ASP.

El motivo principal es por seguridad. Si hubiese alguna manera directa de enviar mails con Javascript se podría utilizar para programar scripts que enviasen mails cuando visitas una página cualquiera. Esto revelaría tu dirección de mail a terceras personas sin que tuvieses constancia. Esto llenaría tu bandeja de entrada de spam.

Para poder salir del apuro puedes usar la sentencia ‘mailto:‘. Puedes usar la sentencia ‘mailto:’ en el campo action del formulario. De esta manera cuando el usuario pulse el botón de submit del form se abrirá una redacción de mail con los datos del formulario.

<form action=&quot;mailto:tu@tudominio.com&quot; enctype="text/plain" method="post">
Nombre:<input name="nombre" type="text" />
Email:<input name="Email" type="text" />
<input name="submit" type="submit" value="Submit" />
</form>

Cómo reinstalar GRUB desde un Live CD de Ubuntu

Hace poco tiempo intenté instalar Mac OSx en mi Pc. No pude conseguirlo por compatibilidad de hardware así que instalé de nuevo Windows, pero bueno esa es otra guerra.

El problema llegó al intentar acceder al disco donde tenía instalado Linux, GRUB había desaparecido y al arrancar el PC no aparecía la opción para iniciar desde Linux. Era como si el disco duro donde estaba instalado hubiera desaparecido.

En este tutorial vamos a aprender como recuperar o reinstalar nuestro gestor de arranque GRUB. Nos será de utilidad si hemos perdido el GRUB por haber instalado Windows o si está presentando fallos.

1- Lo primero que debemos hacer es iniciar el ordenador desde el Live CD.

2- Abrir un terminal y ejecutar:

$sudo fdisk -l


3- Nos aparecerá una lista con la organización del disco duro, buscamos en la última columna donde indique “Linux” y miramos a qué partición corresponde. En mi caso era /dev/sda2.

Puede que no aparezca “sda”, podemos encontrarnos con “hda”. La razón es porque el término “sda” corresponde con discos duros del tipo SATA mientras que “hda” corresponde a discos duros IDE.

Lo siguente que vamos a hacer es montar la partición donde se encuentra Linux en una nueva

4- Creamos el nuevo directorio:

$sudo mkdir /mnt/ubuntu


5- Montamos la partición:

$sudo mount /dev/sda2 /mnt/ubuntu


Ya tenemos montada la partición, ahora vamos a reinstalar GRUB:

$sudo grub-install –root-directory=/mnt/ubuntu /dev/sda (Sin número de partición)

$sudo chroot /mnt/ubuntu

$update-grub


Por último sólo queda reiniciar el PC y volverá a aperecernos el menú de GRUB.

Páginas pedagógicas para los más pequeños

La búsqueda de algo concreto en Internet puede ser como el parto de King Kong si no estás muy habituado a ello. E incluso estándolo la mayoría de veces te vuelves loco de página en página y de foro en foro. Por este motivo y porque he perdido muchas horas de mi vida me parece justo ir poniendo los recursos que me parezcan útiles y que en cierta manera os puedan ahorrar tiempo navegando.

ninos_traviesos

Esta vez me ha parecido muy interesante un recopilatorio de recursos infantiles en la red. Páginas pedagógicas para los más pequeños y ¿por qué no? os pueden servir para que estén tranquilitos un rato, ¿nain?. El trabajo lo ha realizado la gente de YoLlegoAFinDeMes.com y aquí os dejo el link.

Vía | La vuelta al cole en Internet: recursos educativos gratuitos

Recopilación de tutoriales de Photoshop

Llevaba tiempo pensando en hacer un recopilatorio de tutoriales de Photoshop que os puedan ser de utilidad y con los que podréis aprender bastantes cosillas para hacer vuestros pinitos en el tema. La vuelta de vacaciones está siendo bastante dura y que mejor manera

  1. Diseño de un logo profesional con Photoshop (PhotoshopAndYou.com)
  2. 30 tutoriales de Photoshop con estilo retro y vintage (WebDesignLedger.com)
  3. Cómo hacer una persona invisible con Photoshop (TutorialsPalace.com)
  4. Cómo crear un efecto con humo en Photoshop (10Steps.sg)
  5. Ataque de dragones 3D en Photoshop (Abduzeedo.com)
  6. Crear tipografía colorida (Photoshop-Garden.com)
  7. Creando botones simples y atractivos con Photoshop (Sixrevisions.com)
  8. Técnicas para cortar cabello con Photoshop (SpoonGraphics)
  9. 60 tutoriales para retoque fotográfico (VandelayDesign)
  10. Cómo crear un bonsai en Photoshop (Pylexes)
Páginas:«1234567...13»