Nowe Ziarno: o czym będę pisał?

Opublikował siefca wt 14 paź 2008 09:44:17 GMT

Jak to się stało?

Prawie trzy tygodnie temu nabyłem drogą kupna kilka pudełek do przechowywania różnych rzeczy, które zwykle istnieją sobie na podłodze. Idąc za ciosem postanowiłem odkurzyć pokój, ponieważ stało się to w końcu możliwe bez uszczerbku dla ważnych dokumentów, nośników i śrubek. Odkurzając postanowiłem zaprowadzić ład również we wnętrzu stacjonarnej jednostki PC, którą otworzyłem demontując przy okazji zasilacz. Gdy rzadko używany sprzęt był już hardware’owo czysty przyszła mi do głowy myśl o tym, aby korzystając z porządkowego nastroju sporządzić mechanizm regularnego wykonywania kopii zapasowych wszystkich moich systemów działających w Sieci. Następnego dnia wiedziałem już, że potrzebują trzech dysków, każdy po przynajmniej terabajt i może lepszego procesora.

Od odkurzacza do Linuksa

Z tego wszystkiego postanowiłem wykonać kompletny upgrade stacjonarnego komputera i kilka dni później instalowałem już nową płytę główną, procesor AMD Phenom (Quad-Core) i moduły pamięci 1066Mhz (HyperX). Dwa dni później odkryłem, że mój zasilacz słabuje po dołączeniu kolejnych urządzeń i wymieniłem go na wersję 650W. Dyski oczywiście i przede wszystkim wchodziły w skład tego zestawu.

Na nowym sprzęcie zainstalowałem dystrybucję Gentoo Linux i kilka dni zajęło mi zaprzyjaźnienie się z nią. Wybór podyktowany był przede wszystkim obserwacją, że na systemach usługowych i tak w 80% przypadków nie korzystam z pakietów oprogramowania dla krytycznych komponentów, ale kompiluję je samodzielnie. W Gentoo, podobnie jak w systemach typu BSD nie ma pakietów jako takich, są za to paczki źródeł i odpowiednio zdefiniowane między nimi zależności. Ostatnim etapem prac nad systemem kopii zapasowych było wydzielenie szyfrowanej przestrzeni na dyskach połączonych w RAID-5. Wykorzystałem system LUKS i zaraz zapragnąłem, aby moje klucze szyfrujące wraz ze skryptami uwidaczniającymi szyfrowany napęd były przechowywane na wymiennych nośnikach.

Kixrun

Zacząłem więc klepać narzędzie dla GNU/Linuksa, którego zadaniem jest automatyczne wykonywanie skryptów lub programów umieszczonych na dyskietkach, dyskach CD/DVD i przenośnych pamięciach masowych USB. Za łożenie jest – mam taką nadzieję – proste i polega na wcześniejszym autoryzowaniu tego co ma się uruchomić przez administratora. Aby pamiętać co było autoryzowane trzeba to jakoś rozpoznać, a to realizowane jest na podstawie sumy kontrolnej liczonej z zawartości z wykorzystaniem jednokierunkowych funkcji skrótu (w tym przypadku SHA512). Mechanizm ten nazwałem Kixrun, bo nazwa Kixtart była już zajęta. Aby wygodnie i szybko to napisać, a także zapewnić przenośność postanowiłem, że użyję skryptowego języka powłok zgodnych ze standardem POSIX (zależy mi na jednoczesnej zgodności z pdksh i bash).

Dokładając kolejne moduły zaobserwowałem, że potrzebuję kilku seksownych funkcji powłokowych, których nie mogłem znaleźć w Necie. Fajnie byłoby w trakcie pisania gdzieś te funkcje umieszczać, żeby ktoś robiący podobne rzeczy nie musiał ich klepać jeszcze raz. I tu powstał mały problem – moja rozklekotana strona domowa nie wyświetla ładnie kodu (a nawet nie tylko kodu). Tak zrodziła się potrzeba wyposażenia swojej “szkatułki wirtualnych suwenirów” w jeszcze jedną rzecz: moją osobistą stronę, na której będę mógł dzielić się kodem (a nawet nie tylko kodem).

Ruby on Rails i Typo

W zeszłą sobotę postanowiłem więc poznać środowisko do uruchamiania aplikacji webowych o nazwie Ruby on Rails. Przymierzałem się do tego od prawie roku, jednak wcześniej nie miałem powodu, który uzasadniałby wysiłek. Railsy to napisany w języku Ruby szkielet, w którym szybko i przyjemnie (jak deklarują zwolennicy) można tworzyć serwisy internetowe. Chciałem postawić w tym środowisku jakiś silnik do zarządzania zawartością (Content Management System, CMS). Skompilowałem więc potrzebne gemsy i sam interpreter języka Ruby (ten z Debiana nie śmigał tak jak chciały tego Railsy) i zacząłem radośnie sprawdzać dostępne oprogramowanie. W tym czasie jeszcze oszukiwałem się trochę, że tym razem komputer okaże się bardziej ludzki.

Typo

Podobał mi się Radiant (przejrzysty choć ubogi na starcie), nie udało mi się bez kłopotów zainstalować Mephista, aż w końcu w oko wpadł mi Typo.

Typo

Przez dwa dni ścierałem się z instalacją i doprowadzeniem tego do jako takiego porządku. Po pierwsze, zauważyłem, że nie działają subskrypcje Atom i RSS, ale na szczęście jakiś dobry user poratował tymi instrukcjami. Dołączyłem też moduł Ultraviolet służący do kolorowania składni i poprawiłem szablony CSS. Przede wszystkim jednak chciałem skłonić do współpracy system tłumaczenia komunikatów na język polski. W Typo bazuje on na wtyczce Localization. Poprawiając kawałki JavaScriptu czułem się jak dziwka, ale patrząc obiekty w Railsach powoli zaczynałem tracić nadzieję, chęć życia i miłość do ojczyzny. Nie były brzydko napisane, tylko autorzy Typo wybrali moim zdaniem toporny system lokalizowania. Chodziło o tzw. pluralizację. Przypomnę, że w języku polskim mamy podwójną odmianę liczby mnogiej, na przykład: 2 talerze, ale 5 talerzy. Pal go licho, że znalezione klasy nie obsługują wielu wariantów liczby mnogiej; problemem jest zastosowany w Typo sposób ich wywoływania przez pośredników w postaci metody pluralize(). W końcu, żeby był wilk syty i owca cała zdecydowałem się na stworzenie własnego widoku przy generowaniu listy komentarzy i przesłonięciu tym samym domyślnego mechanizmu. W pliku o nazwie articles/index.html.erb umieściłem własne wywołania, a warunki do podwójnej liczby mnogiej i instrukcje nimi sterujące dodałem w pliku z tłumaczeniami nie jako łańcuchy znaków, ale jako obiekty typu Proc. są to po prostu zagnieżdżone bloki kodu. Całe szczęście metody klasy Localization pozwalają na stosowanie takich obejść:

# plik lang/pl_PL.rb

l.store "%d comments", Proc.new { |c|
   c==1 ? "jeden komentarz" : (c==0 ? "bez komentarza"
          : (c%10>=2 && c%10<=4 && (c%100<10 || c%100>=20) ? "#{c} komentarze" :
                                                             "#{c} komentarzy" )) ; }
l.store "%d trackbacks", Proc.new { |c|
   c==1 ? "jeden trackback" : (c==0 ? "bez trackbacka"
          : (c%10>=2 && c%10<=4 && (c%100<10 || c%100>=20) ? "#{c} trackbacki" :
                                                             "#{c} trackbacków" )) ; }

Zrobiłem tak dlatego, żeby nie zmieniać zawartości modułu Localization. Może to mało piękne, ale na chwilę obecną wolę takie obejście niż klasę, w której mógłbym coś namieszać i zapomnieć o tym do chwili prawdy podczas uaktualniania instalacji. W międzyczasie zamarzył mi się też jakiś łatwiejszy sposób serwowania tego wszystkiego niż używanie serwera Mongrel i spróbowałem testowego mechanizmu zatytułowanego Phussion Passenger czyli mod_rails dla Apache’a.

Getting Real

Wczorajszego wieczora, po wielu testach prowadzonych na kilku systemach i różnych przeglądarkach przyszedł czas na małe boje z wewnętrznymi linkami i… pewnie zwlekałbym z pierwszym postem do przyszłego roku, gdyby nie inspiracja z książki pod tytułem ”Getting Real”. Jej autorzy radzą opublikować coś w Sieci bez wyczekiwania na idealne i bezbłędne działanie. Przezwyciężyłem się trochę i wiedząc, że ciężko będzie dalej spać po 3 godziny dziennie zaakceptowałem potencjalną możliwość życia w wiecznej becie.

Umieszczone tu teksty przeznaczone są dla hackerów, banitów, outsiderów i nowożeńców. Przeznaczam je miłośnikom nowych technologii i zwolennikom wolności. W związku z tym będę pisał o programowaniu i administrowaniu systemami operacyjnymi oraz komputerowymi sieciami, ale czasem wspomnę też bieżącą sytuację w Polsce i na świecie. Mam nadzieję, że obecna forma randomseeda będzie coraz bardziej przystępna, a zawarte tu treści pozwolą odwiedzającym poczuć, że przebywają w jednym miejscu z ludźmi o podobnych umysłach.

Podziel się

Trackbacki

Użyj następującego trackbacka na swojej stronie:

http://randomseed.pl/trackbacks?article_id=nowe-ziarno&day=14&month=10&year=2008

Komentarze

  1. Ravicious powiedział about 10 hours later:

    Witamy na pokładzie ;)

    Twój blog ląduje u mnie w czytniku, ponieważ również interesuję się Ruby i styl pisania masz niezły ;)

    Z Typo jeszcze nigdy nie spotkałem, a chętnie się czegoś o nim dowiem.

    Trzymaj się.

  2. Jacek powiedział about 13 hours later:

    Dlatego ja nigdy nie odkurzam. Potem czlowiek ma roboty na rok. :)

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz