wtorek, 31 sierpnia 2010

Czek na jednego heksadolara

Czek na jednego heksadolara (czyli $2,56) można otrzymać bardzo prosto - wystarczy znaleźć dowolnego rodzaju błąd w jednej z książek Donalda Knutha. Cenne uwagi warte są 1/8 heksadolara.

Znaleziony błąd może być błędem rzeczowym, historycznym lub jedynie błędem typograficznym czy literówką. Nieważne - pierwsza osoba która znajdzie taki błąd dostanie 2 dolary i 56 centów nagrody. Don Knuth wypisał już czeków na ponad 20 tysięcy dolarów, jednak mało który został zrealizowany, ponieważ:

"Szczytem inteligencji jest znalezienie błędu w książce Knutha.
Szczytem głupoty jest zrealizowanie otrzymanego czeku na $2,56."

niedziela, 29 sierpnia 2010

Wszystko co musisz wiedzieć o const w C++

const w C++ to jeden z najczęstszych modyfikatorów. Jest z nim związane wiele "ciekawostek" i niuansów, więc dzisiaj ten temat w pełni przemielimy ;)

const jak sama nazwa wskazuje służy w oryginalnym zamyśle do definiowania stałych. Maniacy C pewnie nadal używają #define, ale normalni ludzie napiszą w C++:

const int INFINITY = 2000000000;

nad #define INFINITY 2000000000; konstrukcja ta ma jedną, znaczącą przewagę - typ. Dzięki temu, że kompilator wie, że to int, może nas w porę ostrzec o jakiejś głupocie. Ale ludzie od C++ nie byliby sobą, gdyby const miało tylko takie jedno, proste znaczenie.

sobota, 28 sierpnia 2010

Word i C# - cz. I

Dzisiaj trochę na temat automatyzacji Worda za użyciem platformy .NET. Powiedzmy, że nasz program ma automatycznie generować dyplomy uznania dla uczniów. Mają one powstawać na bazie dokumentu-szablonu w formacie Worda 2003. W szablonie miejsca, które mają zostać automatycznie zamienione na dane uczniów są zaznaczone specjalnymi znacznikami, takimi jak np. %UCZEN%. Dzisiaj będzie o "brzydkim" rozwiązaniu takiego zadania ;)

Brzydkie jest korzystanie z obiektów COM samo w sobie. Platforma .NET dostarcza ułatwienie do korzystania z takich obiektów - Interop (od interoperability). Nasz program dzięki korzystaniu z obiektów COM nie będzie działał na plikach "doc" - on będzie działał na samym Wordzie - uruchomi go, skopiuje szablon odpowiednią liczbę razy za każdym razem odpowiednio podmieniając znaczniki, dodając podziały stron i wypluwając wszystkie dyplomy jako jeden dokument. OK, to zaczynamy.

Najpierw trzeba dodać referencję do odpowiedniego komponentu COM - w "Add reference" i zakładce "COM" wybieramy "Microsoft Word Object Library". U mnie jest to wersja 12 (Word 2007), ale z Wordem 2003 też nie będzie problemów ;)

Dodany komponent siedzi w przestrzeni nazw Microsoft.Office.Interop.Word. Aby nie trzeba było pisać zawsze tak długiego kwalifikatora warto wykorzystać using - tylko że ta przestrzeń zawiera mnóstwo klas, których nazwy mogą kolidować np. z Interopem dla Excela (jeżeli go używamy). Dlatego najlepiej skrócić po prostu kwalifikator do samego Word:

using Word = Microsoft.Office.Interop.Word;

środa, 25 sierpnia 2010

Zork

Czyli legendarna "tekstówka" z lat 80-tych w wersji on-line, dokładnie taka jak oryginał.

Oryginalny "Zork" powstawał w latach 1977-1979 na MIT na komputerze PDP-10, oczywiście raczej nie jako projekt badawczy. Autorzy tej gry odeszli z MIT i założyli spółkę Infocom. W latach 80-tych wydali "Zork" jako trylogię, portując grę z PDP-10 na zyskujące na popularności mikrokomputery - Apple II, Commodore 64, różne Atari, TRS-80 oraz IBM PC. Trylogia z czasem rozrosła się do serii 14 gier, z których późniejsze były już przygodówkami "graficznymi".

wtorek, 24 sierpnia 2010

Płonący statek

Dzisiaj koniec serii nt. różnych fraktali. Skończymy w płomieniach.

Ponad 2 lata temu na kursie asemblera na PWr mieliśmy za zadanie napisać program w dowolnym języku wysokiego poziomu wykorzystując przy tym zarówno wstawki asemblerowe jak i wywołania procedur napisanych w czystym asemblerze, dołączanych jako pliki .OBJ. Dodatkowo w ramach ćwiczenia trzeba było wykorzystać koprocesor numeryczny. Mój wybór na Pascala z racji młodzieńczych sentymentów. A czy jest coś fajniejszego i prostszego do napisania na koprocesor niż fraktale i tryb 13h? Raczej nie ;)

W początkowej wersji program obsługiwał tylko zbiory Julii, wczoraj i dzisiaj dopisałem zbiór Mandelbrota oraz bardzo ciekawy fraktal, "Płonący statek".

sobota, 21 sierpnia 2010

Internet w dniu 10.04

...czyli jak polski i zagraniczny internet zareagował w dniu katastrofy smoleńskiej.

Z dużych portali internetowych najgorzej chyba wypadł Onet.pl - mianowicie wypadł on całkowicie. Do godziny dwunastej ich serwer w ogóle nie odpowiadał.

Z portali społecznościowych to wiadomo, że na naszą-klasę można zawsze liczyć. Użytkownik "Katastrofa w Smoleńsku" dostał konto oficjalne i bardzo szybko zbierał znajomych (http://www.wykop.pl/ramka/344224/katastrofa-lotnicza-naszej-klasie-gratulujemy-ambicji/). Ja rozumiem, że to był sposób aby umieścić kanał informacyjny na Śledziku, ale nazwa była wyjątkowo niefortunna. Potem na szczęście została zmieniona na "Informacje o katastrofie w Smoleńsku" (http://nasza-klasa.pl/informacje_o_katastrofie_w_smolensku), ale jak w dowcipie, niesmak pozostał.

czwartek, 19 sierpnia 2010

Zagadki z rozmów kwalifikacyjnych

Jeżeli planujesz starać się o pracę w Google, Microsoft czy NVidia, to lepiej wiedz jak przewieźć jedną łódką wilka, kozę i kapustę.

Tak, często zanim padnie jakiekolwiek pytanie o projektowanie czy dowolny język programowania, to najpierw dostaje się do rozwiązania zagadkę. Nie wiem w jakim stopniu sprawdza to umiejętności programistyczne i czy rozwiązywanie łamigłówek w pełni przekłada się na kod dobrej jakości ;) Ale po prostu tak jest, więc lepiej się przygotować :)

Więc co oprócz standardowej zagadki o wilku, kozie i kapuście może nas czekać? Pozbierałem 8 ciekawych zagadek dostępnych na serwisach z "interview questions". Nie wybrałem tych najdziwniejszych albo najbardziej niemożliwych do rozwiązania, tylko te najbardziej ludzkie ;)

wtorek, 17 sierpnia 2010

"Snake" na YouTube

Kolejny dowód poczucia humoru programistów z YouTube - po wuwuzelach, które można było sobie włączyć do każdego filmiku teraz coś dla znudzonych czekaniem z powodu wolniejszego łącza.

1. Otwórz dowolny filmik na YouTube wykorzystujący nowy odtwarzacz, np. http://www.youtube.com/watch?v=zaT7thTxyq8.

2. Kiedy pojawi się kręcące kółko symbolizujące ładowanie się filmiku wciśnij strzałkę w lewo.

2a. Jeżeli nie ma takiego kółeczka (np. pauzujesz na samym początku filmu), to po prostu przytrzymaj strzałkę w lewo.

3. Graj w Snake'a do woli :)

niedziela, 15 sierpnia 2010

Top 10 największych "hacków" w historii

...czyli "hakerskie" pomysły nie tylko w przypadku komputerów.

Serwis Slashdot przeprowadził kiedyś ankietę nt. "Jaki jest największy hack w historii?". Przy czym hack nie dotyczy jedynie rozwiązania ciekawych problemów komputerowych. Hackami są rozwiązania dowolnych problemów, które zadziwiają skutecznością w stosunku do ograniczonych środków i możliwości wykorzystanych przy ich opracowaniu - tak ograniczonych, że rozwiązanie nie było by możliwe bez hacka.

Najlepszym przykładem są chyba piramidy egipskie - to, w jaki sposób przy tak ograniczonych możliwościach technologicznych je wybudowano do tej pory pasjonuje badaczy, którzy tworzą coraz to bardziej skomplikowane.

OK, zobaczmy jak się kształtuję pierwsza dziesiątka.

10. Słuchowisko "Wojna światów" Orsona Wellesa


Słynny amerykański reżyser wywołał w 1938 panikę w całych Stanach Zjednoczonych za pomocą tylko jednego słuchowiska radiowego. Dzięki adaptacji "Wojny światów" Wellsa jako reportażu nadawanego w przerwach innego słuchowiska mnóstwo osób uwierzyło w inwazję Marsjan. Prosty zabieg, a taki efekt.


9. Sonda kosmiczna Mars Pathfinder


Wysłać sondę na Marsa za cenę filmowego hitu wakacji z Hollywood? Tak, to możliwe. Sonda Pathfinder kosztowała w całości (czyli sonda + sprzęt na niej + wystrzelenie + obsługa) mniej niż trzecia część "Piratów z Karaibów". Dodatkowe punkty za pomysł zrzucenia sondy na powierzchnię Czerwonej Planety niczym dużej piłki plażowej.

piątek, 13 sierpnia 2010

Kostka Rubika rozwiązana!

9 sierpnia tego roku ostatecznie ustalono - dowolnie pomieszaną kostkę Rubika można ułożyć wykonując tylko 20 (lub mniej) ruchów.

Jest to zaskakujące, jeżeli weźmie się pod uwagę liczbę możliwych ustawień oryginalnej kostki Rubika. Składa się ona z 8 narożników (kosteczek narożnych) i 12 krawędzi (kosteczek na krawędziach). Narożniki można ustawić na 8! (40 320) sposobów. Dodatkowo kosteczki te mogą różnić się orientacją (sposobem obrócenia) - to daje nam 37 możliwości (przyjmujemy, że np. jedna z kosteczek jest ustawiona białą powierzchnią do góry, to każdą z pozostałych 7 kosteczek można obrócić na 3 sposoby).

Krawędzie można ustawić na 12!/2 sposobów (239 500 800) - dzielimy przez 2, bo permutacja krawędzi zależy od permutacji narożników - muszą one mieć tą samą parzystość (http://en.wikipedia.org/wiki/Parity_of_a_permutation). A każdą z 12 kosteczek na krawędziach można zorientować na 2 sposoby, co przy przyjęciu jednej z nich za "orientującą" całą kostkę daje nam 211 (2 048) możliwości.

Razem:

8! * 37 * 12!/2 * 211 = 43,25 * 1018

Zadziwiające, że tylko w 20 ruchów można z każdej z tych pozycji dojść do pozycji wyjściowej.

środa, 11 sierpnia 2010

Tablica Wythoffa

Czyli macierz powstała z ciągu Fibonacciego, która ma wiele ciekawych właściwości.

Wygląda ona tak:


Konstruowana jest w następujący sposób:
1. Pierwsza kolumna to kolejne nieujemne liczby całkowite: 0, 1, 2, 3...

2. Druga kolumna to dolna sekwencja Wythoffa (http://www.research.att.com/~njas/sequences/A000201), której n-ty element jest równy części całkowitej z (n+1)*φ
gdzie φ to złoty podział (1,61803399...), który jak wiadomo pojawia się też w ciągu Fibonacciego ;)

3. Mając pierwsze dwie kolumny wiersze konstruujemy podobnie do ciągu Fibonacciego - każda kolejna kolumna to suma dwóch poprzednich.

OK, to jakie są ciekawe właściwości tablicy Wythoffa?

poniedziałek, 9 sierpnia 2010

Monster Truck Maniac 2

Trzymając się tradycji "co 4. post gra flash", dzisiaj zwariowane ciężarówki Monster Truck ;) Te za wysokie do wsiadania pojazdy zawsze wydawały się wehikułami szaleńców, dla których jedynym sposobem poruszania jest przeskakiwanie nad autobusami. I miażdżenie tych autobusów, które miały pecha nie zostać przeskoczonymi.

Jeżeli myślisz, że to jest szalone, to "Monster Truck Maniac 2" poszerzy Twoje horyzonty dzięki ośmiu mini-grom ;)

sobota, 7 sierpnia 2010

Kolejne 5 trików dla wydajności w C++

...czyli kolejne 5 zaleceń i sposobów jak robić, aby źle nie zrobić ;) Kontynuacja posta z pierwszymi pięcioma trikami: http://wojtek-m.blogspot.com/2010/07/5-trikow-dla-wydajnosci-w-c.html. A co, myśleliście, że będzie ich tylko 5? ;) No to jedziemy:

1. <cstdio> zamiast <iostream>

Czyli coś, co zawsze piszą w uwagach do konkursów programistycznych. O ile zazwyczaj optymalizacja wejścia/wyjścia nie ma sensu (wypisywanie czegokolwiek na ekran i tak trwa wieki, a szybkość wejścia zależy tylko od użytkownika), ale w pewnych przypadkach jest uzasadnione - kiedy nasz program jest elementem potoku lub kiedy wejście/wyjście jest przekierowane do/z pliku, a przesyłanych danych jest bardzo dużo. No nic, przy takich programach trzeba będzie wyciągnąć zakurzoną specyfikację printf i scanf ;)

czwartek, 5 sierpnia 2010

Stuknął i puknął rok

No tak, od startu bloga minął już dokładnie rok ;) I na razie jest git :)

Stałym czytelniczkom i czytelnikom jak i okazyjnym zaglądaczom dziękuję za zainteresowanie :) Jeżeli ktoś jeszcze nie jest fanem tego bloga na Facebook, to po prawej stronie w dziale "Twarzoksiążka" można kliknąć "Like" (lub inny podobny przycisk, do smaku). Każde kliknięcie ratuje życie niewinnego jelonka.


Z okazji urodzin (w ramach prezentu) opchnę dzisiaj 3 filmiki z YouTube, które miałem od właśnie blisko roku w zakładkach "Na bloga", no ale jakoś były za mało "poważne" i profesjonalne, aby tu trafić ;) Ruszamy więc, w kolejności od najbardziej popularnej produkcji do najmniej:

1. "32 songs in 8 minutes"

Czyli 1 człowiek, 1 gitara, 2 kamery, 32 piosenki i 8 minut. Czy zgadniesz wszystkie tytuły bez podglądania?



"Smoke on the Water" (ups, spoiler!) trochę niszczy ;)

wtorek, 3 sierpnia 2010

"Sklepy cynamonowe" Markowa

Palił w piecach, studiował wielkimi skokami -- Pan bez fletu, cofający się w popiół. Będziemy wiecznie żałowali, żeśmy wtedy wyszli na chwilę musieli wesprzeć się o odrzwia, tak silnie szturmował wicher do bramy.

Nie, nie zacząłem pisać powieści ;) Powyższe zdania wygenerował automatycznie program komputerowy. I nie, nie jest to żadne przetwarzanie języka naturalnego, a bardzo prosty łańcuch Markowa. I prawdziwa powieść podana jako wejście, tutaj akurat "Sklepy cynamonowe" Bruno Schulza.

Jest to zbiór opowiadań opublikowany w 1933 roku. Dlaczego on? Bo to jeden z większych tekstów w języku polskim, jaki można znaleźć na stronach Projektu Gutenberg. OK, a o co chodzi z tym Markowem?

niedziela, 1 sierpnia 2010

Full Moon

Kolejna gra logiczna, gdzie zasady zmieniają się z poziomu na poziom. Nazwa może trochę mylić - nie występuje tutaj Kristen Stewart ;)

Jesteśmy królikiem, który chce się dostać do jedzonka. Pomagają mu w tym sowy, inne króliki itd. Pomagamy mu w tym też my - używając naszej myszki - klikamy, przeciągamy, upuszczamy itd. Jeżeli kursor myszki zmieni się kształt oznacza to że można tu coś zrobić. Co - to zależy już od kontekstu ;)