Etikettarkiv: python

Team Slumptal

Jag, Emil Stenström samt Joakim Ekberg stod för Team Slumptal under Codemocracy där ambitionen var att bygga en tjänst där du som individ kan se hur politiska beslut påverkar din omgivning. Detta genom att försöka geografiskt (geotagga) märka upp politiska beslut och placera ut dem på en karta (eller visa genom en augmented reality vy).

Tyvärr så blev jag tvungen att avvika tidigare men Emil och Jocke fortsatte att programmera på idéen. Språkvalet var Python och GitHub användes för versionshantering. Än finns ingen publik version men kommer kanske snart.

Grymmaste projektet Codemocracy var Kollektivt.se av Popdevelop som visar bussar i realtid på en karta.

Presentation av projektet Lokalpolitik:

IDG har även skrivit om eventet samt Dagens Industri (tryck).

Var oberoende

I min strävan efter att bygga bra och trevliga tjänster på webben så har jag alltid försökt att hålla mig oberoende. Och vad menar jag med oberoende då? Jo att inte bli beroende av en enda kompontent/företag etc samt alltid ha en backup-plan.

Låt mig ge några exempel:

Förlita dig inte på en enda Internetleverantör

Ingen internetleverantör är att lita på. Alla har sina fel och brister så därför kommer det förmodligen bli problem någon gång, se då till att ha en backup-plan. Exempelvis så använder jag alltid minst 2 leverantörer av server-kapacitet. Minst 2 när det gäller DNS osv

Förlita dig inte på ett enda programmerinsspråk

PHP är helt ok och får jobbet gjort snabbt men är suboptimalt om du vill skriva högpresterande trådade applikationer. Inte säkert att Python som jag gillar heller klarar av jobbet och då föredrar jag C.

Diversera dina inkomster

Se till att inte förlita dig på en enda affiliate, exempelvis Google Adsense. En vacker dag så kanske de vänder dig ryggen utan anledning och då står du där med byxorna nere.

Så slutordet i detta inlägg:

Håll dig oberende och ha alltid minst en backup-plan om något skulle gå fel för det kommer att hända något förr eller senare.

Hur håller du dig oberoende?

Fyra sätt att göra DNS-frågor i Python

Det finns ett antal moduler som är mer eller mindre användbara för att göra DNS-frågor med. Några av dessa redovisas här:

1. adns

adns är ett gammalt och välkänt supersnabbt C-bibliotek och står för ”GNU asynchronous DNS resolver library” och nu finns det även till Python och fungerar enligt följande:

import adns

c=adns.init()

Och sedan för att ställa en fråga om vad www.google.com har för IP:

c.synchronous("www.google.com", adns.rr.A)

(0, 'www.l.google.com', 1167604334, ('216.239.37.99', '216.239.37.104'))

2. dnslook

Baseras på D. J. Bernstein’s djbdns paket och används enligt följande:

import dnslook

dnslook.ip4("cr.yp.to")('131.193.178.181',)
('131.193.178.181',)

3. PyDNS

Eventuellt nedlagt?

4. dnspython

dnspython är den modul som jag använder i dagsläget och verkar vara kontinuerligt underhållen:

dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0.

Används enligt följande:

import dns.resolver>>> answers = dns.resolver.query("www.google.com", dns.rdatatype.A)

for rdata in answers:

print rdata

216.239.59.147

216.239.59.99

216.239.59.103

216.239.59.104

Normalisering av URL:er i Python

Hittade en trevlig modul till Python för att normalisera URL:er skriven av Mark Nottingham. Ungefär såhär fixar urlnorm till dina URL’er:

	'/foo/bar/.':                ->    '/foo/bar/',
        '/foo/bar/./':               ->    '/foo/bar/',
        '/foo/bar/..':               ->    '/foo/',
        '/foo/bar/../':              ->    '/foo/',
        '/foo/bar/../baz':           ->    '/foo/baz',

Ja ni fattar. Trevligt va? För att använda urlnorm .py gör såhär:

import urlnorm

urls = urlnorm.norms(url)

Modulen hittar du här.

Pythons nya with-statement

I nuvarande version av Python så finns det en liten försmak av en intressant sak som kommer att komma, nämligen ett nytt sätt att hantera fel (exceptions) med hjälp av ett with-statement. Det kan exempelvis se ut enligt följande:

with open('/etc/motd', 'r') as f:
	for line in f:
		gör nått med line

Istället som för tidigare

try:
	f = open('/etc/motd', 'r')
except:
	blahonga fel..
kod

Smidigt va? Du behöver inte heller bry dig om att stänga filen (om du lyckats öppna den). Om du vill använda detta i Python 2.5 så måste du inkludera följande rad bland dina import:s för att det skall funka:

from __future__ import with_statement

Tyvärr så är det inte alla objekt som stödjer detta ännu men för att se vilka objekt som stödjer with så kan du använda dir(objekt) och titta efter __enter__ och __exit__

Mer läsning finnes här:

Varför jag gillar Python

Perl är ett av de språk som jag behärskat längst under min livslängd men på senare tid så har min kärlek för python ökat mer och mer. Detta beror på flera anledningar men främst för att det börjar komma otroligt många moduler som går att använda för att göra undervärk. Exempel på dessa är:

Senså finns det ju såklart massor av andra fördelar, trådningen är superfin och mycket inbyggda bibliotek för diverse prylar återfinns (urllib2).