February 2009

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

# Dobry hex edytor

20:47
Fri
27
Feb 2009

W życiu programisty bywa tak, że czasem trzeba obejrzeć albo zmodyfikować plik binarny. Potrzebny jest do tego specjalny edytor, który pokazuje bajty jako liczby szesnastkowe (hex). Pytanie tylko - który jest dobry? Chodzi rzecz jasna o jakiś program okienkowy dla Windows, najlepiej darmowy.

Z tego co widzę, dobrego a darmowego niestety nie ma. Dotychczas byłem zwolennikiem starego dobrego Hex Workshop (jest Shareware).

Ostatnio kolega z pracy (pozdro Bartek!) polecił mi Hex Editor Neo. Ma wersję darmową, ale niestety ona jest tak okrojona, że na niewiele się przyda. Ale już pełna wersja (można ją testować przez 14 dni) jest "wypasiona" i przewyższa funkcjonalnością Hex Workshop. W porównaniu z nim brakuje tylko zamalowania zaznaczonego fragmentu pliku na wybrany kolor.

Przy okazji ciekawostka: Hex Editor Neo pokazuje w swoim okienku taką oto informację jak na obrazku. Teraz możemy mówić: "pisząc optymalny kod pomagasz chronić środowisko" :D

A może znacie jakiś inny dobry hex edytor?

Comments | #tools #humor Share

# Nowy artykuł: Własny VFS - wtyczka do Total Commandera

21:38
Tue
24
Feb 2009

Skończyłem właśnie pisać nowy artykuł. Zebrałem w nim swoje doświadczenia z pisania wtyczki do Total Commandera do obsługi własnego formatu VFS. Zainteresowanych zapraszam do lektury: Własny VFS - wtyczka do Total Commandera.

Comments | #libraries #tools #productions Share

# Znajdowanie podobnych stringów

08:34
Sun
22
Feb 2009

Kiedy wpisujemy w Google jakieś słowo, które jest ewidentną pomyłką, wyszukiwarka sugeruje jego poprawną wersję (np. Programmowanie). Jak zrobić coś takiego i ogólnie jak wyszukiwać w bazie danych podobne łańcuchy, by uodpornić pisaną stronę WWW na drobne pomyłki we wprowadzonym zapytaniu albo wyświetlać sugestię poprawnej pisowni? Niedawno kolega, którego poznałem przy piwie, zdradził mi kilka ciekawych pomysłów.

Po pierwsze, łańcuch trzeba przeliczyć na Hash - inny łańcuch, który dopiero jest wyszukiwany w bazie danych. Algorytm na ten Hash może wyglądać różnie, np.:

Taki Hash wyszukiwany jest w bazie danych, przy czym z bazy pobierany jest nie jeden pasujący rekord, ale też kilka sąsiednich rekordów (poprzednich i następnych wg kolejności alfabetycznej).

Następnie każdy z wyników zwróconych z bazy danych jest porównywany z hashem słowa wejściowego algorytmem Levenshtein Distance (który zwraca podobieństwo dwóch łańcuchów, tak jakby odległość między nimi). Jego wynik mnożony jest przez częstość występowania danego słowa wyszukanego w bazie (czyli np. po prostu ilość wystąpień w skatalogowanym tekście). Np. Punkty = Częstość_słowa / Levenshtein_distance.

Na koniec wybierane jest to słowo lub słowa spośród wyszukanych z bazy danych, które mają największy ten współczynnik Punkty.

Comments | #webdev #algorithms Share

# Wycinanie komentarzy ze skompilowanego shadera

20:06
Thu
19
Feb 2009

Shader Direct3D skompilowany do kodu binarnego (np. funkcją D3DXCompileShaderFromFile) zawiera w sobie nie tylko instrukcje asemblerowe, ale i dodatkowe informacje - komentarze. Te komentarze nie są bezużyteczne. Tam zapisana jest np. tablica stałych, którą można odczytać funkcją D3DXGetShaderConstantTable. Jednak jeśli ona nie jest potrzebna, te komentarze można z kodu wyciąć i wtedy shader staje się dużo mniejszy.

Jak to zrobić? Choć trzeba grzebać wprost w pamięci, to nie jest trudne. Konkretny algorytm opisuje na swoim blogu Jesus de Santos Garcia we wpisie Stripping comments from Shader bytecodes. Ja tutaj streszczę go krótko swoimi słowami.

Format binarny skompilowanych shaderów D3D jest udokumentowany w MSDN, na stronie Direct3D Shader Codes. Składa się z sekwencji 32-bitowych tokenów. Ostatni z nich ma wartość 0x0000FFFF i oznacza koniec kodu. Komentarz natomiast rozpoczyna się tokenem 0x####FFFE, gdzie "####" (starsze dwa bajty) to liczba następujących dalej 32-bitowych wartości stanowiących treść komentarza. Takie komentarze można po prostu wyciąć z kodu shadera i gotowe :)

Comments | #directx #rendering Share

# Konferencja IGK 2009

20:39
Tue
17
Feb 2009

20-22 marca 2009 w Akademii Podlaskiej w Siedlcach odbędzie się VI Ogólnopolska Konferencja Inżynierii Gier Komputerowych (zobacz też: wątek na forum.gamedev.pl). Już niedużo czasu zostało na rejestrację. Zachęcam do udziału wszystkich zainteresowanych tworzeniem gier. Zapewne jak co roku będą ciekawe referaty, pełen emocji konkurs Compo oraz niezapomniane wieczory w towarzystwie najfajniejszych ludzi z Warsztatu.

Ja oczywiście jak zawsze się tam zjawię. W tym roku nie przygotowuję żadnego referatu, ale za to po raz drugi poprowadzę konkurs - tym razem już oficjalnie, według ustaleń z organizatorami. Muszę tylko jeszcze ulepszyć potrzebny do tego program i ułożyć nowe pytania. Kto chciałby w tym pomóc, piszcie do mnie na email :)

Comments | #igk #events #warsztat Share

# Algorytm na defragmentację dużego pliku

12:12
Sun
15
Feb 2009

SceNtriC na swoim blogu często pisze długie notki, w których opisuje swoje algorytmy, więc ja nie będę gorszy i dzisiaj też tak zrobię :) Problem, który rozwiązywałem niedawno, wyglądał tak: Mamy duży plik - tak duży, że nie chcemy wczytywać go całego do pamięci. W pliku są bloki z danymi, a między nimi dziury (na rysunku zakreskowane). Zadaniem jest tak "zsunąć" te dane, żeby dziur nie było.

Defragmentacja bloków danych

Read full entry > | Comments | #algorithms Share

# Sortowanie naturalne

21:38
Thu
12
Feb 2009

Ciekawym algorytmem jest sortowanie łańcuchów w porządku naturalnym. Chodzi o to, żeby liczby traktowane były jako liczby i sortowały się według wartości. Na przykład nazwy plików posortowane normalnie alfabetycznie (leksykonograficznie) będą w takiej kolejności:

Plik.txt
Plik1.txt
Plik10.txt
Plik2.txt
Plik24.txt
Plik3.txt

Natomiast posortowane w porządku naturalnym będą w kolejności bardziej przez użytkownika pożądanej:

Plik.txt
Plik1.txt
Plik2.txt
Plik3.txt
Plik10.txt
Plik24.txt

Oczywiście każdy informatyk wie, że należałoby raczej po prostu dopełniać te liczby zerami (np. Plik01.txt), ale mimo wszystko ten algorytm jest dobry do sortowania nazw plików, serwerów itp.

Jak to działa? Całkiem prosto. Mówiąc ogólnie, trzeba porównywać kolejne znaki dwóch łańcuchów, ale kiedy napotka się cyfry, wtedy trzeba rozpatrzyć je jako całe liczby i porównać ich wartości. Implementację w C++ można znaleźć w mojej bibliotece CommonLib (zobacz pliki Base.hpp i Base.cpp, klasa StringNaturalCompare). W PHP jest standardowo taka funkcja - nazwa się strnatcmp. Opis algorytmu w Internecie można znaleźć m.in. tu: Natural Order String Comparison.

Comments | #algorithms Share

# O wyższości wyszukiwania nad wybieraniem

21:25
Tue
10
Feb 2009

Mam wrażenie, że w rozwoju interfejsów użytkownika za szczyt wygody dawniej uważane było pokazanie listy jakiś elementów do wybrania przez kliknięcie myszką. Natomiast teraz jasne staje się, że lepiej pozwolić użytkownikowi zacząć wpisywać jakiś wyraz do wyszukania i od razu pokazywać listę pasujących wyników. Taką możliwość mamy np. w:

Comments | #philosophy #gui Share

# Dobry zakup: Pendrive Kingston DataTraveler 150

23:51
Thu
05
Feb 2009

Podobno wielkim wyróżnieniem dla firmy jest, kiedy jej marka staje się nieoficjalną nazwą wszystkich podobnych produktów. Tak było z określeniem "walkman" na przenośny magnetofon czy "adidasy" na wszystkie buty sportowe, tak jest też z określeniem "pendrive" na przenośne pamięci flash.

Taki właśnie pendrive kupiłem sobie ostatnio i gorąco polecam. To Kingston DataTraveler 150. Dałem za niego na Allegro ok. 180 zł. Jego pojemność to 32 GB. Ponadto jest bardzo szybki - jego prędkość to (samodzielnie zmierzona, a nie deklarowana): odczyt 30 MB/s, zapis 15 MB/s. Dla porównania, mój poprzedni Kingston 2 GB miał odczyt 10 MB/s. Poza tym bardzo dobrym rozwiązaniem jest, że na czas podłączenia USB skuwkę można zatknąć od drugiej strony zamiast kłaść ją gdzieś na biurku, gdzie łatwo może się zgubić.

Pendrive Kingston DataTraveler 150

Comments | #hardware #shopping Share

# Pliki INI w WinAPI

00:04
Tue
03
Feb 2009

Stare dobre pliki INI to format tekstowy do przechowywania konfiguracji. Na przykład:

[Display]
Width=1280
Height=800
FullScreen=true

Czasami ten format może się przydać, a chociaż nie jest skomplikowany, to nie każdy ma ochotę pisać do niego własny parser. Dlatego warto wiedzieć, że WinAPI zawiera proste i wygodne funkcje do obsługi plików INI. Znajdują się na dole listy Registry Functions. Można się domyślać, że z każdym wywołaniem plik jest od nowa otwierany i wczytywany, więc te funkcje nie grzeszą szybkością, ale do prostych zastosowań będą OK. Na przykład wczytanie wartości:

char Buf[256];
GetPrivateProfileString(
  "Display", // Nazwa sekcji
  "FullScreen", // Nazwa klucza
  "false", // Wartość domyślna
  Buf, _countof(Buf), // Bufor wyjściowy
  FileName); // Nazwa pliku INI ze ścieżką

Comments | #winapi Share

STAT NO AD
[Stat] [STAT NO AD] [Download] [Dropbox] [pub] [Mirror]
Copyright © 2004-2017