Monthly Archives: February 2006

You are browsing the site archives by month.

Ruby on Rails

Bastante curioso oye, actualmente hay tres tecnologías clave en el desarrollo web (bueno cuatro, pero java es lo peor del mundo, así que lo ignoro) PHP, ASP.NET y RoR.

(Nota: el comando que ejecuto se podría resumir en que se pilla la cabecera http que nos devuelve el servidor)

PHP

[blaxter@helicon]:~$ wget -S –spider http://www.php.net
–15:27:55– http://www.php.net/
=> `index.html’
Resolviendo www.php.net… 64.246.30.37
Connecting to www.php.net|64.246.30.37|:80… conectado.
Petición HTTP enviada, esperando respuesta…
HTTP/1.1 200 OK
Date: Sat, 11 Feb 2006 14:06:42 GMT
Server: Apache/1.3.26 (Unix) mod_gzip/1.3.26.1a PHP/4.3.3-dev
X-Powered-By: PHP/4.3.3-dev
Last-Modified: Sat, 11 Feb 2006 14:13:35 GMT
Content-language: en
Connection: close
Content-Type: text/html;charset=ISO-8859-1
Longitud: no especificado [text/html]
200 OK

ASP.NET

[blaxter@helicon]:~$ wget -S –spider http://asp.net
–15:26:18– http://asp.net/
=> `index.html’
Resolviendo asp.net… 66.129.67.14
Connecting to asp.net|66.129.67.14|:80… conectado.
Petición HTTP enviada, esperando respuesta…
HTTP/1.1 302 Found
Connection: keep-alive
Date: Sat, 11 Feb 2006 14:26:24 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://asp.net/Default.aspx?tabindex=0&tabid=1
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 43204
200 OK

RoR

[blaxter@helicon]:~$ wget -S –spider http://rubyonrails.org/
–15:25:18– http://rubyonrails.org/
=> `index.html’
Resolviendo rubyonrails.org… 70.84.143.109
Connecting to rubyonrails.org|70.84.143.109|:80… conectado.
Petición HTTP enviada, esperando respuesta…
HTTP/1.1 200 OK
Date: Sat, 11 Feb 2006 14:25:23 GMT
Server: Apache
X-Powered-By: PHP/5.0.3
Vary: Accept-Encoding
X-Powered-By: The blood, sweat and tears of the fine, fine TextDrive staff
Served-By: TextDrive’s Textpache
Keep-Alive: timeout=5, max=80
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Longitud: no especificado [text/html]
200 OK

Comentar que la página de RoR no tiene mucha parte dinámica, así que tiene excusa para no usar algo mas avanzado como es RoR, posiblemente la parte de php se centre exclusivamente en includes() y poco mas, si me apuras templates y/o logs varios.

Las citas rocks, pero con moderación

“I shall never be ashamed of citing a bad author if the line is good.”

-Seneca

Esto viene a que quería escribir algo en el blog, pero no tengo mucho tiempo, así que nada mejor que una gran cita como esta. En unos días los examenes habrán acabado y el mundo será un mundo mejor.

Gran viñeta

Las de dilbert en mi opinión suele ser muy irregulares, una tanda de tremendas y otras de muy cutres, esta me ha llegado:


xD, loool.

Gran programa

Esto que navegando me encuentro con este gran código, con tatuaje de un tio incluido

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

Claramente me ha picado la curiosidad, si hacemos un copy paste, compilamos y ejecutamos, veremos que sale “hello word!”. Vayamos por partes y pongamos el código más legible:

int i;
main(){
for( ;i["]<i;++i){--i;}"]; read('-'-'-',i+++"hello, world!\n",'/'/'/'));
}
read(j,i,p){
write(j/p+p,i---j,i/i);
}


Esta claro, tenemos un bucle for que llama en cada iteracion a la función read, la cual está definida posteriormente como un write. En la invocacion del read, el primer parametro será siempre 0, y el tercero es siempre 1 y el segundo parametro vemos que es un incremento de i (i++) mas una cadena (una cadena es un puntero), es decir le estamos pasando el caracter i-esimo de esa cadena a la función read.
Veamos ahora esa función read, como j es 0 y p es 1, el write queda así:

write(1, i–, 1);

. Es decir estamos escribiendo el caracter anterior al puntero dado por el stream 1 (stdout).
Esto empieza a tener ya sentido, no?. Ahora veamos la guarda del bucle for, del main():

for(;i[“]<i;++i){–i;}”]; ……

No tiene inicialización, y como guarda vemos algo que se podría expresar mas claramente como *(i+ “]<i;++i){–i;}” ), y vemos que esa cadena tiene una longitud igual a la frase “hello world!”, asi que se ejecutará tantas veces como longitud de la frase.

Por lo tanto ya tenemos todo, tenemos un bucle que se ejecuta tantas veces como la frase que queremos escribir y en cada iteración pasamos un puntero al caracter (i+1)-esimo el cual será decrementado e imprimido, asi hasta que terminemos de saludar al mundo ;).

So easy, isn’t it?.

My code geek

—–BEGIN GEEK CODE BLOCK—–
Version: 3.12
GCS/J d-() s-:– a– C+++>$ HL++ P++>$ L+++>$ E— W+++ N- o– K? w–
O- M- V? PS PE- Y PGP>+ t> 5> X- R– tv– b+>++ DI+ D
G++ e+++ h! !r> !z>
——END GEEK CODE BLOCK——

No hay mucho que agregar despues de toda la información del código geek.

No one

Nadie puede hacernos sentir inferiores sin nuestro consentimiento.

Eleanor Roosevelt