Archive for the ‘Programación’ Category

SQLite en JAVA con JDBC

Bueno esta vez pude hacer andar algo que desde hace tiempo tenia ganas, y lo más loco es que no me llevo tiempo ni nada: anduvo perfecto (salvo por un error humano jajajaa).

Bueno la motivación para usar SQLite en JAVA es que nos permite tener una Estructura Eficiente y Flexible sin que nos preocupemos por diseñar alguna por nuestra cuenta, y no dependamos de un Servidor de SQL (local o remoto) en el momento de trabajar con los datos.

SQLite ha crecido mucho, es una libreria escrita en C que permite almacenar enormes cantidades de datos, en su versión 3 permite almacenar una BD de 2 Teras!!,  y es compatible con SQL 92. Lo usan muchas Empresas de Software dedicadas a Mobiles y otras en general: Mozila (para Firefox), Symbian (SO para Moviles),  Open Office,  Android (Sistema Movil de Google), etc…

Y bueno arranque bajándome el Driver JDBC para SQLite desde aca. Luego me bajé un administrador de SQLite (SQLite Studio) sencillo pero completo para un uso regular, que nos permita:

  1. Crear una BD,
  2. Definir sus tablas  y cargar campos
  3. Exportar a SQL, HTML o XML
  4. Opcionalmente ejecutar SQL

Todos estos requisitos, con una interfaz entendible, actualizado y multiplataforma los cumplio SQLite Studio. Bájenselo es gratis ;) .

Ejecutar con: ./Documents/sqlitestudio-2.0.5.bin

Lo usé para crear una BD sencilla (principal.db) que tuviera una única tabla “persona” que tuviera los campos:  Id (clave primaria y  autoincremental), nombre, apellido y descripción. Todos String, salvo Id declarado como Integer. Cargue unas personas, y fui al Eclipse a configurarlo.

En el Eclipse agregue al Proyecto el Driver (.jar),  haciendo ultimo boton del mouse en el proyecto y selecionando: Build Path > Add Library > User Library , y me dio opciones para cargar el jar y ponerle un nombre a la librería. En NetBeans: Clic derecho en el proyecto > Properties > Libraries > Add JAR/Folder y seleccionar el archivo sqlitejdbc-v056.jar, que no podrá ser movido a otra ruta luego de este paso.


Una vez hecho esto coloque la DB en el proyecto asi le queda local, osea  en el directorio donde se ejecuta, y escribí un ejemplo que permite agregar una Persona (pidiendo los datos con JOptionPane.showInputDialog()) y luego lista todo en Consola. En NetBeans que así: /home/roby/NetBeansProjects/JavaApplication1/principal.db.

Aca se los dejo:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class Main {
	public static void main(String[] args){
		try {
			Class.forName("org.sqlite.JDBC");
		}
		catch (ClassNotFoundException e) {
			System.out.println(e.getMessage());
		}

		try {
			Connection conexion = DriverManager.getConnection("jdbc:sqlite:principal.db");
			Statement consulta = conexion.createStatement();

			// Pedimos Los datos para una Nueva Persona via Dialogs
			String nombre,apellido,descripcion;

			nombre= JOptionPane.showInputDialog(null,"Nombre","Nueva Persona",JOptionPane.NO_OPTION);
			apellido= JOptionPane.showInputDialog(null,"Apellido","Nueva Persona",JOptionPane.NO_OPTION);
			descripcion= JOptionPane.showInputDialog(null,"Descripcion","Nueva Persona",JOptionPane.NO_OPTION);

			consulta.executeUpdate("insert into persona values(null,'"+nombre+"', '"+apellido+"', '"+descripcion+"');");

			// Visualizamos todos los registros
			ResultSet resultado = consulta.executeQuery("select * from persona;");

			System.out.println("Id\tNombre\tApellido\tDescripcion");
			while (resultado.next()) {
				System.out.println(
					resultado.getInt(1)+"\t"+
					resultado.getString("nombre") + "\t"+
					resultado.getString("Apellido")+"\t\t"+
					resultado.getString("Descripcion")
				);
			}

			//Cerramos las conexiones
			consulta.close();
			resultado.close();
			conexion.close();			

		} catch (SQLException e) {
			System.out.println(e.getMessage());
			System.out.println("Estado:"+e.getSQLState());
		}
	}
}

Que tras ejecutarse, y dependiendo de que completen, muestra algo asi:

Id	Nombre	Apellido	Descripcion
1	Alberto	Castro		Ejemplo
2	Pepe	Fernandez	Segunda Persona ;)
3	Diego	Torres		Musico
7	Persona	Nueva		Nueva Persona jejejee

Asi que esto motiva a escribir aplicaciones que simplemente usen SQL todo el tiempo, que no es algo dificil pero sí implica saber modelar bien. Si llegan a modelar así usando SQL piensen que el día de mañana pueden migrar de db guardado en su PC a un Servidor Remoto, y del programa solo tendrian que cambiar la URL de conexion y llamar al Driver apropiado (MySQL, Microsoft SQL Server, etc…), algo que motiva aun más su uso.

Ah, algunos errores que pueden saltar con respecto a la Conexion, más espcificamente a la URL, son:

  • opening db: ‘ruta a la db‘ permiso denegado,  ó bien
  • No se puede acceder a la Tabla X,

Ambas significan que definimos mal la URL y apuntamos a cualquier lado, lo cual (en mi caso) genera un archivo .db en el lugar “apuntado”.  En Linux por ejemplo una url completa seria algo asi:  “jdbc:sqlite:/home/TU_USUARIO/base.db” con esto no tuve problemas, aunque en el ejemplo que muestro  yo la usaba local al proyecto.

Fuente | http://www.vagobit.com.ar/2010/05/20/sqlite-en-java-con-jdbc/

Crear pendriver autoarrancable con Linux usando Lili USB Creatorun

Crea una unidad autoarrancable con Linux gracias a  Lili USB CreatorGracias a el abaratamiento de la tecnología no es de extrañar que muchos de nosotros tengamos más de un pendrive por casa muerto de risa sin saber que hacer muy bien con él. Vamos comprando pendrives de más capacidad conforme más barato son y los que ya no usamos pues ahí se quedan.

Una forma interesante de darle uso es instalar ahí una distribución de Linux autoarrancable para poder ejecutarla en cualquier ordenador para hacer pruebas o para poder llevar nuestro pequeño sistema operativo allá donde vayamos, con nuestros documentos y aplicaciones favoritas. Gracias a Lili USB Creator podremos hacerlo de una forma muy sencilla.

Lili USB Creator es una aplicación para Windows que hará precisamente eso. Indicándole una serie de parámetros, la aplicación nos formateará nuestro pendrive y meterá ahí la distribución de Linux que queramos. Lamentablemente no soporta cualquier distribución de Linux, pero la lista es bastante extensa.

Otro punto muy interesante de Lili USB Creator es que a la hora de elegir la fuente donde tenemos el sistema que queremos pasar al pendrive podremos elegir entre una imagen en formato ISO, IMG o ZIP, en CD o bien descargarla directamente a través de la aplicación. Y este último punto es el que más me ha gustado.

Seguir leyendo

Atomic Icon Gallery

http://extensions.joomla.org/extensions/photos-a-images/photo-gallery/11246

Recuperar archivos eliminados usando Kalysto (Linux)

Disco dañado en sdb1.
# sudo apt-get install make gcc g++ ddrescue
# sudo wget http://www.kalysto.org/pkg/dd_rhelp-0.1.2.tar.gz
# sudo cd dd_rhelp-0.1.2
# ./dd_rhelp /dev/sdb1 sdb1.img
Creará sdb1.img en el directorio actual, que podrá montarse:
# mount -o loop sdb1.img /media/imagen
Comprobar posibles errores (para partición ext3):
# fsck -y sdb1.img
Restaurar la imagen:       # dd_rhelp sdb1.img /dev/sdb1

Otra forma:

# sudo apt-get install ddrescue

# dd_rescue /dev/sdb1  /home/roby/imagen.img (disco rígido)

# dd_rescue /dev/sr0 /home/roby/imagen.img (cdrom)

Crear carpeta /home/roby/recuperados donde se guardarán lso datos recuperados.

# foremost -i /home/roby/imagen.img -o /home/roby/recuperados/

H4ck m3

Hemos tenido una semana curiosa desde que Mr. Bean apareció en la web de la Presidencia Española en la Unión Europea y los medios de comunicación publicaron titulares polémicos y alarmistas sin consultar antes con expertos en la materia.

El equipo de SbD llegó a tiempo para informar de lo que realmente había ocurrido, y para explicar mejor este tipo de vulnerabilidad buscó a Wally por diversas zonas del país.

Si estáis interesados en la búsqueda de vulnerabilidades, podéis demostrar vuestra destreza haciendo uso de aplicaciones que han sido diseñadas para aprender y practicar las lecciones de seguridad.

Estas aplicaciones han sido pensadas para enseñar a profesionales de la seguridad, arquitectos y desarrolladores cómo crear software seguro.

A continuación os dejo una lista con algunas de ellas para que disfrutéis un rato aprendiendo:

Fuente: Security by Default

Agregar color y etiqueta H1 al título de un artículo Joomla

As most SEO experts believe, H1 tag on a website article title is given more weight by search engines, particularly Google. I believe it too. Most of my articles here at JoomlaHacks.com comes out on page one in Google on every keywords I targeted. But Joomla does not tag the article title with H1. Instead they enclose it with <td class=»contentheading»></td>. Here’s a short tutorial hack on how you can enclose it with H1 tag.

Seguir leyendo

Tarjeta de referencia de Netbeans

http://refcardz.dzone.com/refcardz/essential-netbeans-platform?oid=hom15839

Código para Internet Explorer, comentarios para el resto

<p><!--[if IE]>
According to the conditional comment this is Internet Explorer<br />
<![endif]-->

 Seguir leyendo 

Caracteres especiales en Internet Explorer 6

Los acentos, eñes y caracteres en español no se verán y serán reemplazados por otros símbolos. Para corregir este problema, añadir la siguiente línea en el encabezado del archivo html (o php).

<meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″>

PNG transparentes en Internet Explorer 6 usando Joomla

Paso 1

Crear el archivo pngfix.js con el siguiente código y guardarlo en el directorio principal de Joomla (/public_html/):

/*
 
Correctly handle PNG transparency in Win IE 5.5 & 6.
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.

Use in <HEAD> with DEFER keyword wrapped in conditional comments:
<!--[if lt IE 7]>
<script defer type="text/javascript" src="pngfix.js"></script>
<![endif]-->

*/

var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])

if ((version >= 5.5) && (document.body.filters)) 
{
   for(var i=0; i<document.images.length; i++)
   {
      var img = document.images[i]
      var imgName = img.src.toUpperCase()
      if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
      {
         var imgID = (img.id) ? "id='" + img.id + "' " : ""
         var imgClass = (img.className) ? "class='" + img.className + "' " : ""
         var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
         var imgStyle = "display:inline-block;" + img.style.cssText 
         if (img.align == "left") imgStyle = "float:left;" + imgStyle
         if (img.align == "right") imgStyle = "float:right;" + imgStyle
         if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
         var strNewHTML = "<span " + imgID + imgClass + imgTitle
         + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
         + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
         + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
         img.outerHTML = strNewHTML
         i = i-1
      }
   }
}

Paso 2: Archivo .css (/public_html/templates/dposs_template/style.css)

Antes:

a.logo {
   width:82px;
   height:102px;
   float:left;
   margin-top:5px;
   margin-left:15px;
   background-image:url(images/logo.png);
   background-repeat:no-repeat;
}

Después:

a.logo {
   width:82px;
   height:102px;
   float:left;
   margin-top:5px;
   margin-left:15px;
   background-repeat:no-repeat;
   background-image:url(images/logo.png)!important;
   background-image: none;
   filter: none !important;
   filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="templates/dposs_template/images/logo.png");
}

Fuente: Anieto2K