Kategoriarkiv: python

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?

Bloggkoll, värderingar, brevspam, fonter och slumptal

Markus Jalmerot har gjort en trevlig och grundlig utvärdering av två svenska modebloggare och en vacker dag så kanske jag tar och anammar vissa av dessa parametrar till BloggVärde.se:s värdering. IDG skriver även om detta.

**

Mattias Swenson som enligt mig är en av Sveriges yngsta och hetaste entreprenörer som bl.a står bakom forumet Swedish Startups berättar att BloggKoll nu finns en en alldeles ny fräsch version. Även Christian Rudolf på Disruptive har bloggat om detta.

**

Dan Nilsson slutar aldrig att förvånas och tar till nya guerilla marknadsföringsmetoder för att få ut budskapet om sin nya E-butik RoligaPrylar.se

**

Antalet bloggar som blivit värderade på BloggVärde.se överstiger när som helst 10 000! Det är helt sjukt vilken genomslagskraft sajten har fått. Testade att göra några slagningar i databasen och kom fram till att ungefär 300 svenskar skulle kunna blogga på heltid (räknat på medellön 222 520/år). Men som vanligt så ska man nog inte lita allt för mycket på mina hemmatränade apor!

**

Gillar du Naive Bayes, NGram analys eller kanske bygga dataminingplattformar tillsammans med Marcus Herou som är en av Sveriges främsta utvecklare? Då är Tailsweep rätt ställe för dig.

**

Read Write Web skriver att FontStruct är en ny webbtjänst som låter dig bygga egna fonter direkt på webben och sedan dela med dig av dessa. Jag gillar’t! Är du en riktig design nörd så kan du även gå direkt till överkursen och ladda hem FontForge:

An outline font editor that lets you create your own postscript, truetype, opentype, cid-keyed, multi-master, cff, svg and bitmap (bdf, FON, NFNT) fonts, or edit existing ones. Also lets you convert one format to another. FontForge has support for many macintosh font formats.

**

Lita inte för mycket på dina slumptal, speciellt inte om du använder OpenSSL tillsammans med Debian, Ubuntu eller Knoppix. Luciano Bello har nämligen hittat en brist som gör det möjligt att förutse genererat nyckelmaterial. Testa om du har dåliga nycklar med följande program. Beskrivning:

# Debian/OpenSSL Weak Key Detector
#
# Written by Florian Weimer <[email protected]>, with blacklist data
# from Kees Cook, Peter Palfrader and James Strandboge.

Update: Detta gäller så klart även SSH-nycklar. Se metasploit.com/users/hdm/tools/debian-openssl

When creating a new OpenSSH key, there are only 32,767 possible outcomes for a given architecture, key size, and key type.

**

Du glömmer väl inte heller att gå på det event som Swedish Startups samt Booli håller i? Jag kan tyvärr inte närvara.

**

Puust, så här mycket text som inte varit kod har jag inte skrivit på länge.

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:

Vill du ha en snabb checksumma i Python?

Skall du jämföra saker i Python så kan det vara bra att ha en snabb men ej så säker checksum-algoritm, och det finns ju några stycken att välja på. Hittade nedan en jämförelse mellan hash(), zlib.adler32, zlib.crc32 samt md5 som var intressant:

A 0.00166934132576
B 0.00266071277506
C 0.000866203977351
D 0.00112253580338

where…

def A(payload):
….return hash(payload)

def B(payload):
….return md5.new(payload).digest()

def C(payload):
….return zlib.adler32(payload)

def D(payload):
….return zlib.crc32(payload)

Källa.

Observera att hash() returnerar olika beroende på 64/32-bitarsplattformar.

Bloggz snart ute ur Betastadiet

Det är nu cirka 4 månader sedan jag öppnade bloggsökmotorn Bloggz för allmän betatestning och buggarna har varit många men nu börjar äntligen listan med buggfixar att bli någorlunda lättarbetad.

Idag så fixade jag till så att trådhanteringen i python-programmet som sköter import av blogg-feeds fungerar någorlunda bättre men tyvärr så dras jag med massor av minnesläckage så jag måste ha en funktion som håller koll på hur mycket minne som utnyttjas och används för mycket minne så avslutas programmet och OS’et tar hand och frigör minne och startar sedan importern igen. Inte helt snyggt men det funkar tillsvidare.

Bra läsning om trådning i python: http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf 

Annat på min Bloggz buggfix-lista:

  • Fixa så att checksum-algoritmen returnerar samma värde på 32- och 64-bitars plattformar. Dumma python
  • Fixa så att highlight-funktionen inte plockar bort text.
  • Rensa upp databasen så att den går att arbeta med igen

Min lista över nya funktioner är 100 ggr längre..