2017-11-20 21:52:26
Nie potrzebujesz numeru wersji Windows 10

Przez lata do sprawdzenia wersji systemu używało się funkcji GetVersion. Wraz z WinNT doszła funkcja GetVersionEx którą dodatkowo w pewnym momencie rozszerzono. Wraz z Windows 8.1, wartości zwracane przez GetVersionEx zmieniają się w zależności od manifestu w binarce (hurr durr manifest-driven backward compatibility). Przypuszczalnie także wtedy dodano szereg funkcji pomocniczych, w rodzaju IsWindows10OrGreater. Tylko co z tego, skoro w dziale Targeting your application for Windows piszą prosto z mostu:

In Windows 8.1 and Windows 10, the GetVersion and GetVersionEx functions have been deprecated. In Windows 10, the VerifyVersionInfo function has also been deprecated.

Krótko mówiąc, przez paru kretynów nie potrafiących poprawnie pobrać i porównać wersji/cech systemu, nie ma utrzymywanej, jednoznacznej metody pobrania numeru wersji systemu, nawet jeśli tylko do wyświetlenia na ekranie... Absurd.

2017-09-01 02:07:37
BPFStat 1.5 - generator histogramów

Kiedyś napisałem program do generowania histogramów plików. Co i po co - można przeczytać w podlinkowanym wpisie, dzisiaj natomiast o tym, co nowego w wersji 1.5!

2017-03-21 18:00:44
Ceph Days Warszawa - 25 kwietnia 2017 (Ceph Day Warsaw)

Nareszcie - po raz pierwszy w Polsce - dzień Cepha odbędzie się 25 kwietnia w Warszawie! Na terenie Międzynarodowego Instytutu Biologii Molekularnej i Komórkowej (Księcia Trojdena 4) organizowany jest całodniowy event poświęcony Cephowi. Na razie wielu szczegółów nie zdradzam (a te zdradzone są i/lub będą umieszczone tutaj - razem z linkami do darmowej rejestracji), ale na pewno będzie można posłuchać jak wygląda praca z i nad Cephem, powymieniać się doświadczeniami z innymi użytkownikami oraz poznać ludzi którzy siedzą w cyberkałamarnicach po uszy osobiście. Ja na pewno będę i wszystkich fanów Cepha, Linuksa i technologii storage'owych gorąco zapraszam w imieniu swoim, polskiego oddziału OVH oraz firmy Red Hat.

Do zobaczenia w Warszawie!

2016-10-13 20:26:00
TAcroPDF nie wyświetla dokumentu za pierwszym razem

Jeśli ktoś używa kontrolki TAcroPDF (jako otoczki do oryginalnej kontrolki OCX) i tworzy ją dynamicznie, treść wskazanego dokumentu może się nie wyświetlać jeśli to będzie PIERWSZA instancja kontrolki w danej instancji programu-hosta. Rozwiązanie jest BANALNIE proste: po ustawieniu właściwości "src" należy wywołać metodę SetFocus.

2016-07-31 20:46:25
Continuity Engine 1.0

Yaaay, oficjalnie 1.0! :P nobody cares

2016-07-26 20:17:27
Sleep considered harmful

Funkcji Sleep() powinni zabronić. Powinna być zamieniona na coś dużo bardziej skomplikowanego tak, by programiści nauczyli się wreszcie programowania asynchronicznego/zdarzeniowego i nie korzystali ze sleepów bez sensu. Sama funkcja nic nie szkodzi - wstrzymuje pracę wątka na ileś czasu rzeczywistego, w niektórych implementacjach pozwala oddać procesor innemu wątkowi. Przydatne. Ale niektórym się wydaje, że to idealna metoda synchronizacji międzykomponentowej...

2015-09-06 19:52:23
Ceph Hackathon - Hillsboro, OR

W pierwszej połowie sierpnia wsiadłem w samolot i poleciałem sobie do USA na Ceph Hackathon, z jednej strony by reprezentować pracodawcę, z drugiej, by zobaczyć na żywo Stany Zjednoczone, a z trzeciej, by poznać bliżej ludzi odpowiedzialnych za Cepha. Główny architekt projektu, Sage Weil, nie mógł się zjawić fizycznie, ale mieliśmy okazję z nim pogadać i tak. Ogółem jestem zadowolony, aczkolwiek to nie był taki "prawdziwy" hackaton - relatywnie mało brakowało, by skończyło się na marketingowym pianiu z zachwytu nad sprzętem Intela (który sponsorował imprezę), na szczęście do tego nie doszło. Poza tym, teraz oficjalnie Intel mnie nie lubi. ;)

2015-05-17 15:55:46
A taki tam stary bug...

CreateFile with OPEN_ALWAYS Sets Last Error Incorrectly

Testuję coś w maszynie wirtualnej, dane mam na wspóldzielonym katalogu (po SMB). No i dzieją się rzeczy dziwne - dane mi giną. Po dłuższej analizie dotarło do mnie, że wywoływałem funkcję CreateFile z parametrem OPEN_ALWAYS i od wartości zwróconej przez GetLastError uzależniałem albo normalne otwarcie, albo regenerację pliku - wygodne, bo nie musiałem ręcznie wykonywać operacji I/O by sprawdzić, czy plik wcześniej istniał, czy nie. A tu nagle taki wał... Nagle dowiaduję się, że plik nie istniał, kiedy istniał. :)
Już zacząłem grzmieć na Vboxa, ale okazało się, że to stary bug w Windows... No cóż, to na tyle w kwestii wygody.

2015-03-23 24:56:53
VIA popsuła swoje API! :P

Taki szybki protip dla wszystkich, którzy chcą z tego skorzystać i utknęli - VIA Padlock SDK jest popsute. Konkretnie, to funkcja padlock_phe_partial_available() wewnętrznie wywołuje funkcję asm_is_nano(), która wygląda tak:

cglobal asm_is_nano
asm_is_nano:
    xor eax, eax                ;get vendor ID
    cpuid   
    ;cmp ebx, 0x746e6543        ;means "tneC"
    ;jne NO_VIA
    ;cmp edx, 0x48727561        ;means "Hrua"
    ;jne NO_VIA
    ;cmp ecx, 0x736c7561        ;means "slna"
    ;jne NO_VIA
    
    ;verdor ID cannot got now, since our board has errata.
    mov     eax,  0xC0000000
    cpuid
    cmp     eax, 0xC0000001
    jb      NO_VIA
    mov     eax,  0xC0000001;
    cpuid
    and     edx, 0x0C00;        PHE_MASK,CPUID EDX code for PHE
    cmp     edx, 0x0C00;        PHE_MASK,CPUID EDX code for PHE
    jne     NO_VIA
    
    mov eax, 1              ;get model
    cpuid
    or  eax, 0x000f
    cmp eax, 0x06ff         ;3rd bit is F, then nano.
    jne NO_VIA
    
    mov eax, 1              ;return 1
    ret
    
NO_VIA:
    xor eax,eax
    ret;

... No właśnie. Instrukcja CPUID zamazuje wartości rejestrów EAX, EBX, ECX i EDX, i nic nie przywraca ich wartości, wobec czego po wywołaniu padlock_phe_partial_available() program przestaje zachowywać się przewidywalnie. Rozwiązanie? Przepisać sobie ręcznie asm_is_nano(), dodając pushe i popy odpowiednich rejestrów w odpowiednich miejscach.

2015-02-20 00:40:22
Ograniczenie liczby MIBów w sub-agentach Net-SNMP

Szybki protip dla tych, którzy tworzą własne sub-agenty dla Net-SNMP, a dla których problemem może być duża liczba trzymanych w systemie MIBów i wynikające z tego zwiększone użycie pamięci przez sub-agentów.

Wcześniejsze wpisy »

Powered by:
Hellcore Mailer - polski program pocztowyOpera Web BrowserFreeBSD - The Power to Serve!Slackware
RSSy:
Sidekick:
Projekty:
O autorze:
Zobacz:
Kategorie:
Archiwum:
Szukaj: