<?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>Void and Null &#187; сорс</title>
	<atom:link href="http://blog.ivanatora.info/tag/%d1%81%d0%be%d1%80%d1%81/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ivanatora.info</link>
	<description>Code, Linux and Shits</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:48:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Регулярни изрази в C (PCRE)</title>
		<link>http://blog.ivanatora.info/2009/11/19/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%b8-%d0%b8%d0%b7%d1%80%d0%b0%d0%b7%d0%b8-%d0%b2-c-pcre/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2580%25d0%25b5%25d0%25b3%25d1%2583%25d0%25bb%25d1%258f%25d1%2580%25d0%25bd%25d0%25b8-%25d0%25b8%25d0%25b7%25d1%2580%25d0%25b0%25d0%25b7%25d0%25b8-%25d0%25b2-c-pcre</link>
		<comments>http://blog.ivanatora.info/2009/11/19/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%b8-%d0%b8%d0%b7%d1%80%d0%b0%d0%b7%d0%b8-%d0%b2-c-pcre/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:44:26 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://blog.ivanatora.info/?p=338</guid>
		<description><![CDATA[Предполагам че на всеки, който пише код рано или късно му се налага да парсва низове. В случай че низът не е нещо кратко, точно и ясно, се налага използването на regex. В различните езици регулярни изрази се ползват по различен начин. Общото е че върху изследвания низ се налага шаблон и според това дали [...]]]></description>
			<content:encoded><![CDATA[<p>Предполагам че на всеки, който пише код рано или късно му се налага да парсва низове. В случай че низът не е нещо кратко, точно и ясно, се налага използването на regex. В различните езици регулярни изрази се ползват по различен начин. Общото е че върху изследвания низ се налага шаблон и според това дали низът попада в шаблона (match-ва) се предприемат някакви действия или части от низа се прехвърлят в други променливи. В Perl това става лесно - има си езикова конструкция:</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="re0">$string</span> = <span class="st0">&quot;The lazy dog jumped over the quick brown fox.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$string</span> =~ /<span class="br0">&#40;</span>\w<span class="br0">&#123;</span><span class="nu0">3</span><span class="br0">&#125;</span>\./<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$match</span> = $<span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2">do_something_on<span class="br0">&#40;</span><span class="re0">$match</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Кракто и ясно - ако низът попада в /шаблон/ - да се направи еди какво си. Няма да се спирам точно върху синтаксиса на шаблоните, понеже самия факт че четете това тук предполага че сте на ясно <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Все пак ако не сте на ясно, ето ви един плашещ шаблон, за да се откажете още тук:<br />
<code>/^([\d\.]+?)\skill\s+(\d+)\s+([\w\s]+?)(\d+?)\s+([\w\s]+?)\w+$/</code><br />
Това използвам за парсване на тези редове от логовете на Unreal Tournament:<br />
<code>175.48  kill    1       Sniper Rifle    5       Sniper Rifle    Decapitated</code><br />
В PHP няма езикова конструкция, но има доста функции за <a href="http://bg.php.net/manual/en/ref.pcre.php">Perl Compatible Regular Expressions</a>, които работят на същия принцип.<br />
Сега да видим как е положението в С.<br />
От много време търсех как мога да ползвам регулярни изрази, но все удрях на камък. Когато ми се е налагало да парсвам низове съм ползвал sscanf или разбиване на символи, броене, чакане Х-тия символ да е точно 'А', Y-тия да е точно 'B' и т.н. Неприятна работа включваща жонглиране с цикли, if-ове, strcmp и двадесет нива индентация на кода.<br />
Днес открих че в С има поддръжка на PCRE и ми се дощя да се самоубия <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ако работите на нормална операционна система, то може да видите много информация с <em>man pcre</em> и <em>man pcreapi</em>. Ако сте наистина щастливци, някъде из дистрибуцията ще имате файл pcredemo.c, който нагледно показва как се работи с PCRE функциите.<br />
Ако не сте от тези щастливци можете да си намерите файла от <a href='http://dev.ivanatora.info/tests/pcredemo.c'>тук</a>.<br />
Използват се две основни функции: pcre_compile и pcre_exec. Първата поема съставения шаблон от потребителски низов вид и го превръща във вътрешното представяне, което компилатора използва. Втората функция налага шаблона върху тествания низ и връща съвпаденията във вид на масив от вектори, сочещи началните позиции на съвпаденията. Можете да прочетете за функциите в съответните man страници. И най-добре вижте pcredemo.c</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/11/19/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%b8-%d0%b8%d0%b7%d1%80%d0%b0%d0%b7%d0%b8-%d0%b2-c-pcre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Закоментиране на цял блок код с един знак</title>
		<link>http://blog.ivanatora.info/2009/11/01/%d0%b7%d0%b0%d0%ba%d0%be%d0%bc%d0%b5%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%86%d1%8f%d0%bb-%d0%b1%d0%bb%d0%be%d0%ba-%d0%ba%d0%be%d0%b4-%d1%81-%d0%b5%d0%b4%d0%b8%d0%bd-%d0%b7%d0%bd/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b7%25d0%25b0%25d0%25ba%25d0%25be%25d0%25bc%25d0%25b5%25d0%25bd%25d1%2582%25d0%25b8%25d1%2580%25d0%25b0%25d0%25bd%25d0%25b5-%25d0%25bd%25d0%25b0-%25d1%2586%25d1%258f%25d0%25bb-%25d0%25b1%25d0%25bb%25d0%25be%25d0%25ba-%25d0%25ba%25d0%25be%25d0%25b4-%25d1%2581-%25d0%25b5%25d0%25b4%25d0%25b8%25d0%25bd-%25d0%25b7%25d0%25bd</link>
		<comments>http://blog.ivanatora.info/2009/11/01/%d0%b7%d0%b0%d0%ba%d0%be%d0%bc%d0%b5%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%86%d1%8f%d0%bb-%d0%b1%d0%bb%d0%be%d0%ba-%d0%ba%d0%be%d0%b4-%d1%81-%d0%b5%d0%b4%d0%b8%d0%bd-%d0%b7%d0%bd/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 13:51:42 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[пинизи]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=326</guid>
		<description><![CDATA[Този бърз хак работи само в езици, които поддържат коментари от вида "//" за коментиране на ред и такива от вида "/* ... */" за коментиране на блок. Да вземем този блок: &#160; blqk&#40;&#41;; puf&#40;&#41;; paf&#40;&#41;; &#160; Да го закоментираме целия: &#160; /* blqk(); puf(); paf(); */ &#160; И да закоментираме затварящия коментар &#160; /* [...]]]></description>
			<content:encoded><![CDATA[<p>Този бърз хак работи само в езици, които поддържат коментари от вида "//" за коментиране на ред и такива от вида "/* ... */" за коментиране на блок.<br />
Да вземем този блок:</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">blqk<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">puf<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">paf<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Да го закоментираме целия:</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="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">blqk();</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">puf();</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">paf();</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>И да закоментираме затварящия коментар <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </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="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">blqk();</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">puf();</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">paf();</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">//*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>В този момент целия блок е закоментиран. Ако сега добавим единична "/" пред отварящия коментар, коментарите ще отпаднат и блокът ще се разкоментира:</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">//*</span></div>
</li>
<li class="li1">
<div class="de1">blqk<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">puf<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">paf<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Изпробвано е и работи в С и РНР. Ако имате пуснато оцветяване на кода в редактора, който ползвате (и оцветяването работи добре в реално време), ще видите интерсна гледка при добавяне и премахване на магическата "/" <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/11/01/%d0%b7%d0%b0%d0%ba%d0%be%d0%bc%d0%b5%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%86%d1%8f%d0%bb-%d0%b1%d0%bb%d0%be%d0%ba-%d0%ba%d0%be%d0%b4-%d1%81-%d0%b5%d0%b4%d0%b8%d0%bd-%d0%b7%d0%bd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Интегриране на GCC във Vim</title>
		<link>http://blog.ivanatora.info/2009/03/25/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-gcc-%d0%b2%d1%8a%d0%b2-vim/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b8%25d0%25bd%25d1%2582%25d0%25b5%25d0%25b3%25d1%2580%25d0%25b8%25d1%2580%25d0%25b0%25d0%25bd%25d0%25b5-%25d0%25bd%25d0%25b0-gcc-%25d0%25b2%25d1%258a%25d0%25b2-vim</link>
		<comments>http://blog.ivanatora.info/2009/03/25/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-gcc-%d0%b2%d1%8a%d0%b2-vim/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 07:24:31 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[пинизи]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=277</guid>
		<description><![CDATA[Вдъхновен от поста на един приятел, реших че може малко да си улесня живота като добавя бързи бутони за Compile и CompileRun във vim Пиниза наистина е лесен и си струва. Следните редове се добавят във .vimrc: &#160; map &#60;F9&#62; :call CompileRun&#40;&#41;&#60;CR&#62; map &#60;F5&#62; :call Compile&#40;&#41;&#60;CR&#62; func! CompileRun&#40;&#41; &#160; &#160; &#160; &#160; exec &#34;w&#34; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Вдъхновен от <a href='http://gotha88.blogspot.com/2009/03/gedit-ide-c.html'>поста</a> на един приятел, реших че може малко да си улесня живота като добавя бързи бутони за Compile и CompileRun във vim <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Пиниза наистина е лесен и си струва. Следните редове се добавят във .vimrc:</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">map &lt;F9&gt; :call CompileRun<span class="br0">&#40;</span><span class="br0">&#41;</span>&lt;CR&gt;</div>
</li>
<li class="li1">
<div class="de1">map &lt;F5&gt; :call Compile<span class="br0">&#40;</span><span class="br0">&#41;</span>&lt;CR&gt;</div>
</li>
<li class="li1">
<div class="de1">func! CompileRun<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; exec <span class="st0">&quot;w&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; exec <span class="st0">&quot;!gcc % -o %&lt; &amp;&amp; ./%&lt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">endfunc</div>
</li>
<li class="li1">
<div class="de1">func! Compile<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; exec <span class="st0">&quot;w&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; exec <span class="st0">&quot;!gcc % -o %&lt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">endfunc</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>След това докато редактирате .с файл цъкате F5 и файла се компилира, F9 и се компилира и изпълнява. Евентуално може да бъде добавена и функцийка за make с Makefile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/03/25/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-gcc-%d0%b2%d1%8a%d0%b2-vim/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ах този фреймрейт&#8230;</title>
		<link>http://blog.ivanatora.info/2009/02/03/%d0%b0%d1%85-%d1%82%d0%be%d0%b7%d0%b8-%d1%84%d1%80%d0%b5%d0%b9%d0%bc%d1%80%d0%b5%d0%b9%d1%82/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b0%25d1%2585-%25d1%2582%25d0%25be%25d0%25b7%25d0%25b8-%25d1%2584%25d1%2580%25d0%25b5%25d0%25b9%25d0%25bc%25d1%2580%25d0%25b5%25d0%25b9%25d1%2582</link>
		<comments>http://blog.ivanatora.info/2009/02/03/%d0%b0%d1%85-%d1%82%d0%be%d0%b7%d0%b8-%d1%84%d1%80%d0%b5%d0%b9%d0%bc%d1%80%d0%b5%d0%b9%d1%82/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 16:25:50 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[сорс]]></category>
		<category><![CDATA[филми]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=219</guid>
		<description><![CDATA[Не ми харесва когато се окаже че субтитрите за някой филм не съвпадат с кадрите на филма. Резултата е постоянно избързване или изоставане на субтитрите спрямо действието, което с течение на времето се увеличава все повече и повече. Някой от умните съвременни плеъри имат опция за смяна на framerate на субтитърния файл. Но повечето го [...]]]></description>
			<content:encoded><![CDATA[<p>Не ми харесва когато се окаже че субтитрите за някой филм не съвпадат с кадрите на филма. Резултата е постоянно избързване или изоставане на субтитрите спрямо действието, което с течение на времето се увеличава все повече и повече. Някой от умните съвременни плеъри имат опция за смяна на framerate на субтитърния файл. Но повечето го нямат.<br />
По-неприятното е когато всички български сайтове за субтитри имат само една версия на субтитрите, които ви трябват, и то тази версия е за фреймрейт, който е различен от този на филма ви. Тогава или постоянно коригирате субтитрите (бутони Z и X в mplayer) или ги зарязвате и гледате филма в оригинал. Поздрави на хората, които могат от първо слушане да разбират говорим диалектен и жаргонен английски език. Завиждам им.<br />
Алтернативата е да си оправите субтитрите - в нета има доста програмки, които нагласят фреймрейта. Всъщност цялата философия е да се смени времето на появяване на всяка реплика по една проста формула, за това реших да се поупражня и да си напиша моя програмка.<br />
Представям ви - <a href='http://ivanatora.info/test/subconv.c'>subconv.c</a>. Програмата за сега работи само със субтитри във формат MicroDVD, а в кода има инструкции за експлоатация. Много неща трябва да се пипнат там, което ще направя когато отново ме стегне шапката че не мога да гледам нещо <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/02/03/%d0%b0%d1%85-%d1%82%d0%be%d0%b7%d0%b8-%d1%84%d1%80%d0%b5%d0%b9%d0%bc%d1%80%d0%b5%d0%b9%d1%82/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Карта на интернет</title>
		<link>http://blog.ivanatora.info/2008/06/03/%d0%ba%d0%b0%d1%80%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25ba%25d0%25b0%25d1%2580%25d1%2582%25d0%25b0-%25d0%25bd%25d0%25b0-%25d0%25b8%25d0%25bd%25d1%2582%25d0%25b5%25d1%2580%25d0%25bd%25d0%25b5%25d1%2582</link>
		<comments>http://blog.ivanatora.info/2008/06/03/%d0%ba%d0%b0%d1%80%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 10:08:25 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[нет]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/2008/06/03/%d0%ba%d0%b0%d1%80%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82/</guid>
		<description><![CDATA[Нещо ме е хванала скуката. Пробвах да уча по Компютърни Архитектури, но резултата беше следобедна дрямка Така че за да се измъкна за малко от творческата дупка, упражних малко PHP и регулярни изрази. Резултата е налице - скрипт, който прави карта на 'интернет' По-точно приема като параметър URL и тръгва по изходящите от там връзки. [...]]]></description>
			<content:encoded><![CDATA[<p>Нещо ме е хванала скуката. Пробвах да уча по Компютърни Архитектури, но резултата беше следобедна дрямка <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Така че за да се измъкна за малко от творческата дупка, упражних малко PHP и регулярни изрази.<br />
Резултата е налице - скрипт, който прави карта на 'интернет' <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
По-точно приема като параметър URL и тръгва по изходящите от там връзки. Изходяща е връзка към домейн различен от домейна на URL-то. Не се следят броя връзки, нито въпросното URL се crawl-ва до всяка под-страница. Така от всеки домейн се преглежда само по едно URL, което означава че картата е далееече от точност <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ама я си представете от някой голям портал като dir.bg колко връзки навън има... и как се представят графично. За графичното представяне използвам <a href="http://www.graphviz.org/">Graphviz</a>.<br />
Вижда се че тук-таме субдомейните се представят като отделни сайтове. Примерно според скрипта idg.bg и www.idg.bg са две различни неща. Това е така, защото субдомейна www <strong>наистина</strong> може да е съвсем друг сайт <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Скрипта не проверява съдържанието буква по буква за съвпадение.<br />
И естествено целия паяк има 'ограда', за да не тръгне да прави наистина карта на Интернет. Това което се вижда е на разстояние до 2 хопа от ivan.tu-plovdiv.info.<br />
Извинявам се на сайтовете, които се виждат вътре за спамопободния трафик към тях.<br />
Ето я й самата карта (не съм си играл с настройките за шарении):<br />
<a href="http://ivan.tu-plovdiv.info/blog/wp-content/uploads/2008/06/out.jpg" title="out.jpg"><img src="http://ivan.tu-plovdiv.info/blog/wp-content/uploads/2008/06/out.jpg" alt="out.jpg" /></a></p>
<p>А <a href='http://ivan.tu-plovdiv.info/blog/wp-content/uploads/2008/06/3_hops.jpg' title='3_hops.jpg'>тук</a> има същата карта, но този път се вижда малко по-далече - на 3 хопа разстояние. Всичко се върти около google, picasa, youtube, myspace... Хмм, виждат се и няколко бъга, които имат нужда оправяне <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/06/03/%d0%ba%d0%b0%d1%80%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Нищо интересно</title>
		<link>http://blog.ivanatora.info/2008/05/16/%d0%bd%d0%b8%d1%89%d0%be-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%b5%d1%81%d0%bd%d0%be/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bd%25d0%25b8%25d1%2589%25d0%25be-%25d0%25b8%25d0%25bd%25d1%2582%25d0%25b5%25d1%2580%25d0%25b5%25d1%2581%25d0%25bd%25d0%25be</link>
		<comments>http://blog.ivanatora.info/2008/05/16/%d0%bd%d0%b8%d1%89%d0%be-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%b5%d1%81%d0%bd%d0%be/#comments</comments>
		<pubDate>Fri, 16 May 2008 05:50:00 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[ежедневие]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/2008/05/16/%d0%bd%d0%b8%d1%89%d0%be-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%b5%d1%81%d0%bd%d0%be/</guid>
		<description><![CDATA[Ами в последната седмица няма нищо интересно, за което да се пише. Заверките и изпитите са тук, всичко живо е изнервено. Курсовите работи и проектите тровят живота до дупка. Жегата в Пловдив и следобедното слънце блеснало в стаята ми допълнително нажежава атмосферата. Който не е видял котката на Ебаси, lol-ната от мен - може да [...]]]></description>
			<content:encoded><![CDATA[<p>Ами в последната седмица няма нищо интересно, за което да се пише. Заверките и изпитите са тук, всичко живо е изнервено. Курсовите работи и проектите тровят живота до дупка. Жегата в Пловдив и следобедното слънце блеснало в стаята ми допълнително нажежава атмосферата.<br />
Който не е видял котката на Ебаси, lol-ната от мен - може да го стори <a href="http://akrozia.org/?p=200">тук</a>.<br />
Драснах едно тъпо PHP скриптче за смяна на тапета - можете да си го свалите от <a href="http://ivan.tu-plovdiv.info/blog/wp-content/uploads/2008/05/change_wallpaperphp.gz">тук</a>. Това което прави е да сваля случайно дупе от <a href="http://babene.moskva.com/?do=Rub&amp;id=3">babene.ru</a> в temp директория и да ви го лепва на десктопа. Можете да си го пъхнете в crontab и всеки ден да сте с изненадващ нов тапет.<br />
FreeBSD-то на виртуалната машина все още върви. Разкарах му Х-а и почна да се държи по-добре <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Виртуалната машина перманентно превзе един от десктопите ми с Windows XP и си направих 7-ми десктоп във Fluxbox-a. Чудя се как нормалните хора живеят само с един десктоп в Windows.<br />
Открих топлата вода с Last.FM - можете да видите моя профил <a href='http://www.last.fm/user/ivanatora'>тук</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/05/16/%d0%bd%d0%b8%d1%89%d0%be-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%b5%d1%81%d0%bd%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Имената на функциите всъщност били указатели</title>
		<link>http://blog.ivanatora.info/2008/03/26/%d0%b8%d0%bc%d0%b5%d0%bd%d0%b0%d1%82%d0%b0-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8%d1%82%d0%b5-%d0%b2%d1%81%d1%8a%d1%89%d0%bd%d0%be%d1%81%d1%82-%d0%b1%d0%b8%d0%bb%d0%b8-%d1%83%d0%ba/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b8%25d0%25bc%25d0%25b5%25d0%25bd%25d0%25b0%25d1%2582%25d0%25b0-%25d0%25bd%25d0%25b0-%25d1%2584%25d1%2583%25d0%25bd%25d0%25ba%25d1%2586%25d0%25b8%25d0%25b8%25d1%2582%25d0%25b5-%25d0%25b2%25d1%2581%25d1%258a%25d1%2589%25d0%25bd%25d0%25be%25d1%2581%25d1%2582-%25d0%25b1%25d0%25b8%25d0%25bb%25d0%25b8-%25d1%2583%25d0%25ba</link>
		<comments>http://blog.ivanatora.info/2008/03/26/%d0%b8%d0%bc%d0%b5%d0%bd%d0%b0%d1%82%d0%b0-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8%d1%82%d0%b5-%d0%b2%d1%81%d1%8a%d1%89%d0%bd%d0%be%d1%81%d1%82-%d0%b1%d0%b8%d0%bb%d0%b8-%d1%83%d0%ba/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 08:37:41 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[пинизи]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/?p=57</guid>
		<description><![CDATA[Днес ни показаха един пиниз, според който имената на функциите в С са всъщност указатели към началния адрес на функцията като алгоритмична структура в кодовия сегмент на програмата. Т.е. като имаш адреса можеш да стартираш функцията. Ето една програма, която показва файдата от цялата работа: &#160; #include &#60;stdio.h&#62; int test &#40;int a&#41;&#123; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Днес ни показаха един пиниз, според който имената на функциите в С са всъщност указатели към началния адрес на функцията като алгоритмична структура в кодовия сегмент на програмата. Т.е. като имаш адреса можеш да стартираш функцията.<br />
Ето една програма, която показва файдата от цялата работа:</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="co2">#include &lt;stdio.h&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> test <span class="br0">&#40;</span><span class="kw4">int</span> a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;A: %d<span class="es0">\n</span>&quot;</span>,a<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> druga <span class="br0">&#40;</span><span class="kw4">int</span> a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;B: %d<span class="es0">\n</span>&quot;</span>,a<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a<span class="nu0">-1</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> plqk <span class="br0">&#40;</span><span class="kw4">int</span> <span class="br0">&#40;</span>*test<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="kw4">int</span> a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Rez ot test(%d)<span class="es0">\n</span>&quot;</span>,<span class="br0">&#40;</span>*test<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="nu0">3</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="kw1">return</span> <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; plqk<span class="br0">&#40;</span>test<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; plqk<span class="br0">&#40;</span>druga<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; plqk<span class="br0">&#40;</span>main<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> * p = <span class="br0">&#40;</span><span class="kw4">int</span> *<span class="br0">&#41;</span> test;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;test: %p<span class="es0">\n</span>&quot;</span>,test<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;druga: %p<span class="es0">\n</span>&quot;</span>,druga<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;p: %p<span class="es0">\n</span>&quot;</span>,p<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>За неразбралите - функцията plqk() извиква някоя от другите функции, като точно коя се записва във <strong>формалния параметър</strong> на бляк() <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/03/26/%d0%b8%d0%bc%d0%b5%d0%bd%d0%b0%d1%82%d0%b0-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8%d1%82%d0%b5-%d0%b2%d1%81%d1%8a%d1%89%d0%bd%d0%be%d1%81%d1%82-%d0%b1%d0%b8%d0%bb%d0%b8-%d1%83%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Асемблер за линукс</title>
		<link>http://blog.ivanatora.info/2008/03/13/%d0%b0%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b5%d1%80-%d0%b7%d0%b0-%d0%bb%d0%b8%d0%bd%d1%83%d0%ba%d1%81/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b0%25d1%2581%25d0%25b5%25d0%25bc%25d0%25b1%25d0%25bb%25d0%25b5%25d1%2580-%25d0%25b7%25d0%25b0-%25d0%25bb%25d0%25b8%25d0%25bd%25d1%2583%25d0%25ba%25d1%2581</link>
		<comments>http://blog.ivanatora.info/2008/03/13/%d0%b0%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b5%d1%80-%d0%b7%d0%b0-%d0%bb%d0%b8%d0%bd%d1%83%d0%ba%d1%81/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 15:33:21 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/?p=52</guid>
		<description><![CDATA[Днес доста учудващо ни накараха да пишем на асемблер, че и за x86 линукс. Сорса почти ни го метнаха на готово, ама се оказа че е доста елементарно. Което ме вкарва в малко размисъл относно природата на 'машинната инструкция' и 'асемблера', ама тези размишления са в разрез на всякакви правила и заучени положения и ако [...]]]></description>
			<content:encoded><![CDATA[<p>Днес доста учудващо ни накараха да пишем на асемблер, че и за x86 линукс. Сорса почти ни го метнаха на готово, ама се оказа че е доста елементарно. Което ме вкарва в малко размисъл относно природата на 'машинната инструкция' и 'асемблера', ама тези размишления са в разрез на всякакви правила и заучени положения и ако ги спомена някой разбирач ще ме насмели <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p> $ vim test.asm<br />
section .data<br />
msg db 'hello world',0xA   ; зареждаме текстов низ "здрасти" като променливата msg е указател към началния адрес (ех, това С), 0хА е знак 10, който познайте какво прави<br />
len equ $-msg                   ; променливата $ (долар) указвала текущия адрес, така че дължината на низа "здравей" ще се сметне лесно<br />
section .text<br />
global _start<br />
_start:                               ; входна точка<br />
mov EAX, 0x04                 ; изписването на текст на конзолата ставало през syscall от кърнела - функция с параметри. В ЕАХ се зарежда номера на функцията, а в следващите регистри параметрите. Функция номер 4 е изписване, която приема следните параметри:<br />
mov EBX, 0x01                 ; файлов дескриптор където ще се изписва<br />
mov ECX, msg                  ; съобщението<br />
mov EDX, len                   ; дължината му<br />
int 0x80                            ; а самото извикване на функцията става през прекъсване на 80h. Единственото възможно прекъсване (wtf)<br />
mov EAX, 0x01                ; пак ще извикваме функция, но този път за край на програмата (функция 1 - return)<br />
int 0x80<br />
$ nasm -f elf test.asm             # асемблираме кода<br />
$ ld -o test test.o                    # свързваме<br />
$ ./test                                     # изпълняваме<br />
hello world<br />
$ ls -lh test*                            # да видим общия размер на всичко току що създадено<br />
-rwxr-xr-x 1 ivanatora users  757 2008-03-14 20:26 test*<br />
-rw-r--r-- 1 ivanatora users  193 2008-03-14 20:30 test.asm<br />
-rw-r--r-- 1 ivanatora users  704 2008-03-14 20:30 test.o</p></blockquote>
<p>Да видим същия резултат постигнат на С:</p>
<blockquote><p> $ vim hello.c<br />
#include &lt;stdio.h&gt;<br />
int main(void){<br />
printf("Hello world\n");<br />
return 0;<br />
}<br />
$ gcc -o hello hello.c<br />
$ ./hello<br />
Hello world<br />
$ ls -lh hello*<br />
-rwxr-xr-x 1 ivanatora users 6.2K 2008-03-14 20:37 hello*<br />
-rw-r--r-- 1 ivanatora users   74 2008-03-14 20:37 hello.c</p></blockquote>
<p>Десет пъти по-голям изпълним файл. Ако същото се компилира пък в M$ Visual Studio, няма да говоря за размера <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ПП. Егх тоя гаден WordPress, нито шрифта е хубав нито индентациите са си на мястото, а и на всичкото отгоре се опитва да ми затвори тага &lt;stdio.h&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/03/13/%d0%b0%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b5%d1%80-%d0%b7%d0%b0-%d0%bb%d0%b8%d0%bd%d1%83%d0%ba%d1%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Не можах да издържа :)</title>
		<link>http://blog.ivanatora.info/2008/02/03/%d0%bd%d0%b5-%d0%bc%d0%be%d0%b6%d0%b0%d1%85-%d0%b4%d0%b0-%d0%b8%d0%b7%d0%b4%d1%8a%d1%80%d0%b6%d0%b0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bd%25d0%25b5-%25d0%25bc%25d0%25be%25d0%25b6%25d0%25b0%25d1%2585-%25d0%25b4%25d0%25b0-%25d0%25b8%25d0%25b7%25d0%25b4%25d1%258a%25d1%2580%25d0%25b6%25d0%25b0</link>
		<comments>http://blog.ivanatora.info/2008/02/03/%d0%bd%d0%b5-%d0%bc%d0%be%d0%b6%d0%b0%d1%85-%d0%b4%d0%b0-%d0%b8%d0%b7%d0%b4%d1%8a%d1%80%d0%b6%d0%b0/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 15:57:58 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[смях]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/?p=35</guid>
		<description><![CDATA[Внимавайте как си кръщавате децата]]></description>
			<content:encoded><![CDATA[<p>Внимавайте как си кръщавате децата <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<img src="http://tu-plovdiv.info/test2/exploits_of_a_mom.png" alt="Exploit" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/02/03/%d0%bd%d0%b5-%d0%bc%d0%be%d0%b6%d0%b0%d1%85-%d0%b4%d0%b0-%d0%b8%d0%b7%d0%b4%d1%8a%d1%80%d0%b6%d0%b0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The march of progress</title>
		<link>http://blog.ivanatora.info/2007/11/17/the-march-of-progress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-march-of-progress</link>
		<comments>http://blog.ivanatora.info/2007/11/17/the-march-of-progress/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 12:07:06 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[смях]]></category>
		<category><![CDATA[сорс]]></category>

		<guid isPermaLink="false">http://ivan.tu-plovdiv.info/blog/?p=20</guid>
		<description><![CDATA[Това го видях на един друг блог и ме накара да се замисля От къде са тръгнали синтактичните правила и на къде отиват. The March of Progress 1980: C printf("%10.2f", x); 1988: C++ cout &#60; &#60; setw(10) &#60;&#60; setprecision(2) &#60;&#60; showpoint &#60;&#60; x; 1996: Java java.text.NumberFormat formatter = java.text.NumberFormat.getNumberInstance(); formatter.setMinimumFractionDigits(2); formatter.setMaximumFractionDigits(2); String s = formatter.format(x); [...]]]></description>
			<content:encoded><![CDATA[<p>Това го видях на един друг <a href="http://blog.marudina.net/?p=385">блог</a> и ме накара да се замисля <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
От къде са тръгнали синтактичните правила и на къде отиват.<br />
<code><br />
The March of Progress</code></p>
<p>1980: C<br />
printf("%10.2f", x);</p>
<p>1988: C++<br />
cout &lt; &lt; setw(10) &lt;&lt; setprecision(2) &lt;&lt; showpoint &lt;&lt; x;</p>
<p>1996: Java<br />
java.text.NumberFormat formatter = java.text.NumberFormat.getNumberInstance();<br />
formatter.setMinimumFractionDigits(2); formatter.setMaximumFractionDigits(2);<br />
String s = formatter.format(x); for (int i = s.length(); i &lt; 10; i++) System.out.print(' ');<br />
System.out.print(s);</p>
<p>2004: Java<br />
System.out.printf("%10.2f", x);</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2007/11/17/the-march-of-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

