logoIts just another jogger in the wall


_mm_shuffle explained

03 stycznia 2011, 19:57:44 | Kategorie: Ogólne | tech | Techblog |

Robiąc pierwsze kroki z SSE starłem się z instrukcją _mm_shuffle. Dokumentacja od microsoftu umiarkowanie rozjaśniła jak się tego używa, ale dalej nie wszystko rozumiałem. Naskrobałem więc prosty programik, którym można sprawdzić jak się zachowa _mm_shuffle dla zadanej maski:

Binarka
Źródło

Wydajność si szarpa to tragedia, czy tylko ja nie umiem go efektywnie wykorzystać?

22 października 2010, 09:43:13 | Kategorie: Ogólne | tech | Techblog |

Zadanie: Wskazać w którym miejscu obrazka koncentracja szczegółów jest duża, a w którym mała.
Pomysł na rozwiązanie: Zrobić lekki blur obrazka, a potem policzyć różnicę między oryginałem a rozmytą kopią. Jeszcze wszystko było fajnie, wstępny test na Photoshopie pokazuje, że da się uzyskać całkiem niezłe efekty. Jednak moja implementacja tego w C# jest KOSZMARNIE wolna!

Nie wiem, czy ja robię błąd, czy to po prostu c# jest mało wydajny, ale coś jest nie tak. Skalowanie i pozbawianie koloru obrazka idzie całkiem szybko, natomiast liczenie rozmycia - okropnie wolno.

Zacząłem od wersji takiej, że każdy piksel obrazka jest wczytywany osobno. Było tragicznie. Przepisałem obrazek do tablicy bajtów i na niej liczę wg przekształcenia:

[1,2,1,
2,4,2,
1,2,1]/16

i znów okropnie wolno. Dla wersji z macierzą 5x5 jeszcze gorzej. Zdaję sobie sprawę, że dla marnego obrazka 100x100 to jest 2 600 000 mnożeń i dzieleń oraz trochę przepisywania, ale na Teutatesa! Stary Photoshop na kiepskim sprzęcie liczy rozmycie Gaussa nieporównywalnie szybciej!

Próbowałem wykorzystać do zadania bajerek o nazwie Parallel.For ale zrezygnowałem po oberwaniu wyjątkiem... Pozwoliłoby to policzyć wynik teoretycznie krócej, ale nie szybciej...

Czy rzeczywiście muszę robić hacki typu przemycanie bajtów w longach lub pisać samemu kod wykorzystujący SSE żeby to zrobić szybko? A może zamienić .net na mono i użyć ichniego wsparcia dla SSE? Ostatecznie mógłbym uzyć zewnętrznych bibliotek działających szybko i sprawnie, ale to jest niewskazane, bo chcę się czegoś nauczyć, a nie tylko osiągnąć efekt.
Jeśli trzeba, to z bólem serca porzucę ce kratkę na rzecz ce pe pe, ale bardzo, bardzo niechętnie...

Da się to zrobić szybciej? JAK?

Jak ukryć Skype'a z paska zadań w Windows 7

20 kwietnia 2010, 13:23:59 | Kategorie: Ogólne | tech | Techblog | windows |

Update:

Zespół Skype'a udostępnił możliwość wyłączenia niechcianej funkcjonalności w jednej z ostatnich aktualizacji:
Narzędzia->Opcje->Zaawansowane->Pozostaw Skype w pasku zadań, gdy jestem zalogowany (odznaczyć).

Szkoda tylko, że taka możliwość pojawiła się dopiero pod wpływem miażdżącej krytyki użytkowników.


Skype ładnie się integruje z Windows 7. Jest kolorowy, udostępnia różne opcje pod prawoklikiem, po zamknięciu okna siedzi w pasku zadań. No właśnie... Z jednej strony jest pod ręką, nie da się też go przypadkiem zamknąć przerywając rozmowę. Ale ja nie chcę, aby siedział mi non stop w taskbarze i zajmował miejsce! Mój taskbar ma to, co używam najczęściej i dodatkowe ikonki, ja ta od Skype'a tylko zaśmiecają mi miejsce!

Autorzy niestety nie pomyśleli o tym, że komuś ikonka w pasku zadań może przeszkadzać. Nawet Microsoft wskazuje, że umieszczenie ikonki jednocześnie w tray'u i taskbarze jest złe.

Don't display programs in the taskbar that minimize to deskbands. Minimize to a taskbar button or a deskband, but not both.
źródło: MSDN, Windows Environment: Taskbar

Próba znalezienia odpowiedzi przy pomocy Google'a i oficjalnego forum komunikatora nie przyniosła nic. Dowiedziałem się jedynie, że takie zachowanie Skype'a wkurza ludzi.

Jest jednak proste obejście, pozwalające ukryć Skype'a do tacki systemowej i usunąć z paska zadań. Klikamy prawym przyciskiem na ikonkę programu, z jump listy wybieramy trzecią opcję, "Skype", tą tuż nad pinezką. Dalej 'Właściwości', zakładka kompatybilności i ustawiamy aby program uruchamiał się w trybie kompatybilności z Windows Vista. Viola! Zamykamy nieszczęsny komunikator i po ponownym uruchomieniu ikonka białego S na niebieskim tle będzie znikać z taskbara po zamknięciu okna programu.

Za pomocą tego hacku pozbyliśmy się ikonki, ale też wyłączyliśmy jumplistę. Coś za coś. Pozostaje tylko mieć nadzieję, że osoby odpowiedzialne za interfejs programu wezmą sobie do serca krytykę użytkowników i uzupełnią nową wersję o tę funkcjonalność.

Deszyfrowanie haseł w kadu z pomocą Powershell

11 lutego 2010, 13:27:57 | Kategorie: Linux | Miniblog | tech | Techblog | windows |

Siedział sobie skrypcik u mnie na dysku, napisany pod wpływem chwilowej potrzeby odczytania własnego hasła do gg ukrytego w kadu. Pomyślałem, że może się przydać komuś:

$text="nasze zahaszowane haslo"
$len = $text.length
$newText=$text
for ($i=0 ; $i -le $len; ++$i){
$newText = ($text[$i] -Bxor $i -Bxor 1)
echo [char]$newText
}

Windows a dowiązania symboliczne

01 lutego 2010, 13:49:41 | Kategorie: Ogólne | tech | Techblog |

Nie wszyscy sobie z tego zdają sprawę, ale Windows podobnie jak te bardziej porządne systemy operacyjne obsługuje funkcjonalność dowiązania symbolicznego. Słowem wyjaśnienia dla mniej technicznych użytkowników, dowiązanie symboliczne to informacja o tym, gdzie plik się znajduje. Dowiązanie zachowuje się dokładnie tak jak plik, jednak plikiem nie jest. Dowiązanie symboliczne jest podobne do skrótu (tego z ikonką strzałeczki w rogu), tylko jest bardziej.

Windows nie wspiera w sposób klikalny dowiązań symbolicznych, a szkoda. Trzeba się przełączać do tej brzydkiej i przerażającej konsoli i pisać polecenia. Nie chcę tutaj się wdawać w teorię, czym dokładniej są dowiązania symboliczne, bo każdy kto zna Uniksa będzie się nudził czytając, a pozostali i tak nie zrozumieją.

Po co się benchmarkuje zużycie pamięci?

10 października 2009, 21:24:47 | Kategorie: tech | Techblog |

Kolega podlinkował mi dziś test zużycia pamięci przez przeglądarki. Test jest zaopatrzony w ładny wykres pokazujący która przeglądarka ile żre, porządny opis na czym test polegał itp. Tylko wnioski wyciągnięte przez autora testu jakieś ubogie.

Autor, Sam Allen, napisał program który odpali w przeglądarce 150 najpopularniejszych stron i będzie monitorował zużycie pamięci. Opisał, na czym dokładniej polegał test i przedstawił wyniki w formie ładnego wykresu.

Zastanawia mnie, jakie to ma znaczenie, ile pamięci przeglądarka zajmuje? Na maszynie z 4GiB pamięci operacyjnej (taka była maszyna testowa) kiszenie się procesu na kilkuset MiB przy kilkuset otwartych stronach jest trochę bez sensu. Ostatecznie więcej danych trzeba doczytywać z dysku, a ten ma dłuższy czas dostępu.

Linux, sygnały i spowolnienie procesu

24 września 2009, 10:16:43 | Kategorie: Linux | Ogólne | Techblog |

Przygotowywałem w ciągu ostatnich dni komputer do zainstalowania Win7 i zmiany układu partycji na dysku. Ot backup ważniejszych danych, wgranie muzyki do końca na telefon i tym podobne czynności. Backup danych windowsowych ograniczył się do pogodzenia z ich stratą - zbyt wiele tam jest śmiecia, żeby chciało mi się zgadywać które fragmenty są ważne, a które nie. Cenne dane trzymam na partycji linuksowej, dzięki trickowy z colinux który opisałem w poprzedniej notce.

O możliwość wygodnego importu ustawień użytkownika zgranych do spakowanej paczki, systemów z Redmond nie posądzam (chociaż podejrzewam, że jest narzędzie do tego).
Pod Linuksem mogę napisać: tar --lzma -cf /media/c/home.tar.lzma /home* i po iluś godzinach mieć pełny backup. Wszystko byłoby fajnie gdyby nie dwa szczegóły: musiałem w tym czasie popracować na wirtualnej maszynie, a lzma zarzyna procesor razem z ntfs-3g. To piekielnie obciąża komputer.

Google podpowiedziało obniżenie priorytetu procesów dla cpu i io, jednak nie o to chodzi. Nawet jeśli oba procesy będą chętnie pozwalać innym procesom na pracę, to laptop będzie wył wiatrakiem, cache będzie się często wymieniał, responsywność całości spadnie. Nie o to chodzi. Chcę aby te 2 procesy pracowały z mniejszym obciążeniem komputera, a nie niższym priorytetem.

Dualboot, apache i mysql

03 września 2009, 23:24:05 | Kategorie: Linux | Ogólne | Techblog |

Chyba każdy używający Linuksa na codzień ma czasem potrzebę uruchomienia evil Windowsa. Niektórzy nawet na tym evil Windowsie muszą na codzień pracować. Mój pech polega na tym, że pod Windowsem mam te bardziej zaawansowane programy, z których korzystam podczas pracy, a serwer www pod pingwinem, i pod pingwinem wykonuję większość pracy z samym kodem.

W tej notce chcę pokazać, jak rozwiązać problem z koniecznością posiadania osobno 2 kopii plików roboczych - pod win i lin. Mój opis to raczej luźna koncepcja niż dokładny tutorial. Odradzam stosowanie się do niego osobom niedoświadczonym, bo można przypadkiem uszkodzić sobie ważne dane. Tekst prezentuje ideę, na którą wpadłem podczas kombinowania z dwoma systemami i którą wdrożyłem z sukcesem. Nie oznacza to jednak, że to rozwiązanie sprawdzi się w Twoim przypadku!

Najwygodniejszym dla mnie rozwiązaniem jest emulowanie systemu z Redmond za pomocą wine. Dzięki temu można odpalić MS Office'a (tak, używam tego pod linuksem, zamiast OOo, które jest wolne i niewygodne). Można nawet odpalić FlashDevelop (choć sypie błędami, to da się w tym pisać kod) jak i Flasha (z ósemką pracowałem, ale trial się skończył i poszła w powietrze). O tym, że Photoshop śmiga pod wine, przez szacunek dla czytelników nie wspominam już nawet. :]

Innym sposobem pogodzenia tych 2 systemów jest wirtualizacja. Niestety mój komputer nie wspiera wirtualizacji sprzętowej, a VirtualBox z XP jest strasznie wolny.

Przestawienie się na wolne programy byłoby łatwiejsze, gdyby nie problem mojego Archlinuxa z javą - Netbeans robi kernel panic, a Eclipse znika w kilka chwil po załadowaniu.

Do pisania kodu najczęściej używam prostego kate i mc, jednak czasami potrzebne jest jakieś bardziej rozbudowane środowisko programistyczne. Wszystko fajnie, tylko co zrobić, gdy nasze pliki wiszą sobie na lokalnym apache'u, a dane są w lokalnym mysql'u? Możemy przenieść się na windows, a dostęp do danych zapewnić dzięki wirtualizacji.

W Sieci jest dobry tutorial[1] opisujący jak za pomocą coLinuksa podmontować pod windowsem partycję w ext, reiserfs czy xfs, jednak chcę go uzupełnić o część dotyczącą współdzielenia plików dla serwera www.

Mamy 2,5 możliwości. Pierwsza to zainstalownie potrzebnych programów pod coLinuxem, co każdy szanujący się użytkownik systemu z pingwinem w logo potrafić powinien. Tak więc pozostanie jedynie ustawić odpowiednie adresy plików i katalogów w /etc/my.conf i /etc/httpd/conf/httpd.conf. Podpowiem, że dla mysql'a ścieżka zapisana jest w zmiennej datadir. Miejsce w którym apache szuka plików określone jest w tagu Directory, chociaż do samodzielnego edytowania tego pliku warto zasięgnąć porady dokumentacji. Dzięki temu na naszym coLinuksie mamy Sambę udostępniającą dostęp do właściwych plików dla IDE, serwer www i serwer bazy danych. To rozwiązanie jest łatwe i proste, choć jego wydajność nie powala - odczyt i zapis danych będą odbywać się po sambie, przez co będą wolniejsze niż być powinny, ale coś za coś - pod linuxem zamiast samby spowalniaczem byłby ntfs-3g gdyby pliki trzymać na windowsowej partycji.

Alternatywne rozwiązanie wobec powyższego to trzymanie na windowsie serwera www i bazy danych natywnie, a nie w coLinux. To rozwiązanie też możemy rozbić na 2 warianty, bo obok Apache'a możemy wgrać jeszcze windowsowe IIS.

Przy takim podejściu spędzimy więcej czasu na konfiguracji, bo trzeba odpowiednio ustawić serwer www (dla IISa wymaga to więcej klikania niż dla Apache'a) i mysql'a. O ile konfiguracja serwera www tak, aby za DocumentRoot uznawał podpięty dysk sieciowy nie jest trudna, to odpowiednie skonfigurowanie MySQLa, by korzystał z linuksowych plików danych jest trudne. Mnie się to nie udało. Wujek Google podpowiada że teoretycznie jest to możliwe, jednak nie znalazłem opisu, jak to zrobić. Znalazłem za to potwierdzenie, że tego się zrobić nie da[2].

Jak więc sobie z tym poradzić? Odważni powinni kombinować dalej, ja natomiast bazę danych powierzę coLinuksowi i pod Linuxem w /etc/hosts ustawię dla nazwy mt3ocoLinux, takiej jak hostname mojego coLinuxa - 127.0.0.1 dzięki czemu wywołania spod Windows trafią do coLinuxa, a spod Archlinuxa - do lokalnego MySQLa. Wiem, trochę to pogmatwane :)

Tak więc, krótko podsumowując:
Na Windows:

  • Apache i/lub IIS
  • Środowisko Programistyczne
  • IE6/7/8 ?
  • Flash? Photoshop? Co komu potrzeba?
  • coLinux



Mamy zainstalowanego coLinuxa, który:

  • Samba dająca dostęp do danych spod Windows
  • natywny MySQL korzystający z bazy z Linuxa



Pod Linuxem:

  • natywny Apache
  • natywny MySQL
  • IDE, kupa przeglądarek itp

Dzięki temu możemy pracować z tymi samymi plikami spod zarówno windowsa jak i linuxa, ograniczając bloat maszyn wirtualnych.

W wersji bardziej rozbudowanej, jako wisienkę na torcie dla programistów PHPowych można dorzucić Zend Server do obu tych konfiguracji. Nie jest to głupie rozwiąznie, zwłaszcza że Zend Server CE jest dostępny bezpłatnie, przy wsparciu przez community.

Ps. To jest moja pierwsza notka, więc proszę o wyrozumiałość :-)

Linki: [1] Jak uzyskać dostęp do partycji xfs/reiserfs/ext pod windowsem dzięki colinux
http://jakilinux.org/aplikacje/konsola/ext3-reiserfs-i-xfs-w-windows-dzieki-colinux/ http://polishlinux.org/linux/ext3-reiserfs-xfs-in-windows-thanks-to-colinux/

[2] Dyskusja na forum MySQLa dotycząca utrzymywnia jednej kopii plików dla 2 wersji MySQLa, jednej linuksowej i jednej windowsowej
http://forums.mysql.com/read.php?11,239124,239124#msg-239124