sábado, diciembre 30, 2006
Guía rápida para MagicDraw - MagicDraw Tutorial
Se trata de una guía muy simple (no por eso menos buena ;P) ya que es muy clara y explica directamente cómo se hacen las cosas, sin rodeos ni otras explicaciones.
Espero que os sirva...
>> descarga
lunes, diciembre 18, 2006
SmartSort v2: ordenar una lista de string en base a una clave en C# .NET - Sorting a string linked list using a word as a key in C# .NET
public System.Collections.Generic.LinkedListsmartSort(
System.Collections.Generic.LinkedListlista,
string clave){
char[] auxs;
LinkedListauxl;
int nmatch;
int longi;
//creo un array de linkedlist de tamaño clave*2+1
LinkedList[] clasi = new LinkedList [clave.Length*2 + 1];
//obtengo los caracteres de la clave
char[] clavec = clave.ToCharArray(0,clave.Length);
//para cada una de las palabras de la lista inicial
IEnumerator enu = lista.GetEnumerator();
while (enu.MoveNext()){
nmatch = 0;
auxs = ((string)enu.Current).ToCharArray();
//me quedo con la menor de las longitudes
longi=clave.Length;
if (((string)enu.Current).Length < longi =" ((string)enu.Current).Length;" i =" 0;" i =" longi">= 0; i--){
if (clavec[i] == auxs[i]) nmatch++;
}
//ahora introducimos la diferencia entre longitudes de palabra
nmatch -= Math.Abs(clave.Length -
enu.Current.ToString().Length);
if (nmatch < nmatch =" 0;//controlamos">();
clasi[nmatch].AddLast(enu.Current.ToString());
}
//creo la lista a devolver
auxl = new LinkedList();
for (int i = clave.Length * 2; i >= 0; i--){
if (clasi[i] != null) {
enu = clasi[i].GetEnumerator();
while (enu.MoveNext()){
auxl.AddLast(enu.Current.ToString());
}
}
}
//devuelvo la lista
return auxl;
}
martes, diciembre 12, 2006
Uso del modelo de eventos (Observer) en C#.NET - Using events model in C#.NET
Este es un ejemplo muy simple del uso del modelo de eventos (modelo muy parecido al Observer u Observador o también llamado de suscripción pública) en C#.NET.El elemento que lanza los eventos (observable) deberá incluir el siguiente código:
//declaramos el eventoEl elemento que reciba los eventos (listener u observer), debe incluir lo siguiente:
public event PalabraErroneaEvent OnPalabraErronea;
//declaramos el tipo de manejador asociado al evento
public delegate void PalabraErroneaEvent(object sender, PalabraErroneaArgs e);
//suscipción de metodos al evento
public void addPalabraErroneaListener(IPalabraErroneaListener l){
OnPalabraErronea += new PalabraErroneaEvent(l.newEvent);
}
//lanzamiento del evento
public void notify(PalabraErroneaArgs args){
OnPalabraErronea(this, args);
}
Para registrarse debe implementar una interfaz que incluye un método que será usado por la clase que envíe los eventos para añadir un nuevo listener (en este caso el método es newEvent).
public interface IPalabraErroneaListener{
void newEvent(object sender, PalabraErroneaArgs e);
}
Una vez que se implemente la interfaz, nos registraremos en el lanzador del evento usando el método que nos ofrece para ello.
//nos suscribimos
nombre_del_lanzador.addPalabraErroneaListener(this);
Para recibir y manejar los eventos implementa el método anteriormente descrito.
public void newEvent(object sender, PalabraErroneaArgs e) {
@todo
}
miércoles, diciembre 06, 2006
BricoInformática - Ver partidos de Champions y Liga en tu ordenador de forma gratuita - Free UEFA Champions League and Liga in your pc
gratis365.blogspot.com
"Antes de empezar, señalar que al hacer ésto no estamos llevando a cabo ninguna actividad fuera de la legalidad, ya que este proceso se basa únicamente en visionar la retransmisión de canales que emiten por internet y escuchar la retransmisión de radios españolas que también usan este medio para llevar a cabo sus emisiones."
Para conseguir la imagen
1- nos bajamos el programa PPStream, a través del cual obtendremos la retransmisión de varias televisiones internacionales, entre ellas la chinas DragonsTV,... Para bajarlo lo haremos desde este enlace (en caso de que no funcione el enlace entra a Google, busca las palabras "download ppstream" y búscate la vida para bajártelo, que está bastante fácil).
¡OJO! Los aceleradores de descargas no están permitidos en el sitio de descarga, así que si te falla ya sabes por qué.
2- instalamos el PPStream. Aquí viene la gracia, ya que con un poco de mala suerte el programa estará en chino y como mucho en nuestra pantalla aparecerán palabras del estilo "????????", pero no importa, porque los señores que hicieron windows ya pensaron esto y decidieron que para instalar cualquier programa lo único que haría falta es darle unas 20 o 30 veces consecutivas a los botones "Aceptar" y "Siguiente".
Por lo que manos a la obra, empezamos a instalarlo, le damos todas las veces que haga falta a los botones que más se parezcan a los anteriormente descritos (suelen ser las opciones por defecto y suelen ir remarcadas) y completamos la instalación. Si hace falta intentar un par de veces, se intenta, que el fin lo merece.
3- una vez instalado el PPStream, y ya en el día del partido que queramos ver, entramos a la web de Roja Directa y en la pantalla principal encontraremos las retransmisiones de ese día. Sólo nos falta hacer clic sobre la que queramos ver y entre todas las opciones que nos ofrece escogeremos la de "PPStream".
¡¡OJO!! es recomendable que esto se haga una hora o tres cuartos de hora antes del partido para que nuestro ordenador vaya cogiendo fuentes y podamos ver correctamente el partido.
Para conseguir el sonido
Si además no entendemos chino y queremos escuchar la retransmisión en castellano haremos lo siguiente:
1- necesitamos tener insatalado el RealPlayer, o si no, lo bajamos de aquí y lo instalamos.
2- bajamos el archivo de RNE para escuchar la radio pinchando aquí.
3- abrimos el archivo "r1real.ram" que nos acabamos de descargar.
4- aquí viene lo chungo. La cuestión es que el sonido va antes que la imagen (un par de minutos como mínimo) por lo que tendremos que pausar (en RealPlayer) la emisión de radio justo cuando empiece el balón a rodar y reanudarla (en RealPlayer) justo cuando en nuestra imagen en el PPStream comience el partido.
Si eres hábil no tendrás muchos problemas, aunque es posible que en alguna ocasión durante el partido tengas que reajustarlo.
Otras alternativas...
Si este método falla (que puede fallar aunque la radio seguro que no), existen otros programas similares a PPStream aunque con menos calidad de imagen como por ejemplo PPMate (dicen que PPMate es más rápido y no se corta, aunque la imagen se ve un poco peor).
Para más información, consulta los foros de www.RojaDirecta.com, allí encontrarás bastante info y te resolverán bastantes dudas.
También es posible ver otro tipo de eventos, como por ejemplo las ligas europeas de fútbol, la NBA, el fútbol americano, ... y también poder sintonizar gran cantidad de canales internacionales.
martes, noviembre 28, 2006
Uso de Hashtable en J2ME - Hashtable management using J2ME
Ejemplo del manejo (inserción y eliminación de elementos usando un string como key) de un Hashtable en J2ME sobre la lógica de un chat donde los usuarios y las salas de chat se almacenan por separado, enlazándose mediante referencias.
/*
* LogicaChat.java
*
* Created on 28 de noviembre de 2006, 19:00
*
* Pedro Luis Mateo || pedrolmn@gmail.com
*/
package hello;
import java.util.*;
////////////////////////////////////////////////////////////////////////////////
public class LogicaChat {
/** Creates a new instance of LogicaChat */
public LogicaChat() {
}
//variables en las que se basa la logica del chat
/*private*/ Hashtable chatrooms = new Hashtable();
/*private*/ Hashtable users = new Hashtable();
//metodos
public void newChatRoom(ChatRoom cr){
chatrooms.put(cr.name,cr);
}
public void delChatRoom(ChatRoom cr){
//primero elimino todos sus usuarios
cr.users.resetIterator();
while (cr.users.hasNext()){
//disminuyo la rpesencia de un usuario en salas
((User)cr.users.next()).exitRoom();
//si ya no se encuentra en ninguna sala, elimino
if (!((User)cr.users.next()).isInRooms()){
users.remove(((User)cr.users.next()).nick);
}
}
//por ultimo elimino el chatroom
chatrooms.remove(cr.name);
}
public void newUser(User u){
users.put(u.nick,u);
}
public void delUser(User u){
//eliminamos si no esta presente en ningun chatroom
if (!u.isInRooms()) users.remove(u.nick);
}
public void addUserChat(String nu, String ncr){
try{
User u = (User)users.get(nu);
ChatRoom cr = (ChatRoom)chatrooms.get(ncr);
cr.addUser(u);
}catch(Exception e){}
}
public void delUserChat(String nu, String ncr){
try{
User u = (User)users.get(nu);
ChatRoom cr = (ChatRoom)chatrooms.get(ncr);
//comprobaremos que ese usuario pertenece a ese chatroom
if (cr.users.exists(u)){
//disminuimos la presencia
u.exitRoom();
//eliminamos el enlace desde el chatroom
cr.removeUser(u);
//si el usuario ya no se encuentra en ninguna sala lo eliminamos
if (!u.isInRooms()){
users.remove(u);
}
}
}catch(Exception e){}
}
public User existsUser(String nick){
return (User)users.get(nick);//puede devolver null
}
}
miércoles, noviembre 22, 2006
Editor gratuito para Java con soporte para aplicaciones móviles - Free IDE for Java with mobile support
Download links: NetBeans - Mobility pack
LinkedList de Java para J2ME - Java LinkedList for J2ME
Muy útil si desarrollas aplicaciones para entornos móviles en Java, ya que las listas enlazadas no vienen implementadas por defecto en el J2ME y son muy útiles para la elaboración de implementaciones móviles.
Se trata de una versión básica fácilmente mejorable y adaptable.
/*
* MList.java
*
* Created on 22 de noviembre de 2006, 12:58
*
* Pedro Luis Mateo || pedrolmn@gmail.com
*/
package hello;
import java.util.Vector;
/**
*
* @author Pedro Luis Mateo
*/
public class MList {
/** Creates a new instance of MList */
public MList() {
}
////////////////////////////////////////////////////////////////////////////
// METODOS PARA EL MANEJO DE LA LISTA - LIST HANDLE METHODS
private Vector list = new Vector();
public void addLast(Object o){
list.insertElementAt(o,list.size());
}
public Object getLast(){
return list.lastElement();
}
public void addFirst(Object o){
list.indexOf(o,0);
}
public Object getFirst(){
return list.firstElement();
}
public boolean remove(Object o){
return list.removeElement(o);
}
public int size(){
return list.size();
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//// ITERADOR - ITERATOR METHODS ////
/////////////////////////////////////
int current=0;
Object currentObj=null;
public boolean hasNext(){
if (current < list.size()){
currentObj = list.elementAt(current);
current++;
return true;
}
else{
return false;
}
}
public Object next(){
return currentObj;
}
public void resetIterator(){
current=0;
currentObj=null;
}
}
sábado, noviembre 18, 2006
Para maniana: el contest de la ACM en lisboa
Ha llegado el día de la verdad y espero que salga mejor que hoy, porque para dos problemas de tres que hubiéramos acertado fácil en la prueba no hemos acertado ninguno.
Aunque tenemos excusa, sigo pensando que deberíamos habernos esforzado un poco más aunque las cabezas no daban para más despues de el duro día de ayer pateando Lisboa.
Por eso, ya vamos para la cama que maniana vamos a darlo todo a ver si no nos humillamos mucho, aunque teóricamente (y en la práctica) vayamos de tercer equipo respresentando a la UMU.
Bueno, espero que maniana haya suerte y que salga todo bien...
P.D.: ya llegarán las fotos.
viernes, noviembre 10, 2006
BricoInformática: llamar gratis a telefonos fijos de medio mundo con VoIP - free calls to telephones of average world with VoIP
Ideal para estudiantes Erasmus, personas con familiares o amigos en el extranjero y personas que simplemente quieran disfrutar de un teléfono en su pc.
El servicio es gratuito durante 120 días y tenemos un límite de 300 minutos a la semana. El registro es gratuito y prácticamente no piden ningún dato.
Necesitamos: un micrófono (por 1.50 € ya tienes uno) y altavoces para el ordenador (seguro que ya tienes).
El truco del almendruco: cuando se nos acabe el chollo o gastemos los 300 minutos semanales, nos registramos con otro nombre de usuario y sin problemas.
Enlace: entra en www.internetcalls.com y descarga el programa. En serio, no cuesta nada.
miércoles, noviembre 08, 2006
Leer un fichero de texto en C# .NET reconociendo tildes (acentos) y otros signos especiales - To read a text file in C# .NET and recognize special characters and signs
Para empezar, C# .NET posee un mecanismo de lectura de ficheros de texto muy eficiente, siendo éste el siguiente:
// Método para procesar un fichero public void procesarFichero() { // Definimos un StreamReader StreamReader lector; string linea = ""; try{ lector = File.OpenText(fichero); // Lee linea a linea while ( (linea = lector.ReadLine()) != null){ //hacemos lo que queramos } // Cerramos la conexion lector.Close(); } catch (Exception e){ System.Console.WriteLine("Problemas al cargar el fichero.{0}", e); } }
El problema viene si al llevar a cabo el proceso de lectura, podemos observar que los string resultado no incorporan caracteres especiales como por ejemplo las tildes y acentos de otro tipo.
La causa de este problema es que el descriptor que hemos utilizado anteriormente sólo reconoce ficheros con codificación UTF-8 (por defecto), por lo que la entrada debe estar codificada de este modo. ¿entonces, cómo podemos convertir nuestro fichero de texto de toda la vida a UTF-8?
Pues muy sencillo: tomamos un editor básico de texto (bloc de notas de windows o similares), abrimos nuestro fichero, seleccionamos la opción de guardar como... y en el campo referente a codificación seleccionaremos UTF-8.
//claves: procesar fichero texto c# .net utf-8 reconocer tildes read text file
lunes, noviembre 06, 2006
SmartSort v1: ordenar una lista de string en base a una clave en C# .NET
Muy útil para el manejo de cadenas ordenadas.
//funcion para reordenar la lista de la forma mas eficiente
public System.Collections.Generic.LinkedListsmartSort(
System.Collections.Generic.LinkedListlista,
string clave){
char[] auxs;
LinkedListauxl;
int nmatch;
int longi;
//creo un array de linkedlist de tamaño clave*2+1
LinkedList[] clasi = new LinkedList [clave.Length*2 + 1];
//obtengo los caracteres de la clave
char[] clavec = clave.ToCharArray(0,clave.Length);
//para cada una de las palabras de la lista inicial
IEnumerator enu = lista.GetEnumerator();
while (enu.MoveNext()){
nmatch = 0;
auxs = ((string)enu.Current).ToCharArray();
//me quedo con la menor de las longitudes
longi=clave.Length;
if (((string)enu.Current).Length < longi =" ((string)enu.Current).Length;" i =" 0;" i =" longi-1;">=0; i--){
if (clavec[i] == auxs[i]) nmatch++;
}
//si nmatch==0 introduzco la diferencia de longitudes como distancia
if (nmatch == clave.Length*2){
nmatch = nmatch - Math.Abs(clave.Length - enu.Current.ToString().Length);
//controlo los limites permitidos
if (nmatch > clave.Length * 2) nmatch = clave.Length * 2;
}
//clasifico esta palabra
if (clasi[nmatch] == null) clasi[nmatch]=new LinkedList();
clasi[nmatch].AddLast(enu.Current.ToString());
}
//creo la lista a devolver
auxl = new LinkedList();
for (int i = clave.Length * 2; i >= 0; i--){
if (clasi[i] != null) {
enu = clasi[i].GetEnumerator();
while (enu.MoveNext()){
auxl.AddLast(enu.Current.ToString());
}
}
}
//devuelvo la lista
return auxl;
}
//claves: ordenar lista palabras clave c# .net order list linkedlist words key
Filtro de palabras para C# - Eliminación de signos de puntuación, tildes, ...
//función para filtrar la palabra y dejarla lista para tratarla
//devuelve la palabra filtrada o null en caso de que no pase el filtro
public string filtro(string palabra){
//eliminamos palabras de un caracter solo
if (palabra.Length == 1) return null;
string aux=palabra;
//eliminamos caracteres que nos puedan estorbar
char[] simbolos = new char[6];
simbolos.SetValue(',',0);
simbolos.SetValue(';',1);
simbolos.SetValue('.',2);
simbolos.SetValue(':',3);
simbolos.SetValue('-',4);
simbolos.SetValue('_',5);
aux=aux.Trim(simbolos);
//pasamos a minusculas
aux=aux.ToLower();
return aux;
}
//claves: filtro palabras c# sharp eliminar caracteres signos puntuacion
lunes, octubre 30, 2006
Editor gratuito para c#
>> http://www.icsharpcode.net/OpenSource/SD/Download/
//claves: editor gratuito IDE c# opensource