Archive for the ‘web’ Category

Django: pluralize

Naj­waż­niej­szą rze­czą, jaką powin­ni­ście wie­dzieć na temat fil­tra plu­ra­lize jest ta, żeby go nigdy nie uży­wać. Nigdy. Jego ist­nie­nie wynika z leni­stwa ludzi, któ­rzy nigdy w życiu nie przy­go­to­wy­wali apli­ka­cji do tłu­ma­cze­nia. Jeśli nie wyra­zi­łem się dość jasno, uży­wa­nie fil­tra plu­ra­lize wywoła u cie­bie raka, ste­reo­po­roże i zatwar­dze­nie roz­siane.
Jak­kol­wiek spryt­nie by nie wyglą­dał, ten kod […]

Django: direct_to_template

Nie wiem, czemu nie­któ­rzy tak upar­cie korzy­stają z funk­cji render_to_response, by za każ­dym razem prze­ka­zać do niej ręcz­nie stwo­rzony obiekt kon­tek­stu. Zresztą, sami oceń­cie, która wer­sja jest ładniejsza:

from django.shortcuts import render_to_response
from django.template import RequestContext

def foo(request):
# …
return render_to_response(‘foo.html’, {‘bar’: baz},
[…]

O fontach raz jeszcze, czyli wielkość się liczy

Z powodu wystę­pu­ją­cego dzi­siaj u mnie prze­si­le­nia kataru, zosta­łem zmu­szony (dosłow­nie ze łzami w oczach) do zmiany wiel­ko­ści fon­tów z 10 na 12 punk­tów. Póź­niej wspo­mnia­łem o tym kilku oso­bom, doda­jąc, że nie roz­róż­niam liter poni­żej 16 pik­seli, co w dwóch przy­pad­kach wywo­łało kon­ster­na­cję. Punkty i pik­sele to nie to samo.
Punkt jest jed­nostką typo­gra­ficzną pocho­dzącą ze […]

Django: szybszy SQLite do testów

Domyślna kon­fi­gu­ra­cja SQLite każe mu syn­chro­ni­zo­wać plik bazy po każ­dej ope­ra­cji. W środo­wi­skach testo­wych nie musimy się mar­twić o spój­ność danych w wypadku awa­rii, poni­żej zamiesz­czam więc bac­kend pozba­wiony zbęd­nego narzutu:

from django.db.backends.sqlite3.base import (
Data­ba­seW­rap­per as Sqlite3Wrapper,
Data­ba­se­Er­ror,
Inte­gri­ty­Er­ror,
Data­ba­se­Fe­atu­res,
[…]

Styczniowe zmiany w Centrum Faktur

Dzi­siaj — dokład­nie mie­siąc po ostat­niej aktu­ali­za­cji — udo­stęp­ni­li­śmy kolejną aktu­ali­za­cję Cen­trum­Fak­tur. Mię­dzy innymi poja­wiły się fak­tury zalicz­kowe, o które część z was pro­siła.
Wię­cej infor­ma­cji na blogu Miru­mee. A teraz, jako że nadal nie jestem wła­ści­cie­lem Cen­trum­Fak­tur, czas usiąść do kolej­nego projektu.

Wstęp do kultury: nie drzyj mordy

Jest sobie mie­lonka i jest mie­lonka. Rzadko tra­fia mi się spam tak bez­czelny, jak ten, który otrzy­ma­łem już po raz drugi w ciągu ośmiu godzin. W pierw­szym zda­niu czy­tam:
PROSZĘ O PRZEKAZANIE NINIEJSZEGO LISTU OSOBIE DECYDUJĄCEJ W PAŃSTWA FIRMIE O SPOSOBACH POZYSKIWANIA KLIENTÓW DLA WASZEJ AGENCJI

To ci nowa kul­tura — nawet dziwka powie dzień dobry zanim […]

Logika rozmyta, czyli o godnym przyjmowaniu krytyki

Disc­la­imer: Na wstę­pie chcia­łem ostrzec, że tekst doty­czy moich kon­tak­tów z InFak­tem, który to ser­wis z racji umowy wią­żą­cej mnie z Miru­mee nie­któ­rzy mogą uznać za moją kon­ku­ren­cję.
Cenimy InFakt (i mówiąc my nie mam na myśli ja, wła­ści­ciel Cen­trum­Fak­tur, do czego jesz­cze doj­dziemy). Mamy rów­nież pełną świa­do­mość tego, że sporo firm wła­śnie ich wybrało do […]

Nowy serwis: CentrumFaktur.pl

Jakiś czas temu pyta­łem na Bli­pie, czy ist­nieje ser­wis, który potrafi wysta­wiać fak­tury w obcej walu­cie w spo­sób zgodny z pra­wem. Na przy­kład InFakt wbrew prawu nie prze­li­cza wszyst­kich kwot VAT na zło­tówki.
Widać naj­le­piej zro­bić wszystko samemu. Odda­li­śmy się tedy pasjo­nu­ją­cej lek­tu­rze prze­pi­sów doty­czą­cych podatku VAT. Pole­cam szcze­rze tę formę roz­rywki, zwłasz­cza porów­ny­wa­nie poszcze­gól­nych przepisów […]

Django: alternatywa dla Form.as_table()

Domyślna struk­tura gene­ro­wana przez metodę django.forms.Form.as_table pozo­sta­wia nieco do życze­nia. Stąd nieco wygod­niej­sza i nie­in­wa­zyjna wer­sja w postaci fil­tra (zasta­na­wiam się, czemu ta wbu­do­wana w Django ma postać metody):

from django.template.loader import render_to_string

@register.filter
def as_table(form):
return render_to_string(‘form_as_table.html’, {‘form’: form})

Do kom­pletu przy­kła­dowy szablon:

{% for f in form %}
{% if f.errors %}
<tr […]

Django: Decimal i simplejson

Moduł django.utils.simplejson nie obsłu­guje domyśl­nie typu decimal.Decimal. Na szczę­ście da się podać wła­sny mecha­nizm kodo­wa­nia nieznanych typów:

import deci­mal

def json_encoder(value):
if isinstance(value, decimal.Decimal):
return float(str(value))
else:
raise TypeError

from django.utils import simplejson

print simplejson.dumps([decimal.Decimal(‘1.2′)], default=json_encoder)

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland
This work by Patryk Zawadzki is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.