Wednesday, June 23, 2010

Configurar control SELECT como solo lectura

Busqué y busqué la forma de configurar un campo SELECT en HTML como sólo lectura, y luego de tropezarme con algunas soluciones no muy buenas (Como agregar el atrbuto DISABLED al campo y otras), encontré ésta, basada en Jquery:



Espero le sirva a alguien, por que a mi me sirvió de mucho.

Wednesday, June 16, 2010

Actualizar HTC G1 Android 1.5 a 1.6 (cyanogenmod 4.X)

Cyanogenmod es como decir un "mod" de Android, el software (Sistema Operativo) de Google para telefonos móviles (Inicialmente.. ahora por ejemplo está en Google TV), el cual es posible instalar sobre algunos teléfonos (HTC Dream (G1), Magic, the Google Nexus One, and the Motorola DROID). Para éste caso, la actualización que he realizado, es sobre una HTC G1, el cual tenia instalado Android 1.5 (Cupcake) Oficial de Google. Lo interesante de instalar Cyanogenmod, entre otras cosas, es que es la facilidad de tener acceso a "root" del sistema operativo, lo cual, cualquier usuario "intermedio/avanzado" de GNU/Linux sabe que es algo casi que primordial, si se quiere jugar un poco más a fondo con el sistema operativo.

El proceso está claramente descrito en el wiki de la página oficial de Cyanogenmod, pero a primerazo pues si me dio susto por que en muchas partes del wiki alertan de tener cuidado con el procedimiento pues el celular puede quedar totalmente (100%) in-servible, o de "pisa-papel" como literalmente lo escriben en el sitio.

Según el wiki (Aqui el link), las posibles opciones para instalar CyanogenMod son:

  • Actualizando desde un telefono "Vanilla"
  • Actualizando entre las principales versiones de CyanogenMod
  • Actualizando dentro de las principales versiones de CyanogenMod
Primero, "Vanilla" es un termino que usan para referirse a un dispositivo que tenga instalado el software de fábrica, el cual es el caso del mio.

Segundo, las últimas versiones de CM han sido 4.X y 5.X (Estable actualmente) donde la segunda opción actualización indica que se puede hacer el proceso desde una version 4.X a una versión 5.X directamente. Y la tercera indica que se hacer entre las mismas versiones, es decir desde una versión 4.X.a a 4.X.b, sin salirse de la versión PRINCIPAL.

Entonces, sabiendo cual de las opciones debemos escoger, para el caso del G1 salido de fábrica, vamos a escoger la opcion "..Desde un telefono 'Vanilla'", y la opción "Full Update Guide - G1/Dream Firmware to CyanogenMod":

Allí fue entonces cuando me confundí con algo y es por el texto inicial de la página de instalación donde dice que se requiere "DangerSPL", el cual es un proceso con el cual se re-particiona el directorio base del telefono, lo cual es un procedimiento, segun dice, bien delicado.

Con ayuda de hpsaturn y de la gente de #cyanogenmod en irc.freenode.net, logré comprender que: Primero que el proceso DangerSPL es unicamente cuando se desee pasar a versión 5.X, y segundo que el procedimiento mostrado en la página Full Update Guide - G1/Dream Firmware to CyanogenMod, los pasos 1, 2 y 3 son comunes para las dos instalaciones, y es en el 4 "Choosing to install DangerSPL" donde se escoge que versión instalar. Así, que se siguen los pasos hasta ahí.

Luego vamos a la página de instalación 4.X para seguir los pasos 1 y 2 (File Download y Flash Android 1.6.. respectivamente).

Siguiendo esos pasos, puntualmente, ya tendriamos Android 1.6 (CyanogenMod 4.2.15.1).

Espero probar ésta versión por un tiempo para luego subir a la 5.X que según la gente del foro y del IRC, está bastante buena.

NOTA: Pongo los links por que para que repetir lo que en el wiki ya está escrito, por lo cual trato de plasmar los inconvenientes que encontré al momento de comenzar la instalación y comprender el procedimiento.

Bueno, espero no se me pase nada, y cualquier comentario, bien recibido.

Saludos!

Friday, June 11, 2010

C# - Pasar Variable por Referencia

Aqui un ejemplo básico de cómo se hace:




Y esta es la salida al compilar y ejecutar:

Monday, May 3, 2010

JSON + Java + XStream Lib

Ahora, veremos como escribir una cadena formato JSON (JavaScript Object Notation) desde el lenguaje de programación Java con ayuda de la libreria xStream 1.2.2.

import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class classJSON {
public static void main(String[] args) {
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
List order = new ArrayList();
String[][] source = new String[2][2];
source[0][0] = "1";
source[0][1] = "Dream On";
source[1][0] = "2";
source[1][1] = "Love me two times";
for (int i = 0; i <>
Song song = new Song(source[i][0], source[i][1]);
order.add(song);
}
xstream.alias("SONGS", List.class);
String rtn = xstream.toXML(order);
System.out.println(rtn);
}
}


El ejemplo se hizo desde Eclipse (Galileo), Java 1.6.0_19, y como se dijo antes xStream-1.2.2. La clase completa que hace la escritura es:Lo que se hace aqui es basicamente: Se instancia de la clase XStream el objeto xstream enviandole como paraemtro JettisonMappedXmlDriver(), clases proporcionadas por xstream-1.2.2, las cuales son las ecargadas de crear y ajustar el formato de la cadena JSON.


XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);


Una vez tenemos esto, en el ejemplo se hace la prueba con una cadena de texto con 2 dimensiones que puede ser reemplazada por un "ResultSet" recuperado de la consulta a una base de datos o por que no de la información devuelta por un servicio web, por esto se llama la variable "source", es solo un ejemplo.

Recorremos la variable source (ResultSet, Hashtable, ArrayList...etc), y se instancia la clase Song la cual crearemos como sigue:

public class Song {
public String id;
public String title;

public Song(String p_id, String p_title){
id = p_id;
title = p_title;
}
}

Es una simple clase para darle formato a los datos y así el metodo toXML de la clase XStream sepa que datos trae.

Al terminar el ciclo "for" colocamos un "alias" a la cadena JSON para que tenga un nombre descriptivo cada una de las llaves a mostrar.

Por ultimo se llama el método toXML para que genere la cadena JSON la cual es mostrada por pantalla al finalizar la ejecución:

Salida:

{"SONGS":{"Song":[{"id":1,"title":"Dream On"},{"id":2,"title":"Love me two times"}]}}

Muy parecido a los diccionarios en python de por cierto.

Aplicación: Bastante útil para devolver ésta cadena de texto por parte de un servicio web a sus clientes, en vez de usar XML, o mejor dicho, otra alternativa al uso de XML.

Fuentes:


Friday, April 30, 2010

C# + Access 2007

Para esta oportunidad, un simple acceso a M$ Acces 2007 desde C# con .Net framework 2.0

Aqui la clase de acceso a datos:

    class classData
{
private string connString;

public classData()
{
this.getConnStr();
}

public string ConnString
{
get { return connString; }
set { connString = value; }
}

public void getConnStr()
{
this.ConnString = System.Configuration.ConfigurationManager.AppSettings.Get("connStr");
}

public void insertarPersona(string cc, string nom, string ciudad)
{
string sql = "INSERT INTO personas (cedula,nombre, ciudad) VALUES('" + cc + "','" + nom + "','" + ciudad + "')";
OleDbConnection objCon = new OleDbConnection(this.ConnString);
objCon.Open();
OleDbCommand objCmd = new OleDbCommand(sql,objCon);
objCmd.ExecuteNonQuery();
objCon.Close();
}

}
Es simplemente el usar la clase OleDbConnection y OleDbCommand para hacer la ejecucion de la sentencia SQL sobre la base de datos.

Ahora, aqui la clase que consume y llama el metodo de insertarPersona.


class Program
{
static void Main(string[] args)
{
classData objData = new classData();
Console.WriteLine("Digite cedula: ");
string cedula = Console.ReadLine();
Console.WriteLine("Digite nombre: ");
string nombre = Console.ReadLine();
Console.WriteLine("Digite ciudad: ");
string ciudad = Console.ReadLine();
objData.insertarPersona(cedula, nombre, ciudad);
}
}


Es tan sencillo como eso. implementarlo en una solicion Visual Studio 2005 (o cualquier otra que compile el proyecto sobre .Net Framework 2.0 o superior) y ya.

NOTAS:

Cadenas de conexion: http://www.connectionstrings.com/access-2007

Saludos

Sunday, April 11, 2010

Click derecho enviar a correo + Chrome

¿Cómo enviar una página a un contacto por correo usando gmail sin instalar complementos?. Fue la pregunta que me hice, luego de pasarme a chrome y extrañando el Toolbar para firefox :). Pues leyendo un poco fue sencillo hacerlo, con ayuda de Javascript y los bookmarks de Chrome.

Primero me basé en [1], que lo recomendaron en Google Support [2] y a la final poniéndole un poco de [3] se logró hacer que funcionara la cosa.


Con esto resulto el script:

javascript:window.open('https://mail.google.com/mail/?view=cm&ui=2&tf=0&to=&su='+document.title+'&body="'+escape(location.href)+'";');
Poniendo esto en un bookmark de Chrome, podremos enviar alguna página que estemos viendo y nos parezca interesante recomendarla a alguien.

NOTA: No olvidar click en Herramientas (Icono de herramienta en Chrome, esquina superior derecha), y click en "Mostrar siempre la barra de marcadores".

Saludos

Wednesday, February 24, 2010

Netbeans + Apache Tomcat 6.0 + Cannot find setclasspath.bat


En el intento de incursionar en Netbeans con GWT, luego de instalar el plugin GWT para Netbeans, y tratando de subir el servidor Apache Tomcat al momento de ejecutar la aplicación de ejemplo de GWT, me sale el error:

Cannot find C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\setclasspath.bat

Pues aqui el archivo por si a alguien le llega a ocurrir lo mismo.


Saludos

Tuesday, February 23, 2010

Tuesday, February 16, 2010

PHP + JSP + Servlet + ASP conectados a MySQL Server

Que tal Blog

Para la clase de informática II de la especialización en ingenieria de software en la U. Distrital, nos pusieron a escribir el código de conexión a base de datos MySQL desde PHP, JSP, ASP y un Servlet. Luego de pasar unas horas frente al computador escribiendo esto, quice publicar esto en mi blog para quien lo llegue a necesitar.

Aqui [1] encontrarán las fuentes, la base de datos y los drivers de conexión. OJO con el servlet que tiene quemado los datos de conexion. En tal caso ahi se encuentra el .java para recompilar. (Si compila por linea de comando, ojo con el classpath para indicarle donde esta el .jar del driver con la opciones -cp o -classpath ;) )

Espero sea útil para alguien que esté comenzando en el mundo de la programación.

PDT: Disculpas por el mal código, pues fue hecho en unas pocas horas de carrera.


Saludos