Skróty klawiszowe w Eclipse – szybka nauka

posted on Kwiecień 28th, 2009 ·

Zawsze miałem problem z nauką skrótów klawiszowych w dużych środowiskach programistycznych typu Eclipse, czy NetBeans. Gdy skrótów jest zbyt wiele, ciężko jest zapamiętać więcej niż kilka z listy. Z pomocą przychodzi jednak plugin MouseFeed – jeśli użyjesz skorzystasz z jakiejś funkcji myszką, program podpowie Ci, w jaki sposób można wykonać dokładnie to samo z klawiatury. Podpowiedzi udzieli w sposób dość dyskretny – nie przeszkadza, jeśli wykonanie czegoś myszką było rzeczywiście zamierzone. Największym plusem takiego rozwiązania jest to, że nie uczysz się skrótów, których nigdy nie użyjesz, lecz tych, których często używasz. Szkoda tylko, że plugin nie wszystko wyłapuje (warto czekać na aktualizacje), jednak i tak ogromny plus dla autora za pomysł i jego realizację.

MouseFeed Eclipse plugin - skróty klawiszowe (shortcuts) w Eclipse

MouseFeed Eclipse plugin - łatwa nauka skrótów klawiszowych (shortcuts)

→ 2 CommentsTags: Programowanie

Eclipse i Java Micro Edition (JME), czyli zabawy z komórkami – krok po proku

posted on Kwiecień 27th, 2009 ·

Napisanie pierwszego programu na komórkę w JME (kiedyś J2ME) może być proste, pod warunkiem, że mamy dobre środowisko. Nie da się bowiem pisać programu, nie mając chociażby emulatora komórki pod ręką – najlepiej zintegrowanego z środowiskiem programistycznym (IDE). Wpis ten stanowi krótki poradnik dla osób, które chciałyby napisać swój pierwszy program w Javie ME na komórkę przy użyciu Eclipse.

Najpierw należy zainstalować pakiet WTK – Sun Wireless Toolkit. Zawiera on między innymi emulatory. Można go pobrać tutaj, klikając przycisk, który znajduje się pod koniec strony.

Teraz uruchom swojego Eclipse’a (jeśli go nie masz – pobierz Eclipse dla JSE i JDK). Przejdź do Help -> Software updates -> Available software -> Add site i podaj adres: http://download.eclipse.org/dsdp/mtj/updates/0.9/stable. Na liście pojawi się Mobile Tools for Java (MTJ) – zainstaluj wszystkie pakiety.

Musimy teraz wskazać ścieżkę do emulatorów oraz innych narzędzi. W tym celu, po restarcie Eclipse’a przełącz się na perspektywę Java ME (View -> Open perspective -> Other -> Java ME) oraz przejdź do ustawień Windows -> Preferences -> Java ME -> Device Management -> Import -> Browse i wskaż ścieżkę, gdzie zainstałowałeś WTK. Po przeszukaniu katalogu, na liście powinny się pojawić cztery emulatory – zaznaczamy wszystkie i klikamy Finish -> OK.

Teraz możesz już stworzyć swój pierwszy projekt w Java Micro Edition – File -> New -> MIDlet project. Gdy utworzysz nową klasę midletu – pamiętaj, ażeby w Application Descriptor -> MIDlets dodać ją na listę. W innym przypadku program nie uruchomi się na komórce. Ja tego nie wiedziałem i spędziłem dwie godziny na szukaniu przyczyny. :-)

→ 2 CommentsTags: Java · Programowanie

EasyCall.pl to lamerzy

posted on Luty 13th, 2009 ·

Kilka dni temu musiałem wykonać dość długi telefon do Niemczech. Był to więc dobry moment na założenie sobie VoIP-a. Znajomy polecił mi EasyCall.pl, gdyż jest ich klientem od roku i nie narzeka.

Jako, że jestem posiadaczem telefonu Nokia E51 z obsługą telefonii internetowej SIP, chciałem z tego zrobić użytek. Nie chcąc kupować usługi w ciemno, najpierw przeszukałem Internet w poszukiwaniu słów kluczowych EasyCall oraz Nokia E51. Znalazłem kilka instrukcji, jak skonfigurować telefon i podziękowania innych użytkowników, że konfiguracja działa. Uznałem więc, że mogę kupić usługę od EasyCall.

Niestety, okazało się, że żadne z ustawień dostępnych w Internecie nie działało. Na stronie internetowej EasyCall zaś nic nie ma na temat konfiguracji telefonów z obsługą SIP. Skontaktowałem się więc telefonicznie z Biurem Obsługi Klienta. Pan zasugerował, abym wysłał SMS-a Premium (2,44 zł), a otrzymam dane do konfiguracji. Jak to, za dane do konfiguracji muszę jeszcze dodatkowo płacić? Odpowiedziałem więc, że nie mam zamiaru wysyłać płatnych SMS-ów. Pan odesłał mnie do formularza kontaktowego na stronie mówiąc, że w odpowiedzi otrzymam dane do konfiguracji.

Zgodnie z obietnicą otrzymałem dane do konfiguracji, jednak kilka pól było dla mnie niejasne:

Publiczna nazwa użytkownika: sip:nazwa@sip.easycall.pl
Nazwa użytkownika: nazwa sześciocyfrowa
Hasło: hasło szesciocyfrowe

Co to jest nazwa? I czym są nazwa sześciocyfrowa i hasło sześciocyfrowe? W moim profilu na stronie nie ma takich informacji. Wysłałem więc kolejne zapytanie, czym są te dane, a Pan udzielił mi informacji, że poznam te dane, dopiero gdy doładuję swoje konto.

Konto doładowałem kwotą 15 zł. W zakładce “Moje konto” znalazłem nazwę użytkownika oraz hasło – obydwa sześciocyfrowe. Uzupełniłem konfigurację SIP, za nazwę wpisując swój login (nowaker) zaś za nazwę sześciocyfrową i hasło sześciocyfrowe nowo poznane dane.

Próba połączenia się z testowym numerem 904 wypadła pozytywnie. Dzwonię więc na telefon domowy rodziców, ale wita mnie błąd o treści Adres nie w użyciu. Idzie więc kolejny do BOK-u z pytaniem, aby upewnić się, że nazwa oznacza nazwę użytkownika (nowaker). Odpowiedź brzmi, że nazwa to nazwa sześciocyfrowa. No ludzie! Dlaczego jedna rzecz nazywana jest różnie? Poprawiłem…

Nadal nie działa. Tym razem wita mnie komunikat Błąd połączenia. Zgodnie z tradycją, wysyłam kolejne zgłoszenie do BOK-u. Otrzymuję odpowiedź, iż wysyłanie ID musi być włączone. Niestety, cały czas było. No to kolejny e-mail. Odpowiedź brzmi, iż mam wysłać SMS Premium.

Konkluzja całej sprawy brzmi EasyCall to lamerzy.

  • brak jakichkolwiek danych nt. konfiguracji telefonów na ich stronie internetowej
  • wymuszanie ponoszenia dodatkowych kosztów
  • niejednoznaczne instrukcje przesyłane e-mailem
  • poroniony system ticketów – za każdym razem trzeba tworzyć nowy
  • strona internetowa, po której nawigacja to koszmar

Nie polecam.

→ 14 CommentsTags: Ogólne

Słów kilka o linkach bezpośrednich i SEO

posted on Luty 10th, 2009 ·

Bycie developerem to nie tylko tworzenie stron, ale także promocja. Przez promocję rozumiem pozycjonowanie serwisów tak, żeby osoby szukające informacji przez wyszukiwarkę trafiały do mnie. Niestety, w sieci jest na tyle dużo spamu, że samo budowanie dobrych, merytorycznych i przydatnych serwisów to połowa sukcesu.

Pozycjonowanie stron jest koniecznością. Próbowałem różnych technik. Umieszczałem linki w katalogach, zamieszczałem słowa kluczowe w artykułach, dodawałem komentarze na forum i blogi z linkiem do siebie, optymalizowałem META. Najlepsze rezultaty dawały linki bezpośrednie.

Stąd też wpadłem na pomysł stworzenia LinkBazar. Jest to platforma, na której zachęcam do handlu linkami bezpośrednimi. Współpracujemy w ramach programu partnerskiego z serwisem LinkLift. Oczywiście, złośliwi mogą powiedzieć, że nasza strona to fake – przykrywka programu partnerskiego. Nic bardziej mylnego. A oto moje argumenty.

  1. Zarejestrowałem wszystkie swoje serwisy w LinkLift i występuję zarówno jako reklamodawca, jak i reklamobiorca. I stąd są niezłe pieniądze.
  2. Na LinkBazar wprawdzie zamieściłem linki referencyjne i za poleconych użytkowników dostaję pieniądze, ale ważniejsze są dla mnie efekty pośrednie.
  3. Efekt pośredni jest taki, że przybywa nowych serwisów zarejestrowanych na platformie. Dzięki temu powiększa się baza oferentów miejsca reklamowego i potencjalnych klientów. Serwisy te są zazwyczaj pokrewne tematyczne (wszak osoby rejestrowały się z mojego polecenia i były na mojej stronie o takiej, a nie innej tematyce). Dzięki temu mam gdzie się reklamować i mam komu sprzedawać linki.
  4. Największym działem w serwisie jest baza artykułów SEO. Przez 5 lat nabrałem doświadczenia w pozycjonowaniu stron i dzielę się nim z innymi.

Czwarty argument jest dla mnie bardzo istotny. Być może wiedza, którą przekazuję w artykułach, nie jest rewolucyjna dla profesjonalistów. Ale początkujący z pewnością zyskają. A nawet profesjonaliści czasem znajdą ciekawe rzeczy, które wynikły w trakcie mojej pracy przy pozycjonowaniu stron w postaci case studies.

Skoro już jestem przy artykułach SEO, to ostatnio pojawiły się dwa nowe. W artykule Linki tekstowe – jak stworzyć dobry i skuteczny link piszę o linkach od podstaw – jak wygląda link od strony technicznej i jakie funkcje pełni na stronie. Najważniejszy jest oczywiście marketing oraz pozycjonowanie. Zastosowanie się do wskazówek zawartych w tekście może pomóc osiągnąć wysokie wskaźniki CTR i poprawić pozycję strony w wyszukiwarce. W drugim artykule PageRank, algorytm opracowany przez twórców Google jest podstawą wywodów na temat zasadności stosowania algorytmu wartościujących strony. Przedstawiam alternatywne algorytmy – Trust Rank, Alexa Rank, HITS. Piszę o wadach i zaletach.

Kończąc ten wpis, zachęcam do przeczytania moich artykułów na ten pozycjonowania.

→ No CommentsTags: Internet

Walentynki z komputerem

posted on Luty 2nd, 2009 ·

Współstudenci z mojego wydziału wpadli na pomysł, aby wziąć udział w konkursie I Love Milka. Konkurs polega na tym, że internauci oddają głosy na poszczególne walentynki na stronie I Love Milka. Walentynka zwycięzcy zostanie umieszczona w miejscu na reklamy na przystanku autobusowym niedaleko Politechniki. Walentynka brzmi następująco:

Kocham mój komputer,
tylko on mnie
nigdy nie zawiódł ;)
- Majckel z ETI :*

Aktualizacja: Milka skasowała tę walentynkę, uznając ją za niezgodną z tematyką ;) Musieliśmy stworzyć nową i zacząć wszystko od początku. Treść obecnej:

Kocham Cię Myszko.
Tylko Ty jesteś dla mnie
wystarczająco czuła :*
- niETIkalni

Przyłącznie się i zagłosujcie. ;-]

→ No CommentsTags: Ogólne

Narzędzia dla developera choć nie tylko

posted on Styczeń 31st, 2009 ·

Niedawno uruchomiłem stronkę o enigmatycznej nazwie “Narzędzia developera” ;-) Ma to być zbiór różnorodnych narzędzi typu generator md5/sha1, enkoder/dekoder base64, licznik timestampów itp. Zdaję sobie sprawę, że takich stron jest w sieci pełno, jednak ja chciałbym zebrać wszystkie narzędia w jedno miejsce – takie jest właśnie założenie strony devtoolkit.net.

Teraz dostępne są cztery narzędzia:

Jakie narzędzia jeszcze umieścić? Bardzo chętnie wysłucham propozycji.

→ 6 CommentsTags: Ogólne

Zapisz położenie ikon na pulpicie

posted on Styczeń 23rd, 2009 ·

Denerwuje Cię, że Windows czasami resetuje Ci położenie wszystkich ikon pulpitu?

  • pobierz ten plik
  • skopiuj layout.dll do katalogu windows/system32
  • uruchom layout.reg, który doda kilka wpisów do rejestru

Teraz klikając PPM na ikonie systemowej (np. Mój komputer) dostępne będą dwie opcje, które niejednokrotnie uratują nam tyłek :)

Zapisanie położenia ikon na pulpicie

Źródło:

  • http://www.msni.it/faqreg/saveicon.html

→ 2 CommentsTags: Systemy operacyjne

Przychody za reklamę w Internecie – liczby

posted on Styczeń 20th, 2009 ·

Niedawno Tomek zamieścił na blogu Polish Words krótkie podsumowanie zysków z reklam na jego blogu. Krótkie podsumowanie, przeliczone:

  • zagraniczna reklama kontekstowa – 125 zł / 100 000 odsłon
  • polska reklama kontekstowa – 33,30 zł / 100 000 odsłon
  • reklamy partnerskie (bannery?) – 4,54 zł / 100 000 odsłon
  • programy partnerskie – 100 zł / 100 000 odsłon

Trochę się zdziwiłem relatywnie wysokimi wynikami z reklam kontekstowych, a niskimi z programów partnerskich. U mnie zagraniczna reklama kontekstowa przynosiła zyski na poziomie 63 zł / 100 000 odsłon, zaś polska – 13,40 zł. Chciałbym tylko dodać, iż moje zyski nie biorą się z blogów, tylko z „normalnych” stron internetowych.

Przypatrzmy się programom partnerskim, które najbardziej cenię. Tutaj niestety nie potrafię określić zysku za każde 100 000 wyświetleń. Według mnie zysk wcale nie zależy tutaj od odwiedzalności.

Linki tekstowe

W programie sprzedaży płatnych linków tekstowych uczestniczy dziewięć moich różnych stron. Uczestniczę również w programie partnerskim, pozyskując nowych uczestników do tego programu poprzez LinkBazar.pl. Działalność ta przynosi dość spore zyski. Listopad zakończył się wynikiem 174,20 zł, zaś grudzień 204,20 zł. W aktualnościach LinkBazar na bieżąco informuję o osiąganych zyskach, aby zachęcić innych do uczestnictwa.

Otrzymywane wynagrodzenie nie zależy tutaj od ilości odsłon danej strony, lecz (w ogólności) od jego PageRanku. Wbrew pozorom PageRank strony nie jest zależny liniowo od ilości odsłon danej strony. W swoim zapleczu posiadam strony o relatywnie wysokich PR (3/10) i bardzo małej odwiedzalności (np. 20 wizyt dziennie), jak i całkowicie odwrotnie.

Program partnerski mBank

Konta bankowe w mBanku reklamuję raz na kilka miesięcy w malingach do użytkowników portalu geograficznego GeoZone. Przyniosło to średni zysk 400 złotych na około 100 000 wysłanych reklam.

Reklamy wysyłałem różne – zarówno konto bankowych, jak i sieci komórkowej mBanku. Zdecydowanie najlepsze wyniki przynoszą konta bankowe; telefonią zaś nikt się nie interesuje.

Podsumowanie

Widać jak na dłoni, że najważniejsze przychody generują mądre programy partnerskie. Wiadomo, iż nie każdy program partnerski sprawdzi się na konkretnej stronie. Cytując Tomka, aby zarabiać, najpierw trzeba się dużo napracować. Nie każdy program partnerski się nada, jednak jeśli nie spróbujesz – nie dowiesz się, czy jest dochodowy.

→ No CommentsTags: Ogólne

Integracja Open Power Template 2.0 z KohanaPHP 2.2 / 2.3

posted on Styczeń 18th, 2009 ·

Open Power Template w wersji 2.0 ma się coraz lepiej. Niedawno wyszła jego pierwsza wersja beta. Wraz z wersją dev8 zdecydowałem się wykorzystać OPTv2 w produkcji, ponieważ składnia została już zamrożona – jeśli wierzyć zapewnienion Zyx’a ;-).

Odpowiedni moduł do integracji napisałem już wcześniej, jednak dopiero dzisiaj go publikuję. Tak samo, jak w przypadku modułu dla OPTv1, tak i dla OPTv2 składnia pozostaje zgodna z interfejsem oryginalnego View:

$view = new View('szablon.tpl');
$view->dynamic = 'And this is a dynamic.';
$view->render(TRUE);

Wybór silnika przetwarzania szablonów (natywny KohanaPHP lub OPT) dokonywany jest poprzez rozszerzenie szablonu. Wystarczy do nazwy szablonu dodać rozszerzenie OPT, aby właśnie OPT został użyty do wygenerowania widoku. Rozszerzenie można oczywiście określić w pliku konfiguracyjnym.

Moduł OPTv2:

Uwaga. W wersji OPT2-beta1 jest mały błąd – OPT wyrzuca błąd typu notice podczas przetwarzania szablonu. Drobiazg, ale KohanaPHP ma domyślnie takie ustawienie, że nawet notice uznawany jest jako błąd (zresztą słusznie). W związku z tym mój moduł używa domyślnie OPT2-dev8. Dla tych, którzy chcą używać OPT2-beta1:

  • usunąć katalog vendor/opt2
  • zmienić nazwę katalogu vendor/opt2-beta1 na vendor/opt2
  • zmienić error_reporting w pliku index.php na E_ALL ^ E_NOTICE

Stworzyłem też moduł obsługujący jednocześnie OPTv1 oraz OPTv2. Dla nowych użytkowników OPT nie jest on zalecany. Ja z niego korzystam, ponieważ szablony dla starszych modułów są napisane w składni OPTv1, zaś nowsze w OPTv2. Przepisać te dwieście plików do OPTv2? Nie, dziękuję. ;-)

Moduł OPTv1/v2:

→ 14 CommentsTags: PHP · Programowanie

Wprowadzenie do Smalltalka

posted on Styczeń 15th, 2009 ·

Niedawno, w ramach zajęć z przedmiotu Języki programowani na mojej uczelni miałem przyjemność poznać w pełni obiektowy język programowania Smalltalk.

Pierwsze wrażenie

Pierwszym akronimem, który rzucił się do głowy po kilku minutach patrzenia na przykład kodu napisanego w Smalltalku, był wtf ;-) Wszystko przez składnię. Od dziecka mamy tylko styczność z kodami podobnymi albo do Pascala (Ada, Python) albo do C (PHP, Java). Smalltalk raczy nas całkowicie odmienną składnią, zatem aby zacząć cokolwiek w nim pisać, trzeba spędzić trochę czasu na zrozumienie zasad. Zwłaszcza, że polski internet nie powie nam praktycznie niczego mądrego na temat składni Smalltalka.

Wielokat subclass: #Trojkat
        instanceVariableNames: ''
        classVariableNames: ''
        poolDictionaries: ''
        category: 'JezykiProgramowania'!

!Trojkat methodsFor: 'initialize-release'!

        initialize: bok
                "Tworzy trójkąt równoboczny o podanym boku"

                | h |
                h:=bok * 3 sqrt / 2.
                super initialize: 3 name: 'Trojkat'.
                wierzcholki at: 2 put: bok@0.
                wierzcholki at: 3 put: bok/2@h.
        !
!

| t |
t:=(Trojkat new) initialize: 10.

Wyjaśnienie składni

Z góry ostrzegam, iż moje wyjaśnienie składni na pewno nie jest kompletne, ani w 100% poprawne. Przedstawiam tylko własne doświadczenia z poskramiania składni Smalltalka. Przepraszam za słownictwo, które będą używał. Nie będzie ono specyficzne dla Smalltalka, tylko języków spokrewnionych z C++ i Javą.

Poloneza czas zacząć. Zadeklarujmy klasę wielokąt dziedziczącą po klasie bazowej Object.

Object subclass: #Wielokat
        instanceVariableNames: 'wierzcholki nazwa '
        classVariableNames: ''
        poolDictionaries: ''
        category: 'JezykiProgramowania'
!

instanceVariableNames definiuje nazwy wszystkich tzw. „zmiennych wystąpienia”, skądinąd znanych jako properties. classVariableNames odnosi się do zmiennych klasowych, znanych z języka C++ jako statyczne.

Mamy klasę, więc pora na konstruktor.

!Wielokat methodsFor: 'initialize-release'!

    initialize: liczbaWierzcholkow name: nowaNazwa
        "konstruktor tworzy nowy obiekt wielokąta"

        nazwa:=nowaNazwa.
        wierzcholki:=Array new: liczbaWierzcholkow.
        wierzcholki at: 1 put: 0@0.
    !

!

Do metod typu „initialize-release” zaliczają się konstruktory i destruktory. Tajemnicze wykrzykniki zamykają nam sekcje (i czasem też otwierają). Wcięcia kody wykonałem w taki sposób, aby łatwo zrozumieć działanie wykrzyknika. Przypomina on tutaj działanie { i } z języka C. Każde wyrażenie jest zakończone kropką, co jest ekwiwalentem średnika w językach podobnych do C. Poprzez „initialize: liczbaWierzcholkow name: nowaNazwa” zadeklarowaliśmy nową metodę, która przyjmuje dwa parametry – „initialize” oraz „name”. Ciąg znaków w cudzysłowach to komentarz. Dalej napotykamy na „wierzcholki:=Array new: liczbaWierzcholkow”. Tworzymy nowy obiekt typu Array o określonej wielkości. W pierwszym elemencie tablicy umieszczamy współrzędne x oraz y wierzchołka (x@y). W Javie byśmy napisali wierzcholki[0] = new Point(0, 0).

!Wielokat methodsFor: 'accessing'!

    nazwa
        "Podaje nazwę wielokąta"
        ^nazwa
    !

    nazwa: nowa_nazwa
        "Ustawia nazwę wielokąta"
        nazwa:=nowa_nazwa
    !

!

Metody typu „accessing” to metody dające dostęp do domyślnie prywatnych zmiennych wystąpienia (properties). Metoda „nazwa” bez parametrów zwraca nam nazwę figury – wartości zwracamy operatorem ^. Dodanie parametru przy wywołaniu metody „nazwa” spowoduje ustawienie nowej nazwy.

Mamy już klasę figura, pora więc stworzyć trójkąt, która dziedziczy implementację po wielokącie.

Wielokat subclass: #Trojkat
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'JezykiProgramowania'
!

!Trojkat methodsFor: 'initialize-release'!

    initialize: bok
        "Tworzy trójkąt równoboczny o podanym boku"

        | h |
        h:=bok * 3 sqrt / 2.

        super initialize: 3 name: 'Trojkat'.
        wierzcholki at: 2 put: bok@0.
        wierzcholki at: 3 put: bok/2@h.
    !

!

Zapis | h | oznacza deklarację zmiennej lokalnej o nazwie „h”. Nie jest to niestety obliczenie wartości bezwzględnej z liczby h ;)

!Trojkat methodsFor: 'actions'!

    pole
        "Liczy pole trójkąta równobocznego"
        ^(wierzcholki at: 2) x squared * (3 sqrt) / 4.
    !
!

Metody typu „actions”, to wszystkie typowe metody, które wykonują dla nas jakieś czynności i zwracają jakiś wynik. Zapis liczba squared w Smalltalku oznacza to samo, co liczba.squared() w językach C-podobnych.

Przy okazji należy też zwrócić uwagę na priorytety operatorów. W Smalltalku nie działają one zgodnie z regułami matematyki, lecz w ogólnym przypadku od lewej do prawej (gwoli ścisłości – istnieją jakieś priorytety, jednak nie wiadomo mi zbyt wiele na ich temat).

Nie jest to jednak nielogiczne. Bierze się to stąd, że dodawanie również jest metodą. liczba:=2 + 3 * 4 można by przełożyć taki pseudokod: liczba = 2.dodaj(3); liczba = liczba.pomnoz(4);.

Zapis 3 sqrt nakazuje liczbie 3 obliczenie swojego pierwiastka i zwrócenie go. Widać więc, iż „zwykły int” jest również obiektem. Zapis (wierzcholki at: 2) x oznacza nic innego, tylko wierzcholki[1].x. Zrozumienie tego zapisu zajęło mi prawie godzinę ;-)

Teraz dodajmy działania na naszym trojkącie.

!Trojkat methodsFor: 'arithmetic'!

    + figura
        "Dodaje dwie figury w sensie pola"

        | p b |

        p:=self pole + figura pole.
        b:= (4 / 3 * p * (3 sqrt)) sqrt.

        ^(Trojkat new) initialize: b.
    !

    - figura
        "Odejmuje dwie figury w sensie pola"

        | p b |

        p:=self pole - figura pole.

        (p < 0)
            ifTrue:
            [
                p:=figura pole - self pole.
                ^(Trojkat new) initialize: (4 / 3 * p * (3 sqrt)) sqrt.
            ]
            ifFalse:
            [
                ^(Trojkat new) initialize: (4 / 3 * p * (3 sqrt)) sqrt.
            ]
    !

Metody typu „arithmetic” stanowią przeciążenie operatorów arytmetycznych funkcji – dodawania, odejmowania, mnożenia, dzielenia i pewnie innych, których istnienia nie jestem świadom ;) Nie wiem, czy operatory porównania (np. „<”) to również operatory arytmetyczne, czy może inne, ale je również da się przeciążyć. Zapisem (p < 0) nakazujemy obiektowi p porównać się z liczbą 0 (która też jest obiektem). Następnie w zależności od wyniku porównania wykonujemy odpowiednie czynności. W moim przykładzie nie chcę zwracać ujemnej wartości, w związku z czym liczę nową wartość p, odejmując tym razem liczbę mniejszą od większej.

Wypadałoby powiedzieć trochę więcej na temat bloków kodu. Blok kodu zamknięty pomiędzy znaki [ oraz ] to specjalna klasa o nazwie BlockClosure. Dzięki niej można uzyskać współbieżność, jeśli na końcu bloku dodamy słowo kluczowe fork. Tak mówi teoria i pan profesor na wykładzie, jednak mi nie udało się uzyskać tego ;) Pewnie zbyt mało próbowałem albo wykonuję jakiś błąd syntaktyczny.

Dokończmy działania na trójkącie i pokażmy, czy program żyje.

    * figura
        "Mnoży dwie figury w sensie pola"

        | p |

        p:=self pole * figura pole.
        ^(Trojkat new) initialize: (4 / 3 * p * (3 sqrt)) sqrt.
    !

    / figura
        "Dzieli dwie figury w sensie pola"

        | p |

        (figura pole = 0)
            ifTrue:
            [
                ^0.
            ]
            ifFalse:
            [
                p:=self pole / figura pole.
                ^(Trojkat new) initialize: (4 / 3 * p * (3 sqrt)) sqrt.
            ]
    !
!

| t |
t:=(Trojkat new) initialize: 10.
Transcript show: ('Powinno wyjsc cos kolo 43') printString; cr.
Transcript show: (t pole) printString.

Klasa Trascript służy do wypisywania danych na konsolę. Może wygląda troszkę dziwacznie, no ale cóż zrobić. cr odpowiada za znak nowej linii.

Mam nadzieję, że moje amatorskie wprowadzenie do Smalltalka pomoże komuś przełamać pierwsze lody przy poznawaniu tego ciekawego języka.

Odwiedź również:

→ 3 CommentsTags: Programowanie · Ynne