[IRC-DEV] La comunidad de desarrolladores hispanos

ryden at chathispano.org ryden at chathispano.org
Mon Mar 28 02:03:19 CEST 2005


> PD: Y ya de paso si eres tan amable Ryden, podrias comentar algo sobre
tus Bases de datos?
Bueno, aprovecharé la pregunta para comentar un poco por encima mis
proyectos de IRC actuales (que espero poder librarme pronto de ellos de
una vez):
El primero es el ircuCH, un ircd basado en el ircu de undernet de hace dos
años. Este tiene muchas mejoras respecto al ircd de irc-hispano: sólo hay
que tener en cuenta que la base de irc-hispano es bastante antigua. Por
ejemplo, una mejora remarcable y muy importante es que está dotado del
sistema epoll para GNU/Linux, lo cual reduce considerablemente el consumo
de CPU. El sistema de epoll fue implementado por mount en este ircd a
partir de un parche de undernet. El sistema de bases de datos podeis verlo
en http://cvs.chathispano.org/viewcvs.cgi/ircd/ircd/s_bdd.c?view=markup.
El protocolo es parecido al de IRC-Hispano, aunque no igual. Entre otras
cosas, la comunicación entre servidores es distinta, ya que desde que se
creó la DB2 (que explicaré a continuación) se podían confundir los
comandos de la DB con las tablas. Esto es porque las tablas DB2 se
distinguen por ser letras en mayúsculas. Por tanto, si para hacer un JOIN
a una tabla era:
<numerico> DB * 0 J 0 <tabla>,
y para introducir un registro en la tabla 'J' era:
<numerico> DB * 0 J 1 registro :valor,
claramente podía generar confusión. Por tanto los comandos van siempre
después del servidor de destino:
<numerico> DB * J 0 0 <tabla>.
Otra cosa que puedo citar es la comprobación de corrupción en las tablas
nada más enlazar dos servidores. Nada más finalizar la sincronización
entre dos servidores se envían el hash de dicha tabla entre ellos, y si
este no coincide se resincroniza la tabla. Es importante anotar que los
leaf jamás envían una comprobación de hash, al igual que los hub nunca
aceptan dicha comprobación ya que los servidores que deberían tener "bien"
la tabla son los hub. Además, si en un enlace no coinciden hashes, tampoco
coincidirían en el hub y acabaríamos con un borrado completo total de
dicha tabla en toda la red, una catástrofe :).
Otro apunte importante es que el borrado de una tabla (intencionado con el
comando DELETE 'D') sí que funciona, se borra en toda la red
perfectamente. En el ircd de irc-hispano ocurren "cosas raras" que
consiguen que tras el borrado algún hub se queda con la tabla intacta y la
resincroniza, haciendo imposible el borrado no manual.
La DB2 se basa en una ampliación de la DB1 de ChatHispano. Mientras que la
DB1 tenía la siguiente síntaxis:
tabla -> { clave1 = valor; clave2 = valor; clave3 = valor }
la DB2 tiene la siguiente síntaxis:
tabla -> { clave1 -> { subclave1 = valor; subclave2 = valor }; clave2 -> {
subclave1 = valor; subclave2 = valor } }
De momento el ircd sólo soporta la tabla 'C' de canales. Su síntaxis sería
la siguiente:
Tabla 'C':
- #opers -> { founder = "ryden"; modos=5; successor = "arima"; entrymsg =
"Bienvenidos" }
La tabla 'o' de IRC-Hispano no existe en el ircd de chathispano, sino que
tenemos la tabla 'f', en la cuál se definen qué modos puede tener cada
usuario mediante una serie de flag, así pues:
+X = 1
+k = 2
+h = 8
Entonces, un usuario con acceso a los modos +Xkh tendría en dicha tabla el
valor 8+2+1 = 11.
También disponemos de la tabla 's' de "spam", es una tabla donde se
introducen una serie de badwords que el ircd procesará. Así, tienes
protección anti-spam en cualquier canal del ircd por muy oculto que esté,
e incluso protección en privados. Los badwords se sustituyen por defecto
por la palabra "(censurado)", aunque puedes modificar dicha palabra
mediante el registro especial "." de la tabla 's'. La tabla funciona de la
siguiente manera:
Tabla 's':
palabraprohibida -> flags
Los flags, al igual que como se hacía en la tabla 'f', aquí también se
suman, y la lista es la siguiente:
- 1 -> Procesa en canales con modo +B
- 2 -> Procesa en privados
- 4 -> Procesa en TODOS los canales tengan +B o no
- 8 -> Procesa en los quit.
Por tanto, si quieres cargarte cierto spam en cualquier parte, deberías
ponerle un 15 a dicha palabra :).
Bueno, no me extiendo más con esto, aunque hay para rato :).


Otro proyecto (el cuál es mi favorito), es la base de servicios modular y
escalar 'distant'. Ha sufrido varias etapas y ahora mismo el desarrollo
está congelado por falta de tiempo/ganas. Podéis encontrar el código
fuente en http://cvs.chathispano.org/viewcvs.cgi/distant/?root=services y
tiene licencia GPL (aunque estoy pensando en cambiarla a BSD). Es un
proyecto ambicioso en el que he pretendido en todo momento que no se
limiten al IRC, sino que sean compatibles los servicios con cualquier
protocolo de charla en internet, sea irc, xmpp o msn messenger. Dicha base
no incluye ningún servicio, pero le da al programador la posibilidad de
programar unos servicios de una forma muy sencilla y sin tener que
preocuparse de qué protocolo será utilizado, ya que la base se encarga de
traducir todos los comandos del protocolo a comandos "unificados", es
decir, que conectes a donde conectes distant, los servicios cargados
siempre recibirán lo mismo (idem con los modos, por cierto). La verdad es
que el proyecto ya está prácticamente terminado, debería ponerme a ello de
una puta vez xD. Tan sólo le queda el sistema de bases de datos (que
también será modular :)), la comunicación de los bots con la base (a día
de hoy sólo hay comunicación de la base con los bots), y terminar el
sistema de idiomas (le faltan pocas líneas a esto :P). El módulo de
protocolo con el que he ido programandolo ha sido P10-full, compatible con
el ircd de chathispano, pero cuando lo termine supongo que me pondré con
P10-irchispano y UnrealIRCD :). Pues nada, todas las críticas
CONSTRUCTIVAS son bienvenidas (así que ya sabe quién ya sabe que es que no
es bienvenido).

Saludos, RyDeN. (Perdonad por el tostón de email que vais a recibir xD).






More information about the IRC-Dev mailing list