Monthly Archives: Marzec 2016

Samosynchronizujący się Timer z UI w C# WPF

Framework Windows Presentation Foundation daje nam programistom C# duże pole do popisu, ponieważ oddziela warstwę kodu od warstwy widoku, co poprawia czytelność kodu, zwiększa możliwości testowania ale przede wszystkim po prostu dużo prościej się tak pisze aplikacje. Jednak poza wymienionymi plusami znalazły się też minusy, a mianowicie pomimo rozdzielenia widoku i kontrolera, wszystkie operacje działają w jednym wątku. Nie jest to dobre rozwiązanie, ponieważ przyzwyczaja to do pisania i korzystania z funkcji przebiegających w sposób synchroniczny, czyli w przypadku bardziej złożonych operacji, może prowadzić do blokowania okna.

Warto więc znać sposoby na to, żeby stworzyć funkcje działające w tle ale nie wpływające na działanie UI. Timer jest jednym z takich elementów. Timer pozwala uruchamiać pewne działanie w osobnym wątku co określony czas przez programistę czas.

Jednak okazuje się, że Timer, który zawarty jest w przestrzeni nazw System.Timers nie jest rozwiązaniem idealnym, ponieważ w przypadku komunikacji z wątkiem odpowiadającym za UI nie jest on w stanie doprowadzić do synchronizacji, czy do odpowiedniego ustawienia się w kolejkę wykonywania się operacji.

Rozwiązaniem jest System.Windows.Threading.DispatcherTimer, który całkowicie rozwiązuje problem synchronizacji między wątkami, ale trzeba znać również wady tego rozwiązania. Jedną z poważniejszych wad jest to, że ten timer nie będzie odmierzał czasu idealnie. On gwarantuje tylko, że wywołanie funkcji nie nastąpi wcześniej niż przed czasem, który został określony podczas jego inicjalizacji. Jest to związane dokładnie z tym o czym wcześniej wspomniałem, czyli kolejką operacji. Może się okazać, że w kolejce jest dość sporo zadań, które zajmują czas i nie ma możliwości na czas wykonania funkcji z timera, więc wykona się ona później.

Poniżej kod do wykorzystania w swoim rozwiązaniu:


System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
// timespan (godziny, minuty, sekundy)
dispatcherTimer.Interval = new TimeSpan(0,5,0);
dispatcherTimer.Start();

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
// tutaj powinien się znaleźć kod wykonywany co 5 min
}

Własna działalność czy praca na etat?

Ponad rok temu zakończyłem współpracę z firmą programistyczną w której wtedy pracowałem i w sumie całkiem nieźle zarabiałem. Postanowiłem za zaoszczędzone pieniądze trochę odpocząć, założyć własną działalność i pozyskać klientów.

Swoją przygodę z freelancingiem rozpocząłem w czerwcu 2015 i praktycznie od razu pozyskałem kilku klientów. Pierwsze spotkania z nimi były dla mnie bardzo stresujące, ponieważ wszystko co się działo na tych spotkaniach było dla mnie nowe. Nie wiedziałem w jaki sposób mam prowadzić z nimi rozmowę, w jaki sposób się zareklamować i w rezultacie umówić się na podpisanie umowy i w rezultacie na realizacje projektu. Wszystko jest bardzo stresujące, a chyba najcięższa jest rozmowa o pieniądzach. Tego trzeba było się nauczyć, ponieważ mam wrażenie, że wcześniej się trochę wstydziłem o kwocie mówić. Nie wiedziałem jak klient zareaguje. Okazuje się jednak, że nie ma się zupełnie czego bać, ponieważ klient może się zgodzić lub nie i nie ma w tym nic strasznego. Po prostu może się okazać, że będzie trzeba z nim trochę po negocjować i ewentualnie przekonać, że ta praca będzie tyle warta.

Drugą stresującą sprawą, jest ustalanie daty zakończenia projektu i oddania gotowego dzieła. Zwykle na początku projektu bardzo ciężko jest przewidzieć co się może w jego trakcie stać. Błędy podczas tworzenia oprogramowania się pojawiają i są nieuniknione. Najważniejsze, żeby mieć tego pewność i już na etapie określania daty, dodać do niej jakieś powiedzmy 10% więcej, ponieważ to w przypadku problemów zapewni trochę więcej luzu, a w przypadku dobrego przebiegu prac po prostu spokój.

Następnym etapem po ustaleniu wszystkich wytycznych projektu z klientem jest stworzenie umowy i określenie w niej wszystkich parametrów projektu. Chciałbym to podkreślić bardzo mocno: żadnej pracy bez umowy. Na prawdę chcę Cię przekonać do tego, że nie warto robić czegokolwiek bez spisania umowy z klientem, ponieważ możesz w jednej chwili stracić kilkadziesiąt godzin pracy i nie mieć za to wszystko zapłacone. Oczywiście niektórzy napiszą, że jeżeli masz na mailu całą historię korespondencji, to możesz to traktować jak umowę. Tak, ale musisz to udowodnić przed sądem i nie masz wszystkiego czarno na białym jak w przypadku umowy. Jeżeli mi nie wierzysz, to poszukaj w googlu przykłady takich sytuacji i zauważysz, że wiele osób nie jest zadowolonych z zakończenia tych spraw, albo sprawy ciągną się miesiącami.

Po tych etapach czas zabrać się za pracę i co jakiś czas konsultować wyniki etapów prac z klientem. Choć w większości projektów współpraca z klientem jest względnie prosta, zdarzają się takie sytuacje gdy klient przerabia każdy etap projektu w trakcie jego trwania. Generalnie wiadomo, że na pewne rzeczy można pozwolić klientowi, ponieważ na etapie projektowania nie da się wszystkiego przewidzieć, ale warto zachować umiar. W przypadku gdy klient notorycznie zmienia koncepcje, warto za każdą zmianę naliczyć mu opłatę, ponieważ w większości jest to już praca wykonana, a przeróbki często bywają trudniejsze niż pisania od aplikacji od zera.

Rozpisałem się mocno o tych szczegółach, a w sumie warto wrócić do sedna czyli do pisania o tym czy warto mieć własną firmę. Jeżeli spojrzymy na kwestie finansowe to trzeba przyznać, że pieniądze są lepsze niż w przypadku pracy na etat, ale jest jeden problem. W przypadku etatu pieniądze są na koncie 10 każdego miesiąca, a w przypadku firmy nigdy nie da się przewidzieć kiedy klient wyśle przelew. Tak więc trzeba się nauczyć zarządzać pieniędzmi i być oszczędnym, ponieważ przychodzi taki moment gdy kończy się duży projekt i masz kilkanaście tysięcy na koncie, ale nie masz żadnych konkretnych projektów w najbliższym czasie, wtedy wydawanie tych pieniędzy na komputery, telewizory i xboxy nie jest najlepszym pomysłem. Generalnie warto sobie założyć konto oszczędnościowe na które przelewane są pieniądze z projektów i z niego wypłacać sobie pensje.

Warto również pamiętać, że w przypadku własnej firmy dochodzą takie koszty jak ZUS, podatek dochodowy itp. ale to jest tak szeroki temat, że warto napisać o nim osobny artykuł.

Ciężko powiedzieć wprost czy założenie i prowadzenie własnej firmy będzie się opłacać, bo jest ogromna konkurencja. Pieniądze są lepsze niż na etat, ale nie zawsze są klienci. Stres jest dużo większy, ale w przypadku pozytywnego zakończenia projektu satysfakcja też jest duża. Wszystko zależy od osoby. Ja preferuję taki styl pracy i mi to odpowiada, a w przypadku gdy mi się to znudzi, to z pewnością znajdzie się jakaś firma, która będzie mnie chciała. Tak więc polecam spróbować, ale warto mieć jakiś bufor pieniężny w przypadku niepowodzenia.

Dlaczego Coca-cola ma czerwone logo?

Dlaczego Coca-cola ma czerwone logo?

Czyli o kolorach ciepłych.

W poprzednim artykule pisałam o tym jak ważną rolę pełni dobrze dobrany kolor na stronie. Teraz zapraszam na dalszą część o kolorach ciepłych.

Żółty

Bardzo żywy kolor, kojarzony z optymizmem i z ciepłem. Może być również odbierany jako kolor skąpstwa albo tchórzostwa, ale też nie wszędzie bo np. w Japonii jest uważany za kolor odwagi. W Egipcie natomiast jest to kolor żałobny. Kolor żółty jest bardzo lubiany przez dzieci.
Jasny, soczysty żółty jest bardzo stymulujący, a ciemniejszy odcień czyli, np. kolor złoty daje wrażenie starodawności albo bogactwa i przepychu.

yellowźródło: http://www.yp.pl/
yellow2
źródło: http://www.liptonicetea.com/

Żółta strona Lipton z hasłem „Drink positive”.

Żółty nie musi dominować na stronie. Dobrze się sprawdza również jako dodatek do strony. Wtedy traktowany jest jako element ożywczy.

Pomarańczowy

Młodzieńczy, radosny i pogodny kolor. Jest to kolor podrzędny – powstaje z połączenia dwóch innych: żółtego i czerwonego. Kojarzony z figlarnością i żartobliwością, a czasami też pewnością siebie. Pasuje w sklepach internetowych bo wzywa do działania, daje impuls do kupowania. Używany często w restauracjach ponieważ wzmaga apetyt.

orange2źródło: http://www.crushsoda.com/
orange
źródło: http://smacznygarnek.pl/

Czerwony

Najsilniej stymulujący kolor, jest dynamiczny, przyciąga uwagę. Pozytywnie kojarzy się z miłością, namiętnością, gorącymi uczuciami, a negatywnie ze złością i  agresją. W Południowej Afryce czerwony to kolor żałobny. W Japonii symbol bohaterstwa. Natomiast w Chinach i Indiach panny młode zakładają sukienki w tym kolorze – ma to przynieść szczęście. Podobna tradycja jest w Polsce, na maturę zakłada się czerwone majtki żeby zapewni sobie powodzenie na egzaminie. W niektórych przypadkach barwa ta może podkreślać ważność czegoś, przykładem tego może być czerwony dywan albo szaty i buty szlachty, które zwykle były czerwone.
Tak jak kolor pomarańczowy, również zachęca do wykonania jakiejś czynności (call to action), być może dlatego logo Coca-coli jest czerwone, żeby przyciągnąć nasz wzrok i zachęcić do zakupu.
Z tego powodu, że od razu rzuca się w oczy używany jest do ostrzeżeń (znak stopu, światła sygnalizacyjne). Na stronach operacje, które mogą powodować jakieś nieodwracalne skutki, np. usuwanie konta przez użytkownika też często przedstawiane są w kolorze czerwonym.
Czerwony kolor trzeba używać ostrożnie. Zbyt intensywna czerwień może przytłoczyć odbiorcę, ale używany rozsądnie może przynieść duże efekty.

redźródło: https://www.virginmedia.ie/
red3
źródło: http://www.leonex.de/