Mostrando las entradas con la etiqueta ocio. Mostrar todas las entradas
Mostrando las entradas con la etiqueta ocio. Mostrar todas las entradas

2 ago 2014

Obteniendo informacion desde un HTML con python


Un poco de código para extraer información mediante un script en python , algo básico, para empezar a familiarizarme con las librerías disponibles en Kali.

Las librerías usadas:

  • urllib2 para descargar el código html de una pagina web
  • beutifulsoup para extraer los enlaces que contiene
  • urlparse para validar que los enlaces sean validos y extraer el hostname
  • finalmente, la libreria dns para extraer la IP de los nombres de dominios obtenidos

url_extractor.py
# pylint: disable-msg=C0301
'''
apt-get install html5lib
apt-get install python-beautifulsoup
apt-get install python-lxml 
apt-get install python-pyquery 

http://yuji.wordpress.com/2008/05/14/python-basics-of-python-dictionary-and-looping-through-them/
http://stackoverflow.com/questions/493819/python-join-why-is-it-string-joinlist-instead-of-list-joinstring
'''

from utils import utils

def main():
    '''
    para que pylint no muestre tantos mensajes =)
    http://stackoverflow.com/questions/709490/python-code-convention-using-pylint
    '''
    url = "www.google.com"
    html = utils.HtmlExtractor(url)
    #aseguramos que url siempre comienze por http:// o https://
    url = html.get_url()
    #print html.get_body()
    data_extractor = utils.DataExtractor(html.get_body(), url, only_href = True)
    urls = data_extractor.get_urls()
    print "URLS: "
    for temp in urls:
        print temp
    domains = data_extractor.get_domains(urls)
    print "Dominios: "
    for temp in domains:
        print temp
    ips = data_extractor.get_ips_for_domains(domains)
    for key in ips.iterkeys():
        print key, ": ", " ".join(ips[key])

if __name__ == "__main__":
    main()

utils/utils.py
'''

http://docs.python.org/library/urlparse.html
http://docs.python.org/tutorial/errors.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/urllib2.html#urllib2.Request
http://www.crummy.com/software/BeautifulSoup/documentation.html
http://blog.elcodiguero.com/python/23-eliminar-duplicados-lista.html
http://www.mail-archive.com/dnspython-users@dnspython.org/msg00006.html
http://www.dnspython.org/examples.html
http://docs.python.org/release/2.5.2/lib/typesmapping.html
'''
from urlparse import urlparse
import urllib2
import BeautifulSoup
import dns.resolver

def valida_url(url):
    '''
    
    @param url:
    @type url:
    '''
    #si la url no empieza por http temp https lo anexa al inicio
    if url[:7].lower() != "http://" or url[:8].lower() != "https://":
        url = "http://" + url
    #verificamos que es una url completa, es decir, contiene al hostname
    temp = urlparse(url)
    if temp.hostname is None:
        url = None
    return url

# pylint: disable-msg=W0232
class _MyRedirects(urllib2.HTTPRedirectHandler):
    '''
    Clase de redireccion
    '''
# pylint: disable-msg=C0301,R0913,C0111
    def http_error_301(self, req, fpc, code, msg, headers):
        print code, " http_error_301 ", headers['Location']
        return urllib2.HTTPRedirectHandler.http_error_301(self, req, fpc, code, msg, headers)
# pylint: disable-msg=C0301,R0913,C0111
    def http_error_302(self, req, fpc, code, msg, headers):
        print code, " http_error_302 ", headers['Location']
        return urllib2.HTTPRedirectHandler.http_error_302(self, req, fpc, code, msg, headers)
# pylint: disable-msg=C0301,R0913,C0111
    def http_error_303(self, req, fpc, code, msg, headers):
        print code, " http_error_303 ", headers['Location']
        return urllib2.HTTPRedirectHandler.http_error_303(self, req, fpc, code, msg, headers)
# pylint: disable-msg=C0301,R0913,C0111
    def http_error_307(self, req, fpc, code, msg, headers):
        print code, " http_error_304 ", headers['Location']
        return urllib2.HTTPRedirectHandler.http_error_307(self, req, fpc, code, msg, headers)

class HtmlExtractor(object):
    '''
    Clase que extrae el codigo HTML de un origen.
    '''
    def __init__(self, url):
        '''
        
        @param url: URL completa, no acepta rutas relativas o absolutas
        @type url: string
        '''
        self.follow_redirects = False
        self.html_body = None
        self.url = valida_url(url)
        if self.url is None:
            raise ValueError("URL No valida")


    def get_url(self):
        '''
        retorna la url parseada, por ejemplo:
        para www.google.com.pe retorna http://www.google.com.pe
        '''
        return self.url


    def get_body(self, follow_redirects = False):
        '''
        Retorna el html resultante de la peticion.
        
        @param follow_redirects: En caso de estar seteado a verdadero, interpreta los mensajes HTTP 301, 302
        @type follow_redirects: boolean
        '''
        self.follow_redirects = follow_redirects
        request = urllib2.Request(self.url)
        opener = urllib2.build_opener(_MyRedirects())
        content = opener.open(request)
        self.html_body = content.read()
        return self.html_body





class DataExtractor(object):
    '''
    Clase para extraer Datos de un html.
    
    url -- direccion desde la cual se extrajo el html, opcional si se desea que se 
    interpreten las rutas relativas o absolutas que se puedan encontrar en el html
    
    only_href -- Solamente devuelve el contenido de los href, el texto entre las etiquetas  no necesariamente puede coincidir con el valor
    '''
    def __init__(self, html_body, url = None, only_href = False):
        self.html_body = html_body
        self.url = url
        self.only_href = only_href
        self.urls = []
        self.domains = []
        self.domain_ips = {}


    def get_urls(self):
        '''
        devuelve todas las URL encontradas en el html analizado
        '''
        result = BeautifulSoup.BeautifulSoup(self.html_body)
        lst_tag = result.findAll("a")
        for c_url in lst_tag:
            self.urls.append(c_url["href"])
        return self.urls


    def get_domains(self, urls = None):
        '''
        
        @param urls: Listado de urls a extraer los dominios, es la informacion devuelta por
        get_urls()
        @type urls: list
        '''
        if urls is None:
            self.urls = self.get_urls()
        for url in urls:
            temp = urlparse(url)
            if temp.hostname is None:
                continue
            self.domains.append(temp.hostname)
        return dict.fromkeys(self.domains).keys()


    def get_ips_for_domains(self, domains = None):
        '''
        
        @param domains: Listado de dominios a extraer los IP, es la informacion devuelta por
        get_domains()
        @type domains: list
        '''
        if domains is None:
            self.domains = self.get_domains()
        for domain in domains:
            answer = dns.resolver.query(domain, 'A')
            temp = []
            for rdata in answer:
                temp.append(rdata.address)
            self.domain_ips[domain] = temp
        return self.domain_ips

29 jul 2014

Mi entorno python en windows

Para mis pruebas de Hy (http://hy.readthedocs.org/en/latest/) y diversos scripts que normalmente ejecuto en Linux.

Usaré python 2.7, teniendo en cuenta hacer código migrable a python3, el porqué no usar python3 es debido a que algunas librerías no están migradas aún a python3.

Sistema base: windows 8.1 64 bits

Python (Seleccionar agregar python al PATH durante la instalación)
https://www.python.org/downloads/

Setup tools
Ejecutar PowerShell como administrador y ejecutar lo siguiente
(Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python -

Pip
Ejecutar PowerShell como administrador y ejecutar lo siguiente
(Invoke-WebRequest https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py).Content | python -

PyWin32
Descargar la ultima versión disponible desde http://sourceforge.net/projects/pywin32/
PD: Instalarla como usuario estándar, cuando lo intente como administrador por algún motivo fallaba en windows 8.1

Agregar rutas al PATH en PowerShell
setx PATH "%PATH%;C:\Python27\Scripts"

Pylint
python code static checker
pip install pylint

Ipython
pip install ipython

BeautifulSoup4
Para automatizar el analisis de código HTML
pip install beautifulsoup4

Hy
"Hy is a lisp dialect, but one that converts its structure into Python" =)
pip install hy

libdnet
No existe un instalador oficial para python 2.7 pero desde https://twitter.com/dloss/status/18457222544
http://dirk-loss.de/scapy/dnet-1.12.win32-py2.7.exe

dpkt
"fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols"
El texto menciona python 2.6 pero tambien sirve para 2.7
https://code.google.com/p/dpkt/downloads/detail?name=dpkt-1.7.win32.exe&can=2&q=

pypcap
"simplified object-oriented Python extension module for libpcap"
Tampoco tiene instalador oficial pero lo obtuve de aqui https://code.google.com/p/pypcap/issues/detail?id=36
https://pypcap.googlecode.com/issues/attachment?aid=360000000&name=pcap-1.1.win32-py2.7.exe&token=ABZ6GAdluPCo_hMK4vnsnR7oKqP_Gjomow%3A1406650615796

scapy
http://www.secdev.org/projects/scapy/doc/installation.html
http://bb.secdev.org/scapy/downloads/scapy-2.2.0.zip

wireshark
instalar la version de 32 bits
www.wireshark.org

Pycrypto
http://www.voidspace.org.uk/python/modules.shtml#pycrypto
http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe

dnspython
"dnspython is a DNS toolkit for Python. It supports almost all record types"
pip install dnspython

IDE:
Aptana Studio (Pydev)
http://www.aptana.com/products/studio3/download

5 feb 2012

plugin en python para xchat : whois automatico

Un poco de código, es un script para xchat que hace que al momento de abrir un privado automáticamente muestra la información "whois" de la persona con quien se esta chateando. El script es muy simple y me sirve para encontrar otros canales que quizas puedan interesarme en Freenode. Lo he programado en ubuntu 11.10 y xchat 2.8.8.

Para mayor informacion de como extender las funcionalidades de xchat:
http://xchat.org/docs/ 


'''
Created on 04/02/2012
querywhois.py
@author: christian
cquispe.dev@gmail.com
'''
__module_name__ = "querywhois"
__module_version__ = "1.0"
__module_description__ = "muestra la informacion de whois del otro usuario cuando se abre o recibe un mensaje privado. Probado en xchat 2.8.8"
__module_author__ = "Christian "

import xchat #@UnresolvedImport

def mensaje_nuevo(word, word_eol, userdata):
    cntx = xchat.get_context()
    user = cntx.get_info("channel")
    if user[0] != "#":
        cntx.command("whois " + user)
    return xchat.EAT_NONE

def whois_info(word, word_eol, userdata):
    #print word
    cntx = xchat.find_context(channel = word[0])
    if cntx is None:
        #para cuando se hace whois sin abrir privado, lo envia a la salida normal
        cntx = xchat.get_context()
    cntx.prnt(" ".join(word))
    return xchat.EAT_XCHAT

#capturamos todos los eventos de whois 
WHOIS_EVENTS = [
                "WhoIs Authenticated",
                "WhoIs Away Line",
                "WhoIs Channel/Oper Line",
                "WhoIs End",
                "WhoIs Identified",
                "WhoIs Idle Line",
                "WhoIs Idle Line with Signon",
                "WhoIs Name Line",
                "WhoIs Real Host",
                "WhoIs Server Line",
                "WhoIs Special"
              ]
for whois_event in WHOIS_EVENTS:
    xchat.hook_print(whois_event, whois_info)

# xchat.hook_print("WhoIs Channel/Oper Line", whois_info)
# xchat.hook_print("WhoIs Authenticated", whois_info)
# xchat.hook_print("WhoIs Away Line", whois_info)
# xchat.hook_print("WhoIs End", whois_info)
# xchat.hook_print("WhoIs Identified", whois_info)
# xchat.hook_print("WhoIs Idle Line with Signon", whois_info)
# xchat.hook_print("WhoIs Idle Line", whois_info)
# xchat.hook_print("WhoIs Name Line", whois_info)
# xchat.hook_print("WhoIs Real Host", whois_info)
# xchat.hook_print("WhoIs Server Line", whois_info)
# xchat.hook_print("WhoIs Special", whois_info)

#captura los eventos de creacion de ventana, cuando se hace abre o recibe un privado
#Open Context esta mencionado en la documentacion de plugin de C++ pero no en la de python
xchat.hook_print("Open Context", mensaje_nuevo)

print "querywhois loaded"

8 dic 2008

Discurso Steve Jobs en Standford 2005

Discurso de Steve Jobs en la Universidad de Standford, es del año 2005. Está en ingles pero subtitulado.



Esta es la transcripcion.


Tengo el honor de estar hoy aquí presente en la ceremonia de graduación de una de las más prestigiosas universidades en el mundo. A decir verdad, esto es lo más cerca que estuve jamás de una graduación universitaria. Hoy deseo contarles tres relatos acerca de mi vida. Eso es todo. Nada del otro mundo. Simplemente tres relatos.


El primer relato es acerca de unir los distintos puntos.


Abandoné los estudios en Reed College después de los primeros 6 meses, pero luego permanecí como oyente por otros 18 meses aproximadamente antes de dejarlos completamente. Así que, ¿por qué abandoné?
Todo comenzó antes de que yo naciera. Mi madre biológica era una joven soltera, graduada universitaria, que decidió colocarme en adopción. Creía enérgicamente que debía ser adoptado por universitarios graduados, de modo tal que todo se organizó para que fuese adoptado al nacer por un abogado y su esposa. Excepto que cuando emergí ellos decidieron a último momento que deseaban una niña. Así que mis padres, que estaban en una lista de espera, recibieron una llamada en el medio de la noche que decía: “Tenemos un varoncito inesperado, ¿lo quieren?” Dijeron: “Por supuesto.” Mi madre biológica averiguó más tarde que mi madre adoptiva nunca se había graduado de la universidad y que mi padre nunca había terminado el colegio secundario. Se rehusó a firmar los papeles definitivos de adopción. Solo se avino a hacerlo unos meses después, cuando mis padres le prometieron que algún día yo iría a la universidad.
Y 17 años más tarde fui a la universidad. Pero ingenuamente elegí una universidad que era casi tan cara como Stanford, y todos los ahorros de mis padres de clase trabajadora se estaban destinando a mis aranceles universitarios. Luego de seis meses, no le encontraba sentido a esto. No tenía idea de lo que quería hacer con mi vida y tampoco de qué manera la universidad me ayudaría a resolverlo. Y aquí me encontraba desperdiciando todo el dinero que mis padres habían ahorrado durante toda su vida. Así que decidí abandonar los estudios y confiar que todo se arreglaría eventualmente. Era una decisión bastante temerosa en ese momento, pero a la distancia fue una de las mejores decisiones que pude haber tomado. En el momento en que abandonara la universidad podía dejar de asistir a las clases que no me interesaban, y sí participar como oyente de aquellas que parecían interesantes.
No todo fue romántico. No tenía un dormitorio, así que dormía en el piso en las habitaciones de amigos, devolvía las botellas de gaseosa para obtener los 5 centavos de depósito para comprar comida, y caminaba las 7 millas a través de la ciudad cada domingo por la noche para recibir una buena comida una vez por semana en el templo Hare Krishna. Me encantaba. Y mucho con lo que tropecé más adelante como consecuencia de hacerle caso a mi curiosidad e intuición resultó no tener precio después.
Déjenme darles un ejemplo: Reed College en ese momento ofrecía quizás el mejor aprendizaje de caligrafía del país. En toda la ciudad universitaria cada cartel, cada etiqueta en cada cajón, era caligrafiado a mano de una manera bellísima. Dado que había abandonado los estudios y no tenía que asistir a las clases normales, decidí tomar un curso de caligrafía para aprender cómo se hace eso. Aprendí acerca de los tipos de letra con trazos de pie, cómo variar la cantidad de espacio entre diferentes combinaciones de letras, todo aquello que hace que la admirable tipografía sea grandiosa. Era hermoso, histórico, artísticamente sutil de un modo que la ciencia no puede captar, y yo lo consideraba fascinante.
Nada de esto albergaba siquiera la mínima esperanza de alguna aplicación práctica en mi vida. Pero diez años más tarde, cuando estábamos diseñando la primera computadora Macintosh, todo volvió a mi mente. Y lo volcamos todo en la Mac. Era la primera computadora con bellísima tipografía. De no haber asistido a ese único curso universitario, la Mac no hubiera tenido nunca tipos de letras múltiples o fuentes espaciadas proporcionalmente. Y dado que Windows simplemente copió a Mac, es posible que ninguna computadora personal las hubiera tenido. De haber proseguido mis estudios universitarios, no hubiera asistido a ese curso de caligrafía, y las computadoras personales no tendrían la maravillosa tipografía que tienen.
Por supuesto que era imposible haber unido los diferentes puntos mirando hacia el futuro cuando estaba en la universidad. Pero fue muy, muy claro al mirar para atrás diez años más tarde.
Nuevamente, no se pueden unir los distintos puntos mirando para adelante; se pueden unir únicamente mirando hacia atrás. Así que deben confiar que de alguna manera los puntos se unirán en el futuro. Deben confiar en algo sus agallas, el destino, la vida, el karma, lo que sea. Este enfoque no me ha traicionado nunca, e hizo toda la diferencia en mi vida.


Mi segundo relato es acerca del amor y la pérdida.


Yo tuve suerte – descubrí lo que realmente quería hacer temprano en mi vida. Woz y yo comenzamos con Apple en el garaje de mis padres cuando tenía 20 años. Trabajamos duro, y en 10 años Apple creció de ser una empresa compuesta por nosotros dos en un garaje a una empresa de $2 mil millones con más de 4000 empleados. Habíamos lanzado nuestra creación más refinada – Macintosh – un año antes, y yo acababa de cumplir 30. Y después me despidieron. ¿Cómo se puede ser despedido de la empresa que uno inició?
Pués, a medida que Apple crecía contratamos a alguien que yo pensaba que era sumamente talentoso para dirigir la empresa conmigo, y durante el primer año o más las cosas anduvieron bien. Pero luego nuestras visiones acerca del futuro comenzaron a diferir y eventualmente tuvimos una disputa.
Al tenerla, nuestro Directorio lo apoyó a él. Así que a los 30 estuve afuera. Y bien afuera. Aquello en lo que me había concentrado durante toda mi vida adulta había desaparecido, y fue devastador.
Realmente no supe qué hacer durante unos pocos meses. Sentía que había decepcionado a la anterior generación de emprendedores – que había soltado la batuta mientras que me la estaban pasando. Me reuní con David Packard y Bob Noyce y traté de disculparme por haber echado a perder las cosas de tal manera. Yo representaba un fracaso público muy importante, y hasta pensé en retirarme del valle.
Pero poco a poco empecé a darme cuenta que todavía amaba lo que estaba haciendo. El curso de los acontecimientos en Apple no había cambiado eso para nada. Había sido rechazado, pero aún amaba lo mío. Así que decidí empezar de nuevo.
No me dí cuenta entonces, pero resultó que el hecho de haber sido despedido de Apple fue lo mejor que me pudo haber pasado. El peso del éxito fue reemplazado por la facilidad de convertirme en un principiante una vez más, con menor certidumbre acerca de todo. Me dio rienda suelta para ingresar en uno de los períodos más creativos de mi vida.
Durante los próximos cinco años, inicié una empresa llamada NeXT, otra empresa llamada Pixar y, me enamoré de una maravillosa mujer que se convertiría en mi esposa. Pixar llegó a crear el primer largometraje animado por computadora en el mundo, Toy Story, y en la actualidad es el estudio de animación más exitoso a nivel mundial. En un giro destacado de acontecimientos, Apple adquirió NeXT, volví a Apple, y la tecnología que desarrollamos en NeXT está en lo más recóndito del renacimiento actual de Apple. Y tenemos, Laurene y yo, una maravillosa familia juntos. Estoy seguro de que nada de esto hubiera pasado de no haber sido despedido de Apple. Fue un trago amargo, pero creo que el paciente lo necesitaba.
A veces la vida golpea en la cabeza con un ladrillo. No pierdan la fe. Estoy convencido de que lo único que me mantenía en curso era que amaba lo que hacía. Deben encontrar lo que realmente les apasiona. Y esto es tan cierto respecto del trabajo como lo es respecto del amor. El trabajo les llenará una parte importante de sus vidas, y la única manera de sentirse realmente satisfecho es realizar lo que consideran un gran trabajo. Y el único modo de realizar un gran trabajo es amar lo que uno hace. Si no lo han encontrado aún, sigan buscando. No se conformen. Así como sucede con todos los asuntos del corazón, sabrán cuando lo hayan encontrado. Y, así como sucede en cualquier gran relación, mejora más y más a medida que transcurren los años. Así que sigan buscando hasta que lo encuentren. No se conformen.


Mi tercer relato es acerca de la muerte.


Cuando tenía 17, leí una cita que decía más o menos lo siguiente: “Si vives cada día como si fuera el último, algún día seguramente tendrás razón.” Me impresionó, y desde entonces, por los últimos 33 años, he mirado en el espejo cada mañana y me he preguntado: “¿Si hoy fuese el último día de mi vida, querría hacer lo que estoy por hacer hoy?” Y cada vez que la respuesta ha sido “No” durante demasiados días seguidos, sé que debo cambiar algo.
El recordar que estaré muerto pronto es la herramienta más importante que he encontrado para ayudarme a tomar las grandes decisiones en la vida. Porque casi todo – todas las expectativas externas, todo el orgullo, todo temor a la vergüenza o al fracaso – todas estas cosas simplemente desaparecen al enfrentar la muerte, dejando sólo lo que es verdaderamente importante. Recordar que uno va a morir es la mejor manera que conozco para evitar la trampa de pensar que hay algo por perder. Ya se está indefenso. No hay razón alguna para no seguir los consejos del corazón.
Me diagnosticaron un cáncer hace un año aproximadamente. Me practicaron una tomografía computada a las 7:30 de la mañana, y claramente mostraba un tumor en mi páncreas. Yo ni sabía lo que era el páncreas. Los médicos me dijeron que éste era seguramente un tipo de cáncer incurable, y que no llegaría a vivir más de tres a seis meses. Mi médico me aconsejó ir a casa y arreglar mis asuntos, que es el código médico para prepararse para morir.
Quiere decir que hay que tratar de explicarles a los hijos todo aquello que pensaba que iba a tener diez años para contarles, en pocos meses. Significa asegurarse de tener todo puntualmente arreglado de modo que sea lo más fácil posible para la familia. Significa empezar a decir adiós.
Pasé el día entero con ese diagnóstico. Luego por la tarde me realizaron una biopsia, en la que introdujeron un endoscopio por la garganta, a través del estómago y hasta los intestinos, pusieron una aguja en mi páncreas y retiraron algunas pocas células del tumor. Estaba sedado, pero mi esposa, que estaba allí, me dijo que cuando vieron las células bajo el microscopio los médicos comenzaron a gritar porque resultó que era una forma muy rara de cáncer pancréatico que se cura mediante cirugía. Me realizaron la cirugía y estoy bien ahora.
Fue lo más cerca que me encontré de la muerte, y espero que sea lo más cerca que me encuentre por varias décadas. Habiendo pasado esto, les puedo decir lo siguiente con un poco más de seguridad que cuando la muerte era un concepto útil pero puramente intelectual: Nadie quiere morir. Aún la gente que quiere ir al cielo no quiere morir para llegar allí. Y sin embargo la muerte es el destino que todos compartimos. Nadie ha logrado escapar. Y así es como debiera ser, porque la muerte es muy probablemente la única mejor invención de la vida. Es el agente de cambio de la Vida. Retira del camino lo viejo para dar paso a lo nuevo. En este momento lo nuevo son ustedes, pero algún día no demasiado lejano, gradualmente se convertirán en lo viejo y se los sacará del camino. Lamento ser tan dramático, pero es realmente cierto.
Su tiempo es limitado, así que no lo malgasten viviendo la vida de otro. No se dejen atrapar por el dogma – que implica vivir con los resultados de las creencias de otros. No permitan que el ruido de otras opiniones ahogue vuestra voz interior. Y lo que es más importante, tengan el coraje de seguir a sus corazones e intución. De algún modo ellos ya saben lo que ustedes realmente quieren llegar a ser.Todo lo demás es secundario.
Cuando era joven, existía una publicación maravillosa llamada The Whole Earth Catalog, que era una de las biblias de mi generación. La había creado un sujeto llamado Steward Brand no demasiado lejos de aquí en Menlo Park, y le transmitió su toque poético. Esto sucedía en los últimos años de la década de 1960, con anterioridad a la publicación mediante computadoras personales y de escritorio, así que todo se llevaba a cabo con máquinas de escribir, tijeras, y cámaras polaroid. Era una clase de Google en edición rústica, 35 años antes de la aparición de Google: era idealista, y desbordante de herramientas prolijas e ideas importantes. Stewart y su equipo publicaron varias ediciones de The Whole Earth Catalog, y luego cuando había cumplido su ciclo, publicaron una edición final.
Esto sucedía a mediados de la década de 1970, y yo tenía la edad de ustedes. En la tapa de la edición final había una fotografía de un camino rural a primeras horas de la mañana, del tipo de ruta que ustedes caminarían si fueran tan aventureros. Debajo de la foto aparecían las siguientes palabras: “Si no se tiene avidez por el conocimiento, no se conocerá el éxito”. Era su mensaje de despedida al anunciar el fin de la publicación.
Si no se tiene avidez por el conocimiento, no se conocerá el éxito. Y siempre he deseado eso para mí. Y ahora, que ustedes se gradúan para empezar de cero, deseo eso para ustedes


Si no se tiene avidez por el conocimiento, no se conocerá el éxito.
” (Steve Jobs)

5 nov 2008

Tips rapidos en Linux - II

Desactivar servicios de manera "grafica"
rcconf es una aplicacion basada en ncurses que nos permite activar y desactivar servicios que normalmente se inician durante el arranque.
aptitude install rcconf

Instalar desinstalar modulos
modconf, tambien basada en ncurses, nos permite navegar entre todos los modulos que se encuentren disponibles, para el kernel que estemos ejecutando
aptitude install modconf

Ver los puertos que estan usando las aplicaciones
netstat -utpan

Averiguar que programa esta accediendo al disco
iotop nos permite averiguarlo, por el momento solo esta en debian sid
aptitude install iotop

Agregar usuario a un grupo determinado
adduser usuario grupo

Ver todas las librerias que tenemos cargadas en memoria
aptitude install memstat

Hacer una captura de pantalla
import -window root screenshot.png

usar el mouse en los terminales
aptitude install gpm

Obtener la suma de comprocion md5 de un archivo
md5sum mi_archivo

Un cliente de correo ligero
aptitude install claws-mail

3 nov 2008

Tips rapidos en Linux

Algunos cosas que siempre me preguntan, tips rapidos:

Configurando ntfs-3g graficamente
aptitude install disk-manager ntfs-3g

Habilitar los colores al hacer ls
vi ~/.bashrc
descomentar:
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
grabas y ejecutar:
source ~/.bashrc

Entrar al msn
Hay para todos los gustos, kopete, pidgin, amsn:
aptitude install kopete
aptitude install pidgin
aptitude install amsn

Configurar kopete/pidgin para entrar al gtalk (chat de gmail)
Eston son los datos que van a necesitar:
Agregar una cuenta Jabber
ID Jabber: tucorreo@gmail.com
servidor talk.google.com
puerto 5223

Para navegar
pueden usar firefox (en debian se llama iceweasel), konqueror, epiphany,etc
aptitude install iceweasel
aptitude install konqueror
aptitude install epiphany

Para navegar en consola, osea en texto
lynx o w3m
aptitude install lynx
aptitude install w3m

Algo parecido al explorador de archivos ?
hay varios, dependiendo de que escritorio uses:
kde --> konqueror
gnome-> nautilus
LXDE--> pcmanfm
XFCE--> thunar

Para aumentar o subir el volumen
alsamixer en modo texto y en modo grafico alsamixergui
aptitude install alsamixer
aptitude install alsamixergui

Grabar CD o DVD
Una interfaz bastante intuitiva
aptitude install k3b

Escuchar Musica
Reproductor de musica ligeros,
audacious --> aptitude install audacious

Integrado con el escritorio:
KDE--> aptitude install amarok
GNOME--> aptitude install rythmbox