Wprawdzie ponownie do wtorkowej kawy, ale za to przy słoneczku — zapraszamy do kolejnego #maina!
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 ;)
Elektryczne play-doh!
Elektryczność i elektronika większości z nas kojarzy się z lekcjami fizyki w liceum lub studiami, gdzie tematy te pojawiały się po raz pierwszy. W rzeczywistości podstawowe zasady są znacznie prostsze i można ich uczyć poprzez zabawę! Na kickstarterze można wesprzeć ‚Squishy Circuits’ — plastelinę, która przewodzi prąd, dzięki czemu można za jej pomocą budować podstawowe układy elektroniczne, oswajając dzieci z elektrycznością. Gorąco polecamy!
Sztuczna inteligencja dla każego
Elona Muska przedstawiać chyba nikomu nie trzeba — ostatnio angażuje się on m.in. w inicjatywę SpaceX, jest też założycielem Tesla Motors. Ostatnio coraz głośniej o jego kolejnym rewolucyjnym pomyśle — OpenAI. Do tej pory sztuczna inteligencja na tyle zaawansowana, że pozwala na sterowanie dużymi robotami, analizę big data itp była dostępna tylko i wyłącznie dla największych i najbogatszych firm. OpenAI ma to zmienić — celem firmy jest stworzenie narzędzi i algorytmów dostępnych dla każdego, bez wyjątku. Pierwsze biblioteki są już możliwe do pobrania, zachęcamy do eksperymentowania!
Robo-społeczność karaluchów
Na przestrzeni dziejów ludzkość obawiała się, że kontrolę nad światem przejmą karaluchy, potem roboty. Cóż, wygląda na to, że to się dzieje, a pierwsze robo-karaluchy już umieją współpracować ;) Póki co chodzi o wchodzenie na wyższe platformy (np. po schodach), niedostępne dla pojedynczych osobników. Naukowcy ‚nauczyli’ roboty współpracować ze sobą, dzięki czemu potrafią wspólnym wysiłkiem dostać się na wyższą platformę. Daleko im do przejęcia świata, ale sama idea i potencjalne jej zastosowania są wręcz nieograniczone!
DLC a samochody
DLC (ang. Downloadable Content) to idea popular głównie w grach — za określoną opłatę możemy pobrać dodatkowe moduły, np. nową planszę do gry, inną postać itp. Tesla Motors poszła o krok dalej i przeniosła tą ideę do samochodów — model s 70 oferowany jest w wersji z baterią 70 kWh oraz 75 kWh, a jedyna różnica pomiędzy nimi tkwi w oprogramowaniu. Za dodatkową opłatą (bagatela 3000$), samochód może pobrać ‚aktualizację’, która odblokuje dodatkową pojemność. To pierwszy tego typu pomysł, choć wynika z praw ekonomii (i praktyk stosowanych od dawna w branży elektroniki użytkowej) — taniej jest wyprodukować jedną wersję i ‚ograniczyć’ ją w późniejszym etapie (np. za pomocą oprogramowania).
Odpowiedź na pytanie z zeszłego tygodnia
A pytaliśmy o to: jaka jest różnica pomiędzy przeładowaniem (overloading) a przesłanianiem (overriding) metod w Javie?
Pierwszy mechanizm — przeładowanie — jest związany z samym językiem i polega na tym, że możemy zdefiniować dwie metody o tej samej nazwie, ale przyjmujące np. inną ilość lub typ argumentów, przez co w praktyce są różnymi metodami. Z punktu widzenia języka, jest to stosunkowo proste rozwiązanie, ale znacznie upraszcza projektowanie interfejsów czy korzystanie z bibliotek dla zwykłych użytkowników (przykładem zastosowania są na przykład metody assertEquals używane np. przy testowaniu). Przykładowy kod:
public class OverloadedMethods {
public doSomething(String subject) {…}
public doSomething(Integer numericSubject) {…}
}
Overriding z kolei to mechanizm związany z dziedziczeniem i polimorfizmem, który polega na tym, że klasy dziedziczące po innej mogą ‚przesłonić’ czy też ‚nadpisać’ metodę swojego rodzica, modyfikując jej działanie. Dzięki temu zachowanie obiektu-dziecka może być inne niż obiektu-rodzica w określonej sytuacji, co pomaga organizować naszą aplikację w logiczny sposób.
Przykład przesłaniania metod:
public class Parent {
public doSomething(String input) {System.out.println(input);}
}
public class OverridingChildren extends Parent {
public doSomething(String input) {System.out.println(input + „ processed in children class”);}
}
Więcej informacji znajdziesz na poniższych stronach:
Przesłanianie na stronie beginnersbook.com
Przeładowanie na stronie beginnersbook.com
Przeładowanie metod na stronie oracle.com
Przesłanianie metod na stronie oracle.com
Więcej pytań technicznych z poprzednich mainów wraz z linkami do odpowiedzi znajdziesz tutaj!
Claude Elwood Shannon
Claude Shannon może być śmiało nazywany ojcem tego, co dzisiaj znamy jak o’układy cyfrowe’, i to z 2 powodów! Już jako student na MIT, w wieku 21 lat opublikował pracę na temat zastosowania algebry Boole’a w układach elektrycznych, udowadniając, że może ona posłużyć do zbudowania dowolnego systemu logicznego. W podsumowaniu przedstawił kilka przykładowych zastosowań, w tym np. 4‑bitowy sumator (układ dodający dwie liczby). Warto wspomnieć, że było to w roku 1937. Praca ta dała podwaliny całej gałęzi nauki, w której raz jeszcze w roku 1948 dokonał rewolucji — publikując przełomową pracę “A Mathematical Theory of Communication”. Postulował w niej, że każdą informację (np. tekst , dźwięk czy obrazy) da się zapisać za pomocą zer i jedynek, a więc także przetwarzać. To, co dzisiaj wydaje nam się oczywiste, na pewno takie nie było w roku 1948. Praca ta dała podwaliny pod kolejne gałęzie tego, co obecnie nazywamy IT — komputery mogły przestać być jedynie ogromnymi kalkulatorami. Jakby tego było mało, miał spory udział w łamaniu szyfrów używanych podczas i po II wojnie światowej (współpracował przez krótki czas m.in. z Allanem Turingiem) — przy okazji definiując podstawy do numerycznej analizy szyfrów.
To, co wyróżniało go spośród wielu współczesnych mu naukowców, było metodyczne podejście do problemu; zamiast tworzyć rozwiązania ad-hoc, starał się zrozumieć zagadnienie i rozwiązać je całościowo, a nie zaradzić problemom. Przykładowo praca na temat ‚wygładzania’ danych związanych z obliczaniem trajektorii lotu pocisku jest w rzeczywistości pracą poświęconą analizie i separowaniu sygnału od ‚szumu’ w dowolnym systemie komunikacyjnym (co znalazło zresztą niemałe zastosowanie w transmisji radiowej i późniejszych systemach wymiany informacji). Do dziś uważany jest za jedną z najwybitniejszych osób, które przyczyniły się do powstania i rozwoju komputerów i technologii cyfrowych.
Artykuł w serwisie Scientific American
Strona wikipedii na jego temat
Praca magisterska — z przykładami układów logicznych