Programowanie urządzeń typu embedded

W sferze programowania – podobnie jak w modzie – istnieją pewne trendy. Od dłuższego czasu można zaobserwować tendencję do korzystania z prostych, wysokopoziomowych rozwiązań kosztem szybkości działania. Jest to spowodowane przede wszystkim rosnącymi kosztami tworzenia dużych systemów oraz tanienia mocy obliczeniowej komputerów. Najczęściej wykorzystywanymi językami wysokiego poziomu są Java oraz C#. Programowanie w tych językach jest niezwykle szybkie i proste. Badania wykazały, że w języku Java tę samą aplikację pisze się około dwóch razy szybciej niż w konkurencyjnym języku C++, do dla firmy oznacza ograniczenie kosztów produkcji oprogramowania o połowę. Jednak to podejście nie sprawdza się w każdym przypadku. Najlepszym przykładem sytuacji, gdzie programowanie na wysokim poziomie się nie sprawdza, są systemy tupu embedded. Są to wysoce wyspecjalizowane urządzenia, które ze względu na produkcję w milionach egzemplarzy najczęściej mają sprzętową moc obliczeniową ograniczoną do minimum.

Przykładem urządzenia typu embedded może by odtwarzacz plików mp3. Producent zamierza wyprodukować miliony podobnych urządzeń i dlatego będzie się starać, żeby koszty poszczególnych elementów były jak najniższe. Jeżeli oszczędzimy 1 zł na każdym urządzeniu, używając słabszego procesora, to ta niewielka kwota pomnożona np. przez 50 000 000 wyprodukowanych egzemplarzy da już znaczącą różnicę w kosztach produkcji urządzenia. Drugim powodem, dla którego urządzenia typu embedded mają niską moc obliczeniową, jest oszczędność energii. Im mniejsza jest moc obliczeniowa procesora i im prostsze oprogramowanie, tym dłużej będzie działać nasz odtwarzacz.

Przy produkcji wielu milionów prostych, wyspecjalizowanych urządzeń korzystających z baterii najczęściej nie opłaca się korzystać z języków niskiego poziomu, najczęściej C lub C++. Języki te dodatkowo pozwalają na wysoki poziom kontroli nad wewnętrznym zachowaniem aplikacji, np. umożliwiają zarządzanie przydziałem pamięci, co pozwala na znaczne przyspieszenie aplikacji, chociaż jest to możliwe tylko dzięki dodatkowej pracy wysoko wykwalifikowanego programisty.

Przykład systemu typu embedded

Jednym z najpopularniejszych systemów typu embedded są telefony komórkowe. Mimo że współczesne telefony mają już moc obliczeniową zbliżoną do komputerów, a ostatnio pojawiły się produkty firmy Blackberry, które wykorzystują sprzętową maszynę Javy i przez to umożliwiają szybkie wykonywanie aplikacji napisanych w języku wysokiego poziomu, to ciągle jednak telefony komórkowe traktowane są jako systemy z ograniczonymi zasobami i wymagające daleko idącej optymalizacji.

Jednym z najpopularniejszych systemów operacyjnych stworzonych do programowania aplikacji w językach niskiego poziomu jest Symbian. Jest to system operacyjny napisany w języku C++. Udostępnia on pełne API, które umożliwia programowanie aplikacji na ten system operacyjny w języku C++. Symbian został zaprojektowany z myślą o ograniczeniu zużycia zasobów i dlatego programista programujący na ten system operacyjny już od samego początku spotyka się z technikami optymalizującymi zużycie zasobów. Symbian np. nie wykorzystuje wprowadzonych do języka C++ wyjątków, tylko zapewnia swój własny mechanizm, tzw. leavy.

Niestety, optymalizacja sposobu programowania pociąga za sobą znaczne utrudnienie dla programisty. Symbian jest znany z tego, że jest jedną z najtrudniejszych platform programistycznych. Inną znaną cechą jest bardzo duża liczba błędów istniejących ciągle w systemie. Przy niskopoziomowym programowaniu niestety programiści mylą się znacznie częściej niż przy programowaniu wysokopoziomowym. Efektem błędów w systemie wielokrotnie są problemy ze stworzeniem działającej aplikacji. Programiści zmuszeni są do szukania obejść błędów, które właściwie nie powinny w ogóle istnieć. To dodatkowo zwiększa koszty stworzenia oprogramowania na ten system operacyjny.

Alternatywy

Firma Blackberry wprowadziła na rynek telefony komórkowe wykorzystujące tzw. sprzętową maszynę wirtualną Javy. Na normalnym komputerze aplikacja napisana w języku Java jest wykonywana przez zewnętrzny program, co dodatkowo spowalnia działanie aplikacji. wykorzystanie sprzętowej maszyny wirtualnej, czyli stworzenie procesora interpretującego bezpośrednio tzw. kod binarny Javy umożliwiło znaczne przyspieszenie działania Javy i tym samym otwarło drogę do programowania systemów w tym języku. Technologia ta jeszcze nie jest dobrze rozwinięta, ale stanowi ciekawą alternatywę dla tradycyjnego programowania niskopoziomowego systemów ebedded.

Czy programowanie niskopoziomowe się opłaca?

Niestety nie da się jednoznacznie odpowiedzieć na pytanie, czy niskopoziomowe programowanie systemów ebedded się opłaca. Z całą pewnością jest opłacalne wtedy, kiedy poziom komplikacji oprogramowania jest bardzo niski, urządzenie jest produkowane w milionach egzemplarzy i wykorzystywana jest bateria do zasilania urządzenia. Od pewnego momentu opłaca się już programować na wysokim poziomie, jednak przejście to jest płynne i podjęcie decyzji o zastosowaniu jednej lub drugiej technologii jest możliwe dopiero po daleko idącej kalkulacji kosztów i analizie wymagań.

Programowanie multiplatformowe w C++

W dobie wielu konkurujących ze sobą systemów operacyjnych programista często staje przed wyborem platformy docelowej. Często okazuje się, że wybór ten nie jest prosty, ponieważ różni użytkownicy mają różne oczekiwania w stosunku do platformy. Podobnie było w przypadku oprogramowania telekomunikacyjnego, którego rozwijaniem zajmuję się dotychczas. Ze względu na łatwość i dobrą znajomość środowiska pierwotnie wybrany został system operacyjny Windows. Niestety, okazało się, że dostawca sprzętu niektóre potrzebne funkcje udostępnia jedynie pod systemem Linux RHEL. Najlepszym rozwiązaniem podczas pisania oprogramowania jest takie tworzenie kodu, aby był on dostępny pod maksymalną liczbą platform. Łatwo powiedzieć.

Manipulacja w kasynach

Czy zastanawiałeś się kiedyś, jak to jest, że tak wielu ludzi jest uzależnionych od hazardu? Jak to się dzieje, że – mimo iż wiedzą, że w kasynach pieniądze się na ogół przegrywa, a nie wygrywa – ciągle grają i przegrywają w nich całe swoje majątki? Jak to jest możliwe?

Łączniki zdań

Czy rozmawiając z drugą osobą i mówiąc jej o zaletach i wadach jakiegoś Twojego pomysłu chciałbyś, żeby ta osoba zapamiętała bardziej zalety, czy też wady? Właściwie to pytanie było tylko retoryczne, ponieważ jestem pewien, że zapamiętanie przez drugą osobę zalet jest dla Ciebie dużo lepszą perspektywą.

Jak pisać perswazyjne teksty?

Czy zdarzyło Ci się, że przeczytałeś jakiś naprawdę dobry tekst? Być może była to reklama, która tak sugestywnie przedstawiała zalety jakiegoś produktu, że kupiłeś go bez większego zastanawiania się. I być może sam produkt nie dorównywał jego reklamie, a Ty zastanawiałeś się, co tak właściwie sprawiło, że go kupiłeś. Być może trafiłeś na stronę opisującą tak ciekawie jakiś temat, że nie mogłeś się od niego oderwać i wracałeś na tę stronę wiele, wiele razy. Być może przeczytałeś książkę, która przeniosła cię do innego świata na wiele godzin?

Jak powstają przekonania?

Wszystkie przekonania mają jedną ciekawą cechę. Wszystkie są całkowicie nieprawdziwe. Mówię dosłownie, praktycznie każde przekonanie jest nieprawdziwe. Włącznie z tym.

Cykl Kolba

Cykl Kolba to mechanizm przedstawiania wiedzy bazujący na czterech fundamentalnych sposobach uczenia się. Dzięki niemu uczestnicy szkoleń nie tylko zapamiętają dużo więcej i na dużo dłuższy okres, ale także będą bardziej zainteresowani tematem ze względu na różnorodność formy i silniejszą stymulację.

Podstawy prowadzenia szkoleń

Każdy ma swój własny styl prowadzenia treningów, ale przejście przez kilka poniższych kroków pomoże upewnić się, że Twoje szkolenie będzie wysokiej jakości oraz że nie popełnisz typowych błędów. W tekście używany będzie przykład szkolenia motywacyjnego, który pomoże Ci zrozumieć w praktyce wiele koncepcji.

Guru NLP

Absolutna większość wiedzy uznawanej za trzon NLP została stworzona przez zaledwie kilka osób. Po wielu latach osoby te są uznawane za autorytety, za ojców całej nowej dziedziny.

Geneza NLP

NLP stworzyli na początku lat siedemdziesiątych Richard Bandler oraz John Grinder. Prowadząc wtedy grupy Gestaltowe (Gestalt to podejście psychoterapeutyczne) zauważyli oni, że w całym procesie psychoterapii tylko kilka punktów jest tak naprawdę istotnych, a także że często osoby mające wspaniałe możliwości (np. ich właśni trenerzy Gestaltu) sami nie mają świadomości, co robią, dlatego nie są w stanie przekazać w pełni posiadanych umiejętności innym osobom.