Komputery, oprogramowanie, internet i okolice
Kategorie: Wszystkie | Aplikacje | Blog | Dev | Hacks | Linux | Subversion | Varia | gry | khoomei | książki | mjuzik
RSS
niedziela, 23 listopada 2008
Słucham wiadomości o "incydencie gruzińskim" i uwierzyć nie mogę.

Pozbierajmy fakty:
  • dwaj prezydenci jadą tym samym samochodem
    • w nocy (a przynajmniej po zmroku)
    • w terenie w którym dochodzi do incydentów
    • górską drogą
    • de facto pod kontrolą wojsk rosyjskich i/lub osetyńskich
    • bez zapowiedzi
    • na teren, który ogłosił niepodległość
    • trasą, która nie została sprawdzona
    • bez należytej obstawy i zabezpieczenia
  • decyzja o wyjeździe zapadła od tak
  • przed punktem kontrolnym na czoło kolumny zostają wysłani dziennikarze, nie wiadomo czemu, mimo że jest to sprzeczne z jakimikolwiek zasadami co zgodnie potwierdzali Polko i Dziewulski
  • kolumna zatrzymuje się na punkcie kontrolnym zatrzymana przez Osetyjczyków
  • Kaczyński twierdzi, że na posterunku obaj z Sakaszwilim wyszli z samochodu
  • padają jakieś strzały
  • potem "poszliśmy wolnym krokiem i zmieniliśmy samochody. Nie sądziłem, żeby było zagrożenie." (dalej L. Kaczyński) - a logika wskazywałaby na jak najszybsze wycofanie się pod osłoną BORu, komandosów
  • wycofują się i bus z dziennikarzami odłącza się od kolumny
  • jak twierdzi Małgorzata Gosiewska z Kancelarii Prezydenta mimo incydentu prezydenci inną trasą pojechali do obozu dla uchodźców
  • nikt ze strzelających nie został zatrzymany
Wnioski?
  • Rosjanom, chcącym uchodzić za prawych i sprawiedliwych obrońców uciemiężonych Osetyjczyków, na pewno nie zależy na jakimkolwiek incydencie, a już na pewno nie na zamachu na prezydentów Polski i Gruzji
  • za to Gruzinom niesamowicie zależy na tym by pokazać jacy to oni są niewinni i jak to Rosjanie i Osetyjczycy bestialsko się zachowują, za nic mając ustalenia międzynarodowe
  • czy w Gruzji za bezpieczeństwo prezydenta i gości z zagrnicy odpowiadają skończeni idioci, którzy łamiąc wszelkie zasady bezpieczeństwa i za nic mają zdrowy rozsądek narażają ich na aż takie niebezpieczeństwo
  • czy po stronie polskiej odpowiedzialna za bezpieczeństwo naszego prezydenta jest aż takim skończonym idiotą by zgadzać się na improwizowaną wycieczkę
  • zwłaszcza jeśli sobie przypomnimy, że w Polsce, gdy prezydent miał się pojawić na imprezie w Teatrze Narodowym to każdego z gości (nawet oficjeli) sprawdzano dokładnie, w tym za pomocą brami do wykrywania metalu
EDIT:
  • w wywiadzie prezydent wspomniał, że początkowo wsiedli do auta, którym jechali i dopiero po chwili, gdy zorientowali się, że samochód nie jest w stanie nawrócić zmieniono samochód
  • z podawanych informacji wynika, że w tamtym rejonie strzały są normalnością
EDIT 2:
  • co ciekawe brak jakiejkolwiek informacji o śladach po kulach na którymkolwiek z samochodów - a jeśli by takie były na pewno zostałyby pokazane
  • konwój specjalnie skręcił z drogi do ośrodka dla uchodźców by pojechać naferelny posterunek
20:38, kosciak1 , Varia
Link Dodaj komentarz »
sobota, 22 listopada 2008
Chyba każdy, kto potrzebował wykonać w Javie jakieś mniej lub bardziej skomplikowane operacje na datach i czasie wykorzystując standardowe API przyzna, że nie zostało to rozwiązane zbyt dobrze. Mamy do dyspozycji:
Niestety wszystko to sprawia wrażenie dosyć niespójnego. W dodatku brakuje wielu metod pozwalających na przeprowadzanie prostych operacji jak na przykład obliczanie różnicy pomiędzy dwoma datami. Na szczęście jest rozwiązanie!

Joda Time

Joda Time to darmowa, open-source'owa biblioteka na licencji Apache License 2.0 rozwiązująca większość problemów związanymi z datami i czasem.
Biblioteka jest dosyć rozbudowana, jednak by z niej korzystać wystarczy poznać jej główne koncepcje i podstawowe klasy
  • Instant - reprezentuje punkt w czasie z użyciem określonego kalendarza i w określonej strefie czasowej (domyślnie wykorzystuje kalendarz ISO 8602 i strefę UTC). Przykładem mogą tu być klasy DateTime (data i czas), czy DateMidnight (data z czasem ustawionym na godzinę 00:00)
  • Partial - cząstka daty lub czasu, bez określonej strefy czasowej. Przykładem mogą tu być klasy LocalDate (data bez czasu), LocalTime (czas bez daty), LocalDateTime (data i czas)
  • Interval, Duration, Period - różne sposoby reprezentowania różnicy pomiędzy dwoma punktami w czasie
  • Chronology - czyli kalendarz. Dostępne są kalendarze ISO 8602, gregoriański, juliański, buddyjski, muzułmański, by wymienić kilka z nich
Oczywiście dostępne są metody umożliwiające bezproblemowe operacje na datach i czasie - porównywanie, dodawanie, pobieranie informacji o roku, miesiącu, dniu, etc, łatwe konwersje pomiędzy różnymi sposobami reprezentacji punktów w czasie (w tym klasami ze standadrowej biblioteki Javy). Całość sprawia wrażenie na prawdę dobrze przemyślanej i wewnętrznie spójnej.
Joda Time działa z wersjami Javy wyższymi od 1.3 W wypadku Javy >5 drobnym problemem może być brak obsługi genericsów na przykład przy implementacji interfejsu Comparable.
Drugim problemem może w pewnych warunkach być waga biblioteki wynosząca ponad 500 kB (głównie ze względu na informacje o strefach czasowych).
00:16, kosciak1 , Dev
Link Dodaj komentarz »
środa, 19 listopada 2008
Stało się!
W sumie to nie było innego wyjścia.
To była jedynie kwestia czasu.

Grupa Monty Pythona postanowiła ostatecznie rozwiązać problem nielegalnie zamieszczanych w serwisie YouTube (o czym już zresztą pisałem) fragmentów ich programów i skeczy....

I założyli oficjalny kanał Monty Pythona, na którym publikowane będą skecze, wywiady i materiały archiwalne związane z grupą. W dodatku za darmo i dobrej jakości.
13:36, kosciak1 , Varia
Link Dodaj komentarz »
sobota, 15 listopada 2008
Robiąc sobie przerwę w kontemplacji nad wzorcami Temporal Object i Temporal Property obejrzałem sobie dzisiejszy odcinek Mam Talent.
I normalnie krew mnie zalała... Tak, chodzi o Ewę Lewandowską...
W eliminacjach wykonując Ave Maria Ewa pokazała, że głos ma świetny. Przynajmniej dla laika w kwestii oceny głosów operowych. W dzisiejszym półfinale wykonała jakiś rzewny utwór Barbary Streisand. Udowodniła w ten sposób każdemu, kto do tej pory miał jeszcze jakiekolwiek wątpliwości, że osoba z głosem ustawionym na operowo nie powinna nigdy, ale to przenigdy wykonywać utworów muzyki popularnej. Dlaczego? Bo brzmi to źle. Bardzo źle. Zwłaszcza, jeśli to jest występ na poważnie, a nie zabawa formą.
Jednak mimo słabiutkiego występu Ewa Lewandowska przeszła dalej. Dlaczego? Bo niewidoma, bo chory piesek, bo ojciec... Bo potrafi wzruszać, a widownia to lubi, więc słupki oglądalności podskoczą i będzie więcej kasy z reklam i smsów...
Tylko Chylińska pokazała, że ma jaja i zagłosowała na świetnych Funky Masons.

W dodatku na stronie Mam Talent nie widzę nigdzie regulaminu głosowania (bo po co...), więc nie wiem jaki jest czas głosowania na poszczególnych uczestników. Na ile są wyrównane szanse tych występujących na początku i na końcu. Czy możliwe jest głosowanie na uczestnika przed jego występem.
23:11, kosciak1 , Varia
Link Komentarze (2) »
poniedziałek, 10 listopada 2008
We wpisie Testy jednostkowe wspominałem dlaczego testy jednostkowe są tak ważne. Dzisiaj słów kilka o najpopularniejszym frameworku testów jednostkowych dla języka Java, czyli o JUnit 4.
W wersji czwartej wprowadzono wiele zmian ułatwiających pisanie testów. Najważniejszą zmianą jest wprowadzenie adnotacji, dzięki temu nie musimy już rozszerzać klasy TestCase i nazywać metod testowych testXXX() Drugą ważną zmianą jest wprowadzenie możliwości parametryzowania testów. Nie chodzi tu o użycie szablonów (Generics), lecz wstrzykiwanie wartości parametrów dla testów. Można to wykorzystać na przykład do podania listy danych wejściowych i odpowiadających im oczekiwanym wyników.
Oto szablon parametryzowanego testu:
import /* odpowiednie importy */

@RunWith(Parameterized.class)
public class ParametrizedTest {

private int i;

public ParametrizedTest(int i) {
this.i = i;
System.out.println("[" + i + "] Constructor of Parametrized");
}

@Parameters
public static Collection data() {
System.out.println("@Parameters data()");
Object[][] data = new Object[][] {{1},
{2}};
return Arrays.asList(data);
}

@BeforeClass
public static void setUpClass() {
System.out.println("@BeforeClass setUpClass()");
}

@AfterClass
public static void tearDownClass() {
System.out.println("@AfterClass tearDownClass()");
}

@Before
public void setUp() {
System.out.println("[" + i + "] @Before setUp()");
}

@After
public void tearDown() {
System.out.println("[" + i + "] @After tearDown()");
}

@Test
public void test1() {
System.out.println("[" + i + "] @Test test1()");
assertTrue(true);
}

@Test
public void test2() {
System.out.println("[" + i + "] @Test test2()");
assertTrue(true);
}

}
Kilka słów wyjaśnienia:
  • @RunWith(Parametrized.class) - wymagane jeśli chcemy parametryzować test
  • @Parameters public static Collection data() - określamy parametry testu, muszą zostać opakowane w obiekt Collection.
  • public ParametrizedTest(int i) - konstruktor, przyjmuje parametry określone w metodzie data()
  • @BeforeClass public static void setUpClass() - inicjalizujemy zasoby dla wszystkich testów, na przykład połączenie z bazą danych
  • @AfterClass public static void tearDownClass() - zamykamy zasoby zainicjalizowane w @BeforeClass
  • @Before public void setUp() - inicjalizujemy tak zwane test fixture , czyli konfigurację testów. Metoda jest wywoływana przed każdym testem. Zazwyczaj tworzy się tu obiekty referencyjne, wspólne dla wielu testów, za pomocą których sprawdzamy poprawność wykonania testu
  • @After public void tearDown() - zamykanie zasobów utworzonych w @Before. Metoda wykonywana po każdym teście
  • @Test public void test1() - metoda zawierająca pojedynczy test
  • assertTrue() - aseracja, za ich pomocą sprawdzamy poprawność wykonania testów. Ich pełną listę można znaleźć w dokumentacji klasy org.junit.Assert
  • W JUnit 4.x metody oznaczone adnotacjami @Before, @After, @BeforeClass, @AfterClass mogą się dowolnie nazywać, nazwy setUp, tearDown są nazwami używanymi w JUnit 3.x
Po wykonaniu na konsoli otrzymamy:

@Parameters data()
@BeforeClass setUpClass()
[1] Constructor of Parametrized
[1] @Before setUp()
[1] @Test test1()
[1] @After tearDown()
[1] Constructor of Parametrized
[1] @Before setUp()
[1] @Test test2()
[1] @After tearDown()
[2] Constructor of Parametrized
[2] @Before setUp()
[2] @Test test1()
[2] @After tearDown()
[2] Constructor of Parametrized
[2] @Before setUp()
[2] @Test test2()
[2] @After tearDown()
@AfterClass tearDownClass()

Co powinno rozwiać wszelkie wątpliwości związane z kolejnością wykonywania poszczególnych metod.
12:32, kosciak1 , Dev
Link Komentarze (1) »
Niedawno wypracowałem sposób parzenia idealnej yerba mate.


A więc kolejno:
  1. Nasypujemy jakieś 1/2 - 2/3 suszu
  2. Zatykając naczynko dłonią potrząsamy trochę by uformować przyszły kopczyk.
  3. Trzymając przechylone naczynko zalewamy susz z wierzchu by trochę nasiąkł i czekamy chwilkę.
  4. Wbijamy bombillę w podstawę kopczyka i delikatnie zalewamy wodą po bombilli lub po suchej ściance naczynka. Jeśli suchy susz za bardzo wypływa spychamy go do środka.
  5. Czekamy chwilę aż yerba mate nam się zaparzy i delektujemy się idealną yerba mate.
Dlaczego tak a nie inaczej? Już tłumaczę:
  • potrząsanie powoduje odpowiednie umiejscowienie pyłu
  • podlanie kopczyka zapobiegnie jego rozsypaniu się podczas nalewania wody
  • wbicie bombilli w kopczyk powoduje, że nalewając nie zalewamy wodą kopczyka
  • w efekcie całej operacji sporo suszu, przy ściance pozostaje całkowicie suche
  • suchy susz będzie powoli nasiąkać wodą i oddawać smak podczas kolejnych zalań
  • smak jest bardziej równomierny - nie ma aż takiej różnicy pomiędzy pierwszym zalaniem a kolejnymi

No to jeszcze kilka spostrzeżeń:
  • Rosamonte Especial jest o wiele intensywniejsze od zwykłej Rosamonte, jeśli źle się zaparzy to otrzymamy silną goryczkę
  • ciekawym eksperymentem jest dodanie do Rosamonte (zwykłej lub Especial) soku wiśniowego
  • bardzo pozytywnie zaskowczyły mnie La Mered Barabacua i Selecta - przepyszne!
  • Amanda jest dosyć specyficzna, taka mocno hmmmm.... trawiasto-ziołowa. Zupełnie inna od lekko tytoniowych w smaku Rosamonte
  • w moim wypadku yerba świetnie się sprawdza w warunkach "bojowych" - spore zmęczenie, deficyt snu - potrafi wspaniale postawić na nogi i poprawić humor. Działanie dużo lepsze niż kawy, na którą się chyba uodporniłem
  • jeśli zostawisz naczynko z yerbą bez nadzoru bądź pewien, że znajdzie się ktoś kto postanowi zamieszać bombillą (lub nawet spróbować ją wyjąć)
10:08, kosciak1 , Varia
Link Komentarze (2) »
czwartek, 06 listopada 2008


O JavaBlackBelt słyszałem od dawna, jednak dopiero od jakiegoś tygodnia postanowiłem na poważnie zainteresować się serwisem. Jest to społecznościowy serwis dla programistów Javy chcących rozwijać się i sprawdzać poziom swojej wiedzy.

Egzaminy

Na JavaBlackBelt znajdziemy szeroki wachlarz egzaminów o różnym stopniu trudności. Od egzaminów poświęconych podstawowym bibliotekom wchodzącym w skład JSE, JME, JEE, JSP, przez podstawy programowania obiektowego, algorytmów, UML, XML, obsługi baz danych, czy potrzebnym w pracy narzędziom takim jak JUnit, Ant czy Maven, budowanie GUI za pomocą Swinga, po egzaminy poświęcone poszczególnym szkieletom aplikacyjnym Hibernate, Spring, Struts, EJB, JSF, Seam, Tapestry czy też egzaminy poświęcone AJAXowi, Groovy, Ruby czy C#. Tak więc każdy programista Javy, bez względu na to jakimi technologiami się zajmuje znajdzie tu coś dla siebie.
By zaliczyć egzamin należy zdobyć co najmniej 80% punktów. W dodatku pytania często są dosyć szczegółowe. Nie ma się jednak czego bać. Na JavaBlackBelt wolno podczas egzaminów korzystać z zewnętrznych źródeł wiedzy - notatek, JavaDocs, Google'a, czy nawet IDE by skompilować kawałek kodu i przekonać się, czy dobrze myślimy. Jeśli jednak poszukiwania właściwej odpowiedzi będą nam zajmowały zbyt długo nie zmieścimy się w limicie czasowym.

Pasy

Na wzór szkół wschodnich sztuk walki na JavaBlackBelt wprowadzono system pasów. Użytkownik może zdobyć kolejno pasy: żółty, pomarańczowy, zielony, niebieski, brązowy by dotrzeć do najwyższego czarnego. Zdobycie pasa polega na zdaniu wymaganych egzaminów (np dla żółtego są to Java SE - Basic i OO for Java - Basic) oraz zdobyć odpowiednią ilość punktów wiedzy. Punkty wiedzy otrzymujemy za każdy zdany egzamin.
By zdobyć pas zielony wystarczy podążać wyznaczoną ścieżką egzaminacyjną, gdzie zdanie egzaminu uprawnia nas do podejścia do kolejnego egzaminu na ścieżce bez płacenia. By zdobyć wyższe pasy nie ma już tak łatwo. Musimy zapracować na możliwość podejścia do egzaminu. I tu właśnie ujawnia się społecznościowy charakter JavaBlackBelt.

Punkty wkładu

By uzyskać dostęp do dowolnego egzaminu nie znajdującego się na ścieżce egzaminacyjnej, czy też by podejść ponownie do oblanego egzaminu musimy poświęcić punkty wiedzy (contribution points). Możemy je zdobyć na wiele sposobów, na przykład tworząc nowe egzaminy, tworząc pytania, edytując, komentując lub oceniając istniejące pytania. W ten sposób cały czas zwiększa się ilość pula pytań i poprawiana jest jakość egzaminów.

Zysk

Co daje JavaBlackBelt? Przede wszystkim możliwość sprawdzenia swoich umiejętności. Możemy przekonać się, które elementy języka znamy w stopniu niedostatecznym, co jeszcze musimy poznać. Ja sam "odkryłem" istnienie bardzo ciekawej klasy WeakReference i wykorzystującej ją WeakHashMap, czy też zupełnie mi nie znanych do tej pory klasach formatujących.
11:09, kosciak1 , Dev
Link Komentarze (4) »
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes