Aunque a algunos de los que me conocen quizas les sorprenda....yo a veces leo..... si si, leo libros..... sin dibujos ni nada, y en letra pequeña.... entre algunos de los que leo (literatura fantastica mas que nada) los de MundoDisco (Discworld xD) y el famosisisisisimo y extraordinario, el unico e inigualable, Terry Pratchett.... mago del humor y la narracion de nuestra epoca.
Dialogos hilarantemente epicos, batallas sangrientamente guasonas..... creo que eso lo define todo. Algunos comparan su estilo con una mezcla de Tolkien con Monty Python..... y yo, fan de Tolkien... y de las peliculas de los Monty..... puedo decir que los supera a ambos... con creces.
Sus sagas son familiares, ya que una vez llevas unos pocos libros, al juntarse y entreliarse las vidas de sus protagonistas.... eso al lector le gusta. Si no sabeis que leer para pasar un buen rato... teneis 32 libros (Que yo sepa y a dia de hoy, que este tio es una maquina de escribir con patas) de lo mejorcito del mercado. Os aseguro que los reelereis y los reelereis sin parar.
Tampoco todo son risas..... Si buscais la moraleja, el mensaje oculto que todo libro nos transmite.... los de Terry tienen mucho que decir. Sus libros llegan a tratar sobre el sexismo en "El color de la magia" o sobre el racismo en "Hombres de armas", toca un poco las narices a la iglesia en "Dioses menores"..... vamos, que sin duda os encontraris algunas similitudes con nuestra sociedad... en este hilarante mundo.
Hace ya tiempo que se de la existencia de un videojuego, no lo conseguir instalar (cosas del mal trato del CD, supongo). Tambien lei algo acerca de una pelicula que comenzo a rodarse, pero la empresa se fue a pique y se quedo en el olvido.... hoy, buscando por esa gran fuente de conocimientos que es el EMULE, me encontre con una pelicula (No la que yo lei, si no otra).... rapidamente busque en youtub a ver si alguien la habia subtitulado, pero no he encontrado subtitulacion alguna.... otra razon mas para aprender ingles asi como "fluido" pronto.
Aqui teneis el empezar.... vosotros vereis que haceis con ello. Os recomiendo leer la saga, si os gusta, ver la pelicula ^^.
Yo por mi parte, aunque supongo que nunca leera este blog.....una cosa.... Go Pratchett Go!!!!!
PD: Y ya sabeis como es la vida... si en verdad os gusta el autor. Compraros sus libros, no son muy caros y merece la pena. Yo me he propuesto acabar la coleccion... a ver si en españa tiene mas auge lo relacionado con el.... y nos llega.
PPD: Publicadlo!! Expandirlo a los 4 vientos!!! Terry For President!!!!
viernes, 28 de diciembre de 2007
Go Pratchett Go!!!
Publicado por
(brants) Gonzalo R.G.
en
17:58
0
comentarios
Etiquetas: Terry pratchett
jueves, 27 de diciembre de 2007
J0az
Mas perlas del youtub...
Publicado por
(brants) Gonzalo R.G.
en
14:08
0
comentarios
Etiquetas: Desvarios
sábado, 22 de diciembre de 2007
Llega la navidad....
Bueno!!! Por fin se acabaron las clases!!! Por fin ya no mas informatica!!! (eso estarian pensando esos alegres e ingenuos señores, señoras, señoritos y señoritas que se apuntaron al cursillo de informatica jejejeje)
Ya se que os he dado mucha caña, y algunos os costaba seguir el ritmo, pero ya sabeis como es esto, el que sigue la consigue.... ademas supongo yo que algo aprenderiais... aunque solo sea a maldecir al ordenador (fase por la que pasamos todos). Opino que los que tienen PC en casa les valdra para mas lo que yo he dado, que los que no lo tienen.... que se notaba mucha diferencia de nivel (y seguimiento) en ese aspecto.... A ver si nos vemos otro curso!!
Yo personalmente he sacado mucho de la experiencia.... que el salir "al estrado" no es facil jejejeje.
Como pequeño homenaje a ellos... aqui dejo unas "foticos"
Publicado por
(brants) Gonzalo R.G.
en
9:47
0
comentarios
Etiquetas: varios
domingo, 16 de diciembre de 2007
Me emociono...
Cuando veo cosas como esta, es cuando me alegro de ser informatico
Publicado por
(brants) Gonzalo R.G.
en
10:32
0
comentarios
Etiquetas: Desvarios
miércoles, 12 de diciembre de 2007
Apuntes .NET (C#) - Chapter 4 - Clases y Estructuras I
En C# la diferencia entre clases y estructuras es que las clases se usan para declarar un tipo por referencia, mientras que las estructuras uno por valor, mientras que en otros lenguajes hay mas diferencia de una cosa a otra. Por norma general, las estructuras son utilizadas para almacenar no muchos datos. Aunque es mas una pauta que una norma (Go Pratchett Go!! :D).
(No me convenze a mi eso de que son iguales.... supongo yo que la diferencia habra de ser mas radical que eso y en que unas llevan punto y coma y otras no, no?.... ya me enterare jejejeje)
Esta es la manera de definir una estructura en C#, Se escriben donde se escribiria una clase... es decir dentro del espacio de nombres (si tenemos).
Los constructores se aplican tanto en clases como en estructuras... es un metodo especial, llamado igual que la clase/estructura, de esta manera cuando instanciemos un nuevo tipo, este ejecutara el constructor. Si el constructor tiene parametros y es una estructura, como en este caso, podremos NO indicarlos, mientras que si fuera una clase, estariamos obligados a ello.
struct nombre_estructura {
//Esto es un constructor
public nombre_estructura(int a,string b, double c) {
this.dato1=a;
this.dato2=b;
this.dato3=c;
}
//fin del constructor
public int dato1;
public string dato2;
public double dato3;
};
nombre_estructura aux; //Funciona
nombre_estructura aux=new nombre_estructura(); //Funciona
nombre_estructura aux=new nombre_estructura(2,"uuu",1.0) //Funciona
No se si ya he echo mencion a "public", esta palabrita consigue que podamos tratar con el dato cuando manejamos alguna estructurao clase. Si no lo tuvieramos, C# no nos permitiria acceder a el. Es la contrapartida de "private" de C++.
En .NET, las propiedades (datos) en clases y estructuras, asi como sus metodos, hemos de declararlos "public" ya que son "private" por defecto ¿capicci?
Asi, si fuesemos programadores intentando matar un dragon, por poner un ejemplo eh... empezariamos construyendo el objeto "dragon"
public class dragon {
int x,y; //posiciones absolutas del bixo
int fuerza; //fuerza transformada en numero... si no ke, esperas ake te pegue?
int resistencia; //Ahi ahi... como las magic
int largo_llamarada; //demosle un arma al bixo...
int ancho_llamarada;
int direccion_llamarada; //dejemoslo en 4 suponiendo ke el mapa sea una matriz simple...
string nombre; //por si acaso nos preguntan
}
Los metodos de clase, son funciones que incorporamos DENTRO de la clase, para manejar los datos, tambien llamados "funciones miembro". En la programacion , ya sea orientada a objetos o no, es importante la encapsulacion por motivos ya mentados, asi que se deberia impedir el acceso a los dato de la clase, como ya estan declarados "por defecto" como private, hacemos public los metodos, asi manejamos dichos datos, sin peligro a que el usuario los trastee (aparte de conseguir que no pase nada si se mejora la clase y esta mantiene sus metodos)
El dragon, quedaria asi....
public class dragon {
int x,y; //posiciones absolutas del bixo
int fuerza; //fuerza transformada en numero... si no ke, esperas ake te pegue?
int resistencia; //Ahi ahi... como las magic
int largo_llamarada; //demosle un arma al bixo...
int ancho_llamarada;
int direccion_llamarada; //dejemoslo en 4 suponiendo ke el mapa sea una matriz simple...
string nombre; //por si acaso nos preguntan
public void Set_X(int val) { this.x=val; } //funciones get/para cada una de las variables....
public int Get_X() { return this.x; }
//Imaginaros que he escrito el resto... xD
}
Esto, por supuesto, puede mejorarse, puedes crear rapidamente los metodos asi..
public int X {
get {
return this.x;
}
set {
this.x=value;
}
}
A esta chorradilla (denominemosla "get/set sentences" por decir algo) le veo la pega que no me deja insertarle algun otro metodo propio.... pero bueno, igual si es posible y sencillamente no se como ^^... pero es util en cuanto a organizar el codigo, y a crear rapidamente funciones get/set.
El constructor arriba mencionado tambien es aplicable a las clases, solo que si esta lo incorpora, obliga a usarlo, no permite obviarlo. Es recomendable incluir siempre un constructor en las clases que creemos, de todas maneras el compilador creara uno basico si no se incluye, asi que por la fuerza acabara haciendolo igualmente ^^.
public class dragon {
int x,y; //posiciones absolutas del bixo
int fuerza; //fuerza transformada en numero... si no ke, esperas ake te pegue?
int resistencia; //Ahi ahi... como las magic
int largo_llamarada; //demosle un arma al bixo...
int ancho_llamarada;
int direccion_llamarada; //dejemoslo en 4 suponiendo ke el mapa sea una matriz simple...
string nombre; //por si acaso nos preguntan
//Constructor
public dragon() {
this.x=0; this.y=0;
nombre="EskamaRoja";
//......... y seteamos todas las variables asi
}
}
En .NET no existen destructores en si.... ya que la gestion de memoria lo lleva el framework y a nosotros no nos deja meter mucha mano... nos deja usar en cambio, finalizadores... que viene a ser algo parecido, y que casi que nos sirve para lo mismo... asi que estamos contentos. Un finalizador se indica con el simbolo ~ antes del nombre del metodo de finalizacion (se escribe como el constructor, pero con el simbolito coñe), y en ese metodo deberiamos efectuar las tareas de limpieza necesarias.
El Garbage Collecter gestiona los recursos de memoria, pero no es capaz de trabajar con otro tipo de recursos como manipuladores de bases de datos, graficos, etc. Asi que las clases que tengan algun tipo de datos que el Garbage Collecter no pueda manejar, sera la que tenga que llevar un destructor implementado.
Es recomendable crear a su vez un metodo que haga lo mismo que el destructor, pero que pueda ser llamada por el usuario, esto vuelve a ser mas una pauta que una norma.
Los metodos de clase, siguen siendo funciones, y como tal admiten parametros de entrada tipicos, y sobrecarga de funciones, que consiste basicamente en crear funciones con el mismo nombre, pero distintos parametros. Asi este ejemplo seria valido. Lo explicaremos mejor en otro post
public class miclase {
int x;
public void SetX() { this.x=0; }
public void SetX(int a) { this.x=a; }
public void SetX(int a,int b) { this.x=a*b; }
}
La sobrecarga de metodos tambien se usa para crear varios constructores, asi poder definir un objeto de varias maneras.
Para modificar variables enviadas a una funcion por sus parametros (lo que en C/C++ conseguiamos usando una referencia), en C# ha de utilizarse las palabras claves "ref" y "out".
nombremetodo(ref int a) { } //Definicion de metodo...
nombremetodo(ref b); //llamada al metodo....
De esta manera, podremos cambiar B en el metodo, y los cambios persistiran. Pero solo podremos enviar de esta manera variables ya inicializadas, a las que ya les hayamos asignado previamente un valor. Para poder enviar variables sin inicializar, usaremos la sentencia "out", que funciona igual que ref. (En otros lenguajes out no existe, y ref se lleva todo el trabajo xD)
Como ya me he extendido demasiado... seguire en otro post....Hasta mas ver
Publicado por
(brants) Gonzalo R.G.
en
22:00
0
comentarios
domingo, 9 de diciembre de 2007
Ficheros Configuracion .INI
Bueno... programando programando me encontre un dia que quise(Y me juego los webos ke a mas de uno la pasao), por H o por B, programarme una clase para manejar configuracion desde ficheros .INI.
Gente del fondo: "Baaah pelaooo! usa XML!! j0aZ j0aZ j0aZ miraleee"
!!Que si que si, pero yo con mis .ini!! XD
No pienso discutir cual es mejor, mas sencillo, eficaz o lo que quieran, pero a mi personalmente, que aun no he echo ningun programa que requiera ingentes cantidades de datos de configuracion, no necesito XML.... ademas, les tengo apego a los .ini
Asi pues, me ha surgido la misma necesidad en .NET, he abierto mi clase escrita en C++ ... y a trabajar
En lineas de codigo la cosa cambia mucho, si contamos plantillas de listas dinamicas, las clases hijas de estas adaptadas a la clase para los "Inis"... mas la propia clase, .... no he echo ni contarlas... pro muchas mas ... y en mas ficheros...
Visto que rafb me borro el codigo.... no creia que lo hicieran xD usando Google Docs voy a pastear el codigo a partir de ahora... de tanto en cuanto quiza lo actualize segun yo mismo vaya aprendiendo (Recordad que estas cosas son experimentos, locuras y similares)
Codigo de la clase Aqui
¿Como usarlo? Empollate el codigo y lo sabras...
PD: Despues de colgarlo me he dado cuenta de que hay 1 pequeña incongruencia en los comentarios... digo que "limpio el fichero" en el metodo save, estas eran mis intenciones iniciales... al final decidi que era mas sencillo crear o sobreescribir, dejandolo "limpio" y copiarle todos los datos. ala, a jugar a pala.
Publicado por
(brants) Gonzalo R.G.
en
21:46
0
comentarios
martes, 4 de diciembre de 2007
Freaks For President...
Hamburguesa vegetal.... ke grandes.....no tiene perdida casi ninguna de sus canciones...cojonudos...no tengo mas que añadir
Publicado por
(brants) Gonzalo R.G.
en
22:12
0
comentarios
Etiquetas: Desvarios
lunes, 3 de diciembre de 2007
Apuntes .NET (C#) - Chapter 3 - Tipos de datos
Los tipos de datos en .NET los podemos catalogar en 2 grandes grupos. Por valor y por Referencia.
TIPOS POR VALOR:
- Los tipos por valor son espacios en el Stack (Pila) cuando son variables locales y expresiones intermedias y en el Heap (Monton) en el resto de situaciones (Globales y Estaticas)
- Contienen sus datos directamente, ofreciendo un excelente rendimiento
- El tamaño maximo es de 16 bytes
- Estructuras y Enumeraciones son Tipos por valor definidos por el usuario, y se comportan exactamente igual que los demas.
- Los tipos por valor no pueden ser "null"
- Puedes declarar un tipo por valor como "Nullable" (Que puede ser null) asi: Nullable
nombre=null; O de esta otra manera int?nombre=null; - Heredan todos de System.ValueType
- La memoria asignada de estos tipos se elimina cuando esta fuera de ambito en el Stack, y mediante el Colector de basura (Garbage collector) cuando esta en el Heap (Desapareciendo con la clase a la que esta asociada)
| Tipo | Bytes | Rango |
| Char (char) | 2 | |
| bolean (bool) | 4 | |
| IntPtr | ? | |
| DateTime (date) | 8 | 1/1/0001 12:00:00 AM a 12/31/9999 11:59:59 PM |
| SByte (sbyte) | 1 | -128 a 127 |
| Byte (byte) | 1 | 0 a 255 |
| Int16 (short) | 2 | -32768 a 32767 |
| Int32 (int) | 4 | -2147483648 a 2147483647 |
| UInt32 (uint) | 4 | 0 a 4294967295 |
| Int64 (long) | 8 | -9223372036854775808 a 9223372036854775807 |
| Single (float) | 4 | -3.402823E+38 a 3.402823E+38 |
| Double (double) | 8 | -1.79769313486232E+308 a 1.79769313486232E+308 |
| Decimal (decimal) | 16 | -79228162514264337593543950335 a 79228162514264337593543950335 |
TIPOS POR REFERENCIA
- Cuando declaramos una variable de tipo objeto, se crea una referencia en el stack, y al crear la instancia en el heap por medio del operador "new", su dirección en memoria se asigna a la susodicha variable. De esta forma se puede acceder al valor del objeto por medio de la referencia.
- Si copias un tipo por referencia, y modificas la copia, ambas variables, copia hija y copia madre, seran cambiadas.
- Los String son inmutables. Cuando un String es modificado, un nuevo objeto se crea en el Heap con las caracteristicas del nuevo String, sustituyendo al antiguo String
- Heredan todos de System.Object
- Como ya hemos dicho, estos objetos almacenados en el Heap, son eliminados por el Colector de basura.
Console.WriteLine(8.ToString());
Que quizas ahora no sirva de mucho, ya que sin el .ToString() obtendriamos la misma salida, cuando avanzemos mas en el lenguaje veremos como hay ocasiones en las que usaremos el boxing para cosas mas interesantes.
CONVERSIO DE TIPOS
Conversion Implicita: (Widening Conversion) Aquella para la cual no necesitamos de ningun otro mecanismo de conversion mas que el simbolo de asignacion. Solo nos permitira este tipo de conversion si el valor que queremos convertir es menor al valor convertido. Me Explico...:
int a=10;
double b=10.0000005
a=b; //No Permitido
b=a; //permitido
Conversion Explicita: (Narrowing Conversion) Es la contraria a la implicita, la que necesitamos en el caso de que el valor a convertir no sea compatible con el valor convertido. Para ello usaremos el tipo al que queremos "pasarlo" entre parentesis (Igual que en C++).
a=(int) b; //Ahora si nos dejaria
Publicado por
(brants) Gonzalo R.G.
en
11:37
0
comentarios
domingo, 2 de diciembre de 2007
Apuntes .NET (C#) - Chapter 2 - Conceptos basicos sobre la POO
La Programacion Orientada a Objetos, a partir de ahora, POO, es uno de los paradigmas de programacion a los que quizas cueste mas "dar el salto" en un principio, luego vereis que la cosa es coser y cantar. Voy a tomarme la explicacion de este punto bastante mas " a mi manera" y dejar la docencia en manos de profesionales. Vamos, que busqueis en google.
¿Que es un objeto?
Un objeto no es mas que unos datos de informacion, y las acciones que podemos realizar con esos datos, almacenadas en una misma entidad, un objeto. Asi un objeto "Caballo", podria tener datos como Raza, Color, Nombre, Edad, Hambre, Cansancio.....
y Metodos, o "Acciones que podemos efectuar sobre esos datos" como , Comer, Andar, HacerFiletes,... ¿que es muy abstracto? en eso consiste la cosa nenes que el ejemplo del coche esta muy visto xD
Herencia
Es la capacidad de un objeto para heredar datos y metodos de otro. Al que se le denomina objeto padre. En el caso del caballo, la herencia seria como un "es un", asi el caballo "Es Un" animal. Diriamos que el caballo hereda de animal (Si hubiera definido un objeto animal).
Para usar la herencia, es necesario que el objeto del que queremos heredar haya sido diseñado pensando en ello (Aunque no obligatorio, y depende con que lenguajes... xD).
En el entorno de ejecucion .NET todos los objetos heredan de una clase base denominada "Object" y solo existe la herencia simple de objetos (Un objeto solo puede ser derivado desde una clase base). Esto nos impide, lo que yo decia antes de que por ejemplo en C++ podemos heredar de la clase que nos salga de los webs.... a veces malo, a veces bueno. A eso de heredar de la clase que nos salga de los webs, esta gente de palabras finas lo llama "Herencia multiple". En la mayoria de los casos es mas seguro no usar la herencia multiple.
El entorno de ejecucion .NET permite la herencia multiple en forma de interfaces, que no pueden contener implementacion. Ya las trataremos...
Polimorfismo y funciones virtuales
Las funciones abstractas, o virtuales, permiten al programador usar polimorfismo para simplificar el codigo. Cuando hay una funcion virtual, el programador puede pasar una referencia a la clase abstracta en vez de a la derivada y el compilador escribira el codigo para llamar a la version apropiada de la funcion en tiempo de ejecucion.
public abstract class objeto1
{
public abstract void metodo1();
}
Las clases abstractas, se usan basicamente para englobar objetos de un mismo tipo, ya que como veis, no se le puede incluir cuerpo a un metodo abstracto. Aunque si hay otras maneras de que un objeto abstracto, suministre funciones utiles para otras clases, lo trataremos mas adelante.
Encapsulamiento y visibilidad
Cuando se crea un objeto se ha de tener en cuenta que datos queremos que el usuario del objeto "Toque" y cuales no. Los detalles que no son visibles al usuario se consideran Encapsulados. Normalmente intentaremos encapsular todo lo que se pueda por varias razones:
- Reduce la posibilidad de que el usuario cambie o dependa de esos detalles en su propio codigo, ya que los cambios en el objeto podrian provocar problemas en dicho codigo.
- Los cambios realizados en las partes publicas de un objeto deben mantenerse compatibles con las versiones anteriores. Cuanto mas visible sea la clase al usuario, mas dificil es conseguir llevar a cabo este punto.
- Si tenemos muchos campos publicos, la depuracion es mas dificil.
Publicado por
(brants) Gonzalo R.G.
en
10:56
0
comentarios
Apuntes .NET (C#) - Chapter 1 - Lexico basico
C# Es un lenguaje cuyo léxico se asemeja a C o C++ con algunas pequeñas variaciones.
La estructura básica de un programa en C# es esta:
//---------------------------------------------------------------
/*
Comentario
*/
//Otro Comentario
using System; //Clases principales del entorno de ejecución .NET
public class programa { //Todo programa en C# ha de estar contenido en una clase
public static void main() { //Void main, es el inicio de la aplicación... como en C/C++
//CÓDIGO...
}
}
//-----------------------------------------------------------------
Como explico en los comentarios, todo programa en C# ha de estar escrito dentro de una clase.
Tanto el void main() como lo que antes eran variables "Globales", ahora seran propiedades de clase, y las funciones, metodos. Y todo en .NET es una clase, usease, un objeto, pa que nos entendamos.
El espacio de nombres se asemeja a los #include, solo que todo lenguaje que use .NET ya lo lleva incorporado "de serie" y nuestros "using" solo nos sirve para no tener que escribir toda la ruta del espacio de nombres... me explico
System.Console.Write("hola"); <-- Esto escribiria "Hola" en pantalla Y si mi programa lleva escrito: using System.Console; podre escribir Write("hola"); y funcionara. Es decir, que las sentencias using no añaden ninguna biblioteca, solo nos hace mas facil el acceso a ella. Dentro del espacio de nombres incluyen las siguientes anidaciones:
- Collections: Objetos como listas, colas, tablas hash....
- Configurations: Objetos de configuracion e instalacion
- Diagnostics: Codigo de depuracion y control de ejecucion
- Globalization: Globaliza nuestra aplicacion
- IO: Entrada/Salida
- Net: Operaciones de red
- Reflection: Visualizacion de los metadatos de tipos, carga dinamica y creacion de objetos
- Security: Soporte de seguridad .NET
- ServiceProcess: Creacion y gestion de servicios de ventanas
- Text: Codificacion y conversion de clases y texto
- Threading: Subprocesos y sincronizacion
- Runtime: Interop, uso remoto y serializacion.
- Data: Operaciones con bases de datos
- XML: Clases para la gestion XML
- Drawing: Clases que soportan GDI, impresion y gestion de imagenes
- Web: Clases para tratar con servicios web
- Windows.Forms: Clases para crear interfaces
- ........
Las sentencia "public" indica que el "objeto" al que precede va a ser de caracter publico, es decir, "accesible desde fuera". Que viene a ser lo contrario que la sentencia "private:" de C/C++.
Mas adelante me extendere en este tema.
Otra cosa que cabe mentar es que los tipos de datos en C# (Y creo que tambien en todos los lenguajes que corren bajo .NET, aunque no lo he mirado xD) son en realidad "pseudomacros" que llaman a los tipos de datos que alberga .NET. Explico, cuando yo creo un "int"...
int nombrevariable;
En realidad mi compilador entiende:
System.Int32 nombrevariable;
Y con esto y un bizcocho.....dew
Publicado por
(brants) Gonzalo R.G.
en
10:46
0
comentarios



