Učím se 3


Jak už to tak bývá, člověk když dlouho nad něčím přemýšlí, tak přijde na to jak udělat věci tak nějak jinak 🙂 A já jsem měl o vánočních svátcích na přemýšlení času dost.

Postupem času, jak jsem víc a víc pracoval s Google App Enginem jsem se začal potýkat s problémy a omezeními. Mezi největší překážku bych řadil persistenci, která je i při využití JPA zbytečně kompilovaná, časově náročná a v mnoha případech složitější dotazy nelze provést. Pro práci s kombinací Grails a GAE neexistuje rozumná podpora ve vývojových prostředích. A hlavně, vývoj aplikací pro GAE je natolik svazující, že hrozba vendor lock-in vám neustále stojí za zády.

Takže pro teď sbohem GAE.

Když už nejsem svázaný řetězy, mohu celou architekturu navrhnout volněji a s větším ohledem na klienty a jejich možnosti. Už delší dobu se pohrávám s myšlenkou využití Amazon EC2. Zatím se to zdá být pro startup ideální prostředí a proto budu navrhovat hostování aplikace tímto směrem.

V hrubých nástinech se mi již v poznámkách rýsuje nová podoba eshopu. I nadále je ve hře oddělená architektura skládající se z klientského frontendu a serverového backendu postaveného na modelu Software-as-a-Service (SaaS).

Či-li hlavní myšlenkou je poskytovat klientům služby eshopu prostřednictvím REST servisů s bohatou nabídkou podporovaných formátů (JSON, XML, HTML), umožňující klientovy vývoj frontendu za použití jak klasických technologií (PHP, Java, ..), tak i čím dál populárnějších RIA technologií (AJAX) nebo jejich kombinací.

Na tento model lze aplikovat koncept „platíš co použiješ“, jehož nesporná výhoda je snížení nákladů klienta na provoz eshopu a uvolněné prostředky může využít pro svůj další rozvoj. Klientovi je ponechána plná volnost ve tvorbě frontendu a platí pouze za použité služby poskytované backendem.

Příště zabrousím do větších detailů.

Učím se 2


Cílem je vytvořit elektronický obchod skládajícího se ze zákaznického frontendu a administrátorského backendu.

K finální verzi se chci dopracovat po sérii verzí implementujících vždy malou skupinu vlastností. Pro jednoho je snesitelnější postupovat k cíli po malých krůčcích.

Seznam vlastností pro první verzi eShops Engine bude vypadat následovně.

Úkoly pro frontend:

  1. vytvoření základního designu
  2. při prvním načtení stránky, kdy není vybraná žádná kategorie sortimentu, se zobrazí prázdný seznam sortimentu, později se zobrazí seznam sortimentu skládající se z akčního a zlevněného zboží
  3. výběr kategorie sortimentu
  4. procházení sortimentu
    1. stránkování seznamu sortimentu vybrané kategorie
    2. třídění seznamu podle ceny, názvu
Návrh designu frontendu

Návrh základního designu frontendu

Navržený design není ničím převratný, ale pro začátek postačí. Později bude možno přidat různé fičury.

Úkoly pro backend:

  1. vytvoření základního designu pro administrační rozhraní v ExtJS
  2. administrace sortimentu
    1. vlastnost sortimentu je název, cena, popis a obrázek (plná velikost, náhled a miniatura)
    2. přidávání sortimentu
    3. odebírání sortimentu
    4. editace sortimentu
      1. editace názvu, popisu, ceny
      2. změna obrázku
  3. administrace stromové struktury kategorií sortimentu
    1. vlastností kategorie sortimentu je název a seznam sortimentu patřícího do dané kategorie (vazba)
    2. přehled stromové struktury kategorií zahrnující drag and drop (DND) organizaci stromové struktury
    3. přidávání kategorie
    4. odebírání kategorie
    5. přidávání a odebírání sortimentu do kategorie (DND)

Java způsob získání statistiky aplikace v App Engine


Jak jsem psal v předchozím příspěvku, pracoval jsem na knihovně, která stáhne z Google App Engine detaily kvót a limitů pro sledování aplikace.

Dnes jsem tuto knihovnu pojmenovanou jako gae-app-manager dokončil a udělal release ve verzi 0.0.1.

Můžete ji najít na http://sourceforge.net/projects/gae-app-manager/

Vydal jsem ji i jako utilitu pro použití v konzole (http://sourceforge.net/projects/gae-app-manager/files/0.0.1/net.sf.gae-app-manager-0.0.1-jar-with-dependencies.jar/download).

Návod pro kompilaci utility http://gae-app-manager.sourceforge.net/.

Enjoy.

$ java -jar net.sf.gae-app-manager-0.0.1-jar-with-dependencies.jar
Usage: java -jar gae-app-manager.jar [full gmail address] [account password] [appspot application name]

Ex.:
java -jar gae-app-manager.jar alois.belaska@gmail.com heslo eshopsengine

$ java -jar target/net.sf.gae-app-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar alois.belaska@gmail.com ****** eshopsengine
Quotas are reset every 24 hours. Next reset: 19 hours
REQUESTS_CPU_TIME[0.00/6.50 (0%) CPU hours,OKAY]
REQUESTS_COUNT[2/1333328 (0%),OKAY]
REQUESTS_OUTGOING_BANDWIDTH[0.00/1.00 (0%) GBytes,OKAY]
REQUESTS_INCOMING_BANDWIDTH[0.00/1.00 (0%) GBytes,OKAY]
REQUESTS_SECURE_COUNT[0/1333328 (0%),OKAY]
REQUESTS_SECURE_OUTGOING_BANDWIDTH[0.00/1.00 (0%) GBytes,OKAY]
REQUESTS_SECURE_INCOMING_BANDWIDTH[0.00/1.00 (0%) GBytes,OKAY]
STORAGE_DATASTORE_API_CALLS[0/10368000 (0%),OKAY]
STORAGE_BLOBSTORE_API_CALLS[0/10368000 (0%),OKAY]
STORAGE_TOTAL_STORED_DATA[0.00/1.00 (0%) GBytes,OKAY]
STORAGE_BLOBSTORE_STORED_DATA[0.00/1.00 (0%) GBytes,OKAY]
STORAGE_DATA_SENT_TO_DATASTORE_API[0.00/12.00 (0%) GBytes,OKAY]
STORAGE_DATA_RECEIVED_FROM_DATASTORE_API[0.00/116.00 (0%) GBytes,OKAY]
STORAGE_DATASTORE_CPU_TIME[0.00/62.11 (0%) CPU hours,OKAY]
MAIL_MAIL_API_CALLS[0/7000 (0%),OKAY]
MAIL_RECIPIENTS_EMAILED[0/2000 (0%),OKAY]
MAIL_ADMINS_EMAILED[0/5000 (0%),OKAY]
MAIL_MESSAGE_BODY_DATA_SENT[0.00/0.06 (0%) GBytes,OKAY]
MAIL_ATTACHMENTS_SENT[0/2000 (0%),OKAY]
MAIL_ATTACHMENT_DATA_SENT[0.00/0.10 (0%) GBytes,OKAY]
URLFETCH_API_CALLS[0/657084 (0%),OKAY]
URLFETCH_DATA_SENT[0.00/4.00 (0%) GBytes,OKAY]
URLFETCH_DATA_RECEIVED[0.00/4.00 (0%) GBytes,OKAY]
IMAGEMANIPULATION_API_CALLS[0/864000 (0%),OKAY]
IMAGEMANIPULATION_DATA_SENT_TO_API[0.00/1.00 (0%) GBytes,OKAY]
IMAGEMANIPULATION_DATA_RECEIVED_FROM_API[0.00/5.00 (0%) GBytes,OKAY]
IMAGEMANIPULATION_TRANSFORMATIONS_EXECUTED[0/2592000 (0%),OKAY]
MEMCACHE_API_CALLS[0/8640000 (0%),OKAY]
MEMCACHE_DATA_SENT_TO_API[0.00/1.00 (0%) GBytes,OKAY]
MEMCACHE_DATA_RECEIVED_FROM_API[0.00/5.00 (0%) GBytes,OKAY]
XMPP_API_CALLS[0/657084 (0%),OKAY]
XMPP_DATA_SENT[0.00/4.00 (0%) GBytes,OKAY]
XMPP_RECIPIENTS_MESSAGED[0/657084 (0%),OKAY]
XMPP_INVITATIONS_SENT[0/1000 (0%),OKAY]
TASKQUEUE_API_CALLS[0/100000 (0%),OKAY]
DEPLOYMENTS_COUNT[0/1000 (0%),OKAY]

Získání stránky se statistikou aplikace v App Engine přes curl


Při řešení problému dohledování aplikací běžících v Google App Engine jsem narazil na problém chybějícího API pro získání limitů a kvót.

Tak mě napadlo, skriptuj. Chvíli to trvalo, ale nakonec jsem se dopracoval k funkčnímu řešení, které se přihlásí přes google account do administračního rozhraní App Engine a stáhne stránku „Quota Details“ vybrané aplikace.

#!/bin/sh
#
email="vas.email@gmail.com"
password="vase heslo"
application="nazev vasi aplikace"
sourceid="$application-WatchDog"

auth=`curl -s https://www.google.com/accounts/ClientLogin -d "Email=$email" -d "Passwd=$password" -d accountType=GOOGLE -d "source=$sourceid" -d service="ah" | grep 'Auth' | cut -d '=' -f 2`

cookie=`mktemp /tmp/cookie.eshops.XXXX`

curl -s -L -c "$cookie" "https://appengine.google.com/_ah/login?&auth=$auth"

ACSID=`grep ACSID $cookie | sed -e "s/.*ACSID\t\(.*\)/\1/"`

rm -f "$cookie"

curl -s -H "Cookie: ACSID=$ACSID" "https://appengine.google.com/dashboard/quotadetails?&app_id=$application"

Další rozparsování této stránky už ponechám na vás.

Momentálně pracuju na totožné implementaci v Javě. Tam bude navíc i rozparsování údajů ze stažené stránky.

Uživatel s vypnutou podporou Javascript?


Četl sem pár článků o tom jaké procento uživatelů má vypnutou podporu Javascript. Házely čísly přibližne do 7%. Co za lidi vypne podporu Javascript? To by mě zajímalo jak to je.

Má smysl v dnešní době interakticního webu vůbec brát v potaz možnost vypnuté podpory Javascript v prohlížeči? Investovat nemalé množství času, a potažmo peněz, do podpory takové skupiny uživatelů?

Může si architekt webové aplikace dovolit ignorovat uživatele s vypnutým Javascriptem?

Myslím, že si to dovolit může. Podmínkou by ovšem mělo být upozornění uživatele na fakt, že pokud mají vypnutý Javascript nebude jim aplikace fungovat na 100%, pokud vůbec. A nabídnou jim řešení této situace.

A jaký je váš názor?

Učím se 1


Technologie se mění, mizí, dospívají a oblast dynamických programovacích jazyků začíná být pro zdravě líné programátory velice lákavou oblastí.

Nastal čas se naučit něco nového a jak se něco líp naučit, než to začít používat.

Napadlo mne vytvořit jednoduchou platformu eshopu. Přidanou hodnotou by měla být vlastnost backendu spravovat údaje libovolného počtu eshopů najednou, což by mělo snížit náklady na vytváření a údržbu dalších eshopů. Navíc umožní jednoduché rozšiřování funkčností dostupných jednotlivým eshopům.

Systém se bude skládat ze dvou základních částí a to frontendu a backendu.

Frontend představuje customizovatelné klientské rozhraní.

  • jednoduché XHTML+CSS ve spojení s javascript frameworkem Ext Core 3.0
  • může být umístěný na libovolném web hostingu

Backend je reprezentovaný administračním rozhraním a REST servisy zpřístupňující funkce eshopů frontendům.

  • REST servisy budou implementované v Grails
  • administrační rozhraní bude vytvořeno v ExtJS 3.0
  • bude z důvodu škálovatelnosti nasazen v Google App Engine

Příště podrobněji popíšu jednotlivé části plánovaného systému.

Už je to tady


Tak jsem nakonec i já podlehl trendům moderní doby a založil si blog .)

Co mě napadne to sem plácnu.

Teď například připravuji něco o Grails a Google App Engine.