niedziela, 23 czerwca 2013

Przyszłośc komputerów PC

Na Asymco znalazłem bardzo ciekawy artykuł prezentujący zmianę trendu w sprzedaży komputerów ( mobilnych i wolnostojących ). Wykres nr 4 pokazuje trend wśród sprzedaży nowych urządzeń, nie obejmuje urządzeń już dostępnych na rynku. Wniosek jest jeden: cokolwiek produkujesz, celuj wpierw na platformy mobilne.

Artykuł: http://www.asymco.com/2012/01/17/the-rise-and-fall-of-personal-computing/

sobota, 22 czerwca 2013

Dlaczego polskie uczelnie nie są Stanfordem?

Na Coursera ruszył kurs startupów. Całość realizowana jest przez trzech pracowników naukowych Uniwersytetu Stanforda. Fantastyczne, że kurs ma podejście całościowe; z jednej strony filozofia startupów, problematyka zbierania funduszy, kwestie designu, projektu UI i właściwości niefunkcjonalnych, z drugiej podejście techniczne: HTML5 i Node.js, hostingi, ...

Dlaczego nie jesteśmy Stanfordem? Otóż dlatego, że studenci ogromu polskich uczelni nie są uczeni robienia pieniędzy. Co by nie mówić, edukacja ma służyć właśnie temu i nawet jeżeli nikt za nią nie płaci ( "nikt" w systemie socjalnym jest moim ulubionym słówkiem ), to i tak edukacja zdobywana jest po to, aby więcej zarabiać. Uczestniczę w tym kursie i głównym kryterium oceny jest ocena społeczności sieciowej, tj.:
  • przychód z tytułu mikropłatności (BitCoin)
  • popularność usługi na Facebook
  • popularność usługi na Twitter
Przez tyle lat edukacji w Polsce nigdy nikt nie kazał nam wyprodukować usługi / produktu z zastosowaniem komercyjnym, w celu zdobycia wysokiego udziału, wyeliminowania innego produktu bądź po prostu zarobienia maksymalnej kwoty pieniędzy.

Szkoda. Taki cel zmienia sposób działania, planowania i pokazuje zupełnie nowe podejście do procesu wytwarzania oprogramowania. Przykład: pierwszy rok studiów drugiego stopnia, przedmiot: technologie internetowe. Zadanie: zaprojektować dowolną stronę w czystym html + php + mysql. Założenia:
  • tematyka dowolna
  • żadnych frameworków
  • bez jQuery, Dojo, Backbone, CoffeScript, ...
  • PHP czysty, bez korzystania z bibliotek zewnętrznych
  • HTML5? Niewymagany...
  • Walory użyteczności, innowacyjności: nieoceniane
  • Brak możliwości użycia silnika innego na przykład Ruby / Python / JS
  • Bez wykorzystania narzędzi wersjonowania, trac'u, etc etc etc
  • Ocena przez pryzmat popularności i zarobków? Nie-eee
Po co? A gdybym ja to wiedział.
Szkoda, że nie jesteśmy Stanfordem.

środa, 5 czerwca 2013

Programowanie wizualne : Google Blockly

Wczoraj o analizie algorytmów w Python, dziś nieco o programowaniu wizualnym. Ostatnio miałem okazję, by zderzyć się ze współczesnymi językami wizualnymi stworzonymi dla potrzeb nauczania podstaw programowania. Wyszło średnio, ponieważ większość języków będących zwieńczeniem publikacji / monografii na ten temat albo przestało być rozwijanych, albo dotyczą projektów zamkniętych (np. na potrzeby amerykańskiego wojska). Nie znalazłem niczego, co by łączyło wieloparadygmatowość, licencję WiOO, intuicyjny interface i wygodę analizy działania, debuggowania etc.. Na szczęście po drodze wpadło mi w ręce parę na prawdę fajnych narzędzi. Jedno to UUhistle opisane post wcześniej, kolejne to Blockly ( http://code.google.com/p/blockly/ ). Narzędzie zostało stworzone przez Google jako zestaw komponentów do wizualnego wyrażania programów. Celowo unikam zdania "wizualny język programowania", gdyż Blockly samo w sobie to komponenty. Dopiero z nich utworzono przykładową aplikację Blockly Code ( http://blockly-demo.appspot.com/static/apps/code/en.html ) umożliwiającą programowanie wizualne. Aplikacja jest na licencji WiOO, komponenty też, całość działa w przeglądarce i jest napisana w HTML5. Co jeszcze ciekawsze, interfejs jest dużo lżejszy i wygodniejszy, niż w osławionym MIT Scratchu, a na dodatek kod wyklikany z klocków jest na bieżąco zapisywany także w postaci kodu Python / JavaScript / XML.

Blockly prezentuje się następująco:


Oprócz przedstawionego programu "Code", twórcy przygotowali jeszcze kilka innych aplikacji demonstrujących możliwości, chociażby grafika żółwia oparta o ... mapy Google. Tak, tak, za pomocą instrukcji żółwia prowadzimy żółtego ludzika (tego ze StreetView) po mapie, aby doszedł do celu. Zupełnie jak podczas Juwenaliów ;)

Dla powyższego listingu kod Python wygląda tak:


Dość siermiężnie, natomiast w kontekście nauczania podstaw programowania, myślę że doskonale jest łączyć Blockly i UUhistle. Jedno tworzy kod Python, drugie umożliwia wizualizację. Fajny pakiet do nauczania osób, które nigdy nie miały styczności z programowaniem.



Ponieważ znowu doszły mnie słuchy, że "nigdzie nie wytłumaczono dobrze jak działają wskaźniki", wpadłem na pomysł napisania 3-4 wpisów tłumaczących od zera ideę wskaźników. A nuż komuś to pomoże.

wtorek, 4 czerwca 2013

UUhistle - wizualizacja kodu Python

Moje doświadczenie z nauczaniem programowania pokazało, że uczącym się najtrudniej zrozumieć ideę sekwencyjności (mimo że na logikę zmiana kolejności instrukcji winna mieć znaczenie) oraz pojęcia zagnieżdżenia wywołania funkcji i rekurencji.

Niedawno odkryłem narzędzie UUhistle napisane przez Juhę Sorvę z Universytetu w Aalto, w Finlandii. Aplikacja powstała jako element pracy doktorskiej.

 
Aplikacja umożliwia wizualizację sposobu działania kodu napisanego w Python 2.X, w szczególności wizualizację stanu sterty (dostępne zmienne, ich wartości, do czego odnoszą się referencje), stosu (przy rekurencji) oraz prezentowania sposobu w jaki wykonuje się program. W obszarze "A" znajduje się kod (można wklejać), w obszarze "B" całość jest wizualizowana, natomiast "C" to kontrola wykonania programu. Aplikację można uruchamiać w trybie pojedynczej instrukcji, normalnym, a także ... cofać instrukcje. Z tej przyczyny wyłączono możliwość pracy na strumieniach danych, czyli nie można korzystać z plików, gniazd czy potoków. Oprócz tego wyłączono kilka innych możliwości języka. Najważniejsze braki dotyczą: leniwego wartościowania (yield, generatory), rozwinięcia list, dziedziczenie, rozmiaru biblioteki standardowej, możliwości stosowania lambd. Co ciekawe, klasy jako takie są obsługiwane w ograniczonym zakresie. Wszystkie ograniczenia opisano tutaj.

UUhistle wydaje się być narzędziem stworzonym wyłącznie do wizualizacji najprostszych algorytmów. Idealnie wizualizuje np. dlaczego przy zamianie wartości dwóch zmiennych musi istnieć zmienna pomocnicza. Algorytmy tej klasy trudności mogą być bez trudności realizowane za pomocą UUhistle, natomiast prawdę mówiąc jeżeli ktoś potrzebuje wyrażeń generatorowych i rozumie sens leniwego wartościowania, to prawdopodobnie nie potrzebuje UUhistle w jego podstawowym zastosowaniu.

Aplikacja zajmuje ok. 13MB i nie wymaga instalacji Python.

Przykładowy zrzut z wizualizacji sortowania bąbelkowego:



Zalety:
  • świetna wizualizacja (animacje, kolorowanie, wyodrębnianie struktur kodu) 
  • wizualizuje kod Python, a Python jest dobry w nauczaniu programowania
  • dystrybuowane jako JAR, przenośne + żadnych instalatorów
  • tryb "tutorial", tryb interaktywny
  • darmowy do celów niekomercyjnych

Wady:
  • zamknięta licencja, zamknięty kod (aczkolwiek jak się go otworzy w programie dekompresującym... )
  • okno kodu nie koloruje kodu, nie podpowiada składni
  • nie można zmienić ani zwiększyć czcionki ( Courier 9pt )
Moja prywatna opinia: poza bardzo niedopracowanym oknem kodu, cała aplikacja jest świetnie zrobiona. Bardzo polecam.