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