Gadu gadu Skype

Archiwum dla 11.2007

lis
3

Hubertus

Spook, Listopad 3 2007

Napisz komentarz

Dziś 3. listopada – patronem tego dnia jest święty Hubert.

Za Wikipedią:

Św. Hubert urodził się w 655 roku w Gaskonii, był potomkiem królewskiego rodu Merowingów. Zamiłowanie do polowania odziedziczył po swoim ojcu. Towarzyszył mu często na łowach. Ponoć w wieku 14 lat uratował ojcu życie podczas polowania na niedźwiedzia w Pirenejach. Pełnoletni Hubert udaje się na dwór króla Frankonii, gdzie poślubia córkę Pepina z Heristal. Miał z nią syna Floriberta, późniejszego następcę na biskupstwie Liege.

Młody Hubert najwięcej czasu spędzał w lasach, gdzie nieustannie polował, łowiectwo było jego pasją. Ponoć prowadził także swobodne, wręcz hulaszcze życie. Tak było do roku 695, kiedy polując w Górach Ardeńskich, nie bacząc na nic, w sam Wielki Piątek napotkał białego jelenia z promieniejącym krzyżem w wieńcu. Miał wtedy usłyszeć głos Stwórcy ostrzegający go za jego niepohamowaną pasję i nakazujący mu udać się do Lamberta – biskupa Maastricht – Tongres. Przejęty objawieniem, czyni jak mu głos nakazał. Udaje się na służbę bożą do biskupa Lamberta. Studiuje wiedzę kanoniczną i prowadzi działalność misjonarską w Ardenach i Brabancji. Po śmierci Biskupa Lamberta w 704 lub 705 roku, z rąk papieża Sergiusza otrzymuje sakrę biskupią.

3. listopada (lub w weekend poprzedzający lub następujący po tej dacie) we wszystkich większych stadninach i stajniach obchodzona jest hucznie zabawa zwana Hubertusem. Zaczyna się ona „pogonią za lisem” – jednemu z jeźdźców do lewego ramienia przypina się lisią kitę, którą pozostali jeźdźcy próbują zerwać. Alternatywą może być również sytuacja w której lisa ukrywa się gdzieś w lesie, a uczestnicy mają za zadanie odnalezienie go. Później następuje biesiada przy tradycyjnych potrawach – je się wtedy chleb ze smalcem, bigos oraz pieczoną dziczyznę.

Hubertus jest również obchodzony przez myśliwych – odbywają się wtedy uroczyste polowania podczas których zachowywane są historyczne wzorce i ceremoniały. Środowiska jeździeckie zrezygnowały z tradycyjnego niegdyś polowania na lisa, bowiem „zabawa” ta jest wyjątkowo okrutna – podobno niejednokrotnie zdarzało się, że zaszczute zwierzę zdychało nie od kuli myśliwego, a z wycieńczenia.

Święty Hubert jest patronem myśliwych, jeźdźców, leśników, strzelców, sportowców, kuśnierzy, matematyków i metalowców. Dzisiejszy dzień możemy zatem nazwać dniem jeźdźca – z tej okazji wszystkim jeźdźcom oraz amazonkom życzę wszystkiego najlepszego!

lis
1

StringMatchesMask

Spook, Listopad 1 2007

Napisz komentarz

Potrzebowałem ostatnio funkcji, która sprawdzi, czy nazwa pliku pasuje do zadanej maski. W Internecie w wielu miejscach można znaleźć funkcję StringMatchesMask – jej pierwotna wersja leży chyba na Torrym. Problem polega jednak na tym, że stosuje strategię zachłanną podczas interpretacji gwiazdki, co powoduje z kolei, że stwierdzi, że nazwa adas.txt nie pasuje do wzorca *as.*.

Pozostało mi zatem napisanie poprawionej, rekurencyjnej wersji odpowiedniej funkcji. Rekordów prędkości pewnie nie pobije, ale za to działa poprawnie. Oto jej kod:

function StringMatchesMask(S, mask: string; 
  case_sensitive: Boolean = false): Boolean;

  function InternalStringMatchesMask(PS, PMask: PChar): boolean;

  begin
    while PMask^ <> #0 do
    begin
      case PMask^ of
        '?': begin
            if PS^ = #0 then
            begin
              result := false;
              exit
            end;
            inc(PMask);
            inc(PS);
          end;
        '*': begin
            inc(PMask);
            if PMask^ = #0 then
            begin
              result := true;
              exit
            end;

            while (PS^ <> #0) do
            begin
              if not (PMask^ in ['?', '*']) and (PMask^ <> PS^) then
              begin
                inc(PS);
                if PS^ = #0 then
                begin
                  result := false;
                  exit
                end;
              end else
              begin
                if InternalStringMatchesMask(PS, PMask) then
                begin
                  result := true;
                  exit
                end else
                begin
                  inc(PS^);
                  if PS^ = #0 then
                  begin
                    result := false;
                    exit
                  end;
                end;
              end;
            end;

            result := false;
            exit
          end;
      else begin
          if PMask^ = PS^ then
          begin
            inc(PMask);
            inc(PS);
          end else
          begin
            result := false;
            exit
          end;
        end;
      end;
    end;
    if PS^ = #0 then
      result := true else
      result := false;
  end;

begin
if case_sensitive then
   result:=InternalStringMatchesMask(PChar(s),
                                     PChar(mask)) else
   result:=InternalStringMatchesMask(PChar(UpperCase(s)),
                                     PChar(UpperCase(mask)));
end;