Friday, November 12, 2010

Against a wall... C#

Today I have realized that my knowledge about C++ and C# is almost like nothing. That counts for JAVA most probably... I've been dealing with different assemblers, shell scripts, perl scripts, a lot of PL/SQL, soma JAVA. And I have worked with ANSI C, C++, C#. And many more.
What is wrong about my skills? I have tried to use DisassembleShader code from the DIrectX. I found that there is ShaderLoader but... no disassembler ?!?
I was able to call the method directly using ImportDll, but then I am not able to work with all the fancy things that are marshaling, reflections, interoperability, unmanaged code, etc.
What I have achieved (maybe someone would find it useful) is:

[DllImport("D3dx9_24.dll" , SetLastError = true)]
// This is probably wrong to use the specific DLL instead of ex. COM GUID
private static unsafe extern IntPtr D3DXDisassembleShader(
[In]void* pShader,
[In]bool EnableColorCode,
[In]string pComments,
[return: MarshalAs(UnmanagedType.Interface)]
[Out]void* ppDisassembly
);

Now the tricky parts.
This method returns HRESULT (where C# equivalent can be IntPtr). The returned value is D3D_OK if everything went OK. D3D_OK maps to S_OK which maps to 0. Thus the expected returned value is 0.
More important piece is the ppDisassembly. This is an UnmanagedType.Interface which is in fact ID3DXBuffer (http://msdn.microsoft.com/en-us/library/bb205753(v=VS.85).aspx). It inherits from IUnknown and adds its own methods there. This is something that I don't know how to access. I have searched over the internet and this knowledge is beyond my current limits.
I think that I should use P/Invoke here, define an interface, access it. But... my knowledge is currently not enough to do this... :(

Monday, September 27, 2010

Oblivion issues

Again I have experienced some issues with my Oblivion...
  1. All the dead bodies become green. Or rather all the actors became green when hit. Reason: I was missing "MMM.bsa" (AKA "Mart's Monster Mod.bsa") file. After downloading I had to ad it to the bsa list in my oblivion.ini and then it worked.
  2. After start when I enter to the chamber with rats for the first time I don't see "Rusty Iron Bow" mesh. It is referenced to "weapons\MMMKOLrusty\bowrusty.nif" Cause: I've forgotten about MMM core.

Tuesday, September 14, 2010

Deadloop projektu, troszkę (samo)krytyki

Obserwuję od jakiegoś czasu w pracy pętlę sprzężenia zwrotnego. Trafiłem do projektu, który z różnych powodów jest opóźniony (w pół roku siłą 5 programistów wykonać 3-letnią pracę 10-ciu...). W czym problem?
Projekt się spóźnia - a przez to managerowie się denerwują i zwołują co chwila konferencje oraz wysyłają masę poczty aby być na bieżąco. A tym samym zajmują czas programistom którzy mają go coraz mniej, co z kolei zwiększa ilość konferencji i poczty...
Uważam, że z dobrą i doświadczoną 5-osobową ekipą, dobrze ustalonymi wymaganiami i architekturą, projekt można by spokojnie skończyć w rok - gdyby nie ta paskudna pętla i czynniki środowiskowe.

Na technikach agila nie znam się, lecz już na pierwszy rzut oka dostrzegam liczne zalety. Krótki okres między kolejnymi wersjami produktu, niezbyt liczna ekipa, komunikacja na bieżąco - to dużo pracy ale także lepsze jej warunki. Takie podejście jednak nie jest możliwe w mojej firmie, która kiedyś uchodziła za wzorzec.

Czego mi brakuje w moim obecnym projekcie:
  • Dobrego systemu kontroli kodu / wymagań / zadań / dokumentacji - np. cvs/svn/git + mantis/itp. + google wave/gmail
  • Sprawnego systemu kompilacji kodu (budowania) - np. ant / cmake
  • Jednolitych procesów - czyli czegoś, co "nie opisuje jak chcielibyśmy aby cykl życia projektu mógłby wyglądać" a zamiast tego ukierunkowuje tenże cykl
  • Automatycznych testów jednostkowych - np. JUnit
  • Środowiska ułatwiającego programowanie i konserwację (AKA development i troubleshooting) - np. JBoss, Log4J, solidny szkielet (AKA framework)
  • Możliwość dostosowania procesów i używanych technologii do tego, nad czym pracujemy - np. parsować XML z poziomu ksh/awk to na starcie pomyłka
  • Kontrola procesu która zamiast obciążać pracowników pomaga im - ponieważ raportowanie co godzinę mojego statusu w 15 różnych aplikacjach oraz na dodatkowych konferencjach zabiera masę czasu
  • Współpracy z innymi członkami grupy tak, aby nasza wiedza częściowo się pokrywała - a nie zarzucenie nas mnogością zadań i utrudnianie współpracy

Jakie problemy z mojej (i ogólnie programistów) strony dostrzegam:
  • Projekt został spalony już na starcie, zanim jeszcze rozpoczęliśmy nad nim pracę - powinniśmy to zakwestionować na starcie
  • Zgodziliśmy się na narzucenie technologii bez uważnego przestudiowania konsekwencji
  • Projekt zaczynał z niedoświadczoną ekipą i nie zadbaliśmy o odpowiednie wprowadzenie wszystkich jej członków (udało się to zaledwie z dwójką)
  • "Młodzi" dostali zbyt dużą kontrolę co doprowadziło do zrezygnowania z tzw. "code review"
  • Zgodziliśmy się (my, członkowie z doświadczeniem) na brak tzw. "code review"
  • Nie zablokowaliśmy projektu na starcie widząc, żę wymagania są bardzo niekompletne
  • Zgodziliśmy się pracować z narzuconymi narzędziami, które to pamiętają czasy Gierka - choć tutaj nie mieliśmy wiele do gadania
  • Nie uczestniczyliśmy w początkowych fazach tworzenia projektu - i tutaj także było to poza naszą kontrolą - co w rezultacie doprowadziło do niedoestymowania kosztów, wybrania niewłaściwych technologii i mylnego przeświadczenia kadry kierowniczej że możliwym jest "reuse" istniejącego kodu
  • To, że ktoś stworzył taki paskudny kod jaki odziedziczyliśmy i że otrzymał tak odpowiedzialne zadanie jest także tragiczne - ale to również problem częściowo leżący po stronie programistów

Ech... praca w archaicznej korporacji to nie jest to co tygryski mogłyby lubić

Sunday, August 15, 2010

Android 1.6 vs Symbian S60 vs Windows CE 5

Miałem okazję korzystać z kilku urządzeń mobilnych z różnymi systemami mobilnymi. Poniżej wymienię ich zalety oraz wady (te, które ja dostrzegam). Porównanie nawiązuje do S60 (Symbian S60 v2 i v6), A1.6 (Google Android 1.6) i W5 (Windows CE 5.0).

Czytelność.
S60 wygrywa - chociaż mi ten interfejs nie odpowiada - pasuje on przeciętnemu użytkownikowi. Podstawowe funkcje są dobrze ulokowane a elementy dobrze rozmieszczone.
A1.6 jest ciekawy dla programisty - wszystko jest tam, gdzie powinno być. Szukam opcji i prawie zawsze znajduję ją tam, gdzie się jej spodziewam. Niestety nie każdy użytkownik jest programistą.
W5 jest dość toporny w użytkowaniu - ale posiada swoje zalety.

Wydajność.
A1.6 i S60 są dość szybkie - nie odczułem wyraźnej różnicy (dla mnie obydwa są równie szybkie). Warto zauważyć, że niektóre telefony oparte na Symbianie posiadają 2-rdzeniowy procesor - jeden z rdzeni jest zarezerwowany dla systemu.
W5 przegrywa jeśli chodzi o wydajność interfejsu.

Bezpieczeństwo.
S60 to już dojrzała platforma. Uważam ją za stosunkowo bezpieczną i stabilną (choć to były główne jej bolączki w dawnych czasach). Jednak kupując telefon do biura kupiłbym model pozbawiony jakichkolwiek bajerów typu kolorowy wyświetlacz, możliwość instalowania aplikacji, itp.
Android ma szansę zaistnieć jako platforma stabilna i bezpieczna. Niestety do bezpieczeństwa jej daleko. Instalując aplikację tracimy nad nią kontrolę. Może być ona czymkolwiek - wirusem, trojanem, czymś co wysyła bez naszej wiedzy płatne SMSy. Wygrywa z W5 ale przegrywa z S60.
W5 to brak bezpieczeństwa.

Stabilność.
A1.6 o dziwo jest systemem młodym lecz stabilnym. Opiera się na linuksie - zapewne stąd bierze się owa stabilność.
S60 to platforma która od zawsze była niestabilna. Kilka lat temu jednak uznałem ją za stabilną. Obecnie znów obserwuję zmianę - Nokia kładzie chyba nacisk na nowe funkcjonalności a nie stabilność.
W5... wystąpił nieoczekiwany wyjątek... Nie polecam.

Dostępność aplikacji.
Android przedstawia się najlepiej jako zabawka dla gadżeciaża.
Windows jest do OK.
S60 jest do zaakceptowania.

Bolączki.
W5: niestabilny, niebezpieczny, powolny, nieczytelny.
S60: Konieczność podpisywania aplikacji i słaba ich dostępność, kiepska stabilność.
A1.6: Bezpieczeństwo, interfejs nieprzystosowany do przeciętnego użytkownika.

Zalety:
A1.6: Dużo aplikacji, stabilność (jądro linuksa).
S60: Dojrzała platforma, trochę aplikacji oraz fakt, że zazwyczaj te telefony mają dobrze zarządzanie energią.
W5: To, że obsługuje autpomapę? A może cena 3$ od urządzenia? Na prawdę - nic mi do głowy nie przychodzi?

Tuesday, July 27, 2010

Nokia 5230 - wielki zawód

Dostałem dzisiaj Nokię 5230. Niby fajna ale... hmmm...
Do czego ma służyć telefon?
  • Do szpanowania/zabawy/itp. -> wybierz iPhone
  • Do dzwonienia - wybierz telefon
A Nokia 5230?
Ma dotykowy ekran. Ma duży ekran. Ma wbudowaną nawigację. Jest telefonem. Ma sybmiana. Obsługuje sieci 3G i ma Bluetooth'a. Ma blokadę klawiatury na fajny suwaczek. I to tyle. Koniec, finito.
A jakie są z tym telefonem problemy?
  1. Brak klawiatury doskwiera. Klawiatura ekranowa jest kiepska. Brak rysika boli.
  2. Nawigacja jest żałosna - już wolę kupić Lark'a za 150 PLN.
  3. Nawigacja wymaga map - a to kosztuje. Mapy są da friko ale transfer danych kosztuje. Oczywiście ściągają się z sieci - mało kto ściągnie je na komputerze. Zresztą ściąganie wymaga podłączenia kabelka USB lub połączenia Bluetooth - a w moim zestawie nie ma kabelka a BT będzie strasznie wolny.
  4. Telefon ma od razu masę dołączonych pijawek śliniących się na portfel. Muzodajnia, ściąganie map OVI, sprawdzanie poczty i wiele wiele innych. I wcale niedużo potrzeba aby stracić kasę - dotkniesz ekran i już się telefon łączy. Oczywiście marketingowiec powie "ma masę zajefajnych funkcji takich jak portki społecznościowe, fejs-zbuka, nawigację samojeżdżącą, itp.".
  5. Brak WiFi - jeśli bym używał Facebook, youtube i inych to tylko po WiFi lub w krytycznej sytuacji po 3G.
  6. Moduł GPS jest cienki i nie ma możliwości podłączenia zewnętrznej anteny.
  7. Brak fotoczujnika sprawia, że podświetlenie ekranu jest zawsze niewłaściwe. Zaraz... czujnik jest tylko że to zaledwie czujnik zbliżeniowy wyłączający ekran podczas rozmowy.
  8. Czujnik wychylny ma obracać ekran gdy obrócimy telefon - ale tylko 2 kąty są dozwolone i czujnik często wariuje (np. przy lekkim potrząśnięciu).
  9. Brak możliwości wywołania/pisania funkcji na głównym ekranie.
  10. Masa nieużytecznych skrótów (youtube, sklep nokia, sklep OVI i inne) czatujących na moje pieniądze.
No dobrze... na koniec kilka słów pociechy. Jest to TANI telefon z dużym ekranem dotykowym i wbudowaną kiepską nawigacją, czujnikiem wychylnym, słabą kamerką do robienia zdjęć/filmów oraz Symbianem. Jakość wykonania sprzętu nie budzi moich zastrzeżeń.

Wednesday, June 23, 2010

Komórkowy SPAM

Witam wszystkich, którzy tutaj trafili - jeśli tutaj jesteś to najprawdopodobniej padłeś ofiarą próby oszustwa, naciągactwa lub czegoś podobnego.
W dniu dzisiejszym otrzymałem SMS od numeru 6654 o treści "Zablokowane wiadomosci! Masz nieodebrana wiadomosc glosowa! Aby dowiedziec sie wiecej jak ja odsluchac wyslij SMS WALL ODBIERZ na numer 92550 (30,5 pln)".
Po spojrzeniu na dokument http://www.playmobile.pl/resources/pdf/Numery_Specjalne.pdf stwierdziłem, że numer 6654 nie jest tam zarejestrowany natomiast numer 92550 już jest i to na firmę Teleaudio Sp. z o.o.
W związku z powyższym skontaktowałem się z BOK (biurem obsługi klienta) swojego operatora i zgłosiłem fakt otrzymywania niechcianej informacji handlowej o charakterze naciągactwa drogą elektroniczną.
Zostałem poinformowany, że sprawa zostanie przekazana prokuraturze.
Artykuł prawny, który chyba jest z tym skojarzony: ustawa z dnia 18 lipca 2002r. o świadczeniu usług drogą elektroniczną (Opracowano na podstawie: Dz.U. z 2002 r. Nr 144, poz. 1204, z 2004 r. Nr 96, poz. 959, Nr 173, poz. 1808, z 2007 r. Nr 50, poz. 331, z 2008 r. Nr 171, poz. 1056, Nr 216, poz. 1371, z 2009 r. Nr 201, poz. 1540.).

Jeśli otrzymujesz podobny SPAM na komórkę to:
1. Zgłoś się do operatora aby nie otrzymywać podobnych wiadomości - prawdopodobnie w Twojej umowie znajduje się zgoda na otrzymywanie takowych lecz przysługuje Ci prawo do zrezygnowania ze SPAMu.
2. Zweryfikuj od kogo jest ten SPAM (link powyżej) i, skoro już zrezygnowałeś/zrezygnowałaś z otrzymywania w pierwszym punkcie, wyślij odpowiedniego maila na adres kontaktowy podany w tymże dokumencie. Uważaj na słowa - Twój mail może również zostać wykorzystany jako dowód na to, że to Ty coś nie tak robisz (np. straszysz "uczciwego" przedsiębiorcę typu Teleaudio Sp. z o.o.).
3. Zgłoś nadużycie do swojego operatora - oni powinni to skierować do prokuratury.
Powodzenia