Śliczny i wygodny. Autorzy Rhythmboksa mają teraz sporo do nadrobienia.
Archiwalia w kategorii 'software'
W dniach 8-11. maja odbyła się trzecia edycja Libre Graphics Meeting. Ci z was, którzy się nie pojawili (i mam nadzieję, że żałują), mogą obejrzeć zdjęcia i nagrania wideo z poszczególnych prezentacji.
PLD Linux był dzielnie reprezentowany przez czteroosobowy zespół w składzie: DeeJay1, djurban, emes i ja. Djurban gdzieś zagubił się w piątek, prawdopodobnie ukamienowany przez resztę deweloperów KDE. Towarzyszył nam dzielnie Jarv, któremu raz nawet udało się przyjść przed 12:30. Jeśli ktoś się zastanawiał, kim jest ten typ w pomarańczowej bluzie i koszulce z logo GNOME, to przyznaję się do winy.
Chciałem przy okazji serdecznie podziękować organizatorom, choć nie obyło się bez drobnych wpadek. Nie pojawił się na przykład absolutnie nikt z polskiej prasy. O konferencji, która pierwszy — i możliwe, że jedyny — raz odbyła się we Wrocławiu, nie poinformowała nawet gazetka Tesco. To tłumaczy śladową liczbę grafików, którzy przyszli na prezentacje, sporą część reprezentacji Polski stanowili studenci, którzy odwiedzali wykłady w przerwach między normalnymi zajęciami Politechniki Wrocławskiej.
O treści samych prezentacji nie będę się rozpisywał. Co straciliście na wykładach, możecie zobaczyć sami. Najbardziej oczekiwanym momentem była jednak prezentacja projektu Peach, która odbyła się pobliskim Multikinie. Zapominalscy na oficjalną premierę filmu Big Buck Bunny będą musieli poczekać do 20. maja.
Vagla zwraca uwagę na nieścisłości w przepisach regulujących kwestię składania wniosków do urzędów drogą elektroniczną. Ja się za to zastanawiam, kto i ile wziął pieniędzy za te wszystkie wynalazki. Nie można było prościej?
Wymagana infrastruktura
- Jeden miejski (bądź centralny) urząd ewidencji ludności;
- Jeden serwer kluczy PGP administrowany przez tenże urząd;
- Jedna para kluczy (klucz publiczny i prywatny) PGP wygenerowana przez tenże urząd i fakt udostępnienia klucza publicznego na serwerze urzędu, zaś jego identyfikatora odcisku na stronie tegoż urzędu;
- Jedna baza danych, która pozwala do każdego klucza publicznego przypisać jeden identyfikator PESEL;
- Jedna pani w okienku
Rejestracja wzoru podpisu
- Obywatel generuje parę kluczy PGP o okresie ważności nie dłuższym niż przewidziany ustawowo (powiedzmy, że będzie to kwartał);
- Obywatel generuje zlecenie unieważnienia swojego klucza publicznego;
- Obywatel drukuje zlecenie unieważnienia w formie przyswajalnej przez komputer, na przykład w postaci kodu kreskowego, co pozwoli skorzystać z niego w okienku (po okazaniu dowodu osobistego) w przypadku utracenia wyłącznej kontroli nad kluczem prywatnym;
- Obywatel umieszcza swój klucz publiczny na serwerze kluczy dostarczonym przez urząd;
- Obywatel drukuje identyfikator odcisku swojego klucza publicznego w formie przyswajalnej przez komputer (kod kreskowy) na wniosku o poświadczenie odcisku klucza;
- Obywatel z wydrukowanym powyżej wnioskiem udaje się do urzędu, gdzie składa wniosek legitymując się dowodem osobistym;
- Pani w okienku przykłada formularz do czytnika, jej komputer pobiera informacje o kluczu z serwera urzędu i pozwala na potwierdzenie imienia i nazwiska z formularzem i okazanym dokumentem tożsamości;
- Serwer podpisuje wskazany klucz publiczny obywatela z poświadczeniem pełnego zaufania dla umieszczonych tam danych za pomocą klucza prywatnego urzędu, po czym publikuje go ponownie na serwerze urzędu;
- Serwer umieszcza w swojej bazie danych informację o skojarzeniu danego klucza z numerem PESEL nadanym obywatelowi;
Złożenie podpisu pod dokumentem
- Obywatel pobiera bądź tworzy dokument, który ma następnie zostać podpisany;
- Obywatel podpisuje dokument za pomocą klucza prywatnego odpowiadającego kluczowi umieszczonemu i podpisanemu wcześniej na serwerze urzędu;
- Obywatel dokument wraz z podpisem przesyła do urzędu;
- Urząd przesyła obywatelowi poświadczenie w postaci złożonego wcześniej podpisu podpisanego ponownie kluczem prywatnym urzędu;
Unieważnienie wzoru podpisu
Zawsze może zdarzyć się tak, że obywatel utraci swój klucz prywatny lub klucz ten wpadnie w ręce osób trzecich. Wersja pierwsza:
- Obywatel generuje zlecenie unieważnienia klucza publicznego za pomocą swojej kopii klucza prywatnego;
- Obywatel importuje unieważnienie do swojego lokalnego pęku kluczy, tym samym unieważniając lokalną kopię swojego klucza publicznego;
- Obywatel publikuje ponownie swój klucz publiczny na serwerze urzędu, tym samym unieważniając swój wzór podpisu;
- Ponowne złożenie podpisu wymaga ponownego przejścia przez procedurę rejestracji wzoru podpisu;
Wersja druga:
- Ponieważ obywatel utracił swoją kopię klucza prywatnego (na przykład w wyniku kradzieży), udaje się do urzędu z wydrukowanym wcześniej unieważnieniem klucza;
- Pani w okienku przeciąga unieważnienie przez czytnik;
- Serwer importuje unieważnienie, a następnie ponownie publikuje unieważniony już klucz na serwerze kluczy;
- Pani mówi
dziękuję, następny;
- Ponowne złożenie podpisu wymaga ponownego przejścia przez procedurę rejestracji wzoru podpisu;
Wersja trzecia:
- Ponieważ obywatel utracił swoją kopię klucza prywatnego i zgubił wydrukowane wcześniej zlecenie unieważnienia, wypełnia formularz unieważnienia na papierze, podając powód i swoje dane osobowe i udaje się z nim do urzędu;
- Pani w okienku sprawdza zgodność danych na wniosku, dokumencie tożsamości i w bazie danych;
- Serwer unieważnia swój wcześniejszy podpis zaufania pod kluczami publicznymi skojarzonymi z numerem PESEL obywatela, a następnie publikuje je ponownie, tym samym wyłączając je z użytku jako podpis akceptowany przez urzędy;
- Ponowne złożenie podpisu wymaga ponownego przejścia przez procedurę rejestracji wzoru podpisu;
Wersja czwarta:
- Wygasa data ważności klucza obywatela;
- Ponowne złożenie podpisu wymaga ponownego przejścia przez procedurę rejestracji wzoru podpisu;
Zmiana klucza prywatnego urzędu
Para kluczy urzędu ze względów bezpieczeństwa również powinna mieć ograniczony czas ważności. Może się również zdarzyć, że klucz prywatny urzędu dostanie się w niepowołane ręce:
- Urząd generuje nową parę kluczy GPG;
- Nowy klucz publiczny urzędu zostaje opublikowany na serwerze kluczy;
- Identyfikator odcisku klucza publicznego zostaje opublikowany na stronie urzędu;
- Serwer podpisuje dotychczas podpisane klucze publiczne obywateli za pomocą nowego klucza prywatnego urzędu, udzielając im pełnego zaufania;
- Serwer unieważnia dotychczas używany klucz publiczny urzędu za pomocą jego klucza prywatnego, jako powód podając zastąpienie go nowym kluczem;
Różnice w stosunku do stanu obecnego
- Koszty utrzymania infrastruktury są praktycznie zerowe;
- Fizyczny koszt uzyskania wzoru podpisu przez obywatela jest zerowy;
- Nakład urzędu w celu przyjęcia bądź unieważnienia wzoru podpisu jest minimalny;
- Forma ta nie faworyzuje żadnych podmiotów gospodarczych;
- Całość działa również poza platformą Windows;
- Stosowne aplikacje klienckie można przygotować w ciągu jednego wieczoru, w dowolnym języku programowania i nie wymaga to milionowych przetargów;
- Wiele innych serwisów (nie tylko państwowych) może użyć kluczy podpisanych urzędowo choćby w celu weryfikacji rejestrujących się użytkowników (serwis nie dostaje żadnych informacji o obywatelu poza jego imieniem i nazwiskiem, ale zaufanie urzędu gwarantuje, że organy ścigania są w stanie — na podstawie odcisku klucza — ustalić tożsamość podejrzanego);
- Update: Pozwala podpisać ten sam dokument dowolnej liczbie osób;
Nie, nie o patenty. O poprzednią notkę! Uważam, że nic tak dobrze nie reklamuje produktu i dobrych intencji autora, jak solidny cease and desist,
zapraszam więc do lektury (autor zapewne postanowi zaraz pozwać mnie z powodu ujawniania korespondencji, ale list adresowany do mnie jest moją własnością):
from Dariusz R.to patrys@pld-linux.org, date Sun, Apr 20, 2008 at 5:28 PM subject Global UMTS - pomówienia zgłoszone POLICJI Witam
Jestem autorem programów Global UMTS i Global GPRS.
Dziś rano złożyłem zawiadomienie o popełnieniu przestępstwa (zdjęcie dokumentu w załączniku). Policja zabezpieczyła dowody – treść kilku stron internetowych.
Popełniono przestępstwo m.in. z art. 212 § 1 oraz § 2 Kodeksu Karnego zagrożone karą pozbawienia wolności do 2 lat.
Przygotowywane jest powództwo cywilne: odszkodowanie za pomówienie mojej osoby, które naraziło mnie m.in. na utratę zaufania potrzebnego dla mojej pracy zawodowej (w kwocie kilkudziesięciu tysięcy złotych) i kolejne odszkodowanie za niszczenie marki i dobrej renomy wśród klientów programów Global GRPS i Global UMTS, którą budowałem dużym kosztem od długiego czasu (kolejne kilkadziesiąt tysięcy złotych).
Dodatkowo trzeba też będzie przez wiele miesięcy pokrywać koszty zakupu reklam internetowych odbudowujących zniszczony wizerunek moich programów. Trzeba będzie zwrócić kwotę przeznaczoną na wynagrodzenie adwokatów.
Sprawy karna i cywilna będą się toczyć w Sądach w Warszawie.
Żądam natychmiastowego usunięcia oszczerczych tekstów (wraz z komentarzami) między innymi z tych stron:
http://room-303.com/blog/
http://10przykazan.com/archive/2008/4/15/4/
http://planet.pld-linux.org/Każdy kolejny dzień istnienia tych tekstów w internecie jest dokładnie dokumentowany przez prawników i policję i będzie podstawą do zwiększania kwoty odszkodowań i wydatków na reklamy służące odbudowie wizerunku marki i dobrej renomy Global GRPS i Global UMTS.
Dotyczy to też wyświetlania oszczerczych tekstów z archiwum stron Google. Sąd zostanie poinformowany o tym, że istnieje możliwość usunięcia tych stron z pamięci Google (szczegóły w dziale porady dla webmasterów na stronie www.google.com ) więc należy je niezwłocznie usunąć z pamięci Google.
Pozdrawiam
DarekNa koniec treść kilku artykułów z Kodeksu Karnego:
Przestępstwo z art. 212 § 1 oraz § 2
Art. 212 Kodeks Karny
§ 1. Kto pomawia inną osobę, grupę osób, instytucję, osobę prawną lub jednostkę organizacyjną nie mającą osobowości prawnej o takie postępowanie lub właściwości, które mogą poniżyć ją w opinii publicznej lub narazić na utratę zaufania potrzebnego dla danego stanowiska, zawodu lub rodzaju działalności, podlega grzywnie, karze ograniczenia albo pozbawienia wolności do roku.
§ 2. Jeżeli sprawca dopuszcza się czynu określonego w § 1 za pomocą środków masowego komunikowania, podlega grzywnie, karze ograniczenia wolności albo pozbawienia wolności do lat 2.
§ 3. W razie skazania za przestępstwo określone w § 1 lub 2 sąd może orzec nawiązkę na rzecz pokrzywdzonego, Polskiego Czerwonego Krzyża albo na inny cel społeczny wskazany przez pokrzywdzonego.
Art. 488 Kodeksu Postępowania Karnego
§ 1. Policja na żądanie pokrzywdzonego przyjmuje ustną lub pisemną skargę i w razie potrzeby zabezpiecza dowody, po czym przesyła skargę do właściwego sądu.
Jestem więc teraz przestępcą. Czujecie już respekt? Następna notka ukaże się grypserą.
Autora zaś informuję, że straszenie mnie prokuratorem jest bezcelowe. Moja kobieta jest prawnikiem i znam swoje prawa. Jeśli chcesz domagać się usunięcia jakiejkolwiek treści z mojego bloga, to staraj się o to kulturalnie, przez kontakt ze mną (którą to szansę właśnie zmarnowałeś, pokazując jednocześnie buractwo — uwaga, drugie pomówienie), albo dochodź swoich praw w sądach USA, gdzie blog się znajduje.
Po drugie, uważam, że jesteś słabym programistą i mam do tego pełne prawo. To nie gazeta. Co więcej, powiedziałem ci, co zrobić, żeby poprawić swój program. Jeśli masz ego większe od mózgu, to już problem dla psychologów, a nie sądu (uwaga, tutaj autor notki trzeci raz dopuścił się pomówienia, mamy więc recydywę). Och nie, w Internecie ktoś się myli!
Pozwij mnie od razu o przemoc w stosunku do nieletnich, szerzenie pornografii i akty lubieżne w miejscach publicznych, może w końcu trafisz z jakimś zarzutem. Najlepiej w sądzie w Gdańsku.
Są sobie takie dwa programy niejakiego Dariusza Rakowskiego. Nie podlinkuję, dopóki nie napiszę, dlaczego w ogóle o nich wspominam. Bo osoba reklamująca je jest cholernym spamerem i nigdy nie należy ufać programom z niewiadomego źródła.
Pierwszy rzut oka na Global UMTS: binarka bez źródeł. Nie dotykać, pomacać przez ldd i strings. Ten drugi pokazuje, że program szuka gksu albo kdesu. Po co? Pokazuje też, że autor jest słabym programistą i szuka urządzeń przez dmesg | grep.
Więcej kwiatków nie chciało mi się szukać. Wygląda jednak na to, że wbrew naszym pierwszym skojarzeniom, program nie wysyła waszych danych do autora. Wygląda — nie poświęciliśmy mu więcej czasu, więc proszę nie brać tego za pewnik i najlepiej programu zwyczajnie unikać, zamiast tego posiłkując się najnowszym Network Managerem.
Dariuszowi zaś, jeśli to prawdziwe imię i ma faktycznie dobre zamiary, polecam skasować program, napisać od nowa po ludzku (z użyciem HALa, PolicyKit i bez sprawdzania, czy dystrybucja to czasem nie OpenSuSE) i udostępnić w postaci źródeł. Na licencji, która zezwala na dystrybucję. Aha, radziłbym się upewnić, czy rozprowadzanie loginów i haseł operatorów komórkowych z całego świata jest zgodne z ich wolą i prawem.
Jak w tytule. Aleksowi Chyrp się znudził, planowany system szablonowy (twig) nigdy nie został skończony. Sam projektu ciągnął nie będę, bo nie mam dostępu do całej infrastruktury i jestem uzależniony pod tym względem od głównego autora, a bez silnika szablonowego nawet nie mam co marzyć o doprowadzeniu kodu do czystości.
Cytując naszą niedawną rozmowę: czekam tylko, aż zainteresowanie spadnie na tyle, żeby zamknąć projekt.
Trudno, taki los przyjemnych projektów. Jeśli ktoś jest zainteresowany kontynuacją projektu (zapewne pod inną nazwą, chociaż jeszcze nie pytałem autora o zdanie) z zachowaniem licencji GPL 3, to poprzedni maintainer (czytaj: ja) służy pomocą. Oferty ze zdjęciem zostawiajcie w komentarzach. Już nie mogę się doczekać tych setek piszczących z podniecenia nastolatek.
To tyle, proszę wycieczki, kierunek dalszego zwiedzania wskazują strzałki na podłodze.
Na każdym zebraniu jest taka sytuacja, że ktoś musi zacząć. Przy komputerze nikt kogo pod pistoletem nie trzyma, a skoro pan nie mówi o przyrodzie, możemy przejść do spraw ciekawszych. Jeśli wiesz, czym jest dæmon init i jaka jest jego rola w systemie uniksowym, możesz śmiało przeskoczyć nad płytkim, powierzchownym i łopatologicznym wprowadzeniem, którego się nie spodziewasz, a którym za chwilę uraczę całą resztę. Wpadliście w zasadzkę, marny wasz los.
Głupi kaowiec
init nie jest wielki, ale lekceważyć go nie wolno. Jest alfą i omegą, krótkie starcie z nim szybko upewni cię, że może to oznacząć początek twojego końca. Jak to?
— pytasz ze zdziwieniem w oczach, gdy ja przypominam ci radosny komunikat:
Kernel panic: Attempted to kill init
init jest nieśmiertelny. Rodzi się jako pierwszy i, niczym dobry kapitan, pozostaje na pokładzie do samego końca. Inne procesy traktują go jako dobrotliwego wujka, który przygarnia zbłąkane sieroty, bądź jako wielkiego przedwiecznego, który wszelkie nieposłuszeństwo karze globalną zagładą.
Czy powinienem się go bać?
— zapytujesz, a twarz twą oblewa rumieniec. Nie
— odpowiadam, wzbudzając tym większą ciekawość. init to bardzo specyficzna bestia. Uruchamiany jest jako pierwszy proces przestrzeni użytkownika (nie licząc tak zwanego early userspace
zawartego w initramfs, odpowiadającego za przygotowanie urządzeń do właściwego uruchomienia systemu) i zawsze jest numerem jeden (chodzi oczywiście o PID, czyli identyfikator procesu). Przygarnia również sieroty, czyli procesy, które wyrzekają się rodziców. Jądro systemu operacyjnego automatycznie przypisuje wszystkim bezpańskim procesom zastępczego opiekuna w postaci procesu init właśnie.
Mało tego, to właśnie biografia inita zawierać mogłaby i rzekł “niech staną się inne procesy”; i poczęły się uruchamiać usługi; i zobaczył, że było to dobre.
Dæmon init pełni rolę nadzorcy całego systemu i troszczy się o to, by uruchomione zostały wszystkie niezbędne do działania komputera usługi (oczywiście mówię o działaniu w pojęciu użytkownika, komputer w pełni zadowoli się samym jądrem i użytkownika do szczęścia nie potrzebuje).
SysVinit
Dawno, dawno temu, gdy SCO nie straszyło świata patentami, a głównym zajęciem AT&T nie było sprzedawanie iPhonów stadom amerykańskich nastoletek, ci ostatni, znani jako Laboratoria Bella, opracowywali standard systemu Unix. W owych mrocznych czasach, poprzedzających erę komputera łupanego (gdy komputer zajmuje sporą część budynku, nikomu nie przychodzi do głowy naprawianie go poprzez walenie pięścią w monitor), pojawiła się koncepcja głównego nadzorcy. Sposób jego działania pozostał przez lata właściwie niezmieniony, różniąc się tylko nieco implementacją pomiędzy architekturami i pokoleniami uniksowej rodziny.
Do dziś za wzorcową implementację uznaje się ponad dwudziestoletnią skamielinę, pochodzącą ze standardu System V (właścicielom cyfowych zegarków spieszę wyjaśnić, że tak wygląda rzymska piątka). Obsługuje start usług i przypisywanie ich do różnych profili (System V posiada system siedmiu profili nazywanych poziomami i numerowanych od 0 do 6), potrafi dodatkowo wskrzeszać swoje dzieci, jeśli taka jest wola administratora.
Dlaczego zatem usługi uruchamiane są poza nadzorem systemu? Problemem jest ich elastyczna konfiguracja, możliwość zatrzymywania i uruchamiania w dowolnym momencie, a także fakt, że w przypadku problemów init z System V zupełnie nie interesuje się przyczyną nagłego zgonu.
W pozostałych rolach
Konkurencja nie spała. Pomijam systemy oparte o szkielet BSD, który jako model systemu powstał jeszcze przed System V, więc informacja o używaniu innego nadzorcy nie powinna cię zdziwić.
Najszerzej kojarzoną jest z pewnością implementacja daemontools. Jedni twierdzą, że to ze względu na kontrowersyjną postać autora, inni, że jest to wynik radykalnego podejścia do procesu nadzorcy. Rewolucyjnych zmian nie ma tam co szukać, podstawową różnicą jest większa konfigurowalność nadzorowanych usług i rezygnacja z profili uruchomieniowych. O sukcesie podejścia wystarczy powiedzieć tyle, że w 90% przypadków daemontools uruchamiane jest przez… SysVinit.
Nieco inne podejście zastosowali autorzy initng, rozwijanego przez deweloperów Gentoo. Do tradycyjnego nadzorcy dodano możliwość równoległego uruchamiania wielu usług i wprowadzono prosty system zależności. Zaowocowało to skróceniem czasu startu systemu — usługi nie musiały stać gęsiego w kolejce i uruchamiane były, gdy tylko zaspokojone zostały ich podstawowe wymagania (zaznaczyć wypada, że większość usług zadowala się działającą siecią bądź samym faktem włączenia komputera, tylko nieliczni domagają się prywatnego apartamentu z widokiem na morze).
Apple z kolei stworzyło launchd, który jest hybrydą pomiędzy tradycyjnym procesem init, dæmonem inetd i usługą cron. Podstawowym udogodnieniem dla użytkowników była tu wprowadzona możliwość uruchamiania usług na żądanie,
rozszerzona później przez grupę freedesktop.org i zintegrowana z zarządcą magistrali DBus.
upstart already!
Mamy wreszcie projekt upstart, o którym krótko opowiem. Myślałem, że nigdy do tego nie dojdziesz
— wzdychasz pod nosem, sprawdzając, czy mikrofon laptopa na pewno jest wyłączony. Pamiętaj jednak, że dla niektórych Linux to żółty pasek postępu z napisem Loading Ubuntu
i każda okazja do postraszenia ich bebechami systemu jest dobra.
upstart łączy zalety większości wspomnianych wyżej implementacji. Potrafi emulować zachowanie System V, uruchamiać usługi równolegle, wspiera zależności, a autorzy obiecują, że niedługo może też zastąpić dæmona inetd. Przejście na niego jest bezproblemowe, bo usługi ze starego do nowego formatu przenosić można stopniowo, z każdym krokiem zyskując pełen nadzór nad ich działaniem, automatyczny restart w przypadku awarii i powiadamianie administratora o występujących problemach.
upstart dodaje też unikalny system reakcji na zdarzenia, nowe procesy mogą więc zostać uruchomione lub zakończone w odpowiedzi na zmiany zachodzące w działającym systemie. Chcesz, aby system obsługi wydruku działał tylko, jeśli do komputera podłączona jest drukarka? Nie ma problemu. Zatrzymać mniej krytyczne usługi, gdy serwer korzysta z zasilania awaryjnego? Proszę bardzo. Wszystko w automatycznie i z pełnym wglądem w listę tego, co aktualnie działa, co nie działa i dlaczego.
Oczywiście, nie piszę tego wszystkiego bez przyczyny. Wczoraj upstart pojawił się w PLD i skutecznie zastąpił swego pradziadka na wszystkich moich komputerach. Daj mu szansę i zainstaluj pakiet upstart-SysVinit, a jeśli ktoś spyta cię, jaki jest cel projektu, odpowiesz spokojnie:
Attempting to kill init
Dzisiaj (a właściwie to już wczoraj) oficjalnie został wydany GNOME 2.22. Dostępny we wszystkich dobrych dystrybucjach, więc także w PLD.
Tak się złożyło, że od wczoraj jestem oficjalnym maintainerem Chyrpa. Jego implementacji w PHP dla ścisłości.
Chyrp to lekki silnik, który pozwala wygodnie prowadzić własnego (mikro-/foto-) bloga. Wszystko zaczęło się od tego, że pewien szesnastolatek (tak, szesnastolatek), Alex Suracil, postanowił zrobić WordPressowi konkurencję. Wokół projektu zrobił się mały szum i powstało community. Zaczęły pojawiać się piórka i moduły (odpowiedniki wtyczek), tłumaczenia, skórki, a z czasem pojawiło się pytanie o implementacje dla innych platform.
Ja przejąłem oryginalną implementację w PHP, Alex zaczął prace nad wersją w Rubym, a mitsuhiko pracuje nad projektem twig — implementacją silnika szablonów Jinja w PHP.
Jeśli szukacie czegoś wygodniejszego i lżejszego niż WordPress, to być może właśnie znaleźliście. Oczywiście projekt jest otwarty i z chęcią przyjmiemy kolejnych ochotników. Miłej zabawy!
Tydzień z grubsza zajęło mi doprowadzenie do używalności kodu, który otrzymałem w spadku po pewnym urlopowiczu. Dobrze, że nie mam włosów, bo z pewnością bym je dawno wyrwał, choć z — drugiej strony — na programowaniu cierpi moja broda. Kolega wypoczywa w Iranie, a my próbujemy dojść, co też podmiot liryczny miał na myśli. Kiedy czytanie źródeł dłuży się ponad lekturę Nad Niemnem,
znak to, że czas na notkę.
Jak nie należy programować
Na wstępie już zaznaczę, że w ITS Ltd. zajmujemy się budowaniem aplikacji webowych w oparciu o Pythona i Django, więc niektórym poniższy tekst może wydać się płytki/nudny/pozbawiony sensu (niepotrzebne skreślić).
Poradnik niniejszy zalecany jest dla programistów, którzy w różny sposób związani są z serwisem The Daily WTF — czy to przez umiłowanie do czytania publikowanych tam historii, czy to przez bycie bohaterem tych ostatnich. Redakcja zastrzega sobie prawo do skrótów myślowych i przelotnego braku poczucia humoru.
Redundancja
Najważniejszą cechą systemów klasy Enterprise (jeden do teleportacji) jest ich wysoka dostępność (i cena). Jest to fakt tak niezaprzeczalny, jak niezaprzeczalna jest wysoka jakość produktów z rodziny Gadu-Gadu. Autorzy aplikacji klasy E (uniwersalny, automat i do tkanin czarnych) często uważają, że ich produkty z powodzeniem stawać mogą w konkury z aparaturą czasu rzeczywistego. Cóż, każdy może się mylić, ale jakież tajemne receptury zapewniają taką pewność siebie? Dziś Viagrę nabyć można na każdym bazarze, skupmy się więc na technikach programowania.
Autor aplikacji staje wielokrotnie przed trudnymi pytaniami egzystencjalnymi. Gdzie jest specyfikacja techniczna?
Jak ja wczoraj wróciłem do domu?
Skąd weźmiemy tyle galaretki, żeby napełnić basen?
To tylko niektóre z nich. Najważniejsze pytanie, jakie zadają sobie autorzy aplikacji klasy E (E303, E301, może zawierać śladowe ilości orzechów), to jak uniknąć używania bibliotek, których sami nie napisaliśmy, wszak któregoś ranka gotowe przestać działać. Na szczęście tutaj z pomocą przychodzi dogmat Copiego-Paste’a. Wystarczy zatem skopiować kluczowe elementy frameworku do używającej go aplikacji i już możemy spać spokojnie — co dwie kopie to nie jedna, prawdopodobieństwo mówi, że obie nie popsują się jednocześnie.
Optymalizacja czasu pracy
Jeśli brać z kogoś przykłady (a klasa E czyni to niechętnie, sami wszakże stanowią elitę), to tylko z amerykańskiej marynarki. Tradycyjne pojęcia deadline’ów i zarządzania zasobami zastąpić można sprawdzonym na wielu wojnach ŻULU time. W firmie najważniejsi są ludzie, więc zawsze jest czas się napić! Pozwala to płynnie regulować stres powodowany przez pracę, a naukowcy dowodzą, że może w zupełności wyeliminować ryzyko wystąpienia nerwicy (stosujący tę metodykę rzadko dożywają czterdziestki).
Ważne jest również, by programista miał podejście analitycznie i potrafił myśleć outside the box, co w języku polskim oznacza dosłownie myśl, jak ciągle być poza kubikiem. W praktyce sprawdza się najlepiej obranie niekonwencjonalnych godzin pracy (na przykład godzin nocnych) i planowanie przestrzenne (koduję od tego kieliszka do podłogi).
Generalizacja
Generalizacja to dar patrzenia na rzeczy z dystansu. Dla przykładu pies i samochód z dystansu wyglądają podobnie. Dlaczego więc nie umieścić ich w bazie danych we wspólnej tabeli rzecz, odpowiednio pomijając kolumnę rasa w przypadku samochodu i podając zero w kolumnie liczba_drzwi w przypadku psa? Tak zbudowana baza danych jest dużo prostsza do programowania, zwłaszcza jeśli w użyciu jest szkielet ORM.
Dodatkowe punkty komisja przyzna za uproszczenie tabeli do jednego pola, w którym umieścić można zserializowany obiekt dowolnego typu.
Obfuskacja
Duży projekt klasy E często jest oczkiem w głowie korporacji. Nie można zatem dopuścić, by sekrety jego działania poznał niepowołany śmiertelnik. Lata doświadczenia w dziedzinie refaktoryzacji uczą, że najpewniejszym środkiem zapobiegawczym jest obszerne stosowanie obfuskacji. Stosowanie jednoliterowych nazw zmiennych i funkcji nie tylko uniemożliwia zrozumienie geniuszu kryjącego się za kodem, ale także znacznie zmniejsza miejsce, jakie kod zajmuje na dysku. Jest to zaleta nie do pominięcia w przypadku projektów, które korzystają dodatkowo z technik programowania życzeniowego (ale o tym za chwilę).
Niezwykle ważne jest też konsekwentne nieumieszczanie komentarzy w kodzie. Łatwo policzyć, że przeciętna metoda o długości dziesięciu ekranów, stałaby się nieznośnie długa, gdyby co drugi wiersz wstawić komentarz i przeprosiny dla naszego zastępcy.
Zaawansowane techniki zabezpieczania kodu
Kolejną techniką obfuskacji jest, pochodzący z literatury, synkretyzm językowy. Dla zmylenia potencjalnego przeciwnika i lepszego utrwalenia w pamięci dawno nieużywanych technik, staramy się co jakiś czas wtrącić ekran kodu napisanego na przykład w PHP. W tym celu ograniczamy się do części wspólnej składni obu języków, dodatkowo emulując zachowanie zupełnie innego frameworku.
Mało znaną, ale opanowaną do perfekcji przez elitę, metodą wprowadzania zakłóceń w kodzie jest tak zwane prawo wolnego rynku (import bez ograniczeń). Główne zastosowanie tej metody to naprawianie wadliwych języków, których autorzy złośliwie wprowadzili przestrzenie nazw. Wystarczy jednak kilka instrukcji from foo import * starannie porozrzucanych po kodzie (nie zapomnijmy części z nich umieścić w instrukcjach warunkowych) i jesteśmy z powrotem w starym, dobrym bashu. Przyjemny skutek uboczny to fakt, że nikt nigdy nie będzie w stanie odtworzyć zależności aplikacji poza naszym środowiskiem rozwojowym.
Programowanie życzeniowe i stubenci
Jedną z podstawowych prawd na temat programowania jest taka, że każdą aplikację trzeba utrzymywać, a rzadko która nie ewoluuje wraz z upływającym czasem. Pragmatyczny programista dba o to już od pierwszej linii kodu. Zanim jeszcze zajmie się implementacją wymaganej funkcjonalności, stara się przewidzieć możliwe przyszłe drogi rozwoju. Jeśli programista zna się na fachu, owocuje to umieszczeniem w kodzie rozlicznych z pozoru niepotrzebnych metod. Są one z natury zepsute bądź puste i nazywamy je stubami, sam zaś autor nosi fachowe miano stubenta.
Stubenci zapewniają aplikacji bezpieczny margines nadmiarowości, podobnej w naturze do redundancji, co z kolei zmniejsza ryzyko, że przyszły opiekun projektu w wyniku zmieszania niechcący usunie coś niezbędnego. Jedną z rzadziej spotykanych metryk jakości kodu klasy E jest właśnie procentowy udział kodu, który można usunąć bez wpływu na działanie aplikacji. Najlepsi w branży utrzymują się w przedziale od czterdziestu do sześćdziesięciu procent.
Testy jednostkowe i UMŁ
Jak sama nazwa wskazuje, są to testy, które przeprowadza się tylko raz. Dla pewności, że zbędne dane nie wpłyną na wynik ani czas trwania testu, najlepiej przeprowadzić go w środowisku rozwojowym, przy pustej bazie danych. Już samo słowo wdrożenie
sugeruje, że klient musi liczyć się z dodatkowymi kosztami w celu późniejszego doprowadzenia produktu do działania w środowisku produkcyjnym. Testy jednostkowe, z natury, mogą być ciężkie do powtórzenia nawet w warunkach laboratoryjnych, stąd nie należy mieć oporów przed skorzystaniem z wygodnego narzędzia, jakim jest UMŁ (u mnie łaziło
).
Cóż, na dziś to wszystko, do zobaczenia w kolejnym odcinku poradnika Jak nie należy programować,
gdzie wspólnie wzbogacimy wachlarz stosowanych praktyk. Czytał Lucjan Szołajski.



Ostatnie komentarze