Walidacja jednego pola formularza w symfony

7 komentarzy

Natknąłem się ostatnio na problem. Otóż wszystkie formularze walidujemy przy wykorzystaniu symfoniowych Formsów. Standardowe użycie podczas aktualizacji obiektu Place wygląda następująco:

$this->form = new PlaceForm ($place);
$this->form->bind ($request->getParameter ('place'));
 
if ($this->form->isValid())
{
	$place = $this->form->updateObject();
	$place->save();
}

Co jednak kiedy nie chcemy walidować całego formularza? Np. w przypadku kiedy używając InPlaceEditora zmieniamy jedno pole. Podpowiem, że próba wysłania tylko tego jednego pola i wykorzystaniu tej samej akcji skończy się wyzerowaniem pozostałych pól.

Dokumentacja symfony niestety milczy na ten temat (choć przyznam się, że nie szukałem jakoś strasznie dokładnie), a wiemy chyba wszyscy co jest jej największą bolączką - opisanie tylko kilku funkcjonalności poszczególnych modułów. Jak się chce czegoś więcej, to droga wolna - szukajcie sobie sami w kodzie.

Tak też postąpiłem. I po koszmarnie długim czasie odkryłem, że do walidowania każdego z pól służy metoda o intuicyjnej nazwie... clean(). Przykład walidacji jednego pola:

$form = new PlaceForm($place);
try
{
	$cleaned = $form->getValidator($field_name)->clean($value); #1

	$place->setByName($field_name, $cleaned, BasePeer::TYPE_FIELDNAME); #2
	$place->save();
}
catch (sfValidatorError $e) #3
{
	#Obsługa błędu
}
  1. Pobranie odpowiedniego walidatora oraz wywołanie na nim metody clean(), która w przypadku, gdy pole ma poprawną wartość zwraca je. A w przypadku błędu wyrzuca wyjątek sfValidatorError,
  2. Zapisanie wyczyszczonej wartości tego pola do obiektu,
  3. Kod obsługujący przypadek niewalidującego się pola.

Mam nadzieję, że ten krótki artykuł pozwoli komuś zaoszczędzić trochę czasu.

Wpis opublikowałem także na firmowym blogu code42.

Ideowo o HTMLu i CSSie

35 komentarzy

Nie, nie będzie to wpis o tym jak moim zdaniem powinien wyglądać HTML5 i CSS3 (a w zasadzie to 4 już). Popełnienie takiego tekstu mam w planach i jak trochę powrócę do żywych, to może mi się uda :).

Jak pewnie niektórzy wiedzą - zostałem zatrudniony na etacie w firmie, z którą od dłuższego czasu (~dwa lata) współpracowałem jako freelancer. Na pierwszy ogień poszedł mały, wewnętrzny projekt, przy którym współpracuję między innymi z mcvłem. Do tej pory obaj sporo tworzyliśmy HTMLa i CSSów, ale żaden z nas, a na pewno nie ja, nie musiał przy tym z nikim ściśle współpracować.

Każdy programista na pewno rozumie to, że w nowym zespole zawsze trzeba ustalić konwencje dotyczące stylu kodowania. My apropo HTMLa ustaliliśmy, że używamy pojedynczych cudzysłowów (do tej pory zawsze korzystałem z podwójnych i herezją było dla mnie używanie pojedynczych, ale w zasadzie nie jest źle :). Z CSSem było gorzej, bo musiałem zmusić mcvała żeby pisać całe selektory i wszystkie właściwości w jednej linii, ale dało radę.

I tak z pierwszymi ustaleniami zasiedliśmy do pracy. Popracowaliśmy całe 4 dni i okazało się, że te krótkie ustalenia to stanowczo za mało.

<address>

Interpretacja mcvała

Tagu address możemy używać jedynie zgodnie ze specyfikacją HTMLa 4.01:

The ADDRESS element may be used by authors to supply contact information for a document or a major part of a document such as a form.

Czyli możemy w tym tagu zawrzeć informacje dotyczące kontaktu z autorem (prawdopodobnie jedynie drogą elektroniczną). Mogą to być linki, maile, ale co ciekawe - ulica i miasto już raczej nie. Wydaje się to potwierdzać dość dziwny przykład podany dalej w specyfikacji:

<ADDRESS>
<A href="../People/Raggett/">Dave Raggett</A>, 
<A href="../People/Arnaud/">Arnaud Le Hors</A>, 
contact persons for the <A href="Activity">W3C HTML Activity</A><BR> 
$Date: 1999/12/24 23:37:50 $
</ADDRESS>
Moja interpretacja

Nie ma potrzeby trzymać się co do słowa niedoskonałej specyfikacji HTMLa sprzed prawie 10 lat. Użyjmy taga address jako taga semantycznego nadającego znaczenie każdemu zawartemu w środku adresowi (czy to pocztowemu, czy mailowemu, czy też stronie firmowej). Dodatkowo - nie oznaczajamy nim jedynie danych kontaktowych z autorem strony, ale także z każdym innym podmiotem, który na stronie opisujemy (np. we wszelakich bazach miejsc).

Dodatkowo uważam, że nazwa address jest bardzo niefortunna, jeśli mamy tam umieszczać linki. Gdyby ktoś miał na myśli jedynie informacje o kontakcie, to tag nazywałby się contact.

I tutaj chciałbym wesprzeć się przetłumaczonym przez Łukasza Grabunia artykułem pt. Zapomniane znaczniki, który od lat służy mi pomocą w walce ze sklerozą :).

Inne moje nadinterpretacje

Istnieje jeszcze kilka innych tagów, przy których interpretacji nie uważam za sensowne ściśle trzymać się specyfikacji. Od razu podkreślam, że nie mam na myśli zupełnego oderwania się od niej. Nie chcę używać table jako tagu do opisu stołu w restauracji, albo tabelkowego layoutu. Uważam natomiast, że na przykład lista definicji to nie tylko stricte:

<dl>
	<dt>Kura</dt>
	<dd>Stworzenie boskie, o dwóch nogach i opierzonym ciele</dd>
</dl>

Ale także inne konstrukcje zawierające jakiś temat i jego zawartość. Na przykład lista użyta przeze mnie wcześniej trochę z premedytacją:

<dl>
	<dt>Interpretacja mcvała</dt>
	<dd>(...)</dd>
	<dt>Moja interpretacja</dt>
	<dd>(...)</dd>
</dl>

Oczywiście mogłaby też wyglądać tak:

<h3>Interpretacja mcvała</h3>
<div class='section'>(...)</div>
<h3>Moja interpretacja</h3>
<div class='section'>(...)</div>

I w pewnym przypadkach jest to zdecydowanie poprawniejsze rozwiązanie. Jednak kiedy nagłówki sekcji nie są wyraźne (mam tu na myśli rzecz jasna znaczenie wynikające z treści strony, a nie jej wyglądu :P) i są jedynie opisami tego co znajduje się niżej, to wolę użyć rozwiązania pierwszego. Ale akurat w specyfikacji listy definicji twórcy HTMLa podali więcej przykładów, które w pewnym sensie tłumaczą moją nadinterpretację.

Przypomina mi się także, że kiedyś był mały ruch przekonujący by całą stronę (poza treścią typowo akapitowo - nagłówkową) opisywać listami uporządkowanymi, nieuporządkowanymi i listami definicji. W pewnym sensie zgadzałem się z tym, że cała strona jest jakąś listą i sporą większość jej elementów da się zrozumieć jako jakąś część listy. Zdaje się jednak, że to już przesada w drugą stronę :)

Na HTMLu nie koniec

Żeby nie było za miło posprzeczaliśmy się także o niektóre rozwiązania w CSSie :)

Styl mcvała

  • zostawiamy przeglądarkowe paddingi i marginesy, bądź ustalamy ich początkowe wartości (ale nie na zero),
  • aby odsunąć w pionie zawartość rodzica od dziecka nadajemy dziecku marginesy pionowe i jeśli potrzeba rodzicowi padding:0.1px. Jeśli trzeba, czyli w przypadku braku obramowania, bądź paddingu,
  • wszystkie marginesy i paddingi ustalamy według emów - aby zwiększona w kodzie wielkość czcionki miała wpływ na te wielkości.

Mój styl

  • zerujemy za pomocą * {padding:0; margin:0} wszystkie niepotrzebne odstępy, aby móc nad nimi dokładnie zapanować. Nadajemy je z powrotem dopiero w treściach strony,
  • aby odsunąć w pionie zawartość rodzica od dziecka używamy paddingów dla tego pierwszego. A poprzez :last-child zerujemy margines ostatniemu dziecku (dzieci mają marginesy aby je od siebie odsunąć),
  • marginesy i paddingi w 90% przypadków podajemy w pikselach, by mieć większą kontrolę nad ich wartościami (i nie mieć zonka że coś się rozjeżdża bo zmieniłem wielkość czcionki)

Oczywiście żaden z nas nie był w stanie przekonać drugiego do swoich racji :). Niestety - obaj w swoim życiu już za dużo layoutów pocieliśmy i zbyt wyrobione mamy zdanie na niektóre tematy. Ale i tak uważam, że można się sporo ciekawych rzeczy dowiedzieć pracując z drugą osobą. Ja na przykład dowiedziałem się o własciwości box-sizing i wreszcie zapanuję nad {width:100%; padding:10px} :).

Rys historyczny, można pomijać

Tak, wiem, że istnieje coś takiego jak debugger :). Nigdy się jednak z żadnego porządnie nie nauczyłem korzystać. Po trochu dlatego, że wymaga to zazwyczaj poświęcenia dodatkowego czasu na naukę nowego narzędzia, po trochu dlatego, że najwięcej kodu tworzę w PHP i JS w gVimie, który chyba nie posiada żadnego zintegrowanego narzędzia, ale głównie dlatego, że to często armata na komara. Niejednokrotnie wystarczy podejrzeć przecież zawartość jednej zmiennej aby rozwiązać problem. I tak prawdopodobnie każdy programista nauczył się "echowania" (kłania się zapewne PHP ;).

Problem pojawia się jednak kiedy zaczynamy tworzyć w Javascriptcie, który to nie posiada żadnego wyjścia, jakieś proste skrypciki. Pierwszym pomysłem jaki przychodzi do głowy jest wykorzystanie funkcji alert(). Często to dobre rozwiązanie, choć mało wygodne - wyskakujące okienko bywa naprawdę denerwujące. Szczególnie jak zaczyna pokazywać się coraz częściej i w większych ilościach. Dodatkowo, Firefox z którego korzystam, ma tę niezrozumiałą dla mnie własność, że kiedy wyskoczył jakiś alert nie dopuszcza mnie do okna przeglądarki. Co więcej - nie pozwala (a przynajmniej mi się nigdy nie udało) wyłączyć Javascriptu z poziomu tegoż okienka (co potrafi np. Opera). Kończy się więc to killem przeglądarki kiedy jakiś dowcipniś wrzuci alert("joke"); w niekończącą się pętle. A samemu podczas "echowania" też zdarzyło mi się zabić takim alertem, więc trzeba uważać :) (setInterval(), czy niefortunne powiązanie z jakimś zdarzeniem).

W związku z pytaniem, które ktoś rzucił dzisiaj na blipa zacząłem zastanawiać się czy nie ma lepszego rozwiązania. Pierwszy pomysł jaki mi przyszedł do głowy to napisanie prostej klasy Console, która będzie dodawała swoje okno na stronie i za pomocą jakiejś metody out(), push(), czy jakiejś pozwalała ładnie wypisywać zawartość danej zmiennej. Szybko jednak okazało się, że twórcy Firebuga wpadli na ten pomysł pierwsi :).

Konsola Firebuga, część właściwa wpisu

Konsola Firebuga udostępnia nam kilka ciekawych funkcjonalności. Pierwszą z nich jest console.log(), która pozwala formatować wyjście na kilka sposobów:

console.log("Ten kod powinien się wykonać");
 
var foo = "bar", x = 12.34, i = 122;
 
console.log("foo: %s, (int) i: %d, (float) x: %f", foo, i, x);
 
function Kopytko() {
	this.palec1 = 11.12;
	this.palec2 = "qń";
};
kopyto = new Kopytko();
console.log(kopyto);
console.log(kopyto.brak);

Przykład działania console.log w Firebugu

Jednak to nie wszystko. Możemy także pokolorować i nadać znaczenia naszej radosnej twórczości. I tak mamy dostępne metody console.debug(), console.info(), console.warn(), console.error().

Przykład formatowania informacji na konsoli Firebuga

Dodatkowo, przydatne (np. przy pracy z Ajaksem, czy manipulacjach w drzewie DOM) może się okazać również drukowanie HTMLa oraz XMLa. Służy do tego metoda console.dirxml(DOMElement). Wyświetla ona drzewo znane nam z zakładki "HTML" Firebuga.

Przykład działania console.dirxml() w Firebugu

To chyba na tyle o "echowaniu" na konsolę Firebuga. Więcej informacji możecie znaleźć w Console API oraz Rejestrowaniu Javascriptu (damn - nie mogę lepszego tłumaczenia znaleźć :). I tak z poziomu kodu można mierzyć czas wykonania bloku instrukcji console.time("name"); {..} console.timeEnd("name");, czy tworzyć asercje (a jak to się tłumaczy?).

Rys historyczny cz. 2, też można pominąć

Wpis ten napisałem głównie dla ludzi, którzy tak jak ja, jakimś cudem przeoczyli tę funkcjonalność Firebuga. Nie mylili się Zergu i mcv mówiąc, że o rzeczach oczywistych się nie pisze bo są... oczywiste. Jak jednak często się okazuje - nie dla każdego :). A właśnie taka demotywująca myśl spowodowała, że od tak dawna nic nie pisałem.

Wpis ten ukazał się w okrojonej (mniej osobistej) formie na moim blogu firmowym

Przenosiny cz. 2

1 komentarz

Tych co nie czytali części poprzedniej zapraszam tu:

Akt trzeci - czekanie

Tak więc od początku stycznia czekaliśmy na otwarcie Systemu, by móc złożyć podanie. Przypomnę, że za załatwianie sprawy z wiadomych względów zabraliśmy się na półtora miesiąca przed sesją. I... ku naszej niebywałej uciesze, jakoś tuż przed końcem semestru System uruchomiono. Czad po prostu.

Akt czwarty - podanie

Cóż - nie ma co marudzić, zabieramy się za wypełnianie podania. Wpisuję miasto, reszta moich danych jest. Wybieram kierunek na który chcę się przenieść. Do wyboru mam ciągi w stylu P0-W08-INF---ST-I-WRO------PWR1-DWU. Uroczo. Szukam pomocy, znajduję coś niestety i tak muszę zgadywać. Wybieram jak cytowałem, w końcu I musi oznaczać pierwszy rok. Teraz pora uzupełnić dorobek. Tutaj sprawa komplikuje się jeszcze bardziej. Mam przepisać wszystkie kursy (ponad 30)? Co to są te dziwaczne pola CNPS, ZZU? I które z 15 pól na kurs mam uzupełniać? Na te pytania jednak nie znajduję odpowiedzi, więc uzupełniam wszystko według uznania. I tak przepisanie indeksu zabiera mi ponad 2h.

Wypada mi jeszcze sparować kursy, jednak dla IZetu pojawiają mi się jakieś dziwactwa, których wiem, że nie mieli. Uznaję to za błąd systemu i umawiam się ze znajomym przy dziekanacie dnia następnego.

Akt piąty - podanie drugie

Jako że już blisko sesji, wystajemy godzinkę pod dziekanatem. Poraża nas jednak kultura ludzi. I tu pora na dygresję o kolejkach na Elektronice.

Otóż kolejka do dziekanatu na Elektronice wygląda jak kulka plasteliny ciśnięta o ścianę. Wynika to głównie z tego, że jakiś mózg wymyślił, że do dziekanatu, gdzie jest 8 stanowisk, są jedne drzwi i do tego nieprzezroczyste. Jako że stanowiska są przydzielone do studentów na stałe, niektórzy, udając że idą do stanowiska do którego nie ma kolejki, wchodzą do środka, pomijając ogromną kolejkę stojacą pod drzwiami, po czym stają w kolejce już do określonego stanowiska. W praktyce wygląda to tak, że 10 osób stoi pod drzwiami i nie może wejść (bo są wywalani), a w środku, do interesującego ich stanowiska jest cały czas tyle samo ludzi. Nie muszę wspominać, że ja oczywiście muszę swoje sprawy załatwiać przy stanowisku do którego zawsze jest najwięcej ludzi :).

Na IZecie jednak za drzwiami jest tylko jedno okienko, więc problem nie istnieje. I tak po godzinie grzecznie odstanej w kolejce wyjaśniamy naszą sprawę bardzo przemiłej pani siedzącej w środku. Ona wpisuje moje nazwisko po czym z uśmiechem na twarzy oznajmia, że wybrałem nie ten kierunek. Z listy powinienem wybrać taki z Ii, a nie samym I. Uh - prawie bym się przeniósł na nieistniejący kierunek. Cóż za ulga. Przy okazji dowiedzieliśmy się, że należy wpisać tylko wiodące kursy.

Myśląc że wiemy już wszystko spieszymy do jakiegoś wygodnego miejsca, aby usiąść i ponownie uzupełnić podanie. Wpisałem miasto, wybrałem dobry kierunek, zacząłem uzupełniać kursy, po czym chciałem je sparować. Uh... Znowu fail - nie wiem które z którymi połączyć (mniejsza z tym dlaczego). No to do dziekanatu.

Tym razem już bez kolejki wchodzimy do środka. Pani cieszy się niezmiernie że widzi nas ponownie jeszcze tego samego dnia. Patrzy na nasze podania u siebie w systemie, po czym stwierdza, że System nas pokonał i musi to zrobić za nas. No dobrze - klikamy opcję "przekaż" przy podaniu i zostawiamy to Pani.

Akt szósty - podanie trzecie

Po dwóch dniach patrzę na status swojej sprawy, który zmienia się z "złożona" na "odrzucona". Odrzucona przez dziekana, powód "nie uzup. sem. real.". Patrzę w system na swoje kursy... Nie ma pola od którego skrót mógłby tak wyglądać. Domyślam się jednak, że dziekan oczywiście widzi inne nazwy pól u siebie. Kolega po wizycie w dziekanacie potwierdza moje przypuszczenia i już wiemy co trzeba douzupełnić. No to jeszcze raz - 1h na uzupełnienie podania. Przy okazji wychodzi, że kiedy uzupełnia się te pole, system zapomina kilka innych (z losową jednak częstotliwością). Podanie złożone, wydrukowane, zaniesione, zatwierdzone. A nie - nie tak szybko, Panie Piotrze. Okazuje się, że pismo pt. "różnice programowe" które musieliśmy zanieść wczęsniej do dziekana nie ma podpisu, bo to co na nim widnieje, to jakieś gryzmoły. Uroczo - 2h w kolejce i mam podpis. No to teraz czekam.

Po trzech dniach sprawa zmienia status ze "złożona" na "do rozpatrzenia". Już się cieszę, że coś poszło o krok dalej niż ostatnio. Kawałek niżej jednak widnieje status "brak decyzji", a jeszcze w jednym miejscu "decyzja prawomocna: tak". Eee... no jasne. U kolegi to samo. Postanawiamy jeszcze poczekać.

Tutaj dygresja apropo zapisów na Elektronice, które wypadły właśnie w tym momencie. Jako że nie wiedziałem, czy całą sprawę uda mi się pozytywnie załatwić postanowiłem się zapisać na zajęcia, normalnie jakbym dalej studiował.

A po tygodniu postanawiamy zajrzeć do dziekanatu w sprawie naszych podań.

Akt siódmy - indeksik

Wystajemy znowu swoje w kolecje. W środku już o nas zapomniano, więc grzecznie tłumaczymy z czym przychodzimy. Pani zagląda do podania kolegi i okazuje się, że dobrze że przyszliśmy. Podczas przerabiania podania system wygenerował błąd i podanie zostało zapomniane. A skąd status "do rozpatrzenia"? Tego nie udaje nam się dowiedzieć. "Klik" i podanie kolegi tym razem przechodzi - super, witamy Pana na naszym wydziale. Teraz pora na moje podanie. "Klik" - u Pana jest błąd. Musi Pan mieć przepisane wszystkie oceny do indeksu elektronicznego. Że co? Kolega nie ma, a jemu przeszło, dlaczego? Trzy razy spytałem i dowiedziałem się tylko, że ja muszę. Pani niestety teraz nie była tak miła, bo dorwała administratora Systemu i mu nawymyślała.

Wychodzę zniesmaczony, bo do tej pory moim prowadzącym udało się do tegoż indeksu (części Systemu) przepisać aż 3 oceny. Na 20... Że niby mam ich teraz do tego zmusić? No nic - łudzę się, że może ktoś to odgórnie zrobić. Idę do swojego dziekanatu - półtorej godziny w kolejeczce i dowiaduję się, że nie, nie ma takiej osoby. Idę jeszcze do sekcji informatycznej, gdzie od znajomego słyszę to samo. SUPER! Przy okazji dowiaduję się, że prowadzący mieli już jeden termin na załatwienie sprawy, ale prawie nikt tego nie zrobił, więc przedłużono im go do 7mego marca. Ekstra - na IZecie mam czas na załatwienie wszystkiego do 10tego. I jakoś nie wierzę, żeby wszyscy tego 7mego dotrzymali. Jedna osoba mnie oleje, zniknie na tydzień i nici z przenosiń.

Co więcej - abym mógł spokojnie popracować, jedyną alternatywą dla przeniesienia się jest wzięcie dziekanki. Na to termin też mam do 10tego marca. Więc jedna rzecz się przedłuży, a będę musiał normalnie studiować. Uroczo. Półtora miesiąca zabawy i nic nie załatwię.

Tak na koniec dzisiejszej części jeszcze krótko o wypełnianiu podania o urlop dziekański. Oczywiście wszystko w Systemie. Do uzupełnienia początkowy semestr urlopu i końcowy semestr urlopu. Niby wszystko jasne, ale zaraz - jak biorę urlop na jeden semestr to co wpisuję w końcowym? Ten sam co początkowy, czy następny? Nie dowiem się niestety metodą prób i błędów, bo System zezwoli nawet na wzięcie dziekanki rok temu i co więcej - nawet na wzięcie dziekanki cofającej - gdzie start > koniec ;).

Akt ósmy - pewna informacja

Część trzecia już za czas z góry nieokreślony :)

Przenosiny

6 komentarzy

Żyję.

To zdanie (albo raczej, jeśli dobrze pamiętam z liceum, jego równoważnik) jest dla mnie zdaniem przełomowym, bo nie udało mi się opublikować żadnego wpisu od października 2006. Co oznacza skromną, ponaddwuletnią przerwę i moją pozorną śmierć (nawet w mych oczach). Ale nic to - o tym (tzn. o powodach) kiedy indziej (bo pisać mam zamiar więcej), a teraz na temat.

Prolog

Na wstępie wypada mi przedstawić sytuację w jakiej znajdowałem się na początku całego dramatu (ma prolog i akty, to prawie jak dramat ;P - tylko chóru brakuje ;)

W roku pańskim 2007 zacząłem studia na Wydziale Elektroniki Politechniki Wrocławskiej, kierunek Informatyka. W teorii wymarzone - informatyczne, próg najwyższy i... i to chyba wszystko czym się kierowałem. A szkoda.

W roku pańskim 2008, w miesiącu styczniu, później lutym, później lipcu - mówiąc wprost - od prawie samego początku pierwszego roku - narzekałem. Studia informatyczne okazały się być matematyczno-elektronicznymi i o ile to pierwsze nie dziwi na pierwszym roku, a drugie też nie dużo mniej, to miałem obawy czy nie będzie tak do końca. Jednak na obawach się skończyło i zostałem na Wydziale Elektroniki.

W grudniu roku 2008 zapadła jednak decyzja - chcę się przenieść. Do wyboru miałem jeszcze dwie informatyki na PWR. Jedną na IZecie, a drugą na PPTcie. Wybór padł na IZet.

Cały obszerny wstęp dopełnia informacja o tym, że z semetru 4tego planowałem się przenieść na semestr drugi. Cała zabawa po to, abym mógł trochę więcej poświęcić się pracy przez następny rok (większość kursów zostanie mi mam nadzieję przepisana).

Akt pierwszy - rozpoczynamy

Pierwszym krokiem było powiadomienie rodziców - ok - podołali :). Drugim - znajomych i tu niespodzianka - jeden z moich lepszych kumpli jeszcze z czasów gimnazjum też chce się przenieść (kierunek macierzysty: AiR na EKA). Informacja ta dodała mi otuchy, bo to zawsze łatwiej.

Krokiem następnym była wizyta u bardzo zachwalanego przez znajomych z IZetu dziekana do spraw dydaktycznych - dr. Janusza Martana. Pierwszy raz byliśmy u niego jakoś na początku stycznia i datę tę można uznać za początek procesu Przenosin. Proces rozpoczęliśmy tak wcześniej (sesja od połowy lutego), aby przed sesją wszystko załatwić - wiadomo - kilometrowe kolejki, itd. Dziekan rzeczywiście okazał się być bardzo miłym i konkretnym człowiekiem. Wszystko (a przynajmniej tak się nam zdawało) nam wytłumaczył. Plan miał wyglądać następująco:

  1. Tworzymy i przynosimy "różnice programowe" - tabelkę kursów które nam się pokrywają,
  2. Czekamy na otwarcieu elektronicznego, internetowego systemu EdukacjaCL,
  3. Składamy podanie o przeniesienie,
  4. Przynosimy wydrukowane podanie (sic! - jest przecież w systemie),
  5. Dziekan akceptuje, bo czemu by nie,
  6. Hurraa!! krzyczymy i idziemy się nawalić jak zwierzęta. Tfu... studenci.

Nic prostszego, prawda? :) Ja nie byłem tak optymistycznie nastawiony, a to dlatego...

Akt drugi - System

Od początku kiedy mówiłem znajomym o przenosinach, ci ostrzegali mnie przed Systemem. System ów zwany pieszczotliwie Edukacją jest (a w zasadzie miał być) elektronicznym dziekanatem, a także systemem rekrutacyjnym i czym tam jeszcze. Nas interesowało to pierwsze. Politechnika wdraża go z oporami od niepamiętnych czasów, a teraz - w przerwie zimowej (nigdy nie pojmę dlaczego zimowej, a nie 5x dłuższej letniej :O?!?!) postanowiła wprowadzić go metodą małych kroczków - kroczków kangura giganta. Od teraz - wszystko co chcecie załatwiać w dziekanacie drodzy studenci możecie załatwić w portalu... po czym musicie to do nas przynieść i tak. Aha - to nic że w systemie nie ma jeszcze tego podania - złożysz je za pół roku. Czasy załatwiania spraw oczywiście się skrócą, pół roku temu znajomy przeniósł się w dwa dni, a my na pewno załatwimy to szybciej.

Sam System tworzony jest przez notowaną na giełdzie spółkę Sygnity SA (gdzie pewnie pracuje setka mściwych, byłych studentów Politechniki ;)). System jest bardzo sprawny - prawie jak Windows - uważaj co robisz, bo każda źle podjęta decyzja oznacza nieodwracalne w skutkach błędy. I tak - nie cofaj się do poprzedniej strony, bo dostaniesz komunikat o błędzie. Uzupełnij każde wymagane pole w podaniu zgodnie z przeznaczeniem. Niestety to które pola są wymagane oraz to jakie jest ich przeznaczenie miej lub bardziej jasne jest... Ee... Nie wiem - tego nie wie nikt. Od pań w dziekanatach, po dziekanów oraz po dokumentację systemu, która nie istnieje (piszę to z premedytacją, bo poradnik dla samobójców który jest dostępny raczaj się nie przydaje).

Itd., itd... mógłbym marudzić dalej, ale ważne jest tylko to, że wiedziałem, że muszę wypełnić wszystko co wymagane, a jak o czymś zapomnę/pomylę się/nie będę wiedział, to dowiem się o tym jak będę całe podanie (2h pracy) uzupełniać ponownie, bo nie da się podania cofnąć i douzupełnić.

Akt trzeci - czekanie

Był początek stycznia kiedy zaczęliśmy czekać na otwarcie systemu... już jutro :)