Strona główna Kontakt Jogger

Bazylowy Jogg

O makach, życiu i innych pierdołach

DISKLEJMER

Chwilowo brak disklejmera :P

-- Bazyl

Żeby nie było, że się obijam

XCode działa niemal non stop. Oto jak moje biurko teraz wygląda:

Bazylek przy pracy

2 komentarze. Poziom: 1; Kategorie: Programowanie ; 30 września 2007 17:32:53.

Objective-C i prywatne metody

Doskonale zdaję sobie sprawę, że sprzedaję truizmy, ale czasem początkującym programistom tego języka może się to przydać. Bo przecież... jak mieć do cholery prywatne metody w klasie języka Objective-C? Przecież słowa kluczowe @public, @protected czy @private są słowami kluczowymi, których da się użyć tylko w kontekście atrybutu.

A co z metodami?

Z pomocą przychodzi nam pewna zabawka tego języka, czasami określana mianem konkretyzacji. Nawet nie wiem, czy ja nie zmyśliłem tej nazwy, więc nie będę ściemniał. Sprzedam jedynie ideę.

Czasami okazuje nam się, że istnieje klasa, która spełnia prawie wszystkie nasze oczekiwania... poza jednym na ten przykład. Potrzebujemy więc dorzucić do klasy dodatkową metodę, ale nie mamy dostępu do jej źródeł. Z drugiej strony chcemy tę metodę dodać tylko w jednej części naszego kodu, a nie wszędzie. Jak to zrobić?

Załóżmy, że klasa, którą chcemy poszerzyć nazywa się NSSomeClass a metoda, jaką chcemy dorzucić to screwYou;. Wykorzystywać będziemy ją tylko w kontekście jednej jednostki kompilacji (pliku, jakby ktoś nie wiedział) przy implementacji innej klasy.

Zatem w pliku przed implementacją czegokolwiek dorzucamy taki kawałek:

@interface NSSomeClass (AdditionalMethod)

- (void)screwYou;

@end

@implementation NSSomeClass (AdditionalMethod)

- (void)screwYou
{
    NSLog(@"Screw You!\n");
}

@end


Jak łatwo zauważyć dorzuca to dodatkową metodę (konkretyzuje klasę pod nazwą AdditionalMethod), a potem to implementuje.

Chyba łatwo zauważyć, że można to także zrobić w całości ze swoją klasą i najzwyczajniej w świecie dorzucić prywatne metody już w jednostce kompilacji, a nie pliku nagłówkowym?

W sumie wychodzi to całkiem fajnie, bo prywatne metody są tak prywatne, że nawet nie figurują w nagłówku :D

2 komentarze. Poziom: 1; Kategorie: Programowanie ; 29 września 2007 11:40:31.

Z cyklu durnot

Idąc za Jajcusiem i Patrysem, przedstawiam swoje wyniki:

NerdTests.com says I'm a Cool Nerd King.  What are you?  Click here!









3 komentarze. Poziom: 1; Kategorie: Pieprzenie ; 29 września 2007 01:03:45.

Test Driven Development pod Maczkiem

Ostatnio jest niewyobrażalne halo na punkcie programowania dyktowanego testami. Nie powiem, w wielu przypadkach się to przydaje. Na przykład w moim - pisząc frameworka chcę mieć ładne testy regresji i pilnować, żeby nic się przy nowych dodatkach nie schrzandoliło. I niekoniecznie chcę od razu cały kombajn aplikacji do tego, którą chcę pisać później.

Chłopaki z Apple postarali się dostarczyć magiczne coś, co się nazywa OCUnit. Kombajn, którego się tylko karmi klasami do testów i tyle. Wystarczy dodać projekt tego typu, pakować testy i patrzeć jak się ładnie testuje.

Wyczytałem na ten temat mnóstwo dobrego, ale osobiście stwierdzam, że jest to straszliwe badziewie. Ten projekt nie produkuje aplikacji tylko tzw. Bundle. W efekcie znaczy to, że żeby debuggować niewychodzący test trzeba się gimnastykować, czego nie znoszę przepotwornie.

No nic. Pozostaje mi zaimplementowanie własnego środowiska testującego. Zajęło mi to tylko godzinkę, ale efekt jest taki, jaki chciałem.

Na pohybel z tym co wymyślił te durnowate OCUnit!

1 komentarz. Poziom: 0; Kategorie: Cocoa Mac OS X Programowanie Technikalia ; 27 września 2007 16:07:14.

Cocoa i wątki

Przez dłuższy czas zastanawiałem się, czy nadal używać POSIXowych wątków w swojej bibliotece, czy rzucić się na jakieś ciekawsze zastosowanie oryginalnych wątków Cocoa.

Dokumentacja na stronach Apple jest trochę lakoniczna, a i gugiel nie do końca pomaga. Zdecydowałem się więc rzucić trochę światła na ten banalniacki mechanizm.

Żeby odpalić nowy wątek musimy zrobić dwie podstawowe rzeczy. Mieć klasę która będzie miała metodę tego wątku (czyli takie coś, co będzie się pętlić i robić dziwne rzeczy, które są nam potrzebne) oraz użyć magicznej klasy NSThread.

Powiedzmy więc, że mamy klasę MojaKlasa i w niej metodę metodaWatku: . Nasza metoda powinna nie zwracać nic i przyjmować tylko jeden parametr typu id. Generalnie rzecz biorąc jest to strasznie podobniackie do funkcji puszczanej do pthread'a.

Żeby odpalić nasz nowy wątek wystarczy użyć jednej metody z klasy NSThread (metoda klasy, a nie obiektu, więc nic nie musimy tworzyć. Kod banalniacki podaję tutaj:



  MojaKlasa *obiekcik = [[MojaKlasa alloc] init];

  [NSThread detachNewThreadSelector: @selector(metodaWatku:) toTarget:obiekcik withObject: nil];



Co to zrobi? A mianowicie odpali w nowym wątku naszą metodę w podanym obiekcie obiekcik przekazując metodzie nil'a. Jeśli chcemy coś jej przekazać to podajemy to w ostatnim parametrze do metody detachNewThreadSelector:toTarget:withObject.

Mówiłem, że banalniackie :)

Jak zabić wątek? Zakończyć naszą metodę, albo wykonać metodę exit na obiekcie wątku (NSThread).

Oczywiście NSThread ma dodatkowo parę innych metod. Zarówno klasy jak i instancji. Pozwala na zidentyfikowanie w jakim wątku się aktualnie znajdujemy (metoda klasy currentThread) ustawianie priorytetu wątku i tym podobne pierdoły. Ale ogólnie rzecz biorąc całość jest przepotwornie prostacka.

Mimo wszystko spodziewałem się po kolegach z Apple trochę bardziej wyszukanych sposobów. Z drugiej strony oni się bardzo cieszą z tych selektorów, mimo że często dziedziczenie po ładnej klasie było by znacznie fajniejsze.

3 komentarze. Poziom: 0; Kategorie: Cocoa Obj-C Programowanie ; 26 września 2007 14:07:34.

XMPP.Framework - wielki comeback

Ja chyba nigdy nie będę w stanie być słowny.

Tym razem postaram się po raz kolejny. Projekt iTalk'a nadal w powietrzu, czeka nieustannie, aż skończę XMPP.Frameworka do jako takiej sytuacji, żeby można było przynajmniej gadać normalnie.

I chyba w końcu prawie mi się to udało. Wszystko co miałem przepisałem praktycznie od zera. Zamiast swoich rozwiązań XMLowych użyłem NSXMLElement. Ponieważ od Tigera również jest libsasl, jego również tam znajdziecie, zamiast moich wypocin, które mogą być pełne wad. Oczywiście wziąłem do siebie ideę "KISS". Podszedłem do sprawy również na tyle inteligentnie, że najpierw zaprojektowałem co chcę zrobić. Efekt to doxygenowa dokumentacja interfejsów wersji 0.1. I trochę moich prywatnych wypocin jak co zrobić pod spodem.

Przy okazji podszkoliłem już mój Objective-C na tyle, że nauczyłem się pisać metody prywatne (korzystając z ładnego ukrywania rozszerzeń), co też odśmieciło kod.

Pod spodem oczywiście Expat. Jestem zadowolony. Zaczyna działać. A jeśli będzie tak dobrze, jak już wygląda, to niebawem wersja ta wyjdzie i będę mógł dołożyć jakiś interfejs graficzny na szybko :)

Ale nic nie obiecuję. Nie wychodzi mi to najlepiej.

5 komentarzy. Poziom: 1; Kategorie: Cocoa Mac OS X Obj-C Programowanie ; 24 września 2007 16:20:38.

Chudnięcie

Moja mysza bardzo długo namawiała mnie na "zrobienie czegoś z rosnącym brzuchem". Było to na tyle upierdliwe, że w końcu dla świętego spokoju postanowiłem ulżyć jej w cierpieniach. Na prawdę nie wiedziałem co czynię...

Od wspólnego znajomego (podczas naszego ostatniego pobytu w Polsce) dostaliśmy kartkę z rozpisaną specjalną sekwencją ćwiczeń o dźwięcznej nazwie "Areobicznej Szóstki Weidera".

Po entej z rzędu rozmowie na temat mojego sadła usiadłem i rozpocząłem zabawę.
Było ciężko. Naprawdę ciężko. Pod koniec dnia ćwiczeń byłem wyczerpany. Wiadomo jednak, że na coś takiego należy się przygotować. Niećwiczone mięśnie będą boleć.

To na co nie byłem przygotowany, to fakt, że każdego następnego dnia będzie jeszcze gorzej. Boli przepotwornie! W połowie ćwiczeń z wysiłku znoszę jajko, pod koniec myślę już tylko jak szybko umrzeć. Ale przeżywam.

Dziś jest dopiero 6sty dzień ćwiczeń (z 42). Rano wstałem i zapiąłem się paskiem na nową dziurkę.. znacznie ciaśniej. Zupełnie naturalnie, bez żadnego ściskania. Ze zdziwienia, pobiegłem na wagę.

Schudłem pięć kilogramów... W TYDZIEŃ!!!

Teraz wiem, że będę ćwiczyć. Mimo że boli. Bo ciekawość w jakim stanie będzie mój brzuch pod koniec serii jest znacznie silniejsza od tego bólu.

42 komentarze. Poziom: 0; Kategorie: Batalie Ogólne ; 22 września 2007 19:18:30.

Od nowa się

No i zaczęło się. Szukam nowej pracy.

Ofert z Londynu, które mnie interesują jest przerażająco mało, więc dopiero zobaczymy jak to będzie.

Ech, przydała by się jakaś firma programująca na maczkach. Ale za cholerę takich tu znaleźć nie mogę. Smuggi? Nie szukają u Ciebie ludzi? :)

5 komentarzy. Poziom: 0; Kategorie: Ogłoszenia Pieprzenie ; 18 września 2007 12:23:58.