Wikipedia grabada

29 06 2008

Hoy estuve estudiando de Wikipedia muchas cosas sobre redes. A la mitad de la investigación sobre WEP y WPA, caí en un artículo que decía que estaba grabado y lo que podía escuchar:

Wikipedia grabada

Me descargué el audio, y me puse a ver como era el tema. Después de escucharlo llegué a la página oficial del proyecto y me pareció muy interesante. Se ve que es bastante nuevo porque por ahora hay pocos audios, pero a mi modo de verlo, parece prometedor. En cuanto tenga tiempo, configuro bien mi micrófono y cada vez que lea algo de Wikipedia me tomo un tiempito más y lo grabo.

¡Excelente iniciativa!





OpenArena

14 06 2008

Ayer me dieron ganas de jugar un rato a los videos juegos para matar el tiempo y para aprovechar la placa 3D que tengo. La verdad que hacía una cantidad que no jugaba absolutamente a ninguno y me sorprendí cuando ví que mantengo el nivel … :)

Me puse a buscar juegos para Linux y como desde hace tiempo estoy suscrito por RSS a LinuxJuegos.com, empecé por fue buscar ahí. Ahí están todas las novedades de las cosas relacionadas con los Juegos para Linux, desde drivers hasta Pyweek’s. Y mucho más.

Encontré el OpenArena que parecía que tenía unos gráficos piola y es el clon del Quake 3 Arena que ya lo conocía. Lo busqué con apt-cache search openarena y estaba, asique lo instalé desde ahí. Pesa unos 280Mb.

Jugué un ratito para probarlo y me mandé a jugar en internet. Pero no me fue muy bien, tenía mucho PING (algo así como ~250) y se notaba bastante: cuando yo disparaba el otro tipo ya se había corrido de donde estaba, entonces se hacía bastante difícil. Igualmente el nivel que manejan los flacos que están ahí es otro totalmente distinto al mío.

Como me cansé de perder y perder, no sé si debido al PING o porque soy malo a comparación con ellos, me puse un servidor en mi casa para este juego, para que juguemos entre amigos o los que estemos cerca de Santa Fé (la mayoría de los servidores están afuera del país y tienen mucho PING).

Lo probé con algunos amigos y tiene entre 20-50 de PING que es bastante razonable para jugar. Además lo bueno de este juego es que no necesita mucha PC, los requerimientos son extremadamente mínimos: ni siquiera placa 3D (que era lo que yo quería usar :( ).

Aunque yo lo instalé desde los repositorios, es recomendable descargarlo desde el sitio oficial, porque después hay que aplicarle un parche y se complica bastante sino. De esta forma para aplicar el parche hay que descomprimirlo sobreescribiendo todos los archivos, y listo.

Para jugar en mi servidor hay que entrar en modo multiplayer y elegir specific. Luego como host: humitos.homelinux.net y como puerto 27960.

Como no podía ser de otra manera, me hice un script en Python para saber quienes están conectados al servidor cada X cantidad de minutos :) . Este se conecta con un sitio el cual informa los servidores activos y quienes están jugando. Parsea este resultado y utiliza aosd_cat para mostrarlo en pantalla. ¿Que tul?. (la idea de usar aosd_cat se la robé a Gastón :P )

… escucho sugerencias…





La frase ganadora

12 06 2008

Como todos los días, o la mayoría de los que hablo con Gastón por chat, siempre sale el tema de Python & Ruby y nos ponemos a boludear un rato, o con algún tema en particular, algo específico del lenguaje, o a insultarnos mostrando defectos del lenguaje contrario.

Hoy hablando de las 3ras Jornadas de Python en Santa Fé, me dijo que iba a ir y que iba a preguntar algo como:

“¿Cómo hago para insertar métodos en una clase
sin sobreescribirla? Como en los lenguajes modernos.”

Y para terminar, luego de mencionar que en Ruby se puede hacer, decir:

“Lo que pasa que en Japón ya es mañana, estamos en el futuro.”





Me privan los datos

5 06 2008

Es lamentable. Hoy después de hablar lo que publiqué en el post anterior con la profesora, un amigo le preguntó que forma tenía de exportar la base de datos para poder trabajar en su casa (estamos haciendo 2 guías de 20 ejercicios cada una de sentencias SQL). Antes me había preguntado a mí y no tenía ni idea ya que estaban usando Oracle.

A: Le preguntaba si no hay una forma de exportar la base de datos o algo para poder llevármela a mi casa y poder trabajar ahí.

P: No porque el profesor no la puso disponible a la base de datos.

A: Ah, ¿No está disponible?, yo le decía porque no llegamos a hacer todos los ejercicios.

P: Mmm… No, la única opción que tienen es venir a trabajar acá al laboratorio

También está en OGG, y es patético. Asique bueno, mi amigo se puso a hacer SELECT * FROM tabla; de las 8 tablas que había y copiaba eso a un “.txt” para que yo me lleve a mi casa y luego haga un script que levante eso y lo vuelque en una base de datos.

Recién lo termino, aunque no está muy bien hecho, ya que algunos atributos estaban separados por 2 espacios y otros por N, quedó más o menos… A veces tuve que agregarle campos vacíos (le puse ** para identificar cuales eran).

Igualmente, no entiendo muy bien todavía, y no tengo ganas de ponerme a ver cómo son tampoco, son las claves foráneas y las claves primarias. Aunque tengo el diagrama, este se entiende bastante poco.

… dentro de poco no voy a poder compartir con nadie lo que aprendo en la facultad, espero realmente que esto cambie …





Una “discusión” sobre un parcial

4 06 2008

Primero como para ponernos en órbita, explico de qué se trata esto. Ayer (Martes) rendí el primer y único parcial de Gestión de datos. No pude estudiar mucho por algunas cuestiones personales en cuanto a discrepancia con los docentes de la materia y no tenía mucho ánimo. Por suerte algo de SQL sabía porque lo había estudiado por mi cuenta en otra oportunidad.

Luego de salir del parcial, me fui contento a mi casa porque me había ido, a mi modo de ver las cosas: bastante bien. Como siempre, esto no quiere decir que apruebe ni nada por el estilo, y mucho menos si considero la bronca que me tienen los docentes por hacer preguntas en clases.

Dejando de lado todo esto, hoy tuve clase de práctica y un amigo me preguntó algo sobre un ejercicio que me hizo poner en duda. Aproveché y le pregunté a la profesora sobre esto. Escribo abajo el diálogo completo (transcripción que realicé desde un OGG).

Pero antes, explico más o menos como era el enunciado del problema. Había un diagrama entidad-relación el cuál nosotros teníamos que pasar a tablas SQL pero sin escribir las sentencias CREATE TABLE y demás. Sino que con algunos dibujos y explicando cuales eran claves primarias y foráneas estaba bien. El diagrama era como este (lo único que le falta son algunos atributos a foto que no recuerdo, pero es para mostrar la idea):

El enunciado decía más o menos así: “Un usuario puede tener 0 o n fotos y una foto puede tener como máximo un dueño. Además un usuario puede tener n cuentas de email. NOTA: cant_fotos es un atributo calculable.”

Yo hice tres tablas, una para Usuario, otra para Foto y otra Usuario_Email en la que indicaba el email y el usuario, de modo que pueda tener muchos emails un mismo usuario. En ningún lado puse cant_fotos ya que en el enunciado decía que era un atributo calculable. Aunque antes de leerlo igualmente pensaba que no debería estar ya que sale con un SELECT COUNT. Asique no lo puse en ningún lado. Ahora viene lo que hablamos con la profesora hoy. El primero que hablar (”A”) es un amigo, y luego paso a ser yo (”M”). “P” es la profesora:

A: En la que teníamos que armar las tablas: a mí me quedaron tres, Usuario, Correo y Foto. Además había un atributo que era calculable.

P: Si, eso es porque estaba en el modelo.

A: Claro, yo no lo puse en ninguna tabla.

P: No, pero eso tiene que estar en la tabla Usuario.

A: ¿Tiene que estar?

P: Si obvio.

A: Pero si se puede calcular.

P: El contenido después lo verán, se supone que si lo estás haciendo en la vida real el contenido lo calcularás por código o lo que sea. ¿Pero dónde lo vas a almacenar? Tenés que tener creado el campo dentro de la tabla.

M: Pero eso se calcula desde la tabla de fotos. Hacés un SELECT COUNT de la tabla de fotos y sabés cuantas fotos tiene ese usuario. No es necesario guardarlo.

P: Bueno, está bien. Lo óptimo sería no guardarlo, sino que ir calculando e ir mostrándolo. Sino que así como estaba en el modelo se necesitaba tener ese atributo en la tabla.

M: ¿Porqué? No entiendo…

P: Y porque es un atributo de Usuario. Después el contenido lo vas calculando y, osea, lo que se entiende es que si está en el modelo es porque se necesita tenerlo almacenado en algún lado, entonces lo almacenás como un atributo en la tabla de Usuario. Igual, si no lo pusieron se les bajará unos puntitos nada más. Osea, sólo por no haber puesto el atributo N-Fotos no van a salir mal.

M: No, está bien, no es la cuestión salir bien o salir mal. El tema es que no entiendo porqué está mal no ponerlo, a eso me refiero. Si justamente el enunciado decía “el atributo es calculable”

P: Si, en realidad en el enunciado estaba como una aclaración para que no pregunten “¿Qué es ese atributo que esta con líneas puntadas?” Puede ser que eso los confundió digamos y que pensaban que había que hacer algo o no almacenarlos.

M: Es que está almacenado, porque si vos sabés cuantas fotos hay en la base de datos, ese
atributo ya lo tenés. A eso es lo que voy yo.

P: Sí, pero cuando vos hacés el cálculo lo obtenés.

M: Claro, de hecho si lo guardás puede quedar inconsistente la base de datos porque te quedan 5 fotos y tiene 10.

P: Está bien, y es así como vos me decís. De hecho puede ser que no esté el atributo en
la vida real y no lo tengas que guardar, pero en este caso del modelo sí porque aparecía. Si
no fuese necesario diréctamente no aparece en el modelo y por código lo obtenés. Y listo.

M: Bueno, entonces que sea calculable y que no sea calculable es indistinto.

P: Si, en este caso es lo mismo.

M: No puede ser.

P: ¿Cómo que no? Cuando nosotros hicimos la guía había cosas que te pedía la guia y que en modelo no se reflejaban. Bueno en este caso es al revés, si estaba en el modelo era porque después al transformarlo lo ponías como un atributo en tu tabla. Igualmente todo es discutible, cuando después vos empieces a trabajar podés ir a preguntarle al usuario que te está mandando hacer el trabajo si lo va a querer tener almacenado o no. Y le vas a decir que no hace falta porque lo vas a poder calcular y lo podés hacer por código, etc etc… Y seguramente no lo vas a tener. En este caso del modelo si.

… me imagino preguntándole al cliente: “Señor, ¿Quiere que guarde el atributo X o lo calculamos al momento de mostrarlo? ¿Usted que opina?”…