Páginas: Anterior 1 2 3 4 5 6 7 8 ...13 14 15 Siguiente

Actualizar Ubuntu Karmic Koala 9.10 a Ubuntu Lucid Lynx 10.04

7 11 2009
karmic-lucid

Estos días se esta preparando la nueva versión de Ubuntu, pero todavía no esta disponible mediante el comando update-manager -d. Si quieres o necesitas actualizar a lo último de Ubuntu (bajo tu responsabilidad), puedes ejecutar la actualización en una sola línea.

1
sudo sed -i 's/karmic/lucid/g' /etc/apt/sources.list && sudo aptitude update && sudo aptitude dist-upgrade

Este comando cambiara tus repositorios de karmic a lucid y actualizará los repositorios e instalará los nuevos paquetes.

Cuando este disponible la manera tradicional, simplemente ejecuta:

1
2
sudo aptitude install update-manager-core
sudo do-release-upgrade -d

Otra manera de hacerlo con Perl, y haciendo comprobaciones de si habrá fallos o no:

1
2
3
4
5
6
7
8
9
10
11
12
# Primero asegurarte de que tu actual versión es la última y mayor
sudo aptitude update
sudo aptitude safe-upgrade 
 
# Cambiar el nombre de los repositorios utilizando Perl
perl -p -i.karmic -e 's/karmic/lucid/' /etc/apt/sources.list 
 
# Iniciar la actualización a la nueva versión
sudo aptitude update
sudo aptitude install dpkg aptitude apt
sudo aptitude safe-upgrade
sudo aptitude full-upgrade
VN:F [1.7.4_987]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


JDBC y HSQLDB: crear bases de datos con Java y el motor de base de datos de OpenOffice

19 10 2009
java-jdbc-hsqldb-openoffice

HSQLDB es un sistema de bases de datos relacional SQL escrito en Java, de unos 600 kb usado por aplicaciones como OpenOffice. Dispone de un controlador JDBC y ofrece un pequeño y rápido sistema de bases de datos que gestiona tablas basadas en disco y memoria con un modo servidor y embebido, además de incluir un pequeño servidor web,  herramientas de manejo y de consulta basadas en memoria que pueden correr en forma de aplicaciones.

En Ubuntu para usuarlo es necesario instalar el servidor hsqldb:

1
sudo apt-get install hsqldb-server

A continuación expondré un pequeño ejemplo no muy sofisticado para mostrar un posible uso básico. Presupongo un cierto conocimiento en Java y de bases de datos, asi como del lenguaje SQL.

Explicare unas breves líneas de cada parte del código sin profundizar demasiado, ya que el código esta bastante estructurado y es casi auto-explicativo para alguien que tenga ciertos conocimientos en la materia.

También ciertas partes del código o mensajes están en inglés, esto es así, porque generalmente estoy acostumbrado a hacerlo de tal modo (y para mí es una buena práctica de uso hacerlo), de todas formas no es un inglés demasiado complicado.

?Descargar BDprac.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
import java.util.Properties;
 
public class BDprac
{
    static Connection con  = null;
    static Statement  st   = null;  
    static ResultSet  res  = null; 
    static String     sql  = null;
    private static final String DBH = "jdbc:hsqldb:file:src/bd";
    // With memory: "jdbc:hsqldb:mem:bdname"
 
    public static void main(String args[]) throws IOException
    {
        loadHSQLDB();
        connectDB();
        createStatement();
        dropTables();
        createTables();
        restoreDB();
        menu();
        closeHSQLDB();
    }
 
    public static void loadHSQLDB()
    {
        System.out.println("* Starting...");
        try
        {
            Class.forName("org.hsqldb.jdbcDriver"); //Load HSQLDB driver
            System.out.println("* Loading HSQLDB driver...");
        } 
        catch(Exception e)
        {  
            System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
            e.printStackTrace();
            return;  
        } 
    }
 
    public static void connectDB()
    {
        try
        {   // Connect to the database or create if it don't exist 
            con = DriverManager.getConnection(DBH); 
            System.out.println("* Creating HSQLDB connection...");
        }
        catch(Exception e)
        {
            System.err.println("Error: " + e.getMessage());
            return;
        }
    }
 
    public static void createStatement()
    {
        try
        {
            st  = con.createStatement(); 
        }
        catch (Exception e)
        {  
            System.err.println("Error: createStatement: " + e.getMessage());   
            return;
        }
    }
 
    public static void dropTables()
    {
        try 
        {   // Drop tables
            st.executeUpdate("DROP TABLE IF EXISTS stusub;DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS subject;");
            System.out.println("* Drop table if exists...");
        }
        catch (Exception e)
        {  
            System.err.println("Warning: drop table: " + e.getMessage());   
        }  
    }
 
    public static void createTables()
    {
        try 
        {   // Create tables
            sql = "CREATE TABLE student ( " +
                                            "id         INTEGER NOT NULL PRIMARY KEY, " +
                                            "name       VARCHAR(25) NOT NULL, " +
                                            "lastname   VARCHAR(100), " +
                                            "address    VARCHAR(100), " +
                                            "city       VARCHAR(100), " +
                                            "pcode      VARCHAR(5), " +
                                            "email      VARCHAR(80), " +
                                            "mobile     VARCHAR(50), " +
                                            "subject VARCHAR(40)," +
                                            "CONSTRAINT UNIQUE_STU UNIQUE(name)" +
                                         ");";  
            st.executeUpdate(sql);  
            System.out.println("* Creating student table...");
 
            sql = "CREATE TABLE subject ( " +
                                            "id         INTEGER NOT NULL PRIMARY KEY, " +
                                            "name       VARCHAR(100) NOT NULL, " +
                                            "CONSTRAINT UNIQUE_SUB UNIQUE(name)" +
                                         ");";  
            st.executeUpdate(sql);  
            System.out.println("* Creating subject table...");
 
            sql = "CREATE TABLE stusub ( " +
                                            "id             INTEGER NOT NULL PRIMARY KEY, " +
                                            "subject        INTEGER NOT NULL, " +
                                            "student       INTEGER NOT NULL, " +
                                            "FOREIGN KEY (student) REFERENCES student(id), " +
                                            "FOREIGN KEY (subject) REFERENCES subject(id), " +
                                            "CONSTRAINT UNIQUE_STUSUB UNIQUE(subject, student)" +
                                         ");";  
            st.executeUpdate(sql);  
            System.out.println("* Creating student-subject table...");
        } 
        catch (Exception e)
        {  
            System.err.println("Warning: CREATE TABLE: " + e.getMessage());   
        }
    }
 
    public static void restoreDB()
    {
        try 
        {   // Restore the database  
            st.executeUpdate("DELETE FROM stusub;DELETE FROM student;DELETE FROM subject;");
            System.out.println("* Restore the original databases, removing all previous inserting data.");
        }
        catch (Exception e)
        {  
            System.err.println("Warning: error on vacuum tables: " + e.getMessage());   
        } 
    }
 
    public static void menu()
    {
        boolean exit = false;
        boolean insert = false;
        int option;
 
        while(!exit)
        {
            System.out.println("\t.: Menu :.\n" +
                               "\t0 - Salir\n" +
                               "\t1 - Insertar alumnos y asignaturas por defecto.\n" +
                               "\t2 - Modificar el nombre de una asignatura (0 - Literatura).\n" +
                               "\t3 - Consultar alumnos por apellido.\n" +
                               "\t4 - Listar todos los alumnos.\n" +
                               "\t5 - Listar todas las asignaturas.\n"
                               );  
 
            try
            {        
                System.out.print("Introduzca una opción numérica:");
                option = Integer.parseInt(read());                   
            }
            catch(NumberFormatException ex){
                System.out.println("La opción no es un número.");
                option = -1;
            }
 
            switch(option)
            {
                case 0:
                    exit = true;
                break;
                case 1:
                    if(!insert)
                    {
                        insertData();
                        insert = true;
                        System.out.println("Datos correctamente insertados.\n");
                    }
                    else System.out.println("Datos ya insertados previamente.\n");
                break;
                case 2:
                    if(!insert)
                    {
                        System.out.println("Deben insertarse datos previamente.");
                    }
                    else
                    {
                        System.out.print("Introduzca el nuevo nombre para la asignatura 'Literatura':");
                        updateSubject(read());
                    }
                break;
                case 3:
                    if(!insert)
                    {
                        System.out.println("Deben insertarse datos previamente.");
                    }
                    else
                    {
                        System.out.print("Introduzca el apellido a consultar:");
                        showSubjectByLastName(read());
                    }
                break;
                case 4:
                    if(!insert)
                    {
                        System.out.println("Deben insertarse datos previamente.");
                    }
                    else
                    {
                        showStudents(); 
                    }
                break;
                case 5:
                    if(!insert)
                    {
                        System.out.println("Deben insertarse datos previamente.");
                    }
                    else
                    {
                        showSubjects();
                    }
                break;
                default:
                    System.out.println("Opcion incorrecta.\n");
                break;
            }
        }
    }
 
    public static void closeHSQLDB()
    {
        // Save temporal data and close
        try
        {
            st = con.createStatement();  
            st.executeUpdate("SHUTDOWN");  
            st.close(); 
        }
        catch(Exception e)
        {
            System.out.println("Error: save temporal data" + e.getMessage());
        }
 
        try
        {
            con.close();
        }
        catch(Exception e)
        {
            System.out.println("Error: " + e.getMessage());
            e.printStackTrace();
            return; 
        }
    }
 
    public static String read()
    {
        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            return br.readLine();
        }
        catch(Exception e)
        { 
            System.out.println("Error en la lectura de datos:\n");
            e.printStackTrace();
            return "";
        }
    }
 
    public static void insertData()
    {
        // Insert data  
        try 
        { 
            //Insert subject
            st.executeUpdate("INSERT INTO subject VALUES ('0', 'Literatura')");  
            st.executeUpdate("INSERT INTO subject VALUES ('1', 'Ciencia')");  
            st.executeUpdate("INSERT INTO subject VALUES ('2', 'Redes')");  
 
            //Insert student
            st.executeUpdate("INSERT INTO student VALUES ('0', 'Juan', 'Garrido', 'Sol, 12', 'Sevilla', '13206', 'j.garrido@gmail.com', '609555321', '0')");  
            st.executeUpdate("INSERT INTO student VALUES ('1', 'Luis', 'Garrido', 'Flor, 5', 'Melilla', '43712', 'l.garrido@gmail.com', '615827343', '0')");  
            st.executeUpdate("INSERT INTO student VALUES ('2', 'Teresa', 'Garcia', 'Mata, 18', 'Madrid', '28045', 'tere.garcia@gmail.com', '678123687', '1')");  
 
            //Foreign keys stusub
            st.executeUpdate("INSERT INTO stusub VALUES ('0', '0', '0')");  
            st.executeUpdate("INSERT INTO stusub VALUES ('1', '0', '1')");  
            st.executeUpdate("INSERT INTO stusub VALUES ('2', '1', '2')");  
        }
        catch (Exception e)
        {  
            System.err.println("Warning: error on insert data: " + e.getMessage());   
            e.printStackTrace();
            return; 
        } 
    }
 
    public static void showStudents()
    {
        try 
        { 
            // Mostramos por pantalla todos los alumnos de la tabla  
            res = st.executeQuery("SELECT * FROM student INNER JOIN subject ON student.subject = subject.id");  
            System.out.println("ID\tNombre\tApellido Direccion\tCiudad\tCodigo Postal\t\tEmail\t\tMovil\t\tAsignatura\n" + 
                               "-------------------------------------------------------------------------------------------" + 
                               "--------------------------");  
            while (res.next())
            {  
                System.out.println(res.getInt("id") + "\t" + 
                                   res.getString("name") + "\t" + 
                                   res.getString("lastname") + "\t " + 
                                   res.getString("address") + "\t" + 
                                   res.getString("city") + "\t" + 
                                   res.getString("pcode") + "\t\t" + 
                                   res.getString("email") + "\t" + 
                                   res.getString("mobile") + "\t" + 
                                   res.getString("subject"));
            }
 
            // Free memory
            res.close(); 
        }
        catch (Exception e)
        {  
            System.err.println("Warning: SELECT JOIN student: " + e.getMessage());   
        }
    }
 
    public static void showSubjectByLastName(String lastname)
    {
        try 
        { 
            // Mostramos por pantalla todos los alumnos de la tabla  
            res = st.executeQuery("SELECT * FROM student WHERE lastname = '" + lastname + "'");  
            System.out.println("ID\tNombre\tApellido Direccion\tCiudad\tCodigo Postal\t\tEmail\t\tMovil\t\tAsignatura\n" + 
                               "-------------------------------------------------------------------------------------------" + 
                               "--------------------------");  
            while (res.next())
            {  
                System.out.println(res.getInt("id") + "\t" + 
                                   res.getString("name") + "\t" + 
                                   res.getString("lastname") + "\t " + 
                                   res.getString("address") + "\t" + 
                                   res.getString("city") + "\t" + 
                                   res.getString("pcode") + "\t\t" + 
                                   res.getString("email") + "\t" + 
                                   res.getString("mobile") + "\t" + 
                                   res.getString("subject"));
            }
 
            // Free memory
            res.close(); 
        }
        catch (Exception e)
        {  
            System.err.println("Warning: SELECT lastname student: " + e.getMessage());   
        }
    }
 
    public static void showSubjects()
    {
        try 
        { 
            // Mostramos por pantalla todos las asignaturas de la tabla  
            res = st.executeQuery("SELECT * FROM subject");  
            System.out.println("ID\tNombre\n" + 
                               "--------------------");  
            while (res.next())
            {  
                System.out.println(res.getInt("id") + "\t" + 
                                   res.getString("name")
                                   );
            }
 
            // Free memory
            res.close(); 
        }
        catch (Exception e)
        {  
            System.err.println("Warning: SELECT subject: " + e.getMessage());   
        }
    }
 
    public static void updateSubject(String data)
    {
        // Make a update
        try 
        { 
            st.executeUpdate("UPDATE subject SET name='" + data + "' WHERE id=0");  
        }
        catch (Exception e)
        {  
            System.err.println("Warning: UPDATE subject: " + e.getMessage());   
        } 
    }
}

De la linea 1 a 7 se cargan los archivos necesarios para el funcionamiento del programa.

La linea 9 crea la clase BDprac. En ella tenemos unas variables globales a la clase desde la línea 11 a 14, que serán utilizadas para las posteriores consultas y resultados.

La línea 15 es interesante porque especifica el DBH (Data-Base-Host), es decir, el enlace o ruta hasta nuestra base de datos. En nuestro caso sera un archivo local, y primero invocaremos al controlador jdbc, seguido de hsqldb e indicaremos que es un archivo en la ruta src/ y con el nombre bd. Tambien es posible crear la base de datos en memoria como esta comentado en la linea 16.

En las líneas 18-28 tenemos el main, donde se han encapsulado en una serie de métodos todo el funcionamiento del programa (por resultar más didáctico).

Los métodos estan dispuestos en orden en el codigo asi que paso a comentarlos brevemente.

loadHSQLDB() de la línea 30 a 44, se encarga de inicializar o cargar el controlador JDBC y mostrar un mensaje en caso de fallo.

connectDB() de la línea 46 a 58, se encarga de conectar el controlador HSQLDB a nuestro DBH en la base de datos.

createStatement() de la línea 60 a 71, prepara una consulta a la base de datos.

dropTables() de la línea 73 a 84, hace una limpieza inicial (borra si existen) de las tablas que hayan podido usarse en ejecuciones anteriores del programa (para evitar conflictos con antiguas insercciones).

createTables() de la línea 86 a 128, crea tres tablas, alumnos, asignaturas y la tabla de referencias ajenas alumnos-asignatura.

restoreDB() de la línea 130 a 141 borra los posibles datos que existieran en las tablas anteriores.

menu() de la línea 143 a 231, contiene el uso del programa, la lectura de opciones y filtrado de acciones segun el parámetro elegido.

closeHSQLDB() de la línea 233 a 257, se encarga de cerrar la conexión HSQLDB y finalizar las consultas abiertas. Es ejecutada al finalizar el programa.

read() de la línea 259 a 272, es un método encargado de la lectura de datos de entrada.

insertData() de la línea 274 a 300, inserta los datos iniciales en la tablas del programa a modo de ejemplo.

showStudents() de la línea 302 a 331, muestra todos los alumnos disponibles en la tabla students.

showSubjectByLastName() de la línea 333 a 362, muestra los alumnos que coincidan en apellido con el filtro de apellido recibido por parámetro lastname.

showSubjects() de la línea 364 a 386, lista todas las asignaturas disponibles en la tabla subjects.

updateSubject() de la línea 388 a 399, actualiza el nombre de la asignatura 0 (Literatura) al nombre recibido por parámetro data.

Para que la compilación y la ejecución resulte más sencilla, he preparado un archivo Makefile, que establecerá la ruta de HSQLDB y de nuestro directorio de trabajo (y ademas con clean, tiene una opción de borrado de archivos generados):

?Descargar Makefile.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
JAVA_PATH = src/:/usr/share/java/hsqldb.jar:.
BOLD = \033[1m
END  = \033[0m
 
all:
	@echo "$(BOLD)>>> Compilando archivos Java... < <<$(END)"
	javac src/BDprac.java 
 
	@echo "\n$(BOLD)>>> Ejecutando archivos Java... < <<$(END)"
	java -classpath $(JAVA_PATH) BDprac
 
clean:
	$(RM) src/*.class src/*~ src/*.script src/*.properties

Ejemplos de uso

El programa carga el controlador y realiza una conexión HSQLDB a un archivo de base de datos creado en tiempo de ejecución (también se puede crear un archivo en memoria, ver línea 16 comentada en el código). Se crean las tablas iniciales (alumno y asignaturas) y una tabla para las claves ajenas. También se procede al borrado y vaciado de datos, por si la aplicación ha sido iniciada anteriormente (a modo de limpieza).

Posteriormente aparecerá un menú con algunas opciones básicas. Si pretendemos hacer alguna operación sin insertar datos previamente, se nos mostrará un mensaje (por ejemplo metiendo la opción 3 al inicio).

Después de insertar los datos, podemos hacer una consulta de todos los alumnos, eligiendo la opción 4.

Si deseamos cambiar el nombre de una asignatura (para el ejemplo siempre la 0, de Literatura), elegiremos la opción 2, e introduciremos el nuevo nombre (en este caso Arte). Y con la opción 5 podremos listar las asignaturas antes y después del cambio.

Con la opción 3, podemos consultar los alumnos por nombre de apellido, por ejemplo, introduciendo “Garrido” se listan los alumnos con apellido Garrido. Y con 0 finalizaremos la ejecución del programa.

Ejemplo de una traza de ejecución

?Descargar traza.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
$ make
>>> Compilando archivos Java... < <<
javac src/BDprac.java 
 
>>> Ejecutando archivos Java... < <<
java -classpath src/:/usr/share/java/hsqldb.jar:. BDprac
* Starting...
* Loading HSQLDB driver...
* Creating HSQLDB connection...
* Drop table if exists...
* Creating student table...
* Creating subject table...
* Creating student-subject table...
* Restore the original databases, removing all previous inserting data.
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:3
Deben insertarse datos previamente.
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:1
Datos correctamente insertados.
 
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:4
ID	Nombre	Apellido Direccion	Ciudad	Codigo Postal		Email		Movil		Asignatura
---------------------------------------------------------------------------------------------------------------------
0	Juan	Garrido	 Sol, 12	Sevilla	13206		j.garrido@gmail.com	609555321	0
1	Luis	Garrido	 Flor, 5	Melilla	43712		l.garrido@gmail.com	615827343	0
2	Teresa	Garcia	 Mata, 18	Madrid	28045		tere.garcia@gmail.com	678123687	1
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:
La opción no es un número.
Opcion incorrecta.
 
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:5
ID	Nombre
--------------------
0	Literatura
1	Ciencia
2	Redes
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:2
Introduzca el nuevo nombre para la asignatura 'Literatura':Arte
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:5
ID	Nombre
--------------------
0	Arte
1	Ciencia
2	Redes
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:3
Introduzca el apellido a consultar:Garrido
ID	Nombre	Apellido Direccion	Ciudad	Codigo Postal		Email		Movil		Asignatura
---------------------------------------------------------------------------------------------------------------------
0	Juan	Garrido	 Sol, 12	Sevilla	13206		j.garrido@gmail.com	609555321	0
1	Luis	Garrido	 Flor, 5	Melilla	43712		l.garrido@gmail.com	615827343	0
	.: Menu :.
	0 - Salir
	1 - Insertar alumnos y asignaturas por defecto.
	2 - Modificar el nombre de una asignatura (0 - Literatura).
	3 - Consultar alumnos por apellido.
	4 - Listar todos los alumnos.
	5 - Listar todas las asignaturas.
 
Introduzca una opción numérica:0

Si lo deseas, puedes descargar el ejemplo completo en un archivo empaquetado y comprimido con Gzip en formato tar.gz:

Descargar: java-jdbc-hsqldb-openoffice-example.tar.gz (4)

Nota: todos los datos de alumnos de este artículo son ficticios.

VN:F [1.7.4_987]
Rating: 8.0/10 (1 vote cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Instalar el intérprete SWI-Prolog para ejecutar código Prolog en Ubuntu

12 10 2009
SWI-Prolog logo

Si vas a programar declarativamente con Prolog, en Ubuntu es posible hacerlo instalando el paquete de SWI-Prolog. Para ello busca en Synaptic el paquete swi-prolog o bien instalalo mediante terminal:

?Descargar instalar.txt
1
sudo apt-get install swi-prolog

Para ejecutar el intte en el terminal:

?Descargar ejecutar.txt
1
$ swipl

Para salir escribe halt (seguido de un punto):

1
2
3
4
5
6
7
8
9
10
11
$ swipl
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
 
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
 
For help, use ?- help(Topic). or ?- apropos(Word).
 
?- halt.
VN:F [1.7.4_987]
Rating: 7.0/10 (1 vote cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


La convergencia hacia la singularidad (Inteligencia Artificial)

24 09 2009
Singularidad

¿Que es la singularidad? Me atrevería a dar mi propia definición personal como:

Un estado de una civilización en el que se alcanza el desarrollo de un ordenador capaz de superar a la inteligencia humana en todos los aspectos.

Un ciclo de inteligencia exponencial donde cada generación de individuos es un nuevo escalón más inteligente que sus progenitores.

Momentos quizás demasiados inspirados en ciencia-ficción, pero que con cada elipse que traza nuestro planeta con el sol, somos capaces de ver con mayor claridad la convergencia de inteligencia humano-máquina y quedar anonadados con los nuevos progresos.

La singularidad raramente es debatida como un argumento real, debido a que pensamos que puede que no lleguemos a ver un futuro así en nuestra corta vida sobre el planeta, quizás con suerte nuestros nietos.

Sin embargo, Neil Gershenfeld no piensa del mismo modo. Según su ley de “Ley de rendimientos acelerados” con cada pequeño paso se abren nuevas posibilidades que incrementan exponencialmente nuevos casos de éxito. Según su predicción (de las muchas acertadas que ya ha hecho), en unos 21 años seríamos capaces de ver muchos de estos grandes avances.

Por otro lado, no debemos pensar en la singularidad con la simple convergencia de inteligencia computacional. Ámbitos como biología, bioquímica, robótica, nanotecnología, neurociencia, filosofía, economía, también implican el mismo destino para alcanzar esta meta.

Muy ligado a la singularidad está la búsqueda de la inmortalidad a través de un ente inmaterial, sin cuerpo físico, donde transferir nuestra conciencia. Porque el cerebro parece ser un poderoso y raro computador que la evolución ha modelado para hacer fantásticos trabajos.

Imagina poder subir tu consciencia a un interfaz máquina y poder hacer copias de seguridad de tu mente. Puede parecernos algo tremendo, innecesario, extraño, pero ¿a tu tatarabuelo no le parecería raro que puedas comunicarte con tus familiares en tiempo real a miles de kilómetros de distancia, simplemente pulsado las teclas con letras en una pequeña máquina que llamas portátil? Extrapola este ejemplo, siendo tu, tu propio tatarabuelo y viendo los avances que tu tataranieto maneja sin complicaciones en un futuro. ¿Ahora no parece tan extraño no?

El programa de divulgación científica Redes, emitió un capítulo en Junio de 2008 donde hacían ver una realidad similar:

Redes 10: El Futuro: la fusión del alma y la tecnología (27 min)

Ya se han hecho muchas simulaciones sobre la conciencia, la imagen inferior muestra el desarrollo de un cerebro biónico para 50 tipos de neuronas en el supercomputador de IBM Blue Gene.

Cerebro biónico: simulación de 50 tipos de neuronas - Supercomputador IBM Blue Gene

Cerebro biónico: simulación de 50 tipos de neuronas - Supercomputador IBM Blue Gene

En este punto es donde aparece la unión de la inteligencia biológica y no biológica. Un humano inmortal basado en software. El gran reto es estimular un cerebro con exactamente la misma señal y comprobar que nunca aparecerá la misma señal dos veces como respuesta. Las conexiones sinápticas ya son una realidad. Cierto es que estan limitadas a cerca de 500 por seguridad en un cerebro humano, pero esto es sólo el principio.

Signos de singularidad

Signos de singularidad

Sin embargo ya se estima que para dentro de unas décadas podamos hacer ingeniería inversa del software del cerebro y se hacen comparaciones entre código máquina vs código neuronal (cuyo primer código ya fue descubierto en la década de los 70 por el electropsicologista Edgar Adrian, que descubrió que subiendo la presión de las neuronas implicadas en el tacto, podía incrementar la frecuencia).

La conciencia no es fácil de definir por ser algo inefable y menos es de aislarla para recrearla en una máquina. Los avances en electrodos y polímeros son vitales en este aspecto. Por ello se trabaja en polímeros capaces de inyectar sustancias como lo hacen las neuronas. De esta manera, podrían emularse comportamientos hormonales, genéticos y otros procesos.

¿pero de que depende la consciencia? Los matemáticos y lógicos intentan definir leyes de imperfección conocidas para obtener algo similar. Pero por el momento, no hay razón para no creer que la consciencia no pueda llegar a ser reproducida en una máquina (de una forma u otra).

Realmente, ¿pueden las máquinas ser conscientes?

Pueden las máquinas ser conscientes

¿Pueden las máquinas ser conscientes?

Existen pruebas para valorar este tipo de actitudes como es el Test de Turing (superado en el año 2000) y propuesto un nuevo Test de Turing Global con nuevos requisitos en otras áreas de la Inteligencia Artificial.

Si las máquinas llegaran a ser conscientes de sí mismas, podrían manejar sus datos, recuerdos de cualquier manera. Si los humanos alcanzáramos la singularidad podríamos borrar recuerdos, adquirirlos, etc algo que ya se sugirió en películas como The Matrix.

Insercción de datos en la mente

Inserción de datos en la mente

Para ser realistas, la singularidad es más un tema religioso que cientifico, puesto que las fronteras son muy difusas respecto a la mente. Por otro lado, podría traer problemas como terrorismos, sobrepoblación, discriminación, agotamiento de recursos naturales, etc.

Sin duda un tema interesante y sujeto a muchas reflexiones que se presta a revolver nuestra imaginación ¿y tú que piensas? ¿serias capaz de convertir tu cuerpo a un ente biónico? ¿y si la práctica estuviese extendida en un 25% de la población mundial? ¿si fueses a morir no harías una copia de tu consciencia/mente?¿y si un familiar cercano no tuviese otra opción de sobrevivir? Me encantaría leer tu opinión o propuestas a otras preguntas inquietas en los comentarios.

Bibliografía

VN:F [1.7.4_987]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Como editar gráficamente el archivo xorg.conf

23 09 2009
Editor de opciones del X.org

Existe una herramienta muy útil llamada “Editor de opciones del X.org” del paquete xorg-options-editor-gtk (aunque nunca mejor que un editor de texto) donde puedes configurar las opciones principales y más comunes, como por ejemplo cambiar el driver de tu tarjeta gráfica ATI de fglrx a radeon o incluso vesa.

Para instalarla busca el paquete xorg-options-editor-gtk en Synaptic o bien mediante el terminal:

1
sudo apt-get install xorg-options-editor-gtk
VN:F [1.7.4_987]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Páginas: Anterior 1 2 3 4 5 6 7 8 ...13 14 15 Siguiente