lunes, abril 21, 2008

C++: Gestión de ficheros de texto - Text files management

En la siguiente página podemos encontrar una guía rápida de cómo gestionar los ficheros de texto en C++.
El link es el siguiente: ficheros de texto en c++


martes, enero 08, 2008

Linux: reproducir mp3 en Amarok

Para habilitar la capacidad de reproducir archivos MP3 en Amarok:

1-Instalar los siguientes paquetes :

sudo apt-get install libmad0 libxine1 gstreamer0.8-mad

2- Utilizar como Engine en las opciones de Amarok la opción "xine engine"

En el caso de que siga sin funcionar, a continuación hay que hacer:

sudo apt-get install libxine-extracodecs

miércoles, enero 02, 2008

Ubuntu: Cambiar la configuración de video desde la consola - Solve video troubles using console

*Nota: es recomendable reiniciar el sistema en modo seguro e introducir la contraseña de root cuando se nos indique, así no tendremos ningún problema con los cambios de vídeo.
Paso 1: introducimos en consola el comando "mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak".

Paso 2: introducimos ahora el comando "cp /etc/X11/xorg.conf.1 /etc/X11/xorg.conf".

Paso 3: reiniciamos el sistema.

sábado, septiembre 01, 2007

Web con todo el software para ver TV por Internet - New web with all the Internet TV software

Ahora que empiezan la Liga , la Champions, la copa de la UEFA, el Europeo de baloncesto, la NBA, ... y con todo el conflicto que estamos teniendo con las televisiones de aquí, lo mejor va a ser aprovisionarse con el mejor software de televisión por Internet y P2P.

Si te hartaste de navegar en páginas en chino o japonés, en esta web encontrarás todo lo que te hace falta, y en la mayoría de los casos en idioma castellano.

Cómo ver los partidos de fútbol y baloncesto nunca fue tan fácil...

enlace: http://www.tvsoft.tv/

martes, mayo 08, 2007

BricoInformática - Ver la Liga y las competiciones europeas de gratis - Free Spanish Liga, Calcio, Premier, ... in your PC

En este post vuelvo a retomar el tema de ver los partidos de gratis por Internet a través de las televisiones chinas e introduciré un software alternativo para ver las emisiones.
Quien no recuerde los comienzos, puede hacer click aquí.

Ahora veremos un nuevo programa, el TVAnts, que podemos descargarlo pinchando aquí.
TVAnts se ofrece como una alternativa seria a los programas de los que ya he hablado en este blog (PPMate y PPStream) y funciona la mayoría de las veces que los dos anteriores no lo hacen.
Está en chino y en inglés (yo me tiraría para el segundo) y es muy fácil de utilizar: o utilizamos directamente los enlaces en rojadirecta o utilizamos el buscador de canales que incorpora.

Para terminar, un truco de PPmate :
Muchas veces hacemos clic en el enlace del partido que encontramos en rojadirecta pero nuestro reproductor PPMate no hace nada. Pues nos quedamos con el nombre del canal, lo buscamos en la lista de canales que encontramos en el propio PPMate a la derecha y hacemos doble clic sobre él (normalmente el buscador no suele funcionar muy bien, por lo que te recomiendo que busques en la pestaña "sports").

viernes, mayo 04, 2007

C# .NET: Uso de HashTable - Using HashTable

Declaración:
//declaración y creación
System.Collections.Hashtable cache;
cache = new System.Collections.Hashtable();

Introducción de nuevos elementos:
//agregamos nuevos elementos
cache.Add(clave,objeto);

Consulta de claves o valores existentes:
//preguntamos si se introdujo algún valor con esa clave
cache.ContainsKey("key");
//preguntamos si se introdujo ese valor
cache.ContainsValue(obj_value);

Recuperación de los elementos introducidos:
//recuperamos un valor previamente introducido
Object obj = cache[key];

Otras funciones con HashTable:
//limpiamos la cache de resultados
cache.Clear();

martes, abril 17, 2007

domingo, abril 08, 2007

Java: Servlet básico - Minimal Servlet

Ejemplo de un Servlet básico sobre el que podemos empezar a añadir la funcionalidad que queramos.
Contiene ejemplos básicos para la obtención de parámetros, escritura de la respuesta web, ...

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.io.File.*;
import java.util.*;


public class Middleware extends HttpServlet {

//Initialize global variables
public void init() throws ServletException {
}

//Process the HTTP Get request > aqui tratamos la peticion
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

//obtenemos el descriptor sobre el que devolveremos la respuesta html
response.setContentType("text/html");
PrintWriter out = response.getWriter();

try {

//forma de obtener los parametros > vienen de un formulario
String servicio = request.getParameter("servicio");
}
catch (Exception e) {
out.println("Error en el Servlet del servicio web.");
}
}

//Process the HTTP Post request > no importa el metodo, lo tratamos todo igual
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

//Clean up resources
public void destroy() {
}
}

Para la respuesta web es recomendable usar un método en el que se le pase como parámetros el descriptor de la salida y la ruta de la página a mostrar. El método es el siguiente (el primero es una versión básica y el segundo permite introducir cambios mediante un array de pares de string "antiguo-nuevo"):


public static void enviarPagina(String pagina, PrintWriter out)
{
try {

FileReader fr = new FileReader(pagina);
BufferedReader buffer = new BufferedReader(fr);

String linea = buffer.readLine();

while (linea != null)
{
out.println(linea);
linea=buffer.readLine();
}
}
catch(Exception e)
{
System.out.println("Error al abrir el fichero");
out.println("Error al cargar el fichero de la página - " + e.toString());
try{
File dir1 = new File(".");
out.print("Current dir : " + dir1.getCanonicalPath());
}catch(Exception en){}
}
}

public static void enviarPagina(String pagina, PrintWriter out, String[][] cambios)
{
try {

FileReader fr = new FileReader(pagina);
BufferedReader buffer = new BufferedReader(fr);

String linea = buffer.readLine();

while (linea != null)
{
//hacemos los cambios necesarios
for(int i=0;i(menorque)cambios.length;i++){
linea = linea.replaceAll(cambios[i][0],cambios[i][1]);
}
//escribimos
out.println(linea);
linea=buffer.readLine();
}
}
catch(Exception e)
{
System.out.println("Error al abrir el fichero");
}
}

viernes, abril 06, 2007

Bricoinformática: Instalar los diccionarios en OpenOffice - Installing language dictionaries in openoffice

Si tienes problemas con los diccionarios en OpenOffice (que no se te activan, no te corrigen, te dan errores en todas las palabras, ...), siguiendo estos pasos podrás resolverlos dejando tu OpenOffice funcionando de lujo.
Sin detenernos pues...

1. Entramos al Writer (procesador de textos) del OO.
2. Archivo > Asistentes > Instalar diccionarios nuevos...
...se abre una nueva ventana al estilo nuevo documento...

3. Seleccionamos el diccionario que queramos instalar haciendo clic sobre él.
4. Hacemos clic sobre el botón "Ejecutar DicOOo" (vamos, y es pequeño!!).
5. Siguiente.
...llegamos a la pantalla de diccionarios de ortografía...

6. Hacemos clic en "Recuperar lista" y esperamos.
7. Seleccionamos nuestro idioma y hacemos clic en Siguiente.
...hacemos lo mismo para los diccionarios de separación de sílabas y sinónimos...

8. Hacemos clic en "Iniciar la descarga" y cuando finalice, en "Final".
...reiniciamos OO y puede que pasen dos cosas:
a) todo funciona al pelo y ya hemos terminado.
b) aquí no ha pasado nada, por lo que todavía nos falta por hacer lo siguiente:
9. Herramientas > Opciones...
10. Seleccionamos la ficha "Configuración del idioma > idiomas".
11. Y en la opción de "Idioma predeterminado para los documentos" elegimos el recién instalado.

Y nada más, dejamos esto funcionando y si nos vuelve a dar problemas, hacemos el truco de la vieja y lo volvemos a instalar. Suerte.

jueves, marzo 08, 2007

C# .NET: Funciones de matching de cadenas - String matching methods

Aquí incluyo tres filtros de matching, uno que compara el principio de la palabra, otro el final y otro tanto el principio como el final.
Es un buen ejemplo de cómo se interactúa entre string y char[] cuando necesitamos implementar operaciones con cadenas a un nivel más bajo.

//primer filtro de matching mas fuerte (principio y final de la palabra)
public bool match1(string s1, string s2)
{
//haremos el matching de una sola letra si alguna palabra es <2
if (
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] && p1[s1.Length - 1] == p2[s2.Length - 1])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] &&amp; p1[1] == p2[1] &&
p1[s1.Length - 1] == p2[s2.Length - 1] && p1[s1.Length - 2] == p2[s2.Length - 2])
{
return true;
}
return false;
}
}

//segundo filtro de matching mas leve (principio de la palabra)
public bool match2(string s1, string s2)
{
//haremos el matching de una sola letra
if (
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] && p1[1] == p2[1])
{
return true;
}
return false;
}
}

//tercer filtro de matching mas leve (final de la palabra)
public bool match3(string s1, string s2)
{
//haremos el matching de una sola letra

if
(
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
int l1 = s1.Length;
int l2 = s2.Length;
//comprobamos
if (p1[l1 - 1] == p2[l2 - 1] && p1[l1 - 2] == p2[l2 - 2])
{
return true;
}
return false;
}
}

NOTA: en las partes sombreadas en color gris cambiar los "<" por < (problemas con el html :-( ).