<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5563204686857933528</id><updated>2011-09-06T16:15:07.817+03:00</updated><category term='Python'/><category term='Unix'/><category term='Performance'/><category term='Addin'/><category term='grub'/><category term='ogg'/><category term='web'/><category term='vga'/><category term='MacOS'/><category term='mencoder'/><category term='моно'/><category term='flock'/><category term='LDAP'/><category term='помилки'/><category term='Linux'/><category term='browser'/><category term='ATI'/><category term='Qt'/><category term='video'/><category term='Qt4'/><category term='Radeon'/><category term='Mono'/><category term='QtEmbedded'/><category term='Dual head'/><category term='X11'/><title type='text'>Програмування. Linux Unix - C++ Qt</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-1481425401254612855</id><published>2011-09-05T15:23:00.001+03:00</published><updated>2011-09-06T16:15:07.819+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt4'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>Як швидко зобразити видимість прозорого кольору у вашому Qt image viewer</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Необхідність вигадати цей велосипед виникла коли я вирішив додати блиску для власної &lt;a href="http://sourceforge.net/p/mockuptools/home/Home/"&gt;утиліти що спрощує процес вирізання окремих текстур з cut images.&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Виявляється алгоритм побудови такого зображення є дуже простим.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Oh6URLpmvYg/TmS8T1fbuNI/AAAAAAAAFK8/4hy7OEWTwME/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Oh6URLpmvYg/TmS8T1fbuNI/AAAAAAAAFK8/4hy7OEWTwME/s1600/Screenshot-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: olive;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: olive;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: olive;"&gt;void&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: purple;"&gt;ImageWidget&lt;/span&gt;&lt;span style="color: black;"&gt;::&lt;/span&gt;&lt;span style="color: black; font-style: italic;"&gt;paintEvent&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: purple;"&gt;QPaintEvent&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;*&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;event&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: purple;"&gt;QPainter&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;painter&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: olive;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;const&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: purple;"&gt;QRect&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;area&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;event&lt;/span&gt;&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;rect&lt;span style="color: black;"&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;const&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: olive;"&gt;int&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: navy;"&gt;8&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;int&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;area&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;left&lt;span style="color: black;"&gt;()%&lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;)*&lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;int&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;y&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;area&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;top&lt;span style="color: black;"&gt;()%&lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;)*&lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;while&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;y&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;area&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;bottom&lt;span style="color: black;"&gt;())&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;        &lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: navy;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;        &lt;/span&gt;&lt;span style="color: olive;"&gt;while&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;area&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;right&lt;span style="color: black;"&gt;())&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;            &lt;/span&gt;&lt;span style="color: olive;"&gt;const&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: purple;"&gt;QColor&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;fill&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;((&lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: black;"&gt;+&lt;/span&gt;&lt;span style="color: black;"&gt;y&lt;/span&gt;&lt;span style="color: black;"&gt;)/&lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;)%&lt;/span&gt;&lt;span style="color: navy;"&gt;2&lt;/span&gt;&lt;span style="color: black;"&gt;?&lt;/span&gt;&lt;span style="color: purple;"&gt;Qt&lt;/span&gt;&lt;span style="color: black;"&gt;::&lt;/span&gt;&lt;span style="color: purple;"&gt;gray&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;span style="color: purple;"&gt;Qt&lt;/span&gt;&lt;span style="color: black;"&gt;::&lt;/span&gt;&lt;span style="color: purple;"&gt;lightGray&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;painter&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;fillRect&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;y&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;fill&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;x&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;+=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;        &lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;        &lt;/span&gt;&lt;span style="color: black;"&gt;y&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;+=&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;square&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;По моєму вийшло досить лаконічно і дуже непогано.&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;Попередження: в реальних проектах де потрібно дотримуватися мінливих вимог дизайнерів краще використати QPainter::fillRect( ,QBrush(QPixmap));&lt;/pre&gt;&lt;pre style="text-indent: 0px;"&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-1481425401254612855?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/1481425401254612855/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2011/09/qt-image-view.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1481425401254612855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1481425401254612855'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2011/09/qt-image-view.html' title='Як швидко зобразити видимість прозорого кольору у вашому Qt image viewer'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Oh6URLpmvYg/TmS8T1fbuNI/AAAAAAAAFK8/4hy7OEWTwME/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6105680491443287585</id><published>2011-01-21T04:04:00.004+02:00</published><updated>2011-01-21T04:10:05.819+02:00</updated><title type='text'>А ще ось таке юзабіліті ...</title><content type='html'>&lt;div&gt;Суть &lt;a href="http://discussions.europe.nokia.com/t5/Other-Nokia-Phones/S40-call-log-complaint/m-p/556740/highlight/true#M64936"&gt;проблеми&lt;/a&gt;: нові телефони нокії з їхніми новими сімбіанами &lt;a href="http://discussions.europe.nokia.com/t5/Eseries-and-Communicators/E52-how-to-see-missed-calls-details/m-p/560507/highlight/true#M51156"&gt;не показують&lt;/a&gt;  достатньо інформації в журналі викликів. Немає ні номера телефону ні тривалості розмови. На додачу якщо один і то й же номер телефонував або викликався двічі+ буде показано тільки останній запис. &lt;/div&gt;&lt;div&gt;Всі налаштування складаються з вибору розміру журналу - максимум 30 днів !!!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;На різних форумах в тому числі й офіційних є купа повідомлень подібних до мого, але на жодне з них не дала відповідь якась псевдо офіційна особа.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Якийсь розумник - юзабіліті спеціаліст знайшовся щоб вигадати таке, а щоб пояснити людям ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Можна миритися з відсутністю номера і тривалості але Журнал який ховає якісь записи і не показує _все_ що в нього записують не може називатися журналом.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Раніше коли я думав що це дістає тільки мене було трохи спокійніше, тепер мене це бісить. Може завтра пройде.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6105680491443287585?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6105680491443287585/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2011/01/blog-post.html#comment-form' title='3 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6105680491443287585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6105680491443287585'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2011/01/blog-post.html' title='А ще ось таке юзабіліті ...'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6001926051991920764</id><published>2009-02-19T18:30:00.007+02:00</published><updated>2009-02-19T19:18:42.636+02:00</updated><title type='text'>Перестановка пріоритетів</title><content type='html'>Опис проблеми перестановки пріоритетів в багатозадачних системах (програмах).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Проблема&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В плануванні, термін перестановка пріоритетів описує ситуацію коли менш пріоритетне завдання блокує спільні ресурси які необхідні більш пріоритетному завданню. Це призводить блокування більш пріоритетних завдань до тих пір, поки завдання з нижчим пріоритетом розблокує ресурси, насправді "інвертуючи" відносні пріоритети цих двох завдань. Якщо ж в цей час спробує виконатись інше середньо пріоритетне завдання, що не залежить від спільного ресурсу, воно отримає перевагу над менш та більш пріоритетними завданнями.&lt;br /&gt;&lt;br /&gt;В деяких ситуаціях перестановка пріоритетів може і не викликати видимих проблем. Проте існує багато ситуацій коли перестановка пріоритетів може призвести до серйозних проблем. Якщо пріоритетне завдання залишиться знемагати без ресурсів, це може привести до несправностей або виклику коректуючих дій, так &lt;a href="http://en.wikipedia.org/wiki/Watchdog_timer" title="Watchdog timer"&gt;watch dog timer&lt;/a&gt; (пильнуючий таймер) може перевантажити всю систему якщо процес не відповідає вчасно. Проблема що виникла у Mars lander "&lt;a href="http://en.wikipedia.org/wiki/Mars_Pathfinder" title="Mars Pathfinder"&gt;Mars Pathfinder&lt;/a&gt;" є класичним прикладом перестановки пріоритетів в системах реального часу.&lt;br /&gt;&lt;br /&gt;Перестановка пріоритетів також може зменшити &lt;a href="http://en.wikipedia.org/wiki/Perceived_performance"&gt;видиму продуктивність&lt;/a&gt; системи.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Рішення&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Про існування цієї проблеми відомо з 1970-х, але досі не існує повноцінного методу передбачення таких ситуацій. Основними методами боротьби з цією проблемою є:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Відключення всіх переривань для захисту критичних секцій&lt;/span&gt;&lt;br /&gt;Коли відключення всіх переривань використовується для недопущення перестановки пріоритетів існує тільки два типи пріоритетів: &lt;span style="font-style: italic;"&gt;резервуючий&lt;/span&gt; та &lt;span style="font-style: italic;"&gt;блокуючий переривання&lt;/span&gt;. Без третього пріоритету перестановка неможлива. Оскільки є тільки один шматок заблокованих даних, хаотичне впорядкування неможливе, тому неможливим стає взаємне блокування (deadlock). Оскільки критичні процеси завжди добігають до завершення зависання не трапляється. Слід пам'ятати що це спрацює тільки якщо всі перериваня відключенні. Коли відключенні тільки деякі  апаратні переривання, перестановка пріоритетів відтвориться через пріоритизацію апаратних переривань. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Максимізація пріоритетів. &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;(A &lt;span class="mw-redirect"&gt;priority ceiling&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;Із збільшенням пріоритетів до верхньої межі спільний блокуючий процес (що виконує системний код) сам має специфічний (високий) пріоритет, який також присвоєний завданню що тримає блок. Це працює добре не дозволяючи іншим високо пріоритетним завданням мати пріоритет вищий максимального.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Успадкування пріоритетів&lt;/span&gt;&lt;br /&gt;За правилами успадкування пріоритетів, якщо високо-пріоритетне завдання має чекати на певний ресурс розділений з менш пріоритетним завданням, мало пріоритетному завданню присвоюється найбільший пріоритет з очікуючих завдань на час використання ним спільних ресурсів, таким чином дозволяючи завданням з середніми та високими &lt;span style="font-weight: bold;"&gt;пріоритетами уникати затримок (первісно) мало пріоритетного завдання.&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Цікаво знати:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Resource_starvation" title="Resource starvation"&gt;Starvation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pre-emptive_multitasking" title="Pre-emptive multitasking" class="mw-redirect"&gt;Pre-emptive multitasking&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms" title="Lock-free and wait-free algorithms" class="mw-redirect"&gt;Lock-free and wait-free algorithms&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Non-blocking_synchronization" title="Non-blocking synchronization"&gt;Non-blocking synchronization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Read-copy-update" title="Read-copy-update"&gt;Read-copy-update&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Priority_inheritance" title="Priority inheritance"&gt;Priority inheritance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Priority_ceiling" title="Priority ceiling" class="mw-redirect"&gt;Priority ceiling&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Nice_%28Unix%29" title="Nice (Unix)"&gt;Nice (Unix)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6001926051991920764?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6001926051991920764/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2009/02/blog-post.html#comment-form' title='2 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6001926051991920764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6001926051991920764'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2009/02/blog-post.html' title='Перестановка пріоритетів'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-3328349591744941480</id><published>2008-12-02T15:49:00.002+02:00</published><updated>2008-12-02T15:53:55.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QtEmbedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt4'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>Як це: "Qt Embedded для Linux" початківцям</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Еволюція&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="external-link" href="http://trolltech.com/products/appdev/developer-tools/developer-tools?currentflipperobject=73543fa58dda72c632a376b97104ff78"&gt;&lt;img src="http://trolltech.com/images/products/qt-designer-icon/image_thumb" class="image-inline" src="http://trolltech.com/images/products/qt-designer-icon/image_thumb" alt="Icon - Qt Designer" /&gt; &lt;/a&gt;&lt;img src="http://trolltech.com/images/qt-in-use/devices/WebPic_Motorola.jpg" style="width: 131px; height: 131px;" class="image-inline" src="http://trolltech.com/images/qt-in-use/devices/WebPic_Motorola.jpg" alt="Device - MOTOMING A1200 blue box 120px" /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Після того як Trolltech був поглинутий Noki-єю та став Qt Software графічні та мультимедійні можливості &lt;a href="http://trolltech.com/"&gt;цього кросплатформеного фреймворку&lt;/a&gt; значно розширилися. І хоч &lt;a href="http://trolltech.com/products/device-creation"&gt;Qt for device creation&lt;/a&gt;  існували під різними назвами вже давно позитивні зрушення стали зараз особливо помітними.&lt;br /&gt;&lt;/div&gt;&lt;blockquote cite="http://trolltech.com/products/device-creation/videos/qt-running-on-three-different-mobile-oss"&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" title="Натисніть тут, щоб заблокувати цей об’єкт" class="abp-objtab-04205504465299472 visible ontop" href="http://www.youtube.com/v/Qhba1lhBllM"&gt;&lt;/a&gt;&lt;embed src="http://www.youtube.com/v/Qhba1lhBllM" type="application/x-shockwave-flash" wmode="transparent" height="196" width="240"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Qt Running on Three Different Mobile OS's&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Збільшилася кількість мультимедійних модулів, анонсовано підтримку на Symbian S60 а це вже понад 8 млн.  проданих пристроїв.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Вантажимо, Компілимо&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;, Запускаємо&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Завдяки власній системі збірки програмних продуктів дуже рідко виникають проблеми, але QtEmbedded виявився не таким інтуїтивним, і тому й з'явився цей допис. Він розрахований на людей які пробували свої сили на Qt for Desktop та хочуть так само відчути на дотик QtEmbedded.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://doc.trolltech.com/4.4/images/qt-embedded-pda.png" src="http://doc.trolltech.com/4.4/images/qt-embedded-pda.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Більшісь коду ваших стандартних додатків не доведеться переписувати для мобільних притроїв крім очевидно інтерфейсів. Але 1) необхідна "особлива" версія Qt; 2) потрібний емулятор/термінал для відображення і вхаємодіїї з мобільним софтом. 3) Linux.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Отож по порядку:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Вантажимо &lt;a href="http://trolltech.com/downloads/opensource/appdev"&gt;Qt for ApplicationDevelopment&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Це необхідно для того щоб зібрати віртуалний фреймбуфер. Адже він повинен запускатися на вашому звичайному комп'ютері.&lt;br /&gt;&lt;/div&gt;&lt;pre  style="font-family:Courier;"&gt;&lt;span style="font-size:100%;"&gt;cd path/to/Qt/tools/qvfb&lt;br /&gt;make&lt;br /&gt;./qvfb&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/OleksandrOmelchuk/Share" title=""&gt;&lt;img src="http://lh3.ggpht.com/_DV1cG9grhhU/STU6TSMA74I/AAAAAAAACI4/JYGZhuVvhx8/s128/%D0%95%D0%BA%D1%80%D0%B0%D0%BD-Virtual%20framebuffer%20240x320%2032bpp%20Display%20%3A0%20Rotate%200-1.png" alt="" src="http://lh3.ggpht.com/_DV1cG9grhhU/STU6TSMA74I/AAAAAAAACI4/JYGZhuVvhx8/s128/%D0%95%D0%BA%D1%80%D0%B0%D0%BD-Virtual%20framebuffer%20240x320%2032bpp%20Display%20%3A0%20Rotate%200-1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Вантажимо &lt;a href="http://trolltech.com/downloads/opensource/device"&gt;Qt Embedded Opensource&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:Courier;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;cd path/to/QtEmbedded &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="font-family:Courier;"&gt;./configure -qvfb &lt;/span&gt; &lt;span style="font-family:Courier;"&gt;make&lt;/span&gt;&lt;/span&gt;&lt;a href="http://trolltech.com/downloads/opensource/device"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Запускаємо&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Courier;"&gt;./dragdroprobot -qws&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/OleksandrOmelchuk/Share" title=""&gt;&lt;img src="http://lh5.ggpht.com/_DV1cG9grhhU/STU6TDlziAI/AAAAAAAACIw/IzRAaj_RkfQ/%D0%95%D0%BA%D1%80%D0%B0%D0%BD-Virtual%20framebuffer%20240x320%2032bpp%20Display%20%3A0%20Rotate%200.png" alt="" src="http://lh5.ggpht.com/_DV1cG9grhhU/STU6TDlziAI/AAAAAAAACIw/IzRAaj_RkfQ/%D0%95%D0%BA%D1%80%D0%B0%D0%BD-Virtual%20framebuffer%20240x320%2032bpp%20Display%20%3A0%20Rotate%200.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Корисно прочитати:&lt;br /&gt;&lt;a href="http://doc.trolltech.com/4.4/qvfb.html"&gt;http://doc.trolltech.com/4.4/qvfb.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-3328349591744941480?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/3328349591744941480/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/12/qt-embedded-linux.html#comment-form' title='3 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/3328349591744941480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/3328349591744941480'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/12/qt-embedded-linux.html' title='Як це: &quot;Qt Embedded для Linux&quot; початківцям'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_DV1cG9grhhU/STU6TSMA74I/AAAAAAAACI4/JYGZhuVvhx8/s72-c/%D0%95%D0%BA%D1%80%D0%B0%D0%BD-Virtual%20framebuffer%20240x320%2032bpp%20Display%20%3A0%20Rotate%200-1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-8291364593674915482</id><published>2008-11-05T16:38:00.001+02:00</published><updated>2008-11-05T16:40:49.798+02:00</updated><title type='text'>Додана кнопка "Планети разработчиков"</title><content type='html'>&lt;a href="http://www.developers.org.ua/"&gt;&lt;img src="http://www.developers.org.ua/static/images/planet/80x15_orange.gif" alt="Участник планеты Developers.org.ua" src="http://www.developers.org.ua/static/images/planet/80x15_orange.gif" height="15" width="80" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Додана кнопка "Планети разработчиков"&lt;br /&gt;Інтегруємося у спільноту!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-8291364593674915482?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/8291364593674915482/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/11/blog-post.html#comment-form' title='1 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8291364593674915482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8291364593674915482'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/11/blog-post.html' title='Додана кнопка &quot;Планети разработчиков&quot;'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-8070353470930441856</id><published>2008-10-09T11:37:00.001+03:00</published><updated>2008-10-09T11:37:28.605+03:00</updated><title type='text'>Автоматичний переклад веб сторінок на Українську</title><content type='html'>Всі мабуть вже знають про &lt;a href="http://translate.google.com/translate_t?hl=ua#"&gt;http://translate.google.com/&lt;/a&gt; , і про те що нещодавно туди додана підтримка української мови.&lt;br /&gt;&lt;br /&gt;Швидко перекласти &lt;span style="text-decoration: underline;"&gt;всю сторінку на українську&lt;/span&gt; можна додавши в закладки &lt;span style="font-weight: bold; font-style: italic;"&gt;Firefox&lt;/span&gt; такий рядочок:&lt;br /&gt;&lt;br style="text-decoration: underline; font-style: italic;" /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;javascript:document.location.replace("http://209.85.135.104/translate_c?hl=uk&amp;amp;sl=auto&amp;amp;tl=uk&amp;amp;u="+document.location);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Найкраще розмістити це десь на панелі закладок.&lt;br /&gt;&lt;br /&gt;  &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-8070353470930441856?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/8070353470930441856/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/10/blog-post.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8070353470930441856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8070353470930441856'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/10/blog-post.html' title='Автоматичний переклад веб сторінок на Українську'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-2616661432177731946</id><published>2008-09-25T13:25:00.001+03:00</published><updated>2008-09-25T13:25:59.375+03:00</updated><title type='text'>Gentoo на довго</title><content type='html'>&lt;a href="http://linux.org.ua/cgi-bin/yabb/YaBB.pl?action=viewprofile;username=serg_ik" rel="nofollow"&gt;&lt;b&gt;Сергій Лисовенко&lt;/b&gt;&lt;/a&gt; радить:&lt;br /&gt;&lt;br /&gt;AntonG, беріть 4 - гирну флешку - скину вам дистфайли (з купою сміття) і дерево портів. &lt;br /&gt;І одна маленька порада для початківців: дженту краще починати ставити з вже встановленого іншого дистрибутиву (чрутитись і бавитись). &lt;br /&gt;Все робиться так:&lt;br /&gt;1) ставимо якийсь інший дистр наприклад, Федору&lt;br /&gt;2) в домашньому розділі (припускається, що вінт розбитий на рута, домашку і своп) створюєм каталог gentoo.&lt;br /&gt;3) розпаковуєм туди stage 3 (про це вже детальніше на сторінках підручника дженти), ставим портаж, засипаєм весь мотлох. який можна засипати (дистфайли маю на увазі)&lt;br /&gt;4) монтуєм і чрутимся, так , як це описано в підручнику дженти &lt;a href="http://www.gentoo.org/doc/en/handbook/index.xml" target="_blank"&gt;http://www.gentoo.org/doc/en/handbook/index.xml&lt;/a&gt;&lt;br /&gt;5) компілимо все для свого задоволення і паралельно насолоджуємся роботою за тим лінуксом, якого встановили&lt;br /&gt;6) наводим марафет в файлах fstab, passwd та інших - підадміністровуєм одним словом&lt;br /&gt;7) завантажуємось з дистрибутивного диска в режимі рятувальника, монтуєм рутовий розділ, командою &lt;tt&gt;rm -rf&lt;/tt&gt; зносимо з нього всі папки крім &amp;nbsp;/&lt;span style="color: rgb(0, 0, 0);"&gt;boot&lt;/span&gt; , /&lt;span style="color: rgb(0, 0, 0);"&gt;lost+found&lt;/span&gt;, /&lt;span style="color: rgb(0, 0, 0);"&gt;lib&lt;/span&gt;/&lt;span style="color: rgb(0, 0, 0);"&gt;modules&lt;/span&gt;. Після чого монтуєм домашку і копіюєм все з папки дженти, крім boot (думаю, не треба казати, що це робиться банальним &lt;tt&gt;cp -r&lt;/tt&gt; )&lt;br /&gt;8) завантажуємось з вінта, якщо зроблено все правильно - має почати вантажитись - залишиться лише підмарафетити ікси (не забудьте їх попередньо скомпілювати).&lt;br /&gt;&lt;br /&gt;таким чином трафік можна під час інсталяції тягнути кілька місяців, не боятись за перебір, не чекати тиждень (чи пару днів) поки за компом можна буде нормально працювати.&lt;br /&gt;&lt;br /&gt;Взято з http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1220690222&lt;br /&gt;  &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-2616661432177731946?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/2616661432177731946/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/09/gentoo.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/2616661432177731946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/2616661432177731946'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/09/gentoo.html' title='Gentoo на довго'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-2503917674040328057</id><published>2008-08-21T13:02:00.008+03:00</published><updated>2008-08-21T13:29:11.205+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt4'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Google-pertools для аналізу Qt4 програм з Unix</title><content type='html'>&lt;a href="http://goog-perftools.sourceforge.net/"&gt;Google-pertools&lt;/a&gt;  проект створений для виявлення, аналізу та видалення готових програм на проблеми повязані з виділенням пам'яті або швидкодією.&lt;br /&gt;&lt;br /&gt;Проаналізувати швидкодію своєї просрами можна так:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Програма має бути злінкована з -lprofeler. Додайте до свого .pro файлу рядок&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LIBS += -lprofiler&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Зкомпілюйте як завжди qmake &amp;amp;&amp;amp; make&lt;/li&gt;&lt;li&gt;Запускаємо і виконуємо критичні для швидкодії дії що підлягають аналізу:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ CPUPROFILE=&lt;otput_file_name.prof&gt; ./some_executable&lt;/otput_file_name.prof&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Генеруємо звіт у зручному для вас форматі:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pprof --ps ./some_executable otput_file_name.prof &gt; report.ps&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;Доступні формати: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;   --text              Generate text report   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;   --gv                Generate Postscript and display&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;   --list=&lt;regexp&gt;     Generate source listing of matching routines&lt;/regexp&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;    --disasm=&lt;regexp&gt;   Generate disassembly of matching &lt;/regexp&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;regexp&gt;routines&lt;/regexp&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;    --dot               Generate DOT file to stdout&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;    --ps                Generate Postcript to stdout&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;    --pdf               Generate PDF to stdout&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;    --gif               Generate GIF to stdout&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:courier new;"&gt;Має вийти щось типу&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://goog-perftools.sourceforge.net/doc/pprof-vsnprintf.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 343px; height: 272px;" src="http://goog-perftools.sourceforge.net/doc/pprof-vsnprintf.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-2503917674040328057?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/2503917674040328057/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/08/google-pertools-qt4-unix.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/2503917674040328057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/2503917674040328057'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/08/google-pertools-qt4-unix.html' title='Google-pertools для аналізу Qt4 програм з Unix'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-1153580005869455470</id><published>2008-06-25T15:23:00.001+03:00</published><updated>2008-06-25T15:23:29.793+03:00</updated><title type='text'>DNS сервер для динамічних IP адрес.</title><content type='html'>У наш час не рідкими стали варіанти підключення до безлімітних пакетів. Чому б не тримати свій домашній комп'ютер увінкненим і не отримати доступ до персональних файлів з будь-якого кутка світу (роботи).&lt;br /&gt;&lt;br /&gt;ВСЕ ПРОСТО!&lt;br /&gt;&lt;br /&gt;Треба мати постійний ідентифікатор в мережі (IP адресу 127.0.0.1) або ім'я (DNS example.com ).&lt;br /&gt;&lt;br /&gt;Але ж провайдер в будьякому випадку дає вам якусь IP адресу. Роботу ускладнює тільки те що вона постійно змінюється, або провайдер інтернет не дає гарантії що вона не зміниться.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Проблему можна вирішити за допомогою &lt;a href="http://www.dyndns.com/services/dns/dyndns/"&gt;DynDNS&lt;/a&gt;  сервіса. Ідея проста: кожного разу коли ваш домашній сервер входить у мережу інтернет інформація про вашу IP адресу поновлюється на &lt;a href="http://uk.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%96%D0%BC%D0%B5%D0%BD"&gt;DNS сервері&lt;/a&gt; і будь хто може встановити прямий зв'язок з вашим комп'ютером.&lt;br /&gt;&lt;br /&gt;Наприклад побачити/показати свою персональну сторінку ви зможете набравши в рядку адреси свого оглядача інтернет http://mycomputername.homeip.net/ або щось інше із їхнього списку &lt;a href="http://www.dyndns.com/services/dns/dyndns/domains.html"&gt;стандартних доменних імен&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для поновлення данних вже написано досить багато &lt;a href="http://www.dyndns.com/support/clients/"&gt;софта&lt;/a&gt; для &lt;a href="http://www.dyndns.com/support/clients/windows.html"&gt;Windows&lt;/a&gt; та &lt;a href="http://www.dyndns.com/support/clients/unix.html"&gt;Linux&lt;/a&gt;. Технологія випробувана багатьма користувачами за 10 років існування.&lt;br /&gt;&lt;br /&gt;Прошу вибачення якщо вам здається що стання про серйозні речі написана в ламерському тоні. Буду радий відповісти на ваші питання.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-1153580005869455470?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/1153580005869455470/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/06/dns-ip.html#comment-form' title='3 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1153580005869455470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1153580005869455470'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/06/dns-ip.html' title='DNS сервер для динамічних IP адрес.'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6805055011809475371</id><published>2008-05-20T18:22:00.001+03:00</published><updated>2008-05-20T18:22:36.459+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='vga'/><title type='text'>Frame buffer vga modes</title><content type='html'>&lt;p&gt;Here's a table showing frame buffer vga modes:&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;Color depth      | 640x480  800x600  1024x768 1280x1024&lt;br /&gt;-----------------+-------------------------------------&lt;br /&gt;256        (8bit)|  769      771       773      775&lt;br /&gt;32000     (15bit)|  784      787       790      793&lt;br /&gt;65000     (16bit)|  785      788       791      794&lt;br /&gt;16.7 Mill.(24bit)|  786      789       792      795&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6805055011809475371?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6805055011809475371/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/05/frame-buffer-vga-modes.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6805055011809475371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6805055011809475371'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/05/frame-buffer-vga-modes.html' title='Frame buffer vga modes'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6223972797423414509</id><published>2008-05-20T10:25:00.001+03:00</published><updated>2008-05-20T10:25:29.053+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Radeon'/><category scheme='http://www.blogger.com/atom/ns#' term='Dual head'/><category scheme='http://www.blogger.com/atom/ns#' term='ATI'/><title type='text'>Налаштовуємо Dual head для відеокрт фірми ATI</title><content type='html'>Оригінальне обговорення проблеми http://www.fedoraforum.org/forum/showthread.php?t=124634.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Отож &lt;br /&gt;&lt;b&gt;DUAL HEAD:&lt;/b&gt; Відкрийте термнал&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;su -&lt;/b&gt;&lt;br /&gt;Тепер введіть цей текст у термінал&lt;br /&gt;&lt;br /&gt;( Припускається що ви намагаєтесь налаштувати горизонтально розташовані монітори)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;aticonfig --dtop=horizontal --overlay-on=1&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;тоді&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;aticonfig --desktop-setup=horizontal&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Тепер перезавантажте X сервер.&lt;br /&gt;&lt;br /&gt;  &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6223972797423414509?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6223972797423414509/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/05/dual-head-ati.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6223972797423414509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6223972797423414509'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/05/dual-head-ati.html' title='Налаштовуємо Dual head для відеокрт фірми ATI'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-1520047671695135967</id><published>2008-05-08T10:17:00.001+03:00</published><updated>2008-05-08T10:24:20.729+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt4'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS'/><title type='text'>Встановлення Qt 4 на MacOS</title><content type='html'>Я не великий знавець MacOS 10.4.8 Tiger&amp;nbsp; і це є мій перший досвід роботи на цій ОС, та встановити Qt у мене вийшло.&lt;br /&gt;Для початку краще встановити якийсь файловий менеджер з двома панелями muCommander чи xFolders.&lt;br /&gt;На тій машині що мені дали уже був встановлений компілятор gcc-4.0.1&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="ftp://ftp.trolltech.com/qt/source/"&gt;Завантажуємо&lt;/a&gt; безкоштовну версію qt, краще в бінарній формі без рядка "src" в назві файлу.&lt;/li&gt;&lt;li&gt;Запускаєм інсталятор.&lt;/li&gt;&lt;li&gt;Все, готово!&lt;/li&gt;&lt;/ol&gt;Зкомпілювати щось можна командами&amp;nbsp; &lt;span style="font-weight: bold;"&gt;qmake -spec macx-g++ &lt;/span&gt;та&lt;span style="font-weight: bold;"&gt; make &lt;/span&gt;подібно Unix системам&lt;br /&gt;&lt;br /&gt;Але для повноцінного процесу розробки схоже не вистачає &lt;a href="https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19681"&gt;Apple Xcode&lt;/a&gt; набору інструментів.&lt;br /&gt;Щоб завантажити треба безкоштовно зареєструватися як "Розробник для Apple".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-1520047671695135967?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/1520047671695135967/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/05/qt-4-macos.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1520047671695135967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1520047671695135967'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/05/qt-4-macos.html' title='Встановлення Qt 4 на MacOS'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-8657799677712686600</id><published>2008-05-08T10:03:00.001+03:00</published><updated>2008-05-08T10:21:05.137+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X11'/><category scheme='http://www.blogger.com/atom/ns#' term='Dual head'/><category scheme='http://www.blogger.com/atom/ns#' term='ATI'/><title type='text'>Dual Head для Відеокарт ATI на комерційних драйверах Fglrx в Linux</title><content type='html'>Для Fedora Core дуже зручно використовувати менеджер пакунків &lt;span style="font-weight: bold;"&gt;yum&lt;/span&gt;&lt;br /&gt;Зпочатку встановіть yum-kmod розшорення а потім kmod-fglrx - комерційний ATI модуль ядра.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo yum install yum-kmod&lt;/span&gt;&lt;br style="font-weight: bold;" /&gt;&lt;span style="font-weight: bold;"&gt;sudo yum install kmod-fglrx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Всі комерційні драйвера доступні тільки з &lt;a href="http://rpm.livna.org/rlowiki/"&gt;livna&lt;/a&gt; репозиторію.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fedoraforum.org/forum/showthread.php?t=124634"&gt;Далі &lt;/a&gt;за допомогою livna-display-config графічної утиліти налаштовуємо що потрібно, зберігаємося, виконуємо 2 команди :&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;su -&lt;/span&gt;&lt;br /&gt;&lt;b&gt;aticonfig --dtop=horizontal --overlay-on=1&lt;br /&gt;&lt;/b&gt;&lt;b&gt;aticonfig --desktop-setup=horizontal&lt;/b&gt;&lt;br /&gt;і перезавантажуємо графічне середовище (може вистачити logout).&lt;br /&gt;&lt;br /&gt;Мій /etc/X11/xorg.conf&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp; &lt;br /&gt;# Xorg configuration created by system-config-display&lt;br /&gt;&lt;br /&gt;Section "ServerLayout"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Multihead layout"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Screen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp; "Screen0" LeftOf "Screen1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputDevice&amp;nbsp;&amp;nbsp;&amp;nbsp; "Keyboard0" "CoreKeyboard"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Xinerama" "on"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Clone" "off"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Files"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModulePath&amp;nbsp;&amp;nbsp; "/usr/lib/xorg/modules/extensions/nvidia"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModulePath&amp;nbsp;&amp;nbsp; "/usr/lib/xorg/modules"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Module"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "ServerFlags"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "AIGLX" "on"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "InputDevice"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp; "Keyboard0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Driver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "kbd"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "XkbModel" "pc105"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "XkbLayout" "us+inet"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp; "Monitor0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModelName&amp;nbsp;&amp;nbsp;&amp;nbsp; "LCD Panel 1280x1024"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HorizSync&amp;nbsp;&amp;nbsp;&amp;nbsp; 31.5 - 64.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VertRefresh&amp;nbsp; 56.0 - 65.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "dpms"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp;&amp;nbsp; "Monitor1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VendorName&amp;nbsp;&amp;nbsp; "Monitor Vendor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModelName&amp;nbsp;&amp;nbsp;&amp;nbsp; "LCD Panel 1280x1024"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HorizSync&amp;nbsp;&amp;nbsp;&amp;nbsp; 31.5 - 64.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VertRefresh&amp;nbsp; 56.0 - 65.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "dpms"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp; "Videocard0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Driver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "fglrx"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "AddARGBGLXVisuals" "True"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "OpenGLOverlay" "off"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "VideoOverlay" "on"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "DesktopSetup" "horizontal"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "OverlayOnCRTC2" "1"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier&amp;nbsp; "Videocard1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Driver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "fglrx"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "AddARGBGLXVisuals" "True"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "OpenGLOverlay" "off"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "VideoOverlay" "on"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "DesktopSetup" "horizontal"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "OverlayOnCRTC2" "1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BoardName&amp;nbsp;&amp;nbsp; "ATI Technologies Inc RV370 secondary [Sapphire X550 Silent]"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "PCI:1:0:1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Screen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier "Screen0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Device&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Videocard0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Monitor&amp;nbsp;&amp;nbsp;&amp;nbsp; "Monitor0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefaultDepth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubSection "Display"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Viewport&amp;nbsp;&amp;nbsp; 0 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Depth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Modes&amp;nbsp;&amp;nbsp;&amp;nbsp; "1280x1024" "1280x960" "1280x768" "1152x864" "1024x768" "800x600" "640x480" "640x400"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Identifier "Screen1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Device&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Videocard1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Monitor&amp;nbsp;&amp;nbsp;&amp;nbsp; "Monitor1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefaultDepth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubSection "Display"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Viewport&amp;nbsp;&amp;nbsp; 0 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Depth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Modes&amp;nbsp;&amp;nbsp;&amp;nbsp; "1280x1024"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Extensions"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Option&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Composite" "Enable"&lt;br /&gt;EndSection&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Шкода тільки що 3D ефекти Compiz&amp;nbsp; не запрацювали нормально.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-8657799677712686600?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/8657799677712686600/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/05/dual-head-ati-fglrx-linux.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8657799677712686600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8657799677712686600'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/05/dual-head-ati-fglrx-linux.html' title='Dual Head для Відеокарт ATI на комерційних драйверах Fglrx в Linux'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-1147693726959441760</id><published>2008-05-05T09:54:00.001+03:00</published><updated>2008-05-05T09:54:38.434+03:00</updated><title type='text'>Бази даних: ключі, індекси та складні запити.</title><content type='html'>&lt;font class="content"&gt;Цей урок містить досить багато теоретичного матеріалу, проте розуміння його досить важливе для ефективної роботи з базами даних, тому раджу пройти цей урок вдумливо та не поспішаючи. Деякі моменти можуть бути складними для розуміння, але при повторенні все має бути зрозумілим.&lt;/font&gt; &lt;p&gt;&lt;font class="content"&gt;До цих пір ми мали справу лише з одною таблицею у базі даних. Таблиця називалася mp3 та містила дані про mp3-файли деякої колекції. Я навмисне не став робити у цій таблиці поля, що містять ім’я виконавця або назву альбому для пісень, з одної причини.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Справа в тому, що таблиця бази даних має являти собою відображення деякої сутності реального світу. Такою сутністю є пісня у файлі mp3, виконавець або альбом. Тому має сенс виконавців та альбоми організувати у формі окремих таблиць та зв’язати з таблицею пісень через посилання. &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;font class="content"&gt;Звичайно так будують схеми баз даних, я поясню що означають елементи цієї схеми. &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Кожен великий прямокутник являє собою таблицю. На цій схемі їх три – mp3 (пісні у файлах mp3), albums (альбоми) та performers (виконавці).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Рядки у прямокутниках, позначені як “column” являють собою поля таблиці. Для таблиці mp3 це вже знайомі нам поля filename, title, filesize, bitrate та year. Також додане поле id, зараз поясню навіщо.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Оскільки таблиці певною мірою являють собою сукупність предметів або явищ реального світу, то об’єкти, що містяться в них, тобто рядки, мають бути унікальними. Дійсно, які б два предмети або явища ми не розглядали, між ними завжди є різниця, інакше це були б не два об’єкти, а один. Так само немає сенсу і в двох однакових рядках у таблиці, хоча, звісно, практично це можна зробити.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Для забезпечення унікальності у таблиці виділяють одне поле, що гарантовано є унікальним для таблиці і фактично визначає рядок. Це поле називають первинним ключем (primary key). На схемі первинний ключ позначається підкреслюванням та позначкою *PK.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;У багатьох випадках для таблиці важко або неможливо виділити первинний ключ із інформаційних полів. Як приклад можна розглянути базу даних співробітників якоїсь установи – якщо таблиця містить Ф.І.П. робітника, дату народження, відділ, спеціальність, то яке б поле ми не брали, воно не є гарантовано унікальним – цілком можливо, що у одному відділі будуть працювати двоє людей з однаковими даними. В такому випадку рядку таблиці присвоюють ідентифікатор – деяке число, унікальне для таблиці і роблять його первинним ключем. Так ми і зробили для таблиці mp3 – додали ще одне поле id та зробили його первинним ключем. Про поля perf_id та album_id – дещо пізніше.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Так само ми створили ще дві таблиці – виконавці performers з тим самим id та іменем чи назвою name і альбоми albums з id, назвою альбому title та роком виходу year.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;На схемі також видно стрілки, що показують зв’язки (залежності) між таблицями. Звісно, якщо є пісня, то вона може належати до якогось альбому. Так само вона належить якомусь виконавцеві. Для простоти задачі ми вважаємо, що пісня входить тільки до одного альбому і належить тільки одному виконавцеві. Тож до кожної пісні (рядку у таблиці mp3) ми можемо додати посилання на рядок у таблиці performers та посилання на рядок у таблиці albums. Цими посиланнями і є поля perf_id та album_id.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Якщо поле одної таблиці є посиланням на рядок у іншій таблиці, то таке поле називається зовнішнім ключем (foreign key, FK). Ця взаємодія показана у вигляді стрілки – наприклад, взаємодія таблиці mp3 з таблицею albums показана стрілкою до albums (поле у mp3 посилається на рядок у albums). Біля стрілки підписані назви ключів – зовнішній ключ у таблиці mp3 – FK_mp3_albums та первинний ключ у albums – UQ_albums_id. UQ (unique) вказує на те, що це поле унікальне (що завжди так для первинного ключа).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Числа біля стрілки (1 та 0..*) показують порядок зв’язку. так, порядок 0..*-1 означає, що одному рядку у таблиці albums відповідають нуль або більше рядків у таблиці mp3.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Також біля стрілки вказано, по яких полях іде зв’язок (album_id=id).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Тож нижче полів у прямокутниках таблиць (чорним кольором) записані ключі – первинні та зовнішні, а також ознака унікальності для первинного ключа.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;З ключами розібралися (якщо це не зовсім зрозуміло, раджу перечитати ще раз, тому що це досить важливо), тепер мова піде про індекси.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Уявіть собі, що вам потрібно працювати з деякою енциклопедією. Енциклопедія являє собою набір статей. Вам необхідно швидко знаходити потрібну статтю. У цьому випадку є сенс розташувати статті у алфавітному порядку. Так само якщо вам потрібно знаходити деяке слово всередині статті, то логічно мати у енциклопедії алфавітний покажчик.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Такі самі покажчики існують і в таблицях баз даних і звуться індексами. Іх дія прозора для користувача – індекс треба створити у таблиці тільки один раз, а далі сервер сам вирішує, як і коли ними користуватися. Розглянемо приклад с таблицею mp3. Для початку приведемо її до вигляду, що його ми розглядали на початку уроку. Додамо до таблиці поля id, album_id та perf_id у phpMyAdmin на закладці “Структура”.&lt;/font&gt;&lt;/p&gt;&lt;font class="content"&gt;Після створення полів видалимо всі записи з таблиці mp3 (закладка “очистити”). &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Після чого подумаємо, які індекси нам потрібні. Коли вирішують таке питання, то звичайно думають, які операції з виборки будуть проводитися над таблицею. По-перше, поле id є первинним ключем, а по ключовому полю завжди будується індекс, причому це особливий тип індексу – унікальний індекс. Якщо у таблиці є поле з унікальним індексом, то сервер не дозволить вставити у таблицю рядок зі значенням цього поля, що є у таблиці.&lt;/font&gt;&lt;/p&gt;&lt;font class="content"&gt;Оскільки ми маємо зв’язувати цю таблицю по полях album_id та perf_id з таблицями albums та performers, то нам необхідно буде робити виборки по цих полях. А отже, необхідні індекси для цих полів. Створення індексу по полю виконується у phpMyAdmin кліком по піктограммі зразу справа від піктограмми створення первинного ключа. Тож створимо індекси для цих двох полів. В результаті у списку індексів будемо мати: &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;На перший погляд може здатися, що оскільки створення індексу значно підвищує швидкість виборки з таблиці, то можна відразу створити індекси по усіх полях. Насправді це не дуже гарна ідея. Якщо розглянути приклад з енциклопедією, то індексація (тобто алфавітний покажчик чи розташування статей у алфавітному порядку) безперечно збільшує швидкість пошуку. Проте якщо стоіть задача додавання до енциклопедії нових статей, їх видалення або редагування, то більша частина часу цих операцій буде припадати саме на оновлення індексу – наприклад, додавання номера сторінки до багатьох позицій алфавітного покажчика. Так само відбувається і з таблицями баз даних. Що більше індексів має таблиця, то більша швидкість пошуку в ній, але й менша швидкість додавання, видалення та зміни рядків. Тож індекси доцільно створювати лише по тих полях, по яких безпосередньо йде пошук, а саме по тим, що будуть вказуватися у умові WHERE sql-запитів. Насправді швидкість виборки з таблиці по проіндексованому полю майже не залежить від кількості рядків у ній.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Тепер розглянемо запити не по одній таблиці, а по двох чи більше. Для цього створимо вже описані таблиці albums та performers. Для цього перейдемо безпосередньо до бази multimedia та створимо таблиці так само, як ми створювали таблицю mp3 пару уроків тому. Створимо також первинні ключі з поля id у цих таблицях.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Для того, щоб було на чому тренуватися, додамо пару рядків у кожну таблицю. Зверніть увагу, що ключ id у нас унікальний, тому повторень у цьому полі не може бути. В поле id будемо записувати числа за порядком – 1, 2, і т.д. Виходячи з mp3, що є зараз на моєму комп’ютері, в мене вийшли такі таблиці (у вас, залежно від вашого музичного смаку, скоріш за все вийдуть інші):&lt;/font&gt;&lt;/p&gt;&lt;font class="content"&gt;Зверніть увагу, що хоча тут і є деяка відповідність – альбом з id=1 належить виконавцеві з id=1, і альбом з id=2 належить виконавцеві з id=2, проте це не є правило, а просто співпадіння через те, що у розгляд я взяв лише кілька пісень. Тобто id у таблиці albums та id у таблиці performers не пов’язані аж ніяк.&amp;nbsp; &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Тут зверніть увагу на те, що значення у полях album_id та perf_id вказують на саме ті id у таблицях albums та performers, яким належать відповідні пісні, наприклад, перший рядок має album_id=2, це значить, що він належить до альбому з id=2, тобто Angel’s Egg.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Тепер, коли в нас є деякий матеріал для практики, розглянемо, які sql-запити ми можемо виконувати для цих даних. Згадаємо, як ми робили виборку (SELECT) з одної таблиці. Це було приблизно так: &lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;font class="content"&gt;SELECT filename FROM mp3&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;font class="content"&gt;Такий запит значив виборку усіх полів filename з таблиці mp3. Тепер поставимо задачу вивести назву пісні та її виконавця. Я покажу формування запиту по кроках. По-перше, нам треба об’єднати у FROM дві таблиці: &lt;/font&gt;&lt;pre&gt;&lt;font class="content"&gt;... FROM mp3, performers ...&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt; &lt;font class="content"&gt;Тепер нам треба визначити які поля вибирати: &lt;/font&gt;&lt;pre&gt;&lt;font class="content"&gt;SELECT title, name FROM mp3, performers ...&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt; &lt;font class="content"&gt;Тепер нам треба зв’язати ці дві таблиці: &lt;/font&gt;&lt;pre&gt;&lt;font class="content"&gt;SELECT title, name FROM mp3, performers WHERE mp3.perf_id=performers.id&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt; &lt;font class="content"&gt;Тобто в перекладі на людську мову цей запит може звучати так: &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;“вибрати поля title та name з таблиць mp3 та performers, причому так, щоб поле perf_id рядка таблиці mp3 дорівнювало полю id таблиці performers.”&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font class="content"&gt;Насправді умова mp3.perf_id=performers.id реалізує згаданий вище зовнішній ключ – зв’язок між таблицями mp3 та performers по полям id=perf_id.&lt;/font&gt;&lt;/p&gt;&lt;font class="content"&gt;Будь ласка, якщо цей матеріал хоч трохи незрозумілий – перечитайте ще раз та спробуйте зрозуміти його як можна глибше, тому що це базові речі, які бажано розуміти на рефлекторному рівні. &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Якщо ж це зрозуміло – розглянемо виборку з трьох таблиць. Виберемо всі назви пісень з іменами їхніх виконавців та альбомами, до яких вони належать. sql-запит буде виглядати так: &lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;font class="content"&gt;SELECT mp3.title, performers.name, albums.title&lt;br /&gt;&lt;br /&gt;FROM mp3, performers, albums&lt;br /&gt;&lt;br /&gt;WHERE mp3.album_id=albums.id AND mp3.perf_id=performers.id&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;font class="content"&gt;Деяка складність тут полягає у тому, що деякі поля (наприклад, id або title) мають однакову назву у різних таблицях. Тому, щоб було точно відомо, які саме поля ми маємо на увазі, ми додаємо назву таблиці перед назвою поля через крапку.&amp;nbsp; &lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Якщо ми хочемо, щоб назви стовпчиків у таблиці результату мали іншу назву (тут ми не можемо сказати, який title що означає), ми можемо скористатися так званими аліасами (alias). Аліаси вказуються після назви поля чи таблиці зі словом AS: &lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;font class="content"&gt;SELECT mp3.title AS song, performers.name AS performer, albums.title AS album&lt;br /&gt;&lt;br /&gt;FROM mp3, performers, albums&lt;br /&gt;&lt;br /&gt;WHERE mp3.album_id=albums.id AND mp3.perf_id=performers.id&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;font class="content"&gt;Звісно, ми можемо додавати і інші умови до цього запиту, наприклад виберемо те саме, але щоб пісні були не старшими 1990-го року: &lt;/font&gt;&lt;pre&gt;&lt;font class="content"&gt;SELECT mp3.title AS song, performers.name AS performer, albums.title AS album&lt;br /&gt;&lt;br /&gt;FROM mp3, performers, albums&lt;br /&gt;&lt;br /&gt;WHERE mp3.album_id=albums.id AND mp3.perf_id=performers.id&lt;br /&gt;&lt;br /&gt; AND mp3.year&amp;gt;1990&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;font class="content"&gt;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;p&gt;&lt;font class="content"&gt;Тож що ми засвоїли на цьому уроці.&lt;/font&gt;&lt;/p&gt; &lt;ol&gt;&lt;font class="content"&gt;&lt;li&gt;Рядки у таблицях мають бути унікальними. Запорукою унікальності є первинні ключі&lt;/li&gt; &lt;li&gt;Таблиці можуть мати зв’язки по деяких полях, ці зв’язки називаються зовнішніми ключами&lt;/li&gt; &lt;li&gt;По полях таблиць можна створювати індекси, що збільшують швидкість пошуку в таблицях&lt;/li&gt; &lt;li&gt;Можна будувати запити для кількох таблиць, об’єднуючи іхні рядки за допомогою зовнішніх ключів&lt;/li&gt;&lt;/font&gt;&lt;/ol&gt;   &lt;br /&gt;Передерто з http://&lt;a href="http://www.ua-admin.com/coding/primary.php?addon=textcatalog&amp;amp;id=13963&amp;amp;cat=123&amp;amp;re=1"&gt;www.ua-admin.com&lt;/a&gt;/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-1147693726959441760?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/1147693726959441760/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/05/blog-post.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1147693726959441760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/1147693726959441760'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/05/blog-post.html' title='Бази даних: ключі, індекси та складні запити.'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-3123866658901190044</id><published>2008-04-08T14:37:00.001+03:00</published><updated>2008-04-08T14:37:54.602+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='mencoder'/><category scheme='http://www.blogger.com/atom/ns#' term='ogg'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Запис і конвертація відео з робочого столу Linux</title><content type='html'>Для гнома є така чудова штука &lt;span style="font-weight: bold;"&gt;gtk-recordMyDesktop&lt;/span&gt; - можна записувати відео з робочого столу без додаткового навантаження на процесор.&lt;br /&gt;Все буде чудово відтворюватися на будь-якому Linux але Windows ...&lt;br /&gt;&lt;br /&gt;Тому кодуємо це все добро в простіший формат&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;mencoder &amp;lt;вхідний файл&amp;gt;.ogg -o &amp;lt;вихідний файл&amp;gt;.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800 -oac mp3lame&lt;/span&gt;&lt;br style="font-weight: bold; font-style: italic;" /&gt;&lt;br /&gt;&lt;br /&gt;Мій файл відтворився на голій вінді без будь-яких додаткових кодеків.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-3123866658901190044?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/3123866658901190044/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/04/linux.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/3123866658901190044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/3123866658901190044'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/04/linux.html' title='Запис і конвертація відео з робочого столу Linux'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-623969457950055256</id><published>2008-04-01T17:22:00.001+03:00</published><updated>2008-04-01T17:22:36.422+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flock'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Flock веб переглядач</title><content type='html'>Цей пост написаний у внутрішньому редакторі постів :) &lt;font size="4"&gt;Flock&lt;/font&gt; бравзера.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Товстий&lt;/span&gt; та &lt;span style="font-style: italic;"&gt;інші &lt;/span&gt;шришти змінюються дуже швидко, це вам не веб живий.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;списки&lt;/li&gt;&lt;li&gt;різні&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;нумеровані&lt;/li&gt;&lt;li&gt;і не дуже&lt;br /&gt;спеціальне перенесення&lt;/li&gt;&lt;li&gt;....&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://oleksand.blogspot.com"&gt;Посилання на себе&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;От тільки вставити зображення цей редактор намагається тільки з інтернету а не з локальної робочої станції.&lt;br /&gt;   &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-623969457950055256?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/623969457950055256/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/04/flock.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/623969457950055256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/623969457950055256'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/04/flock.html' title='Flock веб переглядач'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-757526513796995748</id><published>2008-03-25T14:15:00.003+02:00</published><updated>2008-03-25T17:02:41.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Як вставити Python у програму.  Embedding Python in Another Application</title><content type='html'>&lt;span&gt;&lt;span&gt;Найпростішим прикладом може бути виконання Python коду у вашій програмі без взаємодії з нею:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;python h=""&gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;Py_Initialize();&lt;br /&gt;PyRun_SimpleString("from time import time,ctime\n"&lt;br /&gt;                   "print 'Today is',ctime(time())\n");&lt;br /&gt;Py_Finalize();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://xivilization.net/pydocs/2.6/extending/embedding.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-757526513796995748?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/757526513796995748/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/python-embedding-python-in-another.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/757526513796995748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/757526513796995748'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/python-embedding-python-in-another.html' title='Як вставити Python у програму.  Embedding Python in Another Application'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-7372604371488045436</id><published>2008-03-14T10:23:00.004+02:00</published><updated>2008-03-14T10:57:47.999+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><title type='text'>Служби каталогів LDAP</title><content type='html'>Думаю ви вже перечитали гору визначень про LDAP ;)&lt;br /&gt;&lt;br /&gt;Якщо коротко то :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LDAP&lt;/span&gt; це протокол доступу до служби каталогів.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Служба каталогів &lt;/span&gt;подібна до бази данних але схольна до збереження данних орієнтованих на атрибути. Сервери служб каталогів оптимізовані для зчитування інформації, іноді редагування заборонене взагалі.&lt;br /&gt;&lt;br /&gt;Одна з відомих реалізацій сдужби є &lt;span style="font-style: italic;"&gt;Active Directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Вона забезпечує централізоване управління користувачами, групами службами і мережевими ресурсами. Існує можливість розширення схеми Active Directory для визначення нових класів і властивостей об'єктів, дозвіл імен у Active Directory, реплікація з декількома господарями в середовищі рівноправних контроллерів доменів. Існує можливість керувати безпекою - зокрема перевірка достовірності, управління доступом і підтримка шифрування.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Висновок:&lt;/span&gt;&lt;br /&gt;Служби каталогів використовуються для централізованого управління мережевими ресурсами, правами та ролями користувачів, тощо.&lt;br /&gt;&lt;br /&gt;Дещо взято з &lt;a href="http://flame.s2s.msu.ru/?q=node/view/19"&gt;http://flame.s2s.msu.ru/?q=node/view/19&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-7372604371488045436?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/7372604371488045436/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/ldap.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/7372604371488045436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/7372604371488045436'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/ldap.html' title='Служби каталогів LDAP'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-7965862933399698508</id><published>2008-03-07T16:36:00.014+02:00</published><updated>2008-03-14T11:23:58.086+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='Addin'/><title type='text'>Addin друга спроба (Mono, Plugin)</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Plugin"&gt;http://en.wikipedia.org/wiki/Plugin&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mono-project.com/Introduction_to_Mono.Addins"&gt;http://www.mono-project.com/Introduction_to_Mono.Addins&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Є багато причин чому ви можете вирішити дописувати розширення для ваших продуктів:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Дозволити стороннім розробникам розширювати чи змінювати можливості програми.&lt;/li&gt;&lt;li&gt; Підтримувати можливості ще не передбачені.&lt;/li&gt;&lt;li&gt; Зменшити розмір основної програми.&lt;/li&gt;&lt;li&gt; Розділити код через проблеми пов'язані з ліцензуванням.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;.Net &amp;amp; MONO бачення:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Модель Mono.Addins складається з 4-х компонентів:&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Add-in host: &lt;/span&gt;&lt;span&gt;розширяєма за допомогою додатків програма чи бібліотека.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Extension point&lt;/b&gt;: місця де додатки реєструють типи розширень.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Extension node: &lt;/b&gt;елемент що має атрибути що описують розширення. Точки (місця) розширень можуть декларувати типи розширень з якими вони працюють.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Add-in&lt;/b&gt;: набір файлів які реєструють нові гілки в одній або декількох точках розширення визначених розширюваною програмою.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Приклад:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Реалізуємо текстовий редактор що буде розширений за допомогою додатків.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mono-project.com/files/thumb/7/72/500px-Mono-addins-sample.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 504px; height: 347px;" src="http://www.mono-project.com/files/thumb/7/72/500px-Mono-addins-sample.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;ICommand library (TextEditorLib.dll)&lt;/b&gt; &lt;/p&gt; &lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;assembly:AddinRoot &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;"TextEditor"&lt;/span&gt;, &lt;span style="color: rgb(128, 128, 128);"&gt;"1.0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;TypeExtensionPoint&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(6, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;interface&lt;/span&gt; ICommand&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(6, 0, 255);"&gt;void&lt;/span&gt; Run &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;b&gt;An add-in (SampleAddin.dll)&lt;/b&gt; &lt;/p&gt; &lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;assembly:Addin&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;assembly:AddinDependency &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;"TextEditor"&lt;/span&gt;, &lt;span style="color: rgb(128, 128, 128);"&gt;"1.0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;Extension&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt; HelloWorldExtension: ICommand&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(6, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(6, 0, 255);"&gt;void&lt;/span&gt; Run &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt; Console.&lt;span style="color: rgb(0, 0, 255);"&gt;WriteLine&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;"Hello World"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;b&gt;The host application (TextEditor.exe)&lt;/b&gt; &lt;/p&gt; &lt;pre&gt;&lt;span style="color: rgb(6, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt; Application&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(6, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(6, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(6, 0, 255);"&gt;void&lt;/span&gt; Main &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt; AddinManager.&lt;span style="color: rgb(0, 0, 255);"&gt;Initialize&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt; &lt;span style="color: rgb(6, 0, 255);"&gt;foreach&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;ICommand cmd &lt;span style="color: rgb(6, 0, 255);"&gt;in&lt;/span&gt; AddinManager.&lt;span style="color: rgb(0, 0, 255);"&gt;GetExtensionObjects&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;typeof&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;ICommand&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;  cmd.&lt;span style="color: rgb(0, 0, 255);"&gt;Run&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This is what the manifest for the TextEditor host would look like:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style="font-family: courier new;"&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Addin&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;id&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"TextEditor"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;version&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"1.0"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;isroot&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"true"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Runtime&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Import&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;assembly&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"TextEditor.exe"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Import&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;assembly&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"TextEditorLib.dll"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Runtime&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;ExtensionPoint&lt;/span&gt; path = &lt;span style="color: rgb(255, 0, 0);"&gt;"/TextEditor/TypeExtensions/ICommand"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;ExtensionNode&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;objectType&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"ICommand"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/ExtensionPoint&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Addin&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;And this could be the manifest for the add-in:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: courier new;"&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Addin&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Runtime&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Import&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;assembly&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"SampleAddin.dll"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Runtime&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Dependencies&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Addin&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;id&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"TextEditor"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;version&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"1.0"&lt;/span&gt; &lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Dependencies&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Extension&lt;/span&gt; path = &lt;span style="color: rgb(255, 0, 0);"&gt;"/TextEditor/TypeExtensions/ICommand"&lt;/span&gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;Type&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;type&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"HelloWorldExtension"&lt;/span&gt; &lt;span style="font-weight: bold;color:black;" &gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Extension&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;color:black;" &gt;&amp;lt;/Addin&lt;span style="font-weight: bold;color:black;" &gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-7965862933399698508?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/7965862933399698508/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/addin-mono-plugin.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/7965862933399698508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/7965862933399698508'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/addin-mono-plugin.html' title='Addin друга спроба (Mono, Plugin)'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6703085903881876929</id><published>2008-03-05T12:21:00.008+02:00</published><updated>2008-03-05T13:23:05.251+02:00</updated><title type='text'>Google MapReduce Qt realisation. Конкурентні потоки.</title><content type='html'>Google розробка MapReduce реалізована в Qt 4.4.x. Що ж це таке і як воно працює ?&lt;br /&gt;&lt;br /&gt;Ця розробка задумана для полегшення програмування і обчислення поширених завдань на багатопроцесорних кластерах. В Qt вона реалізована для мультиядерних систем.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;API виглядає так:&lt;/p&gt; &lt;pre&gt;QFuture&lt;t&gt; mappedReduced(list, mapFunction, reducefunction);&lt;br /&gt;&lt;/t&gt;&lt;/pre&gt; Припустимо що нам потрібно порахувати частоту появи слів в декількох документах:&lt;br /&gt;В цьому випадку map функція буде рахувати входження слів в кожному документі паралельно, а reduce об'єднає результати в фінальне значення частоти.&lt;br /&gt;&lt;br /&gt;На вході маємо список текстів що містять документи:&lt;br /&gt;&lt;pre&gt;QList&lt;qstring&gt; list;&lt;/qstring&gt;&lt;/pre&gt;map функція бере документ і повертає хеш із данними про кількість входження кожного слова в документі.&lt;br /&gt;&lt;pre&gt;QHash&lt;qstring,&gt; mapFunction(const QString &amp;amp;document);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: verdana;font-size:100%;" &gt;Reduce функція братиме проміжні результати виконання map і формуватиме фінальний результат. Система забезпевить виклик reduce тільки однією map одночасно.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;void reduceFunction(QHasht&lt;qstring,&gt; &amp;amp;finalResut, const QHash&lt;qstring,&gt; &amp;amp;intermediateResult);&lt;/pre&gt;&lt;br /&gt;Тепер можна використати це все разом:&lt;br /&gt;&lt;pre&gt;QFuture&amp;lt;qhash&lt;qstring,&gt; &gt;counting =  mappedReduced(list, mapFunction, reduceFunction);&lt;/pre&gt;Оскільки mappedReduced( ) повертає QFeature є декілька способів синхронізуатися з результатом. Найпростіший спосіб це просто викликати QFuture::result() що заблокує виконання поки результат не буде готовий. Якщо блокування не допустиме (програма має графічний інтерфейс) можна використати сигнал-слот зв'язок щоб відобразити стан обчислень та отримати результат. Також можливо зупинити обчислення QFuture::cancel().&lt;br /&gt;&lt;br /&gt;Таким способом зручно виконувати багато поширених завдань: пошук, сортування, компресія, тощо.&lt;br /&gt;&lt;br /&gt;Лінки:&lt;br /&gt;&lt;a href="http://labs.trolltech.com/blogs/category/labs/threads/qt-concurrent/" rel="bookmark" title="Permanent Link to Qt Concurrent integrated!"&gt;Qt Concurrent integrated!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;MapReduce&lt;/a&gt; was originally &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;developed by Google&lt;/a&gt; to simplify writing parallel algorithms for computer clusters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6703085903881876929?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6703085903881876929/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/google-mapreduce-qt-realisation.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6703085903881876929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6703085903881876929'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/google-mapreduce-qt-realisation.html' title='Google MapReduce Qt realisation. Конкурентні потоки.'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-8017135124564635882</id><published>2008-03-03T13:11:00.002+02:00</published><updated>2008-03-03T13:17:25.137+02:00</updated><title type='text'>Application settings best practices або Де зберігати налаштування вашої програми.</title><content type='html'>Швидкий огляд інтернету підтвердив мої підозри на те що для збереження налаштувань найкраще використовувати спеціальний клас що зможе зберігати, відображати, міняти та повідомляти про зміни налаштувань.&lt;br /&gt;У .net     є такий клас.&lt;br /&gt;Для GTK є GConf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-8017135124564635882?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/8017135124564635882/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/application-settings-best-practices.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8017135124564635882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/8017135124564635882'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/application-settings-best-practices.html' title='Application settings best practices або Де зберігати налаштування вашої програми.'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-5065515425482650651</id><published>2008-03-03T12:38:00.004+02:00</published><updated>2008-03-03T13:52:21.302+02:00</updated><title type='text'>Plugin enabled application або як пишуться плагіни.</title><content type='html'>Реалізувати підтримку плагінів для програми найпростіше використавши інтерфейси і динамічно завантажувані бібліотеки.&lt;br /&gt;Та виникає декілька питань що відносяться до дизайну:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Як обробляти події та надавати доступ до даних, глобальних змінних.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Скільки контролю давати плагіну.&lt;/li&gt;&lt;li&gt;Що писати в Plugin.init().&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Так виглядає примітивний додаток до плеєра Rhythmbox на мові Python&lt;br /&gt;&lt;pre&gt;import rb&lt;br /&gt;class FloonitzPlugin (rb.Plugin):&lt;br /&gt; def __init__(self):&lt;br /&gt;     rb.Plugin.__init__(self)&lt;br /&gt; def activate(self, shell):&lt;br /&gt;     print "Hello World"&lt;/pre&gt;&lt;br /&gt;Використано &lt;a href="http://live.gnome.org/RhythmboxPlugins/WritingGuide"&gt;&lt;span style="font-size:100%;"&gt;Introduction to Rhythmbox plugins&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;А це &lt;a href="http://www.google.com.ua/codesearch?hl=en&amp;amp;q=show:wGm-Q8hg7J8:vXHetPnl89Y:N1SPL62U988&amp;amp;sa=N&amp;amp;ct=rd&amp;amp;cs_p=http://tuukka.iki.fi&amp;amp;cs_f=2006/summercode/darcs/compiz/plugins/cube.c&amp;amp;start=1"&gt;куб-плагін&lt;/a&gt; для Compiz - 3D менеджера вікон:&lt;br /&gt;&lt;pre&gt;&lt;span id="l1637"&gt;CompPluginVTable cubeVTable = {&lt;br /&gt;&lt;/span&gt;&lt;span id="l1638"&gt;    "cube",&lt;br /&gt;&lt;/span&gt;&lt;span id="l1639"&gt;    "Desktop Cube",&lt;br /&gt;&lt;/span&gt;&lt;span id="l1640"&gt;    "Place windows on cube",&lt;br /&gt;&lt;/span&gt;&lt;span id="l1641"&gt;    cubeInit,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1642"&gt;    cubeFini,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1643"&gt;    cubeInitDisplay,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1644"&gt;    cubeFiniDisplay,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1645"&gt;    cubeInitScreen,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1646"&gt;    cubeFiniScreen,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1647"&gt;    0, &lt;span class="cc"&gt;/* InitWindow */&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1648"&gt;    0, &lt;span class="cc"&gt;/* FiniWindow */&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1649"&gt;    0, &lt;span class="cc"&gt;/* GetDisplayOptions */&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1650"&gt;    0, &lt;span class="cc"&gt;/* SetDisplayOption */&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1651"&gt;    cubeGetScreenOptions,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1652"&gt;    cubeSetScreenOption,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1653"&gt;    cubeDeps,&lt;br /&gt;&lt;/span&gt;&lt;span id="l1654"&gt;    sizeof (cubeDeps) / sizeof (cubeDeps[0])&lt;br /&gt;&lt;/span&gt;&lt;span id="l1655"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span id="l1656"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1657"&gt;CompPluginVTable *&lt;br /&gt;&lt;/span&gt;&lt;span id="l1658"&gt;getCompPluginInfo (void)&lt;br /&gt;&lt;/span&gt;&lt;span id="l1659"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span id="l1660"&gt;    return &amp;cubeVTable;&lt;br /&gt;&lt;/span&gt;&lt;span id="l1661"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-5065515425482650651?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/5065515425482650651/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/03/plugin-enabled-application.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/5065515425482650651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/5065515425482650651'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/03/plugin-enabled-application.html' title='Plugin enabled application або як пишуться плагіни.'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-568467203773011767</id><published>2008-02-25T16:17:00.001+02:00</published><updated>2008-03-14T11:00:27.732+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Відновти Grub після того як була змінена таблиця розділів чи потертий MBR (головний завантажувальний запис)</title><content type='html'>&lt;ol&gt;&lt;li&gt;Завантажуємся з чого небуть з ліцензією GPL&lt;/li&gt;&lt;li&gt;Монтуємо розділ на якому GRUB зберігав налаштування свої. (скоріше всього твій єдиний Linux розділ)&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Перший варіант ручний:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo grub&lt;/li&gt;&lt;li&gt;find (шлях до змонтованого розділу)/boot/grub/stage1&lt;br /&gt;виведе щось типу (hd0,1) - список розділів на яких були встановлений груб.&lt;/li&gt;&lt;li&gt;root(hd0,1) - вказуємо розділ на якому збережена конфігурція.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;setup(hdo) - нарешті встановлюємо груб.&lt;/li&gt;&lt;li&gt;quit&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Простий варіант:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/sbin/groob-install --root-directory=DIR /dev/sda&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-568467203773011767?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/568467203773011767/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/02/grub-mbr.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/568467203773011767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/568467203773011767'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/02/grub-mbr.html' title='Відновти Grub після того як була змінена таблиця розділів чи потертий MBR (головний завантажувальний запис)'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-6739203619185994891</id><published>2008-02-25T13:01:00.005+02:00</published><updated>2008-03-14T11:01:10.534+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='помилки'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='моно'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Компіляція Mono для Ubuntu 7.10 amd64</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-family:verdana;" &gt;Оскільки Mono розвивається дуже швидко і розробники Ubuntu не завжди встигають за змінами виникає потреба в компіляції mono з svn co svn://anonsvn.mono-project.com/source/trunk/mono*.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ svn co svn://anonsvn.mono-project.com/source/trunk/mcs&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/mono&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/gtk-sharp&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/gnome-sharp&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/olive&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/moon&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;svn co svn://anonsvn.mono-project.com/source/trunk/monodoc&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;sudo apt-get install libavcodec0d libavformat0d libgtk2.0-dev libnspr-dev firefox-dev libavcodec-dev libavformat-dev libasound2-dev librsvg2-dev&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;sudo apt-get install autoconf automake libtool build-essential bison &lt;span style="font-weight: bold; font-style: italic;"&gt;libgtksourceview* libglade*-dev&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;sudo apt-get install prevu&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ &lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;code  style="white-space: nowrap; color: rgb(0, 0, 0);font-family:verdana;"&gt;&lt;code&gt;&lt;span style="font-size:85%;"&gt;sudo prevu-init &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt; Налаштовує середовище для білда. Це може зайняти деякий час.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;$ apt-get remove mono-common&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;" &gt;&lt;span style="font-size:85%;"&gt;$ apt-get install build-essential pkg-config libglib2.0-dev bison libcairo2-dev libungif4-dev libjpeg62-dev libtiff4-dev&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:100%;"  &gt;Завантажити і зкомпілити  libgdiplus.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;br /&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;$ sudo apt-get install mono-mcs&lt;br /&gt;будемо компілити з ubuntu версією компілятора.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Далі стандартно:&lt;/span&gt;&lt;br /&gt;$ confugure&lt;br /&gt;$ make&lt;br /&gt;$ sudo make install&lt;br /&gt;&lt;br /&gt;(перевірено, взято з &lt;a href="http://ubuntuforums.org/showthread.php?t=669495"&gt;форуму ubuntu&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Перед компіляцією gtk-sharp та іншших додатків залежних від моно важливо не забути&lt;br /&gt;&lt;br /&gt;$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;Це допоможе уникнути помилку на етапі конфігураціїї&lt;br /&gt;"You need to install either mono or .Net"&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;br /&gt;Порядок компіляції :&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;mono + mcs&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;gtk-sharp&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;monodoc&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;mono-tools&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;gtk-sharp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;gnome-sharp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;gtksourceview2-sharp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;monodevelop&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Все зкомпілилось ідеально, крім Firebird і NUit модулів.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;font-size:85%;"  &gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-6739203619185994891?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/6739203619185994891/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/02/mono-ubuntu-710-amd64.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6739203619185994891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/6739203619185994891'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/02/mono-ubuntu-710-amd64.html' title='Компіляція Mono для Ubuntu 7.10 amd64'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5563204686857933528.post-5389639805720396106</id><published>2008-02-25T10:31:00.002+02:00</published><updated>2008-03-18T10:35:12.536+02:00</updated><title type='text'>Оце почав я свій блог. Модно зараз ;)</title><content type='html'>Привіт всім хто скоріше всього випадково потрапив на цю сторінку.&lt;br /&gt;На створення блогу автора спокусила можливість публікування зображень. Google Picasa для цього не дуже придатна.&lt;br /&gt;Мета цього блогу : описувати основні подіі і думки з мого життя. Сподіваюся мій досвід стане вам у пригоді.&lt;br /&gt;&lt;br /&gt;Інший мій блог задумувався &lt;a href="http://velo-rivne.blogspot.com/"&gt;як вело - персональна сторінка&lt;/a&gt;. Також можете подивитися ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5563204686857933528-5389639805720396106?l=oleksand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oleksand.blogspot.com/feeds/5389639805720396106/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://oleksand.blogspot.com/2008/02/blog-post.html#comment-form' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/5389639805720396106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5563204686857933528/posts/default/5389639805720396106'/><link rel='alternate' type='text/html' href='http://oleksand.blogspot.com/2008/02/blog-post.html' title='Оце почав я свій блог. Модно зараз ;)'/><author><name>Чугайстер</name><uri>http://www.blogger.com/profile/11888185830408709347</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-AZaRH0xjpv0/TYDb9bki7fI/AAAAAAAAE_I/3hGDNZ2OJEQ/s220/2011-03-07-143049.jpg'/></author><thr:total>0</thr:total></entry></feed>
