Desinstalando librerías

Muchos se preguntan el porqué hay que usar aptitude en vez de apt-get (o frontends de este, como synaptic por ejemplo). Una de las razones es que cuando instalas un programa que requiere dependencias, aptitude se guarda esos datos, para que si instalas el programa X (aptitude install X), el cual requiere de X_1, ..., X_n paquetes nuevos, te los bajará e instalará sin problemas, pero cuando indiques que quieres desinstalar el programa X (aptitude purge X), también se eliminarán los paquetes X_1, ..., X_n (solo si posteriormente no has instalado algún otro paquete que requiere de algún X_1, ..., X_n claro).

Entonces la cuestión es, y si he usado alguna vez apt-get o synaptic :-/, pues no problem, tienes un programa que detecta librerias "huerfanas", estas son librerias que no son dependencia de cualquier otra (CUIDADO!), esto puede significar dos cosas:

  • Paquete que nos sobra y podemos desinstalar
  • Paquete solitario, que hace su función, pero no necesita de otros, ni otros necesitan de él (por ejemplo codecs)

Para solucionar esto podemos usar un programa muy util llamado "deborphan" (si no lo tienes ya sabes, aptitude install deborphan). Al ejecutar deborphan nos dará la lista de paquetes huerfanos, los cuales ya podemos eliminar (aptitude purge), pero como ya he comentado antes, posiblemente de esa lista, algún paquete NO querremos eliminarlo.

Sawyer rocks

Last chance, doc

-Sawyer (lost)

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?.

Creative Commons License Esta obra está bajo una licencia de Creative Commons.

Este blog funciona gracias a WordPress con el theme GimpStyle diseñado por Horacio Bella y adaptado por un servidor.
Feed entradas