[PHP] Podstawy pisania czytelnego kodu

Piszę ten artykuł, ponieważ zauważyłem, że naprawdę wiele początkujących osób nie zwraca na to najmniejszej uwagi.

Zacznijmy od początku. Być może zastanawiasz się dlaczego trzeba dbać o czytelność kodu?

Podstawową zasadą jaką powinieneś przyjąć jest to, że z kodem będą pracować także inni ludzie, a nie tylko Ty. Może do tego dojść choćby przy udzielaniu pomocy na forum lub pisania projektu przez kilka osób. Wtedy czytelność kodu staje się naprawdę ważna, choć uwierz mi, że w momencie kiedy napiszesz naprawdę dużo kodu, bez zwracania uwagi na jego czytelność, to sam bez problemu się w nim pogubisz.

Komentarze
Po to bozia dała chyba praktycznie w każdym języku programowania możliwość komentowania kodu, żeby z niej korzystać. Jak pewnie wiesz, w PHP mamy 3 rodzaje komentarzy.

// komentarz jednolinijkowy

# inny komentarz jednolinijkowy (wywodzący się z Perla)

/* komentarz
wielolinijkowy
może się ciągnąć
w nieskończoność */

Pamiętaj o tym, aby wybrać jeden sposób tworzenia komentarzy jednolinijkowych. W przeważającej większości używa się komentarza //. Komentarze rozpoczynające się od znaku hash #) są już prawie niespotykane, choć część skryptów wykorzystuje je np. do oznaczania sekcji w plikach konfiguracyjnych.

Wcięcia
Ośmielę się napisać, że jest to najważniejsza kwestia jeśli chodzi o czytelność kodu. Porównaj te 2 przykładowe listingi.

if ($petla == true)
{
foreach ($zmienne as $zmienna) {echo strtolower($zmienna); }
} else {
echo 'nie ma pętli';
}

versus

if ($petla == true) { // w tym wypadku lepiej po prostu if ($petla)
    foreach ($zmienne as $zmienna) {
        echo strtolower($zmienna);
    }
}

else {
    echo 'nie ma pętli';
}

Z ułożenia kodu pokazanego na drugim listingu wynika dużo korzyści. Przede wszystkim na pierwszy rzut oka widać, że mamy do czynienia z dwoma warunkami, z czego w pierwszym z nich zawarta jest pętla foreach. Ważne jest to, aby „głębokość” wcięć przy każdym kolejnym poziomie zagnieżdżenia była jednakowa w całym skrypcie.

Nazewnictwo
Kolejna bardzo ważna kwestia. Tutaj liczy się zarówno sposób zapisywania nazw zmiennych, funkcji, klas, metod itd. jak i język w jakim je zapisujemy. Bardzo wielu początkujących zapisuje zmienne w języku polskim. Ponownie przyjrzymy się dwóm przykładom kodu.

$tablica = array(1, 3, 66);
$napis = ‘To prawda’;

if (count($tablica) == 3)
    echo $napis;
$array = array(1, 3, 66);
$text = ‘To prawda’;

if (count($array) == 3)
    echo $text;

Przyznacie chyba, że dużo logiczniej brzmi sekwencja if count array == 3, echo text niż if count talica == 3, echo napis. Skoro instrukcje oraz wbudowane funkcje w języku PHP są w języku angielskim, to nie ma najmniejszego sensu miksować tego z innym językiem i robić bałaganu.

Tutaj zrobię też krótką dygresję do osób, które w tym momencie pomyślały „ale ja nie znam angielskiego. Nie będę się go uczyć, tylko po to, żeby nazwać kilka zmiennych”. Otóż angielski w każdym języku programowania jest językiem podstawowym. Pomijając to, o czym już mówiłem, czyli to, że wszystkie wbudowane instrukcje i funkcje są nazwane po angielsku, niezaprzeczalnym faktem jest, że dużo więcej materiałów na temat programowania jest właśnie w języku angielskim (choćby większość dokumentacji PHP).

Drugą kwestią jest to jak zapisujemy nazwy zmiennych, klas, funkcji, metod itd. Oto niektóre ze sposobów, przedstawię je na przykładzie zmiennej  o nazwie simple var.

echo $simplevar; // totalnie nieczytelne
echo $simple_var ; // metoda pierwsza
echo $simpleVar; // metoda druga (tzw. camelCase)

Oczywiście, że poza tym mamy jeszcze wiele mniej lub bardziej stosowanych sposobów nazewnictwa – chociażby notację węgierską, jednak temu tematowi można by poświęcić spokojnie cały wpis, a ja chciałem jedynie pokazać przykładowe sposoby nazewnictwa.

Zaletami nazywania w stylu $simple_var, jest to, że wszędzie stosowane są tylko małe litery, a PHP rozróżnia je, jeśli chodzi o nazwy zmiennych.

Podsumowanie
Ten artykuł omawia zaledwie zalążek tematu, jednak być  może po jego przeczytaniu łatwiej będzie Wam tworzyć kod łatwiejszy w zarządzaniu. Pamiętajcie, że ważne jest bycie konsekwentnym w decyzjach (zresztą nie tylko w programowaniu…). Kiedy już zdecydujecie się np. na pisanie zmiennych po angielsku, metodą camelCase, to trzymajcie się tego przez cały skrypt, nie róbcie bałaganu i nie utrudniajcie roboty, tym, którzy będą czytać kod po Was.

Opera i polski słownik

Dla wielu osób zaczynających swoją przygodę z Operą problemem może być to, że cały tekst napisany po polsku jest podkreślany jako niepoprawny. Problem ma bardzo proste źródło – w domyślnie pobranej Operze nie ma polskiego słownika. Można go jednak bardzo łatwo doinstalować. Wszystko co musisz zrobić to:

  1. W momencie gdy w jakimś polu tekstowym tekst po polsku podkreśli Ci się na czerwono, po prostu kliknij prawym przyciskiem myszy i na samym dole menu powinieneś mieć rozwijaną pozycję Słowniki. Wybierz z niej „Dodaj lub usuń słowniki”.
  2. W okienku, które Ci się pojawi, odszukaj słownik Polski, zaznacz go i kliknij dalej, słownik zostanie pobrany.
  3. Zaakceptuj jego licencję (spokojnie, jest na GPL – nie ponosisz żadnych kosztów, ani zobowiązań).
  4. W następnym okienku ustaw słownik Polski jako domyślny i… to tyle :) Żadnego latania po stronach, czy restartu programu tak typowego dla niektórych przeglądarek.

Testowane na wersji, 11.50, jednak jakoś od wersji 10 nie powinno być większych zmian w tej procedurze. Oczywiście po aktualizacji nie trzeba tego powtarzać.

Kultura obrazkowa

Już od długiego czasu widać było w Polsce rosnącą popularność serwisów, w których internauci mogli wrzucić obrazek i dostawić do niego opis. Tak zaczęła się mania na Demotywatory. Gdy JoeMonster zrozumiał, że stało się to niesamowicie popularne, zaczął mnożyć serwisy tego typu dzieląc je powiedzmy ze względu na tematykę. Powstały Komixxy, Mistrzowie, Piekielni, Rodzynki, Student Potrafi i bóg wie co jeszcze… Był to po prostu sposób na pokazanie użytkownikowi jeszcze większej ilości reklam.

Wiele osób przeszła obojętnie nad pojawianiem się nowych serwisów spod skrzydeł JoeMonstera: na Komixxy wchodzili głównie ludzie na przełomie podstawówki i gimnazjum, co było widać doskonale po stale spadającym poziomie humoru na tej stronie.

Wkrótce później stały się popularne serwisy osób trzecich działające dokładnie na tej samej zasadzie (większość na praktycznie nie zmienionej szacie graficznej). Pojawiły się pornodemotywatory czy serwisy typu wiocha.pl niesamowicie często odwiedzane przez uczniów na lekcjach informatyki. Potem popularność zaczęły zyskiwać serwisy, które w zasadzie nie robiły nic innego, tylko powielały treści z serwisów JoeMonstera. Mówię między innymi o Bestach, czy Kwejku.

Dla każdego, kto przeglądając takie serwisy choć trochę myśli, stało się oczywiste, że stale zubożają one poziom humoru zastępując go wymyślnymi mrugającymi napisami. Doszło do tego, że ludzie, aby przekazać jedno zdanie światu, zapisują je w Paincie na obrazku  i wrzucają chociażby na Kwejka. Do tego dochodzi też fakt powtarzania się treści. Mówię nawet nie tyle o dublowaniu treści między wspomnianymi serwisami, bo to oczywiste, ale chociażby o tym, że te same zdania możemy znaleźć w tym samym serwisie w odstępie dwóch stron. Bardziej popularne i chętniej wstawiane na fejsa staje się oczywiście to, które zostało zapisane w bardziej oczojebny sposób. Oczywiście, bo czym byłby obrazek nie zapisany w formie GIF-a z masą ozdobników i brokatem na każdej literze. Oczywiście obrazki te przekazują bardzo ambitne treści.

Po tym krótkim wywodzie widać, że kultura obrazkowa wypiera nie tylko wszystkie serwisy, gdzie mądre (lub częściej głupie) zdanie można napisać, bo teraz, żeby coś było cool musi zostać przedstawione na obrazku, nawet jeśli są to dwa wyrazy. Zastanawiam się kiedy, aby mój blog był cool, będzie musiał być publikowany w formie obrazków?

Sobak skazany na 10 lat ciężkich robót w Minecrafcie.

Będzie to artykuł dość nietypowy, bo pisany przez dwie osoby - mnie i CapaciousCore. Na mocy pradawnego paktu zawartego w dniu dzisiejszym połączyliśmy siły i postanowiliśmy napisać artykuł na temat Minecrafta. Główną motywacją do napisania tego wywodu było wydanie pierwszej "stabilnej" wersji tej gry.

Wprawdzie nie miałem okazji obejrzenia MineCon'u, ale CapaciousCore aka CC podzielił się pewnym przemyśleniem na temat tego wielkiego wydarzenia w dziejach ludzkości:

"Moje pierwsze wrażenie było takie, że Polacy próbowali zawładnąć komentarzami pod filmem na YouTube. Dzięki polskim dzieciom neo przybywało około 50 wiadomości na sekundę, co czyniło komentarze niemożliwe do czytania.

Jeśli chodzi o sam MineCon, to było dużo gadania o niczym, a mało konkretów i właściwej prezentacji gry. Prezenterka moim zdaniem była… szurnięta. W trakcie konferencji puszczono kilka debilnych filmików, które były totalnie oderwane od rzeczywistości. Najwidoczniej Notch i ekipa żyją w swoim świecie, szczególnie udzieliło się to podczas oczekiwania na ostateczną prezentację.".

W Minecrafta zacząłem grać od wersji 1.7.3 i ponownie była to wina CC. Po prostu dostawałem relacje na bieżąco z jego początków gry i stwierdziłem, że sam muszę spróbować. Tak zacząłem odbywanie swojego wyroku w kopalni.

Minecrafta na pewno można nazwać jedną z najlepszych machin do pożerania czasu. Potrafił naprawdę zagiąć czasoprzestrzeń przez co w jednej chwili z 14:00 robiła się 20:30. Były to wzruszające chwile takie jak: ścięcie pierwszego drzewa gołą dłonią (Bruce Lee byłby dumny) oraz stanie z lawą we wiadrze i obserwowanie zachodu kwadratowego słońca. Bardzo miło wspominamy też pierwsze przeniesienie się do Netheru, czyli Minecraftowego piekła. CC w końcu znalazł się w naturalnym środowisku.

Gra jest genialną zabawą, pod warunkiem, że osoby w nią grające mają odpowiedni poziom kreatywności. Osoba pozbawiona wyobraźni znudzi się nią już po chwili albo będzie po prostu powielała gotowe rozwiązania z YouTube'a. Do grania w Minecrafta przyda się też pewna doza inteligencji - przynajmniej jeśli chcemy zacząć bawić się naprawdę rozbudowanymi możliwościami tworzenia układów korzystających z logiki. To sprawia, że wbrew pozorom Minecraft może być świetną platformą do nauki nie tylko logiki, ale też pracy zespołowej wymaganej przy budowaniu złożonych konstrukcji.

Grając z CC stosujemy pewien nieformalny podział. Ja zajmuję się większością rzeczy odpowiedzialnych za porządek na serwerze oraz budowaniem, za to CC uwielbia bawić się w kwadratowego elektryka i plątać się w kablach z redstone. Tylko on potrafi w ciągu 5 minut przemienić ładny budynek w opasany czerwonymi kablami klocek. Przydałaby się jeszcze trzecia osoba (np. biedny student) do obrabiania naszego PGR-u…

Minecraft podczas swojego rozwoju praktycznie przeszedł ewolucję od prostego sandboxa do gry pół-RPG. Jak mówi CC:

"Moim zdaniem rozwój gry poszedł w dziwną stronę. Z jednej strony niepotrzebnie pododawano takie rzeczy jak craftowanie itemów przy pomocy książki, warzenie mikstur i tym podobnych rzeczy. Jednak z drugiej strony jest to kolejne urozmaicenie gry.

Minecraft jest jak pudełko klocków Lego. Łącząc to z kilkoma prostymi narzędziami i wyobraźnią użytkownika możemy tworzyć niesamowite konstrukcje."

Nie grałem w żadną z wersji pre-release poprzedzających wersję 1.0 tak więc z wersji 1.8.1 przeskoczyłem od razu do 1.0. Od razu do głowy przyszło mi kilka przemyśleń na temat poczynionych zmian.

  1. Dużo wilków -  pierwsze co rzuciło mi się w oczy po zespawnowaniu. Dotychczas spotkanie wilka było bardzo trudne, a tutaj wprost mnie otoczyły.
  2. Czerwone róże - od update do 1.8 nie widziałem ich ani razu. Teraz jest ich dużo, nie wiem czy nie więcej niż żółtych kwiatów.
  3. Bagna - jak dla mnie ich wygląd jest lekko skopany. Jest za ciemny i zbyt monotonny.
  4. Grzybowe biomy - niewątpliwie ciekawe urozmaicenie. Patrząc na grzybowe krowy można stwierdzić, że ktoś w Mojangu ćpa coś dobrego.
  5. Dźwięki - w pierwszej chwili bardzo mi się nie podobały, wiem, że to po prostu efekt przyzwyczajenia. Teraz, z dłuższej perspektywy czasu stwierdzam, że nie jest tak źle, aczkolwiek część dźwięków wymaga poprawek (na przykład dźwięki drzwi i skrzyń) Przykładowo fajny jest dźwięk łamanych kości przy upadkach i wszystko byłoby fajnie gdyby nie to, że nasza postać wydaje taki sam dźwięk topiąc się…
  6. Minus w postaci nadal dużej ilości bugów. Krótki komentarz od CC: "Zamiast gonić z premierą na jedną konkretną datę mogli postarać się o poprawienie występujących bugów. Przykładowo Blizzard wielokrotnie przekładał premierę Diablo III, aby poprawić znalezione bugi [Tak na marginesie nie wydali jej do dziś - Sobak]". Moim zdaniem tutaj widać dokładnie minusy robienia tak hucznej premiery i przede wszystkim zapowiadania jej z tak ogromnym wyprzedzeniem.

W wersji 1.0 nadal brakuje mi kilku rzeczy. Dziwi mnie między innymi to, że po dziś dzień nie można sterować bramkami w płotkach (fence gate) za pomocą redstone. Wg mnie nie zaszkodziłaby też możliwość zapalania i gaszenia glowstone za pomocą pyłu redstone.

Ponadto mam jeszcze jedno spostrzeżenie. Wprawdzie nigdy nie bawiłem się w tworzenie pluginów do MC, ale widać wyraźnie, że do bukkita, który udostępnia zmienione API, jest ich dużo więcej, a po drugie do wielu pluginów trzeba doinstalowywać dodatkowe pluginy będące jakimiś nakładkami na API, o Mod Loaderach nie wspominając. Nie świadczy to najlepiej o domyślnym API Minecrafta, choć tu powinien wypowiedzieć się ktoś siedzący w temacie.

I w ten sposób kończymy krótki przegląd naszych opinii o Minecrafcie. Jeśli chcecie się czymś podzielić, to piszcie śmiało w komentarzach ;)

Bug na stronie yoyo.pl

Witajcie, przejdę od razu do rzeczy:

Wczoraj odwiedziłem stronę firmy hostingowej YoYo. Latając po różnych stronach wszedłem na adres http://yoyo.pl/katalog/ Byłem bardzo zdziwiony tym co zobaczyłem na górze owej strony (kliknij na obrazek aby go powiększyć):

Bug na yoyo.pl

Otóż okazało się, że jestem rzekomo zalogowany na konto użytkownika "spinerrabit". Rzecz jasna nigdy nie zakładałem takiego konta, ani się na nie nie logowałem. Na szczęście dla jego posiadacza po kliknięciu w link "Centrum zarządzania" ukazuje się komunikat o wygaśnięciu sesji. Jako, że problem nie wydawał się jednorazową anomalią, bo występował na różnych komputerach i przeglądarkach, toteż postanowiłem poinformować yoyo.pl o całej sprawie. Mail został wysłany wczoraj o 16:30.

Nie spodziewałem się szybkiej odpowiedzi (czy wręcz nie spodziewałem się jej wcale), po poprzednim razie kiedy wysłałem do yoyo.pl maila ze sporządzoną z kolegą listą kilkudziesięciu stron łamiących regulamin. Przyjąłem do wiadomości, że YoYo to jeden z tych hostingów który ma swoich klientów i całą resztę w głębokim poważaniu.

Postanowiłem jednak sprawdzić, czy błąd nie został po prostu usunięty bez powiadamiania mnie, bo takie sytuacje przecież zdarzają się nie raz. Gdy wszedłem na wspomniany adres, nie mogłem uwierzyć własnym oczom:

Drugi bug na yoyo.pl

Zostałem "zalogowany" na kolejne konto. Błąd wydaje mi się dziwny i jeszcze przed chwilą powiedziałbym, że wyświetla ono ostatnio logującego się użytkownika. Jednak jako, że na początku pisania tego wpisu byłem "zalogowany", a w tej chwili (16:26, 08 XI AD MMXI) błąd już nie występuje, to wysnuwam nową niczym nie popartą teorię: użytkownik wchodzący na podstronę "katalog" staje się "zalogowany" jako jeden z użytkowników, którzy w danej chwili faktycznie są zalogowani w serwisie.

Powyższy błąd i brak jakiejkolwiek odpowiedzi ze strony YoYo po raz kolejny świadczy o ich wielkim profesjonalizmie i ostrych standardach. Serdecznie nie polecam :), byłem ich klientem przez jakieś 20 minut z 1.5 roku temu i mi wystarczy…

PS: Postanowiłem do kolekcji dorzucić jeszcze jednego buga, którego zaobserwowałem u nich jakiś czas temu.

PS2: Jak to mówią: do trzech razy sztuka :P

Przegląd skryptów genialnych

Nie wiem czy ktokolwiek pamięta jeszcze pierwszy wpis z tej serii. Ja w każdym razie o nim zapomniałem. Jednak przy okazji dzisiejszego przeglądania jednego ze skryptów do tworzenia gry MMORPG via WWW przypomniałem sobie o tej serii i postanowiłem co nieco napisać.

Miałem zamiar przetestować skrypt MafiaWarz służący do tworzenia gier MMORPG w klimatach gangsterskich. Oczywiście nie spodziewałem się żadnych rewelacji po darmowym skrypcie tego typu, ale to co tam zobaczyłem dało kilka okazji do śmiechu dlatego postanowiłem się tym podzielić ze światem ;)

Zacznijmy rzecz jasna od początku, bo tak bywa najłatwiej. Instrukcji instalacji/pliku README nigdzie nie było, ale akurat zaimportowanie jednego pliku SQL i uzupełnienie danych w configu (choć dość trudnym do znalezienia) nie należało do bardzo trudnych.

Problem pojawił się podczas gdy chciałem zarejestrować konto. Na szczęście Wujek Google pozwolił szybko dojść do rozwiązania tego problemu - rozbiło się w zasadzie o jedną linijkę, więc na razie idzie dość gładko. Teraz zacznijmy ocenę właściwą:

  1. Błąd uniemożliwiający rejestrację na samym początku. Wielu ludzi może to odstraszyć, ale może i słusznie? :P
  2. Hasło miało zostać wysłane mailem, ale jako że skrypt testowałem na localhoście, to postanowiłem podmienić hasło w bazie danych na nowe. Długo szukałem charakterystycznego zahashowanego hasła w tabeli users, ale go nie znalazłem, bo hasła są trzymane w niezakodowanej postaci.
  3. Kontynuując temat bazy danych - brak prefiksów tabel, a ich nazwy zbyt oryginalne nie są, więc może być mały problem.
  4. Pokręcone typy pól: money jako int, online oraz lastcrime (trzymane jako znacznik czasu) jest polem typu varchar(100) zamiast po prostu int
  5. Jako że skrypt jest po angielsku, postanowiłem go przynajmniej częściowo spolszczyć. Niestety mimo tego, że użytkownicy mają możliwość zmiany języka w profilu to pliki językowe są przygotowane tylko dla dwóch z kilkudziesięciu zakładek. Dodatkowo oba te pliki zawierają dużo nigdzie niewystępujących tekstów, a nie mają tych najważniejszych.
  6. Totalny bajzel w plikach. Dużo zbędnych, po kilka kopii tego samego pliku, pliki do niczego niepotrzebne (przykładowo plik w00t.php zawierający jedynie pustą tabelę w HTML). Takie rzeczy zdecydowanie nie powinny leżeć w publikowanej wersji.
  7. Zero konwencji kodowania dla PHP
  8. Kod HTML na poziomie internetu łupanego. Można by go nazwać HTML-em 2.0 gdyby nie brak doctype. Nazwijmy go więc umownie HTML-em 0
  9. Design oparty na ramkach, znaczniki noframes oczywiście puste…
  10. Postanowiłem znaleźć panel administracyjny. Zajrzałem do jedynego pliku który wydał mi się właściwy (admincp.php), aby poszukać jakie pole w bazie muszę zmienić. Zabezpieczenie tego pliku naprawdę mnie oczarowało.
    if ($userlevel != 3){
        echo "Your not a admin.";
    }
    
    faktycznie - większość użytkowników na pewno przestraszy się tej informacji i czym prędzej ucieknie. Co jednak z pozostałymi niegodziwcami? Czy użycie die() byłoby zbyt trudne?
  11. Używanie " praktycznie wszędzie gdzie to niepotrzebne, np. dla zwyczajnych stringów lub nawet stosowanie echo "$style";. Nie szkoda serwera?
  12. Prawie w każdym pliku występuje podwójne łącznie z bazą. Najpierw dołączany jest plik includes/db_connect.php, a potem includes/functions.php na którego początku jest dołączany includes/db_connect.php
  13. Masa obrazków leżących w katalogu głównym oraz includes mimo istnienia katalogu images
  14. Źle zaprojektowana baza danych - 45 tabel dla tak w sumie nieskomplikowanego skryptu mówi samo za siebie
  15. Totalnie niespójny desing. Wygląda to tak, jakby każda zakładka była robiona przez inną osobę. Poza tym nie ma to jak biały tekst na jasnożółtym tle (no kto tutaj coś widzi?)
  16. Krótka analiza zakładek z menu - kilka to biała strona, jedna to "coming soon!", inna to 404. Zabrakło natomiast linków w menu do tak mało istotnych zakładek jak np. panel admina.
  17. Skrypt wymaga do działania włączonej opcji short_open_tags
  18. Podatność na SQL Injection
  19. CSS rozbite na masę poszczególnych plików
  20. W wielu miejscach widać pozostałości albo podwaliny systemu do aktywacji użytkowników - nie jest on jednak w żaden sposób wykorzystywany.

Skrypt ma na pewno dużo więcej błędów i niedoróbek, których nie wypisałem w tym wpisie. Powyższa lista to tylko jego ogólny przegląd i pewnego rodzaju przestroga dla osób które chciałyby stawiać gry online na takich gotowcach. Szkoda czasu i nerwów na poprawianie takich pseudoskryptów - mówię to także z własnego doświadczenia ;)

Sądzę że w niedługim czasie mogę się pokusić o opisanie większej ilości skryptów tego typu.

Przepraszam też za ewidentną chaotyczność tego wpisu, był on pisany jeszcze podczas "badania" skryptu dlatego nowe rzeczy były dopisywane na bieżąco.

Wstępna zapowiedź IronCMS-a 2.0

Od dość dawna nic nie pisałem na blogu. Przede wszystkim od bardzo dawna nie pisałem nic o IronCMS-ie. A mam w stosunku do niego pewne plany.

Ostatnią wydaną wersją był Iron z numerkiem 1.2.1. Od tamtego czasu nie raz miałem okazję patrzeć na jego kod i zmieniać go. Za każdym razem myślałem o tym samym – „czas na nową wersję z większymi zmianami. Trzeba to w końcu ogarnąć”.

A teraz bez zbędnego gadania przedstawię kilka rzeczy, które chciałbym zmienić w wersji 2.0 skryptu.

Czytaj dalej →

Odkrycia Matki Polki

Z dzisiejszej lekcji fizyki wreszcie wynieśliśmy coś pożytecznego. Jak wiadomo jakieś tam wydziwiane prawa nigdy się nam nie przydadzą, lecz to co usłyszeliśmy dzisiaj zawróci całym światem nauki.

Matka Polka, czyli nasza nauczycielka fizyki, dokonała dwóch wspaniałych odkryć.

Pierwszą z tych rzeczy jest nowa koncepcja dzielenia. Jak wiadomo 1200/24=50. To wydaje się dla nas oczywiste.

Jednak nie!!!

W wyniku skomplikowanych obliczeń wykonanych w głowie naszej nauczycielki (całki, srałki, grzałki itp.) okazało się że wynik tego działania to 60! O tym nawet nie wie Windowsowy kalkulator. Myślę, że to odkrycie bije na głowę to co zaobserwowali naukowcy z CERN-u. Cząsteczki przekraczające prędkość światła nie są czymś nadzwyczajnym w porównaniu do nowej koncepcji dzielenia.

Drugim ważnym odkryciem było to, że grzejniki elektryczne nie są na prąd.

Kaloryfer elektryczny o mocy 1kW pracuje 10h dziennie ogrzewając pokój. Oblicz ile węgla należy użyć aby ogrzać ten pokój, zakładając, że z 1kg węgla można praktycznie wykorzystać tylko 3350 kJ

A więc nasze ukochane kaloryferki są jednak na węgiel :) Dzięki temu kolega się dowiedział czemu jego sąsiedzi pukają w grzejniki po nocach. Oni po prostu uzupełniają węgiel :D

Za te odkrycia naszej wspaniałej nauczycielce należy się nagroda im. Alfreda Nobla.

Być może niedługo nasza nauczycielka odkryje leki na starość oraz nowotwory, zgłębi tajemnice czarnych dziur, opatentuje działające perpetuum mobile, podbije Afganistan, położy kres sporom Korei Północnej z Południową, obali komunizm w Chinach, poleci na Marsa (i na Snickersa może też) i położy kres dyskryminacji. Dzięki takiej rodaczce naród Polski znów zabłyśnie pełnią swoich ogromnych możliwości.

 Timiko

Uwaga! To SĄ ćwiczenia!

Przedwczoraj (wtorek) na lekcji matematyki wychowawczyni wspomniała o tym, że następnego dnia ma się odbyć… próbny alarm przeciwpożarowy.

Cóż za cudowna niespodzianka, nieprawdaż? Według mnie powód podania tej informacji był bardzo prosty i nie chodziło tu o popsucie surprajsu czy uniknięcie paniki. Jak stwierdziła sama wychowawczyni – czas ewakuacji będzie zestawiany z innymi szkołami. Czyli ponownie – Statystyki Są Najważniejsze.

Dlatego wczoraj gdy dzwonek zadzwonił 15 minut wcześniej niż powinien – zdziwienia nie było. Bo przecież podano nam dzień wcześniej nawet lekcję na której cały event miał się odbyć – uroczo :).

Pani spokojnie wstała z krzesła, podniosła kartkę z biurka i przeczytała z niej – „Proszę nie panikować…” Oczywiście całą klasową lożą szyderców zaczęliśmy się wydzierać tak głośno jak to tylko możliwe, że „wszyscy zginiemy!”, „Już po nas!” i tak dalej…

Potem nauczycielka spokojnie wyrecytowała drogę do najbliższego wyjścia ewakuacyjnego. Bez pośpiechu spakowaliśmy swoje rzeczy, zdążyłem nawet wytrzeć tablicę i napisać na niej wielkie „SOS” – dla potomnych :)

Potem udaliśmy się do wyjścia ewakuacyjnego. Cóż za szczęście że akurat wtedy było ono otwarte. Drugi raz podczas trzech ostatnich lat, jak dobrze pamiętam. Los nam sprzyjał :P Udaliśmy się na boisko szkolne i usiedliśmy klasami.

Potem ktoś wyznaczony sprawdził czy dotarli wszyscy nauczyciele – no tak… Nauczyciele. O nas, uczniów, nikt się nie martwił. Posiedzieliśmy tam około 15 minut integrując się podczas rzucania żołędziami w kogo popadnie. Potem Ktoś Kogo Nie Widziałem, powiedział przez megafon Coś Czego Nie Słyszałem.

Po owym zaklęciu, bo tym musiało to być, niepaląca szkoła przestała się palić, nieistniejący strażacy stali się jeszcze bardziej nieistniejącymi, a my wróciliśmy do naszej ukochanej szkoły…