czwartek, 7 października 2010

Social Circle Googla

Blog powróci w pełnej krasie w najbliższym czasie :) Ale kiedy pojawia się ważna kwestia, to post pojawia się od razu! :)

Ostatnio rozmawialiśmy w gronie znajomych o tym, że Google ma zbyt dużą wiedzę na nasz temat. Wie czego szukamy, wie co oglądamy, wie co piszemy w dokumentach (jeżeli używamy Google Docs), wie do kogo jak często i jakie maile piszemy (ach ten GMail) - bardzo przydatna wiedza jeżeli jest się firmą utrzymującą się z reklam.

Już teraz czuję się nieswojo, kiedy obok czytanego maila mam reklamy kontekstowe dopasowane do zawartości czytanej wiadomości. Wiem, że "przeczytał" to automat itd. - ale niesmak pozostaje.

Rozmawiając doszliśmy do wniosku, że gdyby Google połączył to co wie z informacjami z różnych portali społecznościowych, to wiedziałby o danym użytkowniku internetu WSZYSTKO.

I tak, piszę tego posta, bo właśnie pojawiło się takie rozwiązanie - Social Circle. Oczywiście BETA.

wtorek, 28 września 2010

SimpleDateFormat i wielowątkowość

Nie wszyscy zdają sobie sprawę, że standardowa w Javie klasa SimpleDateFormat z pakietu java.text nie jest bezpieczna ze względu na wątki. W sumie mało kto zdaje sobie z tego sprawę.

Bardzo często można spotkać w projektach Javy EE podobne linijki kodu:

Date date = GlobalConst.DATE_FMT.parse(datestring);

To, że potrzebna jest nam kontrola wielowątkowości pokaże następujący prosty przykład:

poniedziałek, 27 września 2010

Office 2007 - zmiana skrótów klawiszowych

Niektórzy z nas mają "przyjemność" pracować z Microsoft Office 2007 w wersji językowej innej niż polska. Wszystko jest fajnie, ale zdarza się, że Ctrl+B nie pogrubia tekstu ;) Np. w niemieckiej wersji pakietu Office służy do tego skrót klawiszowy Ctrl+Shift+F (a właściwie Strg+Umschalt+F) - od Fettdruck.

Niestety mam okazję pracować z Officem dopasowanym do języka Goethego ;) Skróty klawiszowe wyglądają w nim tak:

Ctrl+Shift+F - pogrubienie
Ctrl+Shift+K - kursywa
Ctrl+Shift+U - podkreślenie

Jak wrócić do starych, dobrych, jakże polskich Ctrl+B, Ctrl+I i Ctrl+U? ;) Jak zmienić te skróty klawiszowe? :)

środa, 22 września 2010

Growbox

Dzisiaj gierka zręcznościowo-logiczna ;)

Sterujemy kwadratem, a naszym zadaniem jest pożarcie wszystkich kropek na planszy. Uwaga - apetyt (a raczej nasz kwadrat) rośnie w miarę jedzenia, więc główny problem polega na wymyśleniu jak się nie zaklinować w labiryncie ;)

Prosta, relaksująca gra :)

poniedziałek, 20 września 2010

"Failed to load Main-Class ..." i NetBeans

Ostatnio pracując z malutkim projektem w NetBeans w pewnym momencie świeżo zbudowany plik JAR uraczył mnie komunikatem:

Failed to load Main-Class manifest attribute

Po krótkim guglaniu dowiedziałem się, że najczęściej taki komunikat dostają osoby, które do pisania programów wykorzystują tylko javac i cat i zapominają umieścić w pliku JAR plik manifest.mf. Proponowane rozwiązanie: użyj jakiegoś IDE, takiego jak Eclipse. Taaaa....

W JARze budowanym przez NetBeansa znajdował się wspomniany plik manifest.mf, ale nie mówił on która klasa w pliku jest główną. Przyczyną takiego błędu w tym IDE jest utworzenie projektu "class library", a nie "java application" - tak brzmi oficjalna wersja. Ale przecież 10 minut temu to jeszcze działało i było założone jako "java application".

Co ciekawe, pod samym NetBeansem cały projekt się uruchamiał, miał wybraną klasę główną itd., itp. Co poszło nie tak?

wtorek, 14 września 2010

Farbrausch & Vacuum - fr-049: of spirits taken

Dawno nie było demosceny na blogu :) Dzisiaj zamiast poligonów, shaderów i grafiki 3D upchanej w 64kB klimatyczna produkcja w komiksowym stylu.

"of spirits taken" to zaproszenie na Breakpoint 2006. Podobnie jak przy innych zaproszeniach (np. "Masagin", czyli zaproszenie na nvision 08) Farbrausch porzuca typowo demoscenowo-programistyczne techniki na rzecz klasycznej animacji.

poniedziałek, 13 września 2010

Dzień Programisty

Tak, co roku będę składał życzenia ;)

Bo w sumie co roku pojawia się coś nowego :) Np. dzisiaj książki informatyczne w Helionie z okazji 256. dnia roku można kupić z 20% rabatem ;)

Dobra, ale dlaczego piszę o tym temacie ponownie? Ponieważ od zeszłego roku Dzień Programisty to oficjalne święto w Rosji. Tak, oficjalne.

sobota, 11 września 2010

Shift 3

Dzisiaj kolejna gra logiczna z serii Shift.

Rozpoczynając rozgrywkę można całkiem słusznie mieć uczucie deja vu - pierwsze, treningowe poziomy są wręcz identyczne jak w części pierwszej - oczywiście do pewnego momentu...

środa, 8 września 2010

Operator indeksowania w C++

Czyli praktyczne zastosowanie tego, co już wiemy o const ;)

Załóżmy że potrzebujemy przeciążyć operator indeksowania (czyli []) dla swojej klasy. Weźmy na warsztat prosty przykład, bez żadnych szablonów itd.:

class MyArray
{
public:
  explicit MyArray(const int size) : arr_size(size)
  {
    p_arr = new double[arr_size];
  }

  ~MyArray()
  {
    if (p_arr)
    {
      delete [] p_arr;
    }
  }

  // i także konstruktor kopiujący i operator przypisania ...

private:
  double* p_arr;
  const int arr_size;
};


Chcemy móc korzystać z operatora [] do wyciągania elementów tablicy - dopisujemy więc w części publicznej klasy:

double operator[](const int idx)
{
  if (idx >= 0 && idx < arr_size)
  {
    return p_arr[idx];
  }
  throw std::invalid_argument("idx");
}


Problem pojawia się kiedy chcemy wykorzystać naszą klasę w następującym kodzie:

MyArray m = MyArray(5);
m[0] = 3.14;


Bum, błąd kompilacji. Gdzie jest nasz błąd?

poniedziałek, 6 września 2010

Słynne gitary domowej produkcji

Niektórzy sławni gitarzyści sami zbudowali swoje instrumenty - często gitary te stały się sławne, podobnie jak właściciel. Przyjrzyjmy się paru egzemplarzom - oto odliczanie TOP 3.

3. Gitary Rona Jorzombka

Ron Jarzombek to średnio-znany gitarzysta, popularny głównie w kręgach słuchaczy metalu progresywn-technicznego - dzięki zespołom Watchtower i Spastic Ink. Ron zasługuje na uwagę nie tylko dzięki umiejętnościom technicznym, ale też dlatego, że sam buduje swoje gitary, wykorzystując części z innych instrumentów.

Na specjalną uwagę zasługuje poniższa gitara:


Dlaczego? Kiedy Ron jechał w trasę koncertową do Japonii mógł zabrać dwie sztuki bagażu. Miał parę możliwości spakowania się:

1. Wziąć swoją główną gitarę, jako drugą walizkę ciuchy, ale nie mieć zapasowej gitary.
2. Zabrać dwie gitary i grać nago.
3. Wymyślić coś innego.

Instrument ze zdjęcia powyżej to efekt właśnie punktu 3. Gitara ta została przystosowana do szybkiego montażu i demontażu, a dzięki niewielkiemu korpusowi mogła jechać w walizce razem z ciuchami.

Więcej o gitarach Rona: http://www.ronjarzombek.com/gtrs.html

sobota, 4 września 2010

Java i http://

Kiedy usłyszałem pytanie z pewnej rozmowy kwalifikacyjnej stwierdziłem: "to jest totalnie jutro na moim blogu" :)

Pytanie jest proste: czy poniższy kod napisany w Javie się skompiluje?

public class HttpTest {
  public static void main(String[] args) {
    System.out.println("Hi!");
    http://www.java.com
    System.out.println("Hello!");
  }
}


Pogrubiona linijka to ta, której tak naprawdę dotyczy pytanie ;)

czwartek, 2 września 2010

Sling Jumper

Jeżeli ktoś lubi dopracowane graficznie i dźwiękowo gry, to dzisiaj propozycja nie dla niego ;)

Sling Jumper fajerwerków nie oferuje, za to wciągającą rozrywkę na pewno ;) Sterujemy kulką, która odbijając się od umieszczonych na planszy "proc" musi złapać wszystkie wymagane monety i dotknąć zielonej kulki ;)

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 ;)

sobota, 31 lipca 2010

"Innocent Shadow"

Pod koniec 2002 tematem prac nadsyłanych na konkurs IRTC (Internet Ray-Tracing Competition) brzmiał "Frozen Moment". Wygrał render nadesłany Marka Sloane ze Stanów Zjednoczonych.

Może nie byłoby w tym nic ciekawego, prawie każdy konkurs ma przecież zwycięzcę ;) Ale jego praca jest tak dobra, że trafiła na plakaty i jest niezwykle popularna wśród fanów ray-tracingu. Nie ze względu na walory techniczne, ale artystyczne.

piątek, 30 lipca 2010

10 najbardziej zaskakujących fobii

Fobia to uporczywy lęk przed jakąś sytuacją, zjawiskiem lub przedmiotem. Niektóre z nich mogą być naprawdę zaskakujące.

Na jakąś fobię cierpi ok. 10% ludzkości. Niektóre z nich (arachnofobia, akrofobia) stają się kanwą horrorów lub filmów sensacyjnych. Inne (homofobia, ksenofobia) przestały być terminem medycznym, a oznaczają pewnego rodzaju problemy społeczne i często są wręcz nadużywane w debacie publicznej.

Osoby cierpiące na wszelkiej maści fobię zdają sobie sprawę z irracjonalności swojego lęku, jednak mimo to nadal go odczuwają. Rzeczy, których może dotyczyć fobia mogą być naprawdę zaskakujące. A to top 10 tych najbardziej.

czwartek, 29 lipca 2010

Mandelbox

Dzisiaj kolejny bardzo ładny fraktal, tym razem trójwymiarowy. Uwaga, to świeży wynalazek, z 2010 roku ;)

Mandelbox został zaproponowany na jednym z forów poświęconych fraktalom w lutym tego roku przez Toma Lowe. Jego nieskomplikowana formuła (kilkanaście linii pseudo-kodu) tworzy niesamowite, katedro-podobne obrazy. Na przykład:


A to nic w porównaniu do podróży w głąb tej trójwymiarowej konstrukcji.

środa, 28 lipca 2010

Hdos

Dzisiaj włamujemy się do tajnych planów rządowych. A zabezpieczenia mają postać gry logicznej ;)

Nie wiem czemu, ale głównymi bohaterami 90% gier logicznych są kwadraty. Obowiązkowo w różnych kolorach. W Hdos mamy klasyczne kolorowe kwadraty, które podlegają sile grawitacji i które trzeba łączyć kolorami - niemalże jak w Tetrisie ;)

wtorek, 27 lipca 2010

Hipoteza Collatza

Dzisiaj kolejny z pozoru prosty problem matematyczny, który jeszcze nie znalazł rozwiązania. A prace nad Hipotezą Collatza trwają już ponad 70 lat.

Weźmy dowolną liczbę naturalną c0. Jest to pierwszy wyraz ciągu określonego rekurencyjnie jako:

                cn / 2 dla cn parzystego
cn + 1 =
                3 * cn + 1 dla cn nieparzystego

Czyli dostaniemy następujące ciągi, w zależności od wyrazu początkowego:

1 → 4 → 2 → 1 → 4 → 2 → 1 → ...
2 → 1 → 4 → 1 → ...
3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → ...
4 → 2 → 1 → ...
5 → 16 → 8 → 4 → 2 → 1 → ...
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → ...

Zazwyczaj jako ostatni wyraz ciągu przyjmuje się jedynkę, ponieważ potem wpada on w pętlę ;) Liczbę elementów poprzedzających jedynkę określa się czasem stopu dla danej wartości pierwszego wyrazu ciągu.

Co zatem tutaj tak ciekawego?

poniedziałek, 26 lipca 2010

Codility

Codility to ciekawy serwis dla osób z HR, który służy do automatycznego testowania umiejętności programistycznych kandydatów.

Serwis w założeniach przypomina automatyczne sprawdzarki stosowane na konkursach programistycznych. Firma powstała w Anglii, ale sadząc po imionach i nazwiskach założyli ją Polacy ;) Może w końcu na rozmowach kwalifikacyjnych częściej będzie się dostawać zadania programistyczne niż te typu "Wieśniak musi przewieźć przez rzekę wilka, kozę i kapustę..."

Aby zobaczyć jak działa Codility można:
a) mieć szczęście i trafić na dział HR który tego używa,
b) samemu wykupić subskrypcję,
c) kliknąć przycisk "Demo test".

Jeżeli kogoś przeraża "geeks only!", to niech się nie przejmuje ;) Rozwiążmy tutaj (w Javie) zadanie, które jest tam prezentowane.

niedziela, 25 lipca 2010

Buddhabrot

Każdy chyba zna taki fraktal jak zbiór Mandelbrota. W 1993 został znaleziony inny fraktalo-podobny obraz, o wiele moim zdaniem ładniejszy ;)

Zbiór Mandelbrota to zbiór takich liczb zespolonych c, że ciąg zn definiowany jako
 z0 = 0
 zn+1 = (zn)2 + c
nie dąży do nieskończoności przy n -> ∞.

W rzeczywistych rozwiązaniach sprawdza się, czy w określonej liczbie iteracji (np. 1000) ciąg ten nie wykroczy poza okrąg o środku w punkcie (0, 0) i promieniu równym 2 - jeżeli kolejna liczba zespolona w ciągu ma moduł większy niż 2, to wiadomo już, że na pewno dla tej wartości c ciąg zn dąży do nieskończoności

Kiedy liczby c przedstawimy na płaszczyźnie zespolonej dostaniemy taki oto, znajomy obrazek:


W 1993 pani Melinda Green zadała sobie pytanie:
A co się dzieje z ciągiem zn, kiedy dąży on do nieskończoności? Jaką ścieżkę przebywa zanim "wyskoczy" na odległość większa niż 2 od środka płaszczyzny?

Odpowiedź jest niezwykle ładna.

sobota, 24 lipca 2010

BoomsticK

Jeżeli zawsze marzyłe(a)ś o strzelaniu z shotguna do latających kolorowych figur geometrycznych, to tak - to jest gra dla Ciebie!

W sumie w powyższym zdaniu znajduje się cały opis gry - wyjątkowo relaksującej ;)

piątek, 23 lipca 2010

Problem kwadratu i prostokąta

Kiedy na studiach miałem pierwszy wykład o dziedziczeniu w obiektowych językach programowania (akurat na przykładzie C++), to zapamiętałem następujący przykład - prostokąt dziedziczy po kwadracie.

Przykład ten wyglądał pewnie mniej więcej tak:

class Square
{
protected:
  double x;
};

class Rectangle : public Square
{
protected:
  double y;
};


Od razu widać tu bezsens - przecież kwadrat jest szczególnym przypadkiem prostokąta, a nie na odwrót. Każdy kwadrat jest prostokątem, ale nie każdy prostokąt jest kwadratem. Czyli zgodnie z zasadami matematyki i logiki to kwadrat powinien dziedziczyć po prostokącie.



I tu zaczynają się problemy.

czwartek, 22 lipca 2010

Liczby otwarto-meandryczne

Rzeka ma źródło na południowym-zachodzie i wpływa do morza na wschodzie. Z zachodu na wschód jest też droga, na której jest n mostów nad rzeką. Na ile możliwych sposobów może ta rzeka przecinać drogę?

Rozwiązanie tego problemu w zależności od n tworzy ciąg tzw. liczb otwarto-meandrycznych (open meandric numbers) - oznaczany mi. Meandryczne - oczywiście od meandrów rzeki, natomiast otwartość bierze się z faktu, iż rzeka to krzywa otwarta. Liczby meandryczne dotyczą krzywych zamkniętych - pytanie jak taka rzeka płynie ;)

Spróbujmy znaleźć parę początkowych liczb otwarto-meandrycznych.

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

Dzisiaj 2 posty, promocja z okazji święta ;) Najpierw pięć prostych trików, aby programy w C++ były bardziej wydajne - może nie wszyscy znają wszystkie z nich ;)


1. Przekazywanie argumentów przez referencję

Chyba najstarszy trik świata ;) Zamiast pisać:

void f(A a);

piszemy

void f(const A& a);

i tyle ;) Dlaczego jest to takie przyspieszenie? Ponieważ teraz argument jest przekazywany przez referencję - przekazywany jest jego adres, a nie on sam w całości. Dzięki temu mamy jedno wywołanie konstruktora kopiującego mniej ;)

Modyfikator const gwarantuje nam, że nie zmodyfikujemy przez przypadek argumentu. Można go umieścić również po typie argumentu, znaczenie jest to samo - przekazywana jest referencja do stałego obiektu:

void f(A const& a);

Jednak lepszy jest chyba const na samym początku - raz, że od razu widać, co jest const. Dwa, pisząc go po typie można łatwo popełnić błąd i napisać go po ampersandzie (np. dopisując):

void f(A& const a);

Dobry kompilator zgłosi nam ostrzeżenie, ponieważ powyższa konstrukcja nie ma sensu i modyfikator const jest pomijany. O co chodzi? Porównajmy dokładnie oba typy argumentów:

void f(A const& a); - OK
void f(A& const a); - ŹLE

Różnica to referencja do typu A const - czyli referencja do stałego obiektu w pierwszym przypadku i zaznaczenie, że referencja A& jest stała w drugim. Druga konstrukcja nie ma sensu, ponieważ referencje z definicji są stałe. Takie proste, a jednak jakaś mała pułapka się znalazła.

wtorek, 20 lipca 2010

Doeo!

Aaaa! Różowe, kwadratowe króliki z pojedynczą brwią atakują!

Cel gry jest prosty - masz 40 sekund i w ciągu tego czasu musisz dotknąć kursorem 100 doeos. Na poziomie hard limit ten wynosi 200 sztuk, ale wtedy na szczęście pojawiają się dodatkowe, zielonkawe doeos - mniejsze, ale i lepiej punktowane.

poniedziałek, 19 lipca 2010

Powiadomienia o komentarzach na blogu

Dzisiaj wykorzystany efekt perpetuum mobile - dzięki problemom na blogu powstają na niego nowe posty ;)

Wiem, że ktoś dzisiaj zostawił tutaj komentarz (dzięki STAT4U). Nie wiem pod którym postem - hm. Szukając rozwiązania tego problemu (i zagubionego komentarza przy okazji) znalazłem ciekawą opcję na Bloggerze.

niedziela, 18 lipca 2010

"Final Audition" od Plastic

Plastic to polska grupa demoscenowa. A ich demo "Final Audition" wygrało Evoke 2005.

Obejrzyjmy je:



A teraz garstka szczegółów technicznych i ciekawostek ;)

sobota, 17 lipca 2010

AutoPager

Nie denerwuje Cię konieczność klikania "następna strona" na stronach internetowych? Czy nie łatwiej byłoby to po prostu przewinąć?

Taką funkcjonalność dodaje do Firefoksa dodatek "AutoPager". I już nie musimy zmieniać stron przeglądając wyniki z Googla, zdjęcia na Facebooku etc. etc. - po prosto przewijamy dalej ;)

Lista obsługiwanych stron jest powiększana z każdą aktualizacją, a dodatkowo można samemu pisać skrypty do obsługi ulubionych witryn.

piątek, 16 lipca 2010

Ragdoll Avalanche 2

Dzisiaj kolejna znana nie od dziś gra ;) Kto nie lubi fizyki szmacianej lalki i odrobiny krwi? ;)

Zasady gry są proste - za pomocą strzałek sterujemy naszym bohaterem, a raczej ciągamy go za głowę ;) Naszym zadaniem jest omijanie spadających kolców - może nam obciąć stopy i dłonie (tiaaa), ale nic więcej ;) Najciekawsza jest fizyka, zgodnie z która porusza się protagonista - jest to fizyka szmacianej lalki (http://en.wikipedia.org/wiki/Ragdoll_physics), a nasz bohater (bohaterka?) ma bardzo dużą bezwładność wszystkich kończyn ;)

"Ragdoll Avalanche 2" jest bardzo prosta jeżeli chodzi o fajerwerki graficzne, ale niesamowita fizyka, duża grywalność i pompująca adrenalinę muzyka robią swoje ;)

czwartek, 15 lipca 2010

ADL w... C++

ADL tym razem oznacza jednak Argument Dependent (Name) Lookup. Jest to ciekawy i kontrowersyjny ficzer języka C++ ;)

ADL dotyczy sytuacji w tym języku, kiedy nazwa funkcji może być podana bez kwalifikatora przestrzeni nazw - odpowiednia przestrzeń nazw jest ustalana na podstawie przestrzeni nazw argumentów funkcji. Dokładniej rzecz biorąc - przy poszukiwaniu danej funkcji (czyli ustalaniu które przeciążenie funkcji mamy na myśli) przeszukiwane są także przestrzenie nazw, do których należą typy argumentów tej funkcji. Warunkiem stosowania ADL jest oczywiście wywołanie danej funkcji bez kwalifikatora przestrzeni nazw.

Właściwość ta wydaje się zaawansowana, ale... można ją pokazać na prostym przykładzie:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}


Sorry, prostszego nie ma ;) To gdzie tu jest ADL? (nie mylić z adlem ;) )

środa, 14 lipca 2010

Sprytne rośliny i grzyby

Blog ciekawostkami stoi. Rośliny i grzyby wbrew pozorom też są ciekawe ;)

Wystarczy spojrzeć na poniższe zdjęcie:


Drzewo Dryobalanops aromatica, którego bardziej przyjazna nazwa to sumatryjskie drzewo kamforowe rośnie na wyspie Borneo. Jest wysokie czasami nawet na 75 metrów. Ale najciekawsze jest to, że drzewa tego gatunku nie lubią się nawzajem. A dokładniej mówiąc nie lubią dotykać liści innego przedstawiciela swojego gatunku. Stąd tak niesamowite zdjęcia.

Więcej: http://en.wikipedia.org/wiki/Dryobalanops_aromatica

wtorek, 13 lipca 2010

Program bez średników w C#

Do kompletu przykładów programów bez średników brakuje nam już tylko C#. C++ jest, Java jest, teraz czas na język Microsoftu ;)

Jeżeli ktoś nie zna jeszcze gry w "bum" niech zajrzy do tego posta:

http://wojtek-m.blogspot.com/2010/03/program-w-cc-bez-uzycia-srednikow.html.

Oryginalny program w C# grający w tą grę od 1 do 100 wygląda tak:

using System;

class BumGame
{
  public static void Main(string[] args)
  {
    for (int i = 1; i <= 100; i++)
    {
      if (i % 3 == 0 || i % 5 == 0)
      {
        Console.WriteLine("BUM");
        continue;
      }
      int j;
      for (j = 1; j <= i; j *= 10)
      {
        int digit = (i / j) % 10;
        if (digit == 3 || digit == 5)
        {
          Console.WriteLine("BUM");
          break;
        }
      }
      if (j > i)
      {
        Console.WriteLine(i);
      }
    }
  }
}


Czas usunąć średniki ;) Maina niestety nie udało mi się usunąć... jeszcze ;)

poniedziałek, 12 lipca 2010

ClickPLAY 2

Dzisiaj kolejna gra z serii ClickPLAY.

Znowu naszym celem jest w jakiś sposób znalezienie (odkrycie, zbudowanie, złożenie etc.) przycisku "Play" i kliknięcie go. I jak zwykle towarzyszy nam w tym jazzująca muzyka ;)

niedziela, 11 lipca 2010

Najstarsze firmy świata

W 2007 roku zbankrutowała japońska firma budowlana Kongō Gumi, z siedzibą w Osace. Może nie byłby to aż taki news, gdyby nie fakt, że była ona obecna na rynku przez 1429 lat.

W 578 roku rodzina Kongō została zaproszona z Korei do Japonii przez księcia Shōtoku, aby zbudowali świątynię buddyjską Shitennō-ji (którą można podziwiać w Osace po dziś dzień). Założona i prowadzona przez rodzinę Kongō firma działała nieprzerwanie do 2007 roku, kiedy została wykupiona przez większą firmę budowlaną, Takamatsu. Firma była w rękach rodziny przez 40 pokoleń. Członkowie rodziny Kongō nadal zajmują się stolarstwem.

Numer jeden już znamy. A jakie są inne najstarsze firmy świata?

sobota, 10 lipca 2010

Rzadko spotykane słowa kluczowe C++

W C++ można znaleźć mnóstwo słów kluczowych. Jednak niektóre są częściej używane, a niektóre zupełnie rzadko. Czasami warto się zainteresować takimi "białymi krukami" wśród słów kluczowych, aby potem nie być zaskoczonym ;)

Pokrótce opiszę 3 słowa kluczowe, które są najrzadziej spotykane lub ich prawdziwe przeznaczenie nie jest do końca znane ;) Te słowa to typename, explicit i mutable.

piątek, 9 lipca 2010

Wiadomość Arecibo

16 listopada 1974 roku radioteleskop w Obserwatorium Arecibo (Portoryko) wysłał wiadomość od ludzkości do... no cóż, do Obcych ;) Została ona nadana w kierunku oddalonej o 25 tysięcy lat świetlnych gromady kulistej, Gromady Herkulesa.

Wiadomość została nadana z pomocą fal radiowych, a dokładniej metodą FM. Zawierała 1679 bitów. Sposób zakodowania wiadomości jest bardzo ciekawy i to w sumie dzięki niemu trafiła ona na blog ;)

czwartek, 8 lipca 2010

Shift 2

4 miesiące temu pojawiła się tutaj gra logiczna "Shift". Dzisiaj jej druga część.

Sterowanie takie samo jak w oryginale - spacja to skok, a przycisk shift robi... shift ;) Czyli obrót planszy o 180 stopni zmianę kolorów. Pojawiły się nowe rodzaje przeszkód, ale w dalszym ciągu jest to fajna gra logiczna :)

środa, 7 lipca 2010

Blue Screen na żądanie

Czyli w pewnym sensie kontynuacja wczorajszego tematu. Kiedy wspominaliśmy różne magiczne liczby, to pojawił się też kod błędu 0xDEADDEAD (martwy umarlak?).

Pojawia się on w Windows XP w przypadku przerwania działania systemu na żądanie użytkownika. Dzisiaj się dowiemy jak to zrobić - czyli po prostu jak wywołać sobie Blue Screen na żądanie ;)

wtorek, 6 lipca 2010

Magiczne liczby

Bardzo często spotykamy "magiczne liczby". I nie chodzi tylko o fragmenty kodu, gdzie autor "zapomniał" użyć cokolwiek mówiącej stałej. Odgórnie, "magicznie" wybrane liczby to stały element formatów plików czy protokołów - pełnią one najczęściej rolę identyfikatorów. Przyjrzyjmy się najdziwniejszym, najbardziej szokującym i najciekawszym spośród "magicznych liczb".

Sam termin "magic number" ma swoje początki w systemie operacyjnym Unix w wersji 7 (rok 1979). Już w wersji szóstej Uniksa pierwsze 2 bajty programu wykonywalnego musiały mieć wartość 0x0107. W kolejnej wersji tego systemu wartość ta była podczas odczytywania pliku zapisywana w zmiennej o nazwie ux_mag. Zmienna ta dzięki dziwnej nazwie zyskała przydomek "magicznej liczby". Dla innych typów plików zmienna ta przyjmowała inne wartości. Jeżeli chodzi o systemy operacyjne to w linuksach nadal znajdziemy plik "magic.h" ;)

Tutaj można znaleźć oryginalny kod z pliku sys1.c Unixa wersji 7: http://www.google.com/codesearch/p?hl=en#miRTe8ZyR0o/Archive/PDP-11/Distributions/research/Henry_Spencer_v7/v7.tar.gz|118goTAkg2o/usr/sys/sys/sys1.c&q=%22ux_mag%22.

OK, to teraz najciekawsze magiczne stałe ;)

poniedziałek, 5 lipca 2010

Pierwiastek sześcienny na zwykłym kalkulatorze

Na maturze z matematyki można mieć kalkulator - ale "zwykły". Czyli najbardziej wyszukana operacja na nim dostępna to pierwiastek kwadratowy :P

Ale jest możliwość wyliczenia na standardowym kalkulatorze pierwiastka trzeciego stopnia (gdyby ktoś potrzebował). Algorytm jest prosty i nie wymaga żadnej kartki papieru czy innego rodzaju pamięci ;)

niedziela, 4 lipca 2010

Klasyki Atari

Tradycja "co 4. post gra flash" również w okresie promocyjnym musi zostać podtrzymana :) A dziś nie jedna, a aż 8 klasycznych gier naraz ;)

Atari udostępniło na swoich stronach internetowych 8 swoich klasycznych gier, które pojawiły się na automatach oraz konsoli Atari 2600 w latach 1979 - 1983. Mistrzowskie posunięcie ;)

sobota, 3 lipca 2010

Audacity i wuwuzele

Miesiąc temu nikt nie wiedział co to wuwuzela. Na polskiej wikipedii nie było o niej nawet artykułu. Jednak dzięki Mundialowi w RPA wszyscy poznaliśmy ten dźwięk ;)

Niektóre stacje TV filtrują wybrane częstotliwości, aby można było oglądać piękny futbol w spokoju. My też możemy spróbować usunąć irytujący dźwięk z użyciem darmowego programu Audacity oraz prostego w obsłudze plug-inu :)

piątek, 2 lipca 2010

Serendypność - top 10

Dziwne słowo, nie? Pochodzi od dawnej nazwy Sri Lanki w języku arabskim - Serendip. Oznacza przypadkowe szczęśliwe odkrycie, zwłaszcza kiedy szukaliśmy czegoś innego ;)

Konkretne znaczenie wzięło się od starej perskiej baśni, przetłumaczonej na włoski, a potem na angielski pod tytułem "The Three Princes of Serendip". Tytułowi bohaterowie szukali zagubionego wielbłąda, a odnalezli skarb ;)

Serendypność często obserwuje się w pracy naukowej - odkrycia i wynalazki powstają przypadkiem lub kiedy autorzy szukali czegoś zupełnie innego. Czas na odliczanie 10 najlepszych, najbardziej zaskakujących i najbardziej przydatnych ;)

czwartek, 1 lipca 2010

We are back

Po dość długiej nieobecności powracamy do obiegu ;) Zgodnie z obietnicą aby zadośćuczynić za posuchę w czerwcu w lipcu nowe wpisy codziennie :)

Profil bloga się nie zmienia - nadal głównie same ciekawostki, trochę o informatyce, dużo flashowych gier itd. ;)

poniedziałek, 7 czerwca 2010

Czerwcowa przerwa

Uważniejsi P. T. Czytelnicy zauważyli już pewnie, że jest drobna techniczna przerwa na moim blogu ;)

Ze względu na pewne okoliczności nie będę się produkował w czerwcu, ale w lipcu powracam :) A w ramach zadośćuczynienia za pusty czerwiec w lipcu nowe treści na blogu będą się pojawiały codziennie. Oh yeah.

Powodzenia w czerwcu i do zobaczenia na wakacjach! :)

sobota, 29 maja 2010

Dwie produkcje od lft

Produkcje od lft dawno nie gościły na tym blogu. Tak dawno, że się już pojawiły nowe ;)

Jeżeli ktoś nie pamięta (bo w sumie od listopada ubiegłego roku nic o lft nie pisałem), to jest to człowiek z Finlandii, który tworzy dema, których można dotknąć ;) Tzn. zamiast na komputerze, to na samodzielnie budowanym układzie elektronicznym z mikrokontrolerem jako sercem. Podpinasz: cinche na audio, kabel VGA od monitora, zasilanie (bateria 9V) i gotowe :)

czwartek, 27 maja 2010

Wielokropek w C++

Ostatnio pojawił się u mnie w kodzie C++ wielokropek (..., ang. ellipsis). Rzecz nie była zbyt jasna, więc dzisiaj więcej szczegółów ;)

Zastanawialiście się kiedyś jak działa funkcja printf? Ma ona w sobie pewną magię, bo przyjmuje niemalże dowolną liczbę parametrów - coś, czego nie robią funkcje na co dzień. Spójrzmy na jej definicję:

int printf ( const char * format, ... );

Pojawia się tutaj tajemniczy wielokropek :) Jak go użyć w swojej aplikacji? Najlepiej wcale nie używać ;)

wtorek, 25 maja 2010

Pac-Man Google

Z okazji 30-lecia wydania gry Pac-Man Google miał w ostatni piątek najlepszy doodle EVER.

Interaktywny Pac-Man to jest to, zwłaszcza taki, który od oryginału różni się tylko kształtem planszy (oczywiście logo Google) :) Można grać nawet w 2 osoby po "wrzuceniu" kolejnej monety (gracz nr 2 kontroluje WSADem Ms. Pac-Man) i podobno nawet level nr 256 jest wiernie oddany - tzn. zabugowany ;)

poniedziałek, 24 maja 2010

Różne Screens of Death

Blue Screen of Death znają wszyscy użytkownicy Windowsa. Ale jak się okazuje, niebieski to nie jedyny śmiercionośny kolor.

Screen of death to najczęściej komunikat jaki wyświetla system operacyjny (lub jakaś inna aplikacja) po krytycznym błędzie. Chociaż czasem nawet i błąd nie musi być krytyczny. Generalnie "ekrany śmierci" nie powinny się pojawiać, ale wiadomo jak jest... ;)

Jeżeli chodzi o kolory, to niebieski jest najpopularniejszy, ale możemy jeszcze wyróżnić:

- czerwony - widoczny w wersjach beta Windows Vista.
- purpurowy - serwer wirtualizacyjny VMware
- czarny - pojawia się w Windows 3.x, OS/2, Linuksie lub Nintendo Wii
- zielony - dla użytkowników Xbox 360 oraz NES (wersja top-load)
- szary - NES (wersja front-load)
- żółty - błąd aplikacji ASP.NET (te akurat często widuję :P)
- pomarańczowy - na starszych wersjach Nintendo DS
- biały - niektóre BIOSy

Ale jak się okazuję kreatywność programistów sięga dalej niż paleta kolorów ;)

piątek, 21 maja 2010

typeof w szablonach C++

Często kiedy wykorzystujemy szablony w C++ pojawia się pytanie - jak sprawdzić w czasie kompilacji, czy typ T jest podtypem typu U?

Kolejna wersja standardu C++ wprowadzi operator typeof. Jest on już zaimplementowany w pewnych kompilatorach (np. g++). Można wykorzystać operator typeid z C++ lub dynamic_cast, ale to działa w czasie wykonania, przez co zwalnia wykonanie programu.

Ale jak się okazuje, typeof czasu kompilacji można zaimplementować w standardowym C++ już teraz. Ja np. jeszcze w grudniu twierdziłem, że to niemożliwe :)

czwartek, 20 maja 2010

Agenda Circling Forth

Oj zawsze można się 1 dzień opóźnić z postem :) Dawno nie było demosceny :)

Ostatnio obiecywałem, że umieszczę zwycięzcę Breakpoint 2010, jak tylko pojawi się w HD. No cóż, chwilę z tym czekałem ;) Dzisiaj "Agenda Circling Forth", demo autorstwa CNCD i legendy sceny, grupy Fairlight :)

poniedziałek, 17 maja 2010

Portal: The Flash Version

"Portal" to niesamowicie popularna gra z 2007 roku. Tutaj jej wersja 2D, flash. Nieautoryzowana ;)

O dziwo "Portal" nie został wydany jako osobna gra, a w zestawie "The Orange Box". W wersji flash bohaterem wyposażonym w Aperture Science Handheld Portal Device (ASHPD) jest 15837. No i są tylko dwa wymiary.

sobota, 15 maja 2010

Wzorzec Post/Redirect/Get w ASP.NET MVC

Każdy(a) z Was pewnie spotkał się komunikatem "Aby wyświetlić tę stronę, Firefox musi ponownie przesłać dane etc..." O co chodzi i co zrobić, aby w naszych systemach tak nie było?

Podobny komunikat pokazuje, że odwiedzany przez nas serwis Web ma poważny problem, jakim jest ponowne wysyłanie POST. Schemat jest taki:

1. Przeglądarka wysyła polecenie GET i otrzymuje stronę z formularzem.
2. Użytkownik go wypełnia i klika "Wyślij".
3. Przeglądarka wysyła z użyciem POST dane do aplikacji.
4. Aplikacja odsyła stronę, że operacja się udała.
5. Użytkownik chce przeładować stronę z komunikatem.
6. Przeglądarka wysyła ostatnie zapytanie. Jakie? To z POST, z punktu 3.
7. Aplikacja drugi raz wykonuje akcję związaną z formularzem.

Czyli my chcemy zrobić coś normalnego (przeładować stronę, kliknąć "Wstecz"), a aplikacja zrobi coś więcej niż od niej oczekujemy. Hmmmm. A ciekawie robi się dopiero, kiedy ktoś używa przeglądarki, która nie ostrzega przed ponownym wysłaniem POST, takiej jak IE6.

Jak sobie z tym poradzić?

czwartek, 13 maja 2010

Wzlot i upadek SNK

Dzisiaj ciekawy dokument na temat jednej z najsłynniejszych firm z rynku automatów do gier (czyli gier arcade) - japońskiego SNK.

SNK słynie głównie z systemu do automatów - Neo Geo MVS. System ten powstał w 1990 roku i był używany (czyli powstawały na niego nowe gry) przez 14 lat. Jest to system do gier arcade, który był . O dziwo, przeżył on te 14 lat bez żadnych upgrade'ów specyfikacji. Najmniejszych. Czyli gry, które widzieliśmy w 2004 roku mogły równie dobrze powstać w roku 1990 - potrzebny był tylko skill programistyczny.

SNK to nie tylko hardware, to też kultowe serie gier. W Polsce najpopularniejsza z nich to chyba "Metal Slug", ale japońska firma to też kultowe serie bijatyk:
- Samurai Shodown
- Fatal Fury
- The King of Fighters
- The Last Blade

Neo Geo zyskało wielką popularność na rynku dzięki temu, iż umożliwiało łatwą wymianę gier używając kartridży. Teraz te nośniki są gratką dla kolekcjonerów - są sprzedawane za ceny do 150 dolarów. Te rzadkie można kupić za ok. $1000, natomiast rekordzistą jest niezwykle rzadka europejska wersja gry "Kizuna Encounter". Istnieje tylko 5 egzemplarzy, ostatni został sprzedany za blisko 12 000 dolarów.

Ok, to czas na film :)

wtorek, 11 maja 2010

Antywirus i strony WWW

W ostatnich dniach na facebook popularna była strona "why you should not add your parents as friends on Facebook?". Dlaczego moja Avira wykryła zagrożenie szybciej niż u innych osób?

Jeżeli ktoś nie klikał (i słusznie) zostań fanem, to nie wie jak to chciało się rozprzestrzeniać. Wirus mianowicie instruował sam użytkownika, żeby ten skopiował szkodliwy kod w JavaScripcie, wkleił go w pasek adresu przeglądarki, a następnie sam uruchomił. Przypomina się dowcip o prostym i skutecznym wirusie e-mailowym: "Proszę skasuj wszystkie pliki z komputera, ale najpierw roześlij tą wiadomość wszystkim znajomym" ;)

Czytałem artykuł o tej "stronce" w serwisie niebezpiecznik.pl i zauważyłem, że antywirus autora wykrył zagrożenie ("JS/FoobNoob.A") dopiero kiedy ten próbował zapisać szkodliwy kod. Natomiast u mnie alarm Aviry pojawił się już jak kliknąłem (ech...) "Zostań fanem". Dlaczego?

niedziela, 9 maja 2010

Super Mario Crossover

Zazwyczaj wstawiam gry flash z lenistwa. Dzisiaj nie mogłem się doczekać, aby się móc podzielić ;)

Crossovery zawsze są w modzie. Np. ostatnio powraca jeden z najpopularniejszych - czyli po 10 latach oczekiwań dostaniemy "Marvel vs. Capcom 3".

Aż dziw, że ktoś nie wpadł wcześniej* na crossover postaci ze starego dobrego NES (Pegasusa w Polsce). Aż do teraz, kiedy to ulubieni 8-bitowi bohaterowie zmierzą się z grą "Super Mario Bros.".

piątek, 7 maja 2010

Profilowanie kodu w .NET

Przychodzi moment, kiedy zaczyna liczyć się wydajność. Wtedy dobry profiler jest niezastąpiony.

Dla platformy .NET istnieje wiele profilerów, ale oferta darmowych rozwiązań jest ograniczona, a przy tym wiele z nich pamięta czasy .NET 1.1 i na tym etapie się zatrzymała.

Na tym tle bardzo pozytywnie wyróżnia się EQATEC Profiler, który, mimo że darmowy, może stawać w szranki z płatnymi narzędziami.

środa, 5 maja 2010

Kiedy 1 kwietnia staje się rzeczywistością

Rzadko kiedy żart prima-aprilisowy ma poważniejsze konsekwencje niż zakłopotanie tych, którzy dali się nabrać. W pewnej serii gier komputerowych było inaczej.

Wszystko zaczęło się od 1991 roku i gry Street Figher II. A właściwie od tekstu głównego bohatera, Ryu:


"You must defeat Sheng Long to stand a chance" było błędem tłumaczenia z japońskiego. Poprawne tłumaczenie powinno brzmieć "If you cannot overcome the Rising Dragon Punch, you cannot win!". "Sheng Long" to właśnie "Rising Dragon Punch" (nazwa ciosu) - jednak najwyraźniej tłumacz myślał, że to jest osoba, a nie atak. Dodatkowo przetłumaczył ten fragment na język chiński, bo "Shēng Lóng" brzmi fajniej niż "Shōryūken" ;)

Wtedy pojawił się słynny żart z 1. kwietnia 1992 roku.

poniedziałek, 3 maja 2010

Rodzaje nietypowych bugów

Słyszeliście o Heisenbugu? Jeżeli nie, to macie szczęście ;)

Zadziwiające, że nietypowe błędy (bugi) oprogramowania zostały (przeważnie) nazwane od nazwisk wielkich XX wiecznych fizyków. No i jednego matematyka ;)

1. Heisenbug - nazwany od Zasady nieoznaczoności Heisenberga. Błąd ten pojawia się, kiedy program powinien normalnie pracować, ale nie można dojść jego przyczyny, ponieważ w trakcie debugowania wszystko działa i pracuje normalnie.

Przyczyną może być specyficzne działanie debuggera (uruchamia kod bez optymalizacji, czyści pamięć przez co nie ma problemu z niezainicjowanymi zmiennymi itd.) albo to, że nasze procedury mają niespodziewane efekty uboczne lub niewidoczne zależności. Nazwa wzięła się od tego, że podobnie jak w zasadzie nieoznaczoności "im bardziej przypatrujemy się jednej rzeczy, tym gorzej widzimy inne".

sobota, 1 maja 2010

Nano Ninja

Dzisiaj "one button ninja action", czyli kolejna "jednoprzyciskowa" gra.

Czy jest coś bardziej cool niż ninja? Chyba tylko ninja, który lata w powietrzu, skacze, rzuca shirukenami, a to wszystko ma dostępne po naciśnięciu tylko jednego przycisku.

czwartek, 29 kwietnia 2010

Usuwanie katalogu .svn w Windows revisited

Paweł z Głuchołaz pisze:

Bardzo interesujący blog Wojtku, korzystam ze zgromadzonej na nim wiedzy niezwykle często.

Na przykład dzisiaj był mi potrzebny sposób na usunięciu katalogów .svn, ale bez użycia TortoiseSVN lub podobnego narzędzia. Niestety czasem w trakcie wdrażania systemu sprawdzone sposoby zawodzą. Raz popełniony błąd utrudnia standardowe postępowanie. Właśnie w takich przypadkach na pewno przyda się polecenie linii komend Windows:


for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *svn') do (
rd /s /q "%%i"
)

wtorek, 27 kwietnia 2010

TuxGuitar

Dzisiaj open source'owy program dla osób, które interesują się grą na gitarze ;)

TuxGuitar to darmowy program do edycji tabulatur. I to nie tylko we własnym formacie, ale (przede wszystkim) w formatach Guitar Pro (od 2 do 5) oraz PowerTab.

niedziela, 25 kwietnia 2010

"Microsoft RandomSort"

Ekran wyboru przeglądarki pojawił się jako aktualizacja do Windowsa na początku marca tego roku i z miejsca stał się kontrowersyjny - tak samo jak kontrowersyjny był jego brak.

Użytkownik ma do wyboru 12 przeglądarek, z czego 5 najpopularniejszych (Internet Explorer, Firefox, Chrome, Opera, Safari) widać na pierwszy rzut oka w losowym porządku, a mniej popularną siódemkę można obejrzeć po przewinięciu listy. "Mali" oczywiście oprotestowali ten układ (słusznie, bo co, 12 się nie zmieści na ekranie?).

Ale jak się okazuje, "losowanie" pierwszej piątki też nie jest losowe. Hm...

piątek, 23 kwietnia 2010

Cubefield

Dzisiaj gra w stylu lat 80-tych ;)

Cel prosty - lecimy w 3D, nie uderzamy w przeszkody :) Nie ma muzyki, ale dzięki temu soundtrack wybieramy sami :)

środa, 21 kwietnia 2010

Księga Mozilli

...czyli Easter Egg w przeglądarkach z rodziny Mozilla (i nie tylko!).

Czekam na konsultacje do promotora, zaraz stuknie 7 godzi siedzenia, ale post na bloga trzeba napisać :) Więc dzisiaj malutka ciekawostka dla użytkowników Firefoksa :)

poniedziałek, 19 kwietnia 2010

Backupy

Dwa miesiące temu moi rodzicom padł dysk twardy. Ponieważ człowiek uczy się najlepiej na cudzych błędach, to od dwóch miesięcy regularnie wykonuję kopie zapasowe.

Szukałem darmowego programu, który by umożliwiał wykonywanie kopii zapasowych i mój wybór padł na narzędzie Areca Backup (na licencji GPLv2).

sobota, 17 kwietnia 2010

Słabość światowych systemów energetycznych

Dzisiaj przez godzinę byłem pozbawiony elektryczności. Przypomniałem sobie z tej okazji o czymś, o czym dość dawno czytałem.

Ludzkość jest de facto uzależniona od prądu elektrycznego - jest to fakt, o którym sam się dzisiaj boleśnie przekonałem. Jak pokazują doświadczenia ostatnich 10 lat (http://en.wikipedia.org/wiki/List_of_power_outages#Largest) nasze systemy energetyczne są bardzo wrażliwe i łatwo nawet dziesiątki milionów osób może zostać pozbawionych elektryczności.

A o czym sobie przypomniałem? O burzach magnetycznych.

czwartek, 15 kwietnia 2010

ClickPLAY!

Ponieważ żałoba narodowa po sobotniej tragedii ciągle trwa to dzisiaj stonowana, czarno-biała gra.

Nasz cel jest opisany w tytule gry - trzeba wcisnąć przycisk "play". No, ale zazwyczaj trzeba najpierw sprawić aby się pojawił na każdej z plansz. Każda to osobna mini-gierka, której tytuł jest pewną wskazówką przy szukaniu odpowiedzi na pytanie "O co chodzi?".

wtorek, 13 kwietnia 2010

C# i proste sortowanie

Często musimy posortować listę obiektów do których nie ma standardowych metod porównywania. Bo nam się nie chce ich pisać ;) Albo akurat musimy posortować po numerze PESEL, a nie nazwisku.

Wcześniej w C# jak i w Javie trzeba pisać specjalny komparator na tą jedną okazję - zazwyczaj pisało się go w miejscu, co nie było ani eleganckie, ani przejrzyste.

Na szczęście od pewnego czasu mogą nam przyjść na pomoc wyrażenia lambda. Po blisko 80 latach od wynalezienia teraz w Twoim domu! Lub biurze, jeżeli pracujesz w biurze.

niedziela, 11 kwietnia 2010

Dziś dzień ciszy

Ze względu na wczorajszą tragedię nie będę dzisiaj nic pisał.

Wczorajszy dzień był najtragiczniejszym dniem dla Polski od czasów drugiej wojny światowej. Jednak pełny rozmiar tej tragedii do wielu dotarł dopiero dziś, a wiele kolejnych osób w pełni przyjmie to do świadomości dopiero w najbliższych dniach.

piątek, 9 kwietnia 2010

fr-043: rove

Ostatnio narzekałem na produkcję od farbrausch. Dzisiaj się kajam.

"rove", najnowsza produkcja wydana na Breakpoint 2010 naprawdę trzyma poziom. Potwierdzeniem tego jest zdobycie 2. miejsca w kategorii "PC demo".

Rove zabierze nasz w magiczny świat, niczym z filmów fantastycznych. Nie jest to demo z muzyką do tańczenia i setkami błyskających efektów - tutaj budowany jest klimat, produkcja jest bardzo "filmowa". Well done ;)

środa, 7 kwietnia 2010

On The Edge

Ostatnio było "Bloxorz", dzisiaj niezwykle podobny pomysł - "On The Edge"

Tym razem jednak nasz bloczek to zwykły sześcian, który kiedy na czymś stanie, to to coś się zapada - chociaż czasami potrzebuje dwóch razy ;)

Naszym celem jest pozbycie się wszystkich platform przed trafieniem do wyjścia :) 30 wciągających poziomów, które podobnie jak w "Bloxorz" łatwiej się przechodzi "od końca" ;)

poniedziałek, 5 kwietnia 2010

Sztuka szacowania

Projektant i programista powinien potrafić szacować różne wielkości. Warto się w tym ćwiczyć.

Chodzi zazwyczaj o znalezienie odpowiedzi na podstawowe pytania - "ile pamięci dyskowej potrzebujemy?", "o ile rekordów rocznie będzie się powiększać baza danych?" czy w końcu "dla jak dużych danych można powiedzieć, że działa to zbyt wolno?". Co ciekawe, szacowanie tych wielkości nie różni się wcale od szacowania innych wielkości fizycznych, a to można trenować, bawiąc się przy tym geekowsko ;) Na początek 3 zadania:

1. Ile sekund trwają szkolne wakacje?
2. Ile boisk piłkarskich (na długość) jest od Ziemi na Księżyc?
3. Ile piłek tenisowych zmieści się w Twoim pokoju?

Odpowiedzcie na początku nie wykonując żadnych obliczeń, potem zastanawiając się nad każdym pytaniem 1 minutę, a potem kliknijcie więcej, bo to policzymy (i gratis poznacie moje strzały) ;)

sobota, 3 kwietnia 2010

Początki najdziwniejszej encyklopedii

Chodzi o Encyklopedię Ciągów Liczb Całkowitych, którą w latach 60-tych zaczął tworzyć Neil Sloane, brytyjski matematyk.

Encyklopedia, jak sama nazwa wskazuje, jest kolekcją ciągów liczb całkowitych - np. wpis dla liczb Lucasa: http://www.research.att.com/~njas/sequences/A000032

Ale jak ktoś wpadł na taki dziwny pomysł, jak zbieranie ciągów liczb?

czwartek, 1 kwietnia 2010

Finisz

Finisz bloga nadszedł już dziś.

Niestety ze względu na natłok pracy oraz (tak naprawdę) coraz mniejszą liczbę pomysłów na "fajny post co 2 dni" Ciekawy świata adl dnia dzisiejszego kończy działalność. Na otarcie łez obietnica: powrócę z kolejnym blogiem w nieokreślonej przyszłości :)

Jeżeli ktoś lubi klikać "więcej", to pozna trochę statystyk :)

wtorek, 30 marca 2010

Bloxorz

Jedna z lepszych gier logicznych w jakie grałem. Bloxorz wciąga jak nic :)

Sterujesz podłużnym klockiem, a Twoim celem jest wrzucenie go od otworu. Ale uwaga - poruszasz się po wąskich platformach, a kiedy klocek straci równowagę i spadnie, to zaczynamy od nowa :)

niedziela, 28 marca 2010

Wyszukiwanie binarne

Jeden z wydawać by się mogło z prostszych algorytmów - przecież nie ma tu nic trudnego. Znalezienie środkowego elementu tablicy, porównanie go z tym wyszukiwanym i wykonanie tego samego kroku dla odpowiedniej pozostałej części tablicy. Nic trudnego?

Jon Bentley w "Perełkach oprogramowania" (1986) podkreśla, że o ile powyższy algorytm został opisany w druku w 1946r., to pierwsza wersja bez błędów ukazała się w 1962r. (bite 16 lat). Autor przy okazji wspomina, że kiedy na prowadzonym przez niego szkoleniu zadanie napisania wyszukiwania binarnego w ciągu paru godzin dostali zawodowi programiści, to 90% z nich skończyło z błędami.

Następnie w swojej książce Bentley opisuje prawidłową wersję algorytmu i na 30 stronach formalnie dowodzi jej poprawności oraz poprawności implementacji w C. W drugim wydaniu (2000) nie wprowadził żadnych zmian w swoim wyszukiwaniu binarnym.

W 2006r. został odnaleziony w nim błąd.

piątek, 26 marca 2010

Jak osiągnąć -46ºC w domu?

Dzisiaj w warunkach domowych (a dokładniej w kuchni) osiągniemy temperaturę -46ºC - jest to temperatura niższa, niż ostra zima na Biegunie Północnym ;)

Będziemy potrzebowali paru rzeczy, które każdy znajdzie w domu:

1. Termometr alkoholowy z odpowiednią skalą.
2. Ręczniki, ścierki.
3. Łyżka.
4. Puszka skompresowanego powietrza - środek do kupienia w każdym sklepie komputerowym za kilkaście złotych.
5. Aparat fotograficzny, aby dokumentować ;)

Mając gotowe te przedmioty - ruszamy :)

środa, 24 marca 2010

Anagramy w języku polskim

Zastanawialiście się kiedyś, jaka jest najfajniejsza grupa anagramów w języku polskim? Ja też nie, aż do wczoraj ;)

Na wypadek jeżeli ktoś nie wie - anagram to wyraz powstały poprzez zmianę kolejności liter innego wyrazu, np. "kot" i "tok". Anagramy tworzą całe zbiory (klasy równoważności :P) - np. "kot", "tok" i "kto" to jedna klasa.

Zacząć musimy oczywiście od listy wyrazów. Ja wykorzystałem darmowy słownik SJP przystosowany do gier słownych (takich jak Scrabble bądź Literaki): http://www.sjp.pl/slownik/growy/. Ma on 35 MB i zawiera 2,7 miliona słów. Czyli nie powinno być źle :)

Odpalamy swoje wybrane środowisko C++ i do roboty :)

poniedziałek, 22 marca 2010

Time FCUK

Pikselowate gry flash są w modzie. A takie oparte mniej lub bardziej na fizyce tym bardziej.

Gra logiczna Time FCUK, jak sama nazwa wskazuje, miesza czasem (a może przestrzenią)?

sobota, 20 marca 2010

Zawód: Lektor

Głosy tych Panów zna każdy Polak. Ale mało który wie, jak wyglądają posiadacze Głosów - czyli lektorzy.

Zawód lektora to polska fanaberia, taki stan pośredni pomiędzy dubbingiem a napisami - standardami w TV zarówno na Zachodzie, jak i na Wschodzie.

W tym dokumencie autorstwa TVP można zobaczyć (i oczywiście posłuchać) najsłynniejszych polskich lektorów: Tomasza Knapika, Janusza Szydłowskiego, Macieja Gudowskiego i innych. Jako bonus zobaczymy też młodziutką Matyldę Damięcką.

czwartek, 18 marca 2010

Żółta Książka

Ktoś się mnie kiedyś zapytał, dlaczego czytam książki informatyczne od deski do deski.*

Ponieważ nie zrobiłem tego z pierwszą książką informatyczną jaką czytałem. I, jak się później okazało, sporo straciłem. Nie trzymam już w niepewności - chodzi właśnie o Żółtą Książkę, czyli "Turbo Pascal 7.0 z elementami programowania. Część I" Andrzeja Marciniaka. Chociaż kolor nie może być wyróżnikiem, wszystkie książki z serii BUM (Biblioteka Użytkownika Mikrokomputerów) są żółte.

Książkę kupiłem w 1998 roku, pod koniec podstawówki. I, jak już wiadomo, nie przeczytałem jej w całości (w sumie to nadal tego nie zrobiłem) - co więc takiego straciłem?

wtorek, 16 marca 2010

Program w Javie bez main() i średników

Ostatnio padło wyzwanie - napisać program bez użycia funkcji main w Javie. Taki komentarz pojawił się przy okazji programu w C bez średników - http://wojtek-m.blogspot.com/2010/03/program-w-cc-bez-uzycia-srednikow.html ;)

Hm, stwierdziłem że podbije poziom trudności i w Javie też ani jeden średnik nie zagości! Co będzie trudniejsze niż w C, bo Java jest bardziej "uporządkowana".

Oryginalny program (do znanej już gry w "bum" - osoby nie w temacie niech zerkną do powyżej podanego posta):

public class BumGame {
  public static void main(String[] args) {
    for (int i = 1; i <= 100; i++) {
      if (i % 3 == 0 || i % 5 == 0) {
        System.out.println("BUM");
        continue;
      }
      int j;
      for (j = 1; j <= i; j *= 10) {
        int digit = (i / j) % 10;
        if (digit == 3 || digit == 5) {
          System.out.println("BUM");
          break;
        }
      }
      if (j > i) {
        System.out.println(i);
      }
    }
  }
}

niedziela, 14 marca 2010

Shift

Czarno-biała gra logiczna.

OK, ale co w tym takiego specjalnego, że czarno-biała? Ano to, że normalnie nasza postać jest czarna na białym, ale po naciśnięciu pewnego klawisza (ciekawego jakiego?) plansza obraca się o 180 stopni, a my jako biała postać poruszamy się po czarnym - bardzo fajny pomysł.

Uwagę zwraca muzyka, która pasuje do czarno-białego klimatu gry - mi kojarzy się z klubami z lat 30-tych, kiedy wszystko było czarno-białe (przynajmniej wg. filmów z tamtego okresu).

piątek, 12 marca 2010

Internet Explorer i typy MIME

Internet Explorer nie zawsze trzyma się standardów, co za niespodzianka.

Jeżeli w Waszej aplikacji webowej użytkownicy także mają możliwość umieszczania zdjęć wgrywanych z dysku twardego (np. awatarów) i wykorzystujecie to tego input type="file", to sprawdzcie to pod Internet Explorerem.

Otóż nasz stary kumpel IE (nawet w najnowszej, 8 edycji) czasami niestandardowo traktuje typy MIME wysyłanych plików graficznych.

środa, 10 marca 2010

Vanvcouver 2010

Zimowe Igrzyska Olimpijskie 2010 w Vancouver zakończyły się już jakiś czas temu, ale ten blog ma swój cykl wydawniczy :P

Na początku trochę statystyk - dla Polski była to najlepsza zimowa olimpiada EVER. No i po raz pierwszy od 38 lat zdobyliśmy złoty medal. Widać, że od paru lat coś się dzieje w polskich sportach zimowych - na 14 medali zdobytych, 10 zdobyliśmy w ciągu ostatnich 8 lat. A z tych 10 medali 8 krążków zdobyły 2 osoby, czyli to chyba one ciągną nas w klasyfikacji medalowej w górę ;)

Niestety pod względem organizacyjnym można było się dopatrzyć wieeelu niedociągnięć. Jakość realizacji TV jest może subiektywnym odczuciem, więc jej nie będę omawiał (a było średnio, np. Ole Einar Bjørndalen nie był w ogóle pokazywany przez realizatora, a i finisze paru medalistów biatlonu zostały "przegapione"). Ale parę faktów pokazuje poziom organizacji igrzysk - będę pisał tylko o tym, co sam widziałem, pewnie to tylko wierzchołek góry lodowej.

poniedziałek, 8 marca 2010

fr-033: like there's no tomorrow

Sie sehen den neuen Farbrausch - czyli najnowsza produkcja mistrzów (IMHO) demosceny.

Jest to zaproszenie na Breakpoint 2010, które wygląda jak... fr-041: debris. Nawet muzyka to jest tylko remix debrisowego utworu - z dodanymi fragmentami z fr-025: the.popular.demo. O tak, racja, disco-postaci z popular demo też się pojawiają...

Demo mówi o końcu demosceny itd. - no ale tą produkcją grupa zza naszej zachodniej granicy się zdecydowanie nie popisała, więc nie wiem czy to oni odrodzą demoscenę...

Zresztą zobaczcie sami.

sobota, 6 marca 2010

Vox Populi, Vox Dei

...czyli wilkołaczy thriller.

Wilkołaki, teraz na topie z okazji filmu "Wilkołak" (The Wolfman) w kinie. Ale ta prosta gra chyba nie ma nic wspólnego z filmem ;)

Grafika jest w 8-bitowym stylu, dodatkowo czarno-biało-szara. Jedyny kolor to nasz (niebieski) bohater. I czerwona krew. Duuużo (pikselowatej) krwi.

Niestety muzyki brak, gra jest bardzo krótka, ale... walka z wilkołakami wręcz to po prostu czysty fun.

czwartek, 4 marca 2010

Usuwanie katalogu .svn w Windows

Pracując nad uczelnianymi projektami pojawia się problem - kiedy przychodzi pora nagrać płytę CD z wynikami, a my wykorzystywaliśmy SVN do synchronizowania pracy zespołowej. Mamy wtedy dwa wyjścia:

a) nagrać płytę CD wraz z ukrytymi katalogami ".svn" - niezbyt profesjonalne, poza tym zielony ptaszek z Tortoise na płycie CD mnie osobiście razi
b) kasować foldery ".svn" ręcznie - no cóż, przy projekcie mającym wiele katalogów to powodzenia (ja tylko raz znalazłem upór aby to zrobić)

Poza tym warto wykasować te ukryte katalogi z folderów z zakończonych już projektów - pozwoli to zaoszczędzić całkiem sporo miejsca. Często ukrytych danych jest prawie tyle samo co tych widocznych!

Więc jest jakiś szybki, sprytny sposób aby to zrobić? Jest.

wtorek, 2 marca 2010

Program w C/C++ bez użycia średników

Czy dostaliście kiedyś zadanie napisać program w C++ (lub C) tak, aby nie użyć ani jednego średnika?

Jak to możliwe? Przecież średnik w prawie każdym języku zajmuje ważne miejsce - a to rozdziela instrukcje (SQL, Pascal, Perl), a to musi kończyć każdą instrukcję (C, C++, C#, Java) - jak więc sobie dać radę bez niego.

Jak zobaczymy - bez problemowo można. Jako przykładowy program-pomocnik do gry w "BUM". Jeżeli ktoś nie zna tej gry (zna ktoś?), to krótki przypomnienie:

1. Grają dwaj gracze. Na przemian mówią kolejne liczby naturalne.
2. Jeżeli gracz ma wypowiedzieć liczbę podzielną przez 3 lub przez 5 to zamiast tej liczby gracz mówi "BUM".
3. Tak samo jeżeli liczba do wypowiedzenia zawiera w sobie cyfrę 3 lub 5 to zamiast tej liczby gracz mówi "BUM".

niedziela, 28 lutego 2010

Hackowanie jQuery tablesorter

Jeżeli ktoś chciał mieć w swojej aplikacji webowej tabelę z danymi i mieć niejako "za darmo" sortowanie oraz stronicowanie tych danych, to może wpadł na javascriptową bibliotekę jQuery oraz dwa dodatki do niej: tablesorter oraz tablesorter.pager.

Jeżeli ktoś chce zobaczyć jak to działa to przykład jest dostępny stronie dodatku:

http://tablesorter.com/docs/example-pager.html

Całość jest na licencji MIT, więc można spokojnie w tym pogrzebać - na szczęście, bo nie jest idealnie :)

piątek, 26 lutego 2010

Gravitee

Dzisiaj mini golf. Kosmiczny :)

Bardzo fajny pomysł na wykorzystanie fizyki w grze - to faktycznie mini golf (chociaż nie strzela się do dołka, a do bramki - hm...), ale w skali układu planetarnego :) Można np. wykorzystać pole grawitacyjne danej planety aby rozpędzić piłkę, a osiągnięcie III prędkości kosmicznej to podstawa ;)

środa, 24 lutego 2010

Twój ISP a baza danych

Ostatnio po raz kolejny miałem problemy aby połączyć się z SQL Serverem. Dobra, to nic niesamowitego, zwłaszcza jak się grzebie na serwerze i w ustawieniach firewalla. Ale tym razem w końcu udało mi się znaleźć przyczynę, którą nazwę po imieniu: Multimedia Polska. S.A.

poniedziałek, 22 lutego 2010

Tajemnice klawiatury

Człowiek spędza większość dnia przyssany do klawiatury - a nie zdajemy sobie sprawy, jak mało o niej wiemy.

Np. dlaczego w Windows tylda nie wychodzi za pierwszym naciśnięciem?

Bo dla klawiatury polskiej programisty tylda jest tzw. martwym klawiszem (http://en.wikipedia.org/wiki/Dead_key) - ma na celu zmodyfikować następny naciśnięty klawisz, w tym przypadku - dodać ogonek :)

sobota, 20 lutego 2010

Szablony w C++ - Fibonacci

Hej!

A jakby połączyć szablony z C++ z programowaniem funkcyjnym rodem z F#?

Niesamowity pomysł, spróbujmy zaimplementować liczby Fibonacciego z użyciem mechanizmy szablonów C++!

Wykorzystamy częściowe specjalizacje szablonów i technikę tzw. metaprogramowania, a nasz wynik zostanie wyliczony już w czasie kompilacji. Brzmi fajniej niż wektor elementów typu T, co?

czwartek, 18 lutego 2010

Grid 16

jmtb02 pojawiał się jako autor gier na tym blogu już dwukrotnie - w obydwu występował słoń, który błąkał się po jednym jedynym poziomie. Dzisiaj coś nowego. Coś mnogiego.

16 gier w jednym - gra zmienia się co parę sekund, a do obsługi każdej wystarczą tylko 4 klawisze strzałek. W każdej obowiązują inne zasady - trzeba zdać się na intuicję gracza. Wymagany jest refleks, a także umiejętność szybkiego przełączania się i zapamiętywania w jakim stanie skończyła się jak gra.

Nie trzeba chyba dodawać, że gra z każdą chwilą przyspiesza. Całości dopełnia pompująca adrenalinę muzyka ;)

wtorek, 16 lutego 2010

Jens Johansson to... koder

Dzisiaj kolejna postać z mini cyklu "X to... koder" - Szwed Jens Johansson.

"Kto to?" spytaliście pewnie (słusznie). Jens to jeden z najlepszych (nie tylko moim zdaniem) keyboardzistów świata. Sławę zdobył występując z Yngwie Malmsteenem i Dio. Od 15 lat jest członkiem fińskiego zespołu Stratovarius. Występował gościnnie na wielu płytach m.in. krążkach Star One, Ainy, Hammerfalla i Spastic Ink. Ciekawostka: w 1994 prawie dołączył jako klawiszowiec do kultowego Dream Theater.

Jens jednym z pierwszych klawiszowców-wymiataczy, łączy w swojej grze wiele różnych stylów, ale najwięcej inspiracji czerpie prawdopodobnie z muzyki klasycznej (w końcu Malmsteen to jeden z tuzów neo-klasycznego metalu).

Ale pan Johansson stukał w życiu nie tylko w czarno-białe klawisze, ale też w klawiatury komputerów - wpisując kod! Co więcej, pięknie wpisuje się on w archetyp prawdziwego programisty ;)

niedziela, 14 lutego 2010

Kolejny fajny patent

Miesiąc temu pisałem o opatentowaniu (w Australii) koła. W jajo tamtejszy urząd patenetowy zrobił prawnik zajmujący się tą tematykę, wyraźnie pokazując wady przyspieszonego trybu rozpatrywania wniosków patentowych - w zamyśle sposobu na zwiększenie innowacyjności.

A jaki ciekawy patent może zdobyć w USA 5-latek?

piątek, 12 lutego 2010

Czy Prawo Moore'a spowalnia?

Parę dni temu stanąłem przed dość niemiłą perspektywą przeinstalowania swojego systemu Windows (nie, nie upgrade - dalej bym pozostał przy XP).

Problem wydawał się spory - kłopoty pojawiły się (tak przynajmniej mi się wydaje po symptomach) w części modułu odrysowywania okien w systemie, przez co niektóre aplikacje (Firefox, Foobar2000) były tylko białym okienkiem, a inne (np. NetBeans) działały bez żadnych problemów.

Na szczęście problem rozwiązało narzędzie przywracania systemu, które mimo iż uparcie twierdziło iż "w systemie nie zaszły żadne zmiany które można by cofnąć", to coś naprawiło i działa.

Przy tej okazji powróciło do mnie parę przemyśleń, które miałem już wcześniej...

środa, 10 lutego 2010

Dolphin Olympics 2

Albo "Dolphin Cup", jeżeli wierzyć tytułowi z menu ;)

Kolejny tytuł sprzed lat (konkretnie dwóch) - to były czasy, kiedy człowiek zamiast klepać w epoce kodu łupanego (asembler) pływał delfinem, robiąc różne triki ;)

Cel gry jest prosty: HIGH SCORE! A punkty zdobywasz robiąc w ciągu 2 minut rozmaite sztuczki pływającym delfinem i łącząc je w jak najdłuższe combo... Zresztą nasz delfin nie tylko pływa, przy odrobinie szczęścia opuścicie Układ Słoneczny. W ciągu 2 minut. Parę razy.

Wciąga na potęgę :)

poniedziałek, 8 lutego 2010

Lotus 3 na gitarze

Praca wre, wre... Więc niestety na blogu ostatnio mało konkretów - sorry dla wszystkich osób, które to czytają ;)

Kiedyś była "Contra" na gitarze elektrycznej. Dzisiaj - kolejny legendarny soundtrack w wersji sześciostrunowej z prądem - muzyka z "Lotus III: The Ultimate Challenge" (1992). Ha, nawet ja w to grałem w czasach DOS-u, a na Amidze to tytuł kultowy :)

Enjoy!

sobota, 6 lutego 2010

Jednoosobowa armia demosceny

Produkcje demoscenowe tworzą najczęściej grupy ludzi: koderzy, graficy, muzycy, ostatnio pojawia się nawet reżyser...

Grupa AND pod tym względem jest inna. Jest jednoosobowa, tzn. jej jedynym członkiem jest AND - Dmitry Andreev, urodzony w Niemczech, studiujący w Rosji.

O grupie najlepiej świadczą produkcje - a AND specjalizuje się w demach 64k (dwa razy wygrał Assembly w tej kategorii).

czwartek, 4 lutego 2010

Fan prędkości

Tak, wiem, nazwa "SpeedFan" pochodzi od "prędkości wiatraczka", ale nie mogłem się powstrzymać :P

SpeedFan to mały programik, który potrafi odczytywać prędkości wiatraków (zaskoczeni?), temperaturę (procesor, dysk twardy, karta graficzna, płyta główna), napięcie itd. z czujników sprzętowych zamontowanych w Twoim komputerze.

wtorek, 2 lutego 2010

Black Circle

Dzisiaj wciągająca gra zręcznościowo-logiczna, o bardzo ciekawej "fizyce gry".

Naszym zadaniem jest dotoczyć kulkę do celu (OK), unikając ostrych kolców, miotaczy ognia (OK) itd., a sytuacji nie poprawia fakt, że wiele elementów jest ruchomych (OK).

To co tutaj fajnego?

niedziela, 31 stycznia 2010

Najbardziej kasowe produkcje w historii... urealnione

Na stronach IMDb (http://www.imdb.com/boxoffice/alltimegross?region=world-wide) można sprawdzić, ile dany film zarobił USD na całym świecie (dane dla wszystkich filmów które zarobiły więcej niż 200 mln USD). Ostatnio było głośno o tym, iż "Avatar" (po niewiele ponad miesiącu dystrybucji) prześcignął na tej liście "Titanica".

Cóż, w takim razie James Cameron jest w pełni uprawiony, aby wejść na stronę http://who-is-awesome.com/. Ale przyjrzyjmy się dokładnie pierwszej dwudziestce z tej listy:

piątek, 29 stycznia 2010

Pijawkom stop!

Rozpoczął się ostatnio czas sesji, a internetowe "wysysacze godzin" hulają w najlepsze. Kto nie spędził ileś czasu na Youtube w czasie kiedy miał robić coś pożytecznego? ;) Wyjęcie kabla sieciowego to rozwiązanie najskuteczniejsze, ale też średnio praktyczne - pozbywamy się całości internetu, a nie tylko jego wysysającego czas kawałka ;)

Na szczęście dla użytkowników Firefoksa jest nadzieja ;)

środa, 27 stycznia 2010

Hiro Nakamura to... koder

Pytanie do fanów serialu "Heroes": na pewno kojarzycie Hiro (hehe) Nakamurę? Japończyka, który potrafi zatrzymywać czas, poruszać się w czasie oraz przestrzeni?

W serialu Hiro jest początkowo programistą 3-ciego poziomu w Yamagato Industries. Co ciekawe, grający tą postać Masi Oka w realnym świecie też jest... programistą.

poniedziałek, 25 stycznia 2010

This is the Only Level

Sympatyczny słoń znany z Achievement Unlocked powraca! Jak zwykle jmtb02 nie zaprezentował nam sztampowej rozrywki ;)

Stopień kompilacji gry widać już po tytule. Tak, gra ma tylko jeden poziom ;) Level One ;)

sobota, 23 stycznia 2010

Orzeł na Sępolnie

Czy wiesz że...

wrocławska dzielnica Sępolno wygląda jak orzeł patrząc z lotu ptaka? Budynki tworzące kręte uliczki tej dzielnicy tworzą obraz orła, a dokładnie orła dolnośląskiego, który to był obecny w dawnym herbie Dolnego Śląska.

czwartek, 21 stycznia 2010

Candytron

Dzisiaj 10-godzinny powrót do Polski, więc post krótki i treściwy :)
A jak łatwo zrobić treściwego posta? Pokazując coś z demosceny ;)

Dzisiaj więc kolejna produkcja od farbrausch - tym razem intro w 64kb. Razem z niesamowitą muzyką (z wokalami!) ;)



wtorek, 19 stycznia 2010

Othello w 1200 bajtach C

Ile można pomieścić w 1200 bajtach kodu C?
Roemer B. Lievaart, startując w 1987 w IOCCC (International Obfuscated C Code Contest) zmieścił cały program grający w Othello (Reversi)!

niedziela, 17 stycznia 2010

N The Way of the Ninja

Dzisiaj trochę "klasyki", czyli gra o której mowa była już na poprzedniej wersji mojego bloga.
Wcielasz się postać ninja, którego jedynym celem jest przetrwać. W osiągnięciu celu przeszkadzają Ci uciekający czas (jak dojdzie do 0 giniesz, zebrane złoto dodaje cenne sekundy) oraz cała masa robotów, min, działek, laserów, wyrzutni rakiet itd. itp.

piątek, 15 stycznia 2010

Nazwy serwerów W3C

Kiedy moją stronkę odwiedzały walidatory World Wide Web Consortium (W3C) to zainteresowały mnie nazwy domenowe ich serwerów:

krusty.w3.org
dr-nick.w3.org

Przecież to znane postacie z "The Simpsons" ;) A jak z pozostałymi serwerami W3C?

środa, 13 stycznia 2010

Sięgnij gwiazd

Czy może być coś fajniejszego od pobytu w kosmosie...?

Tak! Renderowanie w czasie pobytu obrazu z użyciem POV-Ray! Oh yeah!

Na szczęście na całym świecie uważam tak nie tylko ja - taki sam pomysł miał Mark Shuttleworth, drugi kosmiczny turysta, miłośnik ray-tracingu ;) Tak powstał obraz "Reach for the stars".


poniedziałek, 11 stycznia 2010

Patent na koło

W 2002 Australijczyk, John Keogh opatentował "okrągłe urządzenie ułatwiające transport". Do wniosku patentowego był dołączony następujący rysunek:


sobota, 9 stycznia 2010

Achievement Unlocked

Graliście kiedyś w grę, której cel był dość... durny?

To teraz od jmtb02 dostajemy grę, której celem są... same takie cele! I to aż 100!

O co chodzi? Chodzimy słoniem po 1 planszy i musimy wykonać 100 różnych zadań ("osiągnięć") - jakie rodzaju? No cóż... każdego, jedyne co jest podpowiedzią to nazwa zadania :) Samo załadowanie gry to już jeden punkt dla nas ;)

Uwaga, wciągnie Was na chwilę ;)

czwartek, 7 stycznia 2010

F# - sortowanie przez scalanie

Większość P.T. Czytelników nie jest crazy na punkcie F#, ale ja się nie poddaje :P

W końcu rozwiązanie ostatniego ćwiczenia z http://wojtek-m.blogspot.com/2009/10/f-i-gimnastyka-umysu.html ;)

*3. Sortowanie listy przez scalanie (merge sort). Pamiętaj o złożoności O(nlogn) i stabilności. Pierwszym argumentem sortowania powinna być funkcja porównująca, np. dla int byłaby to funkcja (<).

wtorek, 5 stycznia 2010

Asercje czasu kompilacji

Część z nas, korzystając z C++, pewnie pisała podobny kod:

#include <cassert>

int main()
{
    assert(sizeof(long long) == 8);
    return 0;
}


Ale przecież to można by sprawdzić już w czasie kompilacji - prawda?

W C++0x (w sumie teraz już C++1x, nawet na wiki zmienili ;)) będzie słowo kluczowe static_assert, które pozwoli robić takie rzeczy.

Ale jak sobie z tym poradzić zanim nowy C++ trafi pod strzechy?

niedziela, 3 stycznia 2010

Process Explorer

Nie irytowało Was nigdy to, że nie można się w prosty sposób dowiedzieć jaki proces "trzyma" dany plik w systemie MS Windows?

Oto rozwiązanie - bardzo ciekawy program dla systemu Windows: Process Explorer.
Jest to udostępniany przez Microsoft (w 2006 roku MS przejął producenta tego oprogramowania, firmę Sysinternals) rozbudowany "Menadżer zadań". I to jak rozbudowany.

piątek, 1 stycznia 2010

Canabalt

Mój poprzedni blog słynął z publikowania wciągających gier flash. Bardzo wciągających. W nowym, 2010 roku postanowiłem wrócić do tej tradycji ;) Przy okazji odciąży mnie to z pisania bloga trochę :P

Dzisiaj prezentuję Wam Canabalt.