tag:blogger.com,1999:blog-138383522024-03-08T00:44:35.244+01:00GlucioJa i inne moje ja.Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.comBlogger449125tag:blogger.com,1999:blog-13838352.post-1765383895273458952014-11-17T23:34:00.000+01:002014-11-17T23:34:52.070+01:00Dwa lataDziewczynka w książeczce złamała nogę i ma gips. Mały pyta:<br />
- Tato, co to jest gips?<br />
- To jest takie usztywnienie do kości.<br />
- Do kości?<br />
- 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.<br />
- Ty też miałeś gips?<br />
- Nie, miednica jest zbyt duża, mi założono usztywnienie od środka.<br />
- Od środka?<br />
- Tak, lekarze zrobili tu rozcięcie, aż do kości i przykręcili taką płytkę śrubokrętem do kości.<br />
- Płakałeś?<br />
- Płakałem.<br />
<br />
Zaszkliły się małemu oczy, zacisnął usta i sypią się łzy jak groszki.<br />
<br />
<br />
- 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.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-39592870842707740132012-09-17T13:31:00.001+02:002012-09-17T13:31:15.205+02:00Goodbye mister Gigahertz<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-43429220810225818912012-05-30T11:47:00.001+02:002012-05-31T10:17:12.300+02:00Google Picasa is schizophrenic girlfriend which will turn your life into hell<br />
<div style="text-align: justify;">
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:</div>
<ul style="text-align: justify;">
<li>"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." </li>
<li>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. </li>
<li>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!" </li>
<li>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?" </li>
<li>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!</li>
<li>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.</li>
<li>You should be very careful when you talk to her, one innocent word and everything go into pieces. Pressing <alt>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!"</alt></li>
</ul>
<div style="text-align: justify;">
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. </div>
<br />
You have been warned, prepare or die.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com1tag:blogger.com,1999:blog-13838352.post-71975495578954630972012-03-15T23:32:00.000+01:002012-03-15T23:54:56.000+01:00Deal<cite>I am altering the deal. Pray I don't alter it any further. - Darth Vader</cite><br /><br/>
<div style="text-align: justify;">
I bet that you have heard, that Polish student developers (which by some blogs have been changed into just 'polish developers') are <a href="http://www.microsoft.com/poland/centrumprasowe/prasa/12_01/15.aspx" rel="nofollow">third largest active group</a> 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 <a href="http://www.codeguru.pl/" rel="nofollow">CodeGuru</a>), 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.<br/><br/>
Some day, they found that it will be a good idea, to make contest. It was called: <a href="http://www.codeguru.pl/aktualnosci/zdobadz-windows-phone-w-geek-club,10386" rel="nofollow">get a windows phone in geek club</a>. 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.<br/>
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 <a href="http://www.codeguru.pl/forum/watek/zdobadz-windows-phone-w-geek-club---faq,617870/#post627018" rel="nofollow">this</a> forum post).<br/><br/>
This was the steam which was needed, application stream have flooded.Applications have been sent to judgment and big waiting for phones have started.<br/>
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.<br/>
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.<br/><br/>
How to f**k enthusiastic developers? Make contest without prizes, change rules during play, and ignore their questions.<br/><br/>
Microsoft ended up with lots of shitty applications in the Marketplace and even more angry developers. Nicely done!
</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com2tag:blogger.com,1999:blog-13838352.post-67853943390211452852011-12-16T23:43:00.001+01:002011-12-19T23:00:24.000+01:00MOF decompilation<div style="text-align: justify;">
<span style="font-size: large;">Background</span><br />
<br />
So, you have read<a href="http://lwn.net/Articles/391230/" target="_blank"> very nice article about writing new WMI drivers for kernel</a>, you have downloaded and read <a href="http://tldp.org/LDP/lkmpg/" target="_blank">how to start manual</a>, you have even read very interesting <a href="https://wiki.ubuntu.com/Kernel/Reference/WMI" target="_blank">kernel WMI reference on Ubuntu</a> 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...<br />
<br />
<span style="font-size: large;">Reality </span><br />
<br />
<pre> 97845ED0-4E6D-11DE-8A39-0800200C9A66:
object_id: BC
notify_id: 42
reserved: 43
instance_count: 1
flags: 0x2 ACPI_WMI_METHOD
466747A0-70EC-11DE-8A39-0800200C9A66:
object_id: BD
notify_id: 42
reserved: 44
instance_count: 1
flags: 0x2 ACPI_WMI_METHOD
ABBC0F72-8EA1-11D1-00A0-C90629100000:
object_id: ?
notify_id: D2
reserved: 00
instance_count: 1
flags: 0x8 ACPI_WMI_EVENT
05901221-D566-11D1-B2F0-00A0C9062910:
object_id: MO
notify_id: 4D
reserved: 4F
instance_count: 1
flags: 0</pre>
<br />
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...<br />
<br />
<span style="font-size: large;">Ninja</span><br />
<br />
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...<br />
<a name="solution"><span style="font-size: large;"><br />Solution</span></a><br />
<br />
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:<br />
<br />
<code class="console">wmiofck.exe -hwmidevs.h -m -u moftable.mbf</code><br />
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:<br /><br/>
<code>// 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)
</code>
<br />
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.<br />
<br />
Full version of generated .h file can be grabbed <a href="http://dl.dropbox.com/u/4268973/asus.h" target="_blank">here</a>. It is very good lecture, especially when used as a reference for initial how to.<br />
<br /></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-35784833070683188982011-07-27T21:23:00.003+02:002011-07-27T21:40:27.394+02:00Rączka rączkę myje<div style="text-align: justify;">Prawie pamiętam dzień w którym zaczęło się to szaleństwo. Po koncercie Lata z Radiem w Jarosławiu (w czasach, gdy zdarzało się im jeszcze grywać w "Polsce B") gdy przechadzałem się przez pobojowisko pod sceną zauważyłem zdeptany parasol. Żal mi się go zrobiło, więc odłamaną rączkę zabrałem ze sobą, od tamtego czasu, podczas deszczowych i wietrznych dni wypatruję w koszach na śmieci porzuconych przez właścicieli parasoli. Zabieram ze sobą jedyną nadającą się jeszcze do użycia rzecz - rączkę, wzbogacając tym samym moją kolekcję.<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoXOcuJuTQHXId8EGCsGhQyRnc-R6zLHHcfdPjmXxg3MuwZ8Z1eD5gAIIlMk3jsIBKh4JO-3TPp4GthyC7JfwUy7HSv3EH3ftBPt8i4ah4-WQXaCcDO06T1gynLsiQmQIrahrA/s1600/kosz.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoXOcuJuTQHXId8EGCsGhQyRnc-R6zLHHcfdPjmXxg3MuwZ8Z1eD5gAIIlMk3jsIBKh4JO-3TPp4GthyC7JfwUy7HSv3EH3ftBPt8i4ah4-WQXaCcDO06T1gynLsiQmQIrahrA/s320/kosz.jpg" alt="" id="BLOGGER_PHOTO_ID_5634115794607136802" border="0" /></a>Identyfikacja<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHiSxRS-ZRFW78AFY4tQPX7LoRkSTPDGBGorcD4wqoLYNqLKbKuLj2Of57Q9jGacrrrPVcinh8mCfkhH501EEnp4O2F1IW-smqeeQkDkzQBGJDX6HQGTgez-leUTA5KJTON64U/s1600/lamanie.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHiSxRS-ZRFW78AFY4tQPX7LoRkSTPDGBGorcD4wqoLYNqLKbKuLj2Of57Q9jGacrrrPVcinh8mCfkhH501EEnp4O2F1IW-smqeeQkDkzQBGJDX6HQGTgez-leUTA5KJTON64U/s320/lamanie.jpg" alt="" id="BLOGGER_PHOTO_ID_5634115802246780034" border="0" /></a>Pozyskanie<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRBLzsNu2AtL9ptJImTcSpl33chi5F_qhuarN-KSydBhjhynOE4RqKJcrTAn7F-vxh7mH4N8twi5MgD2PoE8N5tfGSxyraA_ksiy2H7GcugP5JS2du53zZRsGurf9KgDNECoC/s1600/pozyskanie.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRBLzsNu2AtL9ptJImTcSpl33chi5F_qhuarN-KSydBhjhynOE4RqKJcrTAn7F-vxh7mH4N8twi5MgD2PoE8N5tfGSxyraA_ksiy2H7GcugP5JS2du53zZRsGurf9KgDNECoC/s320/pozyskanie.jpg" alt="" id="BLOGGER_PHOTO_ID_5634115806852212946" border="0" /></a>Eksponat<br /><br /><div style="text-align: justify;">Wszystkie moje dotychczasowe zdobycze można obejrzeć w serwisie <a href="http://www.archiweo.pl/przedmioty_kolekcji/154-Raczki_od_parasoli">archiweo.pl</a>, gdzie udostępniam je szerszej gawiedzi.<br /></div></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-23076344787407519582011-07-26T22:34:00.000+02:002011-07-26T22:34:00.945+02:00Wpółczynnik Autobusowy ProjektuWspółczynnik ten definiuję się jako ilość osób, członków zespołu, którzy muszą wpaść po autobus, by projekt zakończył się porażką. Ten współczynnik powinien być dużo większy od jedności, w sytuacji gdy jest równy jeden należy dokoptować kogoś jeszcze do zespołu.<br /><br />Takie wynalazki jak dzielona wiedza w wiki mają minimalny wpływ na powyższy współczynnik i zazwyczaj są pomijane w badaniu.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-63615785841414955722011-06-07T17:08:00.003+02:002011-06-07T17:15:33.488+02:00Chmury<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitXY8JpRLm8qWVLsH68rSpWv-itMUZLCH5uhzoLGcj1h3wO8kwjrWZKnofok_ZjIGp3-aKEl8VYhBcpcPBJGL3hl3THW1naOC8Uirn6Sjq55LQCaEj5xkxgV4oX6qWOBoM6Kkb/s1600/IMG_00000065.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitXY8JpRLm8qWVLsH68rSpWv-itMUZLCH5uhzoLGcj1h3wO8kwjrWZKnofok_ZjIGp3-aKEl8VYhBcpcPBJGL3hl3THW1naOC8Uirn6Sjq55LQCaEj5xkxgV4oX6qWOBoM6Kkb/s320/IMG_00000065.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5615495235281604290" /></a><br />Tutaj powinien byc jakis mdly tekst o tym jaki to swiat jest piekny i cudowny. Daruje go sobie, napisze tylko: ladne chmury, nie?<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-62342648914339098722011-05-25T18:05:00.004+02:002011-05-25T23:52:55.990+02:00Może być gorzej<div style="text-align: justify;">Wszyscy lubimy niezwykłe zwierzęta. Są różne, różniste potwory. Pająki z uśmiechem, palczaki - są też stwory, które są zapowiedzią czegoś o wiele gorszego. Weźmy takiego hipopotama, bydle wielkie i niebezpieczne - odpowiada w końcu za większość przypadków zgonów ludzi zaatakowanych przez zwierzęta w afryce, jednak sama jego nazwa wskazuje, ze jest to zwierzaczek hipotroficzny - karłowaty, mikry. Czekam dnia, w którym odkryty zostanie zaginiony hiperpotam. Jednak zawsze może być gorzej, w tej samej dziurze co hiperpotam pewnie siedzi cała masa innych dziwactw, z których każdy kolejny jeszcze gorszy od poprzedniego: dźwiedź, lopa czy też mrożący krew w żyłach toperz. Strzeżcie się, one tam siedzą i tylko czekają jakby tu wyleźć i kogoś wciąć na kolację.<br /></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Jakub Nietrzebahttp://www.blogger.com/profile/17474611095039899757noreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-45714556855673744862011-04-13T00:00:00.002+02:002011-07-27T21:41:03.253+02:00Zgubiłeś klucze?<div class="separator" style="clear: both; text-align: center;"><img src="http://3.bp.blogspot.com/-1BnYR8k2Kpw/TaTLCPkfBtI/AAAAAAAAHM0/9z8_yLKigxI/s400/1302513496805.jpeg" style="margin-left: 1em; margin-right: 1em;" border="0" height="300" width="400" /></div><div style="text-align: center;">Ktoś je znalazł i powiesił, obrosły brudem, jednak nie wróciłeś, nadal wiszą tam gdzie je ktoś zostawił. W szarym, zakurzonym miejscu.</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-54667967529514563832011-03-28T23:54:00.001+02:002011-03-28T23:55:26.068+02:00Naklejki, strumyki, tygrysy, luksusem powiało<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="240" src="http://1.bp.blogspot.com/-mUdQbZw0muE/TZECwsRL1dI/AAAAAAAAHMY/X2Tj1zxjX8o/s320/strumien.jpg" width="320" style="margin-left: 1em; margin-right: 1em;"/></div>
<div style="text-align: center;">
Nowa myszka, wysłużona podkładka, pomocna naklejka i leciwy laptop. Powiało luksusem tak mocno, że aż okno musiałem świeżą słomą dopchać, coby mi domowa atmosfera nie uciekła.</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-8065160754218533752011-03-24T22:34:00.002+01:002011-03-24T22:41:18.904+01:00Timezone aware cron usage<div style="text-align: justify;">
If your whole application environment is working within one particular timezone, then you are a happy man. Sometimes, especially when you are performing synchronizations with partners from different timezones, and those timezones are changing their time basing on the DST rules. This might be a nightmare, when your scheduled task change their execution time back and forth by one hour every time they want. Simply saying: you may adjust those time manually, it is doable, but please, do you want to do this up to four times a year? What a horrible loss of time!</div>
<div style="text-align: justify;">
There are two approaches <u>nice</u> and <u>hard</u>, which one is applicable for you? It depends on the cron compilation configuration. Check it by calling:</div>
<br />
<div style="text-align: justify;">
<code class="console">man 5 crontab</code> </div>
<div style="text-align: justify;">
in console. Of course, you know how to configure cron, scroll down up to example, and when you see something like this:</div>
<br />
<code class="console"># mail any output to `paul', no matter whose crontab this is
MAILTO=paul
#
<b style="color:red">CRON_TZ=Japan</b>
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly</code>
<div style="text-align: justify;">
Your way is the <u>easy</u> way, change CRON_TZ variable to desired timezone (in which next command will be executed). Timezone may be changed many times inside of one crontab, default timezone is this one from server.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
When you are out of luck, and you don't see that crontab supports CRON_TZ you will have to write your own mini script, which will perform checking not implemented in cron. First, specify desired timezone for your script:</div>
<br />
<code class="console"><b>TZ=Japan</b>
0 4,5,6,7 * * * ~/japan_cron.sh</code>
<br />
<div style="text-align: justify;">
Determine what are the highest, and the lowest possible differences between server timezone and desired timezone - when each timezone can change time by one hour, maximum difference is two hours, this results in four hour window in which script should be executed.<br />
The last thing which we have to create is the cron script which will be executed at desired hours and will check current time against desired execution time (hard to explain, example next):
</div>
<br />
<code class="console">#!/bin/bash
#0900
if [ `date +'%H%M'` = '0900' ]
then
php nine_am_sync.php
fi</code>
<br />
Script will check time (in desired timezone) and do what it has to be done. This is not very sophisticated, but simple and working solution.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-36357943950079485272011-03-12T19:47:00.001+01:002011-03-12T19:50:26.531+01:00Kup pan aplikacje!<div style="text-align: justify;">
No i stało się, wepchnąłem swoją pierwszą aplikację do sklepu. Stałem się pełnoprawnym kupczydłem, na tę okazję (w końcu na jednej się nie skończy) utworzyłem specjalną <a href="http://glucik.blogspot.com/p/moje-aplikacje.html">stronę</a>, gdzie jak na razie jest opis tylko jednej, ale będę tę listę sukcesywnie rozszerzał.</div>
<br />
Moje aplikacje w AppWorld można obejrzeć <a href="http://appworld.blackberry.com/webstore/vendor/2816">tutaj</a>.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com1tag:blogger.com,1999:blog-13838352.post-57252464042976312002011-02-17T21:37:00.000+01:002011-02-17T21:37:48.607+01:00UTMU Google Analytics Request ParameterDuring creation of backend PHP component to track page views with use Google Analytics without user knowledge I have encountered interesting problem. GIF request contains parameter which seems to be unrelated to page or view parameters. I have analyzed ga.js code and found that this parameter is created basing on table filled with true/false values. Nothing less, nothing more. Only true/false.<br />
<br />
Code responsible for creation of utmu parameter basing on this table can be presented in this form (distributed on <a href="http://sam.zoy.org/wtfpl/COPYING">WTFPL</a> license):<br/><br>
<code class="js">var usage = [];
function setUsage(index) {
usage[index] = true;
};
function getUsage() {
var allChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
var temp = [];
for (h = 0; h < usage.length; h++)
if (usage[h]) {
temp[Math.floor(h / 6)] ^= 1 << h % 6;
}
for (h = 0; h < temp.length; h++)
temp[h] = allChars.charAt(temp[h] || 0);
return temp.join("")
};</code>
<br />
It's looks like that above parameter is not required or validated, it is used only for statistical purposes (analytics inside of analytics). List of functions with their codes found in ga.js file:
<table><thead>
<tr><th>Function</th><th>Code</th></tr>
</thead>
<tbody>
<tr><td>_addIgnoredOrganic</td><td>15</td></tr>
<tr><td>_addIgnoredRef</td><td>31</td></tr>
<tr><td>_addItem</td><td>19</td></tr>
<tr><td>_addOrganic</td><td>14</td></tr>
<tr><td>_addTrans</td><td>21</td></tr>
<tr><td>_anonymizeIp</td><td>70</td></tr>
<tr><td>_clearIgnoredOrganic</td><td>16</td></tr>
<tr><td>_clearIgnoredRef</td><td>32</td></tr>
<tr><td>_clearOrganic</td><td>17</td></tr>
<tr><td>_clearXKey</td><td>72</td></tr>
<tr><td>_clearXValue</td><td>73</td></tr>
<tr><td>_cookiePathCopy</td><td>30</td></tr>
<tr><td>_createAsyncTracker</td><td>33</td></tr>
<tr><td>_createEventTracker</td><td>74</td></tr>
<tr><td>_createTracker</td><td>55</td></tr>
<tr><td>_createXObj</td><td>75</td></tr>
<tr><td>_deleteCustomVar</td><td>35</td></tr>
<tr><td>_getAccount</td><td>64</td></tr>
<tr><td>_getAsyncTracker</td><td>34</td></tr>
<tr><td>_getClientInfo</td><td>53</td></tr>
<tr><td>_getDetectFlash</td><td>65</td></tr>
<tr><td>_getDetectTitle</td><td>56</td></tr>
<tr><td>_getLinkerUrl</td><td>52</td></tr>
<tr><td>_getLocalGifPath</td><td>57</td></tr>
<tr><td>_getName</td><td>58</td></tr>
<tr><td>_getServiceMode</td><td>59</td></tr>
<tr><td>_getTrackerByName</td><td>51</td></tr>
<tr><td>_getTracker</td><td>0</td></tr>
<tr><td>_getVersion</td><td>60</td></tr>
<tr><td>_getVisitorCustomVar</td><td>50</td></tr>
<tr><td>_getXKey</td><td>76</td></tr>
<tr><td>_getXValue</td><td>77</td></tr>
<tr><td>_initData</td><td>2</td></tr>
<tr><td>_linkByPost</td><td>13</td></tr>
<tr><td>_link</td><td>12</td></tr>
<tr><td>_sendXEvent</td><td>78</td></tr>
<tr><td>_setAccount</td><td>3</td></tr>
<tr><td>_setAllowAnchor</td><td>7</td></tr>
<tr><td>_setAllowHash</td><td>8</td></tr>
<tr><td>_setAllowLinker</td><td>11</td></tr>
<tr><td>_setAutoTrackOutbound</td><td>79</td></tr>
<tr><td>_setCampaignCookieTimeout</td><td>29</td></tr>
<tr><td>_setCampaignTrack</td><td>36</td></tr>
<tr><td>_setCampCIdKey</td><td>37</td></tr>
<tr><td>_setCampContentKey</td><td>38</td></tr>
<tr><td>_setCampIdKey</td><td>39</td></tr>
<tr><td>_setCampMediumKey</td><td>40</td></tr>
<tr><td>_setCampNameKey</td><td>41</td></tr>
<tr><td>_setCampNOKey</td><td>42</td></tr>
<tr><td>_setCampSourceKey</td><td>43</td></tr>
<tr><td>_setCampTermKey</td><td>44</td></tr>
<tr><td>_setClientInfo</td><td>66</td></tr>
<tr><td>_setCookiePath</td><td>9</td></tr>
<tr><td>_setCookiePersistence</td><td>24</td></tr>
<tr><td>_setCookieTimeout</td><td>25</td></tr>
<tr><td>_setCustomVar</td><td>10</td></tr>
<tr><td>_setDetectFlash</td><td>61</td></tr>
<tr><td>_setDetectTitle</td><td>62</td></tr>
<tr><td>_setDomainName</td><td>6</td></tr>
<tr><td>_setHrefExamineLimit</td><td>80</td></tr>
<tr><td>_setLocalGifPath</td><td>46</td></tr>
<tr><td>_setLocalRemoteServerMode</td><td>47</td></tr>
<tr><td>_setLocalServerMode</td><td>92</td></tr>
<tr><td>_setMaxCustomVariables</td><td>71</td></tr>
<tr><td>_setNamespace</td><td>48</td></tr>
<tr><td>_setReferrerOverride</td><td>49</td></tr>
<tr><td>_setRemoteServerMode</td><td>63</td></tr>
<tr><td>_setSampleRate</td><td>45</td></tr>
<tr><td>_setSessionCookieTimeout</td><td>26</td></tr>
<tr><td>_setSessionTimeout</td><td>27</td></tr>
<tr><td>_setTrackOutboundSubdomains</td><td>81</td></tr>
<tr><td>_setTransactionDelim</td><td>82</td></tr>
<tr><td>_setTrans</td><td>20</td></tr>
<tr><td>_setVar</td><td>22</td></tr>
<tr><td>_setVisitorCookieTimeout</td><td>28</td></tr>
<tr><td>_setXKey</td><td>83</td></tr>
<tr><td>_setXValue</td><td>84</td></tr>
<tr><td>_trackEvent</td><td>4</td></tr>
<tr><td>_trackPageview</td><td>1</td></tr>
<tr><td>_trackTrans</td><td>18</td></tr>
<tr><td>_visitCode</td><td>54</td></tr>
</tbody></table><br/>
It is important to mention that, like everything else this code is not guaranteed to always work as it has been described by me. Google can change this anytime in the way which fit they needs the best. When it is currently not checked it can be checked against validity in the future.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com2tag:blogger.com,1999:blog-13838352.post-86490471682721130572010-12-27T22:59:00.000+01:002010-12-27T22:59:05.030+01:00Pieróg alegorią polaka<div style="text-align: justify;">
Taka mnie filozoficzna myśl naszła, przy kontemplacji michy wigilijnych pierogów. Jak dużo jedzący ma wspólnego z jedzeniem - wszak jesteś tym co jesz. Pieróg tak jak ja lubi być napchany ziemniakami albo mięsem. Gdy jest zbyt ciepło to się rozkleja, gdy jest zimno twardnieje, a gdy ktoś go przypiecze to się pokrywa nieprzeniknioną skorupą skarmelizowanego makaronu.</div>
<div style="text-align: justify;">
Mogą być leniwe, mogą być rozlazłe, mogą być słodkie. Głównie są żarciem, jednak gdy się w nie włoży serce, to nie może być nic lepszego do jedzenia pod słońcem. W końcu to tylko klucha z farszem, ale czyż nie o to w życiu chodzi? </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-10177182239795250592010-11-17T18:41:00.000+01:002010-11-17T18:41:11.248+01:00Myśl dniaRobienie wydmuszek interfejsu jest jak umawianie się na randki z transseksualistami - wszystko jest w porządku dopóki nie zaczniesz klikać.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-17293581650513973042010-11-17T13:01:00.001+01:002010-11-17T13:03:18.331+01:00ActivityIndicator & TextInput - interactive search field<div style="text-align: justify;">
In asynchronous world there is often a need to show user, that
application is doing something in the background, and it is not hang.
When we can determine amount of time needed to perform some action, we
should use ProgressBar controll, when there is no such possibility we
should use ActivityIndicator.</div>
<div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
ActivityIndictator class does not have many usefull functions, the
most interesting function one is animate(doAnimate:boolean). It starts
(or stops) animation of indicator, this is used to produce impression
that application is working on something. </div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
We will create simple search field with appriopriate icon and indicator. Let's start from TextInput:</div>
<br />
<pre>with(textInput) {
x = 50;
y = 50;
width = 200;
leftIcon = searchImage;
leftIconMode = TextInputIconMode.ALWAYS;
rightIcon = activityIndicator;
rightIconMode = TextInputIconMode.NEVER;
}</pre>
<pre> </pre>
<div style="text-align: justify;">
We are using here the most usefull feature of TextInput control: left
and right icon. These icons are inserted in the text input and does not
hide text inserted. The only limitation (maybe bug) is that the right
icon is not correctly showed when clear icon is present (they are in the
same position). That's why we are showing search button on left side of
the controll. Above code will result in creation of this piece of
interface:</div>
<div style="text-align: center;">
<img align="center" alt="TextInput with clear and search icons" border="0" style="border: none" src="http://supportforums.blackberry.com/t5/image/serverpage/image-id/3941iC86801D82DFFE3BB/image-size/original?v=mpbl-1&px=-1" title="TextInput with clear and search icons" /></div>
When user press the search icon, we should start animation and start doing background operations.<br />
<br />
<pre>protected function startSearch(event:Event) : void
{
//disable search box and start animation
textInput.enabled = false;
textInput.rightIconMode = TextInputIconMode.ALWAYS;
textInput.leftIconMode = TextInputIconMode.NEVER;
activityIndicator.animate(true);
//start background job
setTimeout(stopSearch, 5000, textInput.text);
//visual improvement
textInput.text = "Searching...";
resultLabel.text = "";
}</pre>
We are hiding search icon, show and start animation, and do some
background operations - here it is simulated by few seconds of delay
before the results will be displayed.<br />
<div style="text-align: center;">
<img align="center" alt="TextInput with ActivityIndicator" border="0" style="border: none" src="http://supportforums.blackberry.com/t5/image/serverpage/image-id/3943i093B89BFE246871C/image-size/original?v=mpbl-1&px=-1" title="TextInput with ActivityIndicator" /></div>
Field is disabled, so user cannot change inserted text additonally we
may change background of disabled controll by changing it's skin. When
background job is finished, we should enable it for user input:<br />
<br />
<pre>protected function stopSearch(text:String):void
{
//display results
resultLabel.text = "Sorry, nothing has been found for \"" + text + "\".";
textInput.text = "";
//enable search box for user
textInput.enabled = true;
textInput.rightIconMode = TextInputIconMode.NEVER;
textInput.leftIconMode = TextInputIconMode.ALWAYS;
activityIndicator.animate(false);
}</pre>
<br />
<div style="text-align: justify;">
ActivityIndicator animation can be changed by skin, with it we are
able to create consistent activitiy indication in whole application.
TextInput icons placeholders can be used in many ways, for validation
indication, type hinting, help and many other non crutial items.
Inserting them in text input box will keep interface small and clear.</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-59619913962216677202010-11-08T20:25:00.000+01:002010-11-08T20:25:35.432+01:00Jeszcze Polska nie zginęła<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_8qpf_sM92lk/TNhObrqcPeI/AAAAAAAAHJ4/2IJe969_a-Q/s1600/flaga.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://1.bp.blogspot.com/_8qpf_sM92lk/TNhObrqcPeI/AAAAAAAAHJ4/2IJe969_a-Q/s400/flaga.jpg" width="400" /></a></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-86638475038220392102010-11-04T23:38:00.000+01:002010-11-04T23:38:03.491+01:00Czeladnika do zawodu programisty przyuczę<div style="text-align: justify;">
O tym, że uczelnie techniczne w Polsce oderwane są od rzeczywistości wiadomo od dawna. Skostniałe kumoterskie układy, narzędzia i technologie pamiętające czasy króla Ćwieczka, program nauczania dostosowany do posiadanych naukowców zamiast do wymaganej na rynku pracy wiedzy. Doskonałym przykładem tej patologii są studia informatyczne - programistyczne. Studenci marnują swoje żywota starając się zrozumieć algorytmikę opartą o grafy, całkując oraz wykonując modele cyfrowych zapalników.</div>
<div style="text-align: justify;">
Patrząc z perspektywy mojego kilkuletniego doświadczenia, wiedza ta (pomimo tego, że ciekawa) nigdy nie była przeze mnie użyta. Ileż w końcu jest aplikacji w których można to zastosować? Jedna lub dwie i one są już napisane i używane. Nikt nie poszukuje kolejnego systemu przetwarzania audio, jest kilka płatnych, kilka darmowych, a używane są co najwyżej do wycinania kawałków dźwięków na dzwonki do komórek (jeśli aż tyle).</div>
<div style="text-align: justify;">
Zdarzało mi się pracować, ze świeżo upieczonymi studentami, zdarzało mi się też pracować z doświadczonymi pracownikami pozbawionymi podstawowej wiedzy. Metoda prowadzenia zajęć z programowania w językach wysokiego poziomu wypełnia studentów fałszywym przeczuciem, że problemy z którymi się borykają są nowe i całkowicie unikatowe. Nikt nie stara się nawet poruszać kwestii wbudowanych w kompilator albo system operacyjny bibliotek - nauka oparta jest o rozwiązywanie znanych i starych problemów. Przykładem zagadnienia gdzie ta metodologia przynosi największe straty to operacje na napisach (ciągach liter) - prześledźmy to na przykładzie bardzo popularnej biblioteki strings (albo array) w porównaniu do najpopularniejszych problemów. Podstawą jest długość napisu (to wie każdy, bo każdy to widział), podmiana jednego ciągu na inny (tu już kusi wymyślić koło na nowo), złączenie tablicy w napis przy pomocy jakiegoś separatora (np. przecinka) - tutaj już pełna samowolka, o takich rzeczach jak uzupełnianie znakiem do długości, zamiana małych na duże litery, policzenie słów i tak dalej. Tysiące programistów na świecie opracowuje właśnie własne procedury, do rozwiązywania takiego typu problemów, nikomu nie przyjdzie do głowy sprawdzić czy, a nóż-widelec, ktoś to zrobił wcześniej, może nawet (o zgrozo!) jest to wbudowane w kompilator.</div>
<div style="text-align: justify;">
Jeśli absolwent ma szczęście trafić zaraz po studiach do środowiska które w dość szybki (a często i brutalny) sposób uświadomi mu jego braki oraz niedociągnięcia - jeśli tego szczęścia nie ma, trafi do firmy wypełnionej takimi samymi jak on, grupowo będą legitymizować swoje błędy tracąc czas oraz pieniądze inwestora na odtwarzanie dawno zoptymalizowanych i rozwiązanych problemów - tylko dlatego, że wszyscy uczestnicy tej gry pozbawieni zostali praktycznej wiedzy, którą miał im dostarczyć uniwersytet. Uniwersytet wypełniony teoretykami nie ma zaś możliwości przekazania studentom wiedzy praktycznej, gdyż najzwyczajniej jej nie posiada. Programowanie można porównać do produkcji skrzypiec: można spędzić kilka ładnych lat ucząc się zjawiska rezonansów, wyliczając idealne grubości oraz długości strun, poznając historię ludwisarskiego fachu. Czy może to skutkować tym, że tak wyedukowany człowiek wyprodukuje dobre skrzypce? Nie, w żadnym wypadku, najwyżej będzie to pudełko ze sznurkami. By móc rzeźbić w czymkolwiek, trzeba ten materiał poczuć, drewno musi leżeć w dłoni, trzeba poznać jego twardość plastykę i zachowanie pod uciskiem, trzeba wielu lat praktyki aby produkować dobre skrzypce, jednak nikt nie wpada na pomysł studiowania tego, gdyż wiedza taka byłaby zupełnie zbyteczna i płacenie za takie studia to całkowity idiotyzm.</div>
<div style="text-align: justify;">
W dzisiejszych czasach prawie całkowicie zaniknął proces przyuczania do zawodu w praktyce. Nie było szkół dla kowali, szewców, ludwisarzy czy też piekarzy - czeladnik pomagając przy pracy, patrząc na ręce nabierał wiedzy, tak by w końcu sam mógł uczyć. Czemu nikt nie prowadzi czeladniczych praktyk programistycznych? Komitywa firm z uczelniami mogłaby skutkować produkcją studentów, którzy po wyjściu z uczelni byliby już zaznajomieni z rynkiem, zżyci z jego oczekiwaniami i przystosowani do nauki przez praktykę, nie baliby się przy tym nauki nowych rzeczy, byłby to naturalny sposób dla nich na rozwijanie swoich umiejętności. Firmy w takim układzie miałyby ewidentny zysk - filtrację najlepszych oraz ewidentny wpływ na to w jakim kierunku szkoleni są studenci, uczelnie wzbogaciłyby znacząco swoją ofertę edukacyjną, takie studia nie byłyby tanie, jednakże ich unikatowy charakter gwarantowałby praktycznie zatrudnienie w branży po ukończeniu. Ścisła współpraca doprawiłaby majonez teorii szczyptą (albo i garścią) pieprzu praktyki - tak potrzebnej w tym dość specyficznym zawodzie.</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com1tag:blogger.com,1999:blog-13838352.post-23297094394308681962010-10-22T21:04:00.017+02:002010-10-22T21:20:00.095+02:00Co to jest Ꭰ:ᏲᏍᏗ?Firefox od czasu aktualizacji do Ubuntu 10.10 tak właśnie wita mnie na ekranie wyszukiwarki Google. Ten dziwny ciąg znaczków ma oznaczać guzik "Szukaj" - niby fajnie, tylko czemu akurat tak? Poszukiwanie rozwiązania prowadzi do wniosku, że ten szatański zestaw znaków jest zapisany w języku indian Cherokee. Tylko, na brud na klawiaturze, czemu akurat ten język. Rozwiązanie zagadki siedzi w oknie dialogowym wyboru języków (Edycja -> Preferencje - Zakładka Treść):
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/_8qpf_sM92lk/TMHhhYVwaLI/AAAAAAAAHJg/cFyWIr1vpM0/s1600/firefox_weird_languages.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="303" src="http://4.bp.blogspot.com/_8qpf_sM92lk/TMHhhYVwaLI/AAAAAAAAHJg/cFyWIr1vpM0/s320/firefox_weird_languages.png" width="320" /></a></div>
Zapis chrome jest mylnie interpretowany jako oznaczenie ISO języka Cherokee. Wywalam błędny wpis, dodaje "pl" i "en" (w tej kolejności) i tadam! Mam odpowiedni język wybrany.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-90769300585874708402010-10-21T19:18:00.000+02:002010-10-21T19:18:59.821+02:00Kawa - zbawicielka świata<div style="text-align: justify;"><cite>Pewnemu uczonemu udało się odkryć nową własność w kawie, od wielu lat znanej już w Europie. Doktor Szalian uważa, że kretynizm (osłabienie umysłu bliskie głupowatości) od dwudziestu lat znacznie się zmniejsza w okręgu Briantońskim; tłumaczy to powszechnym użyciem kawy, w ubogich nawet chatach. Kawa ma własność ożywiania omdlałego ciała i ożywiania mózgu u osób, usposobionych do kretynizmu.</cite></div>
<br />
"Opiekun domowy" z roku 1866, numer trzeci<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-63682892928308756252010-10-06T22:59:00.000+02:002010-10-06T22:59:50.377+02:00Kisiel w wannie<div style="text-align: justify;">
Ile mąki trzeba by wypełnić wannę kisielem? W przepisie, oprócz zwyczajowego ple, ple, ple jest też taka informacja:</div>
<br />
<cite>dwie łyżki mąki na dwie szklanki wody</cite><br />
Czyli:<br />
30g na 0.5l wody / 60g na 1l wody<br />
<br />
<div style="text-align: justify;">
Typowa wanna ma około 200 litrów pojemności (moja ma 120 bo jest taka mała), żeby siedząc w niej być otoczonym kisielem, trzeba odjąć od pojemności tyle litrów wody ile się waży (prawo Archimedesa). Powinno wystarczyć jakieś 80 litrów kisielu by być zanurzonym w nim po szyję, czyli jakieś 4.5 kilograma mąki (co prawda na zdrowy rozsądek nie ma sensu wypełniać wanny wyżej niż w 1/3, jednak cytując mistrza: "jak się nie wyleje, znaczy za mało nalane").</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pamiętaj, aby doprawić kisiel sokiem w ulubionym smaku!</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com2tag:blogger.com,1999:blog-13838352.post-78905672681457201942010-10-06T10:16:00.000+02:002010-10-06T10:16:01.646+02:00IBM w Rzeszowie?<div style="text-align: justify;">
W branży krąży plotka, że w Rzeszowie (najprawdopodobniej w strefie ekonomicznej na Jasionce) będzie inwestował sam wielki IBM. Plotki te, podchwyciły niektóre <a href="http://www.mmrzeszow.pl/artykul/co-robil-ibm-w-rzeszowie-212385.html" rel="nofollow">lokalne portale</a>, kierując się własnymi informacjami na temat spotkania przedstawicieli firmy z władzami lokalnymi. Wypowiadane jest to najczęściej z przeświadczeniem, że wejście takiego giganta na lokalny rynek pracy spowoduje jego natychmiastowe wywrócenie, wywinduje pensje i uczyni z nas, ludu IT krezusów. Przy czym ignoruje się zupełnie doświadczenia innych miast: Łodzi z Dellem (sprzedanym ostatnio po wycyckaniu miejskiej kasy chińczykom), Tychów z Fiatem (który uciekł do Włoch z powodów politycznych). Wszystkie tego typu inwestycje nie są realizowane po to, by poszukiwać najlepszych pracowników, tylko dlatego, że w danym miejscu pracownicy są najtańsi, a miasto najbardziej chojne.</div>
<div style="text-align: justify;">
<br />
Nikt nie inwestuje po to, by czynić niebo na ziemi, tylko po to by zarobić więcej. Nic się nie zmieni na rynku pracy, najwyżej część absolwentów zamiast wyjeżdżać zostanie by pracować za tysiąćczysta z wielkim koncernem.</div>
<div style="text-align: justify;">
<br /></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-22362607809720413092010-10-03T18:42:00.001+02:002010-10-05T22:11:36.029+02:00Niechciane funkcjonalności<cite>- Mam taką delikatną sprawę. Zdjęcia komórką umiesz pan robić?<br />- Panie, jak nie jak tak. Pewnie, że umiem. Nawet dzisiaj, żem se zrobił jedno zdjęcie, jak gołębie se srali.</cite>
<div style="text-align: justify;">
Jest pakiet funkcji które każdy nowoczesny przedmiot masowego pożądania musi posiadać. Ten zasób funkcji powiększa się z każdym rokiem, o rzeczy coraz bardziej odległe od pierwotnego zamierzenia. W czasach gdy kobiety były kobietami, mężczyźni mężczyznami, a koń był taki jak każdy widzi, telefony służyły głównie do dzwonienia, później niektórzy wpadli na pomysł, żeby dołożyć krótkie wiadomości tekstowe. Potem poszło z górki, kalendarze, budziki, notatki głosowe. Super, nie można się obejść bez możliwości nagrywania notatek głosowych, sprawa gardłowa - ta funkcjonalność jest dostępna w każdym telefonie.
Tu dochodzimy do czegoś, czym jedni producenci telefonów pragną odróżnić się od drugich. Aparat fotograficzny o mocy piętnastu ochtylionów megapikseli. Przejrzałem specjalnie swój folder zrobionych zdjęć w telefonie i wyszło mi, że robiłem mniej niż jedno zdjęcie tygodniowo. W przypadku prawdziwego aparatu ten współczynnik dochodzi do kilku zdjęć dziennie - nie porównując jakości.
Telefon komórkowy pozbawiony tych wszystkich bajerów, wyposażony w pikselowy, najprostszy wyświetlacz potrafi być aktywny tygodniami (miesiącami), nowoczesne telefony trzeba ładować najrzadziej raz na tydzień (a często jest to codziennie).
Przypomina to trochę rozwój motoryzacji, na samym początku samochody były napędzane nastokonnymi silnikami, w Polonezie silnik ma moc 75 koni mechanicznych (niektóre kosiarki dysponują większą mocą). Teraz samochody są wyposażone w potężne jednostki, jednak spalanie nie spadło, nie wzrosła też prędkość maksymalna. Tylko wszystko stało się większe, cięższe, wypełnione bajerami. Dochodzi do wynaturzonej hedonizacji funkcji, odchodzimy od pierwotnych założeń, tracimy cel z oczu.
Gdzie leży granica? W którym momencie dojdzie do załamania tego pędu we wzbogacaniu przedmiotów o możliwości? Czy unifikacja jest końcową granicą? Czy dojdzie do zaniku większości elektronicznych gadżetów i zostanie tylko jeden przenośny mikrokomputer którym będzie można zrobić wszystko?
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Wieki temu, gdy byłem szczylem, a w telewizji zaczęły pojawiać się reklamy przeróżnych rzeczy, między innymi pieluch zauważyłem dziwną rzecz. Sztuczne pieluchy istnieją już ponad sześćdziesiąt lat i jak oni są w stanie co pół roku wymyślić coś nowego, niesamowicie rewolucyjnego. No jak? Jak to się dzieje, że co pół roku widzę rewolucję w pieluchach. Czy jest tak już od pół wieku i ile to jeszcze potrwa?</div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-13838352.post-74457936410556615192010-09-05T15:32:00.000+02:002010-09-05T15:32:07.432+02:00Ymiana klawiaturzCzyżbyś miał zamienione "Y" z "Z"? Jeśli stało się to nagle, niespodziewanie i nie wiesz dlaczego spróbuj wcisnąć Ctrl+Shift. Spowoduje to przełączenie strony kodowej z maszynistki (214) na programistę. Jeśli nie pomogło, szukaj dalej.<br />
<br /><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-9747050715130280";
/* Półbaner dla RSS */
google_ad_slot = "7683420582";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymousnoreply@blogger.com7