Charles Simonyi stworzył dawno temu (w skali czasu istnienia C/C++) pewne standardy odnośnie nazewnictwa zmiennych i funkcji - zwane notacją węgierską. Tak, tą samą notacją, na którą narzekają tysiące programistów, mających do czynienia z WinAPI czy innymi wynalazkami Microsoftu. Co ciekawe - akurat w WinAPI wspomniana notacja jest używana niepoprawnie. Istnieje możliwość takiego wykorzystania przedrostków, żeby nie przyprawiały o ból głowy - również na innych platformach.
Pokazywanie postów oznaczonych etykietą porady. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą porady. Pokaż wszystkie posty
2011-02-01
2011-01-10
Są błędy, których nie należy poprawiać
There are routes which must not be followed,
Armies which must not me attacked,
Towns which must not be desieged,
Positions which must not be contested.
Sun Tzu - The Art of War / Sabaton - Cliffs of Gallipoli
Armies which must not me attacked,
Towns which must not be desieged,
Positions which must not be contested.
Sun Tzu - The Art of War / Sabaton - Cliffs of Gallipoli
2010-12-20
Cofnięcie uprawnień administracyjnych
Od czasu Visty istnieje zjawisko zwane UAC. Powoduje ono, przy odrobinie szczęścia, podniesienie uprawnień aplikacji do poziomu administratora po akceptacji użytkownika, w sposób całkowicie przezroczysty dla systemu. Przynajmniej tak być powinno, jednak przezroczystość ta jest fikcyjna. Weźmy dla przykładu aplikację uruchamianą z prawami admina, która potrzebuje poprzez COM (dokładniej: API oparte na COM) skomunikować się z aplikacją działającą w trybie użytkownika. Nie działa. Są też różne inne przypadki (File manager? Installer?) wymagające łatwego uruchomienia aplikacji w trybie użytkownika. Jak to zrobić?
2010-12-19
Pesymizm wczesnoprojektowy
Zaczynając nowy projekt nadzieje i oczekiwania są wielkie - dzieło będzie wspaniałe, cudowne, wielkie, idealne i inne superlatywy. Jaka jest rzeczywistość - wie każdy, kto ukończył (lub chociaż próbował) przynajmniej jeden w miarę kompletny projekt. Zwykle po czymś takim powstaje post mortem projektu, opisujące co wyszło, co nie wyszło i starające się dociec dlaczego nie wyszło. Przy kolejnym projekcie postanowiłem odwrócić PERL-kota ogonem - zacząć od wstępnego szkicu prawdopodobonego post mortem (ułożonego na bazie moich doświadczeń przy poprzednich projektach).
2010-10-14
emit Alert(StackOverflow);
Qt jest dość popularnym API do obsługi okien i nie tylko. Warto wspomnieć, że na jego bazie powstał interfejs graficzny KDE, mnóstwo większych i mniejszych aplikacji jak Skype, Gadu-Gadu, Google Earth, Kate oraz reszta aplikacji z pakietu KDE. API jest przemyślane, wieloplatformowe, kod przenosi się łatwo, ponadto w samym Qt wmontowano chyba wszystko, z czego typowy developer korzysta tworząc natywną aplikację. Jako, że każda platforma i każde API ma swoje niuanse, dzisiaj o przepełnianiu stosu za pomocą sygnałów i slotów - właśnie w Qt.
2010-09-28
O rozwiązywaniu problemów - jak uczyć się programować
Mówi się, że informatyka jest nauką o rozwiązywaniu problemów. Po przeczytaniu kilku różnych wpisów na blogach dotyczących studiowania informatyki (zwłaszcza tekstu Gynvaela) postanowiłem trochę napisać o samodzielnej nauce programowania. Znacznie się różni od metod przyjętych na uczelniach, sądzę, że może być przydatna zwłaszcza na studentów. Tego sposobu nauki nie poznacie w szkole (przynajmniej polskiej), będziecie natomiast musieli przyswoić go w pracy.
2010-09-22
Aplikacja sterowana zewnętrznie
Różne są sposoby programowania asynchronicznego. Stosuje się wątki, przetwarzanie porcjami, delegację do osobnych procesów i jeszcze kilka innych technik. Zakładając, że w danym przypadku wydzielamy pewną operację asynchroniczną do osobnego procesu (załóżmy, niech to będzie kompresja), należy mieć nad tym zadaniem pewną kontrolę. Jak można to zrobić?
2010-04-14
MVC w obsłudze aktorów (obiektów) gry
Projektując obsługę agentów gry na potrzeby SpaceFight, nieświadomie zaaplikowałem wzorzec MVC (Model-View-Controller) - rozdzielenie aktora na model (czyli obiekt z danymi), widok (encja silnika graficznego/dźwiękowego) i kontroler. Podejście takie skutkuje sporą elastycznością w zakresie działania AI, stąd postaram się klarownie przedstawić koncepcję realizacji MVC w grze.
2010-04-01
Własny format pliku
Układając własne formaty plików zwracam uwagę przede wszystkim na łatwość parsowania i zapisu pliku. Dokładnie w tej kolejności - plik ma przede wszystkim być łatwy w parsowaniu, dopiero potem łatwy w zapisie. Zależność jest oczywista: w większości przypadów plik jest zapisywany znacznie rzadziej niż wczytywany, poza tym prosty w napisaniu, poprawny parser ułatwia znalezienie błędów w kodzie zapisującym (w drugą stronę jest nieco gorzej). Stąd zmontowałem swego rodzaju prosty szablon dla plików binarnych.
2010-03-19
Wirtualny System Plików
Jako, że piszę silnik połączony z grą, niemal koniecznością stało się użycie jakiegoś VFS. "Gotowca" nie chciałem - większość operuje na ANSI nazwach plików, do tego różnie sobie radzą z przezroczystością systemu plików (archiwa, rzeczywisty FS, priorytety itp.). Stąd powstało moje własne rozwiązanie - system SFFS z obsługą (własnych) archiwów SFA.
2010-03-08
Reorganizacja
Jako, że niedawno panował tu spory bałagan i nadmiar tekstu, postanowiłem zreorganizować wyświetlanie bloga. Teraz w każdym poście (nie edytowałem tylko najstarszych) pojawia się opcja "czytaj dalej" - łatwiej przeglądać nagłówki, niż całe posty żeby wybrać interesujący temat. Żeby nie było, że piszę o blogu ( ;-) ), będzie ogólnie o różnie pojętej reorganizacji.
2010-02-22
Bitmapy dopasowane do rozdzielczości
Ogólnym zaleceniem w programowaniu grafiki 2D jest stosowanie bitmap dopasowanych do rozdzielczości ekranu/wielkości okna. Co, jak się okazuje, nie zawsze jest proste i bezproblemowe. Zakładając, że nasza gra ma za zadanie wyświetlać pełnoekranowe bitmapy, które docelowo wyglądać mają jak najładniej, a do tego szybko się ładować, wypadałoby mieć przejrzyste, ładne rozwiązanie.
2010-02-19
CleanupStack i ramkowanie
W przypadku alokacji i dealokacji zasobów istotna często jest kolejność. Przykładowo: tekstury Direct3D zależne są od istnienia urządzenia, natomiast samo urządzenie od obiektu Direct3D. Czasem problemem jest zwalnianie zasobów w odpowiedni sposób, zgodnie z niezbędną kolejnością. Wzorując się na Symbianowym pomyśle CleanupStacka postanowiłem przygotować opracowanie tego tematu.
2009-09-03
Statsy
Lubimy liczby. Statystyki, liczniki, wskaźniki. Użyte do mierzenia pracy pokazują nam, ile obiektywnie zrobiliśmy – przynajmniej w jakimś aspekcie. Wśród programistów popularny jest jeden rodzaj licznika: licznik linii kodu w projekcie.
2009-07-29
Runtime property
Patrząc na dowolną bazę danych ustawień (np. rejestr Windows) mamy przed oczami następujący obraz: aplikacja wywołuje funkcję i zmienia dane, gdy dane gdzieś są potrzebne, są odczytywane i używane. Niby wszystko ładnie, co jednak, gdy potrzebujemy użyć zmienionych danych natychmiast po ich użyciu? Albo gdy chcemy zapewnić dostęp do konkretnych danych tylko i wyłącznie, gdy są w użyciu (np. pobieranie aktualnej rozdzielczości, pozycji okna)? Zwykle w takim przypadku stosuje się albo ręczne powiadomienia, albo odpytania. Jedno i drugie z elegancją wspólnego ma tyle, co garbage collector z C. Ostatnio, pracując nad własnym systemem opcji, znalazłem rozwiązanie ładniejsze i zdecydowanie sprawniejsze.
2009-06-22
Mobile Web - DO-s i DON'T-s
Pisanie aplikacji na smartphone to sprawa niełatwa. Wbrew pozorom, napisanie strony internetowej wyglądającej dobrze i na komputerze, i na smartphone - to sprawa jeszcze trudniejsza. Jest kilka ograniczeń w używaniu telefonów komórkowych, które odbijają się też w webdev. Na potrzeby tego posta zakładam, że nie robimy osobnej, mobilnej wersji, a tylko dostosowujemy główną do przeglądania z poziomu telefonu.
Stąd wzięło się 10 przykazań: trzy nakazy i siedem zakazów, ku chwale developera i wygodnemu życiu użytkowników zmobilizowanych ;-)
Stąd wzięło się 10 przykazań: trzy nakazy i siedem zakazów, ku chwale developera i wygodnemu życiu użytkowników zmobilizowanych ;-)
Subskrybuj:
Posty (Atom)