<?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's blog &#187; The matrix world</title>
	<atom:link href="http://toshe.bukov.com/blog/index.php/post/category/the-matrix-world/feed" rel="self" type="application/rss+xml" />
	<link>http://toshe.bukov.com/blog</link>
	<description>Toshe and Tanya's thoughts about Life, the Universe and Everything</description>
	<lastBuildDate>Mon, 19 Oct 2009 12:10:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Манифестът на хакера</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2009/05/18/210</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2009/05/18/210#comments</comments>
		<pubDate>Mon, 18 May 2009 16:41:16 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Emotions]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[manifesto]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/?p=210</guid>
		<description><![CDATA[Като споменах за Манифеста в предишния пост, реших да публикувам целия превод. Tова е превод на оригиналния текст от Phrack: Днес хванаха още един &#8211; навсякъде из вестниците тръбят &#8220;Младеж арестуван във възка с компютърно престъпление&#8221;, &#8220;Хакер арестуван след опит за проникване в банка&#8221;&#8230;. Глупави деца. Всичките са еднакви. Но дали и вие, въпреки всичките [...]]]></description>
			<content:encoded><![CDATA[<p>Като споменах за Манифеста в <a title="ASL PLS* (post)" href="http://toshe.bukov.com/blog/index.php/post/2009/04/29/215">предишния пост</a>, реших да публикувам целия превод.</p>
<p><em>Tова е превод на <a title="Hacker's manifesto (original text)" href="http://www.phrack.org/issues.html?issue=7&amp;id=3&amp;mode=txt">оригиналния текст</a> от Phrack: </em></p>
<hr />
<p>Днес хванаха още един &#8211; навсякъде из вестниците тръбят &#8220;Младеж арестуван във възка с компютърно престъпление&#8221;, &#8220;Хакер арестуван след опит за проникване в банка&#8221;&#8230;.</p>
<p><em>Глупави деца. Всичките са еднакви.</em></p>
<p>Но дали и вие, въпреки всичките ви титли и техническа мисъл от на ниво от 50-те години на миналия век, някога сте поглеждали през очите на хакера? Замисляли ли сте се какво го всъщност го мотивира, какво го прави такъв какъвто е и защо е станал такъв?</p>
<p>Аз съм хакер, а това е моят свят&#8230;.</p>
<p>Всичко започна от училището&#8230; Аз съм по-умен от повечето от другите деца в класа, а глупостите на които ни учеха там ме оттегчават&#8230;</p>
<p><em>На умник се прави, а?  Да върви по дяволите.  И той е като всички останали.</em></p>
<p>В часа за петнайсти път ни обясняват как се опростяват дробни числа. Аз знам как се прави. &#8220;Не, не госпожо Смит, нямам го в тетрадката си &#8211; сметнах го наум&#8230;&#8221;</p>
<p><em>Проклет умник. Сигурно го е преписал. Те всичките са еднакви.</em></p>
<p>Днес направих откритие. Намерих компютър. Много е як. Прави точно това,  което искам да прави. Ако направи грешка, то е само защото аз съм му казал така и грешката всъшност е моя. Не защото не ме харесва&#8230; или се плаши от мен&#8230; или си мисли че се правя на много умен&#8230; или че не обича да обяснява и защото всъщност мрази работата си като учител&#8230;</p>
<p><em>Проклето дете. Само гледа да играе игри на компютъра. Като всички останали.</em></p>
<p>И после &#8230; се случи&#8230; Отворих вратата към един нов свят&#8230; течейки по телефонната линия като хероин през вените на наркоман, пулсирайки в електронени вълни изпращани по кабела, в бягство от ежедневните простотии&#8230; към един нов пристан.</p>
<p>Това е&#8230;. моят свят. Аз съм част от него. Той ми принадлежи&#8230;.  както и аз на него.<br />
Познавам всеки в него&#8230; дори и да не съм ги срещал, дори никога да съм си говорил с тях&#8230; дори никога повече да не чуя за тях&#8230; Познавам ги всичките.</p>
<p><em>Хлапака пак ли е на телефонната линия! Мътните да го вземат. И всичките като него също.</em></p>
<p>Можете да заложите задника си, че всички ние сме еднакви. В училището ни хранеха с бебешка каша, когато ние копнеехме за пържоли&#8230; А парченцата месо които успяваха да се промъкнат между кашата бяха сдъвкани и безвкусни.  Над нас издевателстваха садисти&#8230; а останалите просто ни игнорираха с апатия. Малкото, които имаха какво да ни научат, ни намериха за деца изпълнени с желание, но те бяха  капка вода в пустинята.</p>
<p>Сега това е нашият свят&#8230; светът на електроните и мрежовия суич, на красотата на битовете и байтовете. Ние използваме безплатно услуги, които и без това трябва да струват стотинки, ако не бяха притежавани и експлоатирани от алчни печалбари, и заради това ни наричат престъпници.  Ние търсим познание&#8230; а вие ни наричате престъпници.  Ние съществуваме без цвят на кожата, без националност, без религиозни пристрастия&#8230; а вие ни наричате престъпници. Вие построихте атомната бомба. Вие подстрекавате войни. Вие убивате, мамите и лъжете, а искате   да ви повярваме, че е за наше добро и че престъпниците всъщност сме Ние.</p>
<p>Да, аз съм престъпник. Моето престъпление е това че съм любознателен. Моето престъпление е че съдя за хората по това, което казват и мислят, не по това как изглеждат. Моето престъпление е, че съм по-умен от Вас, нещо, което Вие никога няма да ми простите.</p>
<p>Аз съм хакер и това е моя манифест.  Може да спрете мен, но не може да спрете всички ни&#8230; защото&#8230; вие всичките сте еднакви.</p>
<p>+++ Менторът +++</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2009/05/18/210/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASL PLS*</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2009/04/29/215</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2009/04/29/215#comments</comments>
		<pubDate>Wed, 29 Apr 2009 19:55:59 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Emotions]]></category>
		<category><![CDATA[Stories from the past]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[manifesto]]></category>
		<category><![CDATA[past]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/?p=215</guid>
		<description><![CDATA[Преди няколко дни се рових из архивните копия и попаднах на разни неща които съм писал в студентските години докато работех да изкарам някой лев през лятото в различни интернет зали. Учудващо за мен, въпреки че е минало бая време оттогава (повече отколко ми се иска да си призная), някои от текстовете са изненадващо актуални [...]]]></description>
			<content:encoded><![CDATA[<p>Преди няколко дни се рових из архивните копия и попаднах на разни неща които съм писал в студентските години докато работех да изкарам някой лев през лятото в различни интернет зали. Учудващо за мен, въпреки че е минало бая време оттогава (повече отколко ми се иска да си призная), някои от текстовете са изненадващо актуални (поне за мен) и днес.  По-долу е една кратка статия, нахвърлена по времето на една нощна смяна след продължително киснене в IRC чатове. Приятно четене.</p>
<p><em>* ASL PLS е- популярно съкращение на &#8220;age, sex, location please&#8221; (моля, какви са ти възрастта, пола и къде си в момента) използвано в IRC чатовете.</em></p>
<p><em>Действието се развива някъде в късните 90-те или в ранните години на 21-ия век.</em></p>
<p><span style="color: #008000;">/server shake.your-brain.mil</span></p>
<p><span style="color: #008000;">*** connected</span></p>
<p><span style="color: #008000;">/nick <span>root@<span>localhost</span>.<span>edu</span></span></span></p>
<p><span style="color: #008000;">/j #enter_in_the_real_life</span></p>
<p><span style="color: #008000;">/me is online</span></p>
<p><span>Мдааа! Във времето на поколението    на &#8220;<span>asl</span> <span>pls</span>&#8221; и безсънните нощи game-ване взех да си мисля, че нещо    не ми е наред. Когато бъдещето беше още светло, компютрите &#8211; Правец, а операционната    система &#8211; DOS, когато Microsoft още не беше заразила 90% от PC-тата със Windows,    а Интернет беше чуждица, денем и нощем бълнувах за един брой ЕИМ (за непросветените    &#8211; Електронно Изчислителна Машина, което е българската дума за computer). Сега,    10-ина години по-късно, във времето на www, Counter-Strike и &#8220;Click here&#8221;    си мечтая за простото удоволствие да поговоря с някого за нещо различно от темата    PC-та. Напоследък първите думи на хората около мен са: &#8220;Здрасти! Абе да    знаеш що ми забива Explorer-а&#8221;, &#8220;Я кажи откъде да си сваля&#8230;&#8221;,    &#8220;Що не ми бачка мрежовата карта&#8221; или вариации по темата. Какво стана    с другите умозанимаващи дейности? Страх ме е да попитам каква е последната книга,    която въпросната личност е чела, защото рискувам да получа съобщението &#8220;Error    404 &#8211; Not Found&#8221;. Е все пак е по-добре от &#8220;Error 500 &#8211; Internal server    error&#8221;, което е резултат от моите усилия да сменя темата на нещо различно    от последното играно ниво на Quake или поредната <span>Holywood</span>-ска промивка на мозъка,    наречена кино.</span></p>
<p><span style="color: #008000;"><span>*** <span>SeXy</span> has invited    you to join #f&#8230;_all_the_chicks</span></span></p>
<p><span style="color: #008000;">/ignore S*.*</span></p>
<p>Става ми смешно, когато    всеки втори, който се е научил да инсталира Windows (просто натискай бутона    &#8220;Next&gt;&#8221; докато видиш бутона &#8220;Finish&#8221;) се именува хакер.    Без дори да е чел МАНИФЕСТА. Не, не кой да е манифест а <a title="Hacker's Manifesto" href="http://www.phrack.org/issues.html?issue=7&amp;id=3&amp;mode=txt">Манифестът    на хакера</a>. Ще цитирам нещо от него:</p>
<blockquote><p>&#8220;&#8230;Да,    Аз съм престъпник. Моето престъпление е любопитството ми. Моето престъпление    е, че съдя за хората по това, което казват и мислят, не по това как изглеждат.    Моето престъпление е, че съм по-умен от Вас, нещо, което Вие никога няма да    ми простите. Аз съм хакер и това е моя манифест. Вие може да спрете един от    нас, но не може да спрете всички&#8230; А Вие&#8230; Вие всичките сте еднакви&#8230; &#8220;</p></blockquote>
<p><span style="color: #008000;"><span>/ban #<span>hakers</span> *.* </span></span></p>
<p>Е, не искам да подценявам    новоизпечените компютърни специалисти, по съвместителство наричани хакери,    но не виждам нищо героично в това да издърпаш няколко програми от Мрежата и    да скапеш нечие PC през IRC-то и съответно да ликвидираш нечии неколкомесечен    труд например. По-трудното е обратното. Но май взех да ставам твърде поучителен    и досаден. Последно по темата &#8211; хакер не е онзи шумния на съседния компютър    в залата, който се провиква, че току-що е изритал някой от 4ат-а, а онова малкото,    приведено на клавиатурата момченце, което почти не използва мишката и чиито    desktop изглежда скучен в черно-белите си цветове.</p>
<p><span style="color: #008000;"><span>*** you were kicked    by <span>LamerZ</span> (reason: speak too much)</span></span></p>
<p><span style="color: #008000;">*** attempting to rejoin</span></p>
<p><span style="color: #008000;">/part #life_is_so_complicated</span></p>
<p>Изглежда, че няма измъкване    от тия компютри. Но ако все още не сте си обременили съзнанието с някой курс    по компютърна грамотност, послушайте ме &#8211; НЕ ЗАПОЧВАЙТЕ. Все едно ви чувам:    &#8220;Дааа, лесно му е на тоя, нали си ги знае нещата&#8221; Е да ама ако знаете    как искам някой път да мога да напиша:</p>
<p><span style="color: #008000;">DELTREE /y c:\</span></p>
<p>e, но все пак си пазя    по едно архивно копие под ръка <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span style="color: #008000;">File not found</span></p>
<p><span style="color: #008000;">c:\install\setup</span></p>
<p>Дерзайте. Учете се и преди    да си ви хванали неотменно вървящите със техниката комплекси, си спомнете, че    Техниката е направена да служи на Хората, не обратното! А Хората на кой служат?    Хм, ще оставя това на вашето въображение (ако все още ви се намира, моето го    вградиха във browser-а и сега си върви като plug-in).</p>
<p><span style="color: #008000;">/quit (/me enters to    the MATRIX)</span></p>
<p><span style="color: #008000;">Not responding.</span></p>
<p><span style="color: #ff0000;"><span>Kernel32.<span>exe</span> has performed    an illegal operation and will be shut down.</span></span></p>
<p><span style="color: #008000;">rebooting&#8230;</span></p>
<p><span style="color: #008000;">&#8212; TO|_|_|E    &#8212;</span></p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2009/04/29/215/feed</wfw:commentRss>
		<slash:comments>1</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; приятен). Едно от новите въведения е реализирането на WebKit &#8211; модулен интернет браузър (е не [...]]]></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; ето как щеше да изглежда една обява: Длъжност: шофьор Изисквания: професионални навици на управление на леко- и тежкотоварни автомобили, тролеи, трамваи, влакове на метрото, тр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[В едно от компютърните списания които чета тия дни имаше тема за най-глупавите неща правени от компютърните специалисти на техните лаптопи и настолни компютри. Четейки признанията на авторите на списанието се замислих какви са моите прегрешения по темата. Не успях да се сетя за много. Истината е че дълго време нямах собствен компютър и когато [...]]]></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 in this sense all Unix flavours) commands are pretty simple. In fact the whole Linux/Unix [...]]]></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>&gt;&gt;&gt;import this</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/12/31/124</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/12/31/124#comments</comments>
		<pubDate>Mon, 31 Dec 2007 09:19:11 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/12/31/124</guid>
		<description><![CDATA[За край на годината, нещо geeky и свежо (според мен): toshe@masha~$ python &#8230; >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. [...]]]></description>
			<content:encoded><![CDATA[<p>За край на годината, нещо geeky и свежо (според мен):</p>
<p>toshe@masha~$ python<br />
&#8230;<br />
>>> import this<br />
The Zen of Python, by Tim Peters</p>
<p>Beautiful is better than ugly.<br />
Explicit is better than implicit.<br />
Simple is better than complex.<br />
Complex is better than complicated.<br />
Flat is better than nested.<br />
Sparse is better than dense.<br />
Readability counts.<br />
Special cases aren&#8217;t special enough to break the rules.<br />
Although practicality beats purity.<br />
Errors should never pass silently.<br />
Unless explicitly silenced.<br />
In the face of ambiguity, refuse the temptation to guess.<br />
There should be one&#8211; and preferably only one &#8211;obvious way to do it.<br />
Although that way may not be obvious at first unless you&#8217;re Dutch.<br />
Now is better than never.<br />
Although never is often better than *right* now.<br />
If the implementation is hard to explain, it&#8217;s a bad idea.<br />
If the implementation is easy to explain, it may be a good idea.<br />
Namespaces are one honking great idea &#8212; let&#8217;s do more of those!<br />
>>> </p>
<p>Моя скромен опит за превод на горния текст:</p>
<p>Дзен по Питонски, от Тим Питърс</p>
<p>Красивото е за предпочитане пред грозното.<br />
Изричното е за предпочитане пред подразбиращото се.<br />
Простото е за предпочитане пред сложното.<br />
Сложното е за предпочитане пред усложненото.<br />
Плоското е за предпочитане пред вложеното.<br />
Разпиляното е за предпочитане пред претъпканото.<br />
Четливостта има значение.<br />
Специалните случаи не са достатъчно специални, че да нарушават правилата.<br />
Въпреки че практичността бие стриктното спазване на правилата.<br />
Грешките никога не трябва да се пускат незабелязани.<br />
Освен ако изрично не са направени да минават незабелязано.<br />
В случай на двусмислие, отказвай изкушението да предполагаш.<br />
Трябва да има един, и само един очевиден начин да се правят нещата.<br />
Въпреки че това може да не е очевидно на пръв поглед, освен ако не сте Холандец <sup>(1)</sup>.<br />
&#8220;Сега&#8221; е по-добре от &#8220;никога&#8221;.<br />
Въпреки че &#8220;никога&#8221; е често за предпочитане пред &#8220;веднага на момента&#8221;.<br />
Ако реализацията е трудна за обяснение, то значи е лоша идея.<br />
Ако реализацията е лесна за обяснение, то има вероятност да се окаже добра идея.<br />
Групирането на имена е една отлична идея &#8211; нека да правим повече от тях.<br />
<sup>(1)</sup> &#8211; намек за Guido Van Rossum, създателя на Python, който е Холандец по произход.</p>
<p>Надявам се програмистите сред четящите да оценят хумора и мъдростта на горното. А може би и не само програмистите <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/12/31/124/feed</wfw:commentRss>
		<slash:comments>1</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[Спомените ми от първите години в Техническия университет (освен разбиващите купони и хроничното студентско безпаричие) са свързани с писането на огромно количество протоколи от измервания и сума ти свързани с това изчисления. Понякога се изкушавах да си напиша кратка програма за да си сметна и начертая графиките от измерените резултати вместо налагания от някои преподаватели [...]]]></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>
		<item>
		<title>Обновяване на блога</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/11/11/120</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/11/11/120#comments</comments>
		<pubDate>Sun, 11 Nov 2007 18:18:06 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[The matrix world]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/11/11/120</guid>
		<description><![CDATA[Ако не сте забелязали, то блога има леко променен вид. Освен новата версия на софтуера сложих и нова тема, която (би трябвало да) е по-гъвкава и разширяема от старата. Ако някои забележи проблеми с рендирането на страницата, моля оставете ми коментар.]]></description>
			<content:encoded><![CDATA[<p>Ако не сте забелязали, то блога има леко променен вид. Освен новата версия на софтуера сложих и нова тема, която (би трябвало да) е по-гъвкава и разширяема от старата. Ако някои забележи проблеми с рендирането на страницата, моля оставете ми коментар.</p>
<p><a href='http://toshe.bukov.com/blog/wp-content/uploads/2007/11/old-blog-snapshot1.png' title='Old theme'><img src='http://toshe.bukov.com/blog/wp-content/uploads/2007/11/old-blog-snapshot1.thumbnail.png' alt='Old theme' /></a></p>
<p><a href='http://toshe.bukov.com/blog/wp-content/uploads/2007/11/new-blog-snapshot4.png' title='New theme'><img src='http://toshe.bukov.com/blog/wp-content/uploads/2007/11/new-blog-snapshot4.thumbnail.png' alt='New theme' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/11/11/120/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows Offline Update</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/09/05/116</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/09/05/116#comments</comments>
		<pubDate>Wed, 05 Sep 2007 11:51:53 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[The matrix world]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/09/05/116</guid>
		<description><![CDATA[Ако някой има нещастието да поддържа Windows-базирани системи, няма начин да не е сблъсквал с прословутия Windows Update &#8211; системата за обновяване на операционната състема. Докато никой не отрича ползата от подобна система, то ако имате да обновявате голям брой компютри или пък ако мрежовата ви конфигурация не позволява достъп до интернет, то със сигурност [...]]]></description>
			<content:encoded><![CDATA[<p>Ако някой има нещастието да поддържа Windows-базирани системи, няма начин да не е сблъсквал с прословутия Windows Update &#8211; системата за обновяване на операционната състема. Докато никой не отрича ползата от подобна система, то ако имате да обновявате голям брой компютри или пък ако мрежовата ви конфигурация не позволява достъп до интернет, то със сигурност ще се има споменаване на роднини до девето коляно в нецензурен контекст. Да не говорим какво ще стане с Интернет връзката ви ако всичките машини започнат да се обновяват по едно и също време. Майкрософт естествено си имат решение на проблема за техните корпоративни клиенти с техния Windows Server Update Services (WSUS), но за по-малки фирми с ограничени ресурси или мрежи без нарочен системен администратор и съответната софтуерна инфраструктура (разбирай похарчени пари за поддръжка и лицензи) по-подходящо е едно друго решение &#8211; <a href="http://www.heise-security.co.uk/articles/80682">Направи си сам Service Pack</a>. Програмката (сваля се от <a href="http://www.heise.de/ct/projekte/offlineupdate/download_uk.shtml">тази страница</a>) представлява няколко програми с отворен код, които се свързват със сайта на Майкрософт и свалят последните обновени пакети за няколко версии на Windows (към момента Windows 2000, Windows XP и Windows Server 2003) като дава избор за локализиран език (английски, немски, руски и още няколко) на софтуера. Фактът че програмата е съставена от компоненти с отворен код, както и че сваля само софтуер от сайта на Майкрософт гарантира че няма да се инсталира spyware и други гадинки по инсталацията, но за истинските параноици сигурно това няма да е достатъчна гаранция <img src='http://toshe.bukov.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Доколкото ми е известно използването на програмата е напълно законно и вземайки пред че работи само под Windows (предполага се закупен легално) не би трябвало да причини проблеми в правно отношение. Все пак не съм адвокат така че ако смятате да го използвате във вашата фирма, консултирайте се с правно лице.</p>
<p>След стартиране на програмката и настройване на прокси сървър (ако ползвате такъв) тя инсталира малка програма от Майкрософт която се оторизира пред Windows Update и сваля необходимите update пакети. След това създава ISO файл съдържащ свалените пакети, които може да се &#8220;изпече&#8221; на диск и той да се използва за обновяване на Windows инсталации. Инсталацията е напълно автоматизирана &#8211; при слагането на диска в компютъра се стартира инсталатора, регистрира администраторски акаунт и след това инсталира всички ъпдейти. След това премахва добавения акаунт и се рестартира компютъра. Процедурата отнема между 5 минути до повече от час в зависимост от конфигурацията на компютъра и времето на последното обновяване на операционната система. Една малка забележка &#8211; програмката сваля само обновления свързани със сигурността (security updates), но не и такива свързани с драйвери за хардуера.</p>
<p>Програмката на няколко пъти ми е спестявала доста време и нерви и бих я препоръчал на всеки който изпаднал дотам че да се бори с капризната прозоречна състема (хм, чудно тогава АЗ докъде съм изпаднал!).</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/09/05/116/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GPL version 3</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/06/29/112</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/06/29/112#comments</comments>
		<pubDate>Fri, 29 Jun 2007 20:26:30 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Life, the Universe and Everything]]></category>
		<category><![CDATA[The matrix world]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/06/29/112</guid>
		<description><![CDATA[Най-сетне се свърши чакането. Версия 3 на Общия Публичен Лиценз (General Public License &#8211; GPL) беше обявена официално днес по обед Източно-американско време. За тези които не са чували преди &#8211; това е лицензът под който се намират някои от най-големите и важни проекти със Свободен и Отворен Код (Free and Open Source &#8211; FOSS). [...]]]></description>
			<content:encoded><![CDATA[<p>Най-сетне се свърши чакането. Версия 3 на <a href="http://bg.wikipedia.org/wiki/GNU_General_Public_License">Общия Публичен Лиценз</a> (General Public License &#8211; <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>) беше обявена официално днес по обед Източно-американско време. За тези които не са чували преди &#8211; това е лицензът под който се намират някои от най-големите и важни проекти със Свободен и Отворен Код (Free and Open Source &#8211; FOSS). Предишната версия е написана през далечната 1991-а година и въпреки че служи вярно дълги години и спомогна за разцъфтяването на FOSS, с годините възрастта му започна да си личи и нуждата от съвременяването на лиценза стана наложаща. През 2005 авторът на предишните две версии &#8211; Ричард Столмън започва безпрецедентна програма по организирането и обсъждането на това какъв трябва да бъде новия лиценз. Обсъждането на черновите версии, публичните групи дискутиращи различните клаузи, обратната връзка от всички заинтересовани страни и най-вече &#8211; мнението на обикновените потребители &#8211; целия процес е безпрецедентен пример за създаването на правен документ който да служи на всички нас &#8211; ПОТРЕБИТЕЛИТЕ и да се грижи и пази <em>нашите</em> СВОБОДИ. Единственото сравнение което ми идва наум за това събитие е създаването на Търновската Конституция, където най-будните умове на Възраждането се събрали за да увековечат в документ стремежа на народа към независимост, свобода и равноправие.</p>
<p>Честито на всички тези които разбират значението на това събитие. Поздравявам разработчиците които ще се възползват от новия лиценз. И казвам едно дълбоко и сърдечно БЛАГОДАРЯ на неговите създатели. Благодаря Ви че цените и пазите моята лична свобода. Благодаря ви.</p>
<p>П.П. Колко бих искал някой ден да кажа същите думи на политиците управляващи съдбата ни&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/06/29/112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BBC consultation about on-demand services</title>
		<link>http://toshe.bukov.com/blog/index.php/post/2007/02/20/104</link>
		<comments>http://toshe.bukov.com/blog/index.php/post/2007/02/20/104#comments</comments>
		<pubDate>Tue, 20 Feb 2007 10:43:40 +0000</pubDate>
		<dc:creator>Toshe</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[The matrix world]]></category>

		<guid isPermaLink="false">http://toshe.bukov.com/blog/index.php/post/2007/02/20/104</guid>
		<description><![CDATA[This post is instigated by an article in Linux Journal called &#8220;Save the BBC from Windows DRM!&#8221;. The article raises few very reasonable concerns about BBC independance if media publisher decides to go Microsoft route to protect its on-demand content. Since I am currently living in UK and as such paying the TV License tax, [...]]]></description>
			<content:encoded><![CDATA[<p>This post is instigated by an article in <a href="http://www.linuxjournal.com/">Linux Journal</a> called <a href="http://www.linuxjournal.com/node/1000183">&#8220;Save the BBC from Windows DRM!&#8221;</a>. The article raises few very reasonable concerns about BBC independance if media publisher decides to go Microsoft route to protect its on-demand content. Since I am currently living in UK and as such paying the TV License tax, I just could not miss the chance to say what I think about this issue, especially taking into account the money I must pay for the license (at the moment it is about 131.50 pounds for colour TV set per year). I am sure there are much better ways BBC could spent my money than just giving them away to a company known for abusing its monopoly to stifling inovations and smashing competition. I would rather prefer to see my money invested in improving the quality of the content and making it more accessible to the public.</p>
<p>As advised at the end of Linux Journal article I visited <a href="http://www.bbc.co.uk/bbctrust/consult/open-consultations/ondemand_services.html">BBC Consultation</a> page and filled out the questionaire. I also decided to publish it on my blog, to make sure my concerns will not dissapear buried under the usual bureaucracy typical for large organizations. Below are the questions and my answers.<br />
<span id="more-104"></span></p>
<hr /><strong>Question 1</strong><br />
Do you agree with the BBC Trust&#8217;s proposal to approve the new BBC on-demand services, subject to the modifications outlined in the Trust&#8217;s report of its provisional conclusions?</p>
<p><strong>Answer:</strong><br />
Yes, I agree. However I would like to be able to access these services without being limited to single vendor operating system or media players thus restricting my personal choice and limit the options I am entitled to.</p>
<hr /><strong>Question 2</strong><br />
In a market in which most broadcasters are expected to be offering on-demand services, would you agree that it is a priority for the BBC to be investing in this area?</p>
<p><strong>Answer:</strong><br />
Yes, I certainly would like to see BBC not only to follow, but leads the wave of new on-demand services. It will be so much more convenient for me and my family to access BBC content and feel that the tax I pay is really well worth paying for.</p>
<hr /><strong>Question 3</strong><br />
The BBC Trust has proposed setting a limit of 30 days as the amount of time that programmes can be stored on a computer before being viewed. As this is an emerging market, there is currently no clear standard on the length of the storage window. On balance, the Trust thinks 30 days is the right length of time. How long do you think consumers should be able to store BBC programmes on their computers before viewing them?</p>
<p><strong>Answer:</strong><br />
I would rather prefer to have permament copy of the content since I have already paid for producing it. When I buy DVD, I own it, without limitation on how many times I could watch it. However I understand that may not be always achievable, but BBC should take every effort to avoid making content which need technical measure protections (also known as DRM) which actually prohibits users for watching the content they already have paid for.</p>
<hr /><strong>Question 4</strong><br />
The BBC Trust concluded that public value would be created by allowing series stacking. This would allow viewers to catch-up with all episodes of a series for the duration of its run. The Trust recognised that although it would provide increased opportunities to view BBC programmes, it could also deter people from buying DVDs or using commercial video-on-demand services. Do you consider series stacking to be a useful feature? What kind of series would you expect to be included? Should there be any limitation on the number of episodes of a series made available for catch-up or the length of time for which they can be viewed?</p>
<p><strong>Answer:</strong><br />
It is reasonable to expect people would like to see the whole season if they missed first few episodes while watching an episode in the middle of the series.  However the whole point of having on-demand service is just that &#8211; having it ON DEMAND, no matter when or where the people are. So while I agree with convenience of a feature like &#8220;series stacking&#8221; I don&#8217;t see much value in it if BBC would really like to dedicate itself to on-demand service market. With regard to what series I would expect to be included &#8211; all educational programs for kids, all nature and science series and probably some news. As for the limitations &#8211; to re-iterate again: why should you put limitations on taxpayers for content created with their money?</p>
<hr /><strong>Question 5</strong><br />
How important is it that the proposed seven-day catch-up service over the internet is available to consumers who are not using Microsoft software?</p>
<p><strong>Answer:</strong><br />
As I am using non-Microsoft software I don&#8217;t want to see BBC commiting itself to Microsoft only software (or any other single-vendor software in that matter). The idea of the content is to be UNIVERSALLY  accessible and locking out even potential users is neither acceptable for organization like BBC, nor market wise &#8211; if BBC lock-out non-Microsoft customers, then someone else will fill the gap. And at the end of the day why should BBC impose restrictions to what software THEIR viewers are using, especially considering that these viewers have paid for making BBC productions in a first place? Also I would like to question the reason for choosing Microsoft, US based company sued for monopolistic methods both in US and EU and known to use vendor lock-in techniques? Doesn&#8217;t this undermine BBC independence and doesn&#8217;t it lower the confidence in UK&#8217;s own Information Technology capabilities?</p>
<hr /><strong>Question 6</strong><br />
Should the BBC be allowed to offer book readings from its radio services as audio downloads over the internet?</p>
<p><strong>Answer:</strong><br />
As long as BBC holds the copyrights or the books are already in public domain, I don&#8217;t see any reason not to. In other cases BBC could ask copyright holders to license their writings under Creative Commons Licenses whenever possible.</p>
<hr /><strong>Question 7</strong><br />
The BBC Trust concluded there was fine balance between public value and market impact in deciding whether to allow the BBC to offer audio downloads of classical music. While such downloads could help introduce new listeners to classical music, they could also deter purchases of commercial recordings. What is your view on whether &#8211; and to what extent &#8211; the BBC should be allowed to offer radio broadcasts of classical music as audio downloads over the internet?</p>
<p><strong>Answer:</strong><br />
If the classic music listeners are in decline, then the music should be promoted more. The easiest way to achieve this is to allow more classic music downloads. This in turn will attract more people who will eventually want more music, buy some of it, seek to attend live classical perfomances and thus will revive the market and benefit musicians. On the other hand if the people have no interest in classic music, even free downloads would have no effect on the market &#8211; they will just ignore this music alltogether.</p>
<hr /><strong>Question 8</strong><br />
How important is it to you that the BBC provides some means for parents to control which of its programmes are accessible on-demand to children? Is such a facility necessary or is it more a matter for parents to exercise controls over how children use the internet?</p>
<p><strong>Answer:</strong><br />
I reckon this kind of control will be major help for parents, but if the Internet has taught us something, this is that any kind of censorship will eventually be overcome. This does not, however, belittle the ability of parents to choose what their kids can watch.</p>
<hr /><strong>Question 9</strong><br />
What are your views on whether the BBC should offer content from non-BBC providers on the on-demand service on its website?</p>
<p><strong>Answer:</strong><br />
I don&#8217;t mind having access to non-BBC content. I assume BBC have to charge additional charge its subscribers for this content and if this is clearly labelled and the viewer can watch the content without being forced to use single-vendor software, operating system or hardware I am happy with this.</p>
<hr /><strong>Question 10</strong><br />
What are your views on whether and how the BBC should make available on-demand content on services run by other providers &#8211; such as multi-channel services or internet-based audio and video downloading services?</p>
<p><strong>Answer:</strong><br />
As with the previous question &#8211; I don&#8217;t mind having additional content providers on BBC site as long as they do not force me what software or hardware I must use to access their content.</p>
<hr /><strong>Question 11</strong><br />
Do the revisions proposed to BBC Service Licences to allow the new services to go ahead seem appropriate?</p>
<p><strong>Answer:</strong><br />
I haven&#8217;t read the licenses in details, so I can not comment this at the moment. I only wish the licenses are not written as such, that I need a lawyer to translate them for me.</p>
<hr /><strong>Question 12</strong><br />
Are there any other issues you would like the BBC Trust to consider in relation to the proposed services?</p>
<p><strong>Answer:</strong><br />
Please use open technologies and open standards whenever possible. BBC is public institution and as such should serve in public interests. This means providing the content the public has paid for without imposing heavy handed restrictions, without locking out users, avoiding single vendor lock-in, adapting to new Internet realities and ultimately &#8211; maintaining the trust public has in BBC. I&#8217;ll be happy to know that my taxes are well spent and make my children&#8217;s life better with more content accessible to them than I had a chance to have.</p>
<hr />
]]></content:encoded>
			<wfw:commentRss>http://toshe.bukov.com/blog/index.php/post/2007/02/20/104/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
