Ostatnio na blogu publikujemy nieco mniej, ponieważ większość naszej uwagi skupia organizacja Devoxx4Kids. Obowiązki obowiązkami, ale o #mainie nie zapominamy — przyjemnej lektury!
Cykl #main to punkt początkowy Waszego tygodnia, prasówka, w której zbieramy ciekawe linki, dzielimy się informacjami, a także podsyłamy programistyczne zadanie. Mamy nadzieję, że w ten sposób umilimy Wam poniedziałkowy powrót do rzeczywistości ;)
Grafika w nagłówku pochodzi z serwisu Freepik
Podsumowanie ankiety z zeszłego tygodnia
Zdecydowanie najwięcej osób chciałoby zobaczyć AngularJS’a — wprawdzie ekspertami w tej dziedzinie sami nie jesteśmy, ale postaramy się przygotować wartościowe materiały (prawdopodobnie we współpracy! :) ). Spring Boot na pewno także się pojawi, podobnie jak serwisy RESTowe.
Projekt dopasowany do osobowości
Czasem chciałabyś pewnie spróbować nowej technologii czy po prostu zrobić jakiś projekt, ale nie masz pomysłu. Z pomocą przychodzi serwis skillcrusk.com z propozycjami dopasowanymi do jednego z 16 typów osobowości. Na ile faktycznie są one zgodne (oraz na ile tego typu testy faktycznie opisują osobowość) pozostaje zagadką, ale inicjatywa na pewno ciekawa, a i projekty warte uwagi w wolnym czasie :)
Project ARA zamrożony?
Kilkukrotnie wspominaliśmy o projekcie ARA — modułowym telefonie. Niestety, wszystko wskazuje na to, że projekt ten został zawieszony i w najbliższym czasie nie zostanie ukończony.
Na szczęście rzeczywistość nie znosi próżni, szczególnie w zakresie nowych technologii — warty uwagi jest np. bliźniaczy projekt PuzzlePhone lub Fairphone
Artykuł w serwisie geek.com
Projekt PuzzlePhone
Projekt Fairphone
Inne podobne projekty na stronie phonebloks.com
Odpowiedź na pytanie z zeszłego tygodnia
A pytaliśmy o to: czym jest profilowanie aplikacji i kiedy należy je wykonać?
Profilowanie aplikacji to proces, w którym badamy wydajność czasową poszczególnych komponentów aplikacji. W najbardziej podstawowym wymiarze polega na pomiarze czasu, jaki maszyna wirtualna ‘spędza’ w konkretnych metodach, klasach, pakietach itp oraz badaniu ilości wywołań poszczególnych metod. Pozwala to na znalezienie wąskich gardeł wydajności całego systemu i w efekcie usunięcie problemów i poprawę wydajności :)
W kwestii rozwiązań technicznych istnieje kilka podejść:
- najbardziej poprawnym z punktu widzenia pomiarów jest użycie stosownego tzw. java agent — są to moduły, które współpracują z maszyną wirtualną i dostarczają informacji także o czasie wykonywania metod — w ten sposób działają komercyjne produkty, jak np. YourKit, a także (przeważnie) te wbudowane w IDE (warte uwagi jest narzędzie wbudowane w Netbeans — naszym zdaniem jedyny powód, dla którego warto go zainstalować ;) )
- drugi sposób polega na użyciu aspektów — dzięki AOP możemy profilować nasze aplikacje w banalny sposób, po prostu dołączając zależność do projektu (np. perf4j czy JAMon) lub pisząc krótki kod. Wadą tego rozwiązania jest to, że ogranicza nas do publicznych metod klas, a także to, że pomiary czasu nie będą precyzyjne (ponieważ uwzględniają narzut AOP) — w zdecydowanej większości przypadków nie jest to jednak konieczne i takie podejście w zupełności wystarczy
W zdecydowanej większości przypadków użycie biblioteki w projekcie pozwoli Ci zidentyfikować i zlokalizować problemy z wydajnością — jeśli jednak pracujesz nad projektem, w którym ułamki sekund mają znaczenie, potrzebujesz raczej komercyjnego rozwiązania.
Czym się różni char od byte w przypadku pracy ze Stringami w Javie?
Oczywiście zachęcamy do samodzielnego odpowiedzenia na pytanie. Za tydzień nasza odpowiedź.
Więcej pytań technicznych z poprzednich mainów wraz z linkami do odpowiedzi znajdziesz tutaj!
Ken Thompson
Współcześnie istnieje kilka systemów operacyjnych, w zależności od zastosowania wybieramy jeden z nich i nie martwimy się niczym innym. Na przełomie lat 60 i 70 ubiegłego wieku nie było jednak tak prosto — zbudowanie ‘aplikacji’ w oparciu o komputery właściwie równało się ze stworzeniem nowego systemu. Istniało kilka ‘uniwersalnych’, ale były one na tyle specyficzne, że nie zawsze opłacało się ich używać. W latach 60’tych Ken Thompson pracował w Bell Labs, m.in. nad projektem MULTICS — uniwersalnego systemu operacyjnego, który miał obsługiwać łączność sieciową (wtedy — ARPANET). Ken uznał, że projekt jest zbyt skomplikowany i nie będzie działał optymalnie i zaczął pracę nad nowym systemem — nazwanym później Unix. Jak pokazała historia — miał rację, a Unix jest obecnie podstawą działania większości urządzeń i systemów operacyjnych (zarówno Linuxy, jak i OS X — zarówno w wersjach kontrolujących Twój telefon z iOSem czy Androidem — wywodzą się ze świata Unixa). Z uwagi na budowę systemu, Ken uznał także że zasługuje na własny język — i tak stworzył język B, który był podstawą do stworzenia języka C (który z kolei wyewoluował w C++).
W późniejszych latach kilkukrotnie podejmował się projektów związanych z systemami operacyjnymi (np. systemem Plan 9, który miał być rozproszonym następcą Unixa czy Inferno — systemem, który może działać samodzielnie na różnych platformach jako maszyna wirtualna lub jako aplikacja w innych systemach — funkcjonując podobnie do JVMa w takim wypadku). Inicjatywy te jednak nie przyjęły się i nie są obecnie powszechnie stosowane. Współtworzył także standard kodowania UTF‑8 (który jest właściwie standardem we współczesnym Internecie) oraz język programowania Go (co ciekawe, w wywiadzie przyznał, że inspiracją do stworzenia Go była frustracja związana ze składnią C++ ;) ). Obecnie kontynuuje pracę w Google.
Drzewo życia systemu UNIX — najważniejsze pochodne i implementacje
Strona na wikipedii poświęcona Kenowi Thompsonowi
Wywiad z Kenem z roku 2011