Wednesday, December 23, 2009

Gotowanie warzyw.

Będzie krótko. Odcedzaj warzywa po ugotowaniu. ZAWSZE.

Sunday, December 20, 2009

Pieczenie, wydanie świąteczne - tarta makowa

W ramach wspólnego spędzania świąt we dwoje i koniecznej potrzeby zrobienia czegoś ze spontanicznie kupionym makiem, upiekliśmy wczoraj tartę makową. Wyszła pyszna, więc dzielimy się przepisem ze światem.

Tarta makowa - do it easy [oryginalny przepis]

Składniki (ciasto):
  • 25 dag mąki
  • 15 dag masła (3/4 kostki)
  • jajko
  • 10 dag cukru pudru
Składniki (masa):
  • 2 szklanki bakalii (migdały w płatkach, orzechy laskowe, rodzynki)
  • masa makowa (z puszki)
  • 2 łyżeczki miodu
  • 50ml rumu 
  • starta skórka pomarańczowa z 1 pomarańczy
  • zmielone migdały (mogą być płatki) do dekoracji - około 1/2 szklanki
Do dekoracji może przydać się bita śmietana i cząstki pomarańczy.
Przepis dostosowany jest do dość dużej formy - jakieś 30cm średnicy.

Przygotowanie:
Masło posiekaj z mąką i cukrem, dodaj jajko. Szybko zagnieć kruche ciasto i włóż na godzinę (lub pół, jak Ci sie spieszy ;-)) do lodówki.
Wrzuć masę makową do miski; dodaj rum i miód i dobrze wymieszaj. Dodaj pokruszone orzechy i sparzone rodzynki, a także skórkę pomarańczy i wymieszaj masę tak, by bakalie rozeszły się równomiernie.
Wyjmij ciasto z lodówki, rozwałkuj je, przełóż do natłuszczonej formy, ponakłuwaj w wielu miejscach widelcem. Na wierzch wyłóż masę makową; piecz 45 minut w temperaturze 180* C.
Po wyjęciu ciasto posyp kruszonymi migdałami (lub jakkolwiek inaczej je udekoruj).



Smacznego!

Thursday, December 17, 2009

Why API Design Matters

Znalazłem fantastyczny artykuł o tym, dlaczego warto projektować dobre API, jak bardzo boli korzystanie ze źle zaprojektowanego API oraz o czym należy pamiętać, gdy się takowe API projektuje. Nie jest to artykuł wyczerpujący temat (w końcu to tylko artykuł, a potrzeba książki...) ale z pewnością wart przeczytania. I zastosowania.

API Design Matters | May 2009 | Communications of the ACM

A must-read.

Tuesday, December 15, 2009

Perełka obrazkowa

No nie dałem rady.



Hi.

Saturday, December 12, 2009

Java EE 6 opublikowana

Jako programista Java muszę wspomnieć o takim wydarzeniu. Cała praca związana z przedstawieniem nowej platformy została już wykonana - pozwolę więc sobie tylko do niej przekierować:

Java EE 6 feature overview

Miłego czytania :-)

Friday, December 11, 2009

Writing a thesis or scholar paper demistified

Jako że zaczynam pisać swoją pracę magisterską (jak i sporo osób z mojego rocznika - jeśli wciąż o takim można mówić) i jest to moja pierwsza praca, to kompletnie nie wiedziałem jak się do tego zabrać. Na szczęście, udało mi się wygooglać to:

How to Write a Term Paper or Thesis (PDF).

Jest to całkiem przyjemne i przystępne wprowadzenie do tego, jak napisać pracę magisterską. Jeśli użyć jeszcze takiej ściągi, a później zadać sobie te pytania, to powinno być w porządku.

PS. Oczywiście, nic nie zastąpi ścisłej współpracy z promotorem i - najlepiej - jakimś znajomym polonistą.

Ciasto francuskie z warzywami

Przepis idealny jako ten as w rękawie, którego trzeba szybko wyjąć.

Ciasto francuskie z warzywami

Składniki:
  • ciasto francuskie, w rolce
  • brokuły, kukurydza (raczej nie z puszki), groszek, marchewka lub po prostu zestaw ulubionych warzyw (może być mrożonka) - całość około 400g.
  • odrobina tłuszczu/oleju roślinnego

Warzywa - jeśli są świeże - gotujemy. Marchewkę kroimy w talarki, a brokułę dzielimy na drobne części (można to zrobić przed ugotowaniem ;-)). Jeśli ratujemy się mrożonką, to zawartość możemy usmażyć lub dusić przez 10 minut na patelni. Osobiście wolę duszone - są bardziej soczyste. Tuż przed zakończeniem tego etapu warzywa należy doprawić - wystarczy pieprz i sól, ale w ramach finezji można dorzucić jakieś oregano albo mieszankę włoską.

Pozwalamy warzywom ostygnąć. Rozwijamy ciasto i wrzucamy (ostudzone, inaczej ciasto się rozejdzie!) warzywa i rozkładamy je równomiernie po plastrze (zostawiając trochę przestrzeni przy krawędziach). Całość rolujemy i wrzucamy do wysmarowanego wcześniej tłuszczem/olejem naczynia szklanego. Zaklejamy ciasto po bokach, aby zawartość nie wypłynęła i wrzucamy do piecyka (w otwartym naczyniu). Piecyk powinien być rozsądnie nagrzany - myślę, że w okolicach 150*. Po 20 minutach sprawdzamy, czy ciasto jest kruche i zarumienione; jesli tak, dajemy mu jeszcze troche czasu - od 5 do 15 minut, zależnie od tego, jak bardzo 'soczyste' jest nadzienie.

Zwykle pijamy to z jakimś lekkim winem - białym lub różowym. Całkiem nieźle sprawdzają się kalifornijskie zinfandele i wina z winnicy Carlo Rossi.

Smacznego!





Wielkie dzięki mojej mamie za uratowanie kilku z moich randek ;-)

Thursday, December 10, 2009

Wycieki pamięci i jak sobie z nimi radzić

Jakkolwiek problem wycieków pamięci jest całkiem poważny nawet w językach wyposażonych w garbage collector (o ile można tak mówić o językach), to rzadko pojawiają się informacje, jak z tymi problemami sobie radzić. Korzystając z okazji pojawienia się artykułu, który próbuje wypełnić tę lukę, pozwalam go sobie "wykopać":

How to fix memory leaks (in Java)

Artykuł oparty jest na Javie, ale przekazane treści są uniwersalne, a sama Java służy do osadzenia problemu w pewnych "namacalnych" realiach.

Tuesday, December 8, 2009

JavaScript widziany okiem programisty Java - tablice

W trakcie prototypowania małego serwisu internetowego próbowałem iterować po tablicy - o tak:

var links = [['link1', 'title1'], ['link2', 'title2']];
for (link in links) {
  alert(link); 
  // do stuff with link 



Zagadka: co wypisze wywołanie alert(link);? Otóż 0 i 1. Żadna niespodzianka, jeśli wie się, że tablice w JavaScript są obiektem, a nie typem wbudowanym jak w wielu językach programowania, a iterowanie po obiekcie JavaScriptowym... to iterowanie po jego kluczach. Jako, że klucze w tablicach to indeksy, to zmienna link zwraca kolejne indeksy: 0, 1, ... . Oczywiście, do długości tablicy.

Więcej o tablicach można poczytać tutaj.

PS. Chciałbym podziękować Marcinowi za pomoc przy tym problemie.

Delete this! [C++]

W ramach odświeżania swojej (dość zakurzonej, niestety) wiedzy o C++ natrafiłem na bardzo ciekawe pytanie:

Czy można wywołać instrukcję delete this; wewnątrz metody obiektu? Co się stanie i dlaczego? Czy można wykonać jakiś inny kod po wywołaniu tej instrukcji?

Zmieszałem się. Z jednej strony - dlaczego ktoś chciałby robić coś takiego? Z drugiej okazuje się, że są sytuacje, w których takie wywołanie ma sens (nie tylko semantyczny). Całość tematu została ładnie wyjaśniona tutaj, a w tym miejscu znajduje się kilka informacji pobocznych.

Monday, December 7, 2009

Historia 1,5kg czekolady

Ponieważ do dobrego posiłku wliczony jest deser, więc i taki postanowiłem zrobić. Za namową Marcina (dzięki!) zmontowałem blok czekoladowy. Przepis poniżej.

Blok czekoladowy [oryginalny przepis]
Składniki:
  • 1 margaryna
  • 1/2 szkl. wody
  • 2 szkl. cukru
  • 5-6 łyżek kakao
  • 1/2 kg. mleka w proszku
  • pokruszone herbatniki, bakalie
Przygotowanie:
Wodę, cukier i margarynę zagotować mieszając; dodać kakao (lub też dodać je dopiero z mlekiem, jak w oryginalnym przepisie; mi to odradzano, jako że zamiast jednolitej masy mogą pojawić się smugi). Po dokładnym rozpuszczeniu kakao należy dodać mleko w proszku. Całość należy bardzo szybko i dokładnie wymieszać; diabelstwo gęstnieje tak szybko, że za pierwszym razem nie udało mi się dodać całego mleka. Dodać bakalie i pokruszone herbatniki, szybko wymieszać (naprawdę szybko!). Całość należy przelać do foremki wysmarowanej tłuszczem i wyrównać powierzchnię. Następnie należy wstawić to na 2-3 dni do lodówki, aby herbatniki "naciągnęły".

Krótka adnotacja: jeśli komuś "nieopatrznie" wleje się całość do szklanego zamiast metalowego (elastycznego) pojemnika, to bez paniki. Suszarka do włosów i tłuszcz na dnie formy powinien uratować sytuację ;-)


Całość należy jakoś udekorować; ja użyłem polewy z białej czekolady i czekoladowych literek; efekt widać poniżej (trochę już podjedzony ;-)). Smacznego!


 
 
Za ten przepis (i pomoc) chciałbym serdecznie podziękować Marcinowi.

Tort naleśnikowy zamiast torta i historia 1,5kg czekolady

Bywają takie dni w życiu mężczyzny, że... trzeba zadbać o swoją drugą, szlachetniejszą połówkę. Przez to rozumie się także próbę nakarmienia i napojenia, najlepiej czymś w miarę dobrym. I o tym będzie ta historia.

Jako że wspomniana połóweczka obchodziła ostatnio swoje osiemnaste urodziny (i 5 doświadczenia) w ramach celebry postanowiłem przygotować jej tort... naleśnikowy. Taki normalny już został uwzględniony w innych planach, więc nie było sensu dublować.

Tort naleśnikowy [inspiracja]
Składniki (naleśniki):
  • 3 szklanki mąki
  • 3 jajka
  • 1,5 szklanki mleka
  • 0,5 szklanki oleju
  • 0,5 szklanki wody
Składniki (farsz):
  • 3 pomidory
  • 1 cukinia
  • bakłażan
  • 1 czerwona papryka
  • dwie cebule (dymki) 
  • szczypiorek (do dekoracji) 
  • 40 dag żółtego sera
  • olej do smażenia (spora ilość)
  • pieprz, sól, suszony lubczyk, czerwona papryka w proszku (lub inne ziółka) 
Przygotowanie (naleśniki)
Mąkę, mleko, olej i wodę wlać do miski, dobrze wymieszać - tak, by nie było grudek. Doskonale do tego nadaje się mikser. Zadbać o to, by otrzymana emulsja miała gęstość/konsystencję oleju napędowego. Zagęszczać mąką (ostrożnie!), rozcieńczać mlekiem.
Naleśniki smażymy bez oleju (z dokładnością do pierwszego, który smażymy właśnie na oleju). Generalnie chodzi o to, żeby pierwszym naleśnikiem (który zwykle nie wychodzi, jak mówią doświadczeni)  przygotować patelnię pod kolejne.  Naleśniki odstawić i zadbać, aby nie zamokły.
Przy okazji, polecam nie piec zbyt grubych naleśników. Sam tort i tak wyjdzie dość gruby i sycący, nie ma powodów aby pompować jeszcze ciasto :-)

Przygotowanie (farsz)
Pomidory należy pokroić na plastry; ja je jeszcze sparzyłem i zdjąłem z nich skórkę. Ser żółty utrzeć na tarce. Cukinie i bakłażan dokładnie umyć; ich nie należy obierać ze skórki. Pomidory, cukinie i bakłażan należy pokroić w cienkie plasterki; ostatnie dwa należy położyć na gorącym tłuszczu i obsmażyć z obu stron (smażone, lekko zarumienione plastry bakłażanów są przepyszne, więc trzeba sobie dać na wstrzymanie :-)) Posypać solą i pieprzem, odłożyć, by wystygły. Paprykę pokroić w kostkę (ca 1-1,5cm); cebulę także, lecz drobniej (ca 0,5cm). Paprykę podsmażyć, żeby puściła sok; jak już będzie trochę bardziej miękka, dodać cebulę i zeszklić. Należy uważać, żeby nie przypalić mieszanki.

Przygotowanie (tort)
Zabierzmy się teraz za grande finale dania. Dno tortownicy (naleśniki nie muszą pasować idealnie) posmarować cieniutko tłuszczem; położyć pierwszego naleśnika. Teraz zajmujemy się przekładaniem naleśników warzywami i serem, gdzie jedna warstwa tortu to naleśnik + warzywa + ser. Moja propozycja jest następująca (od spodu tortu): bakłażany, papryka z cebulą, cukinia, znów bakłażany, na koniec pomidory. Wierzch tortu (ostatni naleśnik), należy dość grubo posypać serem i doprawić lubczykiem i papryką (lub innymi ziołami). Całość zapiekać przez 20 minut w temperaturze około 180˚C. Tort należy wyjąć z piekarnika i posypać posiekanym szczypiorkiem. Należy dość szybko (ale bez paniki :-)) podać, bo dziwnie szybko stygnie.

Podane z wytrawnym, czerwonym winem smakuje naprawdę nieźle (pal licho skromność!), szczególnie przy świecach i dobrej muzyce :-)


 

Smacznego!

Historia czekolady pojawi się w osobnym poście.
Chciałbym podziękować mojej mamie za wsparcie i radę :-)

Tuesday, December 1, 2009

Bo w życiu mężczyzny są takie chwile, że nie powinien się śmiać...

...ale k***a nie da rady ;-)



K: Ja nie mam PMS. To tylko zło całego świata zwaliło mi się na głowę.

Tytuł sponsorowany przez Fabiana.

Wednesday, November 18, 2009

Closure - echa publikacji

Nie trzeba było długo czekać, aby Closure doczekał się recenzji. Notę, jaką zebrał, trudno nazwać oszałamiającą. Przynajmniej z pozytywnego punktu widzenia.

Zapytano mnie raz, czy to możliwe, żeby Google wypuścił tak kiepski produkt i czy to wszystko prawda. Nie ma się co spierać - Closure w swej pierwszej odsłonie najwyraźniej ma wszystkie wady wymienione przez Dmitry Baranovskiy'ego. Nikt nie jest nieomylny.

Jednym slowem: tak, gość ma sporo racji; pozwolę sobie jednak zauważyć, że poprawki tego typu może wprowadzić jeden praktykant w maksymalnie dwa dni. Być może sam nie zaprojektuje rozwiązań, ale zrobił to za niego Dmitry.

Należy podziekować Dmitry'emu za jego komentarze - pozwolą one poprawić błędy programistów mających wkład w Closure. Tym bardziej, że komentarze były konstruktywne.

Dziwi mnie jednak zajadłość, z jaką komentowany jest Closure. Czyżby Dmitry i jego jQuery czuły się zagrożone przez produkt Google?

Poza tym: jeśli za tydzień wydany zostanie poprawka Closure (już bez tych błędów), to czy Closure dalej bedzie ryzykiem dla bezpieczeństwa świata?
O tak, długo mi tego brakowało!

How to get started with TDD

Nareszcie coś, dzięki czemu można zacząć uczyć (bo nie nauczyć, oczywiście - to zbyt trudne) TDD w domu.

Saturday, November 7, 2009

Closure publicznie dostępny!

Z radością ujrzałem następującą notkę na arstechnica.com:

http://arstechnica.com/open-source/news/2009/11/google-opens-up-its-javascript-development-toolbox-to-all.ars

Jeszcze nie przeglądałem, jak bardzo Closure zmienił się od czasu, gdy miałem okazje z niego skorzystać; mam jednak nadzieję, że nie będzie to historia analogiczna do tej z GXP.

Saturday, October 24, 2009

Amarok stops playing since 2.2 final

Spotkało mnie ostatnio przykre wydarzenie związane z Amarokiem. Otóż po aktualizacji do wersji 2.2 skończył się moje słuchanie muzyki. Polecenie

amarok --debug

wyświetlało (wśród setek innych ciekawych rzeczy) komunikat następującej treści:

amarok: [EngineController] [WARNING!] Phonon failed to play this URL. Error: "Cannot find demultiplexer plug in for MRL [file:///home/...]"

Trochę trwało, zanim na mojej Fedorze udało się rozwiązać problem. Po przeszukaniu tego i tego wciąż byłem w kropce. A wystarczyło wpisać...

rm -rf ~/.gstreamer-0.10 

Martwi mnie, że nie wpadłem na to od razu po przeczytaniu pierwszego linku.

Saturday, September 26, 2009

Picasa 3 oraz Fedora 11 x86_64

Ostatnio trafiłem na ciekawy błąd w Picasie 3 - nie mogłem się zalogować, a Picassa odpowiadała komunikatem:

Login failed

HttpOpenRequest failed (12157) -
https://www.google.com/accounts/ClientAuth [13]

Problem był odrobinę zakamuflowany, ale udało się go rozwiązać w bardzo prosty sposób. Szczegóły poniżej:

rozwiązanie


Friday, August 28, 2009

Toshiba Satellite A300-210 - drugie starcie.

To jakiś koszmar, żeby systemy operacyjne od jednego producenta wygryzały się nawzajem.

Moje wojowanie z instalacją trzech systemów operacyjnych na jednym komputerze już było na ukończeniu - wydawać by się mogło, że wystarczyło dodać jeszcze jeden niewielki wpis w /boot/grub/menu.lst i powinno być po krzyku.

I co się okazało?  Otóż z zainstalowanych Windowsów działa tylko ten, który był zainstalowany jako ostatni. Kilka prób naprawienia (zakończonych niepowodzeniem) i eksperymentów pozwoliły stwierdzić, że... wcale nie potrzebuję Windowsa 7. Póki co i tak nie ma do niego sterowników pozwalających obsłużyć mój sprzęt komputerowy, a XP ma pełne wsparcie. Pewnego dnia po prostu przeniosę swojego XP na maszynę wirtualną, a starą instalację zastąpię Windowsem 7. O ile będzie tego wart.

[Można powiedzieć, że się poddałem, ale granica szaleństwa już została przekroczona. Koszty walki już dawno przerosły oczekiwane zyski, co czyni każdy kolejny krok bezsensownym]

Toshiba Satellite A300-210 - pierwsze starcie.

Ostatnimi czasy mój stary, wysłużony Fujitsu-Siemens (Amilo Pro V2065) odszedł na zasłużoną emeryturę (w dosc spektakularny sposób, bo spadając z biurka).

Zastąpiła go Toshiba Satellite A300-210 - mały kombajn wyposażony (jak wszystko ostatnimi czasy) w system Windows Vista w wersji OEM. Jako że nie cierpię gadziny, natychmiast wyleciała z dysku twardego. Postanowiłem jednak zachować jej kopię zapasową - najlepiej na jakiejś płytce DVD.

Na szczęście Toshiba przewidziała taki manewr ze strony użytkownika (o czym to świadczy?) i dostarczyła mi do tego odpowiednie (preinstalowane :-D) oprogramowanie.

Postanowiłem zainstalować następujące systemy operacyjne: Windows 7 Professional (media), Windows XP (cóż, praca) i Fedorę 11 (system do pracy na co dzień).

Najprościej poszło z Windowsem 7 - po około 15 minutach miałem system gotowy do pracy. Fakt, że brakuje mu pewnych sterowników, ale za to działa jak ta lala.

Z Fedorą było równie łatwo - tradycyjny dla linuksa instalator, z tradycyjną ilością minimalnej pracy do wykonania. Pewnych elementów sprzętu nie rozpoznał prawidłowo, ale system działa bez zarzutu.

Najgorzej poszło z XP. Na dzień dobry - BSOD podczas instalacji. Przynajmniej był na tyle łaskawy, że dał się przeczytać i przepisać.

Kłopot był już raz przeze mnie przerabiany - brakowało sterowników SATA. No to hyc - na stronę Toshiby po sterowniki. Ściąganie (tego tłumaczyć nie będę ;-)), rozpakowanie (z linii komend, komendą iata_cd.exe -a -n -p -s C:\IATA), integracja z płytą instalacyjną Windowsa XP (polecam ten przewodnik), instalacja... i klops. Tym razem BSOD poczekał do momentu pierwszego uruchomienia i stamtąd atakował bez pardonu - nie dając nawet szansy oku zobaczyć, o co chodzi.

Zaskoczenie było spore. Okazało się, że tym razem należy Toshibie odjąć punkt - sterowniki przez nią sugerowane były powodem pojawiania się niebieskiego ekranu i należało wykorzystać najnowszą wersję ze strony producenta i to ją zintegrować.

W tej chwili instaluję pozostałe sterowniki. Miejmy nadzieję, że wszystko będzie działało sprawnie. Będę raportował, być może nie na bieżąco.

Inauguracja, czyli kilka słów na początek.

Zdecydowałem się.

Ta myśl chodziła za mną czas już jakiś, ale dotychczas zdrowy rozsądek skutecznie powstrzymywał moje sinusoidalne napady ekstrawertyzmu. Dzisiaj, oprócz oscylowania wokół potrzeby ekspresji, w odsieczy przyszła jeszcze potworna nuda. W obliczu zmasowanego ataku wymienionych,  zdrowy rozsądek musiał się poddać.

Będzie krótko i treściwie:

Cześć wszystkim i miłego czytania.