středa 4. března 2009

JavaScript a closures

Dnes jsem narazil na zajímavý problém s uzávěry (closures) v JavaScriptu:

var b = new Array();
for (var x=0; x<4; x++) {
 b[x] = function() {
  alert(x);
 };
}
b[2]();

Pokud laskavý čtenář předpokládá, že volání vypíše "2", je stejně naivní jako já. Kód vypisuje pro všechny volání "4".
Problém spočívá v tom, že při volání volání uzávěru se (pro nás Java programátory naprosto nepochopitelně :) použije zásobník, který existoval při vytvoření uzávěru.
Jak z toho ven radí Otec Fura: já jsem použil způsob, který použitím Data Transfer Objectu vynutí vykopírování proměnné z lokálního kontextu:

var c = new Array();
for (var x=0; x<4; x++) {
 var Dto = function() {
  var value = x;
  this.getValue = function() { 
   alert(value);
  };
 }
 c[x] = new Dto().getValue;
}
c[2]();

pondělí 16. února 2009

ČSSD Proti krizi


V rámci svého projektu "Do třiceti vyzkoušet všechno" jsem dnes vyrazil na  přednášku ČSSD Proti krizi. Velký sál B. Bakaly se nedlouho po začátku zcela zaplnil, přičemž alespoň tři čtvrtiny publika tvořili starší lidé.

Na scénu nastoupili Paroubek, Hašek a Škromach, Havel dorazil později.

Slova se ujímá Paroubek: vláda zaspala, NERV je skupina provládních lobistu a na kresleni současné situace používá nejčernější barvy, jako by nečetl výzkumy průzkumu, který říká, že kritika naprosto všeho se začíná lidem přejídat.
"Změny na ministerstvech po výměnách ministrů mi připomínají třicetiletou válku". (Ještěže nemusel komentovat personální politiku svého středočeského hejtmana.
"Progresivní zdanění je normální."
Od investičních pobídek teď ČSSD chce dokonce podporovat malé a střední podnikání, ale nesmí moc vydělávat, protože návrhy ČSSD budou financovat hlavně bohatí.
"Pro vysoké ceny energií není důvod. To je potřeba změnit!"
"Za klesající korunu může vláda!"
"ČSSD chce podporovat očana, ne podnikatele a banky jako vláda."

Nastupuje Škromach. Začíná kritikou navrhované reformy důchodového systému. Stávající systém podle něj přežil krize a války. "Snižovat sociální pojištění je špatné."
"Zvýšení podpory v nezaměstnanosti na 80% platu znamená rychlejší přestup do nového zaměstnání při ztrátě práce."
"Všechno nájemní bydlení má být regulováno. Na jakoukoli formu bydlení (nájemní, družstevní, vlastní) má být sociální příspěvek."
Škromacha jsem si situoval k těm rozumnějším lidem v ČSSD, nicméně i když nemá knírek, do úst si bohužel nevidí.

Proti krizi se už demaskovala jako agitace na volby do Evropského parlamentu.

Nastupuje Havel. "Teď už můžu říct, že s kamarády, Mertlíkem několikrát zachraňovali Českou spořitelnu a Komerční banku." Podle Havla je špatně, že když je někdo nemocný, tak kvůli poplatkům nic neušetří.


Hašek: "Pokud ODS nebude v parlamentu hlasovat pro zrušení poplatků, končí na Jižní Moravě v koalici."Každé Haškovo úderné prohlášení (zachráněna úrazovka, placení poplatků,...) následuje potlesk. "Každý měsíc krajská rada vyjede na debatu mezi lidi!" (potlesk) Hašek je opravdu rétor. "Vy jste v referendu rozhodli, že poplatky nechcete!" A taky demagog nebo je mimo. Nebo obojí.

Pak přišel čas na dotazy z publika, ale po chvíli je jasná podobnost s internetovými diskuzemi, případně pořady Míši Jílkové, takže jsem poněkud předčasně opustil své místo a aspoň se vyhnul frontě u šaten. Po cestě sem ještě splnil občanskou povinnost a upozornil hlídku městské policie na tři auta s pražskou poznávací značkou parkující na chodníku před Bakalovým sálem.

středa 11. února 2009

Spořicí účet Genius Plus? K ničemu

GE Money Bank nabízí spořící účet Genius Plus, na kterém upoutá nejvýhodnější úročení: 3,6%. To je ale asi tak všechno. Pevná úroková sazba platí jen do dubna, pak se mění na vyhlašovanou, a navíc ji dostanete jen při minimální úložce 40 tisíc korun (jinak je úrok 0,1%). Zdarma je jedna příchozí a tři odchozí transakce.
Pro klienty GE Money Bank založení účtu může být znouzecnost, ale ostatní by se měli asi poohlédnout po skutečných spořících účtech.

středa 28. ledna 2009

On-line versus desktopové aplikace

Desktopová čtečka FeedDemon možná přidá podporu pro synchronizaci s on-line RSS čtečkou Google Reader. Zajímavé. Kdysi jsem pro čtení RSS používal FeedReader a potom právě FeedDemon. Už si přesně nevzpomínám na důvody, proč jsem přešl právě ke Google Readeru, ale patrně v tom hrála značná nenažranost desktopových programů a pak taky možnost přístupu odkudkoli.
Nějakou dobu už nepoužívám na poštu a kalendář Outlook, ale dvojici Gmail/Gkalendář. Pár funkcí mi chybí (hlavně lepší připomínky), pár funkcí je navíc (sdílené kalendáře, lepší ovládání pošty), pár funkcí ještě musím rozjet (synchronizace s mobilem). Dnes se můj pozittivní dojem ještě vylepšil. Protože na Gmailu jsem jen zkušebně, mám v něm poštu jen za minulý rok. Dnes jsem při hledání staršího emailu nastartoval Outlook -- pomalý a s blbým hledáním...
Dnes Gmail přidává podporu práce off-line -- takže by se ten článek měl jmenovat "Webové versus desktopové aplikace" -- a tím zároveň mizí jedna ze zásadních nevýhod webových aplikací: nutnost stálého připojení.

Jetty součástí projektu Eclipse Runtime

Greg Wilkins oznámil návrh na připojení projektu www serveru a servletového kontejneru Jetty k projektu Eclipse Runtime. Eclipse už nyní Jetty obsahuje a používá ho například k zobrazování nápovědy. Tato změna by se neměla týkat stávající verze 6, která je distribuovaná pod licencí Apache 2.0, ale až příští verze 7, která bude duálně licencovaná pod licencí Apache 2.0 a licencí Eclipse Public. Společně s plánovanými změnami API ve verzi 7 tak dojde rovnou k přesunu do balíčků org.eclipse.
Greg jako pozitivum tohoto kroku vidí možný přínos nápadů, přispěvatelů a zdrojů do projektu, a také možnost příznivě těžit ze značky Eclipse, čímž by se Jetty zbavilo stigmatu projektu jednoho člověka a jediné firmy.
Jetty 7 by mělo vyjít společně s příští verzí Eclipse v červnu 2009 na konferenci JavaOne.

středa 14. ledna 2009

Hibernate Collection Of Elements a Criteria API

Navykl jsem si používat Hibernatovský CollectionOfElements ve spojení s Java 5 enumy. Collection of elements je zjednodušený vztah one-to-many, na jehož druhém konci není entita (s příslušnou tabulkou), ale jednoduchý typ jako string nebo enum.
Například mám předmět, u kterého chci mít zaznamenané jeho barvy (může mít víc barev). Barvy jsou jasně a pevně dané, není potřeba na ně mít v databázi číselníkovou tabulku.

public enum Color {
   RED, GREEN, BLUE, ...
}

@Entity
public class Item {
  @CollectionOfElements(targetElement=Color.class)
  @Enumerated(EnumType.STRING)
  protected Set<Color> color = EnumSet.noneOf(Color.class);
  ...
}

Tím pádem  mám v databázi jen "vazební" tabulku item_color se sloupečky id (primární klíč a zároveň cizí klíč do item) a element, kam jsou jako stringy serializované barvy.
Potud ideální. Pokud laskavý čtenář nehodlá používat Criteria API, může odejít spokojen. V opačném případě může zakusit něco horkých chvil a pokud nečte FAQ, tak i dost beznaděje, protože pokus o vytvoření Criteria k vybrání předmětů dané barvy skončí totiž výjimkou org.hibernate.MappingException: collection was not an association.
Ve FAQ se totiž praví, že Criteria API a Collection of Elements nelze. Ne že by samotné přečtení tohoto smutného faktu situaci vylepšilo... Na tento problém existuje záznam v Jira a dobrotivý přispěvatel mě navedl na řešení.

Vrátíme se zpět k SQL:
session.createCriteria(Item.class).add(Restrictions
  .sqlRestriction("{alias}.id in (select item_id from item_color where {alias}.id=item_id and element=?)", 
     i.name(), Hibernate.STRING));

pátek 9. ledna 2009

ING Konto, mBank EMAX a FIO Konto - srovnání úročení

Od ledna snižuje úročení ING Konto (na 3%) i mBank EMAX (na 2,7%), FIO Konto zůstává na 3,5%.

Následující graf ukazuje vývoj úročení spořících účtů spolu s vývojem dvoutýdenní reposazby ČNB.



V samostatném článku najdete srovnání spořících účtů.