bueno, creo que este blog se esta llendo para cualquier lado, pero esto es muy bueno y es justamente como es que yo pienzo, gracias seth por el link!
http://www.isil.org/resources/philosophy-of-liberty-spanish.swf
es un poco largo, pero me gusto :D es la primera vez que encuentro algo que es exactamente como pienzo yo...
no me quedo claro si es anarquia, capitalismo, o ambos...
salu2!
31 marzo 2009
mi filosofia
en
15:12
10
comentarios
Enlaces a esta entrada
Etiquetas: otros
25 marzo 2009
otra vez critico a mi "educacion"
Hola,
segundaparte de:
http://ni0.blogspot.com/2008/03/alfanumerico-valor-numericocritica-la.html
esta vez fueron un poco mas aya... hablaron del open source, de la propiedad intelectual, de C (o C++, quien sabe), y de Linux... (y aun de mas cosas)
esta vez en la materia Sistemas de Procesamiento de Datos (aka SPD)... como pueden ver, no estamos en la materia "Visual Basic", tampoco en "programacion" sino que supuestamente en SPD se aprende cosas mas profundas de la PC...
aver.. por donde empezamos? la profesora empezo a hablar de los archivos... :o que es un archivo? hay distintos tipos de archivos
.dat
.pas
.obj
.exe
.bat
.sys
1º error, aunque se lo perdono, el tipo del archivo no esta definido por su extencion, sino por su contenido, pero bueno, la extencion es una forma rapida de saber su contenido, eso no me calento..
2º para definir que es un archivo no hace falta hablar del tipo de archivo... que sera un archivo entonces? yo lo veo como bytes grabados en el HD (o "soporte de informacion") con un comienzo y un final, y que se puede agregar o quitar bytes..., para la profesora no hay bytes, sino que hay registros (obiamente NO se refiere a AX o EAX.. se refiere a lo que seria un "record"), y a su vez hay distintos tipos de archivos (los mencionados arriba)...
eso tampoco me calento mucho, pero si uno ve al archivo como registros entonces termina diciendo que hay archivos de texto y binarios. (pura basura, son los 2 la misma cosa, de echo UNIX no hace diferencia entre ellos en C o ASM) o si dice que el archivo tiene registros iguales durante todo el archivo... de donde salieron los BMP? no son ni de texto ni con registros iguales.. en que tipo quedaria? y como se hara para leer un BMP?
por todo eso es mejor trabajar al archivo como secuencias de bytes... yo lo entiendo mejor asi, dsp agrupas o no los bytes en un registro si queres..
4º el tipo .pas (refiriendose a todos los archivo fuente, palabras de la profesora) es IDENTICO a los .bat, no le veo la diferencia, supongamos que hacer una sutil diferencia entre .txt y un codigo fuente ""esta bien"" pero entre 2 codigos fuentes?? mmm nose que se fumo
siguiente tema? batch, explico que eran los .bat y dijo que es la abrebiatura de batch (hasta ahi bien) y que contenia ordenes que se ejecutaban como cascada una abajo de la otra...
pero que pasa si abrimos nuestro cmd.exe y escribmos if? o goto? o for? o abrimos un .bat y le metemos todo eso? deja de ser una cascada ejecutandose uno abajo del otro...
el proximo fue C (este es largo..), dijo que los archivos .cpp eran los de C (y lo escribio en el pizarron).. veamos.. C++ y C son 2 cosas distintas, si programas en C, la extencion del archivo es .C, y si programas en C++ la extencion del archivo es .cpp, asi el compilador no se confunde... (gcc detecta segun la extencion el lenguaje a compilar, y el Dev-Cpp tmb) aparte de que esta dando a entender que C++ y C son lo mismo.... :o en C hay POO!!! ella invento un nuevo estandar ANSI para C! xDD.
tambien dijo que C y Pascal son de la misma empresa... WTF?! Dennis Ritche, Ken Thompson y Brian Kernighan eran hackers de los hackers y no programaban en pascal, y menos inventaron un lenguaje como pascal! ellos eran los machos de los machos, programando e inventando UNIX y C, no tenian relacion con Pascal! se tendria que haber referido a la misma empresa del compilador,aunque tampoco es cierto porque, aunque Borland hizo compiladores para esos 2 lenguajes, existen otros compiladores de pascal y de C que no tienen relacion...
despues dio un semi ejemplo de C (C++? BrainFuck? Ada?) ella dice que es programadora de C... que ejemplo dio?
#include "conio.h"
clrscr();
nono, yo no puse las comillas porque el blog no me deja usar el signo de mayor y de menor, ella escribio las comillas.. o es muy desordenada y guarda todo el codigo fuente en .../include (perdon ....\include, ella trabaja en Windows, ah no, perdon, en ....\lib (ya van a ver)) o no tiene idea de que es y de como usar las comillas, aparte de que conio en C no es estandar, y creo que tampoco en C++, tendria que haber usado alguna funcion estandar..
y aun hay mas de C, explico que eran las librerias, segun ella las librerias en C estan con la extencion .h y se alojan en la carpeta lib... que yo sepa borland como todos los demas compiladores ponen los archivos de cabecera en ....\include, y que yo sepa los .h no son librerias solo son DECLARACIONES de las funciones, la libreria contiene a la funcion en si, en el archivo de cabecera (.h) solo esta la declaracion (int printf(const char*, ...);) nada mas que eso...
creo que de C nada mas, espero que el año que viene (donde vemos C, o C++ ya no tengo idea) no sea peor...
el siguiente tema nose de donde salio, dijo que cuando un programador le vende un programa a su cliente, el programador cobra $X, pero si el cliente quiere el codigo fuente, el programador debe cobrarle 5X o 3X (osea 5 o 3 veces mas de lo qe sale el programa normal.... ) "por la propiedad privaday el derecho intelectual". A esta profesora le pagaron los de microsoft...
osea, si el tipo quiere dejar su codigo cerrado esta bien, pero ella lo dijo bien como una orden... eso no me gusto para nada, es mas, este año hago el proyecto como software libre, y que se cagen todos.
dsp empezo a putear a windows, dijo que era una mierda y que se yo, que era lo menos seguro y lo menos estable... que lo mejor seria usar Linux (pero claro,ella no usa Linux, es obio, y como si no fuera obio, dijo varias cosas sobre Linux ERRONEAS). dice que en Linux es muy raro ver ventanitas, todo es en modo texto... ni que seamos los hackers de portalhacker que se creen hackers porque habren el cmd.exe de windows... quien en esta epoca no tiene instalado el gestor X de ventanas y un escritorio?
dsp dijo lo que mas me calento, que los comandos del Linux eran una copia del DOS... WTF!?? nombro, por ejemplo, al comando DIR... primero que todo, Linux no ejecuta los comandos, sino que lo hace bash, o cualquier otra consola
LINUX ES UN KERNEL, y el sistema operativo se llama GNU/Linux!
ensima DIR en bash no es un comando, es un programa, y nisiquiera es DIR el programa "original", sino que es el programa "ls" ... aparte de que la primera version del DOS salio en 1981 y UNIX se creo en el '70, nose como hicieron los de UNIX para copiar los comandos del DOS si aun no habia salido...
ah y dijo que Linux es open source.. como yo se que se referia al sistema operativo (GNU/Linux) no es open source, es software libre... 2 conceptos parecidos pero muy diferentes...
salu2! y chicos,no vallan a la escuela, aprendan solos, |_ocutus, gracias por el consejo,ahora entiendo bien porque me lo decias..
P.D: espero no haberme confundido yo en algo xD
en
14:01
11
comentarios
Enlaces a esta entrada
Etiquetas: critica a la educacion, otros
15 marzo 2009
Interrupt Descriptor Table (IDT)
Hola,
esto es algo que vengo buscando hace varios meses, y es algo muy importante de como trabaja la cpu y si tenes pensado hacer un sistema operativo, te recomiendo que lo leas. es todo un honor haber posteado esto en mi blog (y en CM) 
aclaro que lo que digo a continuacion nunca lo puse en practica al 100%, y que saco parte de la info de wikipedia y de http://www.acm.uiuc.edu/sigops/roll_your_own/i386/idt.html
hay una seccion de la memoria donde esta la informacion de las interrupciones, osea, es donde el cpu busca cuando alguien hace
int 30h
o cuando se ejecuta una interrupcion de cpu o de hardware
las interrupciones son funciones que se ejecutan cuando pasa algo, por ejemplo, cuando escribimos en el teclado, o cuando un programa intenta ejecutar una instruccion invalida, o error de violacion de memoria, o cosas por el estilo, pero tambien por ejemplo la BIOS carga funciones basicas, por ejemplo la int 21h, o como por ejemplo en UNIX donde las llamadas al sistema se hacen a travez de la int 80h, osea, en este caso es el programa el que llama a una interrupcion.
las primeras 32 interrupciones son reservadas para interrupciones del procesador. y hay un total de 256 interrupciones (desde la int 0 a la int 255)
lo que hace la cpu es, por ejemplo si hacemos int 30h, buscar la posicion de esa tabla destinada a la interrupcion 30h y obtener la direccion y hacer una llamada a esta direccion
modo real:
esta tabla esta dividida de a 32 bits (osea, 4 bytes) para cada interrupcion, osea, ocupa 256 * 4 bytes, osea, 1024bytes, osea, 1kb, esos 32 bytes se dividen en 2, 16 bits para el segmento y 16 bits para el offset (en la memoria en la posicion mas baja aparece el offset y en la mas alta el segmento). teniendo la direccion base de la tabla (base) para saber la posicion de la interrupcion X se hace
base + (X * 4)
y se obtiene la posicion donde esta el offset y el segmento de la interrupcion a ejecutar.
modo protegido:
esta dividida de a 64 bits (osea, 8 bytes) para cada interrupcion:
http://www.acm.uiuc.edu/sigops/roll_your_own/i386/gate.jpg
es un quilombo, nose si es que yo lo leo mal, si esta mal dibujado, o si los de intel son monos, pero esta todo mezclado
el dibujo ese se lee de derecha a izquierda y de abajo hacia arriba, los numeritos de arriba son los bits, empieza por el 0 a la derecha y el 31 a la izquierda, y a la derecha los numeros +0 y +4 corresponden a los bytes a partir de la base
y estas son las referencias:
* P - Present. Se coloca en 1 para interrupciones en funcionamiento
* DPL - tiene que ser 0 para exceciones e interrupciones de hardware, 3 para interrupciones de software llamadas desde la aplicacion
* Type - Trap Gate, Interrupt Gate, o Task Gate on the System Descriptor List
* DWord-Count - tiene que ser 0 para elementos en la IDT
* Offset in Target Segment - direccion de la interrupcion
* Target Segment Selector - segmento en el que correra la interrupcion (ver esto)
muy bien, si modificamos esta tabla de las direcciones de las interrupciones podemos hacer que cuando alguien hace int 46h se ejecute un codigo nuestro
cuando uno crea un S.O. no te vienen todas las interrupciones regaladas... jejejeje
bueno, falta el detalle final, donde esta esta esta famosa tabla? hay un registro del cpu donde esta la direccion inicial y el tamaño, pero este registro solo esta accesible a travez de las funciones sidt y lidt
se les pasa una direccion de la memoria donde van a leer (lidt) o escribir (sidt) la base y el tamaño, en el caso de trabajar en modo real, ocupa 32 bits, teniendo en los primeros 16 bits el tamaño, y en los segundos 16 bits (osea,la posicion mas alta) la base, que suele ser 0000h. y en el caso de modo protegido tenemos 16 bits para el tamaño y 32 para la base.
sidt escribe en la direccion de memoria el tamaño y la base, y lidt lee la posicion de memoria y lo guarda en el registro.
osea, uno podria crear otra tabla en otra posicion de meoria (osea, cargar las nuevas interrupciones en algun lugar de la memoria y colocar en, por ejemplo, 0100h una nueva tabla que apunta a las nuevas interrupciones, para eso tendriamos que hacer algo asi:
;16 bits...
_idtt dw 0
_idtb dw 0
;copiamos las nuevas interrupciones
;
;creamos la nueva tabla con las posiciones que apuntan a nuestras interrupciones
cli ;por las dudas...
mov _idtt,tamaniotabla
mov _idtb,basetabla
lidt _idtt ;como lidt va a leer 32 bits, "agarra" _idtt y _idtb
sli
;ya tenemos las nuevsa interrupciones
aunque creo que seria mejor atualizar la tabla actual
;16 bits...
_idtt dw 0
_idtb dw 0
cli ;por las dudas..
sidt _idtt
;vamos a cambiar la interrupcion 80h :P
mov bx, _idtb
mov [bx + 4 * 80h],nuevooffset
add bx,2
mov [bx + 4 * 80h],nuevosegmento
sli
;ya tenemos el nuevo procedimiento para cuando alguien haga int 0x80
perdonen pero mi asm es muuy malo xDD
bueno, espero que se haya entendido y que sea de utilidad
LINKS:
http://www.acm.uiuc.edu/sigops/roll_your_own/i386/idt.html
http://www.acm.uiuc.edu/sigops/roll_your_own/i386/idt.html#ProcExcept
salu2!
11 marzo 2009
Paro docente... WTF!??
Hola, yo aca, otra vez puteando otra vez
hace -1 dias empeze las clases (osea, en 1 dia empiezo las clases xD) y ya dicen que hay paro de docentes por 2 dias la semana que viene, y lo peor de todo es que me obligan a pararme para saludar a los "docentes"... los docentes cobran bastante ya, y ensima de que tiene vacaciones "obligadas" siempre, osea, todos los años tiene 1 mes de vacaciones, y ganan bastante ya.. sin contar que el 40% de las clases faltan, y justamente los "docentes" indecentes que faltan el 40% de las clases son justamente los que piden que les pagen mas. lo peor de todo es que el año pasado decian "no hacemos paro solo por nuestro sueldo, sino tambien por el bien de los alumnos"... claro,porque si todas las semanas hace 2 dias de paro, dejando sin clases a los alumnos, nos hace muuy bien! :D, ah sin contar que enseñan mal o que corrigen mal o que si tenes muchas gomas y pedis que te suba un punto en la prueba, el tipo te sube 2 puntos xDD ya basta, con el campo y los "docentes" nos quedamos sin morfi y sin educcion, de que vamos a vivir? robando dinero a los demas? ah pero eos ya lo hacen los negros ********** ******************************* y los politicos *******************************************.
bueno, una diferencia notable es que el campo hacia paro para que el gobierno no le robe lo que ganan, en cambio los "docentes" hacen paro para ganar mucha plata por hacer nada...
salu2! xD
06 marzo 2009
se llama GNU/Linux
Hola,
todo el mundo conoce Linux, no?, no, pocos conocen Linux
"In your signature I see
Linux Registered User # 460377
How about changing that to
GNU/Linux Registered User # 460377
to give us a share of the credit for the system?
We did, after all, start its development."
-- Richard Stallman
lo que conocen es GNU/Linux
ya se que en muchos posts hice mencion a GNU/Linux como Linux, pido perdon, aunque cuando me refiero a programacion creo que lo deberia llamar Linux, osea, programar para Linux, porque es Linux el que va a ejecutar el programa, no GNU.
Linux es solo unos 5 mb del disco duro, no es NADA, pero a su vez lo es TODO, Linux es solo el kernel, el núcleo. Linux solo no sirve, de echo supongo que daría error si uno tiene Linux solamente.
GNU es todo lo demas, osea, o casi todo. GNU son todos los demas programas necesarios para tener un sistema operativo similar a UNIX, sin GNU no tendrias bash, no tendrias emacs, no tendrias muchos programas como find y todos los demas, pero hay cosas que no son GNU y que esta dentro de la distribucion, por eso digo que GNU es casi todo lo demas.
GNU/Linux es el sistema operativo completo, los programas escenciales y el nucleo, con esto tenemos un sistema parecido a UNIX.
Hay que recalcar esto porque decir que usas Linux es como decir que todo el trabajo lo hizo Linus Torvalds, y no es asi, hay muchos otros programadores y programas que pertecen a GNU y Linux sin GNU no funciona; a su vez el proyecto original se llama GNU, pero aparecio Linus con su kernel y se formo GNU/Linux
por eso pido que se lo nombre debidamente y yo me estoy acostumbrando a decirle GNU/Linux, pero prometo que va a llegar un momento que lo voy a llamar siempre que sea debido como GNU/Linux
salu2! y un saludo a Ricardito!
04 marzo 2009
Leer a donde apunta un enlace
Hola,
en UNIX no hay "accesos directos" como los hay en Windows, sino que tenemos los enlaces, aca vamos a intentar leer a donde apunta el enlace, uno qusia hace
fopen("/proc/3341/fd/1", "r");
y nos abre directamente el archivo al que apunta "1" pero tambien podemos ver cual es el archivo verdadero.
primero que todo vamos a usar open para abrir el archivo SOLO si NO es un enlace (por si por algun motivo no quieren abrir enlaces), en open tenemos el flag O_NOFOLLOW, lo que hace es que si es un enlace NO lo sige, osea, retorna con error. en caso de no colocar este flag vamos a terminar abriendo el archivo, de esta forma podemos asegurarnos de que la ruta es un enlace
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include errno.h
/*...*/
int fd;
/*...*/
fd = open(archivo, O_RDONLY | O_NOFOLLOW);
if(fd < 0)
{
if(errno == ELOOP)/*nos aseguramos que no lo pudimos abrir porque era un enlace*/
{
/*era un enlace!*/
}
else
{
/*no pudimos abrir el archivo por otro motivo :(*/
}
}
else
{
/*no era un enlace*/
}
/*....*/
muy bien, ahora con otra funcion podemos leer a donde apunta el enlace, esa funcion se llama readlink(), si solo queremos saber si es un enlace o no podemos usamos readlink(), nos retorna -1 si hubo error (probablemente porque no era un enlace) y si era un enlace, nos dice a donde apunta
ssize_t readlink(const char *path, char *buf, size_t bufsiz);
path es la ruta del archivo, buf es un array donde va a poner a donde apunta y bufsiz la cantidad maxima de caracteres a copiar en buf
#include errno.h
#include unistd.h
/*...*/
char out[300];
ssize_t s;
/*...*/
s = readlink(archivo, out, 300);
if(s < 0)
{
if(errno == EINVAL)
{
/*no era un enlace*/
}
else
{
/*otro error*/
}
}
else
{
/*era un enlace! y a donde apunta esta en out*/
}
/*...*/
el problema con readlink es que no coloca el caracter \0 al final de la cadena, eso se arregla de esta manera:
/*siguiendo con el s = readlink(archivo, out, 300); */
out[s] = 0;
bueno eso es todo, ya saben como no abrir enlaces con open, como fijarse si una ruta es un enlace o no con readlink y como saber a donde apunta un elnace con readlink
salu2!

