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();

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 :-( ).

sábado, enero 20, 2007

BricoInformática: Solucionar el problema al vincular un dispositivo de antena GPS Bluetooth con el teléfono móvil.

Hace poco compré una antena GPS Bluetooth para el móvil y cuál fue mi sorpresa que al conectar la antena con el móvil mediante el bluetooth, el móvil me pedía un código. Mi preocupación aumentó cuando vi que ni en la caja ni en las instrucciones venía ese código, por lo que me lancé a mi último recurso: Google.
Tras recorrerme unos cuantos foros, vi que el problema le había sucedido a mucha gente pero en ninguno de ellos daban solución ni explicación de por qué sucedía.

Pero mi suerte cambió en un instante, ya que cuando me disponía a volver a embalar todo el contenido para ir a la tienda donde lo compré se me ocurrió probar algunos códigos al azar para intentar dar solución al problema. Tras probar sin éxito el pin del móvil, el número del modelo de gps, un número extraño que encontré en una pegatina en el compartimento de la batería y algunos más, se me ocurrió meter cuatro ceros y, mientras sentía esa sensación de cuando ves que tienes 11 en la Quiniela y te das cuenta de que no te vas a comer la mierda que te comes todos los fines de semana, mi teléfono aceptó el dispositivo y se encendió en led de conexión del gps.

Pues bueno, pongo esto para ver si mi "potra", "gran potra", puede sacar a alguien como yo, totalmente inculto en temas de gps, de un apuro. Mi móvil es un Nokia 6680 y la antena gps bluetooth es de marca Phoenix (es de esas baratas de 60€). El código que introduje para que el enlace se estableciera fue "0000".

Si te ha servido de ayuda, y sobre todo si te ha servido para otro móvil o para otra antena gps bluetooth, por favor deja un comentario para que el resto de la peña se entere. Gracias.

jueves, enero 18, 2007

BricoInformática: Solucionar el problema de PPStream con PPMate - To solve connection troubles in PPStream with PPMate

Hace algunos posts proponía una solución para poder ver de forma gratuita los partidos de Liga y Champions (también Copa del Rey) a través de PPStream. El enlace a este post es éste.

Pues bueno, parece que últimamente PPStream no va muy bien y suele sufrir cortes en la emisión con frecuencia, pero este problema lo podemos solucionar instalando el programa PPMate, que va más rápido y la imagen no suele cortarse una vez que llevemos entre media hora o una hora conectados al canal (pillando fuentes).

Algunos consejos para ver el partido con mejor calidad:
1. usar el canal "Shanghai Sports". Es el que suele poner los partidos del Real Madrid y el Barça.
2. pinchar en el enlace (en la web www.rojadirecta.com) correspondiente al partido lo más rápido posible, para que coja fuentes.

martes, enero 16, 2007

C# .NET : Seleccionar texto dentro de un control WebBrowser - Select text in a WebBrowser control

Lo que encontramos a continuación es un método que nos permite seleccionar texto dentro de un control WebBrowser en C# .NET.

(palabra es el texto que será seleccionado dentro del documento)

//marca la palabra especificada en el texto
public bool marcarPalabra(string palabra) {
bool succes = false;
if (webBrowser1.Document != null)
{
IHTMLDocument2 doc = webBrowser1.Document.DomDocument
as IHTMLDocument2;
IHTMLBodyElement body = doc.body as IHTMLBodyElement;

IHTMLTxtRange range;
range = body.createTextRange();
range.moveStart("character", 1);
int flags = 0;
flags += 2;//(matchWholeWord)
flags += 4;//(matchCase)
success = range.findText(palabra,
true ? 999999 : -999999, flags);
if (success)
{
range.select();
range.scrollIntoView(false);
}
}
return succes;
}