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