Archive for the ‘Programistycznie i technicznie’ Category

To jest kopia wpisu z bloga firmowego Foxys „kruczki i sztuczki„. Sam wpis nosi tam tytuł taki sam jak tu – zapewne dla zmylenia czytelnika ;-).

Załóżmy, że masz bloga lub inny serwis w którym wrzucasz video z vimeo. Robisz to zagnieżdżając (embed) odpowiednią kontrolkę flashową (playera video) i można takie video odtwarzać wprost z twojej strony.

No można, ale nie na iPhone i iPadzie. A chyba chciałoby się, aby użytkownicy tych urządzeń też mogli u siebie to odtworzyć. Skoro z YouTube mogą i po wejściu na stronę samego vimeo.com jakoś mogą, to czemu nie z poziomu twojej strony?

Co trzeba zrobić aby sobie pomóc w życiu. Sobie i swoim czytelnikom? W stopce szablonu swojego bloga / CMSa / serwisu należy dodać linijkę (rozbiłem ją na 3, aby się łatwiej mieściła, może też tak zostać):

<script type="text/javascript"
  src="http://wildwezyr.foxys.pl/ww_vimeo_embed_light.js">
</script>

Czyli dodajemy tę linijkę jedną (<script…></script>) przed tagiem zamykającym </body>. Alternatywnie można – a nawet warto – skopiować ten skrypt do siebie (klikając tu: http://wildwezyr.foxys.pl/ww_vimeo_embed_light.js) i wstawić link do swojej kopii skryptu.

Gotowe. To rozwiązanie jest absolutnie wolne (jeszcze bardziej niż te licencyjne wirusy z GNU – nie wierzcie tym baranom z Free Software Foundation), można używać, zmieniać, analizować kod – robić co się tylko chce z tym – bez żadnych ograniczeń. Stosowna licencja to WTFPL – Do What The Fuck You Want To Public License, mam tylko prośbę – można (ale nie trzeba) wspomnieć gdzieś o mnie, jeżeli to rozwiązanie okaże się przydatne. Jakby co – jestem WildWezyr i pracuję w Foxys ;-) .

W oryginalnym wpisie jest w tym miejscu video z vimeo i jak się to czyta z iPhone’a lub iPada to też działa. Tutaj jednak jest blog na WordPress.com (kruczki i sztuczki są na silniku WordPress w naszej domenie, a to daje większe możliwości) i JavaScript tu nie działa, więc nic by nie było widać. Jeszcze raz odsyłam do źródła.

Uwaga: z nieznanych powodów niektóre filmy (np. ten) nie chcą się dać odtwarzać na iPhone (nie wiem jak z iPadem) – zamiast trójkącika do odtwarzania jest przekreślony trójkącik. Jeżeli ktokolwiek ma pojęcie czemu się tak dzieje – proszę o info np. w komentarzu.

Jeżeli znajdą się błędy (proszę o info o ew. błędach!) – będę poprawiał i zamieszczał poprawione wersje, prawdopodobnie powstanie też wersja rozszerzona o obsługę komórek androidowych. Wersja oryginalna pliku JS (przed lekkim spakowaniem packerem) jest tutaj: http://wildwezyr.foxys.pl/ww_vimeo_embed.js – tak może być wygodniej poczytać sobie kod źródłowy…

A czy to jest gdziekolwiek używane? Tak! Paweł FrostBite Iwaniuk używa tego na TechnoZgredy.pl ;-) .

Postanowiłem wrzucić na bloga moją pracę magisterską (analiza implementacji leniwych języków funkcyjnych – PDF), jaką broniłem około 7 lat temu. Wydaje mi się, że wpisuje się ona w ogólną tematykę jaką chciałem na blogu przyjąć, ale o tym innym razem…

Teraz nieco zareklamuję treść swojego „dzieła”… Co my tu mamy po kolei.

  1. Wprowadzenie do rachunku lambda (λ), czyli: term, β-redukcja, redeks, redukt, postać normalna, (słaba) postać czołowa normalna, własność Churcha-Rossera – czyli… klasyka gatunku ;-).
  2. Standardowe konstrukcje znane z języków programowania ich definicja w rachunku λ, czyli: liczebniki Churcha (1, 2, 3…), prawda/fałsz i operatory logiczne, konstrukcja warunkowa i teraz coś lepszego: tzw. wartości algebraiczne czyli para, lista, uogólnienie na dowolne konstruktory, projekcje itp., dalej idą operacje arytmetyczne – tu już trzeba pokombinować – dodawanie, odejmowanie, mnożenie, ale już do dzielenia będzie potrzebna rekurencja – czyli operator punktu stałego (Y).
  3. Po tym wprowadzeniu – teraz zaczyna się ciekawa część. Czym się różni strategia ewaluacji (redukcji) gorliwa od leniwej, czym się różni gorliwe wołanie przez wartość (call by value), wołanie przez nazwę (call by name) oraz te właściwe dla leniwości – wołanie zgodnie z potrzebą (call by need). Otóż zostaje podana formalna definicja w czystym rachunku λ. Gdzie indziej tego nie dostaniecie!
  4. Kolejna mocna rzecz – odśmiecanie (garbage-collection) zdefiniowane formalnie w rachunku lambda. Po powyższych strategiach ewaluacji to było już proste – jednolinijkowa definicja i gotowe.
  5. Dalej jest o języku Haskell – jego uproszczonym podzbiorze i konwersji na konstrukcje w rachunku lambda. Tu z ciekawszych rzeczy jest wzajemnie rekurencyjna konstrukcja let i jej rozbicie na warstwy (tzw. stratyfikacja).
  6. Druga część pracy jest bardziej standardowa – wprowadzenie i omówienie implementacji leniwych języków funkcyjnych. Z ciekawszych fragmentów tutaj: związek większej siły wyrazu z trudniejszą implementacją – na przykładzie systemu typów z rekurencyjnym polimorfizmem w Haskellu i potrzebnym do tego nieograniczonym rozmiarze kręgosłupa (spine).
  7. Po tych dwóch częściach wprowadzenia – właściwy atak i krytyka leniwości jako takiej (mamy już aparat w ręku aby się tym zająć): problem wycieku pamięci w czystych leniwych językach funkcyjnych. Ten problem jest poza naszą kontrolą, w grę wchodzą takie zagadnienia jak: analiza gorliwości, analiza uaktualniania, tania gorliwość, optymistyczna ewaluacja, ewaluator sekwencyjny, leniwa rekurencja ogonowa itp. Podane są trywialne przykłady, na jakich widać problemy niezależne od przyjętej implementacji leniwości. Nawet standardowe funkcje z Haskell Prelude powodują wycieki pamięci.
  8. Ogólny mój wniosek jest taki – leniwość nie nadaje się do użycia w praktyce, bo nie można kontrolować i zapobiegać efektowi wycieku pamięci. Co więcej – nie jest nawet możliwe powstanie  w przyszłości implementacji pozbawionej tej wady. To jest wbudowana cecha leniwości. Super siła wyrazu na papierze, w praktyce – bezużyteczna. (więcej…)

tak się zastanawiam – skoro blogi oparte na wordpressie podają na tacy część adresów e-mail, to czy przypadkiem nie podpada to pod ustawę o ochronie danych osobowych i nie jest tematem dla GIODO?

jeszcze raz zbiorę w skrócie (jak na moje standardy) o co chodzi – poprzedni wpis na moim blogu na ten temat może być zbyt techniczny (to będzie może nie krótsze, ale mniej techniczne) (więcej…)

W skrócie – w tym wpisie:

  1. Siła wyrazu rekurencyjnych kwerend w SQL pozwala napisać Sudoku Solver w jednej instrukcji select (więcej)
  2. Efektywność jednak nie jest mocną stroną tego rozwiązania – mój stary Solver w JavaScript robi to 30x razy szybciej (więcej)
  3. Dlaczego nie lubię Sudoku, ale lubię Kakuro (więcej)
  4. Pierwsze wrażenia po 3 dniach życia bloga – kakiej funkcjonalności mi najbardziej brakuje w blogach robionych na WordPress.com? (więcej)

(więcej…)

Załóżmy, że jest blog oparty na WordPress – czyli używa Gravatarów. Załóżmy, że chcemy się pod kogoś podszyć – kto komentował wpis, chcemy mu zrobić wstyd itp. cokolwiek. Zgadując i potwierdzając ze 100% pewnością adres e-mail, możemy następnie go użyć do podpisania naszego komentarza i będzie on wyglądał dla czytelników bloga dokładnie tak, jak oryginalny wpis zrobiony przez prawowitą osobę, pod którą się podszywamy. Będzie wyświetlony ten sam avatar, ale nie w sensie skopiowania go sobie pod swoje konto – będzie wygenerowany dokładnie ten sam adres do gravatara – a więc na poziomie przeglądania źródła HTML strony na której robimy psikusa – będzie wyglądało nie do odróżnienia. (więcej…)

Jak wiadomo serwis Gravatar służy do tworzenia globalnie rozpoznawalnych avatarów (ang. Globally Recognized Avatars). Aktualnie coraz więcej serwisów ma wbudowaną integrację z Gravatarem: WordPress (jako skrypt i jako serwis WordPress.com), StackExchange i jego najpopularniejszy serwis StackOverflow itd. itp.

Działanie Gravatarów opiera się na adresie email, który gdzieś podajemy – np. wrzucając wpis na bloga, zakładając konto na serwisie społecznościowym itp. (więcej…)