poniedziałek, listopada 17, 2014

Dwa lata

Dziewczynka w książeczce złamała nogę i ma gips. Mały pyta:
- Tato, co to jest gips?
- To jest takie usztywnienie do kości.
- Do kości?
- Widzisz, to twarde w twojej rączce to jest kość, to można złamać i wtedy, żeby się zrosło zakłada się gips, żeby się nie ruszało.
- Ty też miałeś gips?
- Nie, miednica jest zbyt duża, mi założono usztywnienie od środka.
- Od środka?
- Tak, lekarze zrobili tu rozcięcie, aż do kości i przykręcili taką płytkę śrubokrętem do kości.
- Płakałeś?
- Płakałem.

Zaszkliły się małemu oczy, zacisnął usta i sypią się łzy jak groszki.

- Pamiętasz jak tata długo leżał w łóżku? Nie mógł chodzić, czytać, gotwać, składać klocków? Lekarze założyli usztywnienie i teraz mogę tu być z tobą i to wszystko robić i tylko czasem mnie coś boli.

poniedziałek, września 17, 2012

Goodbye mister Gigahertz

At the beginning of the computers driven craziness it was all easy - you could create your judgment basing only on one number. Speed of the CPU was the most important number in the computers, everybody were talking about kilo, mega and giga hertz.

In times, where memory was working at the same speed as CPU, and each tick of processor was one operation made it was easy to say: this computer can perform millions of operations per second - and in those times it was true.

Then everything got complicated, memory has stepped down and is always slower than the heart, some instructions required more ticks than other, but, still - hertz was a king. It was so important, that AMD was describing it's own processor with fake speeds, to corelate them with their main competitor - people were thinking that high frequency was the same as speed.

Even at this point, you were able to judge which computer is powerful, basing only on this one number - they were designed to perform numerical calculations and main unit speed was most important number of all.

Suddenly, new graphic era has started, new number has emerged - triangles drawn per second - are you a gamer or mathematician - choose a number for you. It was quite easy - all machines were working on the same operating system, on almost the same components and was using almost the same code.

They were "good ol' days" - now desktop computers has almost no meaning to game iindustry, there is a new leader and all magic numbers has been destroyed. 

You cannot judge how fast is your mobile phone basing on its processor speed, it is meaningless. It does not matter how many cores it has, it has been observed that one version of Linux has troubles with four cores when other version of real time Linux is working flawlessly on only two cores. You cannot compare one device to another basing on processor, you don't have the same system everywhere - and even when it is the same system there is a skin, customization, different set of background processes and all these things will make your assumptions wrong.

What should we do now? "This device is up to twice as fast as the previous model." How to compare devices across manufacturers? We have to wait for some independent testing tools, some kind of mobile mark. When we cannot take any hardware number as a judging point, we have to create such number from pure calculation.

środa, maja 30, 2012

Google Picasa is schizophrenic girlfriend which will turn your life into hell

Enough. After many years of collaboration with Picasa desktop application I have lost my patience completely. I must be very careful, watch my every step, otherwise I will loose everything. My photos, my life and even my phone contacts. Do you wonder why some cold piece of bits reminds me schizophrenic girlfriend? Here is my favorite symptoms list:
  • "Oh, look at that sand. I see face there." "It is not a face, it is a hole in sand." "Noooo, it's a face, look!" - She see faces everywhere. Fences, sand, snow. Plush toys. It is getting worse and worse. On the other hand, she seems to not see some faces. "Look, it's my face." "Noooo way, it does not look like face!" "Look again!" "Nope." 
  • She can freeze in their own minds for minutes. "Hello, are you there. Can you hear me?" ... "What did you say? I wasn't listening!" It is happening to me all the time. 
  • Multiple personality disorder. Currently I have three or four the same contacts, with the same e-mail on my persons list. Why? I don't know why. She seems to be incapable to merge them into one. If I remove one of them it will came back after tag import from web albums. Just like that. "Oh look, it's Johny, and Johny with Johny." "Nope, it's just Johny." "Nooo way!" 
  • It is getting worse, when she is mad. Don't trust her, don't let her manage your contacts. I have remove once all duplicated persons from albums and the person with e-mails were removed from everywhere - gmail, phones and calendars. "You want me to forgot about the second Johny? All Johns are gone now. Who is John?" 
  • Nicknames! Bloody nicknames. If your person have a nickname (and you don't want to tag it with full name on public pictures) it is doable, but it cannot be changed. "I know that it is TheMin, but it's Johny and Johny is TheMin. I will not name it TheMin, because it's Johny!" You cannot argue with that!
  • She does not know where she came from and she does not now how to go back there. I don't know how it is done, but if you darken some picture, then reverse this change, picture will be have more light that it got before darkening. Almost all filters and effect leave marks on pictures.
  • You should be very careful when you talk to her, one innocent word and everything go into pieces. Pressing ALT + A which insert one of the most popular polish "funny" letters (ą) will remove end in mistake whole picture title removal. "Honey, where are my glasses?" "How did you call me? You bastard!"
I have trusted here on ton's of gigs of pictures. I don't know if she won't burn them some day. I always have backup with all pictures. I'm prepared for the worst, and I know that it will come, soon or later. 

You have been warned, prepare or die.

czwartek, marca 15, 2012


I am altering the deal. Pray I don't alter it any further. - Darth Vader

I bet that you have heard, that Polish student developers (which by some blogs have been changed into just 'polish developers') are third largest active group in Windows Marketplace counting by number of applications. If you wonder, how it could be, let me introduce you how such numbers are created. There is .Net developers portal (called CodeGuru), which is filled with marketing, but along with that, there are developer articles, tutorials and all this stuff, which beginners found useful. This portal is active in academic environment, create conferences, pushes students to it's own platform. Raising developers from students.

Some day, they found that it will be a good idea, to make contest. It was called: get a windows phone in geek club. What is a geek club? This is developer activity promotion, where you get paid in points for various platform related actions, blog posts, applications, comments. Media relationship of our times. What was the contest rules? Create five different applications, let them be judged by jury, each of them will give you one hundred points. Five hundred points can be exchanged to a new Windows Phone. Clear? Where is a catch? Contest is active until phones are available, nobody said how many phones there was, and when they will run out.
Well, that's almost all. When there is first in - first out queue to phones, with time passing your chances to get one of them are eroding very fast. Some of developers have gave up, some have lost faith. Contest end time have been extended to end of January, additionally to stimulate movement and flow of applications, one of the contest attendee (signed as Microsoft itself) have made comments on the contest forum. One of them was "do not worry, every valid application which will be sent to contest before 31st of January will be granted with Windows Phone", second one was "do not hurry, put your effort to quality of application" (this is not word-by-word Polish to English translation - you can find those comments cited in this forum post).

This was the steam which was needed, application stream have flooded.Applications have been sent to judgment and big waiting for phones have started.
How this story ends? This is not fairy tale, there is no 'happy end'. Phones have run out very fast and contest have been closed, comments have been edited out and there was almost no trace of them. Only in few repeated questions in following comments. Simple calculations made by forum users showed that there was no phones left when contest end time was extended, there was also no phones left when this contest was promoted on one of the conferences.
I've talked with one of the developers, which was taking part in this event, there was few more which he was knowing personally. Guess what, none of them have got their phones. They made their five applications, which were judged as correct from rules point of few (technically speaking they won), they have their five hundreds points but they have nothing.

How to f**k enthusiastic developers? Make contest without prizes, change rules during play, and ignore their questions.

Microsoft ended up with lots of shitty applications in the Marketplace and even more angry developers. Nicely done!

piątek, grudnia 16, 2011

MOF decompilation


So, you have read very nice article about writing new WMI drivers for kernel, you have downloaded and read how to start manual, you have even read very interesting kernel WMI reference on Ubuntu site. And you are so buzzed with good feelings about this all that you push some commands to dump WMI information from DSDT. Then in completely unexpected way you have to face with...


        object_id: BC
        notify_id: 42
        reserved: 43
        instance_count: 1
        flags: 0x2 ACPI_WMI_METHOD 
        object_id: BD
        notify_id: 42
        reserved: 44
        instance_count: 1
        flags: 0x2 ACPI_WMI_METHOD 
        object_id: ?
        notify_id: D2
        reserved: 00
        instance_count: 1
        flags: 0x8 ACPI_WMI_EVENT 
        object_id: MO
        notify_id: 4D
        reserved: 4F
        instance_count: 1
        flags: 0

What the heck? It is clearly written what is a function, what is and event and what is something else, articles authors tell you about structures from their computers, but they does not tell a word about your machine. There is no function or parameter description, just "there is a GUID, do what you want with that". You are half lucky if you connect to events and are able to collect some data in the field, but when your machine (like mine) require to send some greetings in advance to receive them, then you are in big troubles. There are two ways of dealing with this...


Dig through DSDT, observe function calls flow, chop-out parameters and their type, guess, try and guess again. Then, you should sit near the fireplace and tell all of this to your grandchildrens. There is a chance to get crazy in the process, but you are dealing with "The Kernel", you were warned before you have started. To take away risk, I have for you...


There is a tool in the Windows Driver Development kit, called wmiofck. Which is designed to check mbf (compiled mof file), and to create interface definitions for it. Most of the WMI based DSDT have in them something called WQXX buffers, they are nothing more than compiled mof files. Just dig them out, and save as a binary file (not so complicated if you know some of the script-fu). Call wmiofck tool on this binary file with parameters:

wmiofck.exe -hwmidevs.h -m -u moftable.mbf
in result you will receive very nicely formatted C .h file, where all WMI functions will have the same names as your device manufacturer wanted them to have. Some of them will have comments, all your parameters will be fully described. Sometimes even some constants will be exposed. You don't belive me? See for yourself:

// ASUSManagement - ASUSManagement #define ASUSManagementGuid \ { 0x97845ed0,0x4e6d,0x11de, { 0x8a,0x39,0x08,0x00,0x20,0x0c,0x9a,0x66 } } #if ! (defined(MIDL_PASS)) DEFINE_GUID(ASUSManagement_GUID, \ 0x97845ed0,0x4e6d,0x11de,0x8a,0x39,0x08,0x00,0x20,0x0c,0x9a,0x66); #endif // // Method id definitions for ASUSManagement #define initialize 1128616019 typedef struct _initialize_IN { // ULONG AP_version; #define initialize_IN_AP_version_SIZE sizeof(ULONG) #define initialize_IN_AP_version_ID 1 } initialize_IN, *Pinitialize_IN; #define initialize_IN_SIZE (FIELD_OFFSET(initialize_IN, AP_version) + initialize_IN_AP_version_SIZE) typedef struct _initialize_OUT { // ULONG BIOS_version; #define initialize_OUT_BIOS_version_SIZE sizeof(ULONG) #define initialize_OUT_BIOS_version_ID 2 } initialize_OUT, *Pinitialize_OUT; #define initialize_OUT_SIZE (FIELD_OFFSET(initialize_OUT, BIOS_version) + initialize_OUT_BIOS_version_SIZE)
This is decompiled version of MOF file from the article mentioned in the beginning of this post, first GUID definition is the GUID for a endpoint called ASUSManagement, then you have method id and input/output parameter descriptions. If you are lucky, and your machine manufacturer was not lazy you will have full API for your machine. Served as you like, chilled with some #define on top.

Full version of generated .h file can be grabbed here. It is very good lecture, especially when used as a reference for initial how to.