Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Scukařina, žádná dřina - díl první: agilně!

Vývoj webu, to není jen naprogramování backendu a nakódování šablon. Omezit vývoj jen na čistě technické a technologické záležitosti by bylo hrubé zjednodušení problému vývojařiny. Pojďme se proto podívat podrobněji na vývoj jednoho takového projektu právě očima jeho vývojářů. Pojďte se podívat, jak vznikal Scuk.cz.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

V červenci 2010 byla spuštěna webová služba Scuk.cz — průvodce po místech, kde se dobře jí a nakupuje (viz článek na Lupě Příkladně odstartovaný startup Scuk hledá dobré jídlo a pití). Jeho vývojáři nám v několika článcích představí, jak tento portál vznikal, jak při vývoji postupovali, jaké problémy řešili a jaké technologie volili a proč. Prvním dílem tohoto miniseriálu se vrátíme na začátek roku a podíváme se, jakým stylem začali projekt vyvíjet.

Díl první - agilně

Našim primárním cílem bylo vytvořit komunitní nástroj, s jehož pomocí budeme schopni doporučovat veřejnosti kvalitní podniky. I když jsme měli naše představy podrobně sepsány a daly by se přímo z nich vytvořit wireframy, nakreslit grafika i naprogramovat samotná aplikace, domluvili jsme se hned na počátku jinak: vytvořme co nejrychleji prototyp, který bude sbírat data, a teprve podle charakteru získaných informací navrhněme finální podobu aplikace.

Po dobu jednoho měsíce se proto ze mě stal informační architekt, návrhář uživatelského rozhraní, kodér a programátor. Pokud vás zajímá, jak se mi tento cíl povedl splnit, přeji příjemné počteníčko.

Poznámka: Scuk byl vytvořen s pomocí webového frameworku Django. I když se teď v jeho niternostech nebudeme nijak vážněji pitvat, určitou základní představu byste mít měli <flame>(pro ty co neví — je to takový lepší ROR)</flame>. Nápomocen vám může být seriál na Zdrojáku, přeložený tutoriál nebo oficiální anglická dokumentace.

Papír a strouhátko

Tak pojďme na to. Vyzbrojen propiskou a pastelkami konvertuji klientovo zadání do inženýrštější podoby, s modely a vztahy mezi nimi:

První návrh modelů Scuku

Po ujasnění hrubých rysů aplikace se vrhám k počítači a začínám od základu — popisu podniku (modelu):

from django.db import models

class Shop(models.Model):
    PRICE_LEVELS = (
        (u'$',   u'$ levné'),
        (u'$$',  u'$$ střední třída'),
        (u'$$$', u'$$$ luxus'),
    )

    title       = models.CharField(u"Název podniku", max_length=200)
    slug        = models.SlugField(u"Webové jméno", max_length=100, unique=True)
    description = models.TextField(u"Popis")
    web         = models.URLField(u"Webové stránky", verify_exists=True, blank=True)
    address     = models.TextField("Adresa")
    level       = models.CharField(u"Cenový rozsah", max_length=3, choices=PRICE_LEVELS)
    delivery    = models.BooleanField(u"Eshop/Rozvoz", default=False)
    created     = models.DateTimeField(auto_now_add=True, editable=False)
    updated     = models.DateTimeField(auto_now=True, editable=False)

    class Meta:
        verbose_name = u"Podnik"
        verbose_name_plural = u"Podniky"
        ordering = ['title']

    def __unicode__(self):
        return self.title

Hned poté rozjíždím administraci (stačí 3 řádky kódu) a vrhám se na views:

from django.views.generic.list_detail import object_list, object_detail
from models import Shop

def index(request):
    return object_list(
        request, 
        queryset = Shop.objects.all(),
        template_name='shops/index.html'
    )

def detail(request, slug):
    return object_detail(
        request, 
        queryset= Shop.objects.all(),
        slug=slug,
        template_name='shops/detail.html'
    )

Žádná revoluce. Útržky kódu jako by z oka vypadly hromadám tutoriálů na internetu.

Nicméně ono to opravdu stačilo. Krátce po nastřelení základní funkčnosti jsme byli schopni vkládat první podniky a díky interakci s daty opracovávat Scuk do jemnějších podob.

Rychle s tím ven

Kdybyste se mě tehdy zeptali, jaká bude architektura webu, jakou podobu budou mít URL, co bude na homepage, odpovědí by vám ve všech případech bylo: "Nevím".

Pokud navrhujete nějaký systém, začněte od toho nejdůležitějšího a na podružné věci se vykašlete. Zrealizujte co nejdříve jakous-takous funkční verzi a vystavte ji na web. Čím dřív zákazník aplikaci uvidí a začne si s ní hrát, tím dřív se ozvou problémová místa. Další výhodou je, že než se klient s prototypem seznámí, vyřádí & vyjádří, získáváte čas na implementaci dalších funkčních částí.

Stav Scuku po třech dnech vývoje ilustrují následující screenshoty:

Katalog podniků. Filtry na pravé straně stránky byly funkční, v horní části obrazovky jsme plánovali umístit Google Maps.

Detail podniku zatím zobrazoval pouze základní informace. Recenze ani hodnotící systém ještě nebyly zprovozněny.

Administrační rozhraní pro správu podniků. Z 90 % sestaveno ze standardních prvků aplikace django.contrib.admin, zbytek tvoří drobné libůstky z aplikací třetích stran.

Cuketka už mohl pohodlně plnit databázi podniky a kontrolovat jejich podobu ve veřejné části webu.

Vpád ukázněných hord

Čtrnáctý lednový den vpouštíme do Scuku beta testery. Není důvod tento moment dále odkládat — v databázi máme stovku záznamů a funkcionalita kolem publikování a hodnocení recenzí je hotova:

U podniku se již zobrazují recenze, které je možné 'palcovat'. Přihlášeným uživatelům je k dispozici formulář pro sepsání vlastní recenze.

Postupně doděláváme registraci nových uživatelů a přidávání podniků. Na detailních stránkách se objevují Google Maps, rozhraní posouváme do použitelnější formy jednoduchými jQuery skripty. Brány Scuku se otevírají širší komunitě uživatelů. Lidé nám prostým používáním aplikace pomáhají odhalovat slabá místa, ozývají se s návrhy na vylepšení. Přepracováváme hodnotící systém, protože nejsme spokojeni s algoritmem, který doporučuje kvalitní podniky.

V polovině února byl prototyp dokončen a šest měsíců nám spolehlivě sloužil. Za tu dobu dvacítka recenzentů naplnila databázi pěti sty podniky a šesti stovkami recenzí. Designér získal dokonalou startovací pozici v podobě velkého množství dat, funkčního prototypu a připomínek od uživatelů. Ale to už je zase jiný příběh...

Vše již bylo vymyšleno

Nic z popsaného by ale nevzniklo, pokud bych na cestu vyrazil pouze v doprovodu svého oblíbeného programovacího jazyka.

Pokuste se v průběhu vývoje oprostit od naivní představy "to si přece naprgám sám za 10 minut". No nenaprgáte! Fakt ne...

Programátoři rádi zapomínají na to, že realizace konkrétní funkčnosti je pouze jednou stranou mince. Jakmile se začne něco kazit, oceníte hotové testy. Pokud se ke kódu vrátíte po půl roce, rádi se začtete do existující dokumentace. A jak je možné, že uvnitř vašeho algoritmu byla chyba, které si měsíce nikdo nevšiml? Je to jednoduché: vidělo ji málo očí. Přesněji, pouze ty vaše. Na podobné souvislosti se v oněch deseti minutách tak snadno zapomíná (máte přece kopu práce s kódem, nerušit!)

Rozumnější je věnovat totožný čas hledáním hotových řešení a pročítáním publikovaných zkušeností ostatních vývojářů. Stoprocentně naleznete kvanta knihoven (django-registration, django-tagging), frameworků (Django, jQuery, Blueprint CSS) či služeb (Google maps, UserVoice, Tumblr, Basecamp, GitHub), díky kterým bude vaše aplikace dokonalejší a... rychleji hotova!

A to je jako všechno?

Není (pst, tenhle díl jsme záměrně sušili, protože je spíš pro vaše šéfy, víte?). Příště dojde na ryzí Django praxi. Máme v lednici naložena brilatní soustíčka, které vás nakopnou k efektivní práci, poradí vám, co platí na údržbáře od databází, a dojde taky na nějaké jedy. Na bugy jako.

Michal Valoušek

Michal Valoušek

Fešák z podhůří Beskyd. Ale taky webový vývojář, Djangonaut, otec a manžel.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

Nádhera...
Martin Kubát 18. 8. 2010 08:17
Nový
Nejde mi do hlavy
srigi . 18. 8. 2010 08:41
Nový
├ 
Re: Nejde mi do hlavy
Martin Malý 18. 8. 2010 08:44
Nový
│
└ 
Re: Nejde mi do hlavy
srigi . 18. 8. 2010 09:02
Nový
│
 
└ 
Re: Nejde mi do hlavy
Martin Malý 18. 8. 2010 09:08
Nový
│
 
 
└ 
Re: Nejde mi do hlavy
Michala ze Scuku 18. 8. 2010 09:25
Nový
│
 
 
 
└ 
Re: Nejde mi do hlavy
Martin Malý 18. 8. 2010 09:26
Nový
└ 
Re: Nejde mi do hlavy
Michal Valoušek 18. 8. 2010 08:57
Nový
Technická poznámka k views
Petr Praus 18. 8. 2010 15:51
Nový
└ 
Re: Technická poznámka k views
Michal Valoušek 18. 8. 2010 16:04
Nový
 
└ 
Re: Technická poznámka k views
Petr Praus 19. 8. 2010 09:26
Nový
Chyba na stránkách
. 18. 8. 2010 16:59
Nový
└ 
Re: Chyba na stránkách
Michal Valoušek 18. 8. 2010 18:27
Nový
Scuku, Scuku, kam kráčíš?
veena 19. 8. 2010 08:53
Nový
├ 
Re: Scuku, Scuku, kam kráčíš?
veena 19. 8. 2010 08:54
Nový
│
└ 
Re: Scuku, Scuku, kam kráčíš?
David Grudl 19. 8. 2010 19:14
Nový
└ 
Re: Scuku, Scuku, kam kráčíš?
cuketka / za Scuk tým 19. 8. 2010 14:36
Nový
 
└ 
Re: Scuku, Scuku, kam kráčíš?
Michal Novák 19. 8. 2010 19:21
Nový
 
 
└ 
Re: Scuku, Scuku, kam kráčíš?
cuketka / za Scuk tým 20. 8. 2010 09:08
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem