Commits

Anonymous committed c325fc5

Link info enabled.

Comments (0)

Files changed (2)

+#!/usr/bin/python
+# -*- coding: utf-8 -*-
 
 from google.appengine.ext import db
 from google.appengine.ext.db import polymodel
 
+class FileType:
+    def __init__(self, endings, name):
+        self.endings = endings
+        self.name = name
+
+mime_types = {
+'application/acad':FileType(['dwg'], 'AutoCAD-Dateien (nach NCSA)'),
+'application/applefile':FileType([], 'AppleFile-Dateien'),
+'application/astound':FileType(['asd', 'asn'], 'Astound-Dateien'),
+'application/dsptype':FileType(['tsp'], 'TSP-Dateien'),
+'application/dxf':FileType(['dxf'], 'AutoCAD-Dateien (nach CERN)'),
+'application/futuresplash':FileType(['spl'], 'Flash Futuresplash-Dateien'),
+'application/gzip':FileType(['gz'], 'GNU Zip-Dateien'),
+'application/listenup':FileType(['ptlk'], 'Listenup-Dateien'),
+'application/mac-binhex40':FileType(['hqx'], 'Macintosh Binärdateien'),
+'application/mbedlet':FileType(['mbd'], 'Mbedlet-Dateien'),
+'application/mif':FileType(['mif'], 'FrameMaker Interchange Format Dateien'),
+'application/msexcel':FileType(['xls', 'xla'], 'Microsoft Excel Dateien'),
+'application/mshelp':FileType(['hlp', 'chm'], 'Microsoft Windows Hilfe Dateien'),
+'application/mspowerpoint':FileType(['ppt *.ppz *.pps *.pot'], 'Microsoft Powerpoint Dateien'),
+'application/msword':FileType(['doc', 'dot'], 'Microsoft Word Dateien'),
+'application/octet-stream':FileType(['bin', 'exe', 'com', 'dll', 'class'], 'Ausführbare Dateien'),
+'application/oda':FileType(['oda'], 'Oda-Dateien'),
+'application/pdf':FileType(['pdf'], 'Adobe PDF-Dateien'),
+'application/postscript':FileType(['ai *.eps *.ps'], 'Adobe PostScript-Dateien'),
+'application/rtc':FileType(['rtc'], 'RTC-Dateien'),
+'application/rtf':FileType(['rtf'], 'Microsoft RTF-Dateien'),
+'application/studiom':FileType(['smp'], 'Studiom-Dateien'),
+'application/toolbook':FileType(['tbk'], 'Toolbook-Dateien'),
+'application/vocaltec-media-desc':FileType(['vmd'], 'Vocaltec Mediadesc-Dateien'),
+'application/vocaltec-media-file':FileType(['vmf'], 'Vocaltec Media-Dateien'),
+'application/xhtml+xml':FileType(['htm', 'html', 'shtml', 'xhtml'], 'XHTML-Dateien'),
+'application/xml':FileType(['xml'], 'XML-Dateien'),
+'application/x-bcpio':FileType(['bcpio'], 'BCPIO-Dateien'),
+'application/x-compress':FileType(['z'], 'zlib-komprimierte Dateien'),
+'application/x-cpio':FileType(['cpio'], 'CPIO-Dateien'),
+'application/x-csh':FileType(['csh'], 'C-Shellscript-Dateien'),
+'application/x-director':FileType(['dcr', 'dir', 'dxr'], 'Macromedia Director-Dateien'),
+'application/x-dvi':FileType(['dvi'], 'DVI-Dateien'),
+'application/x-envoy':FileType(['evy'], 'Envoy-Dateien'),
+'application/x-gtar':FileType(['gtar'], 'GNU tar-Archivdateien'),
+'application/x-hdf':FileType(['hdf'], 'HDF-Dateien'),
+'application/x-httpd-php':FileType(['php', 'phtml'], 'PHP-Dateien'),
+'application/x-javascript':FileType(['js'], 'serverseitige JavaScript-Dateien'),
+'application/x-latex':FileType(['latex'], 'LaTeX-Quelldateien'),
+'application/x-macbinary':FileType(['bin'], 'Macintosh Binärdateien'),
+'application/x-mif':FileType(['mif'], 'FrameMaker Interchange Format Dateien'),
+'application/x-netcdf':FileType(['nc', 'cdf'], 'Unidata CDF-Dateien'),
+'application/x-nschat':FileType(['nsc'], 'NS Chat-Dateien'),
+'application/x-sh':FileType(['sh'], 'Bourne Shellscript-Dateien'),
+'application/x-shar':FileType(['shar'], 'Shell-Archivdateien'),
+'application/x-shockwave-flash':FileType(['swf', 'cab'], 'Flash Shockwave-Dateien'),
+'application/x-sprite':FileType(['spr', 'sprite'], 'Sprite-Dateien'),
+'application/x-stuffit':FileType(['sit'], 'Stuffit-Dateien'),
+'application/x-supercard':FileType(['sca'], 'Supercard-Dateien'),
+'application/x-sv4cpio':FileType(['sv4cpio'], 'CPIO-Dateien'),
+'application/x-sv4crc':FileType(['sv4crc'], 'CPIO-Dateien mit CRC'),
+'application/x-tar':FileType(['tar'], 'tar-Archivdateien'),
+'application/x-tcl':FileType(['tcl'], 'TCL Scriptdateien'),
+'application/x-tex':FileType(['tex'], 'TeX-Dateien'),
+'application/x-texinfo':FileType(['texinfotexi'], 'Texinfo-Dateien'),
+'application/x-troff':FileType(['t', 'trroff'], 'TROFF-Dateien (Unix)'),
+'application/x-troff-man':FileType(['man', 'troff'], 'TROFF-Dateien mit MAN-Makros (Unix)'),
+'application/x-troff-me':FileType(['me', 'troff'], 'TROFF-Dateien mit ME-Makros (Unix)'),
+'application/x-troff-ms':FileType(['me', 'troff'], 'TROFF-Dateien mit MS-Makros (Unix)'),
+'application/x-ustar':FileType(['ustar'], 'tar-Archivdateien (Posix)'),
+'application/x-wais-source':FileType(['src'], 'WAIS Quelldateien'),
+'application/x-www-form-urlencoded':FileType([], 'HTML-Formulardaten an CGI'),
+'application/zip':FileType(['zip'], 'ZIP-Archivdateien'),
+'audio/basic':FileType(['ausnd'], 'Sound-Dateien'),
+'audio/echospeech':FileType(['es'], 'Echospeed-Dateien'),
+'audio/tsplayer':FileType(['tsi'], 'TS-Player-Dateien'),
+'audio/voxware':FileType(['vox'], 'Vox-Dateien'),
+'audio/x-aiff':FileType(['aifaiffaifc'], 'AIFF-Sound-Dateien'),
+'audio/x-dspeeh':FileType(['duscht'], 'Sprachdateien'),
+'audio/x-midi':FileType(['midmidi'], 'MIDI-Dateien'),
+'audio/x-mpeg':FileType(['mp2'], 'MPEG-Dateien'),
+'audio/x-pn-realaudio':FileType(['ramra'], 'RealAudio-Dateien'),
+'audio/x-pn-realaudio-plugin':FileType(['rpm'], 'RealAudio-Plugin-Dateien'),
+'audio/x-qt-stream':FileType(['stream'], 'Quicktime-Streaming-Dateien'),
+'audio/x-wav':FileType(['wav'], 'WAV-Dateien'),
+'drawing/x-dwf':FileType(['dwf'], 'Drawing-Dateien'),
+'image/cis-cod':FileType(['cod'], 'CIS-Cod-Dateien'),
+'image/cmu-raster':FileType(['ras'], 'CMU-Raster-Dateien'),
+'image/fif':FileType(['fif'], 'FIF-Dateien'),
+'image/gif':FileType(['gif'], 'GIF-Dateien'),
+'image/ief':FileType(['ief'], 'IEF-Dateien'),
+'image/jpeg':FileType(['jpeg', 'jpg', 'jpe'], 'JPEG-Dateien'),
+'image/png':FileType(['png'], 'PNG-Dateien'),
+'image/tiff':FileType(['tiff', 'tif'], 'TIFF-Dateien'),
+'image/vasa':FileType(['mcf'], 'Vasa-Dateien'),
+'image/vnd.wap.wbmp':FileType(['wbmp'], 'Bitmap-Dateien (WAP)'),
+'image/x-freehand':FileType(['fh4', 'fh5', 'fhc'], 'Freehand-Dateien'),
+'image/x-icon':FileType(['ico'], 'Icon-Dateien (z.B. Favoriten-Icons)'),
+'image/x-portable-anymap':FileType(['pnm'], 'PBM Anymap Dateien'),
+'image/x-portable-bitmap':FileType(['pbm'], 'PBM Bitmap Dateien'),
+'image/x-portable-graymap':FileType([	'pgm'], 'PBM Graymap Dateien'),
+'image/x-portable-pixmap':FileType(['ppm'], 'PBM Pixmap Dateien'),
+'image/x-rgb':FileType(['rgb'], 'RGB-Dateien'),
+'image/x-windowdump':FileType(['xwd'], 'X-Windows Dump'),
+'image/x-xbitmap':FileType(['xbm'], 'XBM-Dateien'),
+'image/x-xpixmap':FileType(['xpm'], 'XPM-Dateien'),
+'message/external-body':FileType([], 'Nachricht mit externem Inhalt'),
+'message/http':FileType([], 'HTTP-Headernachricht'),
+'message/news':FileType([], 'Newsgroup-Nachricht'),
+'message/partial':FileType([], 'Nachricht mit Teilinhalt'),
+'message/rfc822':FileType([], 'Nachricht nach RFC 2822'),
+'model/vrml':FileType(['wrl'], 'Visualisierung virtueller Welten (VRML)'),
+'multipart/alternative':FileType([], 'mehrteilige Daten gemischt'),
+'multipart/byteranges':FileType([], 'mehrteilige Daten mit Byte-Angaben'),
+'multipart/digest':FileType([], 'mehrteilige Daten / Auswahl'),
+'multipart/encrypted':FileType([], 'mehrteilige Daten verschlüsselt'),
+'multipart/form-data':FileType([], 'mehrteilige Daten aus HTML-Formular (z.B. File-Upload)'),
+'multipart/mixed':FileType([], 'mehrteilige Daten gemischt'),
+'multipart/parallel':FileType([], 'mehrteilige Daten parallel'),
+'multipart/related':FileType([], 'mehrteilige Daten / verbunden'),
+'multipart/report':FileType([], 'mehrteilige Daten / Bericht'),
+'multipart/signed':FileType([], 'mehrteilige Daten / bezeichnet'),
+'multipart/voice-message':FileType([], 'mehrteilige Daten / Sprachnachricht'),
+'text/comma-separated-values':FileType(['csv'], 'kommaseparierte Datendateien'),
+'text/css':FileType(['css'], 'CSS Stylesheet-Dateien'),
+'text/html':FileType(['htm', 'html', 'shtml'], 'HTML-Dateien'),
+'text/javascript':FileType(['js'], 'JavaScript-Dateien'),
+'text/plain':FileType(['txt'], 'reine Textdateien'),
+'text/richtext':FileType(['rtx'], 'Richtext-Dateien'),
+'text/rtf':FileType(['rtf'], 'Microsoft RTF-Dateien'),
+'text/tab-separated-values':FileType(['tsv'], 'tabulator-separierte Datendateien'),
+'text/vnd.wap.wml':FileType(['wml'], 'WML-Dateien (WAP)'),
+'application/vnd.wap.wmlc':FileType(['wmlc'], 'WMLC-Dateien (WAP)'),
+'text/vnd.wap.wmlscript':FileType(['wmls'], 'WML-Scriptdateien (WAP)'),
+'application/vnd.wap.wmlscriptc':FileType(['wmlsc'], 'WML-Script-C-dateien (WAP)'),
+'text/xml':FileType(['xml'], 'XML-Dateien'),
+'text/xml-external-parsed-entity':FileType([], 'extern geparste XML-Dateien'),
+'text/x-setext':FileType(['etx'], 'SeText-Dateien'),
+'text/x-sgml':FileType(['sgm', 'sgml'], 'SGML-Dateien'),
+'text/x-speech':FileType(['talk', 'spc'], 'Speech-Dateien'),
+'video/mpeg':FileType(['mpeg', 'mpg', 'mpe'], 'MPEG-Dateien'),
+'video/quicktime':FileType(['qt', 'mov'], 'Quicktime-Dateien'),
+'video/vnd.vivo':FileType(['viv', 'vivo'], 'Vivo-Dateien'),
+'video/x-msvideo':FileType(['avi'], 'Microsoft AVI-Dateien'),
+'video/x-sgi-movie':FileType(['movie'], 'Movie-Dateien'),
+'workbook/formulaone':FileType(['vts', 'vtts'], 'FormulaOne-Dateien'),
+'x-world/x-3dmf':FileType(['3dmf', '3dm', 'qd3d', 'qd3'], '3DMF-Dateien'),
+'x-world/x-vrml':FileType(['wrl'], 'Visualisierung virtueller Welten (VRML) (veralteter MIME-Typ, aktuell ist model/vrml)')
+}
+
 class Thread(db.Model):
     title = db.StringProperty()
     tags = db.ListProperty(db.Category)
     title = db.StringProperty()
     url = db.LinkProperty(required = True)
     description = db.TextProperty()
+    last_modified = db.DateTimeProperty()
+    content_type = db.StringProperty(choices = set(mime_types))
     
     def __repr__(self):
         try:
 from time import time
 import hashlib
 
+import urlparse, urllib
+
+
+
 import werkzeug
 
 start = time()
 
 from flask import Flask
 
-from database import Thread, Content, Link
+from database import Thread, Content, Link, mime_types
 
 app = Flask(__name__)
 
 from google.appengine.ext import db
-from google.appengine.api import users
+from google.appengine.api import users, urlfetch
 
 from flask import redirect, url_for, request, render_template, abort, flash, get_flashed_messages
 
 @app.route('/')
 def index():
-
-    user = users.get_current_user()
-    
-    
-    
-    """
-    l = [u'http://personalbrandingblog.com/\r', u'http://www.amazon.de/Samsung-SyncMaster-Widescreen-Monitor-Kontrastverh%C3%A4ltnis/dp/B001EX01YM/ref=sr_1_41?ie=UTF8&s=ce-de&qid=1248270326&sr=1-41\r', u'http://cafepy.com/\r', u'http://graphics.stanford.edu/~seander/bithacks.html\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ss-2007/datenstrukturen-und-algorithmen/\r', u'http://projects.nytimes.com/crime/homicides/map\r', u'http://www.pacemaker.net\r', u'http://www.paderborn-unicorns.de/\r', u'http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/\r', u'http://ki2009.uni-paderborn.de/\r', u'http://setik01.deviantart.com/\r', u'http://www.wolframalpha.com/\r', u'http://www.tv.com/story/17302.html?tag=hotspot;gumball;1\r', u'http://live.gnome.org/Dia\r', u'http://www.billboard.com\r', u'http://news.ycombinator.com/news\r', u'http://www.catb.org/~esr/writings/sextips/\r', u'http://www.howstuffworks.com/\r', u'http://de.wikipedia.org/wiki/Nihilismus\r', u'http://faild.de/\r', u'http://www.informationisbeautiful.net/2009/how-i-learnt-to-stop-worrying-and-love-the-bomb/\r', u'http://briancray.com/2009/07/28/increase-form-usability-replace-form-button-submit/\r', u'http://www.bearandtiger.com\r', u'http://createordie.de/cod/news/Gruselige-Weihnachten-fuer-Alma-053087.html\r', u'http://en.wikipedia.org/wiki/White_box_testing\r', u'http://geeksinboston.com/2009/01/07/you-will-probably-fail-in-a-boring-and-project-specific-way/\r', u'http://en.wikipedia.org/wiki/Code_coverage\r', u'http://www.sqlite.org/testing.html\r', u'http://tlb.org/eunicycle.html\r', u'http://www.mint.com/blog/trends/one-trillion-dollars-video/\r', u'http://www.flickr.com/photos/lunchbreath/\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-ti/lehre0/ws2009/ga.html\r', u'http://jquery.com/\r', u'http://www.johndcook.com/R_language_for_programmers.html\r', u'http://scienceblogs.com/startswithabang/2009/08/hell_yeah_hubble.php?utm_source=selectfeed&utm_medium=rss\r', u'http://code.google.com/p/fabricate/\r', u'http://www2.math.uni-paderborn.de/ags/ag-schmalfuss/lehre/mathematik-fuer-informatiker-iii.html\r', u'http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf\r', u'http://www.ruby-lang.org/\r', u'http://www.shriiimp.com\r', u'http://www.ailab.si/orange\r', u'http://nextround.net/2009/08/28/15-durex-ads-so-clever-they-almost-make-you-want-to-buy-condoms/\r', u'http://createordie.de/codv2/\r', u'http://ignorethecode.net/blog/\r', u'http://www.xmarkjenkinsx.com/outside.html\r', u'http://alexgorbatchev.com/wiki/SyntaxHighlighter\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ws-20092010/ebkfs/\r', u'http://www.norvig.com/\r', u'http://www.bartleby.com/141/\r', u'http://www.date.uni-paderborn.de/index.php?id=430\r', u'http://sivers.org/sprezzatura\r', u'http://ejohn.org/apps/learn/\r', u'http://code.google.com/p/google-styleguide/\r', u'http://www.onlinecollege.org/2009/10/19/100-incredible-open-lectures-for-math-geeks/\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-mci/lehre/ws-20092010/usability-engineering.html\r', u'http://www.cs.uni-paderborn.de/?id=10640\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/lehre-ws0910/vl-verteilte-systeme.html\r', u'http://ooc-lang.org/\r', u'http://blogs.nokia.com/pushn900/index.php/submit-an-idea/\r', u'http://blogs.nokia.com/pushn900/\r', u'http://wwwhni.uni-paderborn.de/eps/lehre/wintersemester-200910/grati/\r', u'http://hiimdaisy.livejournal.com/\r', u'http://sensorik.uni-paderborn.de/lehre/halbleiterbauelemente.html\r', u'http://nikhilmisal.com/2009/11/08/10-inspirational-interviews-for-designers/\r', u'http://daringfireball.net/\r', u'http://www.billkatz.com/\r', u'http://www.inkscape.org/\r', u'http://twitter.com/PUSHN900\r', u'http://blog.notdot.net/\r', u'http://blog.hawkstudios.net/\r', u'http://maemo.org/development/\r', u'http://phbenito.wordpress.com/2008/10/23/equations-in-google-docs/\r', u'http://lifehacker.com/5412886/61-free-apps-were-most-thankful-for\r', u'https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/CC0918EAD88CB09E87256F5C006FF9E6/$file/750gx-gl_errata_6Feb2008_pub.pdf\r', u'http://www.topcoder.com/tc?d1=tutorials&d2=alg_index&module=Static\r', u'http://www.nerrot.com/\r', u'http://www.giss.nasa.gov/tools/latex/ltx-2.html\r', u'http://de.wikipedia.org/wiki/Algorithmus_von_Edmonds_und_Karp\r', u'http://www.lingt.com\r', u'http://www.hardkernel.com/index.html\r', u'http://www.omnigroup.com/applications/omnigraffle/\r', u'http://code.google.com/intl/de-DE/android/adc/\r', u'http://www.zedshaw.com/essays/programmer_stats.html\r', u'http://googleforstudents.blogspot.com/2009/05/spreadsheet-gadgets-for-work-or-play.html\r', u'http://www.amazon.de/Operating-Systems-Internals-Design-Principles/dp/0136006329/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1244623596&sr=8-1\r', u'http://www.google.com/landing/studytips.html\r', u'http://www.amazon.de/Samsung-SyncMaster-Widescreen-Monitor-Kontrastverh%C3%A4ltnis/dp/B001ILME90/ref=sr_1_27?ie=UTF8&s=ce-de&qid=1249634818&sr=1-27\r', u'http://personalbrandingblog.com/\r', u'http://blog.moertel.com/pages/coders-guide-to-coffee\r', u'http://live.gnome.org/Dia\r', u'http://setik01.deviantart.com/\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ss-2007/datenstrukturen-und-algorithmen/\r', u'http://ki2009.uni-paderborn.de/\r', u'http://www.howstuffworks.com/\r', u'http://www.wolframalpha.com/\r', u'http://maemo.org/development/\r', u'http://graphics.stanford.edu/~seander/bithacks.html\r', u'http://de.wikipedia.org/wiki/Nihilismus\r', u'http://createordie.de/cod/news/Gruselige-Weihnachten-fuer-Alma-053087.html\r', u'http://code.google.com/p/fabricate/\r', u'http://www.billboard.com\r', u'http://briancray.com/2009/07/28/increase-form-usability-replace-form-button-submit/\r', u'http://en.wikipedia.org/wiki/Code_coverage\r', u'http://www.sqlite.org/testing.html\r', u'http://www.flickr.com/photos/lunchbreath/\r', u'http://jquery.com/\r', u'http://www.johndcook.com/R_language_for_programmers.html\r', u'http://www.shriiimp.com\r', u'http://alexgorbatchev.com/wiki/SyntaxHighlighter\r', u'http://ignorethecode.net/blog/\r', u'http://nextround.net/2009/08/28/15-durex-ads-so-clever-they-almost-make-you-want-to-buy-condoms/\r', u'http://www.bartleby.com/141/\r', u'http://www.date.uni-paderborn.de/index.php?id=430\r', u'http://www.onlinecollege.org/2009/10/19/100-incredible-open-lectures-for-math-geeks/\r', u'http://ooc-lang.org/\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ws-20092010/ebkfs/\r', u'http://wwwhni.uni-paderborn.de/eps/lehre/wintersemester-200910/grati/\r', u'http://twitter.com/PUSHN900\r', u'http://nikhilmisal.com/2009/11/08/10-inspirational-interviews-for-designers/\r', u'http://hiimdaisy.livejournal.com/\r', u'http://www.cs.uni-paderborn.de/?id=10640\r', u'http://sensorik.uni-paderborn.de/lehre/halbleiterbauelemente.html\r', u'http://dl.dropbox.com/u/427783/linkssss.txt', u'http://wiesl.pytalhost.com/', u'http://www.financeyourfreedom.com/blog/', u'http://fettrap.com/', u'http://www.threadless.com/', u'http://net.tutsplus.com/videos/screencasts/how-i-can-code-twice-as-fast-as-you/', u'http://graphite.wikidot.com/', u'http://shop.stylefile.de/', u'http://webstandard.kulando.de/', u'http://meltingpotmusicnews.blogspot.com/', u'http://blog.hiphop.de/Tuabloggtsicheinen/', u'http://dstruktiv.org/', u'http://www.head-fi.org/', u'http://rgruet.free.fr/', u'http://www.phonedog.com/', u'http://www.questioningsoftware.com/', u'http://pythonconquerstheuniverse.blogspot.com/', u'http://wxpython.org/tut-part1.php', u'http://en.wikipedia.org/wiki/Robustness_Principle', u'http://developer.yahoo.com/', u'http://www.bunny-comic.com/', u'http://www.laut.de/', u'http://www.google.com/chrome', u'http://lsf.upb.de/', u'http://www.entourage-business.de/', u'http://www.openpandora.de/', u'http://ascii.textfiles.com/archives/1717', u'http://www.youtube.de/', u'http://threepanelsoul.com/', u'http://applegeeks.com/', u'http://www.wallstreet-online.de/', u'http://www.math.upb.de/~robsy/lehre/MfI-III-2008/', u'http://www.cs.uni-paderborn.de/studium/pruefungswesen/pruefungstermine.html', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-engels/lehre/ws0809/softwareentwurf/aktuelles.html', u'http://3x3rc1s3.appspot.com', u'http://autonomicon.blogspot.com/', u'http://www.cantstopwontstop.com/', u'http://www.openkomodo.com/', u'http://www.satine.org/', u'http://code.google.com/appengine/', u'http://www.huss-hodn.de/', u'http://huss-hodn.blogspot.com/', u'http://finance.yahoo.com/', u'http://informatik-upb.de/', u'http://www.naji-dev.de/projekte/mathematik-fur-informatiker-1-mitschriften/', u'http://effbot.org/', u'http://www.calnewport.com/blog/', u'http://www.nthcode.com/pubs/porting-android-to-a-new-device.html', u'http://code.activestate.com/', u'http://code.google.com/p/browsersec/wiki/Main', u'http://lukehutch.wordpress.com/android-stuff/', u'http://getwww.uni-paderborn.de/teaching/get', u'http://www.angstrom-distribution.org/', u'http://www2.math.uni-paderborn.de/ags/kunoth/group/drzevitz/mfi.html', u'http://www.studentenwerk-pb.de/gastronomie/speiseplaene/mensa.html?no_cache=1', u'http://www.klamottenshops.de/', u'http://www.geseke-online.de/', u'http://www.google.de/', u'http://wiesl.pytalhost.com/', u'http://codepad.org/', u'http://stackoverflow.com/questions/500607/what-are-the-lesser-known-but-cool-data-structures', u'http://www.voycontigo.de', u'http://www.braveheartbattle.de', u'http://cellperformance.beyond3d.com/articles/index.html', u'http://docs.sun.com/source/806-3568/ncg_goldberg.html', u'http://labs.google.com/papers/mapreduce.html', u'http://www.cs.princeton.edu/algs4/home/', u'http://www.vcarrer.com/2010/05/css-mini-reset.html', u'http://www.oualline.com/style/index.html', u'http://jqueryfordesigners.com/', u'http://www.youtube.com/watch?v=u6XAPnuFjJc', u'http://www.cs.princeton.edu/~wayne/kleinberg-tardos/', u'http://tallguywrites.livejournal.com/133179.html', u'http://www.smartbuyglasses.de', u'http://www.dspdimension.com/admin/dft-a-pied/', u'http://gapingvoid.com/books/', u'http://cairographics.org/threaded_animation_with_cairo/', u'http://www.amazon.de/Haunted-Chuck-Palahniuk/dp/0099458373/ref=pd_sim_eb_5', u'http://dougmcinnes.com/html-5-asteroids/', u'http://view.samurajdata.se/', u'http://www.wisdom.weizmann.ac.il/~oded/zk-tut02.html', u'http://www.tipfy.org/wiki/cookbook/simplest-pagination/', u'http://www.h4ck3r.net/2010/05/11/mercurial-hg-with-dropbox/', u'http://www.seebs.net/c/c_tcn4e.html', u'https://groups.google.com/group/comp.lang.c/msg/e105e5d339edec01?pli=1', u'http://de.wikipedia.org/wiki/Partizipative_Softwareentwicklung', u'http://bitbucket.org/', u'http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html', u'https://spreadsheets.google.com/lv?key=tWri7T3f4Ex6-uVU8i9-FFQ&toomany=true', u'http://cairographics.org/', u'http://zetcode.com/tutorials/cairographicstutorial/', u'http://library.gnome.org/devel/gtk/stable/', u'http://www.lua.org/', u'http://research.engineering.wustl.edu/~pless/506/l3.html', u'http://library.gnome.org/devel/gtk-tutorial/stable/', u'http://zetcode.com/tutorials/gtktutorial/', u'http://www.fltk.org/', u'http://www.cse.unsw.edu.au/~lambert/java/3d/divideandconquer.html', u'http://www.tedxamsterdam.com/2009/video-wubbo-ockels-on-time-and-gravity/', u'http://codylindley.com/', u'http://www.ibm.com/developerworks/library/x-futhtml1/', u'http://people.csail.mit.edu/pgbovine/python/', u'http://www.korokithakis.net/tutorials/python', u'http://www.lyx.org', u'http://diveintohtml5.org/', u'http://ejohn.org/apps/learn/', u'http://www.downloadsquad.com/2010/04/30/if-you-code-html-zen-coding-will-change-your-life/', u'http://new.myfonts.com/fonts/bitstream/futura/medium/', u'http://www.microsoft.com/education/competencies/humor.mspx', u'http://qt.nokia.com/', u'http://learnpythonthehardway.com/', u'http://flask.pocoo.org/', u'http://jasoncrawford.org/2010/04/how-to-work-with-stupid-people/', u'http://skepticblog.org/2010/04/26/why-are-nerds-unpopular/', u'http://w3cs.upb.de/Verwaltung/studium/termine.htm', u'http://www.benjamincoe.com/blog/index.php?entry=entry100425-122529', u'http://validator.w3.org/', u'http://visualjquery.com/1.1.2.html', u'http://books.google.de/books?hl=de&lr=&id=J-9C27eBgz4C&oi=fnd&pg=PR5&dq=zero+knowledge&ots=Jf9KE4RbKP&sig=_iRKzyMZ3guryk65JCEH739hxlM#v=onepage&q&f=false', u'http://www.slideshare.net/gueste94e4c/dropbox-startup-lessons-learned-3836587', u'http://www.humblesoftware.com/demos/trig', u'http://koala.upb.de/', u'http://omnipotent.net/jquery.sparkline/', u'http://beihang.upb.de/', u'http://www.gtk.org/', u'http://www.ciao.de/Das_beste_Souffle__Test_8283175', u'https://elab.uni-paderborn.de/', u'http://www.rezeptewiki.org/wiki/Schokoladen-Souffl%C3%A9_mit_fl%C3%BCssigem_Innern', u'http://www.vox.de/kochen_4954.php?rez_id=3569', u'http://www.daskochrezept.de/rezepte/schokoladen-souffle_85382.html', u'http://www.itasoftware.com/careers/hiringpuzzles.html', u'http://latexsearch.com/sandbox.do', u'http://garyharan.com/', u'http://tbohiphop.net/', u'http://www.amazon.de/Samsung-650-101-Zoll-LCD-Fernseher/dp/tech-data/B001UK36B4/ref=de_a_smtd', u'http://andrew.huang.usesthis.com/', u'http://www2.cs.uni-paderborn.de/cs/ag-monien/LEHRE/SS10/Methoden/', u'http://everytimezone.com/', u'http://www-nth.uni-paderborn.de/index.php?id=5932', u'http://de.wikipedia.org/wiki/Fiat-Shamir-Protokoll', u'http://de.wikipedia.org/wiki/Zero_Knowledge', u'http://economix.blogs.nytimes.com/2010/04/12/do-smarter-workers-work-less/', u'http://html5test.com/', u'http://llvm.org/docs/CommandGuide/', u'http://www.biershop-braugasthoefe.de/', u'http://www.paulhammond.org/webkit2png/', u'http://www.arthurdevany.com/categories/20091026', u'http://github.com/gigq/flask', u'http://googleblog.blogspot.com/2010/04/google-code-jam-2010-registration-now.html', u'http://www.tug.org.in/tutorials.html', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-kleine-buening/lehre/ss10/grundlagen-wissensbasierter-systeme.html', u'http://yalook.com/', u'http://www.stylight.de/', u'http://www.amazon.de/Sioux-Herren-Klassische-Halbschuhe-schwarz/dp/B002T9VJUU/ref=sr_1_6?ie=UTF8&m=A3JWKAKR8XB7XF&s=shoes&qid=1270539435&sr=1-6', u'http://www.nik-fashion.de/index.php?s=3&cat_id=156_Hemden&artikel=13624_Armani+Hemd+L6C18++black&ref=518', u'http://people.csail.mit.edu/bdean/6.046/dp/', u'http://particletree.com/', u'http://www.amazon.com/exec/obidos/ASIN/0201362988', u'http://blog.ksplice.com/2010/03/null-pointers-part-i/', u'http://www.teamten.com/lawrence/writings/dynamic_cast_std_integer_c.html', u'http://blog.peepcode.com/tutorials/2010/file-navigation-in-text-editors', u'http://shop.mattel.com/product/index.jsp?productId=4032107&cp=3719989.3748552', u'http://www.uni-weimar.de/cms/index.php?id=550', u'http://duckduckgo.com/', u'http://aduni.org/courses/', u'http://www-srt.upb.de/index.php?8', u'http://blogs.amd.com/work/2010/03/03/48-cores-contest/', u'http://code.google.com/intl/de-DE/edu/languages/google-python-class/', u'http://www2.cs.uni-paderborn.de/cs/ag-klbue/de/courses/ss10/gwbs/index.shtml', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-mci/lehre/ss-2010/gestaltung-von-webauftritten.html', u'http://www.ahorn-sportpark.de/', u'http://brusdeylins.info/projects/yahoo-finance-api/', u'http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0805-01.mspx', u'http://msdn.microsoft.com/de-de/beginner/bb308891(en-us).aspx', u'http://www.phanderson.com/C/', u'http://www.video2brain.com/de/products-257.htm', u'http://www.amazon.de/Programming-Pearls-ACM-Press-Bentley/dp/0201657880/ref=pd_bxgy_eb_img_b', u'http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654/ref=pd_sim_b_3', u'http://msdn.microsoft.com/en-us/beginner/cc305129.aspx', u'http://eli.thegreenplace.net/', u'http://www.westegg.com/unmaintained/carnegie/win-friends.html', u'http://www.marioai.org', u'http://www.makotemplates.org/', u'http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.boxplot', u'http://zetcode.com/wxpython/', u'http://www.google.com/reader/play/', u'http://wiki.wxpython.org/', u'http://freakonomics.blogs.nytimes.com/', u'http://code.google.com/intl/de-DE/edu/', u'http://www.cs.uni-paderborn.de/fachgebiete/ag-bloemer/personen/christoph/proseminar-privacy-enhancing-technologies.html', u'http://mathoverflow.net/questions/8846/proofs-without-words', u'http://www.w3schools.com/html5/html5_reference.asp', u'http://www.online-laufshop.de/product_info.php?cPath=&filter3_id=1&filter4_id=1&filter2_id=2&filter_id=&filter6_id=4&filter5_id=&maxresults=12&page=4&products_id=1337', u'http://www.doom9.org/', u'http://en.wikipedia.org/wiki/Voronoi_diagram', u'http://mislav.uniqpath.com/poignant-guide/book/', u'http://de.wikipedia.org/wiki/Collatz-Problem', u'http://html5doctor.com/designing-a-blog-with-html5/', u'http://www.divinecaroline.com/22081/44393-flirt--science-sex#346367', u'http://www.amazon.de/Substance-Style-Aesthetic-Remaking-Consciousness/dp/0060933852/ref=sr_1_2?ie=UTF8&s=books-intl-de&qid=1267694420&sr=8-2', u'http://createyourowncareer.de/Studenten/Stipendien/Stiftung-Studienfonds-OWL.html', u'http://www.quora.com/challenges', u'http://www.zianet.com/wpickens/jokes/mit.html', u'http://www-nth.uni-paderborn.de/index.php?id=5936#c10696', u'http://thewvsr.com/adsvsreality.htm', u'http://www.headfirstlabs.com/', u'http://www.picnik.com/', u'http://www.mathpunk.net/', u'http://thankgodforgirls.tumblr.com/', u'http://www.spoj.pl/', u'http://headrush.typepad.com/', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-mci/lehre/ss-2010/gestaltung-von-webauftritten-ws-0809.html', u'http://www.poison-bikes.de/frame.php?MakeLang=deutsch&MakeLangID=1&prodid=201011252-59', u'http://hginit.com/', u'http://www.radon-bikes.de/xist4c/web/ZR-Team-7-0-XT-2010_id_8783_.htm', u'http://www.canyon.com/mountainbikes/bike.html?b=1802', u'http://rapgenius.com/', u'http://pycon.blip.tv/', u'http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it', u'http://www.zalando.de/h-by-hudson-coronel-stiefelette-black.html', u'http://fuckyeahgeekgirls.tumblr.com/', u'http://www.lifehack.org/', u'http://drunken-novice.deviantart.com/', u'http://girlswithglasses.tumblr.com/', u'http://smashfaceonkeyboardpostresult.com/', u'http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B', u'http://www.benjoffe.com/holdem', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/lehre-ss10/proseminar-rechnernetze.html', u'http://www.usq.edu.au/engsurv/students/enrolment/latex', u'http://www.mytechinterviews.com/10-google-interview-questions', u'http://en.wikipedia.org/wiki/The_Hardest_Logic_Puzzle_Ever', u'http://www.commandandconquer.com/classic', u'http://www.amazon.com/gp/product/3642008550?ie=UTF8&tag=theende-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=3642008550', u'http://www.zwyx.org/portal/kafka/kafka_hunger_artist.html', u'http://www.newbalance-blog.com/', u'http://www.prescod.net/rest/mistakes/', u'http://divvyshot.com/', u'http://www.paderborner-osterlauf.de/', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/lehre-ss09/verteilte-systeme.html', u'http://www.fly53store.com/product/587/option/927', u'http://www.amazon.com/Princeton-Companion-Mathematics-Timothy-Gowers/dp/0691118809/ref=pd_bxgy_b_text_b', u'http://thebigblogtheory.wordpress.com/', u'http://www.wired.com/', u'http://www.dspace.de/shared/data/bkm/catalog2010/blaetterkatalog/', u'http://pythonpaste.org/webob/', u'http://sloanreview.mit.edu/', u'http://steamykitchen.com/163-how-to-turn-cheap-choice-steaks-into-gucci-prime-steaks.html', u'http://gaeutilities.appspot.com/', u'http://blog.notdot.net/2010/01/Webapps-on-App-Engine-part-1-Routing', u'http://chameleon.repoze.org/', u'http://www.amazon.de/Information-Beautiful-Atlas-David-McCandless/dp/0007294662/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1265789396&sr=8-1-spell', u'http://www.tigsource.com/', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/ss07/verteilte-systeme.html', u'http://www.runnersworld.de', u'http://www.online-laufshop.de', u'http://csclub.uwaterloo.ca/contest/index.php', u'http://en.wikipedia.org/wiki/Cuckoo_hashing', u'http://www.sparkasse-geseke.de/', u'http://www.sexinart.net/', u'http://www.fahrrad.de/fahrraeder/mountainbikes/hawk-44-blackline/19086.html\r', u'http://www.sciencedaily.com/releases/2010/01/100127134241.htm', u'http://www.bike-discount.de/shop/a10869/cube-ltd-race-black-anodized-2009.html?uin=1bvggskhmpa2c6g77ut8268ac2\r', u'http://www.daskochrezept.de/bundeslebensmittelschluessel/\r', u'http://unrealitymag.com/index.php/2008/12/15/ten-of-the-baddest-fictional-movie-weapons/\r', u'http://www.fieggen.com/shoelace/ianknot.htm\r', u'http://www.pimp-my-roll.de/\r', u'http://www.norvig.com/design-patterns/\r', u'http://www2.cs.uni-paderborn.de/cs/ag-monien/LEHRE/WS04_05/GrundAlgo/\r', u'http://www.amazon.de/Yamaha-AV-Receiver-Einmesssystem-Funktion-schwarz/dp/B00230WXGY/ref=sr_1_11?ie=UTF8&s=ce-de&qid=1259060456&sr=1-11\r', u'http://www.amazon.de/Pioneer-CS-5070-Lautsprecher-Paar-schwarz/dp/B00005OOJN/ref=sr_1_14?ie=UTF8&s=ce-de&qid=1259060496&sr=1-14\r', u'http://underhanded.xcott.com/?p=18\r', u'http://de.wikipedia.org/wiki/Chateaubriand_(Speise)\r', u'http://en.wikipedia.org/wiki/Amazon_Mechanical_Turk\r', u'http://www.splitreason.com/topsellers.php\r', u'http://syntheticpubes.com/\r', u'http://www.latex-community.org/forum/viewtopic.php?f=5&t=2856&start=0&st=0&sk=t&sd=a\r', u'http://gueuzav.deviantart.com/art/Flash-Toy-Little-Bee-127407585\r', u'http://gueuzav.deviantart.com/art/Flash-Toy-Cloud-Drawer-127403475\r', u'http://kris-wilson.deviantart.com/\r', u'http://viewsourcecode.org/why/\r', u'http://www.bobhobbs.com/files/kr_lovecraft.html\r', u'http://toshinho.deviantart.com/\r', u'http://de.wikipedia.org/wiki/Karps_21_NP-vollst%C3%A4ndige_Probleme\r', u'http://elektrospanier.de/blog/\r', u'http://continuitygame.com/\r', u'http://awfullibrarybooks.wordpress.com/\r', u'http://uarrr.org/blog/\r', u'http://de.wikipedia.org/wiki/3-SAT\r', u'http://users.soe.ucsc.edu/~bweber/dokuwiki/doku.php?id=starcraft_aiide_2010\r', u'http://pika-la-cynique.deviantart.com/\r', u'http://www.codecogs.com/components/equationeditor/equationeditor.php\r', u'http://www.amazon.de/Introduction-Theory-Computing-Michael-Sipser/dp/0619217642/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1255539836&sr=8-1\r', u'http://www.collectedcurios.com/\r', u'http://samizdat.cc/cyoa/#/_\r', u'http://www.frontarmy.co.uk/\r', u'http://grizzlyfear.schnaberlack.de/\r', u'http://www.sexblogsdir.com/\r', u'http://www.amazon.com/gp/product/1593272006\r', u'http://petiteteenager.com/\r', u'http://www.waesche-waschen.de/\r', u'http://explosm.net/\r', u'http://takeaweirdbreak.blogspot.com/\r', u'http://www.drmaciver.com/\r', u'http://www.amazon.com/gp/product/1402757964?ie=UTF8&tag=theende-20&linkCode=xm2&camp=1789&creativeASIN=1402757964\r', u'http://www-stat.stanford.edu/~tibs/ElemStatLearn//\r', u'http://www.amazon.com/gp/product/1430224150?ie=UTF8&tag=diveintomark-20&creativeASIN=1430224150\r', u'http://www.tinkersoup.de/index.php?cPath=22\r', u'http://blog.hiphop.de/Tuabloggtsicheinen/\r', u'http://www.cesmes.fi/pallo.swf\r', u'http://makemeco.me/\r', u'http://canabalt.com/\r', u'http://www.guardian.co.uk/news/datablog\r', u'http://wagnerf.deviantart.com/\r', u'http://www.omnisio.com/startupschool08/paul-graham-at-startup-school-08\r', u'http://talk.maemo.org/\r', u'http://thirstydarax.blogspot.com/\r', u'http://freescienceonline.blogspot.com/2009/09/free-computer-science-courses.html\r', u'http://www.asofterworld.com/\r', u'http://p.einarsen.no/?p=151\r', u'http://galou.o-nigiri.com/\r', u'http://www.edge.org/3rd_culture/myhrvold_lions07/myhrvold_lions07_index.html\r', u'http://www.badgirlsblog.com/\r', u'http://www.itl.nist.gov/div897/sqg/dads/terms.html\r', u'http://xfuckerx.de/\r', u'http://bleedman.deviantart.com/gallery/\r', u'http://www.ted.com/talks/lang/eng/john_maeda_on_the_simple_life.html\r', u'http://www.cherrysave.com/programming/jquery-for-beginners-selectors-hierarchies-and-attributes-oh-my/\r', u'http://www.moserware.com/\r', u'http://www.aaronsw.com/weblog/productivity\r', u'http://www.kindgirls.com/\r', u'http://oyc.yale.edu/economics/game-theory/contents/sessions.html\r', u'http://www.xmission.com/~nate/glut.html\r', u'http://www.karmaloop.com/products.aspx?ProductID=69713&VendorCode=NIX\r', u'http://www.universaldesigns.ca/UDR/store/TDK/TDK.html\r', u'http://stylecrave.com/\r', u'http://www.sexypeople-blog.com/\r', u'http://code.activestate.com/recipes/langs/python/\r', u'http://famfamfam.com/\r', u'http://diveintopython3.org/?dupe=withhonor\r', u'http://svn.facebook.com/svnroot/bunny1/src/README\r', u'http://software-carpentry.org/\r', u'http://courses.csail.mit.edu/iap/interview/materials.php\r', u'http://www.ted.com/', u'http://garry.posterous.com/', u'http://rosettacode.org', u'http://pleac.sourceforge.net/pleac_python/index.html', u'http://www.gordon-taft.net/SciencePack.html', u'http://canabalt.com/', u'http://continuitygame.com/', u'http://groups.uni-paderborn.de/schreiben/', u'http://unrealitymag.com/', u'http://www.sneakersnstuff.com/', u'http://www.phanderson.com/C/scanf.html', u'http://www.padersprinter.de/', u'http://store.quantummechanix.com/Stargate-SG-1-Tealc-Animated-Maquette--Hero-Sized_p_68.html', u'http://blog.wolfire.com/2010/01/An-Introduction-to-AI-in-Games-from-Phil-Carlisle', u'http://www.youtube.com/disco', u'http://ne-te-promene-donc-pas-toute-nue.tumblr.com/', u'http://articles.sitepoint.com/article/guide-web-character-encoding', u'http://awfullibrarybooks.wordpress.com/', u'http://www.acm.uiuc.edu/webmonkeys/book/c_guide/', u'http://projecteuler.net/', u'http://www.arcteryx.com/Product.aspx?Mens/Jackets-Vests/Alpha-SL-Pullover', u'http://www.cube.eu/', u'http://code.google.com/events/io/2010/', u'http://thedw.us/', u'http://higher-thought.net/complete-notes-to-good-calories-bad-calories/', u'http://publications.gbdirect.co.uk/c_book/', u'http://blog.javia.org/', u'http://www.gamesetwatch.com/2010/01/special_the_best_of_the_2009_demos.php', u'http://www.youtube.com/view_play_list?p=664F2AE1160FF884', u'http://hivelogic.com/articles/top-10-programming-fonts', u'http://eis.ucsc.edu/StarCraftAICompetition', u'http://stoneship.org/journal/2007/a-c-function-pointer-example/', u'http://www.flatex.de/Steuerbescheinigungen2009', u'http://lua-users.org/wiki/SciteScripts', u'http://www.shootingmyself.com/', u'http://wiki.python.org/moin/PythonSpeed/PerformanceTips', u'http://www.explosm.net/', u'http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062/ref=sr_1_1?ie=UTF8&s=books&qid=1245703530&sr=8-1\r', u'http://phnmn.blogspot.com/2009/05/married-to-mob-summer-09.html\r', u'http://www.zedshaw.com/blog/index.html\r', u'http://googleforstudents.blogspot.com/\r', u'http://neopythonic.blogspot.com/\r', u'http://cafepy.com/\r', u'http://www.paderborn-unicorns.de/\r', u'http://www.pacemaker.net\r', u'http://projects.nytimes.com/crime/homicides/map\r', u'http://www.makinggoodsoftware.com/\r', u'http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/\r', u'http://www.tv.com/story/17302.html?tag=hotspot;gumball;1\r', u'http://news.ycombinator.com/news\r', u'http://faild.de/\r', u'http://geeksinboston.com/2009/01/07/you-will-probably-fail-in-a-boring-and-project-specific-way/\r', u'http://en.wikipedia.org/wiki/White_box_testing\r', u'http://www.bearandtiger.com\r', u'http://tlb.org/eunicycle.html\r', u'http://www.mint.com/blog/trends/one-trillion-dollars-video/\r', u'http://sivers.org/sprezzatura\r', u'http://scienceblogs.com/startswithabang/2009/08/hell_yeah_hubble.php?utm_source=selectfeed&utm_medium=rss\r', u'http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf\r', u'http://www.ailab.si/orange\r', u'http://www.ruby-lang.org/\r', u'http://createordie.de/codv2/\r', u'http://www.xmarkjenkinsx.com/outside.html\r', u'http://www.billkatz.com/\r', u'http://www.norvig.com/\r', u'http://ejohn.org/apps/learn/\r', u'http://code.google.com/p/google-styleguide/\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-ti/lehre0/ws2009/ga.html\r', u'http://daringfireball.net/\r', u'https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/CC0918EAD88CB09E87256F5C006FF9E6/$file/750gx-gl_errata_6Feb2008_pub.pdf\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-mci/lehre/ws-20092010/usability-engineering.html\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/lehre-ws0910/vl-verteilte-systeme.html\r', u'http://www.google.de/', u'http://www.financeyourfreedom.com/blog/', u'http://ocw.mit.edu/OcwWeb/web/home/home/index.htm', u'http://code.google.com/intl/de-DE/apis/spreadsheets/overview.html', u'http://www.johndcook.com/blog/', u'http://www.amazon.de/Introduction-Game-Theory-Martin-Osborne/dp/0195128958/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1237802589&sr=8-1', u'http://www.das-sommerfestival.de/', u'http://www.zazzle.com/custom/skateboards', u'http://jollyjack.deviantart.com/', u'http://www.korgnano.com/', u'http://www.myspace.com/bliggblizo', u'http://www.chromeexperiments.com/', u'http://wordaligned.org/', u'http://www.youtube.com/view_play_list?p=B99B7E92EB3B4230', u'http://20uhr15.blogspot.com/', u'http://blog.themeforest.net/tutorials/jquery-for-absolute-beginners-video-series/', u'http://jonraasch.com/blog/a-simple-jquery-slideshow', u'http://jquery.com/', u'http://www.ruby-lang.org/', u'http://microformats.org/', u'http://blog.ph-creative.com/post/CSS-Trick-Hidden-Messages.aspx', u'http://www.learningjquery.com/', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-softwaretechnik/lehre/lehrveranstaltungen/softwaretechnik-praktikum-2009/home.html', u'http://www.selfmade-records.de/', u'http://www.alistapart.com/', u'http://dev.w3.org/html5/html-author/', u'http://www.splash-festival.de/', u'http://de.wikipedia.org/wiki/Lineare_Differenzengleichung', u'http://www.misantropolis.de/', u'http://twitsteps.blogspot.com/', u'http://de.wikipedia.org/wiki/Partiell-rekursive_Funktion', u'http://www.myspace.com/bigtua', u'http://www.de-bug.de/', u'http://www.myspace.com/kriegerdeslichts', u'http://showmedo.com/videos/series?name=PythonWxPythonBeginnersSeries', u'http://formencode.org/', u'http://gizmodo.com/', u'https://studinfo.uni-paderborn.de/cgi-bin/go', u'http://www.engadget.com/', u'http://entershort.com/', u'http://www.atradeaday.com/', u'http://finance.google.com/', u'http://benutzerverwaltung.upb.de/', u'http://paul.upb.de/', u'http://www.python-forum.de/', u'http://www.talkandroid.com/', u'http://beagleboard.org/', u'http://blog.appenginefan.com/', u'http://www.chimperator.de/', u'http://www.faq4mobiles.de/', u'http://array.org/ubuntu/', u'http://www.studivz.net/', u'http://wwwhni.uni-paderborn.de/alg/lehre/ws-20082009/ebkfs/', u'http://zenhabits.net/', u'http://www.little-gamers.com/', u'http://www.pythonware.com/daily/', u'http://goldb.org/', u'http://free-electrons.com/blog/2008-training-materials/', u'http://dominion.thruhere.net/koen/cms/', u'http://markitup.jaysalvat.com/', u'http://www.google.com/support/jobs/bin/static.py?page=students.html', u'http://wwwhni.uni-paderborn.de/eps/lehre/wintersemester-200809/grati/', u'http://lenovoblogs.com/designmatters/', u'http://diglett.blogspot.com/', u'http://dl.getdropbox.com/u/427783/03.%20Lil%27%20Wayne%20Feat.%20Dre%20-%20Blow%20My%20Mind-MF.mp3', u'http://wearehunted.com/', u'http://codeninja.de/', u'http://gizmodo.com/5432678/', u'http://blog.appenginefan.com/\r', u'http://focus.ti.com/docs/solution/folders/print/501.html\r', u'http://www.zedshaw.com/blog/index.html\r', u'http://diglett.blogspot.com/\r', u'http://www.omnigroup.com/applications/omnigraffle/\r', u'http://code.google.com/intl/de-DE/android/adc/\r', u'http://en.wikipedia.org/wiki/Critical_thinking\r', u'http://www.zedshaw.com/essays/programmer_stats.html\r', u'http://www.google.com/landing/studytips.html\r', u'http://www.python.org/dev/peps/pep-0020/\r', u'http://googleforstudents.blogspot.com/2009/05/spreadsheet-gadgets-for-work-or-play.html\r', u'http://blog.moertel.com/pages/coders-guide-to-coffee\r', u'http://googleforstudents.blogspot.com/\r', u'http://neopythonic.blogspot.com/\r', u'http://www.amazon.de/Samsung-SyncMaster-Widescreen-Monitor-Kontrastverh%C3%A4ltnis/dp/B001ILME90/ref=sr_1_27?ie=UTF8&s=ce-de&qid=1249634818&sr=1-27\r', u'http://www.makinggoodsoftware.com/\r', u'http://personalbrandingblog.com/\r', u'http://www.amazon.de/Samsung-SyncMaster-Widescreen-Monitor-Kontrastverh%C3%A4ltnis/dp/B001EX01YM/ref=sr_1_41?ie=UTF8&s=ce-de&qid=1248270326&sr=1-41\r', u'http://cafepy.com/\r', u'http://graphics.stanford.edu/~seander/bithacks.html\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ss-2007/datenstrukturen-und-algorithmen/\r', u'http://projects.nytimes.com/crime/homicides/map\r', u'http://www.pacemaker.net\r', u'http://www.paderborn-unicorns.de/\r', u'http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/\r', u'http://ki2009.uni-paderborn.de/\r', u'http://setik01.deviantart.com/\r', u'http://www.wolframalpha.com/\r', u'http://www.tv.com/story/17302.html?tag=hotspot;gumball;1\r', u'http://live.gnome.org/Dia\r', u'http://www.billboard.com\r', u'http://news.ycombinator.com/news\r', u'http://www.catb.org/~esr/writings/sextips/\r', u'http://www.howstuffworks.com/\r', u'http://de.wikipedia.org/wiki/Nihilismus\r', u'http://faild.de/\r', u'http://www.informationisbeautiful.net/2009/how-i-learnt-to-stop-worrying-and-love-the-bomb/\r', u'http://briancray.com/2009/07/28/increase-form-usability-replace-form-button-submit/\r', u'http://www.bearandtiger.com\r', u'http://createordie.de/cod/news/Gruselige-Weihnachten-fuer-Alma-053087.html\r', u'http://en.wikipedia.org/wiki/White_box_testing\r', u'http://geeksinboston.com/2009/01/07/you-will-probably-fail-in-a-boring-and-project-specific-way/\r', u'http://en.wikipedia.org/wiki/Code_coverage\r', u'http://www.sqlite.org/testing.html\r', u'http://tlb.org/eunicycle.html\r', u'http://www.mint.com/blog/trends/one-trillion-dollars-video/\r', u'http://www.flickr.com/photos/lunchbreath/\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-ti/lehre0/ws2009/ga.html\r', u'http://jquery.com/\r', u'http://www.johndcook.com/R_language_for_programmers.html\r', u'http://scienceblogs.com/startswithabang/2009/08/hell_yeah_hubble.php?utm_source=selectfeed&utm_medium=rss\r', u'http://code.google.com/p/fabricate/\r', u'http://www2.math.uni-paderborn.de/ags/ag-schmalfuss/lehre/mathematik-fuer-informatiker-iii.html\r', u'http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf\r', u'http://www.ruby-lang.org/\r', u'http://www.shriiimp.com\r', u'http://www.ailab.si/orange\r', u'http://nextround.net/2009/08/28/15-durex-ads-so-clever-they-almost-make-you-want-to-buy-condoms/\r', u'http://createordie.de/codv2/\r', u'http://ignorethecode.net/blog/\r', u'http://www.xmarkjenkinsx.com/outside.html\r', u'http://alexgorbatchev.com/wiki/SyntaxHighlighter\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ws-20092010/ebkfs/\r', u'http://www.norvig.com/\r', u'http://www.bartleby.com/141/\r', u'http://www.date.uni-paderborn.de/index.php?id=430\r', u'http://sivers.org/sprezzatura\r', u'http://ejohn.org/apps/learn/\r', u'http://code.google.com/p/google-styleguide/\r', u'http://www.onlinecollege.org/2009/10/19/100-incredible-open-lectures-for-math-geeks/\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-mci/lehre/ws-20092010/usability-engineering.html\r', u'http://www.cs.uni-paderborn.de/?id=10640\r', u'http://www.cs.uni-paderborn.de/fachgebiete/fachgebiet-rechnernetze/lehre/lehre-ws0910/vl-verteilte-systeme.html\r', u'http://ooc-lang.org/\r', u'http://blogs.nokia.com/pushn900/index.php/submit-an-idea/\r', u'http://blogs.nokia.com/pushn900/\r', u'http://wwwhni.uni-paderborn.de/eps/lehre/wintersemester-200910/grati/\r', u'http://hiimdaisy.livejournal.com/\r', u'http://sensorik.uni-paderborn.de/lehre/halbleiterbauelemente.html\r', u'http://nikhilmisal.com/2009/11/08/10-inspirational-interviews-for-designers/\r', u'http://daringfireball.net/\r', u'http://www.billkatz.com/\r', u'http://www.inkscape.org/\r', u'http://twitter.com/PUSHN900\r', u'http://blog.notdot.net/\r', u'http://blog.hawkstudios.net/\r', u'http://maemo.org/development/\r', u'http://phbenito.wordpress.com/2008/10/23/equations-in-google-docs/\r', u'http://lifehacker.com/5412886/61-free-apps-were-most-thankful-for\r', u'https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/CC0918EAD88CB09E87256F5C006FF9E6/$file/750gx-gl_errata_6Feb2008_pub.pdf\r', u'http://www.topcoder.com/tc?d1=tutorials&d2=alg_index&module=Static\r', u'http://www.giss.nasa.gov/tools/latex/ltx-2.html\r', u'http://de.wikipedia.org/wiki/Algorithmus_von_Edmonds_und_Karp\r', u'http://www.lingt.com\r', u'http://www.hardkernel.com/index.html\r', u'http://www.omnigroup.com/applications/omnigraffle/\r', u'http://code.google.com/intl/de-DE/android/adc/\r', u'http://www.zedshaw.com/essays/programmer_stats.html\r', u'http://googleforstudents.blogspot.com/2009/05/spreadsheet-gadgets-for-work-or-play.html\r', u'http://www.amazon.de/Operating-Systems-Internals-Design-Principles/dp/0136006329/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1244623596&sr=8-1\r', u'http://www.google.com/landing/studytips.html\r', u'http://www.amazon.de/Samsung-SyncMaster-Widescreen-Monitor-Kontrastverh%C3%A4ltnis/dp/B001ILME90/ref=sr_1_27?ie=UTF8&s=ce-de&qid=1249634818&sr=1-27\r', u'http://personalbrandingblog.com/\r', u'http://blog.moertel.com/pages/coders-guide-to-coffee\r', u'http://live.gnome.org/Dia\r', u'http://setik01.deviantart.com/\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ss-2007/datenstrukturen-und-algorithmen/\r', u'http://ki2009.uni-paderborn.de/\r', u'http://www.howstuffworks.com/\r', u'http://www.wolframalpha.com/\r', u'http://maemo.org/development/\r', u'http://graphics.stanford.edu/~seander/bithacks.html\r', u'http://de.wikipedia.org/wiki/Nihilismus\r', u'http://createordie.de/cod/news/Gruselige-Weihnachten-fuer-Alma-053087.html\r', u'http://code.google.com/p/fabricate/\r', u'http://www.billboard.com\r', u'http://briancray.com/2009/07/28/increase-form-usability-replace-form-button-submit/\r', u'http://en.wikipedia.org/wiki/Code_coverage\r', u'http://www.sqlite.org/testing.html\r', u'http://www.flickr.com/photos/lunchbreath/\r', u'http://jquery.com/\r', u'http://www.johndcook.com/R_language_for_programmers.html\r', u'http://www.shriiimp.com\r', u'http://alexgorbatchev.com/wiki/SyntaxHighlighter\r', u'http://ignorethecode.net/blog/\r', u'http://nextround.net/2009/08/28/15-durex-ads-so-clever-they-almost-make-you-want-to-buy-condoms/\r', u'http://www.bartleby.com/141/\r', u'http://www.date.uni-paderborn.de/index.php?id=430\r', u'http://www.onlinecollege.org/2009/10/19/100-incredible-open-lectures-for-math-geeks/\r', u'http://ooc-lang.org/\r', u'http://wwwhni.uni-paderborn.de/alg/lehre/ws-20092010/ebkfs/\r', u'http://wwwhni.uni-paderborn.de/eps/lehre/wintersemester-200910/grati/\r', u'http://twitter.com/PUSHN900\r', u'http://nikhilmisal.com/2009/11/08/10-inspirational-interviews-for-designers/\r', u'http://hiimdaisy.livejournal.com/\r', u'http://www.cs.uni-paderborn.de/?id=10640\r', u'http://sensorik.uni-paderborn.de/lehre/halbleiterbauelemente.html\r', u'http://dl.dropbox.com/u/427783/linkssss.txt', u'http://wiesl.pytalhost.com/', u'http://www.financeyourfreedom.com/blog/', u'http://fettrap.com/', u'http://www.threadless.com/', u'http://net.tutsplus.com/videos/screencasts/how-i-can-code-twice-as-fast-as-you/', u'http://graphite.wikidot.com/', u'http://shop.stylefile.de/', u'http://webstandard.kulando.de/', u'http://meltingpotmusicnews.blogspot.com/', u'http://blog.hiphop.de/Tuabloggtsicheinen/', u'http://dstruktiv.org/', u'http://www.head-fi.org/', u'http://rgruet.free.fr/', u'http://www.phonedog.com/', u'http://www.questioningsoftware.com/', u'http://pythonconquerstheuniverse.blogspot.com/', u'http://wxpython.org/tut-part1.php', u'http://en.wikipedia.org/wiki/Robustness_Principle', u'http://developer.yahoo.com/', u'http://www.bunny-comic.com/', u'http://www.laut.de/', u'http://www.google.com/chrome', u'http://lsf.upb.de/', u'http://www.entourage-business.de/', u'http://www.openpandora.de/', u'http://ascii.textfiles.com/archives/1717', u'http://www.youtube.de/', u'http://threepanelsoul.com/', u'http://applegeeks.com/', u'http://www.wallstreet-online.de/', u'http://www.math.upb.de/~robsy/lehre/MfI-III-2008/', u'http://www.cs.uni-paderborn.de/studium/pruefungswesen/pruefungstermine.html', u'http://www.cs.uni-paderborn.de/fachgebiete/fg-engels/lehre/ws0809/softwareentwurf/aktuelles.html', u'http://3x3rc1s3.appspot.com', u'http://autonomicon.blogspot.com/', u'http://www.cantstopwontstop.com/', u'http://www.openkomodo.com/', u'http://www.satine.org/', u'http://code.google.com/appengine/', u'http://www.huss-hodn.de/', u'http://huss-hodn.blogspot.com/', u'http://finance.yahoo.com/', u'http://informatik-upb.de/', u'http://www.naji-dev.de/projekte/mathematik-fur-informatiker-1-mitschriften/', u'http://effbot.org/', u'http://www.calnewport.com/blog/', u'http://www.nthcode.com/pubs/porting-android-to-a-new-device.html', u'http://code.activestate.com/', u'http://code.google.com/p/browsersec/wiki/Main', u'http://lukehutch.wordpress.com/android-stuff/', u'http://getwww.uni-paderborn.de/teaching/get', u'http://www.angstrom-distribution.org/', u'http://www2.math.uni-paderborn.de/ags/kunoth/group/drzevitz/mfi.html', u'http://www.studentenwerk-pb.de/gastronomie/speiseplaene/mensa.html?no_cache=1', u'http://www.klamottenshops.de/', u'http://www.geseke-online.de/', u'http://www.google.de/']
-
-    r = []
-
-    for u in l:
-        m = hashlib.md5()
-        m.update(u)
-        r.append((u, m.hexdigest(), 10 + int(m.hexdigest()[7], 16)%8))
-
-    """
-    
     return render_template('main.html', 
-                           user = user, 
+                           user = users.get_current_user(), 
                            logout_url = users.create_logout_url("/"), 
                            links = Link.all().order('-edited').fetch(500),
                            flashes = get_flashed_messages(),
                            start = time() - start);
-                           
+       
+def normalize_url(s):
+    s = s.strip()
+    if not isinstance(s, unicode):
+        s = unicode(s)
+    sw = (u'http://', u'https://')
+    if not s.startswith(sw):
+        s = u'http://' + s
+    print s
+    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
+    # remove empty path
+    if path == u'/':
+        path = u''
+    path = urllib.quote(path, '/%')
+    qs = urllib.quote_plus(qs, ':&=')
+    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))
+
+def link_info(url):
+    url = normalize_url(url)
+    result = urlfetch.fetch(url)
+    if result.status_code == 200:
+        try:
+            mime_type, encoding = result.headers['content-type'].split(';')
+        except:
+            mime_type = None
+        return Link(hash = hashlib.md5(url).hexdigest(),
+                    creator = users.get_current_user(),
+                    url = url,
+                    content_type = None)
+    else:
+        raise 'link info error'
+
 @app.route('/insert/link', methods=['POST'])
 def insert_link():
-    url = request.form['url'].strip()
     if not request.form['url']:
         flash("Oops you forgot to set a task name.")
         return redirect(url_for('index'))
+    try:
+        link_info(request.form['url']).put()
+        return redirect(url_for('index'))
+    except Exception, e:
+        return 'erororor' + '  ' + str(request.form['url']) + str(e)
+    
+@app.errorhandler(500)
+def internal_server_error(error):
+    return 'Internal Server Error<br>dog ' + str(error)
 
-    link = Link(hash = hashlib.md5(url).hexdigest(),
-                creator = users.get_current_user(),
-                url = url)
-    link.put()
-
-    return redirect(url_for('index'))
 
 # set the secret key.  keep this really secret:
 app.secret_key = 'the secret key'