<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Toshe and Tanya&#039;s blog &#187; programming</title>
	<atom:link href="http://toshe.bukov.com/blog/index.php/post/tag/programming,linux/feed" rel="self" type="application/rss+xml" />
	<link>http://toshe.bukov.com/blog</link>
	<description>Toshe and Tanya&#039;s thoughts about Life, the Universe and Everything</description>
	<lastBuildDate>Sat, 10 Mar 2012 16:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>И още за мултимедията под Линукс</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2009/01/17/183</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2009/01/17/183#comments</comments>
		<pubDate>Sat, 17 Jan 2009 20:16:45 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/?p=183</guid>
		<description><![CDATA[Както и предполагах, по-мощния процесор значи и повече топлина, водеща до по-бързо въртене на вентилаторите и следователно &#8211; повече шум. На всичкото отгоре захранването на кутията започна да издава странни звуци та се наложи за трети път да прибягвам към &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2009/01/17/183">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Както и предполагах, по-мощния процесор значи и повече топлина, водеща до по-бързо въртене на вентилаторите и следователно &#8211; повече шум. На всичкото отгоре захранването на кутията започна да издава странни звуци та се наложи за трети път да прибягвам към сайта за компютърни части. Този път даже не се и опитах да давам обяснения на Таня. Само между другото и споменах, че алтернативата за харчене на тези пари е да се почерпим навън с приятели. Мисля че номера мина и този път.</p>
<p>Сега машината е добре екипирана, по-тиха от преди, макар че достатъчно шумна да се усеща в редките моменти, когато Жорката не вилнее в хола. Все още има разни малки проблемчета за решаване, но общо взето след няколко късни нощни сесии и ровене в дебрите на <a href="http://www.mythtv.org/">Линукс/MythTV</a>/<a href="http://www.mplayerhq.hu">mplayer</a>/<a href="http://www.lirc.org/">Lirc</a> успях да докарам нещата до достатъчно добре работеща система. Ще видим докога ще удържа преди да измисля нещо ново.</p>
<p>За край &#8211; малка доза оздравителен смях. Докато се рових из сайтовете и сравнявах различните видове вентилатори и охладителни системи, Жорката дойде при мен и попита:<br />
- Тати, тати, какво правиш?<br />
- Търся радиатори за процесори, миличък.<br />
Жорката скочи от скута ми и отиде при Таня:<br />
- Мамо, мамо, тати търси &#8230; <em>принцесори</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2009/01/17/183/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>И пак за новия компютър</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2008/12/23/176</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2008/12/23/176#comments</comments>
		<pubDate>Tue, 23 Dec 2008 16:21:13 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/?p=176</guid>
		<description><![CDATA[Хм, след няколкоседмично човъркане на новата машина установих, че явно процесора не е достатъчно мощен да се справи със съвременните видео компресии. Наложи се да поръчам по-мощен (и по-горещ) процесор. Пред половинката ми минах с извинението &#8220;Ами това ще ми &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2008/12/23/176">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Хм, след няколкоседмично човъркане на новата машина установих, че явно процесора не е достатъчно мощен да се справи със съвременните видео компресии. Наложи се да поръчам по-мощен (и по-горещ) процесор. Пред половинката ми минах с извинението &#8220;Ами това ще ми е подаръка за Коледа&#8221;. За моя изненада, номера мина. Това предполагам значи, да не чакам друг подарък от Дядо Коледа <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>За протокола &#8211; за гледане на 1080p видео кодирано в MPEG4 формат с чисто софтуерно декодиране под Линукс ще ви трябва като абсолютен минимум поне 3Ghz звяр. За съжаление видео драйверите под Линукс не поддържат хардуерно декодиране и затова процесора трябва да върши всичката работа. Хич не помага и това, че за момента чисто софтуерното декодиране поддържа само едно процесорно ядро, така че дву- и четири-ядрен процесор не помага особено. Между другото борбата за видео плеър на новата машина се води с променлив успех между <a href="http://www.videolan.org/vlc/">VLC</a> и <a href="http://www.mplayerhq.hu">mplayer</a>. VLC има много лесен за човъркане и експериментиране конфигурационен файл със всички възможни настройки, ала mplayer кърти мивки с производителността си. И двете програми имат много добра документация макар че първата има по-добър форум и стабилните версии се обновяват по-често на официалния сайт. От друга страна, mplayer е в постоянна бета-тест фаза, ала гарантирано включва по-по-най- новите промени. Експериментите продължават.</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2008/12/23/176/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Направи си сам&#8230; уеб браузър</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2008/05/26/130</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2008/05/26/130#comments</comments>
		<pubDate>Mon, 26 May 2008 16:33:04 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2008/05/26/130</guid>
		<description><![CDATA[Въпреки че ежедневно се занимавам с компютри и съм свикнал с бурното развитие на технологииите, все още има неща в бранша, които ме смайват. Ето например последната версия на библиотеката за програмиране QT 4.4 (произнася се като англииското &#8220;cute&#8221; &#8211; &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2008/05/26/130">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Въпреки че ежедневно се занимавам с компютри и съм свикнал с бурното развитие на технологииите, все още има неща в бранша, които ме смайват. Ето например <a href="http://doc.trolltech.com/4.4/qt4-4-intro.html">последната версия</a> на библиотеката за програмиране <a href="http://trolltech.com/products/qt/">QT</a> <a href="http://doc.trolltech.com/4.4/index.html">4.4 </a> (произнася се като англииското &#8220;cute&#8221; &#8211; приятен). Едно от новите въведения е реализирането на <a href="http://en.wikipedia.org/wiki/Webkit">WebKit</a> &#8211; модулен интернет браузър (е не мога да се насиля преведа тая дума като &#8220;четец&#8221; и това си е!). Още след като бяха пуснати библиотеките <a href="http://wiki.python.org/moin/PyQt">PyQT </a>за връзка между <a href="http://www.python.org/">Python</a> и Qt 4.4 започнах да се човъркам из кода и за по-малко от два часа (толкова ми отпусна Жорката докато спеше обедния си сън) успях да спретна един много елементарен браузер. Само за сравнение &#8211; новата версия на <a href="http://en.wikipedia.org/wiki/Firefox_3#Version_3.0">Firefox 3</a> отне повече от година и половина. Естествено няма място за сравнение на няколко набързо нахвърлени реда код и гигантското постижение което е новия Firefox, но все пак дава перспектива.<br />
Ето как изглежда програмката в действие:</p>
<p><a href='http://toshe.bukov.com/blog/wp-content/uploads/2008/05/pyqt_webkit_test_screenshot_windows.png' title='Toshe Bukov’s PyQt WebKit example'><img src='http://toshe.bukov.com/blog/wp-content/uploads/2008/05/pyqt_webkit_test_screenshot_windows.thumbnail.png' alt='Toshe Bukov’s PyQt WebKit example' /></a></p>
<p>А по-долу е кода на главната програма (webkit_test.py) и на визуалната част (т.нар. GUI &#8211; Graphical User Interface) &#8211; (Ui_webkit_test.py). Графиния интерфейс е проектиран с <a href="http://doc.trolltech.com/4.4/designer-manual.html">QtDesigner </a>а за редактор съм използал <a href="http://www.die-offenbachs.de/eric/index.html">Eric4</a>. За сваляне на кода &#8211; ето на този адрес: <a href="http://toshe.bukov.com/download/toshe_bukov_pyqt_4.4_webkit_example_ver._0.6.zip">http://toshe.bukov.com/download/toshe_bukov_pyqt_4.4_webkit_example_ver._0.6.zip</a>.</p>
<p><span id="more-130"></span><br />
<strong>webkit_test.py</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># -*- coding: utf-8 -*-</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Author: Toshe Bukov (toshe[at]bukov[dot]com)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Licence: GNU GPL version 3 or later (http://www.gnu.org/licenses/gpl-3.0.html)</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># This example can be seen at http://toshe.bukov.com/blog/index.php/post/2008/05/26/130</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">Module implementing MainWindow.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> PyQt4 <span class="kw1">import</span> QtGui, QtCore, QtWebKit</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> PyQt4.<span class="me1">QtGui</span> <span class="kw1">import</span> QMainWindow</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">from</span> PyQt4.<span class="me1">QtCore</span> <span class="kw1">import</span> pyqtSignature</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> Ui_webkit_test <span class="kw1">import</span> Ui_MainWindow</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> MainWindow<span class="br0">&#40;</span>QMainWindow, Ui_MainWindow<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;This class implements the container window that consists of address bar, button and</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;web page renderer.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>, parent = <span class="kw2">None</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;Class constructor.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; QMainWindow.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>, parent<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">setupUi</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">loadingURL</span> = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#self.setWindowTitle(&quot;PyQt4.4 WebKit browser demo&quot;)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @pyqtSignature<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> on_urlBar_returnPressed<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;This method is invoked when Enter/Return keyboard key is pressed.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; urlText = <span class="kw2">str</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">urlBar</span>.<span class="me1">text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">lower</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> urlText.<span class="me1">startswith</span><span class="br0">&#40;</span><span class="st0">&quot;http://&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlText = <span class="st0">&quot;http://&quot;</span> + urlText</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">loadingURL</span> = urlText</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; urlAddress = QtCore.<span class="me1">QUrl</span><span class="br0">&#40;</span>urlText<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">webView</span>.<span class="me1">load</span><span class="br0">&#40;</span>urlAddress<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; @pyqtSignature<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> on_goButton_clicked<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;This method is invoked when &quot;</span>Go<span class="st0">&quot; button is clicked. </span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">on_urlBar_returnPressed</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @pyqtSignature<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> on_webView_loadStarted<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;QT invokes this method when page is being loaded in WebKit widget.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">statusbar</span>.<span class="me1">showMessage</span><span class="br0">&#40;</span><span class="st0">&quot;Loading &quot;</span> + <span class="kw2">self</span>.<span class="me1">loadingURL</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @pyqtSignature<span class="br0">&#40;</span><span class="st0">&quot;bool&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">def</span> on_webView_loadFinished<span class="br0">&#40;</span><span class="kw2">self</span>, p0<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;This method is invoked when page load is complete.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">statusbar</span>.<span class="me1">showMessage</span><span class="br0">&#40;</span><span class="st0">&quot;Done. (&quot;</span> + <span class="kw2">self</span>.<span class="me1">webView</span>.<span class="me1">url</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot;)&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> __name__ == <span class="st0">&quot;__main__&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; app = QtGui.<span class="me1">QApplication</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; mw = MainWindow<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; mw.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span>app.<span class="me1">exec_</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>Ui_webkit_test.py</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># -*- coding: utf-8 -*-</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Form implementation generated from reading ui file &#8216;webkit_test.ui&#8217;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Created: Mon May 26 15:53:38 2008</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp;by: PyQt4 UI code generator 4.4.2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Author: Toshe Bukov (toshe[at]bukov[dot]com)</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># Licence: GNU GPL version 3 or later (http://www.gnu.org/licenses/gpl-3.0.html)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># This example can be seen at http://toshe.bukov.com/blog/index.php/post/2008/05/26/130</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> PyQt4 <span class="kw1">import</span> QtCore, QtGui</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Ui_MainWindow<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> setupUi<span class="br0">&#40;</span><span class="kw2">self</span>, MainWindow<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;MainWindow&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">resize</span><span class="br0">&#40;</span><span class="nu0">800</span>,<span class="nu0">600</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">centralwidget</span> = QtGui.<span class="me1">QWidget</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">centralwidget</span>.<span class="me1">setGeometry</span><span class="br0">&#40;</span>QtCore.<span class="me1">QRect</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">27</span>,<span class="nu0">800</span>,<span class="nu0">548</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">centralwidget</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;centralwidget&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">verticalLayout</span> = QtGui.<span class="me1">QVBoxLayout</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">centralwidget</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">verticalLayout</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;verticalLayout&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">horizontalLayout</span> = QtGui.<span class="me1">QHBoxLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">horizontalLayout</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;horizontalLayout&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">urlBar</span> = QtGui.<span class="me1">QLineEdit</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">centralwidget</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">urlBar</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;urlBar&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">horizontalLayout</span>.<span class="me1">addWidget</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">urlBar</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">goButton</span> = QtGui.<span class="me1">QPushButton</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">centralwidget</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">goButton</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;goButton&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">horizontalLayout</span>.<span class="me1">addWidget</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">goButton</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">verticalLayout</span>.<span class="me1">addLayout</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">horizontalLayout</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">webView</span> = QtWebKit.<span class="me1">QWebView</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">centralwidget</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">webView</span>.<span class="me1">setUrl</span><span class="br0">&#40;</span>QtCore.<span class="me1">QUrl</span><span class="br0">&#40;</span><span class="st0">&quot;about:blank&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">webView</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;webView&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">verticalLayout</span>.<span class="me1">addWidget</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">webView</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">setCentralWidget</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">centralwidget</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menubar</span> = QtGui.<span class="me1">QMenuBar</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menubar</span>.<span class="me1">setGeometry</span><span class="br0">&#40;</span>QtCore.<span class="me1">QRect</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">800</span>,<span class="nu0">27</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menubar</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;menubar&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menuFile</span> = QtGui.<span class="me1">QMenu</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">menubar</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menuFile</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;menuFile&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">setMenuBar</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">menubar</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">statusbar</span> = QtGui.<span class="me1">QStatusBar</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">statusbar</span>.<span class="me1">setGeometry</span><span class="br0">&#40;</span>QtCore.<span class="me1">QRect</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">575</span>,<span class="nu0">800</span>,<span class="nu0">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">statusbar</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;statusbar&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">setStatusBar</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">statusbar</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">actionExit</span> = QtGui.<span class="me1">QAction</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">actionExit</span>.<span class="me1">setObjectName</span><span class="br0">&#40;</span><span class="st0">&quot;actionExit&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menuFile</span>.<span class="me1">addAction</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">actionExit</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menubar</span>.<span class="me1">addAction</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">menuFile</span>.<span class="me1">menuAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">retranslateUi</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; QtCore.<span class="me1">QObject</span>.<span class="me1">connect</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">actionExit</span>,QtCore.<span class="me1">SIGNAL</span><span class="br0">&#40;</span><span class="st0">&quot;triggered()&quot;</span><span class="br0">&#41;</span>,MainWindow.<span class="me1">close</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; QtCore.<span class="me1">QMetaObject</span>.<span class="me1">connectSlotsByName</span><span class="br0">&#40;</span>MainWindow<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> retranslateUi<span class="br0">&#40;</span><span class="kw2">self</span>, MainWindow<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; MainWindow.<span class="me1">setWindowTitle</span><span class="br0">&#40;</span>QtGui.<span class="me1">QApplication</span>.<span class="me1">translate</span><span class="br0">&#40;</span><span class="st0">&quot;MainWindow&quot;</span>, <span class="st0">&quot;Python QT4.4 Webkit test&quot;</span>, <span class="kw2">None</span>, QtGui.<span class="me1">QApplication</span>.<span class="me1">UnicodeUTF8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">goButton</span>.<span class="me1">setText</span><span class="br0">&#40;</span>QtGui.<span class="me1">QApplication</span>.<span class="me1">translate</span><span class="br0">&#40;</span><span class="st0">&quot;MainWindow&quot;</span>, <span class="st0">&quot;Go&quot;</span>, <span class="kw2">None</span>, QtGui.<span class="me1">QApplication</span>.<span class="me1">UnicodeUTF8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">menuFile</span>.<span class="me1">setTitle</span><span class="br0">&#40;</span>QtGui.<span class="me1">QApplication</span>.<span class="me1">translate</span><span class="br0">&#40;</span><span class="st0">&quot;MainWindow&quot;</span>, <span class="st0">&quot;File&quot;</span>, <span class="kw2">None</span>, QtGui.<span class="me1">QApplication</span>.<span class="me1">UnicodeUTF8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">actionExit</span>.<span class="me1">setText</span><span class="br0">&#40;</span>QtGui.<span class="me1">QApplication</span>.<span class="me1">translate</span><span class="br0">&#40;</span><span class="st0">&quot;MainWindow&quot;</span>, <span class="st0">&quot;Exit&quot;</span>, <span class="kw2">None</span>, QtGui.<span class="me1">QApplication</span>.<span class="me1">UnicodeUTF8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &#8212; uncomment below code to test the GUI code</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#from PyQt4 import QtWebKit</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#if __name__ == &quot;__main__&quot;:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;import sys</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;app = QtGui.QApplication(sys.argv)</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp;MainWindow = QtGui.QMainWindow()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;ui = Ui_MainWindow()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;ui.setupUi(MainWindow)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;MainWindow.show()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;sys.exit(app.exec_())</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2008/05/26/130/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ако шофьорите ги наемаха като програмистите&#8230;</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2008/03/31/128</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2008/03/31/128#comments</comments>
		<pubDate>Mon, 31 Mar 2008 13:39:27 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2008/03/31/128</guid>
		<description><![CDATA[Това ми го изпрати един приятел. Авторът е неизвестен, но пък обявата си е баш като истинска &#8212; Ако шофьорите ги наемаха на работа както програмистите&#8230; ето как щеше да изглежда една обява: Длъжност: шофьор Изисквания: професионални навици на управление &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2008/03/31/128">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Това ми го изпрати един приятел. Авторът е неизвестен, но пък обявата си е баш като истинска <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
&#8212;<br />
Ако шофьорите ги наемаха на работа както програмистите&#8230; ето как щеше да изглежда една обява:<br />
<strong>Длъжност:</strong> шофьор<br />
<strong>Изисквания:</strong> професионални навици на управление на леко- и тежкотоварни автомобили, тролеи, трамваи, влакове на метрото, трaктори, багери, БМП и съвременни леки/тежки танкове, на въоръжение в страните НАТО.<br />
Навици за ралийно и екстремално управление са задължителни. Опит във Формула-1 &#8211; препоръчва се.<br />
Кандидатите трябва да притежават сертификати от BMW, General Motors и Bosch, а също и дипломи за участие в големи международни ралита, но не по-стари от 2 години.<br />
<strong>Заплащанe:</strong> 300-500 лева, определя се в зависимоста от резултата на интервюто.<br />
Знания и опит в ремонт на бутални и роторни двигатели, автоматични и ръчни трансмисии, системи за запалване, бордови компютри, ABS, GPS и автомобилни аудио системи на водещи световни производители &#8211; задължително.<br />
Опит в провеждане на тенекеджийски и бояджийски работи &#8211; плюс.</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2008/03/31/128/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Глупавите неща които причиняваме на компютрите си</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2008/03/19/127</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2008/03/19/127#comments</comments>
		<pubDate>Wed, 19 Mar 2008 16:23:55 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[Stories from the past]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[old times]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2008/03/19/127</guid>
		<description><![CDATA[В едно от компютърните списания които чета тия дни имаше тема за най-глупавите неща правени от компютърните специалисти на техните лаптопи и настолни компютри. Четейки признанията на авторите на списанието се замислих какви са моите прегрешения по темата. Не успях &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2008/03/19/127">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>В едно от компютърните списания които чета тия дни имаше тема за най-глупавите неща правени от компютърните специалисти на техните лаптопи и настолни компютри. Четейки признанията на авторите на списанието се замислих какви са моите прегрешения по темата. Не успях да се сетя за много. Истината е че дълго време <a href="http://toshe.bukov.com/blog/index.php/post/2006/12/16/98">нямах собствен компютър</a> и когато най-сетне се сдобих с такъв се стараех да си го пазя много. Може би затова успявам дълго време да избегна проклятието на разлятата чаша кафе върху клавиатурата или не дай си боже &#8211; върху самия компютър. Сигурно фактът че не пия кафе също оказва влияние. Все пак и аз не съм безгрешен и бих допринесъл достатъчно материал за не една и две статии в списание. Откъде да започна&#8230; мдааа. Нека да е от моята сисадминиска кариера.</p>
<p>По времето когато преподавах в <a href="http://www.cacad.com/">Академията</a> се наложи да инсталирам уеб и пощенски сървър. Въоръжен с много ентусиазъм и малко знания направих една инсталация на Линукс и потроших няколко дни да я настройвам за нашите нужди придобивайки в процеса малко повече знания и губейки голяма част от ентусиазма. За историята е важно да се отбележи избора ми на файлова система &#8211; воден от изследователския си нюх и подкован със статистики и мнения от форуми, заложих на сравнително новата и революционна за времето си ReiserFS (версия 3). Дотук лошо няма. Сървъра си работеше перфектно, и няколко дни се разхождах със приповдигнатото самочувствие на врял и кипял админ. За съжаление един ден реших да оптимизирам още малко нещата и след като няколко процеса забиха взех че рестартирах сървъра. След рестарта бях топло посрещнат от съобщението, че на диска няма разпозната файлова система. Има едно особено състояние на духа, което предизвика съвсем осезаемо физическо усещане на обливане със студена пот. В този момент имах удоволствието да изпитам това състояние в цялата му прелест. След това го изпитах още веднъж при осмислянето на факта, че не бях направил нито едно архивно копие след инсталацията. Последващите няколко часа бяха прекарани в разкачване на дискове, закачването им на друга машина и пускането на проверка на файловата система. В края на упражнението имах почти цялата система възстановена. Почти. Бърза проверка показа че всичките файлове са намерени&#8230; по-точно всичките 117 000 (словом: сто и седемнадесет хиляди) разпокъсани парченца от файловете. Мърфи се беше пресегнал през временно-пространствения континиум и стовари закона си с цялата си мощ върху нашият беден сървър в секундата когато съм натискал бутона за захранването. Рестарта съвпаднал точно с момента, когато дървото на файловата система се е балансирало водейки до загубата на индекса на файловете и директориите. Така че информацията все още си беше на диска, само че файловата система не знаеше къде да ги намери. В тази фаза студеното изпотяване вече ми се струваше нормално състояние. Но какво са 117 000 парчета от файлове за Истинския Администратор &#0153;. След подробно търсене из парченцата успях да намеря части от текстовата конфигурация на повечето услуги и след още няколко дни (вече имах опит) сървъра беше онлайн отново. Този път направих архивно копие. Както и месец след това. И на всеки два месеца след тази случка. Не че се наложи да ги ползвам.</p>
<p>От втората ми проява на изключителна глупост в най-неподходящ момент си изпати <a href="http://toshe.bukov.com/blog/index.php/post/2005/10/04/74">Stoma</a>. В живота на всеки един кандидат инженер идва момент в който трябва да се изправи пред комисия за защита на дипломна работа. В случая на Stoma тази дипломна работа включваше реализацията на клъстер от няколко разнородни машини. Като новоизпечен инженер дипломирал се няколко месеца по-рано, естествено горях от желание да изявя своите способности и предложих помощта си. Беше ранен следобед когато настроихме машините и Stoma приключваше последните приготвления за тестовете. Все още неудовлетворен че не съм успял да демонстрирам най-доброто от себе си се лог-нах в компютъра на Stoma и в изблик на ентусиазъм пуснах обновяване на операционната система (Линукс естествено, какво друго може да се ползва за клъстери!). Излязоха разни въпроси на които естествено отговорих с &#8220;Yes&#8221; без даже да ги чета като един истински инженер. (Истинският Инженер &#0153; не чете съобщения &#8211; той винаги знае какво прави). Мярнах някакъв ред за премахвани пакети, обаче така и на разбрах какво става докато не чух някакъв стон откъм бюрото на Stoma. Бърз поглед към монитора му и забелязах как прозорците на приложенията един по един се затварят точно като на филм. Stoma имаше изражението на корабокрушенец, който току що е видял спасителния кораб да се отдалечава към хоризонта. Секунда по-късно се обърна към мен с един такъв леко плашещ поглед, че набързо се отказах да давам каквито и да било идеи. Към три и половина сутринта успяхме да възстановим щетите. Аз се прибрах към пет а защитата беше в осем. Няма нужда да споменавам че Stoma се справи блестящо. Само че се съмнявам дали ще ми повери друга машина за настройване.</p>
<p>Историята познава още много случаи на проява на глупост от моя страна, но стига толкова хвалби за един постинг. </p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2008/03/19/127/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Everyone loves Unix&#8230; or not</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2008/02/21/126</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2008/02/21/126#comments</comments>
		<pubDate>Thu, 21 Feb 2008 13:07:36 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2008/02/21/126</guid>
		<description><![CDATA[Every now and then when I&#8217;m looking for some obscure Linux command line syntax I run across forum posts of disgruntled users that complain of the complexity of the Unix command line. Contrary to this common perception the Linux (and &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2008/02/21/126">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Every now and then when I&#8217;m looking for some obscure Linux command line syntax I run across forum posts of disgruntled users that complain of the complexity of the Unix command line. Contrary to this common perception the Linux (and in this sense all Unix flavours) commands are pretty simple. In fact the whole <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Linux/Unix philosophy</a> is &#8220;Do one thing, do it well.&#8221; If more complex operations are required, then just use the same simple tools and chain them together to achieve the end result. </p>
<p>Following this mantra some experienced <a href="http://en.wikipedia.org/wiki/%2Anix">*nix</a> (this is how all Linux, BSD and Unix flavours are denoted) users can do miracles with only a few lines of code. However despite this simplicity (or probably just because of it) it as equally easy to ruin a lot of months worth of work or even to get the the whole system down on its knees. Just a quick example &#8211; the dreaded &#8220;rm / -rf&#8221; command being performed as root. </p>
<p>Being involved in the IT for the last &#8230; many years (I don&#8217;t want to count them &#8211; it makes me feel older than I actually am) I still prefer the simple do-only-one-thing tools than the overly complex do-everything-under-the-sky programs (that breaks equally often). The simpler tools approach requires more technical knowledge than the simple &#8220;click here to start doing the stuff&#8221; theme often clamoured by the self-manifested &#8220;IT experts&#8221; or &#8220;Administrators&#8221;. The reason for my preference is not some kind of weird masochistic psychological disorder (Ok, this is not the ONLY reason), but the gratifying feeling I understand what is going on under the hood and the ability to troubleshoot the situation in the case things go wrong. Beside it is very satisfying to see the aforementioned &#8220;Administrators&#8221; scratching their head when their favourite &#8220;all-in-one&#8221; tool failed with some mystifying message. At the end most of them they end up being shown how to use alternative way of doing things&#8230; with alternative _simpler_ means.</p>
<p>Anyway, enough <a href="http://en.wiktionary.org/wiki/whinge">whinging</a> about the admins and proclaiming how KISS (<a href="http://en.wikipedia.org/wiki/Keep_it_simple_stupid">Keep It Simple, Stupid</a>) principle will save the world and bring peace to all. The other reason I do enjoy Linux is the sheer fun when doing things even when doing them in the wrong way. A collection of true pearls of wisdom could be found in the so called <a href="http://www-uxsup.csx.cam.ac.uk/misc/horror.txt">&#8220;Unix Horror Stories&#8221;</a> collection. For those looking for even more entertaining readings I would recommend the excellent <a href="http://www.molgen.mpg.de/~wwwutz/Unix_Haters/unix-haters.html">&#8220;Unix Haters Handbook&#8221;</a>. Beside the useful info there are few gems from &#8220;medieval&#8221; years of the <a href="http://en.wikipedia.org/wiki/Information_Age">Information Age</a> history. Enjoy&#8230; and don&#8217;t forget to <a href="http://en.wikipedia.org/wiki/Scratch_monkey">mount scratch monkey</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2008/02/21/126/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Забавна математика с Python</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/11/13/123</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/11/13/123#comments</comments>
		<pubDate>Tue, 13 Nov 2007 19:47:37 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[Stories from the past]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[mpmath]]></category>
		<category><![CDATA[old times]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sympy]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/11/13/123</guid>
		<description><![CDATA[Спомените ми от първите години в Техническия университет (освен разбиващите купони и хроничното студентско безпаричие) са свързани с писането на огромно количество протоколи от измервания и сума ти свързани с това изчисления. Понякога се изкушавах да си напиша кратка програма &#8230; <a href="http://toshe.bukov.com/blog/index.php/post/2007/11/13/123">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Спомените ми от първите години в Техническия университет (освен разбиващите купони и хроничното студентско безпаричие) са свързани с писането на огромно количество протоколи от измервания и сума ти свързани с това изчисления. Понякога се изкушавах да си напиша кратка програма за да си сметна и начертая графиките от измерените резултати вместо налагания от някои преподаватели методи с калкулатор и милиметрова хартия. Проблемът беше, че сметките често не бяха елементарни, а Паскал (и по-късно Java) не са от най-лесните за ползване езици за бързи сметки от мързеливи студенти като мен. По-късно се налагаше да правим преобрзувания на уравнения и да ги опростяваме, а единствения софтуер който донякъде помагаше беше MathLab. Въоръжени с него и с теоремите на Нагласаяев и Натъмъняев успявахме да открием нови клонове в инженерната математика. Наистина се изискваше много усилия от предварително дадения ни за сравнение резултат да приложим реверсивен инженериг и да скалъпим обратно оригиналното задание на проекта, но историята познава и по-големи героични постъпки (като например свързването на амперметър като волтметър или паралелното свързванео на електролитни кондензатори към променливотокови трансформаторни вериги).</p>
<p>От тези времена ми остана един респект към многостъпковите изчисления (и към електролитните кондензатори) и често след това съм се чудил дали няма наистина удобен инструмент точно за такива уморителни, но необходими математически гимнастики. Изискванията ми за подобен софтуер са скромни &#8211; да е софтуер с отворен код, преносим (Linux/Windows), да е простичък за инсталация и употреба и по възможност да се разширява лесно. По едно време се бях отказал да търся (а и не ми трябваше, честно казано) докато преди месец попаднах на <a href="http://code.google.com/p/sympy/">SymPy</a> и <a href="http://code.google.com/p/mpmath/">mpmath</a>. Първата е библиотека занимаваща се със символна алгебра (от типа колко е (ax<sup>2</sup> + by<sup>3</sup>)<sup>2</sup> * (x + y<sup>2</sup>)<sup>2</sup> в разгъната форма) изчисляваща също интеграли и диференциали от символни уравнения (такива с неизвестни като x, y и z например). Втората библиотека и за смятане на реални и комплексни числа с произволна точност. Точно така &#8211; с <strong>произволна</strong>. И двете библиотеки са писани на <a href="http://python.org/">Python</a> които освен че е страшно лесен за учене и експериментиране е също и много мощен скриптов език. И двете библиотеки са с отворен код и понеже са на Python са достъпни на всички софтуерни платформи <a href="http://en.wikipedia.org/wiki/Python_(programming_language)#Implementations">поддържани</a> от езика. Ала един пример говори повече от сто реклами, така че ето един пример:<br />
<code><br />
>>>from sympy import *<br />
>>>x = Symbol('x')<br />
>>>y = Symbol('y')<br />
>>>a = ((x**2 + y**3)**2 * (x+y**2)**2)<br />
>>>b.expand()<br />
x**6 + y**10 + x**2*y**6 + x**4*y**4 + 2*x*y**8 + 2*x**2*y**7 + 2*x**4*y**3 + 2*x**5*y**2 + 4*x**3*y**5<br />
>>><br />
</code><br />
Трите символа &#8220;>&#8221; са от промпт-а на Python интепретатора. Последния ред е всъщност разгънатата форма на по-горното уравнение. Звздичката е знак за умножение а двойната звезда  &#8211; повдигане на степен. За домашно &#8211; сметнете уравнението на степен 3 <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Това далеч не е всичко. Ето друг пример (взет от <a href="http://code.google.com/p/sympy/wiki/Tutorial">ръководствотото на SymPy</a>):<br />
<code><br />
>>> from sympy import *<br />
>>> x=Symbol("x")<br />
>>> limit(sin(x)/x, x, 0)<br />
1<br />
>>> limit(x, x, oo)<br />
oo  <em># това е знака за безкрайност <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em><br />
>>> limit((5**x+3**x)**(1/x), x, oo)<br />
5<br />
</code><br />
Някой спомня ли си как се смятаха границите (лимеси) от училище? Е, с няколко реда код няма да ви се налага да ги смятате.</p>
<p>Впечатлих ли ви? А ето какво може да прави mpmath:<br />
<code><br />
>>> from mpmath import *<br />
>>> pi<br />
mpf('3.1415926535897932384626433832793')<br />
</code><br />
Хм, дотук &#8211; нищо впечатляващо. Ала нека да променим прецизността след десетичната точка (която по подразбиране е 30 знака):<br />
<code><br />
>>> from mpmath import *<br />
>>> mpf.dps = 100 <em># задаваме броя на знаците след десетичната точка</em><br />
>>> pi<br />
mpf('3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798')<br />
</code><br />
Това е числото Пи със сто знака след десетичната точка (или запетая &#8211; кое е по-правилното?). А ето го със 1000 знака:</p>
<p>3.1415926535897932384626433832795028841971693993751058209749445923078164062862<br />
089986280348253421170679821480865132823066470938446095505822317253594081284811<br />
174502841027019385211055596446229489549303819644288109756659334461284756482337<br />
867831652712019091456485669234603486104543266482133936072602491412737245870066<br />
063155881748815209209628292540917153643678925903600113305305488204665213841469<br />
519415116094330572703657595919530921861173819326117931051185480744623799627495<br />
673518857527248912279381830119491298336733624406566430860213949463952247371907<br />
021798609437027705392171762931767523846748184676694051320005681271452635608277<br />
857713427577896091736371787214684409012249534301465495853710507922796892589235<br />
420199561121290219608640344181598136297747713099605187072113499999983729780499<br />
510597317328160963185950244594553469083026425223082533446850352619311881710100<br />
031378387528865875332083814206171776691473035982534904287554687311595628638823<br />
53787593751957781857780532171226806613001927876611195909216420199</p>
<p>За домашна &#8211; пробвайте със  10000 знака <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Повече примери и идеи за ползване на mpmath вижте нейната <a href="http://code.google.com/p/mpmath/wiki/Documentation">документация</a>.</p>
<p>Забележка: За момента двете библиотеки дефинират числото Пи по свой начин, който не е съвместим, затова рестартирайте комания интерпретатор на Python между тестовете за да получите смислени резултати.</p>
<p>Стана ли ви интересно? Аз със сигурност съм заинтригуван! Сега се надявам по-малко ученици и студенти да четат това, че иначе много домашни ще станат безумно лесни за решаване с няколко редова програмка <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/11/13/123/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

