wtorek, 28 września 2010

SimpleDateFormat i wielowątkowość

Nie wszyscy zdają sobie sprawę, że standardowa w Javie klasa SimpleDateFormat z pakietu java.text nie jest bezpieczna ze względu na wątki. W sumie mało kto zdaje sobie z tego sprawę.

Bardzo często można spotkać w projektach Javy EE podobne linijki kodu:

Date date = GlobalConst.DATE_FMT.parse(datestring);

To, że potrzebna jest nam kontrola wielowątkowości pokaże następujący prosty przykład:

poniedziałek, 27 września 2010

Office 2007 - zmiana skrótów klawiszowych

Niektórzy z nas mają "przyjemność" pracować z Microsoft Office 2007 w wersji językowej innej niż polska. Wszystko jest fajnie, ale zdarza się, że Ctrl+B nie pogrubia tekstu ;) Np. w niemieckiej wersji pakietu Office służy do tego skrót klawiszowy Ctrl+Shift+F (a właściwie Strg+Umschalt+F) - od Fettdruck.

Niestety mam okazję pracować z Officem dopasowanym do języka Goethego ;) Skróty klawiszowe wyglądają w nim tak:

Ctrl+Shift+F - pogrubienie
Ctrl+Shift+K - kursywa
Ctrl+Shift+U - podkreślenie

Jak wrócić do starych, dobrych, jakże polskich Ctrl+B, Ctrl+I i Ctrl+U? ;) Jak zmienić te skróty klawiszowe? :)

środa, 22 września 2010

Growbox

Dzisiaj gierka zręcznościowo-logiczna ;)

Sterujemy kwadratem, a naszym zadaniem jest pożarcie wszystkich kropek na planszy. Uwaga - apetyt (a raczej nasz kwadrat) rośnie w miarę jedzenia, więc główny problem polega na wymyśleniu jak się nie zaklinować w labiryncie ;)

Prosta, relaksująca gra :)

poniedziałek, 20 września 2010

"Failed to load Main-Class ..." i NetBeans

Ostatnio pracując z malutkim projektem w NetBeans w pewnym momencie świeżo zbudowany plik JAR uraczył mnie komunikatem:

Failed to load Main-Class manifest attribute

Po krótkim guglaniu dowiedziałem się, że najczęściej taki komunikat dostają osoby, które do pisania programów wykorzystują tylko javac i cat i zapominają umieścić w pliku JAR plik manifest.mf. Proponowane rozwiązanie: użyj jakiegoś IDE, takiego jak Eclipse. Taaaa....

W JARze budowanym przez NetBeansa znajdował się wspomniany plik manifest.mf, ale nie mówił on która klasa w pliku jest główną. Przyczyną takiego błędu w tym IDE jest utworzenie projektu "class library", a nie "java application" - tak brzmi oficjalna wersja. Ale przecież 10 minut temu to jeszcze działało i było założone jako "java application".

Co ciekawe, pod samym NetBeansem cały projekt się uruchamiał, miał wybraną klasę główną itd., itp. Co poszło nie tak?

wtorek, 14 września 2010

Farbrausch & Vacuum - fr-049: of spirits taken

Dawno nie było demosceny na blogu :) Dzisiaj zamiast poligonów, shaderów i grafiki 3D upchanej w 64kB klimatyczna produkcja w komiksowym stylu.

"of spirits taken" to zaproszenie na Breakpoint 2006. Podobnie jak przy innych zaproszeniach (np. "Masagin", czyli zaproszenie na nvision 08) Farbrausch porzuca typowo demoscenowo-programistyczne techniki na rzecz klasycznej animacji.

poniedziałek, 13 września 2010

Dzień Programisty

Tak, co roku będę składał życzenia ;)

Bo w sumie co roku pojawia się coś nowego :) Np. dzisiaj książki informatyczne w Helionie z okazji 256. dnia roku można kupić z 20% rabatem ;)

Dobra, ale dlaczego piszę o tym temacie ponownie? Ponieważ od zeszłego roku Dzień Programisty to oficjalne święto w Rosji. Tak, oficjalne.

sobota, 11 września 2010

Shift 3

Dzisiaj kolejna gra logiczna z serii Shift.

Rozpoczynając rozgrywkę można całkiem słusznie mieć uczucie deja vu - pierwsze, treningowe poziomy są wręcz identyczne jak w części pierwszej - oczywiście do pewnego momentu...

środa, 8 września 2010

Operator indeksowania w C++

Czyli praktyczne zastosowanie tego, co już wiemy o const ;)

Załóżmy że potrzebujemy przeciążyć operator indeksowania (czyli []) dla swojej klasy. Weźmy na warsztat prosty przykład, bez żadnych szablonów itd.:

class MyArray
{
public:
  explicit MyArray(const int size) : arr_size(size)
  {
    p_arr = new double[arr_size];
  }

  ~MyArray()
  {
    if (p_arr)
    {
      delete [] p_arr;
    }
  }

  // i także konstruktor kopiujący i operator przypisania ...

private:
  double* p_arr;
  const int arr_size;
};


Chcemy móc korzystać z operatora [] do wyciągania elementów tablicy - dopisujemy więc w części publicznej klasy:

double operator[](const int idx)
{
  if (idx >= 0 && idx < arr_size)
  {
    return p_arr[idx];
  }
  throw std::invalid_argument("idx");
}


Problem pojawia się kiedy chcemy wykorzystać naszą klasę w następującym kodzie:

MyArray m = MyArray(5);
m[0] = 3.14;


Bum, błąd kompilacji. Gdzie jest nasz błąd?

poniedziałek, 6 września 2010

Słynne gitary domowej produkcji

Niektórzy sławni gitarzyści sami zbudowali swoje instrumenty - często gitary te stały się sławne, podobnie jak właściciel. Przyjrzyjmy się paru egzemplarzom - oto odliczanie TOP 3.

3. Gitary Rona Jorzombka

Ron Jarzombek to średnio-znany gitarzysta, popularny głównie w kręgach słuchaczy metalu progresywn-technicznego - dzięki zespołom Watchtower i Spastic Ink. Ron zasługuje na uwagę nie tylko dzięki umiejętnościom technicznym, ale też dlatego, że sam buduje swoje gitary, wykorzystując części z innych instrumentów.

Na specjalną uwagę zasługuje poniższa gitara:


Dlaczego? Kiedy Ron jechał w trasę koncertową do Japonii mógł zabrać dwie sztuki bagażu. Miał parę możliwości spakowania się:

1. Wziąć swoją główną gitarę, jako drugą walizkę ciuchy, ale nie mieć zapasowej gitary.
2. Zabrać dwie gitary i grać nago.
3. Wymyślić coś innego.

Instrument ze zdjęcia powyżej to efekt właśnie punktu 3. Gitara ta została przystosowana do szybkiego montażu i demontażu, a dzięki niewielkiemu korpusowi mogła jechać w walizce razem z ciuchami.

Więcej o gitarach Rona: http://www.ronjarzombek.com/gtrs.html

sobota, 4 września 2010

Java i http://

Kiedy usłyszałem pytanie z pewnej rozmowy kwalifikacyjnej stwierdziłem: "to jest totalnie jutro na moim blogu" :)

Pytanie jest proste: czy poniższy kod napisany w Javie się skompiluje?

public class HttpTest {
  public static void main(String[] args) {
    System.out.println("Hi!");
    http://www.java.com
    System.out.println("Hello!");
  }
}


Pogrubiona linijka to ta, której tak naprawdę dotyczy pytanie ;)

czwartek, 2 września 2010

Sling Jumper

Jeżeli ktoś lubi dopracowane graficznie i dźwiękowo gry, to dzisiaj propozycja nie dla niego ;)

Sling Jumper fajerwerków nie oferuje, za to wciągającą rozrywkę na pewno ;) Sterujemy kulką, która odbijając się od umieszczonych na planszy "proc" musi złapać wszystkie wymagane monety i dotknąć zielonej kulki ;)