Archives:
- November 2011
- Avgust 2011
- Junij 2011
- Maj 2011
- April 2011
- Januar 2011
- December 2010
- November 2010
- Avgust 2010
- Julij 2010
- Junij 2010
- Maj 2010
- Februar 2010
- Januar 2010
- December 2009
- November 2009
- September 2009
- Julij 2009
- Junij 2009
- April 2009
- Marec 2009
- Februar 2009
- November 2008
- Oktober 2008
- September 2008
- Avgust 2008
- Julij 2008
- Junij 2008
- Maj 2008
- April 2008
- Marec 2008
- Januar 2008
- December 2007
- November 2007
- Oktober 2007
- September 2007
- Avgust 2007
- Julij 2007
- Junij 2007
- Maj 2007
- April 2007
- Marec 2007
- Februar 2007
- Januar 2007
- December 2006
- November 2006
- Oktober 2006
- September 2006
- Avgust 2006
- Julij 2006
- Junij 2006
- Maj 2006
- April 2006
- Marec 2006
- Februar 2006
- Januar 2006
- December 2005
- November 2005
- Oktober 2005
- September 2005
- Avgust 2005
- Julij 2005
Meta:
Categories:
- blunt-hate
- comp
- debian
- django
- dogbert
- dovhcajt
- faks
- kiberpipa
- kitchen sink
- kultura
- linux
- ljubljana
- mediji
- opendata
- pootle
- python
- slovenija
- zanimivosti
Recent Posts:
- Prosti podatki za zabavo: 22. Liffe
- Kako pravilno uporabljati Supervizor
- Trgovanje z Burmo
- Avtoprevozniški hlapci
- Ne tolerirajte, da vam pijanci narekujejo dejanja
- Kolesarska zmaga: Bicike(LJ) in Android aplikacija
- Zakaj mora vsak operater kakršnega koli omrežja javno objaviti pregled nad stanjem omrežja
- 598
- Naj poslancem krava crkne
- Malo delo: da ali ne?
Blogroll:
Zemljemerske zapuščine
Posted on Maj 12th, 2010 in django, dovhcajt, python, slovenija |
Geodetska uprava Republike Slovenije daje na uporabo nekatere “brezplačne” geodetske podatke. Uporaba ni čisto brez omejitev, ampak so pa na voljo takoj, brez križev z birokracijo. Tudi čisto brezplačni niso, vsaj ne za komercialno rabo – od vas bojo podatki zahtevali najmanj to, da nejasne pogoje uporabe, v katerih je nepooblaščena uporaba celo zagrožena z globo, pregleda pravniško oko.
Če prepustimo pravniške zadeve pravnikom, nam ostane še tehnični del, ki pa v sebi skriva prav toliko nejasnosti. Geodetski podatki, ki so na voljo, so namreč zapisani v Slovenskem prostorskem referenčnem sistemu, bodisi D48/GK ali D96/TM. Spletne aplikacije po večini uporabljajo WGS84, ki je uporaben za celotno Zemljo, a je zato na lokalnem nivoju nekoliko manj natančen. WGS84 sicer uporablja tudi standard GPS, ki ga poznate iz raznih garminov in nekoliko dražjih telefonov. Za pretvarjanje iz enega prostorskega referenčnega sistema v drugega sicer obstajajo “recepti”, ki v sebi skrivajo 7 parametrov, s katerimi opišemo transformacije.

Transformacija iz D48/GK - neuspešno
Ob uporabi napačnih vrednosti parametrov se seveda transformacija izvede narobe, kot rezultat pa so potem meje občine ali države na zemljevidu, ko jih primerjaš z npr. Google maps, zamaknjene. Seveda “ročno” popravljanje odpade: če na eni strani države še ujameš pravo koordinato, se ti na drugem koncu sfiži. Zato je potrebno poznati pravih 7 vrednosti parametrov. No, za te transformacije sicer obstaja register, ki ga vzdržuje European Petroleum Survey Group – EPSG. V tem registru je zbrano malo morje informacij o prostorskih referenčnih sistemih, vendar se izkaže, da je točnost teh podatkov včasih vprašljiva.
V starih časih, preden so “izumili” Greenwich, oz. se dogovorili, da je nulti poldnevnik Greenwich, so za nulti poldnevnik jemali marsikaj. Nekateri “veliki imperiji” so vzeli sedež imperija – Italija je vzela Rim, Nemčija Berlin, Francija Pariz, Anglija pa London, oz. natančneje del Londona, poimenovan Greenwich. Kasneje je Greenwich – predvsem zaradi svoje razširjenosti za pomorsko navigacijo – postal tudi mednarodni referenčni poldnevnik.

Transformacija iz D48/GK - zmaga!
No, ker so bili v uporabi različni poldnevniki, se je moralo izvesti tudi prehod na novi standard – Greenwich. Za Slovenijo, takrat sicer Avstro-Ogrsko, je geodetske podatke urejal Militärgeographisches institut oz. MGI. Za referenčni poldnevnik je MGI vzel otok Hierro, ki je najzahodnejši del “Starega sveta”, ki so ga poznali do Kolumbovega podviga. Po razpadu Avstro-Ogrske je na njenem območju nastalo več držav, ki so nasledile dediščino MGI. Te države so kasneje tudi izvedle prehod na Greenwich kot referenčni poldnevnik, a pri tem je prišlo do neskladja – Avstrija je za poldnevnik Hierro vzela, da leži na 17° 40′ 00″ zahodno, medtem ko sta Jugoslavija in Madžarska privzeli, da je Hierro na 17° 39′ 46” zahodno. Pri tem je nastalo za 14” razlike, kar je ravno okrog 300m in dovolj, da meje območja na Google maps izgledajo popolnoma napačno.
Zakaj je do te “napake” prišlo in kdo je kriv je zdaj že vseeno, važno pa je, da smo dobili prave parametre, tako da zdaj transformacija deluje, da so podatki v WGS84 in da se projekcije pokrijejo. No, sicer še vedno nisem stoodstotno prepričan, da je to prava transformacija, ampak sodeč po odstopanjih je kar blizu. Za transformacijo sem vzel WKT za SRS 3787, zraven pa pri 6. parametru odštel 14 (za 14 sekund), da se odstopanje popravi.
Django and coverage.py, the DRY way
Posted on September 25th, 2009 in django, python |
So you want to use Ned Batchelder’s coverage.py and don’t want to install another Django app, don’t want to patch Django files or you just can’t wait for bug #4501 to be resolved.
Me too.
So I took a couple of minutes and put together this very very DRY-ish djangocoverage module, which binds together coverage.py with Django. It is based on a bit aged Siddharta Govindaraj’s snippet. Initially I intended to monkeypatch Django from manage.py, but finding out about TEST_RUNNER setting, I made a saner decision and provided a test runner.
import coverage def coverage_decorator(func, omit_prefixes=None): "Decorator for Django's built in test runner" def _inner_coverage(*args, **kwargs): from django.conf import settings c = coverage.coverage() c.erase() c.start() retval = func(*args, **kwargs) c.stop() coverage_dir = getattr(settings, 'COVERAGE_DIR', './coverage_results') c.html_report(directory=coverage_dir, omit_prefixes=omit_prefixes) return retval return _inner_coverage def coverage_test_runner(*args, **kwargs): "Test runner you can put in your application's settings file" from django.test import simple return coverage_decorator(simple.run_tests)(*args, **kwargs)
What you want to do is put djangocoverage.py somewhere where Python can find it and put “TEST_RUNNER=’djangocoverage.coverage_test_runner’” line into your settings.py.
Then, running tests is the same as it was. If you’re already using custom test runner, then you can easily integrate coverage.py using decorator, if you haven’t yet been using coverage.py. HTML report is written out in ./coverage_report, and you can also adjust that via COVERAGE_DIR setting. Hope you find it helpful.
Slovenski Django “localflavor”
Posted on September 18th, 2009 in django, linux, python, slovenija |

- Image by Surgo via Flickr
Že dlje časa sem imel v mislih, da bi zbral skupaj drobce kode, ki sem jih potreboval za manjše projekte v Djangu, jih uredil in dal ven kot Slovenski localflavor modul za Django framework. No, ta čas je končno tu, saj sem zaradi prejšnjega blogposta potreboval spisat algoritem, ki zna preverit, če je EMŠO pravilna, za to pa sem uporabil kar Django forms.
Koda se nahaja na GitHubu, projektu pa je ime django-localflavor-sl. Vsake toliko časa bom pogledal, če je kak “fork” in kodo združil.
Django newforms
Posted on September 3rd, 2007 in django, python |
Some time ago, when me and Jure were hacking Prevoz a bit, there was a question of handling a complex form. One could split a form into smaller subforms and validate each separately, use a SuperForm or override a lengthy method, that spits out HTML.
We eventually figured that subclassing did just the thing we needed and did the “happy-djangoinan-dance”.
Django in FastCGI
Posted on April 27th, 2007 in django, linux, python |
Ko folk razmišlja o skupnem gostovanju, je včasih težko obiti dejstvo, da je Python razmeroma požrešen, kar se tiče porabe RAM-a. Na Webfactionu je en ukaz, s katerim lahko izračunamo, koliko RAMa posamezen program uporablja. Sam sem jo nekoliko spremenil, da prikazuje samo Python:
ps -u username -o pid,rss,command | grep -v awk | \\
awk '/python/ {print $0 ; sum+=$2} END {print "Total", sum}'
Django lahko prek FastCGI poganjamo na dva načina, z večimi nitmi in z večimi procesi. Če ga poganjamo z večimi procesi (prefork), je izpis zgornjega ukaza sledeč:
6646 4320 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 6647 3788 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 6648 3800 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 6649 9604 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 6650 9608 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 6651 8512 python prevoz/manage.py runfcgi method=prefork host=127.0.0.1 port=34001 Total 39632
Če ga poganjamo večnitno (threaded) pa sledeč:
6747 10236 python prevoz/manage.py runfcgi method=threaded host=127.0.0.1 port=34001 Total 10236
Pri tem gre omeniti, da sem pred merjenjem trikrat pognal ukaz httrack 127.0.0.1 -c10, ki prezrcali celotno stran, projekt, ki sem ga uporabil za testiranje, pa je bil razmeroma enostaven. Django pa je bil na FastCGI priklenjen prek flup r2347 in LigHTTPd spletnega strežnika.
Z večnitnim načinom lahko tako prihranimo precej RAM-a, velja pa omeniti, da Python v osnovi ni večniten in se bo pravzaprav naenkrat obravnaval le en zahtevek, čeprav bo vmes prihajalo do preklopov med nitmi.



![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=ccb793bd-e725-4120-ae10-923c6c083b98)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=fa942b4d-efea-4369-9a6e-3e3279957b04)