Okiem chorego programisty.

Blog Tostera

Archive for the ‘Moje projekty’ Category

Anime Whisper ewolucja….

No Comments »

July 2nd, 2009 Posted 23:55

Dzisiaj będzie krótko. AnimeWhisper wciąż działa i się powoli rozwija. Chwilowo ma 2 userów ale nic to, ważne że narzędzie jest przydatne dla mnie :) Reszta się nie liczy :) Wszelakie błędy proszę raportować wiecie gdzie :)

PS.
Blind coś tam o jakiejś stronie mruczał może coś naklepie w php albo c# :)

Posted in Moje projekty

Intrygująca kompresja.

4 Comments »

June 28th, 2009 Posted 22:25

Dzisiaj na stole operacyjnym będzie “Intrygująca kompresja”. Zbitek słów mówiący wszystko i nic. Co to jest kompresja wszyscy wiedzą, natomiast intrygująca gdyż mnie zaintrygowała metoda. Więc poleje trochę wody na jej temat.

Otóż obecnie dominują na rynku zipy, rary, 7zipy, itp. itd. Jest również kompresor kgb który daje bardzo dużą kompresje ale jest w pizdu wolny. W sumie dowiedziałem się o nim od Blinda bo nie byłem świadom że ktoś go zrobił i mam podejrzenia że działa na zasadzie podobnej do tego co wykminiłem ale ich się nie liczy :D

Otóż podłożem do moich rozmyślań był torrent, okazuje się że mimo słabego łącza da się zutylizować inne części pikuśa aby zyskać to co chcę czyli dużo danych w krótkim czasie. WTF ? Ano sprawa jest prosta, metody kompresji o których słyszałem do tej pory dzielą się na 2 grupy: stratne i bezstratne. Pierwsza z tych grup nas nie interesuje więc o niej zapominamy. Teraz druga grupa, właściwie dzieli się na kompresje słownikową oraz różne alg. bazujące na powtarzalności (np. RLE). Co jest cechą wspólną ? Ano poddajemy dane wejściowe opisowi poprzez meta język który jest krótszy niż dane wejściowe, a zarazem jest jednoznaczny. W efekcie w zależności od tego co wsadzamy do algorytmu dostajemy lepszy lub gorszy stopień kompresji.

Na razie przynudzam, wiem. Pomyślałem sobie: “Fuck, po cholerę mi cały opis skoro mam turbo szybki procesor, no i kurde dlaczego nie mogę mieć stałego stopnia kompresji niezależnie od danych ?” No i okazuje się że da się. Przynajmniej w teorii i jak na razie częściowo w praktyce. Jak to robimy ? Odpowiedź jest bardzo prosta. Nasz meta język nie będzie jednoznaczny. Będzie mówił że coś może być tak albo trochę inaczej….

Weźmy na przykład 1 bajt i popastwmy się nad nim, dla przykładu:
src = 11010010
teraz potraktujmy go 4 maskami bitowymi:
mk1 = 11000000
mk2 = 00110000
mk3 = 00001100
mk4 = 00000011
jeśli src & mk1-4 jest różne od zera to wstawiamy 1 do naszych zakodowanych danych, jeśli jest zero to wpisujemy zero. W efekcie dane wyjściowe dla naszego źródła wyglądają tak:
dst = 1101
W efekcie jakie dane nie wsadzimy zawsze dostajemy 50% kompresji :) Co zapisaliśmy ? Każda jedynka oznacza że w danych źródłowych na odpowiednim miejscu występuje jedna z kombinacji: 01, 10, 11
Teraz trzeba spożytkować moc obliczeniową, dla naszego przykładu trzeba sprawdzić następujące warianty aby znaleźć dane wejściowe:
{00 | 10 | 11} + {00 | 10 | 11} + 0 + {00 | 10 | 11}
w efekcie do sprawdzenia jest 3 * 3 * 3 wariantów. Smutna sprawa jest taka że wraz z przedłużeniem ramki którą będziemy kompresować złożoność rośnie wykładniczo :/ Ale nic to, badania pokazują że dla 4 bajtów czasy poszukiwań są minimalne.

Teraz należy sobie zadać pytanie, która z możliwych kombinacji jest właściwa ? No i tu zaczynają się schody, propozycja była taka aby dodać sumę kontrolną, użyłem do tego różnych hashy, zostałem przy crc8. Jak wygląda opis ?

dane wejściowe 4 bajty, dane wyjściowe 3 bajty czyli zysk 25% zachęcająco (przynajmniej dla mnie). Niestety jest bubba, jak każdy wie hash nie gwarantuje unikalności, kolizje są oczywiste. Myślałem że kombinacja bitów + crc będzie wystarczające, ale nie jest. Znajdują się dane które nie dają się na tej zasadzie odkompresować. Mam jeszcze jeden pomysł ale jeszcze go nie sprawdzałem, pomysł jest taki:

mamy 3-4 ramki zakodowane jak opisałem wyżej, dodajemy do nich kolejna sumę kontrolną:
[ramka1][ramka2][ramka3][ramka4][crc]
W efekcie kopresja spada do ~18%, i nie wiem czy eliminuje to kolizje chyba nie… Może kiedyś jeszcze nad tym posiedzę, chwilowo mam inne rzeczy do roboty.

Dla osób które uważają że 18% to słaba kompresja (o ile oczywiście zadziałałaby bezbłędnie) to chcę przypomnieć jedną rzecz która wspominałem na początku. Kompresja daje stałe ratio NIEZALEŻNIE od danych wejściowych… Czyli dane przed chwilą skompresowane mogę skompresować jeszcze raz, i jeszcze raz…. w efekcie dostaniemy kumulującą się kompresję….

Posted in Moje projekty

Anime Whisper – ruszyła strona

No Comments »

June 16th, 2009 Posted 15:40

Cóż mus to mus, siadłem i skleciłem stronkę dla projektu Anime Whisper. Co prawda wygląda niezbyt porywająco ale lubię proste lekkie stronki, w których nie ma 1000 banerów flashowych i innego śmiecia. Ponadto projekt mocno się zaawansował (klient) wygląda w miarę stabilnie. Dziś zacznę napychanie bazy farszem, na początek kilka małych rzeczy aby zobaczyć jak całość egzystuje. Może w przyszłości jak znajdę znowu chwilę czasu między rutyną to rozbuduje projekt. Może w międzyczasie pojawi się ktoś kto będzie chciał go rozwijać ? Tymczasem świat czeka na pierwszą alphe ;P

Posted in Moje projekty

Anime Whisper

1 Comment »

June 12th, 2009 Posted 11:02

I stało się (postanowiłem wystartować i możliwie szybko skończyć) ten mikro projekt. Chodził mi on po dyńce już od pewnego czasu, ale do tej pory zabierałem się za niego jak pies za jeża. Niestety czas to jeden z zasobów na deficyt którego pernamentnie cierpię, a że inne rzeczy pochłaniają go niemiłosiernie tak więc sami wiecie jak jest. Tak czy siak, owak czy wspak na ten długi pochmurny i deszczowy weekend postanowiłem zrobić coś innego, aby oderwać się od rutyny. No i jak pomyślałem tak zrobiłem ruszył Anime Whisper nazwa kodowa AW :P

Kilka słów co to jest:
Otóż w założeniu jest to aplikacja (być może powstanie też wersja webowa jak Goofyx albo Blind znajdzie trochę czasu i zapału), która pozwala na szukanie oraz wyrażanie swoich opinii o filmach/serialach z gatunku Anime. Co prawda jest już takich serwisów multum na sieci ale w żadnym z nich nie znalazłem jednej turbo ważnej opcji: “podobieństwa gustu”. O co kaman ? W AW będzie można wyrazić swoją opinię na temat danego anime (nic nowego) brane pod uwagę są dwa parametry: ocena użytkownika oraz wiek użytkownika. I teraz, na podstawie tych danych każdy użytkownik będzie mógł wyszukać innych użytkowników którzy podobnie ocenili anime i mieli podobny wiek. W efekcie użytkownik będzie mógł stworzyć sobie listę innych użytkowników którzy mają podobny gust. A jak już będzie miał taką listę to będzie mógł zerknąć co oni oglądali i co im się podobało, na podstawie tego można postawić hipotezę że skoro im się podobało to i mi będzie się podobać.

Jako główne źródło wiedzy używana będzie świetny portal Anime News Network do którego będzie linkować nasza baza tworzona przez ewentualnych użytkowników. Według moich wątpliwych planów wersja beta powinna pojawić się w okolicach poniedziałku, wtedy też ogłoszę projekcik na portalu Unit1.

W między czasie dzięki za pomoc dla Blinda (za rozmowy z bazą sql), Forca (za parsowanie stronki ANN), Goofyxa(za wstępną chęć napisania wersji php)

Posted in Moje projekty