La Cartelera (Blackberry Application)

Quisiera dedicarle este artículo a los jóvenes de http://roblestech.com y a la vez felicitarles por que están revolucionando el mundo del cine dominicano con su ultimo aplicativo para dispositivos BlackBerry llamado "LA CARTELERA"

A la verdad que estos jóvenes se la comieron al realizar un aplicativo de muy buena calidad y siguiendo todos los estándares de desarrollo, cuando instale la solución inmediatamente fui a mi panel de opciones de aplicaciones y desistale otras aplicaciones que tenia para ver las cartelera de cine dominicanas, pues al compararla con "LA CARTELERA" era como tener la oportunidad de montarme en un Mercedes Benz del 2011 e irme a mi casa en un Toyota Corolla del 1989, la verdad algo totalmente fustrante.

Quiero listar y describir rapidamente las cualidades que posee este aplicativo:

  1. Pesa menos de 160 KB (miren bien son KB no MB)
  2. Listado de Cines en la Pantalla Principal
  3. 150 veces mas rapida que cualquier otra aplicativo similar
  4. Navegacion Sin Espera
  5. Actualizaciones Constantes y Automaticas
  6. Funciona en las Todas las Versiones BlackBerry 8100 y 9000
Simplemente algo fenomenal, te invito a probarla!....

Buenas Nuevas!....

Primeramente quiero darle las gracias a todas las personas que están apoyando este proyecto, espero que les siga ayudando de mucho, gracias los buenos comentarios y correos recibo diariamente, debido a esos comentarios he decidido abrir un poco más el Portal, debido a que me he basado en la tecnología Microsoft únicamente, y algunos de nuestros seguidores quieren que implementemos todo tipo de soluciones, ya que conocen que manejo una buena cantidad de lenguajes de programación y entornos de desarrollo; por lo cual he decidido que también empezare a publicar algunos posts de otras tecnologías, pero el portal siempre lo basare en las tecnologías Microsoft, ya que la considero como una de las mas robustas para el tipo de desarrollo que actualmente hacemos.

Cuento con un amplio experticio en el desarrollo de aplicativos tanto para la Web, Escritorio como Móvil, por lo cual estaremos viendo algunas publicaciones relacionadas a esas áreas, aunque también desarrollo con Robotics de Microsoft, solo tocare los temas de Robótica que me lleguen a mi correo, debido a que es un área bastante amplia y necesitaríamos mucho tiempo y espacio para tratar como se hace cada tema.

Mi Proxima publicacion tratara el tema de "Como Mostrar Datos desde MySQL con PHP", esto a petición de uno de nuestros más fieles seguidores, en el mismo explicare como realizar una consulta en MySQL y desplegar la información en un DataGrid de PHP.

Sigueme por Twitter

A todos los amantes de esta Web, les invito a seguirme a través de Twitter, ahi se enterarán de los últimos artículos que he publicado en mi portal, como también las charlas que dicto, los cursos que estaré impartiendo, y los eventos que frecuentemente participo.

http://www.twitter.com/@omarfrometa

Agrupando Registros con SQL Server 2008

Estaré habciendo mención en las próxima publicaciones de algunas de las nuevas funciones que nos trae SQL Server 2008, me he sentido motivado a escribir sobre los nuevos features de SQL Server 2008, debido al gran numero de preguntas que he recibido a mi correo personal, por lo cual estare listando las mas importantes.

Una característica nueva que tiene la nueva versión de SQL Server, es el nuevo operador GROUPING SETS, que ya existía en otros motores de base de datos tales como Oracle, el cual permite combinar consultas de agrupación distintas en una sola consulta.

Es bueno aclarar que el operador GROUPING SETS es una extensión de la cláusula estándar GROUP BY. Cuando no se requieren todas las agrupaciones posibles que se generan utilizando un operador ROLLUP o CUBE (que ya existían en SQL Server 2005), se debe utilizar GROUPING SETS para especificar sólo las agrupaciones que se deseen. O sea, gracias a GROUPING SETS obtenemos los niveles de agrupación deseados y además nos devuelve el subtotal para cada subconjunto de agrupación.


En pocas palabras podríamos decir que GROUPING SET es mas abarcativo y genérico que ROLLUP o CUBE. Generalmente consultas que usen este tipo de operadores están relacionadas con el análisis de datos, reporting y todo lo relacionado con el mundo la Intelegencias de Negocios.

Les recuero este nuevo operador no viene hacer magia y a solucionar un problema que no se podia solucionar, sino mas bien nos simplifica y optimiza nuestras consultas, por eso es lo importante del mismo, pero quiero aclarar que sin utilizar este operador podiamos generar o encontrar los mismos resultados en SQL Server, pero no con el performance que este nos brinda.


Probemos en una consulta, como siempre utilizare la base de datos de prueba de SQL Server AdventureWorks para realizar este ejemplo:


Lo primero que nos viene a la cabeza para resolver la parte de la agrupación casi siempre es hacer una consulta usando UNION ALL con tres consultas diferentes, una por cada agrupación, seria algo como esto:


Pero podríamos solucionarlo utilizando el operador GROUPING SET, seria algo como esto:



Ahora como podrán ver en este último ejemplo, además de usar el operador GROUPING SETS, hago uso de la función GROUPING en el ORDER BY, esto es para ordenar el resultado por Name y CountryRegionCode.

Esta función (que ya existía en SQL Server 2005), nos indica si una expresión de columna especificada en una lista GROUP BY es agregada o no. GROUPING devuelve 1 para agregado y 0 para no agregado, en el conjunto de resultados.

La ventaja del uso GROUPING SETS no está solo dada por simplificar sintácticamente las consultas, sino también en cuestiones de performance.

Hice unas pruebas para monitorear el uso de recursos (SET STATISTICS IO ON) con 90,000 registros en mi tabla y estos fueron los resultados:


Usando UNION ALL:Table ‘Sales.SalesTerritory’. Scan count 3, logical reads 1728, physical reads 6, read-ahead reads 590, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


Usando GROUPING SETS:Table ‘Sales.SalesTerritory’. Scan count 1, logical reads 576, physical reads 6, read-ahead reads 590, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Como se puede ver, GROUPING SETS hace menor uso de recursos de I/O. Esto se debe a que usando la nueva característica de SQL Server, el motor necesita leer menos paginas de datos, ya que hace el cálculo de agregación de más alto nivel sobre las agregaciones de menor nivel.

SERIES

Este año 2011 vengo con una serie muy buena de tecnicas que nos ayudaran a fortalecer nuestros estilos de programacion, estare mostrando las ultimas tendencias en la programacion, y como disminuir nuestro codigo en un 90%.

Estare publicando en los proximos dias el primer tema de una serie que he denominado "Desde los Ojos de un Hacker", en esta primera serie estare hablando de como proteger nuestras aplicaciones de intrusos y personas malintensionadas.

Cubriremos la seguridad de nuestras aplicaciones en todos los aspectos basandonos en nuestra Capa de Negocios y Nuestra Capa de Datos, mostraremos las fortalezas y debilidades de nuestras aplicaciones tanto para el ambito web como para el de escritorio.

Les doy gracias a todos nuestros fieles seguidores que nos escriben frecuentemente a nuestra direccion electronica como tambien a todas las personas que visitan estos POST cada vez que son publicados en el portal.

Gracias a Todos......

Attentamente,

Omar Frometa

Restaurando una Base de Datos SQL desde un Snapshot

En lo particular comenzare este articulo definiendo segun Books Online lo que es un Snapshot, que en lo particular lo considero como uno de los mas interesantes conceptos utilizados en la actualidad.

Snapshop: es una vista estática de sólo lectura de una base de datos denominada base de datos de origen. Pueden existir varias instantáneas en una base de datos de origen y residir siempre en la misma instancia de servidor que la base de datos. Una instantánea de base de datos es coherente en cuanto a las transacciones con la base de datos de origen tal como existía en el momento de la creación de la instantánea. Una instantánea se mantiene hasta que el propietario de la base de datos la quita explícitamente.

En resumen es una fuente de datos estatica de solo lectura, en la cual podemos consultar informacion de la misma e incluso hacer transacciones en la misma.

En esta ocacion procedere a crear una nueva base de datos la cual llamare OmarFrometa_DB, en el cual voy a crear una nueva tabla y le voy a insertar al menos 5 nuevos valores:



Luego procedere a Crear mi Snapshot en mi base de datos OmarFrometa_DB.


Despues de esto voy a realizarle un Select tanto a mi tabla como a al Snapshot creado, para que asi logren notar su comportamiento.

En otro capitulo seguire ampiando todo lo que podemos hacer con estas fotografias de la base de datos (Snapshot) y asi podremos explotar al maximo este concepto que existe desde la version 2005 de SQL pero que muy pocas personas aun lo estan utilizando.

Aqui les dejo todo el Codigo que Utilice.


USE master
GO

CREATE DATABASE OmarFrometa_DB
GO
USE OmarFrometa_DB
GO

CREATE TABLE Numeros (ID INT, Value VARCHAR(10))
INSERT INTO Numeros VALUES(1, 'Uno');
INSERT INTO Numeros VALUES(2, 'Dos');
INSERT INTO Numeros VALUES(3, 'Tres');
INSERT INTO Numeros VALUES(4, 'Cuatro');
INSERT INTO Numeros VALUES(5, 'Cinco');
GO

CREATE DATABASE SnapshotDB ON
(Name ='OmarFrometa_DB',
FileName='c:\SSOmarFrometa_DB.ss1')
AS SNAPSHOT OF OmarFrometa_DB;
GO

SELECT * FROM OmarFrometa_DB.dbo.Numeros;
SELECT * FROM OmarFrometa_DB.dbo.Numeros;
GO

Como Obtener los Tweets de una Cuenta de Twitter, C#.Net

Estaba desarrollando durante el fin de semana un Manejador de Contenidos personalizado para un Portal muy visitado de República Dominicana, lo cual estoy a cargo de su remodelación, dentro de los cambios me pidieron que necesitaban obtener los últimos Tweets publicados en Twitter desde la cuenta del portal.


Les indicare paso a paso como obtener los Tweets de una cuenta de Twitter.

Toda la programación la basare en un WebSite basado en C#, como Tecnología de Desarrollo y utilizando Visual Studio 2008.


1. Creamos Nuestro Web Site.

2. Procedemos a Crear una Clase en la web que acabamos de crear, la misma la llamaremos Twitter.


3. Se nos preguntara si deseamos agregarla en el Directorio de Clases por Defecto APP_CODE, le indicamos que si y procedemos a codificar la clase.


4. Crearemos un método dentro de nuestra clase que nos regresara la lista de los tweets, a este debemos pasarle los siguientes parámetros: Nombre del Usuario | Cantidad de Mensajes a Devolver.


5. Procederemos a Importas los Name Spaces de System.Configuracion y Linq, para así poder utilizar la sección AppSettings de nuestro Web.Config donde esta la URL para obtener los mensajes de Twitter.


6. Vamos a la pagina donde deseamos mostrar los mensajes, para mostrar los mensajes podríamos utilizar controles como Labels / TextBox / Botones / GridView / DataList, etc., pero en mi caso utilizare un Repeater para mostrar los últimos 3 Tweets y un Literal Control para mostrar el ultimo Mensaje.

7. En el Evento Page_Load de la pagina, escribiremos el código para cargar los mensajes de Twitter aplicación web.

8. Abrimos nuestro archivo de Configuración Web.Config y Agregegamos en la sección AppSettings las siguientes lineas

9. Por ultimo procedemos a Correr nuestra Web Creada y aquí los resultados!...

Redireccionando a una Pagina Segura con C#

Muchas veces en las aplicaciones que desarrollamos, tenemos módulos o paginas que deben de estar cifradas dada a su importancia, muchos utilizan un protocolo de conexion seguro como SSL para realizar esta tarea SSL = Security Socket Layer.

Luego que tenemos ya definido en nuestro sitio el método de cifrado que utilizaremos, les mostrare como pueden redireccionar desde una dirección http a una https, utilizando C#.

Para realizar la Redireccion de paginas, lo que haremos es crear un método que se llamara SecurityProtocol(bool isSecure) el cual aceptara un parámetro Boolean.

Entonces en la pagina que queramos redireccionar ponemos el siguiente código en el Page_Load



protected void Page_Load(object sender, EventArgs e)

    {
        this.SecurityProtocol(true);
    }


Y el metodo Security Protocol Tendria lo Siguiente


public void SecurityProtocol(bool isSecure)
    {
        string redirectUrl = null;

        if (isSecure && !Request.IsSecureConnection)
        {
            redirectUrl = Request.Url.ToString().Replace("http:", "https:");
        }
        else if (!isSecure && Request.IsSecureConnection)
        {
            redirectUrl = Request.Url.ToString().Replace("https:", "http:");
        }

        if (redirectUrl != null)
        {
            Response.Redirect(redirectUrl);
        }
    }


Con esto redireccionaremos la aplicacion que queramos a una pagina que utilice medios de seguridad cifrados.





Llamar un WebServices desde un Store Procedure

En una ocasión un viejo amigo, estaba programando unas aplicaciones con .Net y Sockets, y necesitaba poder invocar un WebServices desde un procedimiento almacenado.


En este articulo compartire esa experiencia, para que otros programadores puedan aprender a invocar un WebServices enviándole parámetros desde un Store Procedure.

1. Creamos Nuestro Proyecto WebServices en Visual Studio.

2. Luego procedemos a crear los métodos que vamos a utilizar en nuestro servicio, en mi caso cree 6 métodos que son: Saludar(string Param1) y este espera un String como parámetro, HelloWord() este no espera ningún parámetro, y los métodos Add, Substract, Proliferation y Divide (int Num1, int Num2) esperan 2 números enteros como parámetros.

3. Procedemos a crear nuestro procedimiento almacenado que tendrá todo el código para invocar el WebServices que acabamos de crear, como en todos mis artículos la base de datos que utilizo es AdventureWorks, que es la base de datos de prueba que trae SQL Server.



4. Luego Publicamos el Servicio Web en nuestro IIS


5. Procedemos a Codificar nuestro Store Procedure con los Datos de Nuestro Servicio Web.


6. En el procedimiento que Creamos, le pasamos un parámetro que es el Parámetro que esta esperando el Método Saludar(), si desean utilizar los otros métodos, deberán crear otro parámetro pues como les mencione anteriormente los otros métodos están esperando 2 parámetros tipo enteros.

Algo también que es muy importante cuando utilizando los procedimientos Almacenados SP_OAMethod este espera el método POST o GET, por defecto casi siempre le enviamos POST, pero si le enviamos este método, no podremos visualizar la lectura del XML que genera nuestro Servicio Web, por lo cual debemos utilizar el Método GET.



7. Procederemos a Probar Nuestro Servicio Web, a través de nuestro navegador, escribimos la dirección del IIS donde esta publicado nuestro Servicio Web. http://localhost/WebServices/Service1.asmx , en el mismo aparecerán todos los métodos que tengamos creados en nuestro Servicio Web.
8. Seleccionamos el Método que vamos a Utilizar e Invocar desde nuestro Procedimiento Almacenado, Saludar(). Luego procedemos a escribir el parámetro que deseamos pasarle al Servicio Web, luego de esto cliqueamos en Invoke.


9. Luego de esto se nos abrirá otra pagina de nuestro navegador, con la información contenida en XML y el parámetro que escribimos.

10. Procedemos a Ejecutar el Procedimiento Almacenado que acabamos de crear para invocar nuestro Servicio Web.


11. Luego de ejecutar nuestro procedimiento y enviarle nuestro parámetro obtendremos el mismo resultado que obtuvimos cuando lo ejecutamos a través de nuestro navegador.

Miren la comparación y notarón que es el mismo resultado.

Aplicaciones Multi-Idiomas

Existen varias maneras de nosotros desarrollar una aplicación Multi-Idioma, ahora la mas correcta a mi parecer es utilizar archivos donde tengamos todo nuestro diccionario de etiquetas en las cuales podamos darle un significado correcto a la traducción.

Lamentablemente aunque los traductores que hay hoy en día en Internet son bastante buenos, aun no traducen 100% la mayoría de la información que necesitamos.

En este articulo mostrare paso a paso como crear una aplicacion multi-lenguaje con Visual Studio.

1. Lo primero que haremos es crear una aplicacion C# en Visual Studio.


2. Procederemos a Diseñar en nuestro formulario una pantalla similar a la que mostrare, esta contiene un Lisbox, un Label y 9 Botones.

3. Luego crearemos 4 nuevos Objetos Resources en nuestros proyectos, le pueden poner el nombre que quieran, luego un punto y lo separan por la cultura que utilizaran, ejemplo MiRecuerso.ES-DO y proceden a rellenar sus campos.

Los Objetos Resources tienen 3 campos principales Name que es donde pondremos el Objeto que queremos renombrar, Value ahi pondremos el valor a remplazar y Comment esto es por si desean guardar algún comentario al respecto.


4. A nuestro Lisbox le introducimos las Culturas que vamos a Utilizar en nuestro aplicativo en nuestro caso utilizamos las siguientes: ES-DO (Español, República Dominicana), EN-US (Ingles, Estados Unidos), JA-JP (Japones, Japón).

5. Luego procederemos a Codificar la Aplicacion.

6. Crearemos un Método que se llamara AplicarIdioma, este es el que se encargara de asignarle los nuevos valores a nuestros controles utilizados.

7. Luego de esto Procederemos a habilitar el Evento SelectedIndexChanged  de nuestro LisBox, y le indicaremos que cada vez que seleccionen un valor diferente a la lista ejecute el siguiente evento.

8. Ya con esto que construida Nuestra aplicacion Multi-Idiomas y solo tenemos que ponerla a Correr para ver los Resultados.

Instalando & Configurando DotNetNuke, Paso a Paso



El internet es una red bastante amplia y va creciendo cada día más, así también van creciendo el número de páginas interactivas y dinámicas en la web, muchas de ellas tienen una función primordial, MANEJAR CONTENIDOS, como la mayoría de los portales que creamos es con esta finalidad, les mostrare paso a paso como obtener un Gestor de Contenidos para su Portal de Internet.

Uno de mis favoritos aparte después de Share Point, es DotNetNuke, un gestor de contenidos escrito en utilizando la tecnología .NET y que ha venido a revolucionar lo que es el estilo de programación de muchas personas que se dedican a la creación de portales de internet.

En mi caso tengo más de 50 sitios creados en DotNetNuke, y me ha servido de mucho, en este artículo mostrare como obtener la versión gratuita de DotNetNuke y de cómo instalarlo y configurarlo en un ordenador.

1. Debemos de buscar la última versión lanzada al mercado del CMS, en este caso la buscamos aquí http://www.dotnetnuke.com/ 

2. Después de estar en el Portal vamos a la sección de Descargas (DOWNLOAD) y seleccionamos la versión a descargar en este caso será la Versión Comunitaria de DNN, para descargar cualquier versión del producto debes de estar registrado. http://www.dotnetnuke.com/tabid/125/default.aspx

3. Luego de haber descargado el archivo que contendrá el manejador de contenidos, procedemos a ir al Disco donde tenemos nuestros Sites de IIS, en mi caso lo tengo en el directorio por defecto C:\inetpub\wwwroot.

4. Procedemos a Descomprimir el Archivo que descargamos del Site.

5. Luego le cambiamos el nombre a la carpeta llamada DotNetNuke_Community_05.04.04_Install por el nombre del portal que queremos montar, en mi caso le pondré DotNetNuke.

6. Procedemos a otorgarle al directorio los permisos necesarios requeridos por el aplicativo que son (Read, Write, and Change Control), para eso le damos un click derecho en el directorio luego a propiedades y vamos a la pestaña de Seguridad.

7. Luego procedemos agregar el usuario Network Service al directorio y le asignamos los permisos o privilegios ya mentados.

8. Después de haberle Asignado los Permisos y Privilegios Correspondiente al Aplicativo, procedemos a Crear el Directorio Virtual en el IIS, vamos al Sitio por Defecto del IIS, expandimos y ahí debe de estar nuestro directorio DotNetNuke, para hacerlo directorio virtual solo tenemos que dar un Click Derecho y seleccionar Convertir Aplicación (Convert to Application) y Confirmamos la Acción.

9. Luego tenemos que indicarle cual será el primer documento que el site leeara, cada vez que sea accedido por parte de los usuarios, para esto en el menú del IIS solo tenemos que darle Click a la Opcion Documento Predeterminado (Default Document).

10. Luego de esto Debemos Renombrar el Archivo Release.Config por Web.Config

11. Después de haber realizado el Cambio del nombre al archivo, procedemos a abrir nuestro Motor de Base de Datos SQL y a crear una base de datos donde alojaremos toda la información de nuestro Site, en nuestro caso la creare con el nombre de DotNetNuke.


12. Luego de haber creado nuestra base de datos estamos listo para ejecutar nuestro manejador de contenidos, para esto abrimos una nueva ventana en nuestro navegador y escribimos la dirección que creamos en el IIS. http://localhost/DotNetNuke/

13. Con este último paso terminamos lo que sería la parte de instalación de DotNetNuke, solo faltaría la parte de configuración, que no es más bien seguir el asistente, también explicare todo concerniente a la configuración del sitio que decidimos crear.

14. Después de haber instalado DotNetNuke, debemos configurarlo, la herramienta cuenta con su asistente que nos guiara durante todo el proceso, y la primera pregunta del mismo es que método utilizaremos para instalar DotNetNuke, existen 3, "Custom", que es el método personalizado, solo instalamos los módulos u opciones que necesitemos para ese sitio, "Typical", es el método común y permite instalar todos los componentes del CMS, y por ultimo existe un módulo "Auto", para utilizar este módulo debemos modificar la cadena de conexión en el Web.Config e indicarle la base de datos donde la instalaremos, por lo regular si es un sitio nuevo utilizo Typical

15. La siguiente pantalla verifica que poseemos los permisos necesarios para configurar el aplicativo en nuestro portal.

16. Luego el siguiente paso es Configurar las Credenciales de nuestro banco de Datos, que utilizaremos para el portal.

- Seleccionamos la Base de Datos a utilizar (Select Database)
- Escribimos el Nombre del Servidor (Server)
- La Base de Datos (Database)
- Integrate Security (Seguridad Integrada, esto es por si contamos con un active directory el cual está manejando la seguridad y verifica las credenciales de mi ordenador y las compara en nuestro servidor de base de datos para saber si cuenta con los privilegios necesario para crear / modificar objetos en las bases de datos)
- Usuario de la base de datos SQL (User ID)
- Contraseña (Password)
- Ejecutar como Propietario (Run as db Owner)
- Prefijo a utilizar en la Base de Datos (Object Qualifier)

17. Luego de este paso se procede a instalar y configurar toda la base de datos, y se hace un vaciado de los Scripts y data en nuestro servidor de base de datos.

18. Procedemos a Configurar las Credenciales del usuario HOST del portal, este usuario cuenta con los privilegios del administrador del sitio, pero también cuenta con privilegios especiales dentro del site, que el administrador no tiene.

19. Luego indicamos las credenciales del administrador, y también le asignamos un título a nuestro portal, ya que como sabemos podemos administrar un sin número de portales con este CMS.

20. El último paso el Lanzar y Publicar el Site, después de haber instalado y configurado nuestro site con éxito, procederemos a darle un vistazo a como se vería a primera vista nuestro nuevo portal.

En un Próximo articulo hablare sobre Cómo Podemos Extender y Personalizar DotNetNuke como Queramos, aquí les dejo como se vería nuestro Portal después de haberlo construido.