Posts Tagged ‘ Praca

Dlaczego używam eclipse w wersji 3.3

Środowisko eclipse wykorzystuję do programowania w języku php – Zend Framework. Od ponad pół roku jest to niezmiennie leciwa już wersja 3.3. Dlaczego nie zmieniłem jej na nowszą np. 3.5? Skłoniły mnie do tego zaledwie dwie jakże istotne dla mnie kwestie. Zastrzegam jednak, że być może to co tutaj zaprezentuję wynika z mojej niewiedzy związanej z eclipse, liczę więc na ewentualny „odzew”. :)

Rozważmy następujące kody dwóch przykładowych klas:

class SampleClass
{
	public function __construct()
	{

	}

	/**
	 * Przykladowa funkcja
	 *
	 * @param String $str Obiekt string
	 * @param array $arr Obiekt array
	 * @param String|array $obj Obiekt mieszany
	 *
	 * @return array
	 */
	public function myFunction($str, $arr, $obj)
	{
		return array('str' => $str, 'arr' => $arr, 'obj' => $obj);
	}
}

class MyClass
{
	/**
	 * Przykladowa klasa
	 *
	 * @var SampleClass
	 */
	private $_sampleClass;

	public function __construct()
	{
		$this->_sampleClass = new SampleClass();
		$this->_sampleClass->myFunction('str', array('arr' => 'dd'), 'str2');
	}
}

W zasadzie nic nadzwyczajnego. W jednej klasie przykładowa metoda, w drugiej natomiast utworzenie instancji klasy oraz wywołanie metody „myFunction”. Wszystko opatrzone w odpowiednie komentarze.

Dwa powody dla których nie zrezygnuję ze starego poczciwego eclipse 3.3:

Powód I:

Podczas korzystania z utworzonej wcześniej instancji klasy wywołanie metody sprowadza się do wpisania strzałki tuż po nazwie obiektu. Taka operacja skutkuję piękną chmurką prezentującą listę metod czy też zmiennych danej klasy.

Eclipse w wersji 3.5 „wypluwa” owe podpowiedzi niezwykle wolno Od momentu pojawienia się strzałki do chwili „wyplucia” listy metod i zmiennych mija katastrofalnie dużo czasu!!!! Osobiście piszę bardzo szybko na klawiaturze przez co jakiekolwiek opóźnienie w pojawieniu się podpowiedzi jest niezwykle irytujące. Żadnych efektów poprawiających powyższy stan rzeczy nie przynosi ustawienie opóźnienia autoaktywacji na 1 czy też 0 milisekund w opcjach znajdujących się: Window->Preferences->PHP->Editor-CodeAssist.

Całkowicie inaczej wygląda to w Eclipse 3.3. Tam niemal każde „strzałkowe” odwołanie powoduję natychmiastową podpowiedz.

Powód II:

Poniżej przedstawiam szereg screenów ukazujących proces wywołania metody „myFunction” z klasy „SampleClass” w eclipse 3.3 oraz 3.5.

Eclipse 3.5:

wywolanie_metody_3_5

Eclipse 3.3:

wywolanie_metody_3_3

uzupelnienie_arg_3_5

uzupelnienie_arg_3_3

Faktem jest, że język php nie jest językiem silnie typowanym, więc teoretycznie każda przekazywana wartość do metody „myFunction” może być dowolnego typu. O ile w obu omawianych przeze mnie wersjach eclipse, chmurki zawierające opis metody i parametrów wyglądają identycznie o tyle już sam proces uzupełniania wartościami argumentów funkcji jest nieco inny. Eclipse 3.3 także na tym etapie sugeruję jakiego typu powinny być wartości parametrów przekazywane do metody. Niestety zabrakło tego w nowszym wydaniu i od dawna nic się w tej kwestii nie zmienia.

Być może eclipse 3.5 gdzieś w swoim gąszczu ustawień konfiguracyjnych zawiera opcję, które pozwalają zrównać tą wersję w wygodzie użytkowania do eclipse 3.3 niestety jak dotąd nie było mi dane ich odnaleźć. Ubolewam nad tym faktem ponieważ niektóre najnowsze wersję wykorzystywanych przeze mnie eclipsowych pluginów odmawiają już współpracy z wersją 3.3.

Szybkość oraz wygoda jaką ze sobą niosą powyższe opcję sprawia, że wciąż kurczowo trzymam się eclipse 3.3.

Żegnaj .NET World…

Po wielomiesięcznej przerwie postanowiłem odświeżyć „przyjaźń” z moim blogiem. Ten oto wpis jest prawdopodobnie końcem pewnego etapu w moim programistycznym życiu.

Pierwsza zmiana jest taka, że znalazłem, a właściwie to ona mnie znalazła, pracę. Kilka miesięcy temu stanąłem przed realnym wyborem swojej ścieżki zawodowej – pozostanie przy technologii .NET czy rozpoczęcie nauki czegoś dość odmiennego?? Podobno jeżeli ktoś potrafi programować to bez problemu nauczy się dowolnego języka (w granicach rozsądku ;)) czy też z łatwością zgłębi tajniki nowej technologii.

Mogę na dzień dzisiejszy śmiało powiedzieć, że jest to w sporej części prawda, bo oto przez ostatnie miesiące z ogromną przyjemnością zajmuję się implementacją aplikacji internetowych przy użyciu technologii dostarczanej przez firmę Adobe – Flex.

Druga zmiana wynikająca z pierwszej to moja decyzja o pozostaniu przy tym czym się aktualnie zajmuję. Platforma .NET oraz wszystko czego się nauczyłem obcując z technologiami Microsoft-u pozostanie już raczej tylko moim „hobby”. Jak dotąd nie żałuję rzucenia się na głęboką wodę i oby nic mojego dobrego samopoczucia wynikającego z obecnej pracy nie zmieniło. Trzecia zmiana jest konsekwencją pożegnania i dotyczy nie tylko nowej tematyki zamieszczanej tutaj treści, ale także samego tytułu który tak radośnie witał wszystkich odwiedzających moje skromne blogowe progi. ;) Myślę jednak, że jeszcze zdarzy mi się jak już wyżej napisałem „hobbystycznie” wspomnieć o swoich .NET-owych korzeniach.

Na koniec chciałbym podziękować społeczności skupiającej się wokół portalu codeguru.pl, mojemu nauczycielowi „Języków programowania”, dzięki któremu robię to co robię…

Dziękuję również koledze bojkar-owi, dzięki któremu się nie poddałem oraz koledze redliquid-owi, który swoim przykładem zachęca mnie każdego dnia w pracy do ciągłego pogłębiania wiedzy. :)

Żegnaj .NET World! Witaj nowe, nieznane… :)

Zewnętrzne źródło danych w raportach MS Access

Podczas praktyk studenckich które odbyłem kilka tygodni temu zapoznałem się z możliwościami tworzenia raportów w Microsoft Access. Pracowałem nad rozwoje oprogramowania raportującego. Jednym z postawionych przede mną zadań było stworzenie mechanizmu umożliwiającego wywoływanie procedur składowanych z MS SQL Server i podpięcie otrzymanych wyników do utworzonych wcześniej raportów. Uzyskane wyniki miałem „zapakować” w Visual Basic-owy twór zwany RecordSet-em i podpiąć go bezpośrednio do raportu.

Uruchomienie procedury składowanej z poziomu MS Access utworzonej np. w MS SQL Server umożliwia tzw. kwerenda przekazująca. Cały ciężar związaną z wykonaniem zapytania czy też wspomnianej już procedury składowanej spada na „barki” silnika bazodanowego do którego zostanie wysłane polecenie. Mamy proste narzędzia do tworzenia raportów w MS Access – natomiast filtrowanie i przechowywanie ogromnych ilości danych przed udostępnienem ich w raporcie pozostawiamy większemu silnikowi bazodanowemu. – I to wszystko dzięki magicznej kwerendzie przekazującej. :)

Kod tworzący tymczasowo taką kwerende i jej wywołanie przedstawia się następująco:

Funkcja tworząca i wykonująca zapytanie SQL lub procedure składowaną.

'qSQL = Zapytanie do bazy danych
'return RecordSet
Public Function ExecutePassThruQuery(qSQL As String) As Recordset
    Dim db As DAO.Database
    Dim qryDef As DAO.QueryDef
    Dim recSet As DAO.Recordset
    Dim queryName As String

    On Error GoTo ErrorHandling:
    'Obiekt bazy danych
    Set db = CurrentDb

    'Nazwa tymczasowej kwerendy przekazujacej
    queryName = "tempQuery"
    'Usuniecie kwerendy jesli istnieje
    RemovePassThruQueryIfExists (queryName)

    'Utworzenie nowej kwerendy przekazujacej
    Set qryDef = db.CreateQueryDef(queryName)

    qryDef.ReturnsRecords = True
    'polaczenie z baza danych
    qryDef.Connect = connectionString
    qryDef.SQL = qSQL

    'Zwraca obiekt Recordset-u z danymi, w przeciwnym wypadku zwraca Nothing
    Set ExecutePassThruQuery = qryDef.OpenRecordset(dbOpenSnapshot)

    Set db = Nothing
    Set qryDef = Nothing
    Set recSet = Nothing

    Exit Function
ErrorHandling:
    MsgBox Err.Description
End Function

Funkcja wywołująca pracedure składowaną (wykorzystuje powyższą funkcję do utworzenia i wywołania bezpośrednio na bazie danych procedury) – wzasadzie tworzy specyficzny string w postaci np. „nazwa_procedury parametr1, parametr2, parametr3″.

'params = kolekcja parametrow procedury skladowanej jesli jakies przyjmuje
'procName = nazwa procedury skladowanej
'return DAO.RecordSet
Public Function CallStoredProcedure(procName As String, params As Collection) As Recordset
    Dim recSet As DAO.Recordset
    Dim queryName As String
    Dim counter As Integer

    On Error GoTo ErrorHandling:

    queryName = "tempQuery"

    'Dolaczam parametry do procedury
    If Not params Is Nothing Then
        If params.Count > 0 Then
            procName = procName & " " & CStr(params(1))
            For counter = 2 To params.Count
                procName = procName & ", " & CStr(params.Item(counter))
            Next counter
        End If
    End If

    'Wywoluje Funkcje zwracajaca rezultat wykonanej procedury skladowanej
    Set recSet = ExecutePassThruQuery(procName)

    Set CallStoredProcedure = recSet

    Set recSet = Nothing

    Exit Function
ErrorHandling:
    MsgBox Err.Description
End Function

Dodatkowo utworzyłem procedurę usuwającą tymczasową kwerende przekazującą.

'Usuwa tymczasowa kwerende
'queryName = nazwa kwerendy do usuniecia
Private Sub RemovePassThruQueryIfExists(queryName)
    Dim qryDef As QueryDef
    Dim db As Database

    On Error GoTo ErrorHandling
    Set db = CurrentDb

    For Each qryDef In db.QueryDefs
        If qryDef.Name = queryName Then
            db.QueryDefs.Delete (qryDef.Name)
            Exit For
        End If
    Next

    Set qryDef = Nothing
    Set db = Nothing
    Exit Sub
ErrorHandling:
    MsgBox Err.Description
End Sub

Załóżmy, że wywoływana procedura składowana w MS SQL Server ma nazwę „mojaProcedura” i pobiera dwa parametry typu VARCHAR. Wartości parametrów które chcemy przekazac do procedury są następujące: param1 = „ala”, param2 = „ola”. Kwerenda przekazująca w swoim wnętrzu miała by string w takiej oto postaci: „mojaProcedura ala, ola”.

Wywołanie:

Dim recSet As DAO.Recordset
Dim col As New Collection

col.Add "ala"
col.Add "ola"

Set recSet = CallStoredProcedure "mojaProcedura", col

W zasadzie to wszystko – tyle wystarczy, aby otrzymac obiekt RecordSet-u który następnie możemy bez żadnych przeszkód podpiąć do utworzonego wcześniej w MS Access raportu. :)

To co dała mi praktyka i to czego nie dała mi szkoła

Majowym wpisem pod tytułem „Pierwsza praca” rozpocząłem poszukiwania miejsca gdzie mógłbym odbyć praktykę zawodową. Wiele firm zajmujących się produkcją oprogramowania realizuje programy letnich praktyk studenckich skierowane do studentów ostatnich lat studiów. Kierując się bardzo pomocnymi komentarzami pod wspomnianym wyżej wpisem rozpocząłem wysyłanie CV. Zakładałem, że na drodze do upragnionych pierwszych poczynań programistycznych stanie mi rozmowa kwalifikacyjna (to raczej naturalne), problem znalezienia lokum w mieście do którego się udam itd. – Jednak nie przypuszczałem, że dodatkowo uczelnia na której studiuje (PWSZ w Białej Podlaskiej) dołączy do tej listy.

Szanse sprawdzenia swoich umiejętności dała mi lubelska firma „UHC CompuGROUP holding” – zajmująca się tworzeniem oprogramowania dla sektora medycznego. Określiłbym, że rekrutacja odbyła się w dwóch etapach – przesłanie CV zakończyło się prośbą o dostarczenie „próbek kodu” – aplikacji które napisałem do tej pory. Następnie po kilkudniowej ciszy otrzymałem telefon i odbyła się 2,5 godzinna rozmowa wstępna :). Kilka dni później dowiedziałem się – kto będzie moim opiekunem praktyk oraz do jakiego działu zostałem przydzielony (Dział Systemów Ekonomicznych). Pozostało mi dopiąć kwestie formalne o czym napiszę szerzej pod koniec.

Moim głównym celem było zmierzenie się z realnymi problemami na stanowisku programisty. Otrzymałem pierwsze zadanie – opiekun rzeczowo wytłumaczył mi co mam zrobić, jakiego wyniku oczekuje. Moje potknięcia i niedociągnięcia były traktowane z pełną wyrozumiałością, co niesamowicie mnie motywowało do cięższej pracy. Miałem czas na naukę, nie obawiałem się pytać nawet o najgłupsze rzeczy, atmosfera panująca w UHC przerosła moje najśmielsze oczekiwania. Mimo, że nie do końca zajmowałem się tym czym bym chciał – wcale mi to nie przeszkadzało! To co robiłem sprawiało mi ogromną przyjemność. :)

Praktyki uzmysłowiły mi, że jeżeli trafie w przyszłości do firmy takiej jak UHC to szybko się rozwinę. Szukajcie właśnie takiej pozytywnej atmosfery gdy stawiacie pierwsze kroki ku wymarzonej pracy czy też praktyki. Polecam przeczytać wpis Procenta – dzięki któremu zwracałem uwagę na wszystko co się wokół dzieje już podczas rozmowy kwalifikacyjnej.

Pozdrawiam i jeszcze raz dziękuję Markowi, Tomkowi, Andrzejowi, Gabrysiowi i Kamilowi za wspaniałą atmosferę i to wszystko czego się od Was nauczyłem. :)

Jak już wspomniałem największą przeszkodą do odbycia upragnionych praktyk była uczelnia na której studiuje. W PWSZ w Białej Podlaskiej studenci II roku na kierunku informatyka mają obowiązek odbycia 4 tygodniowej praktyki studenckiej – wypełniłem ten obowiązek jednak miejsce praktyk odbiegało dalece od moich oczekiwań. Byłem świadomy, że większość firm tworzących oprogramowanie przyjmuję tak naprawdę studentów III roku, aby mogli się zmierzyć z realiami programistycznymi. Postanowiłem fakt ukończenia III roku uwieńczyć zdobyciem miejsca gdzie postawie pierwsze kroki w prawdziwej pracy.

Poproszono mnie w firmie UHC o umowę na praktyki z moją uczelnią – pomyślałem, że nie będzie z tym problemu mimo, że będą to moje fakultatywne (ponadprogramowe) praktyki. Zadzwoniłem, więc do Działu Spraw Studenckich skąd skierowano mnie do Działu Praktyk.

Odpowiedz Pani kierownik działu: Nie wydajemy umowy na praktyki ponadprogramowe.

Nie straciłem jeszcze nadziei i zgodnie z podpowiedzią z firmy zadzwoniłem do Biura Karier które na niektórych uczelniach podpisuję takie umowy
i nie ma z tym najmniejszego problemu.

Odpowiedz biura karier: Jest Pan pierwszą osobą pytająca o takie rzeczy. Proszę się skierować do Działu Praktyk. :/

Ostatnia deska ratunku – napisałem do prorektora uczelni. Pismo wróciło do działu praktyk i zgadnijcie co ? :) Żal.pl – Odpowiedź identyczna jak wyżej – Nie wydajemy bo…. Ciekaw jestem jaką opinie wyraził Pan prorektor pod moim podaniem – Jeśli w ogóle jakąś wyraził… Nakreśliłem odpowiednim osobom w firmie całą sytuację – przesłano mi firmowy druk umowy między uczelnią, a UHC z którym osobiście (jak dotąd załatwiałem wszystko telefonicznie) udałem się na uczelnie. Odwiedziłem Biuro Karier, skąd powędrowałem do Instytutu Zarządzania (zabawnie ;)) tam Pani poinformowała mnie, że za dwa dni przekaże moją umowę odpowiedniej osobie.

Uwaga teraz najlepsza część tej parodii – W tym samym czasie w firmie ktoś stanął „na głowie” i znalazł sposób, aby podpisać ze mną umowę z wyłączeniem uczelni. Wróciłem do domu przeczytałem maila z tą informacja i sprawa była załatwiona. W mojej głowie pojawiła się myśl – skoro mam już wszystko załatwione to sprawdzę jednak czy uczelnia pomoże w rozwoju swojemu studentowi i podpisze przedłożony druk. Mijają dwa dni – docieram na uczelnie o wyznaczonej godzinie, zgłaszam się do przemiłej Pani i… – „Ojej zapomniałam, ale zaraz zaniosę to Pani doktor..” :) – Uśmiechnąłem się tylko – Bez komentarza… Pani doktor zerknęła i poleciła mi iść z tym do dyrektora instytutu informatyki – paranoja. :) Wziąłem umowę – zrobiłem
z niej ładną kulkę i wyrzuciłem do kosza.

Oto w jaki sposób PWSZ w Białej Podlaskiej pomogło mi odbyć praktyki studenckie, oto jak władze uczelni wsparły moją własną inicjatywę, oto
w jaki sposób wsparły moją chęć rozwoju.

Brawo PWSZ!

Tylko dzięki postawie odpowiednich osób w firmie UHC nie kosztowało mnie to, więcej nerwów za co Bardzo Dziękuję.

Pierwsza praca

Nadszedł czas kiedy obowiązki związane ze szkołą mogę odsunąć na dalszy plan. Zbliża się mój ostatni semestr studiów, a wraz z nim szereg przedmiotów którym nie będę musiał poświęcać stu procentowej uwagi. Postanowiłem, więc rozpocząć poszukiwania swojej pierwszej pracy i podzielić się tą nieodpartą chęcią właśnie tutaj. Należę do grona osób które podczas studiów skupiały się na nauce, rozwoju własnej osoby, w moim przypadku mogę jeszcze dodać setki godzin spędzonych w domu nad pogłębianiem umiejętności programistycznych (w końcu studia to tylko zarys wielu zagadnień itd.). Skoro prawie nie mam udokumentowanego doświadczenia (napisałem tutaj „prawie” ponieważ mam za sobą 1 miesiąc praktyki podczas której zajmowałem się implementacją niewielkiego programu raportującego, ale czy warto o tym wspominać w CV…) , a te które posiadam zostało zdobyte podczas trwających jeszcze studiów (czyli tzw.„doświadczenie akademickie„) to czym mam zachęcić pracodawcę, aby pozwolił mi się zmierzyć z rozmową wstępną na stanowisko programistyczne? Co może być moją rekomendacją? Te pytania dręczą mnie od dłuższego czasu.

Może?

  • setki godzin spędzonych nad rozwiązywaniem problemów implementacyjnych związanych
    z zadaniami szkolnymi, pojawiającymi się na forum codeguru.pl, csharp.pl
  • chęć wejścia na ścieżkę certyfikacyjną poprzez uczestnictwo w zajęciach „Study Group 70-536” organizowanych wspólnymi siłami wielu osób na mojej uczelni
  • CV – w którym zapewne jedyne co mogę zrobić to wymienić to z czym zetknąłem się podczas pracy nad własnym rozwojem
  • każdy wpis, każdy komentarz na tym blogu
  • wiele podziękowań od kolegów i koleżanek na mojej uczelni za pomoc w ciągłej ich walce z programowaniem
  • etc.

Jeśli odwiedzających ten oto blog (pracodawcy i nie tylko) taka rekomendacja przekonuje-zapraszam z przyjemnością zmierzę się z rozmową wstępną, z przyjemnością dam z siebie wszystko, bo jeśli już coś robię to wkładam w to maksimum energii.

Z poważaniem
Piotr Zarzycki