viernes, noviembre 30, 2007

Certificación Java

Preparándome para la certificación Java tratare de ir poniendo los ejercicios que van realizándose dentro del curso.

Problema:

public class TestVehicle {
public static void main(String[] args) {

// Create a vehicle that can handle 10,000 kilograms weight
System.out.println("Creating a vehicle with a 10,000kg maximum load.");
Vehicle vehicle = new Vehicle(10000.0);

// Add a few boxes
System.out.println("Add box #1 (500kg)");
vehicle.load = vehicle.load + 500.0;

System.out.println("Add box #2 (250kg)");
vehicle.load = vehicle.load + 250.0;

System.out.println("Add box #3 (5000kg)");
vehicle.load = vehicle.load + 5000.0;

System.out.println("Add box #4 (4000kg)");
vehicle.load = vehicle.load + 4000.0;

System.out.println("Add box #5 (300kg)");
vehicle.load = vehicle.load + 300.0;

// Print out the final vehicle load
System.out.println("Vehicle load is " + vehicle.getLoad() + " kg");
}
}



Solución:

public class Vehicle {

public double load,maxLoad;

public Vehicle(double maxLoad) {

this.maxLoad=maxLoad;

}

public double getLoad() {

return this.load;

}

public double getMaxload() {

return this.maxLoad;

}

}
Listo!

Notas del Tour Tecnológico de Microsoft en Veracruz

Ayer se realizó en el puerto de Veracruz el evento Tour Tecnológico 2007 de MSDN .

De entrada Jaime Sánchez de Microsoft platico sobre las aplicaciones disponibles de Live.com, dio una breve explicación sobre Writer, Messenger, Mail, Galería Fotográfica, Control Parental, etc. Lo cual no fue muy novedoso, pero en el marco del evento estuvo bien, aprendí que se pueden hacer fotos panorámicas, un punto mas para instalar esta aplicación.

Afirmo que los resultado de las búsquedas de live.com son mejores que en Google, comentando que se mejoraron los servicios de indexación y la interfaz para leer los resultados. Obviamente ya estuve haciendo algunas pruebas, y debo decir que sí, efectivamente ha mejorado bastante, lo pondré de regreso a mi barra de Firefox. Algo interesante es que pusieron la información de encarta como una de las fuentes principales.

No importa que persona sea, de que empresa venga, que lenguaje ocupe, si se trata de algún desarrollador, siempre, siempre, el Visual Notepad es indispensable, no será momento de mejorar estar herramienta en Windows?. Efectivamente Jaime lo usó para explicar que la generación de archivos de Office 2007, basados en XML se pueden realizar dentro del mismo .Net mediante

system.xml;
system.package;



Usando un convertidor del lado de cliente, se puede evitar los problemas de licenciamiento. Por cierto que fui el que levantó la mano para responder a la pregunta de como generar archivos de xml desde un servidor. Y claro es mediante los mime types dentro de un asp o asp.net. Dijo que el inconveniente de realizar esto de esta forma es el asunto de las licencias, aquí entre nos nunca me he puesto a investigar este asunto, asi que en los desarrollos que tuve que generar archivos de Excel, mmm... no se tienen licencia alguna. No se si reírme o preocuparme.


Menciono que existe mucha información en su blog sobre Visual Studio Team, como buen nerd que soy, ya la he revisado en ocasiones anteriores, y no recuerdo haber visto ese post. Tendré que darme una sumergida. Recomendó mucho el blog de Brian Keller, ¡Caray tanta información tan poco tiempo!.


Después se paso a UX, ya habiendo visto su presentación del blog, pues me aburrí. Pero sin embargo la hace divertida. Me pareció un poco comercial de Office 2007 y Windows Vista, entendible. Jaime habló mucho del choque de mundos entre diseñador y desarrollador. Afortunadamente no termino de considerarme un uno ni otro, es posible que yo sea un monstruo. Me preocupa mucho que al rato los clientes quieran tener combos con gráficos y animaciones, de por si es difícil cobrar software, ahora con esto. No vayamos muy lejos, tengo que realizar un sitio web con fondo dorado, pégale duro a la teoría del color y a la usabilidad.


Me gusto mucho la parte en donde comenzó a realizar un pequeño player con Expression Blend, ya me pondré a jugar de nuevo con él, en particular si el fin de semana instalo el VS2008 Express. Ya que no cuento con una MSDN Suscription. Super ejemplo librería británica: http://ttpdownload.bl.uk/


Ya con Expression Blend me surgió una idea para un juego. Si tengo tiempo le dedicaré unas horas. Ya que no he instalado VS2008 no sabia que no se pueden crear animaciones y transformaciones a los archivos XAML de manera sencilla, es forzoso tener otra herramienta para estos fines.


Durante el receso Jaime se juyó. Y nos dejaron a la de gente de la comunidad .Net Veracruz. Participación de Miguel Ortíz hablando de smart devices. En mis notas solo tengo dibujos. Después Tomas Ortíz, narró una historia de como empezó a trabajar el verano del '98 con visual studio y ahora ya maneja VS2008, bien Tomas. Explico perfectamente que es Net 3.5, me enteré que Rosario es la nueva versión después de Orcas. Puso un ejemplo sencillo pero cool de LINQ y C#.


Hice mi pregunta acerca de la creación de propiedades de una clase orientada a lenguaje VB, pero no sabia... tengo que investigar.


Fin de la sesión de la mañana.


Tarde con Rubén Colomo, al igual que con Jaime Sanchez, he leído su blog. Me cae que soy nerd.


Forefront seguridad para empresas grandes, muy interesante el tema pero honestamente no creo que vaya a utilizar pronto esta solución, sigo pensando que la seguridad es importante, pero no tanto para los jefes como lo son reportes que muestren los gastos o las perdidas de algún departamento de la empresa, por poner un ejemplo. Por mi encantado de poner un solucion asi, pero difícilmente tengo clientes que puedan costearse una solución de este tipo. A lo mas se llega  un Active Directory con algunas políticas. Me impacto que usara 5 máquinas virtuales en una laptop de 2 procesadores y solo con 2Gb de memoria, quien lo hubiera pensado. Eso, si cuando instaló el bonito IIS7, no terminaba y no terminaba.


Términos nuevos para mi sobre seguridad:



  1. Seguridad Básica. Una instalación de Windows 2008 por omisión usando Active Directory

  2. Seguridad Racionalizada. Agregar políticas a Active Directory

  3. Seguridad de Monitoreo. Monitorear los servicios de seguridad.

  4. Seguridad Dinamica. Automatizar las tareas de seguridad.

Tal como lo plantea Rubén.


IIS 7 modular con FastCGI, y solo para windows 2008... :S


Finalmente varios vídeos sobre los servicios de Office Communications, combinando Telefonía, Video, Correo electrónico, Mensajería, etc. Sueña México, sueña.


Lo malo del evento:



  • La poca participación de la gente de aquí del puerto, no se si es apatía, o desconocimiento.

  • No se habló de MVC.

  • Que no me dejaron sabritas.. :S

Lo bueno del evento:



  • Que vino gente que esta en un buen nivel de Microsoft, y que se interesa porque la gente de México haga desarrollo, solo leer sus blogs.

  • Los regalos de CDC... un aplauso.

  • Que nos deja soñando lo que se puede realizar, siempre y cuando existieran mejores conexiones de Internet. Algún día RoundTable (Y).

martes, noviembre 20, 2007

Tip: Cambiando CakePHP para la flexión de palabras irregulares.

En esta ocasión veremos una sencilla forma de realizar una flexión gramatical dentro de CakePHP para lograr que nuestra estructura mantenga una correcta descripción de los elementos de nuestras entidades dentro de una aplicación.

CakePHP es un marco de desarrollo para aplicaciones de creación ágiles, basado en los patrones de MVC (Modelos, Vistas y Controles). CakePHP toma el esquema de una base de datos y crea los objetos MVC, con lo cual se tiene de manera muy sencilla una aplicación, que cierto no cumple con todos los requerimiento de la aplicación, por otra parte desahoga la manipulación sencilla y directa de la base de datos.

Para esto es muy importante considerar ciertas recomendaciones gramaticales al momento de generar nuestro esquema de base de datos:

  1. La tabla es un conjunto de registros, por lo cual si estamos guardando direcciones, la tabla deberá llamarse asi: "direcciones"
  2. La llave primaria debiera ser entonces llamada de forma singular y con un sufijo de "_id", para el caso: "direccion_id"
  3. El primer campo deberá ser "direccion" y a continuacion los campo restantes.
  4. Si queremos incluir una llave primaria externa, entonces deberemos llamarla con el sufijo "_id", para nuestro caso "provincias_id".

¿Qué pasa cuando tratamos de crear nuestro MVC?

CakePHP como varios marcos de desarrollo, basan la creación en lo anterior mencionado, y uno de los problemas es singularizar las palabras irregulares, para nuestro caso esto se puede ilustrar:

  • Modelo: direccione.php
  • Controlador: direcciones_controller.php
  • Vista: direccione.html

Por omision CakePHP considera las "s" como el plural de nuestro campo. Para nuestro ejemplo, el problema reside en el uso de "direccione", el cual no corresponde a una ortografía correcta. Una alternativa para solucionar esto es colocar "direccions" en lugar de "direcciones", pero esto de ninguna manera se ve atractivo. Y provoca problemas secundarios en el manejo de las aplicaciones.

La respuesta se encuentra en el archivo de configuración de "inflections.php", en él se pueden realizar diferentes modificaciones, que permitirán colocar un par de palabras para estos casos:

 *  $irregularPlural = array('atlas' => 'atlases', 'beef' => 'beefs', 'brother' => 'brothers')
 
$irregularPlural = array('direccion' => 'direcciones', 'pais' => 'paises');



Al volver a crear nuestro MVC con CakePHP, la estructura quedara:



  • Modelo: direccion.php

  • Controlador: direcciones_controller.php

  • Vista: direccion.html

Listo!

Tienda en línea de Apple México

Por fin abren la tienda de Apple en México, ahora si a pedir los regalos favoritos de Mac. Ya podremos grabar nuestros iPods sin costo adicional. Los precios no son tan atractivos, pero supongo que es la antesala a lo que sera la venta de los iPhone.

De todos modos, uno de los principales atractivos es la MacBook Pro, que fue considerada la mejor laptop para ejecutar Windows Vista.

http://www.apple.com/mexicostore/

Listo!

lunes, noviembre 19, 2007

Lanzamiento de Visual Studio 2008 gratuita

Con el lanzamiento de Visual Studio 2008 RTM para descargar mediante una suscripción MSD, también se acaba de liberar la versión Express Edition, la cual se puede obtener de forma gratuita:

http://www.microsoft.com/express/download/

viernes, noviembre 16, 2007

Aplicaciones Windows Live

Estoy escribiendo desde la versión liberada de Windows Live Writer, funciona maravilloso. Puedo escribir a varios de los blogs que tengo por ahí y lo mas importante he usado esta herramienta como un complemento para aquellos clientes que han decidido usar WordPress como la plataforma para manejar su sitio Web.

(No es por nada pero la ventana de dialogo para la actualización al blog remoto, ha logrado apantallar, se que es una simpleza, pero por increíble que parezca la gente lo ve mágico.... shhh!).

Obtuve la nueva versión desde el sitio de descarga, me topé que en realidad lo que baje es el instalador de aplicaciones Live.  ¿Qué quiere decir esto?, Bueno, pues, resulta que con el mismo instalador puedo actualizar o agregar varias aplicaciones que están saliendo del entorno Live:

  1. Live Messenger, quien no conoce messenger?
  2. Live Mail, la evolución de Outlook Express
  3. Live Toolbar, la competencia del google toolbar.
  4. Live Photo Gallery, la versión release de Windows Max ;)
  5. Live OneCare Child Protection, para la protección de menores.

Todo esto en un solo instalador, y gratuito (siempre y cuando tu máquina tenga windows xp o vista... :|)

Son un puñado de aplicaciones que en especial complementan a Windows XP, pues creo que algunas de ellas, de alguna manera ya están incluidas en Windows Vista.

Esta versión de Live Writer, me permite revisar la ortografía de una manera muy sencilla y en español, :D. Creo que en definitiva nunca mas usaré Word... solo necesito algo que reemplace a Excel... :D.

La otra herramienta que me interesó, es Photo Gallery esperaba que fuera igual o mas parecido a Windows Max, pero la herramienta es bastante rapida para el control de las fotos, y ademas permite etiquetarlas y documentarlas. Vale la pena.

Listo!

¿Cómo editar diccionario de Firefox?

Firefox cuenta con un add-on que permite revisar la ortografía del texto que se vaya colocando en los campos de textos dentro de las paginas o ventanas del navegador. Lo cual es muy practico, ya que usualmente no pongo acentos cuando escribo. Ya sea con papel y lápiz o con el teclado, me gusta comerme los acentos.

Uno de los problemas que he encontrado con el add-on es cuando escribo alguna palabra que ingresé mediante la opción de "Agregar al diccionario",  la palabra la pone tal como se había agregado, es decir en minúsculas, en mayúsculas o como un titulo. Lo cual hace que tenga que en ocasiones rescribir la palabra.

ffaddondic

Creo que el add-on debería tener esta funcionalidad, pero... no me voy a poner a hacerlo... espero que alguna nueva versión lo haga en el futuro.

Me es más sencillo colocar la palabra en el archivo que guarda las palabras del diccionario personal, el cual se encuentra en una de las carpetas de windows:

C:\Documents and Settings\vgarcia\Datos de programa\Mozilla\Firefox\Profiles\7emcp7xs.default



el archivo es  "persdict.dat"


Se abre el archivo en un editor de textos y se agrega las palabras correspondientes.


Se guarda y reiniciar Firefox. El resultado es:


ffaddondic2


Listo!

viernes, noviembre 09, 2007

Windows LiveID Authentication

Leo en el blog de Luis Daniel Soto que ya se libero la version de Windows LiveID Authentication, yo estuve haciendo pruebas, pedi mi AppKey y toda la cosa, pero resulta que lo unico que te manda es un token de 16 digitos o algo asi y listo.

En un principio pensé que con este servicio, me olvidaria de crear un registro para EM, o mejor dicho, quitaria esa parte, ya que no estoy usando Membership, pense que seria codigo que limpiaria la aplicacion, pero honestamente ni siquiera me manda el nombre y apellido de la persona de regreso.

Y estuve leyendo documentacion y curiosamente el webservice me puede mandar de regreso sus contactos, pero no su informacion, no me agradaria poner en la aplicacion "Hola 124128374128, bienvenido a nuestro sitio"... :S

Le dare una revisada por segunda ocasion para ver si puedo rescatar algo de este servicio para la aplicacion.

Listo!

Ejemplo de uso de los controles MS CUI

Aqui va un poco de código de la aplicacion que actualmente estoy haciendo, en la cual estoy incorporando los controles de MS CUI, usando como base de datos MySQL y no XML como el ejemplo que trae la documentación.

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim intIDMedico As Integer
Dim intIDPaciente As Integer
Dim odsPacientes As Data.DataSet
Dim odsDireccion As Data.DataSet
Dim dsPacientes As New Pacientes
Dim dsDireccion As New Direcciones
Dim opcionGenero As String
If Not Request.Cookies("IDMedico") Is Nothing Then
intIDMedico = Server.HtmlEncode(Request.Cookies("IDMedico").Value)
End If
If Not Request.QueryString("ID") Is Nothing Then
intIDPaciente = Request.QueryString("ID")
Response.Cookies("IDPaciente").Value = intIDPaciente
Else
If Not Request.Cookies("IDPaciente") Is Nothing Then
intIDPaciente = Server.HtmlEncode(Request.Cookies("IDPaciente").Value)
End If

End If

odsAntecedentes.SelectParameters("intIDPaciente").DefaultValue = intIDPaciente
odsPacientes = dsPacientes.obtenerPorIDPaciente(intIDPaciente)

'Llenar datos del paciente
opcionGenero = odsPacientes.Tables(0).Rows(0).Item("Genero").ToString
If opcionGenero = "F" Then
PatientBanner1.Gender = NhsCui.Toolkit.PatientGender.Female
PatientBanner1.PatientImage = "/images/generic-female.gif"
ImageButtonModificar.ImageUrl = "~/images/pacientes/modificarPacientesFem.gif"

Else
PatientBanner1.Gender = NhsCui.Toolkit.PatientGender.Male
PatientBanner1.PatientImage = "/images/generic-male.gif"
ImageButtonModificar.ImageUrl = "~/images/pacientes/modificarPacientesMas.gif"
End If
If Not IsDBNull(odsPacientes.Tables(0).Rows(0).Item("Foto")) Then
PatientBanner1.PatientImage = "/images/pacientes/" & odsPacientes.Tables(0).Rows(0).Item("Foto")
End If
PatientBanner1.GivenName = odsPacientes.Tables(0).Rows(0).Item("Nombre").ToString
PatientBanner1.FamilyName = odsPacientes.Tables(0).Rows(0).Item("ApellidoPaterno").ToString & " " & odsPacientes.Tables(0).Rows(0).Item("ApellidoMaterno").ToString
PatientBanner1.DateOfBirth = odsPacientes.Tables(0).Rows(0).Item("FechaNacimiento").ToString
PatientBanner1.Identifier = odsPacientes.Tables(0).Rows(0).Item("NumeroIdentificacion").ToString
PatientBanner1.Title = odsPacientes.Tables(0).Rows(0).Item("Titulo").ToString
PatientBanner1.MobilePhoneNumber = odsPacientes.Tables(0).Rows(0).Item("TelefonoCelular").ToString
PatientBanner1.WorkPhoneNumber = odsPacientes.Tables(0).Rows(0).Item("Telefono2").ToString
PatientBanner1.HomePhoneNumber = odsPacientes.Tables(0).Rows(0).Item("Telefono").ToString
PatientBanner1.EmailAddress = odsPacientes.Tables(0).Rows(0).Item("Email").ToString

End Sub




 La verdad es que el control trabaja relindo (dirian los Args), tengo un par de archivos que estan haciendo las conexiones a MySQL mediante objetos. Todo esto con VB, y no en C# como todo el mundo:

Imports Microsoft.VisualBasic
Imports System.Web
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data
Imports MySql.Data.MySqlClient
Imports System
Imports System.Configuration

Public Class Pacientes

Imports System.Data.SqlClient

Public Function obtenerPorIDPaciente(ByVal IDPaciente As Integer) As DataSet
Dim conn As New MySqlConnection
Dim myCommand As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
Dim myData As New DataSet
Dim SQL As String
Dim opcion As Boolean

SQL = "SELECT * FROM pacientes WHERE IDPaciente=" & IDPaciente.ToString
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("emConnectionString").ConnectionString

Try
conn.Open()

Try
myCommand.Connection = conn
myCommand.CommandText = SQL

myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)

If (myData Is DBNull.Value) Then
opcion = True
Else
opcion = False
End If

Catch myerror As MySqlException
'Response.Write("There was an error reading from the database: " & myerror.Message)
End Try
Catch myerror As MySqlException
'Response.Write("Error connecting to the database: " & myerror.Message)
Finally
'If conn.State <> ConnectionState.Closed Then

'End If
conn.Close()
End Try
Return myData
End FunctionPublic Class Pacientes

End Class



 


La pantalla se ve de lujo (eso digo yo):


expediaMedicus - Datos Generales del Paciente

Health Vault SDK no en primera version.

Tiene como un mes que esta disponible el SDK de Health Vault de Microsoft, enseguida lo descargue de su sitio y empece a jugar con él.

En principio pense que me seria de mucha ayuda para la aplicacion de expedientes medicos que estoy realizando, y que en un par de ocasiones he comentado en este blog. El problema ha sido la poca documentacion que existe en cuanto a su uso, no veo mucha interaccion en el foro, casi olvidado al igual que la parte de MS CUI, que al principio vi que mucha gente lo descargo de codeplex, pero se ha ido quedando resagado.

Regresando a Health Vault, uno de los problemas que he visto ha sido que por lo pronto no es internacional, ojalá y sea pronto el hecho que se pueda utilizar en cualquier parte del mundo. Lo bueno es que me ha obligado a desarrollar una aplicacion pensando en el mercado de EEUU. Lo cual no habia contemplado.

Me sigo retirando del tema, total que he tenido algo de problemas en integrar lo que ya tenia de ExpediaMedicus con el Health Vault, en especial el asunto de las clases que trae el SDK, pues tiene mas metodos y propiedades de lo que yo habia diseñado en EM. Sobretodo que se basa mucho en usar XML para estar llenar los datos.

Quisiera ver una version terminada pronto de ExpediaMedicus, por lo que no podré integrar este SDK. Espero que en una futura version y conun poco de madurez de HealthVault en la parte de internalizacion la pueda integrar.

Pronto saldra la version de Google Health, la competencia. Sera mejor o peor?

Listo!

Nuevo Plugin de Wordpress: WP-Kwicks

Este es un plugin que permite usar mediante la libreria de Mootools un menu de Kwicks. Lo primero es obtener el plugin y descargarlo WP-Plugin Kwick,
Se requiere contar con la libreria de Mootools. La pueden obtener en http://www.mootools.net/download
recomiendo obtener la version completa de la libreria.Se descomprime el archivo en la carpeta de plugins, /wp-content/plugins/ , solo se requieren dos archivos :

  • kwicks.php
  • kwicks.css

Se activa el plugin desde el panel de administracion de wordpress, y a continuacion se tiene que configurar las opciones del plugin. Solo se tiene que ir a Opciones de wordpress y existe un nuevo boton llamado "kwicks options", se coloca el path de la libreria mootools.js, y los valores que se desea para la lista. Considerando el archivo css, los valores para deberian ser:

  • normal:110
  • small:90
  • full:120

Se puede jugar con estos valores. Pero recordar modificar el archivo kwicks.css.

Ahora en el tema que esten usando solo deben colocar la lista, ya sea de posts o de categorias o cualquier lista que vayan a usar de la siguiente manera:

<div id="kwicks_container">
<ul id="kwicks">
<?php wp_list_cats('sort_column=name&hierarchical=0'); ?>
</ul>
</div>



Demo: http://www.llanura.com

Listo!