Nie zawsze Timeout-y definiuje się w milisekundach …. warto to zawsze sprawdzić w dokumentacji wykorzystywanej biblioteki, aby potem można uniknąć kilku godzin zastanawiania się co jest nie tak oraz żenującej korespondencji z autorem biblioteki, podczas której wychodzi się (bądź co bądź umiarkowanie, ale jednak) na ignoranta.
Rozłączanie połączenia w libnodave
Ten wpis jest bardziej ku własnej pamięci, jako że libnodave nie jest zapewne zbyt często używaną biblioteką.
Używam libnodave do odczytu/zapisu danych ze sterownikami Simatic S7. Jakiś czas temu natrafiłem na pewien problem, otóż jeżeli tworzymy obiekt klasy odpowiedzialnej za połączenie ze sterownikiem i nawiązujemy połączenie wszystko działa ok. aż do momentu kiedy to połączenie nawiążemy po raz 7-my. Kolejne połączenie się nie udaje.
W Dispose mojej klasy używałem zawsze disconnectPLC na obiekcie klasylibnodave.DaveConnection oraz disconnectAdapter na obiekcie klasylibnodave.daveInterface.
Jak się okazuje to było zbyt mało, konieczne jest jeszcze zamknięcie portu komunikacyjnego przez
libnodave.closePort(fds.rdf)
, gdzie fds.rdf zawiera parametry otwartego wcześniej gniazda. Bez tej linijki libnodave uzupełniał kolejkę połączeń o kolejne nowo otwarte połączenie, a kolejka równoczesnych połączeń pozwala tylko na 7 równoczesnych połączeń.
Zaskakujące, że czasem rozwiązanie dręczącego od dawna problemu jest w jednej tylko linijce kodu …
2011/2012
Początek nowego roku to zwykle okres podsumowań i planów na nadchodzące 36x dni.
Ja zwykle uciekałem raczej od tej czynności, tym razem jednak może warto zastanowić się nad tym co udało a czego nie udało się osiągnąć w obecnym roku a do czego może ambitnie warto by podejść w roku nadchodzącym.
Pozytywy 2011.
Zawodowe:
– udało mi się zdać kretyński egzamin certyfikacyjny Simatic, który to w ramach programu Siemens Solution Partner – w zakresie Factory Automation – muszę zdawać co dwa lata. Na co dzień stricte z programowaniem sterowników mam ograniczoną styczność więc nie było to tak łatwe i wymagało ode mnie sporo przygotowania – tym bardziej, że pytania były bardzo „encyklopedyczne”.
– zdałem egzamin kwalifikacyjny SEP i można powiedzieć, że jestem elektrykiem. Teraz już mogę spokojnie grzebać w szafach elektrycznych i szafach automatyki „legalnie”. Przygotowywałem się sam, nie uczestniczyłem w kursie. Muszę przyznać, że wiedza którą trzeba opanować do tego egzaminu to naprawdę wiedza bardzo przydatna. Podstawowa wiedza z zakresu ochrony przeciwporażeniowej oraz ratowania osób poszkodowanych przez działanie prądu elektrycznego powinna być moim zdaniem nauczana w szkole – i to bez względu na jej profil. Dla mnie sporo tej wiedzy to była nowość.
– pojawiło się kilka bardzo ciekawych projektów, z których jeden większy jest nadal w fazie rozwoju.
– wróciłem do nauki i czytania książek. 2010 rok był pod tym względem kompletnie jałowy.
– zaczynam wdrażać TDD i testy jednostkowe jako takie w moich projektach
– założyłem bloga, w nadzieji że będzie mnie on mobilizował do intensywniejszego rozwoju
Prywatne:
– sprzedałem poprzedni samochód
– udało mi się wygospodarować trochę czasu na przyjemności i ruch, z czym był problem rok wcześniej
– zespół banjowy w którym gram zainaugurował swoją działalność na dwóch festiwalach jazzowych w regionie i został bardzo ciepło przyjęty
– końcem roku wróciłem do gry na ukulele, którą wcześniej zaniedbałem
– upłynął ponad rok odkąd mieszkamy w zakupionym w 2010 domu i póki co wszystko układa się ok
– udało się nieco pchnąć do przodu remont w/w domu
– sąsiad zgodził się nam odsprzedać kawałek swojej działki i jak dobrze pójdzie wkrótce będe miał większy ogród
Negatywy 2011
Zawodowe:
– Moim zdaniem nadal zbyt mało czasu poświęciłem na rozwój siebie jako programisty
– Nie udało mi się zabrać za moje projekty indywidualne, które nadal leżą w szufladzie z pomysłami i pomimo zapału, który pojawił się po intenstywnej lekturze o GTD – nie ruszyłem ich nadal.
– Pomimo entuzjazmu, który towarzyszył mi przy zakładaniu bloga, ilość postów nie przyrasta intensywnie
Prywatne:
– Jest coraz mniej czasu na wszystko. Tydzień od weekendu do weekendu biegnie co raz szybciej i co raz mniej udaje się w tym czasie zrobić
– Nie udało się wykonać remontu domu w zakresie, który planowaliśmy rok wcześniej. Adaptacja dodatkowego pomieszczenia na pokój została odłożona na nie określoną przyszłość.
– Zaczyna mnie nieco męczyć dawanie lekcji gry na gitarze i rozważam rezygnację z tego zajęcia w przyszłym roku szkolnym
Bilans wychodzi jak widać raczej na plus, więc mogę spokojnie powiedzieć, że 2011 był dla mnie dobrym rokiem.
PLANY 2012
Ponoć lepiej mniej planować, aby potem cieszyć się z ilości zrealizowanych pomysłów zamiast cierpieć na kaca moralnego.
Nie mniej jednak w 2012 chciałbym.
Zawodowo:
– Mam nadzieję, że w firmie pojawią się nowe ciekawe projekty do realizacji i nie będzie pod tym względem gorzej niż w roku ubiegłym
– Chcę ruszyć wreszcie moje schowane w szufladzie pomysły i zobaczyć czy byłoby nimi jakieś zainteresowanie na rynku
– Planuję zdać nareszcie 70-536 i może jeszcze jakiś inny egzamin MCTS
– Chciałbym się nadal intensywnie rozwijać i podnosić jakość tego co maluję ołówkiem na kartce i wystukuję potem na klawiaturze, mam nadzieję że wystarczy mi na to zapału.
– Blog. Postaram się opisać jak za pomocą c# i dostępnych bilbiotek pogadać ze sterownikiem PLC Siemensa i co ciekawego można w ten sposób osiągnąć. Mam nadzieję, że nie braknie też innych tematów i pomysłów i blog wreszcie „ruszy”.
Prywatnie:
– Chcę zrobić prawo jazdy kat. A i zakupić jakiś PRL-owy motocyklowy klasyk.
– Mam nadzieję, że muzycznie uda się trochę bardziej rozwinąć skrzydła, trochę wrócić do komponowania, aktywniej podziałac w zespole.
– Remonty domu – na tym polu mam nadzieję też uda się coś ruszyć do przodu
Mam nadzieję, że czytając ten wpis za 12 miesięcy będę go czytał z zadowoleniem a nie z moralniakiem.
Na koniec życzę wszystkim aby 2012 nie był gorszy niż 2011
Captains Log – Stardate 201111.12 – freelancing i ja
Jestem właśnie świeżo po lekturze wpisu na blogu Macieja Aniserowicza, który z dużym zainteresowaniem śledzę.
http://maciejaniserowicz.com/post/2011/10/12/Freelancing-i-okrutna-rzeczywistosc-Koniec-devDream.aspx
Nie ukrywam, że zazdrościłem tej przygody z freelancingiem, za którym trochę tęsknię – przez kilka lat w duecie z kolegą opracowywaliśmy strony internetowe (ja byłem odpowiedzialny za silnik strony PHP+SMARTY+MySQL, wtedy jakoś rzadko używało się „gotowców”, a jeżeli w ogóle to do dużych systemów), zamówień było relatywnie nie mało i w czasach studenckich był to bardzo miły zastrzyk gotówki do wiecznie pustej studenckiej kieszeni. Bardzo dużo się w tym czasie nauczyłem i uważam ten okres za bardzo wartościowy. Po pewnym czasie każdy z nas podjął pracę na etacie i plany związane z zarejestrowaniem firmy i prowadzeniem w/w działalności na poważnie poszły „do szuflady”.
Rozważania na temat freelancingu nie opuściły mnie jednak nigdy i nadal mam wielką ochotę zmierzyć się z projektami z poza głównego nurtu którym się teraz zajmuję (automatyka przemysłowa), nie mniej jednak pełna rezygnacja z etatu raczej na chwilę obecną nie wchodzi w grę. Szkoda by mi było świetnej atmosfery w pracy, ciekawych projektów-wyzwań i wyjazdów (ta branża ma to do siebie – fabryki mi niestety do biura nie przyjadą, ja muszę jechać do nich) mam jednak wrażenie że jest we mnie jeszcze jakiś zapas mocy przerobowych żeby pociągnąć dodatkowy projekt. Ciągle jednak mam przeświadczenie, że trzeba się jeszcze nauczyć tego i tamtego, to i tamto przeczytać, tego i tamtego spróbować zanim swoje usługi sprzedać jako profesjonalizm z najwyższej półki.
W filmie „Heart Strings” opowiadającej o rodzinnej firmie Kamaka, które produkuje na hawajach ukulele (gra na ukulele to moja wielka miłość :P) od prawie 100 lat pojawił się cytat (autorstwa Samuela Kamaka – założyciela firmy), który zapadł mi w pamięć, i który staram się stosować podpisując cokolwiek swoim nazwiskiem:
„When you sign your product with your family name, don’t make junk”
Wracając natomiast do niepłacenia faktur – z tym problemem tak naprawdę spotkał się w mniejszym lub większym stopniu chyba każdy. W ciągu moich 6 lat pracy w obecnej firmie, pamiętam co najmniej 3 przypadki kiedy klient nie zapłacił dużej faktury – część pieniędzy udało się odzyskać, część nie – to nie miejsce by o tym pisać.
Jeżeli sięgnę pamięcią dalej – pierwsze zlecenie (i tak naprawdę moje pierwsze duże zlecenie programistyczne) które robiłem w czasach studenckich było prostym systemem służącym do rejestracji domen. Wyszukiwał on wolne domeny i automatycznie przesyłał maila do administratora strony z informacją o chęci jej zarejestrowania, był tam też system logowania użytkowników itp – dokładnie już nie pamiętam, wszystko w PHP + MySQL. Zajęło mi to ładnych kilkanaście nocy, wiele technologii trzeba się było nauczyć, wiele doczytać, było wiele prób i błędów ale na końcu powstał gotowy projekt, z którego byłem zadowolony. Klient nigdy za to nie zapłacił.
Potem taka sytuacja już się raczej nie zdarzyła (a przynajmniej nie pamiętam) – mieliśmy szczęście do klientów, a może bardziej to mój kolega Michał je miał, bo głównie on zdobywał klientów, mnie udało się znaleźć 2 może 3 tematy.
Wplątałem się też kiedyś w projekt dla pewnego lekarza na zasadzie, że jak na nim zarobimy (taki trochę portal ogłoszeniowy, reklamodawcy itp.) to pewna część kasy będzie dla mnie. To była największa porażka na jaką się zdecydowałem – za godziny spędzone nad kodem zapłata była praktycznie żadna (nie sprecyzowaliśmy tego ani ustnie ani w żadnej pisemnej umowie) i tylko ciągłe pretensje że to źle, to do du..y itp. Skończyło się na mailowej kłótni i zerwaniu współpracy co jak się okazuje było dobrą decyzją – projekt co prawda żyje do dziś, ale z tego co widzę nie okazał się hitem.
Cóż … człowiek uczy się na błędach i taka lekcja też jest ważna.
Myśl o freelancingu/założeniu własnej firmy gdzieś tam we mnie siedzi, ale na pewno nie jest to jeszcze ten moment. Myślę bardziej o dodatkowych zleceniach bez rezygnacji z etatu, ale wciąż nie rozpocząłem intensywnego poszukiwania klientów – staram się wolny czas zainwestować we własną edukację i poznawanie nowych technologii czekając na okazję.
Bug w Visual Studio ?
Tytuł postu jest z pytajnikiem, bo tak naprawdę nie wiem czy do końca można to nazwać bugiem. Zgłosiłem już problem do Microsoft – nie znalazłem nigdzie w sieci opisu takiej sytuacji i jej rozwiązania więc pomyślałem, że może warto ku pamięci utrwalić to zarówno w ten sposób jak i generując post tutaj.
Problem dotyczy na pewno wersji express, i to zarówno VB jak i C# (na tych testowałem).
Objawia się tym, że w momencie gdy chcemy dodać nowe źródło danych lub wygenerować nowy ADO.NET Entity Data Model bazując na istniejącej bazie (czyli wybierając Generate from database) po wybraniu tejże opcji i kliknięciu Next Entity Data Model Wizard się zamyka i nie dzieje się nic.
Nie ma komunikatu o błędzie, nie ma informacji co jest nie tak itp. – spodziewałem się że problem może być związany ze złą konfiguracją w machine.config w NET Framework ze względu na dodawany niedawno wiersz związany z obsługą Postgres.
Sprawdziłem jeszcze wiele rzeczy – nie ma sensu opisywać ponad godziny zastanawiana się co się do cholery spieprzyło.
Rozwiązanie okazało się niezwykle banalne. Przepełniony był dziennik zdarzeń aplikacji, wpadłem na to zupełnie przypadkiem gdy szukałem tam jakiegoś wpisu VS związanego z problemem. Po wyczyszczeniu dziennika wszystko zaczęło działać ok – rzeczywiście VS chciał tam wstawić komunikat o błędzie w machine.config a dziennik był przepełniony.
Programiści VS tego wyjątku jednak zdaje się poprawnie nie obsłużyli.
Sprawa w sumie banalna – ale w podobnej sytuacji warto sprawdzić stan dziennika zdarzeń.