Monthly archive for January, 2009

Magister papierkologii stosowanej

2009-01-29 13:56

Studentem jest się w okresach półrocznych. Jak bowiem powszechnie wiadomo, co pół roku należy zrobić coś, aby owym studentem nadal pozostać. Zazwyczaj jest to znany i powszechnie lubiany obowiązek przebrnięcia przez tzw. sesję. Bywa jednak, że jest on zastępowany przez coś zupełnie innego.

Właśnie coś takiego zdarzyło mi się w tym semestrze. Ominęła mnie tym razem przyjemność (;D) zdawania kilku egzaminów, gdyż została ona zamieniona na misję tworzenia, kolekcjonowania i składania różnych – nazwijmy to – dokumentów. I wcale nie było to takie proste, bo mówimy tutaj o kilkudziesięciostronnicowej pracy w pięciu egzemplarzach, podobnej ilości płyt DVD, paru podaniach, zestawieniach ocen, że o pracowicie wypełnianym indeksie nie wspomnę.

Krótko mówiąc, nie tak łatwo jest zostać inżynierem – trzeba wpierw wykazać się w paru dziedzinach, z papierkologią na czele :)


Author: Xion, posted under Studies » 6 comments

Nawet SQL ma pętle

2009-01-12 12:35

Stwierdzenie ‘programować w HTML’ jest rzecz jasna nadużyciem, ale istnieją przecież inne języki, dla których określenie ‘programistyczne’ (lub jego brak) nie jest wcale takie oczywiste. Weźmy choćby SQL, teoretycznie pretendujący do miana języków deklaratywnych. Charakteryzują się one tym, że pisząc w nich określamy tylko to, co ma zostać zrobione – nie zaś jak. Na pierwszy rzut oka ma to sens: w końcu pisząc proste lub nawet całkiem skomplikowane zapytanie SELECT w ogóle nas nie interesuje to, przy pomocy jakich struktur danych zostanie ono wykonane i jaka pętla będzie się za nim kryć.
Bo przecież SQL nie ma pętli, prawda? :)

Ano właśnie nieprawda. Ponadto czasami są one jedynym wyjściem, jeśli mamy do czynienia z nieco bardziej skomplikowanymi danymi – jak choćby z jakąś hierarchią drzewiastą. Zwykle zapisuje się ją w relacyjnej bazie danych tak, że każdy element zawiera informacje o identyfikatorze elementu do niego nadrzędnego. Jest to całkowicie wystarczającą informacją do odtworzenia ich hierarchii.
Do takiego drzewka łatwo dodawać nowego elementy, ale ich usuwanie może być już problemem. Wyrzucenie jednej pozycji powinno bowiem oznaczać odcięcie całego poddrzewa – zwłaszcza że na pozostawienie osieroconych potomków często nie pozwoli sam silnik bazy danych, jeśli sprawdza poprawność relacji. Musimy zatem usuwać od dołu, a następnie przesuwać się w górę… Tylko jak niby zapisać to w postaci zapytania SQL?
Okazuje się, że nic prostszego. No, a przynajmniej okazuje się, że da się to zrobić:

  1. CREATE PROCEDURE DeleteItem
  2.     @ID int
  3. AS
  4. BEGIN
  5.     DECLARE @cur CURSOR
  6.     DECLARE @ChildID int
  7.    
  8.     SET @cur = CURSOR FOR (SELECT ID FROM Items WHERE ParentID = @ID)
  9.     OPEN @cur
  10.     FETCH NEXT FROM @cur INTO @ChildID
  11.     WHILE @@FETCH_STATUS = 0
  12.     BEGIN
  13.         EXECUTE DeleteItem @ChildID
  14.         FETCH NEXT FROM @cur INTO @ChildID
  15.     END
  16.    
  17.     DELETE FROM Items WHERE ID = @ID
  18. END

Nawet bez specjalnej znajomości składni można się domyślić, co tutaj jest wykonywane. Oto używamy kursora (coś w stylu iteratora), żeby najpierw usunąć elementy podrzędne do tego, który zamierzamy wykasować. W tym celu dla każdego z nich wywołujemy po prostu tę samą procedurę. Na koniec dokonujemy usunięcia pierwotnego elementu, który teraz na pewno jest już liściem (nie ma żadnych potomków), więc może być wyrzucony bez przeszkód.

Całkiem proste, czyż nie? Można powiedzieć, że w każdym języku programowania algorytm ten wyglądałby podobnie… Sęk w tym, że tu właśnie tkwi problem. Bo skoro w rzekomo deklaratywnym języku SQL można (a w tej sytuacji nawet trzeba) używać takich narzędzi jak pętle czy rekurencja, to przecież nie różni się on wtedy niczym od “normalnych” języków programowania. Jeśli całą operację trzeba zakodować krok po kroku, to nie mamy już żadnej korzyści z filozofii polegającej na określaniu ‘co’, a nie ‘jak’.
Może więc znaczy to, że inaczej programować po prostu się nie da? :)

Tags: ,
Author: Xion, posted under Programming » 7 comments

Rok++ i co z tego wynika

2009-01-03 23:39

Jak trudno było nie zauważyć, przedwczoraj rozpoczął się kolejny rok kalendarzowy. Jeśli patrzeć na sam jego numer, to nie zapowiada się on nadzwyczajnie. 2009 nie jest bowiem żadną okrągła liczbą – i to nie tylko w naszym powszechnie używanym systemie dziesiętnym, ale też i w innych: szesnastkowym (7D9), czy ósemkowym (3731). Nawet wersja binarna (11111011001) nie prezentuje żadnego szczególnego ułożenia cyfr. A dodatkowo 2009 nie jest “nawet” liczbą pierwszą (rozkłada się na 7 * 7 * 41).
Jednym słowem, jest to liczba zupełnie nieciekawa, więc opatrzony nią rok też pewnie ma duże szanse być absolutnie przeciętny…

Jednak jest coś, co może to zmienić. Coś co musi wydarzyć się w tym właśnie roku. Dokładnie tak, musi – gdyż w przeciwnym wypadku nie wydarzy się wcale. Jest to przy tym coś wyjątkowo pożądanego i bardzo długo oczekiwanego…
Cóż to takiego? Ano oczywiście opublikowanie standardu C++0x :) To przecież ostatnia chwila, aby mógł on wystąpić pod tą nazwą. Zważywszy, że kiedyś oczekiwano, iż ‘x’ zostanie zastąpione raczej przez ‘2’ lub ‘3’, można powiedzieć z całą mocą: najwyższy czas :D


Author: Xion, posted under Life, Programming » 8 comments
 


© 2023 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.