<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>UProLa</title>
	<atom:link href="http://danbst.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://danbst.wordpress.com</link>
	<description>Неокріпші думки</description>
	<lastBuildDate>Fri, 27 Jan 2012 06:25:47 +0000</lastBuildDate>
	<language>uk</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='danbst.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>UProLa</title>
		<link>http://danbst.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://danbst.wordpress.com/osd.xml" title="UProLa" />
	<atom:link rel='hub' href='http://danbst.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Дещо про один міф ООП</title>
		<link>http://danbst.wordpress.com/2012/01/18/%d0%b4%d0%b5%d1%89%d0%be-%d0%bf%d1%80%d0%be-%d0%be%d0%b4%d0%b8%d0%bd-%d0%bc%d1%96%d1%84-%d0%be%d0%be%d0%bf/</link>
		<comments>http://danbst.wordpress.com/2012/01/18/%d0%b4%d0%b5%d1%89%d0%be-%d0%bf%d1%80%d0%be-%d0%be%d0%b4%d0%b8%d0%bd-%d0%bc%d1%96%d1%84-%d0%be%d0%be%d0%bf/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 16:23:00 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=597</guid>
		<description><![CDATA[Я уже давно задумувався, що з цим ООП щось негаразд. Буквально на днях я нарешті розшифрував для себе цю абревіатуру &#8211; об&#8217;єктно-орієнтоване програмування. Це було щось типу &#8220;a-ha effect&#8221;, еврика, відкриття століття. Тепер я зміг сформулювати своє перше критичне зауваження до парадигми: чому ми класс-орієнтоване програмування називаємо об&#8217;єктно-орієнтованим? Якщо копнути глибше, то під ООП кожен [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=597&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Я уже давно задумувався, що з цим ООП щось негаразд.</p>
<p>Буквально на днях я нарешті розшифрував для себе цю абревіатуру &#8211; об&#8217;єктно-орієнтоване програмування. Це було щось типу &#8220;a-ha effect&#8221;, еврика, відкриття століття. Тепер я зміг сформулювати своє перше критичне зауваження до парадигми: чому ми <b>класс-орієнтоване</b> програмування називаємо об&#8217;єктно-орієнтованим?</p>
<p>Якщо копнути глибше, то під ООП кожен розуміє щось своє або цілий комплекс властивостей:<br />
- власне створення об&#8217;єктів і пересилка повідомлень між ними<br />
- наслідування і поліморфізм об&#8217;єктів<br />
- писанина типів об&#8217;єктів (класів). Клас &#8211; це тип<br />
- писанина проміжних абстракцій-класів у мовах, які тільки їх і підтримують (С№, Java)<br />
- організація коду (інкапусляція) у певні одиниці (класи)<br />
- створення ієрархічних структур даних<br />
- зручності типу властивостей, енумів і тп<br />
- інтерфейси</p>
<p>Зараз добре проглядається тенденція розглядати посилання повідомлення як виклик методу. (Якщо хтось не в&#8217;їхав у цю фразу: між об&#8217;єктами є тільки один тип взаємодії &#8211; посилання конкретного повідомлення від одного об&#8217;єкта до іншого, і у виразі &#8220;abcde&#8221;.replace(&#8220;a&#8221;,&#8221;z&#8221;) назва функції з аргументами буде повідомленням, &#8220;abcde&#8221; &#8211; об&#8217;єктом отримувачем, а посилаючим об&#8217;єктом буде наша програма або той об&#8217;єкт, в якому ця програма знаходиться). Проте тоді постає питання: у чому принципова різниця між <b>ОКОП (об&#8217;єкт-клас ОП)</b> і <b>структурним (модульним) програмуванням</b>?</p>
<p>Правильна відповідь: у наслідуванні та поліморфізмі. Тепер таке питання: навіщо вони потрібні?<br />
- якщо маємо кілька схожих абстракцій, то можна зменшити кількість дублюючого коду (наслідування)<br />
- можна вживати дочірній тип замість батьківського (поліморфізм). Тобто, програмі все-рівно, з яким об&#8217;єктом працювати &#8211; якщо інтерфейси однакові, то пофігу на реалізацію логіки<br />
- можна створювати свою логіку на основі існуючих компонент у пару кроків (наслідування)</p>
<p>Власне, за це і хвалять ООПшники свою парадигму. Я ж бо відповім на кожен з цих пунктів так:<br />
1. Цей ефект досягається при правильній організації функцій, читай про рефакторинг методів<br />
2. буде нижче<br />
3. Модульне програмування також це забезпечує.</p>
<p>Щодо п 2. Він єдиний стримував мене від написання даного посту. Я думав, що альтернатив йому не існує. А вчора виявив, що по даному пункту уже давно піднято проблему Subtyping-Subclassing. Ось як я її формулюю:</p>
<p>Наслідування класів не еквівалентно створенню підтипів. Або, іншими словами, об&#8217;єкт наслідуваного класу (цебто підтипу) не завжди поводить себе у програмах, які очікують на вході об&#8217;єкт батьківсього класу (цебто типу), коректно.</p>
<p>Це здається маленькою проблемою (або не здається проблемою взагалі!), проте коли хтось думає про субклас як про субтип, то він здійснює логічну помилку. Архітектура проекту, яка виконується при такій зіпсованій логіці, обо&#8217;язково перетвориться у монструозну мішанину змістів і нам знадобляться паттерни, обмеження на гнучкість, обмеження на розширення і тд і тп. Причому шанс цього збільшується при розростанні проекту.</p>
<p>Про проблему я <a href="http://okmij.org/ftp/Computation/Subtyping/">прочитав у Олега</a>. Думаю, вам також корисно буде це зробити, якщо досі вважаєте підклас підтипом. З моєї точки зору, вся ця махінація з класами є не більш ніж синтаксичним екстрактом з цукрових буряків, точно така сама як динамічна типізація або створення змінних у будь-якому місці, а не тільки у заголовку. А ще хорошим прикладом того, як здавалось би логічні речі (представлення навколишнього світу у вигляді ієрархії об&#8217;єктів) є насправді не завжди логічним з точки зору математики.</p>
<p>Peace!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/597/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=597&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2012/01/18/%d0%b4%d0%b5%d1%89%d0%be-%d0%bf%d1%80%d0%be-%d0%be%d0%b4%d0%b8%d0%bd-%d0%bc%d1%96%d1%84-%d0%be%d0%be%d0%bf/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Ель Ксах. Трейлер^W Пролог</title>
		<link>http://danbst.wordpress.com/2011/12/30/%d0%b5%d0%bb%d1%8c-%d0%ba%d1%81%d0%b0%d1%85-%d1%82%d1%80%d0%b5%d0%b9%d0%bb%d0%b5%d1%80w-%d0%bf%d1%80%d0%be%d0%bb%d0%be%d0%b3/</link>
		<comments>http://danbst.wordpress.com/2011/12/30/%d0%b5%d0%bb%d1%8c-%d0%ba%d1%81%d0%b0%d1%85-%d1%82%d1%80%d0%b5%d0%b9%d0%bb%d0%b5%d1%80w-%d0%bf%d1%80%d0%be%d0%bb%d0%be%d0%b3/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 13:44:30 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=580</guid>
		<description><![CDATA[- Діду, а чому імператор заборонив магію? Тихо потріскував вогонь, і легенькі яскраві мушки вилітали з нього вверх, назустріч холоду і смерті. В хатинці все-рівно було прохолодно, тому Горобець лежав укутаний у хутряний коцик і накритий шкіряним плащем. Дідовим шікряним плащем&#8230; За малечою потрібно доглядати, берегти, адже інакше не вийде з неї в майбутньому нічого [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=580&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>- Діду, а чому імператор заборонив магію?</p>
<p>Тихо потріскував вогонь, і легенькі яскраві мушки вилітали з нього вверх, назустріч холоду і смерті. В хатинці все-рівно було прохолодно, тому Горобець лежав укутаний у хутряний коцик і накритий шкіряним плащем. Дідовим шікряним плащем&#8230; За малечою потрібно доглядати, берегти, адже інакше не вийде з неї в майбутньому нічого путнього. Хто сказав, що проблеми і незгоди в дитинстві зроблять воїна в майбутньому? Ніколи. Тільки виховання, розуміння цінностей і ціни життю може цьому допомогти. Дід про це чудово пам’ятав, адже саме такими словами виховували його. Маленьким треба допомагати, адже у них ще стільки незгаяного часу, котрим можна *правильно* розпоряджатись. І цьому можна навчити, варто тільки доглядати за ним. Але ні в якому разі не піддакувати примхам, він малий, а отже не розуміє, що бажання &#8211; це ніщо перед часом, і коли &#8230;</p>
<p>- Хіба магія може зробити комусь щось погане? Якби у нас була магія, ми могли б зробити багато хліба і роздати його сусідам. І не були би голодні! Я хочу бути магом! Я прийду до імператора і покажу, що магія &#8211; це добре. Він не зможе мене не послухати!</p>
<p>Дід голосно кашлянув: &#8220;Аа-акх, кха-аа&#8221; і мимоволі здригнувся. Йому стало прохолодно. Остання дерев’яшка уже давно тліла в печі, тому підживити вогонь було нічим. А на вулицю вночі не вийдеш, у тебе ж немає нічного зору, яке так сильно допомагає ельфам. Та й взагалі &#8211; виходити з дому немає змісту, бо сокири немає. Позичив Ібрагіму, сиди тепер, мерзни. Не те щоб Ібрагім був поганим парубком, ні, він хороший, виконує що каже, але чому він приходить саме тоді, коли скрута от-от почнеться, але ти цього ще не знаєш? Хоча відсутність дров передбачити було неважко&#8230; Ех, старість дає про себе знати&#8230;</p>
<p>- А ще я збудую монастир, де буду розповідати всім про магію, і стану відомим на весь Світ! Я куплю багато книжок і напишу в них всі заклинання, які я знаю. І буду продавати книжки людям, і стану багатим! Діду, я стану багатим!</p>
<p>Малий просто сяяв від своїх фантазій. Дригався весь, ніби вмоститись не може і сміявся. Ось воно &#8211; щастя, подумав дід. Воно знаходиться всередині тебе, а не в оточуючих речах. Речі слугують всього-лиш триггерами, і нетямущі приймають ці триггери за прояви інстансів щастя. Та й біс з ними, якщо вони тобі не заважають. А то бували й такі, яких убити було мало&#8230; Щоправда давно це було, коли я ще був молодий&#8230;</p>
<p>- Я придумав! Я наберу так багато грошей, що сам стану Імператором і всім дозволю магію! Ох, як це круто!..</p>
<p>- Якщо чесно, малий, я тобі трошки збрехав. Імператор заборонив не всю магію.</p>
<p>- Не всю?! &#8211; його очі та губи так і залишилися у вигляді знаку питання.</p>
<p>- Не всю. &#8211; Думаю, малому уже можна розповідати такі казки. Жаль, що вони не зовсім казки. &#8211; Імператор заборонив тільки білу магію. Чорну магію можна вчити і застосовувати. Власне, цим і займаються на нашому континенті.</p>
<p>- А в чому різниця між чорною і білою магією?</p>
<p>- Ну&#8230; Основна різниця у використанні часу. Чорна магія потребує мало часу, а біла &#8211; багато.</p>
<p>- Тоді виходить, що чорна магія &#8211; це добре! А коли я зможу почати її вчити?</p>
<p>Цю репліку дід очікував. Це означає, що зі здоровим глуздом у малого все в порядку. Залишилось дочекатись, коли проявиться цікавість &#8211; поршень усього сущого.</p>
<p>- Коли тобі стане 12 років, до нас прийдуть енцефали імператора. Вони шукають дітей, здібних до магії. Розпізнати енцефала дуже важко, адже вони використовують свої хитрі штуки для маскування і допитування. Якщо ти зможеш виконати їхні задачі, вони запропонують тобі відвідати замок імператора. Відмовитись від пропозиції ти не зможеш, &#8211; сумно додав дід.</p>
<p>Малий задумався і замовк. Кілька хвилин дід чекав наступного запитання, але очі у малого були закриті. &#8220;Невже заснув?&#8221;, подумав дід і тільки зібрався піднятись та підійти до лавки, як Горобець озвався, з новим настроєм у голосі:</p>
<p>- А задачки там будуть важкі?</p>
<p>Останні пломені вогню погасли і тільки розжарені вуглики освітлювали кімнату&#8230; якщо це можна було назвати освітленням. Силуети предметів здавались тінями&#8230; а може, це і були тіні? Хуртовина на дворі тільки посилювалась, це добре відчувалось через сильні тріскоти на стрісі. Грошей на черепицю їм не незбирати на заробітки діда, а малий ще не скоро зможе сам приносити вагомий дохід. Важко виховувати дітей самому&#8230;</p>
<p>- Енцефали отримають від тебе рішення задачі так, що ти цю задачку навіть не помітиш. Вони справді дуже хитрі&#8230; і розумні. Вони шукають дітей зі спеціальним типом мислення, а у тебе він виражений, добре виражений.</p>
<p>- Тобто, я вирішу їхні задачки і мене заберуть в замок вчити магію? &#8211; усміхнувся малий.</p>
<p>На цей раз замовк дід. Хоч ця людиська ще маленька, але уже може різанути душу. Це неприємно признавати, але увесь стан речей веде тільки до одного. Не вийде діду розповісти малому *суть* усього світу, яку так довго розкопував він та його соратники багато-багато років тому. Не взнає малий про великих Наставників і героїчні битви на гранях Світу. Не зможе оцінити усі сторони безмежної Магії і виконати правильний глобально, а не локально, вибір. З іншої сторони, стандартизація &#8211; це добре. Імператору вдалось знайти закони, які схожі на закони і виконуються як закони.</p>
<p>- Так&#8230; Тобі розкажуть все&#8230; про Чорну Магію.</p>
<p>Усмішка знову з’явилась на обличчі Горобця. Він закрив очі і заснув, вірніше, діду так здалося. З тихим скрипом дід спустився вниз і підійшов до лавочки. Хоч вона і на півметра коротша від діда, але згоорнутись калачиком завжди можна. З двері чулося тихе &#8220;тук&#8230;. тук&#8230;.&#8221;, дах горів шумом вітру, світло вогню втекло майже все, а озноб торкнувся плеча. Якби не голод, з цим ще можна було жити. Але зараз було дуже важко. Ще ці питання малого&#8230;</p>
<p>Дід засинав. В останній момент перед сном він згадав про Еліту. &#8220;Якщо це не легенди, то Еліта скоро відродиться. І тоді душу малого можна буде врятувати. Ех, коли ж це станеться?&#8221;</p>
<p>Остання червона вуглинка спалахнула у свій останній раз і назавжди віддала світло туди, де у ньому найбільша потреба &#8211; у Ніщо.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/580/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/580/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/580/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=580&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/12/30/%d0%b5%d0%bb%d1%8c-%d0%ba%d1%81%d0%b0%d1%85-%d1%82%d1%80%d0%b5%d0%b9%d0%bb%d0%b5%d1%80w-%d0%bf%d1%80%d0%be%d0%bb%d0%be%d0%b3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Мої погляди на &#8230; кохання?</title>
		<link>http://danbst.wordpress.com/2011/12/06/%d0%bc%d0%be%d1%97-%d0%bf%d0%be%d0%b3%d0%bb%d1%8f%d0%b4%d0%b8-%d0%bd%d0%b0-%d0%ba%d0%be%d1%85%d0%b0%d0%bd%d0%bd%d1%8f/</link>
		<comments>http://danbst.wordpress.com/2011/12/06/%d0%bc%d0%be%d1%97-%d0%bf%d0%be%d0%b3%d0%bb%d1%8f%d0%b4%d0%b8-%d0%bd%d0%b0-%d0%ba%d0%be%d1%85%d0%b0%d0%bd%d0%bd%d1%8f/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 13:23:00 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Пости]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=572</guid>
		<description><![CDATA[Копаючись у старих файлах надибав на невідісланий лист мого авторства. Мене дещо шокував його вміст і я взнав про себе багато нового. Хоч це не прийнято (у хлопців, у всякому разі) опубліковувати тексти подібного вмісту ще за життя автора, я порушу традицію. Натомість, закрию зірочками всі точні дані і буду поводитись так, ніби я уже [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=572&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Копаючись у старих файлах надибав на невідісланий лист мого авторства. Мене дещо шокував його вміст і я взнав про себе багато нового. Хоч це не прийнято (у хлопців, у всякому разі) опубліковувати тексти подібного вмісту ще за життя автора, я порушу традицію. Натомість, закрию зірочками всі точні дані і буду поводитись так, ніби я уже помер (іншими словами, коментувати не буду ні тут ні IRL).</p>
<p>***</p>
<p>Пишу тобі, бо не можу спати. Весь час перевіряю гугл, в надії &#8230; не знаю навіть,<br />
на що сподіваюсь. Ти реальна, і навіть досягаєма, проте не хочу йти до тебе без<br />
нічого.</p>
<p>Що мені в тобі так подобається? Перше і головне &#8211; зовнішність. Твої брови зводять<br />
мене з розуму. Усміхнені очі немовби граються з моїми фантазіями. Косички з-під<br />
бандани гармонічно доповнюють стиль. Веснянки ховають несправжню блідноту, а<br />
губи &#8230; губи утворюють посмішку покраще моєї =). Взагалі так, мені подобається,<br />
що ти красивіша від мене.</p>
<p>Коли тебе помічаю, відчуває таке відчуття, ніби злітаю. Це й справді досить<br />
точне порівняння. Воно зникає, якщо я розмовляю з тобою, тоді я знову відчуваю<br />
реальність і реальні проблеми/перешкоди. Єдине, що погано &#8211; всі думки захоплені<br />
цим почуттям легкості від зустрічі, і я намагаюсь відчути її знову, перечитуючі<br />
твої віртуальні думки. Трохи попускає, проте ти пишеш небагато, а отже<br />
почуттєвий голод дає про себе знати дуже-дуже скоро.</p>
<p>Хоч відчуття і приємне, воно трошки дістає. Як уже згадував, достатньо з тобою<br />
поспілкуватись, щоб перестати літати. У мене таке враження, що якраз в цьому і<br />
проявляється кохання &#8211; прив’язка на відстані, свобода разом. Хоча може я щось<br />
плутаю.</p>
<p>Я про тебе нічого не знаю. Гугл дає інформацію (ти не ховаєшся), проте вона<br />
досить суха&#8230;</p>
<p>Звати: ***<br />
Дата народження: ***, 22 роки<br />
Навчання: ***<br />
Адреса: ***<br />
Робота: ***, програміст<br />
Інтереси: ***<br />
&#8212; Тут має бути купа посилань на фотографії&#8230; &#8212;<br />
***</p>
<p>Якби мені дали цю картку, я б подумав &#8211; типова дівчина (дівчатам-програмістам<br />
дивуватись перестав). Я б сказав, що люблю &#8220;родзинки&#8221; у людях, а твої гугл не<br />
видає. Схиляюсь до думки, що у тебе їх немає і ти також шукаєш їх у інших людях.</p>
<p>У мене &#8220;родзинок&#8221; немає. Я змирився з своїм оточенням, не намагаюсь його<br />
змінювати. У мене немає змісту наближатись до тебе, окрім як по банальним<br />
причинам типу &#8220;дай води будь-ласка&#8221;. А щодо відчуття легкості &#8211; якщо його<br />
ігнорувати, то воно пройде. На своєму досвіді переконався, що воно плинне.<br />
Перестаєш відчувати його навіть на відстані. Невідомо тільки, скільки потрібно<br />
часу.</p>
<p>А поки-що пишу сповідь. Без змісту, без лейтмотиву, сповідь у тимчасовому<br />
коханні. Думаю, всім приємно таку отримати як лист, незалежно від сімейного<br />
стану (до речі, не маю поняття, який він у тебе, для мене це неважливо).<br />
Щоправда для підтримки гри не розкриваю свого імені. Незнаю, чи важко здогадатись<br />
хто я. Важко прийняти це, саме тому ти опиняєшся у лещатах інтересів. Саме тут є<br />
важливий момент &#8211; запам’ятати відчуття невизначеності. Воно зникне досить швидко,<br />
проте може перегорнути сторінку в твоєму житті.</p>
<p>Полегшало. На дворі літо, подібних закоханостей буде ще багато (а скільки було,<br />
навіть рахувати не берусь). Писати лист кожній буде напряжно, тому буде задіяно<br />
комбо залізних методів &#8211; ігнор+забудь.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/572/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=572&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/12/06/%d0%bc%d0%be%d1%97-%d0%bf%d0%be%d0%b3%d0%bb%d1%8f%d0%b4%d0%b8-%d0%bd%d0%b0-%d0%ba%d0%be%d1%85%d0%b0%d0%bd%d0%bd%d1%8f/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Провайдери типів F# 3.0</title>
		<link>http://danbst.wordpress.com/2011/11/16/%d0%bf%d1%80%d0%be%d0%b2%d0%b0%d0%b9%d0%b4%d0%b5%d1%80%d0%b8-%d1%82%d0%b8%d0%bf%d1%96%d0%b2-f/</link>
		<comments>http://danbst.wordpress.com/2011/11/16/%d0%bf%d1%80%d0%be%d0%b2%d0%b0%d0%b9%d0%b4%d0%b5%d1%80%d0%b8-%d1%82%d0%b8%d0%bf%d1%96%d0%b2-f/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 21:40:52 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=567</guid>
		<description><![CDATA[Хоч я зараз і роблю черговий репост, але дуже хочеться поділитись з людьми новою (відносно) інформацією. Провайдери типів (Type Providers) &#8211; новенька фіча недавно випущеного F# 3.0. Це спосіб підключення до готової програми типів, згенерованих у іншому місці. Перший і основний приклад використання &#8211; вбудовування SQL у мову. Багато де, у тому числі в нашій [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=567&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Хоч я зараз і роблю черговий репост, але дуже хочеться поділитись з людьми новою (відносно) інформацією.</p>
<p>Провайдери типів (Type Providers) &#8211; новенька фіча недавно випущеного F# 3.0. Це спосіб підключення до готової програми типів, згенерованих у іншому місці. </p>
<p>Перший і основний приклад використання &#8211; вбудовування SQL у мову. Багато де, у тому числі в нашій компанії, використовуться добування інформації з бази приблизно у такому вигляді:</p>
<pre>
    let db = MegaDataBase.Connect()
    let result = db.Query("SELECT * FROM MEGATABLE WHERE 1 != 0")
</pre>
<p>З новими провайдерами типу можна зробити наступне:</p>
<pre>
    [&lt;Generate&gt;]
    type schema = SqlDataConnection&lt;...&gt;

    let db = schema.GetDataContext()
    let result = query {
        for record in db.MEGATABLE do
        where (1 != 0)
        select record
    }
</pre>
<p>Даний код буде повністю статично типізований! Якщо вас це не дивує, ось інший аргумент<br />
<img src="http://habrastorage.org/storage1/2d970be5/466520ba/6e019f39/4a8d0c73.png" /></p>
<p>Щоб пояснити, чому провайдери типів більш потужні, ніж просто Language Integrated Query, ось приклад щодо регекспів:<br />
<pre class="brush: fsharp;">
open Samples.FSharpPreviewRelease2011.RegexTypeProvider

type T = RegexTyped&lt; @&quot;(?&lt;AreaCode&gt;^\d{3})-(?&lt;PhoneNumber&gt;\d{3}-\d{4}$)&quot;&gt;
let reg = T() 
let result = T.IsMatch(&quot;425-123-2345&quot;)
let r = reg.Match(&quot;425-123-2345&quot;).AreaCode.Value //r equals &quot;425&quot;
</pre></p>
<p>Наскільки я зрозумів, регексп парситься на льоту і Intellisense автоматом підхоплює його структуру.</p>
<p>На мою думку, F# уже став сильно практичнішим за свого імперативного сородича. І чим раз, тим більше хочеться відповісти &#8220;Так!&#8221; на питання &#8220;Чи полетить?&#8221;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/567/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=567&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/11/16/%d0%bf%d1%80%d0%be%d0%b2%d0%b0%d0%b9%d0%b4%d0%b5%d1%80%d0%b8-%d1%82%d0%b8%d0%bf%d1%96%d0%b2-f/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage1/2d970be5/466520ba/6e019f39/4a8d0c73.png" medium="image" />
	</item>
		<item>
		<title>Розбити рядок прогаликами</title>
		<link>http://danbst.wordpress.com/2011/11/08/%d1%80%d0%be%d0%b7%d0%b1%d0%b8%d1%82%d0%b8-%d1%80%d1%8f%d0%b4%d0%be%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d0%b0%d0%bb%d0%b8%d0%ba%d0%b0%d0%bc%d0%b8/</link>
		<comments>http://danbst.wordpress.com/2011/11/08/%d1%80%d0%be%d0%b7%d0%b1%d0%b8%d1%82%d0%b8-%d1%80%d1%8f%d0%b4%d0%be%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d0%b0%d0%bb%d0%b8%d0%ba%d0%b0%d0%bc%d0%b8/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 18:52:54 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[F# example]]></category>
		<category><![CDATA[F# slice]]></category>
		<category><![CDATA[F# small tasks]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=551</guid>
		<description><![CDATA[Пост для тренування мізків. Дозволяється використовувати будь-яку мову. Дозволяється висловлювати свою думку на рахунок чужого коду (code review). Дозволяєтсья пропонувати НЕоптимальні варіанти &#8211; типу &#8220;а ось так робити не варто!&#8221;. Задача Вказаний рядок розбити прогаликами на блоки по 4. Приклад: &#8220;ХХХХХХХХХ&#8221; -&#62; &#8220;XXXX XXXX X&#8221; Застосування: номер банківської картки потрібно відобразити розбитим на блоки по [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=551&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Пост для тренування мізків. Дозволяється використовувати будь-яку мову. Дозволяється висловлювати свою думку на рахунок чужого коду (code review). Дозволяєтсья пропонувати НЕоптимальні варіанти &#8211; типу &#8220;а ось так робити не варто!&#8221;.</p>
<h3>Задача</h3>
<p>Вказаний рядок розбити прогаликами на блоки по 4.<br />
<b>Приклад</b>: &#8220;ХХХХХХХХХ&#8221; -&gt; &#8220;XXXX XXXX X&#8221;<br />
<b>Застосування</b>: номер банківської картки потрібно відобразити розбитим на блоки по 4 символи, для зручності.<br />
<img alt="" src="http://eig.do.am/visa-classic-credit-card.jpg" title="Банківська картка" class="aligncenter" width="220" height="150" /></p>
<h3>Python</h3>
<p>Моє рішення йде через рекурсію (щиро сподіваюсь, що python знає про tail call). Чи зможете Ви запропонувати інше рішення задачі?<br />
<pre class="brush: python;">
def maskString(str):
    breakLine = lambda str: [str] \
                            if len(str) &lt;= 4 \
                            else [str[:4]] + breakLine(str[4:])
    return &quot; &quot;.join(breakLine(str))
</pre></p>
<p>by <b>bunyk</b></p>
<p>Ітерація по всім символам з додаванням прогаликів у потрібних місцях.<br />
<pre class="brush: python;">
def spaced_blocks(s):
    g = (x+' ' if i % 4 == 3 else x for i, x in enumerate(s))
    return ''.join(g).strip()
</pre></p>
<p>by <b>Александр Щапов</b></p>
<p>Використовуємо зручний Пайтонівський спосіб вирізання рядка (порівняй з кількістю символів для виклику методу substring у інших мовах).<br />
<pre class="brush: python;">
def make_me_spaced(s):
    return ' '.join((s[x:x + 4] for x in range(0, len(s), 4)))
</pre></p>
<h3>F#</h3>
<p>Мій пайтонівський алгоритм, але записаний іншими словами і (sic!) без явної рекурсії.<br />
<pre class="brush: fsharp;">
let maskString =
    Seq.unfold(fun state -&gt; match String.length state with
                            | 0 -&gt; None
                            | x -&gt; Some(state.Substring(0,min x 4),state.Substring(min x 4)))
    &gt;&gt; Seq.reduce (fun r s -&gt; r + &quot; &quot; + s)
</pre></p>
<h3>Clojure</h3>
<p>by <b>alexyakushev</b></p>
<p>Функціональний варіант не прокатив, тому був запропонований частково імперативний підхід.<br />
<pre class="brush: clojure;">
(use '[clojure.string :only (join)])

(defn spaceString [t]
  (-&gt;&gt; (for [c [(count t)] i (range 0 c 4)]
         (.substring t i (min (+ i 4) c)))
       (interpose &quot; &quot;) join))
</pre><br />
Трошки поміркувавши, автор видав правильне, функціональне рішення.<br />
<pre class="brush: clojure;">
(use '[clojure.string :only (join)])

(def spaceString
  (comp join flatten
        (partial interpose &quot; &quot;)
        (partial partition 4 4 nil)))
</pre></p>
<h3>Common Lisp</h3>
<p>by <b>dmytrish</b></p>
<p>Через рекурсію. Не впевений, що тут застосовна хвостова оптимізація&#8230;<br />
<pre class="brush: clojure;">
(defun spacify (s) 
  (if (&gt; 5 (length s)) 
      s 
      (concatenate 'string (subseq s 0 4) &quot; &quot; (spacify (subseq s 4)))))
</pre></p>
<h3>Haskell</h3>
<p>by <b>Winnie</b></p>
<p>donut &#8211; це так автор назвав функцію makeSpaced (для тих, хто не в курсі).<br />
<pre class="brush: fsharp;">
donut s = donut' (-1) s
  where donut' _ [] = []
        donut' 3 (x:sx) = ' ' : x : donut' 0 sx
        donut' i (x:sx) = x : donut' (i+1) sx
</pre></p>
<p>by <b>Dmytro Sirenko</b></p>
<p><pre class="brush: fsharp;">
spacify s = unwords (map (take 4) (takeWhile (not.null) (iterate (drop 4) s)))
</pre></p>
<h3>Regular Expressions</h3>
<p>by <b>Чувак, юзающий регекспы</b></p>
<p>Реально круте рішення!<br />
<pre class="brush: fsharp;">
/(....)(?!$)/
replace with
/$1 /
</pre></p>
<p>by <b>bunyk</b></p>
<p>Зручніший варіант, пригодиться якщо будемо &#8220;маштабувати&#8221; код.<br />
<pre class="brush: fsharp;">
/(.{4})(?!$)/
replace with
/$1 /
</pre></p>
<h3>K (kona implementation)</h3>
<p>В спробі зробити коротше за регекспи рішення, отримав таку ось катавасію. У самого автора kona не вийшло зробити коротше, що означає &#8211; k не панацея.<br />
<pre class="brush: fsharp;">
{1_,/&quot; &quot;,/:(0 +\4+&amp;_(-1+#x)%4)_ x}
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/551/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=551&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/11/08/%d1%80%d0%be%d0%b7%d0%b1%d0%b8%d1%82%d0%b8-%d1%80%d1%8f%d0%b4%d0%be%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d0%b0%d0%bb%d0%b8%d0%ba%d0%b0%d0%bc%d0%b8/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>

		<media:content url="http://eig.do.am/visa-classic-credit-card.jpg" medium="image">
			<media:title type="html">Банківська картка</media:title>
		</media:content>
	</item>
		<item>
		<title>Паскаль на букву &#8230; Py!</title>
		<link>http://danbst.wordpress.com/2011/11/05/%d0%bf%d0%b0%d1%81%d0%ba%d0%b0%d0%bb%d1%8c-%d0%bd%d0%b0-%d0%b1%d1%83%d0%ba%d0%b2%d1%83-py/</link>
		<comments>http://danbst.wordpress.com/2011/11/05/%d0%bf%d0%b0%d1%81%d0%ba%d0%b0%d0%bb%d1%8c-%d0%bd%d0%b0-%d0%b1%d1%83%d0%ba%d0%b2%d1%83-py/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 23:58:23 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=542</guid>
		<description><![CDATA[Сьогодні поговоримо про Пайтон і про те, як на Пайтоні написати простеньку curses гуйовину. Python + curses у ролі Pascal + CRT &#8211; погляд сучасності Досі пам’ятаю, скільки щастя надавав модуль crt у дитинстві. Можливість відмальовки різноколірного тексту, прекрасний clrscr;, потужний gotoxy()&#8230; Це були справді одні з кращих моментів програмування на той момент. Тоді ж [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=542&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Сьогодні поговоримо про Пайтон і про те, як на Пайтоні написати простеньку curses гуйовину.</p>
<h2>Python + curses у ролі Pascal + CRT &#8211; погляд сучасності</h2>
<p>Досі пам’ятаю, скільки щастя надавав модуль <b>crt</b> у дитинстві. Можливість відмальовки різноколірного тексту, прекрасний clrscr;, потужний gotoxy()&#8230; Це були справді одні з кращих моментів програмування на той момент. Тоді ж було вперше для себе відкрито такі поняття як &#8220;псевдографіка&#8221;, &#8220;елементи керування&#8221;, &#8220;select&#8221; і наскільки широко їх можна використовувати для візуалізації моделі програми.</p>
<p>Зараз же, враховуючи повальний інтерес до піксельного графічного інтерфейсу, консольний графічний інтерфейс відійшов на третій план (графічний, консоль,  псевдографіка). Виною тому, мабуть, недостатня гнучкість при порівняно високих затратах на кодинг (в порівнянні з консоллю). В принципі, це правильно, проте існуюють випадки (як у мене, наприклад), коли потрібна виразність, а не гнучкість, і вибір стоїть між графікою і псевдографікою. Дещо нижче розгляну це детальніше.</p>
<h2>Python замість Pascal &#8211; вчити старе по новому</h2>
<p>Давненько уже в інтернеті деякі подумують, як ввести Пайтон основною мовою програмування для навчання в школах. Цій ідилії заважає величезна купа факторів реального світу, але ідея, в загальному, хороша.</p>
<p>Візьмемо, для прикладу, модуль turtle. Можна сміливо заявити &#8211; це сучасна повноцінна заміна мові LOGO. Я на ньому навіть графіки малював, оскільки спеціалізовані модулі все ще не переведено на Python3.</p>
<p><a href="http://danbst.files.wordpress.com/2011/11/turtle-dervative.png"><img src="http://danbst.files.wordpress.com/2011/11/turtle-dervative.png?w=700" alt="" title="turtle-dervative"   class="aligncenter size-full wp-image-543" /></a><br />
<pre class="brush: python;">
import turtle

def plotAxes(screen):
    turtle.reset()
    turtle.up()
    turtle.goto(0,0)
    turtle.down()
    turtle.goto(screen.screensize()[0], 0)
    turtle.up()
    turtle.goto(0, 0)
    turtle.down()
    turtle.goto(0, 1)


def plot(pointsY):
    screen = turtle.Screen()
    maxy = max(pointsY)
    miny = min(pointsY)
    screen.setworldcoordinates(-10, miny*1.1, len(pointsY)+10, maxy*1.1)

    plotAxes(screen)

    turtle.hideturtle()
    turtle.speed(0)
    turtle.up()
    turtle.goto(0, pointsY[0])
    turtle.down()
    i = 0
    for point in pointsY:
        turtle.goto(i, point)
        i += 1
    turtle.mainloop()
</pre></p>
<h2>Python кращий ніж Pascal &#8211; довзоляє легко працювати з системою</h2>
<p>Мабуть, завдяки скриптовій природі і принципу &#8220;simple is better than complicated&#8221;, Пайтон впевнено просувається у галузі &#8220;швидких програмок&#8221; &#8211; маленьких і простеньких софтинок. При зовсім невеликих знаннях і досвіді, мені вдалося за вечір написати просту і потрібну (мені, звісно) утиліту маніпуляції зовнішніми моніторами.</p>
<p>Завдання було простим: ввімкнути зовнішній монітор (або проектор), підключений до ноутбуку. Виявилось, що для цього достатньо виконати одну команду:<br />
<pre class="brush: bash;">
xrandr --output VGA-0 --mode 1680x1050
</pre><br />
А для вимикання:<br />
<pre class="brush: bash;">
xrandr --output VGA-0 --off
</pre><br />
(Нюанс. Графічних програм управління моніторами у мене немає &#8211; вони не підходять під ідеологію мінімалістичного інтерфейсу. Тому все потрібно налаштовувати з консолі)</p>
<p>Проте тут постала важлива проблема. По-перше, оперція підключення монітору є, по-суті,  рідкісною. Або один раз поставили два монітори на робочому місці, або раз в кілька місяців підключаєте зовнішній монітор для отримання яскравіших вражень від відео. По-друге, рано чи пізно ви можете змінити ноут, і вам доведеться на ньому наново налаштовувати систему. Тобто, рішення проблеми повинно бути здатним до мігрування між системами і бути легким для використання, без перелистування тонн мануалів one more time.</p>
<h2>multiscreen.py</h2>
<p>Рішенням стало написання скрипта на Пайтоні і позначення його як системного. Якщо колись знадобиться ввімкнути зовнішній монітор, то завдяки псевдографічному консольному інтерфейсу мені не доведеться згадувати конкретні консольні команди. А написання програми &#8220;в загальному&#8221; повинно допомогти при міграції.</p>
<p>Проте, як ви уже здогадались, основною причиною було спробувати використати модуль <b>curses</b> для більш-менш реальної задачі. =)</p>
<h3>Каркас для curses</h3>
<p>Як би це дивно не звучало, але мій шлях почався з цього посилання &#8211; <a href="http://cybportal.univ.kiev.ua/wiki/Python_curses">http://cybportal.univ.kiev.ua/wiki/Python_curses</a>. Дещо модифікований і адаптований варіант приводжу нижче:</p>
<p><pre class="brush: python;">
#!/usr/bin/python3
import curses
import curses.wrapper

def main(screen):
  curses.nonl()

  while True:
    ### відрисовка
    s = curses.newwin(5, 20, 20, 1)
    s.keypad(1) # режим спрощеного вводу клавіш-стрілочок
    s.box()
    s.refresh()

    ### обробка
    key = s.getch()
    if key in (ord(&quot;q&quot;), 27):
      break
    s.erase()

if __name__ == '__main__':
  try:
    curses.wrapper(main)
  except KeyboardInterrupt:
    # не виводити стек, якщо натиснули Ctrl-C
    pass
</pre></p>
<h3>Взаємодія з Linux &#8211; аналіз виводу xrandr</h3>
<p>Приведу для прикладу свій вивід утиліти <b>xrandr</b>:<br />
<pre class="brush: bash;">
[danbst@localost ~]$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS connected 1366x768+0+0 (normal left inverted right x axis y axis) 270mm x 150mm
   1366x768       60.0*+
   1280x720       59.9  
   1152x768       59.8  
   1024x768       59.9  
   800x600        59.9  
   848x480        59.7  
   720x480        59.7  
   640x480        59.4  
HDMI-0 disconnected (normal left inverted right x axis y axis)
VGA-0 connected (normal left inverted right x axis y axis)
   1680x1050      60.0 +
   1600x1200      60.0  
   1280x1024      75.0     60.0  
   1440x900       75.0     59.9  
   1280x960       60.0  
   1152x864       75.0  
   1280x720       60.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1  
[danbst@localost ~]$ 
</pre><br />
Перший рядок показує, що ми маємо в системі тільки один віртуальний екран (до-речі, з віртуальними моніторами також було би корисно розібратись). Наступні рядки перелічують відеороз’єми і режими до них.</p>
<p>Для отримання списку відео-роз’ємів я навіть написав sed-скрипт, але він на жаль не знадобився&#8230;<br />
<pre class="brush: bash;">
[danbst@localost ~]$ xrandr | sed -r -e '1d; /^\s/d; s/(^[^ ]+).*/\1/'
LVDS
HDMI-0
VGA-0
[danbst@localost ~]$
</pre></p>
<p>Тепер про режими. Плюсик означає, що режим є дефолтним для монітору. Зірочка означає, що даний режим зараз активний. Отриманої інформації достатньо, щоб написати функції вмикання і вимикання монітору. До-речі, був би вдячний, якби хтось підказав спосіб спростити дані процедури <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><pre class="brush: python;">
#!/usr/bin/python3
import subprocess

def get_monitors():
  &quot;&quot;&quot;Перетворити інформацію, яку видає xrandr, у хеш: ключ ім’я монітору, значення - список режимів&quot;&quot;&quot;
  xrandr_data = subprocess.check_output(&quot;xrandr&quot;,universal_newlines=True)
  monitors = []
  for line in str(xrandr_data).split(&quot;\n&quot;):
    if &quot;connected&quot; in line:
      monitors.append([line.split()[0], []])
    elif line.startswith(' '):
      monitors[-1][1] += [line]
  mons = {}
  for monitor in monitors:
    mons[monitor[0]]  = monitor[1]
  return mons

def get_default_monitor(monitor_name):
  &quot;&quot;&quot;Отримати дефолтний режим монітору, у вигляді NNNNxNNNN&quot;&quot;&quot;
  monitors = get_monitors()
  return [x for x in monitors[monitor_name] if &quot;+&quot; in x][0].strip().split()[0]

def is_monitor_on(monitor_name):
  &quot;&quot;&quot;Визначити, чи горить монітор&quot;&quot;&quot;
  monitors = get_monitors()
  return len([x for x in monitors[monitor_name] if &quot;*&quot; in x]) &gt; 0

def toggle_monitor(monitor_name):
  &quot;&quot;&quot;Ввімкнути/вимкнути монітор. Вибирається дефолтне розширення екрану&quot;&quot;&quot;
  monitors = get_monitors()
  # все робимо у try ... catch, бо ліньки було розбирати всі варіанти, коли неможливо визначити дефолтний монітор
  try:
    if not is_monitor_on(monitor_name):
      subprocess.call([&quot;xrandr&quot;, &quot;--output&quot;, monitor_name, &quot;--mode&quot;, get_default_monitor(monitor_name)])
    else:
      subprocess.call([&quot;xrandr&quot;, &quot;--output&quot;, monitor_name, &quot;--off&quot;])
  except:
    pass
</pre></p>
<h3>Псевдографічне меню</h3>
<p>Я довго не міг зрозуміти, як правильніше за все відмальовувти менюшку. В кінці-кінців вирішив малювати її в окремому вікні і при кожній ітерації перемальовувати. Без поняття, як інакше зробити візуальний режим вибору елементу.<br />
<pre class="brush: python;">
def main(screen):
  curses.nonl()
  selected = 0
  items = list(get_monitors().keys())

  while True:
    ### відрисовка
    s = curses.newwin(len(items) + 2, 20, 20, 1)
    s.keypad(1) # режим спрощеного вводу клавіш-стрілочок
    s.box()
    for i in range(0, len(items)):
      if i == selected:
        s.addstr(i+1, 1, items[i], curses.A_STANDOUT)
      else:
        s.addstr(i+1, 1, items[i])
    s.refresh()

    ### обробка
    key = s.getch()
    if key in (ord(&quot;q&quot;), 27):
      break
    elif key == curses.KEY_DOWN:
      selected = min(selected + 1, len(items) - 1)
    elif key == curses.KEY_UP:
      selected = max(selected - 1, 0)
    elif key == 13:
      toggle_monitor(items[selected])
    s.erase()
</pre><br />
Виявилось, це зовсім не важко робити, якщо не ускладнювати життя (по початковій задумці, я хотів динамічні checkbox-и, щоб стан монітору виводився біля пункту елементу). Виглядає це приблизно так (браузер приведено для порівняння розмірів):<br />
<a href="http://danbst.files.wordpress.com/2011/11/multiscreen-shot.png"><img src="http://danbst.files.wordpress.com/2011/11/multiscreen-shot.png?w=700&#038;h=393" alt="" title="multiscreen-shot" width="700" height="393" class="aligncenter size-full wp-image-547" /></a><br />
Звісно, працює зручний перехід між пунктами за допомогою клавіш-курсорів =)</p>
<h3>Весь код</h3>
<p>Наостанок приведу весь код разом, щоб бажаючі могли протестувати у себе. А раптом відпишуть баг-репорт =) Ще одна особливість &#8211; код працює однаково і на 2 і на 3 пітоні<br />
<pre class="brush: python;">
#!/usr/bin/python2
# -*- coding: UTF-8 -*-
import curses
import curses.wrapper
import subprocess

def get_monitors():
  &quot;&quot;&quot;Перетворити інформацію, яку видає xrandr, у хеш: ключ ім’я монітору, значення - список режимів&quot;&quot;&quot;
  xrandr_data = subprocess.check_output(&quot;xrandr&quot;,universal_newlines=True)
  monitors = []
  for line in str(xrandr_data).split(&quot;\n&quot;):
    if &quot;connected&quot; in line:
      monitors.append([line.split()[0], []])
    elif line.startswith(' '):
      monitors[-1][1] += [line]
  mons = {}
  for monitor in monitors:
    mons[monitor[0]]  = monitor[1]
  return mons

def get_default_monitor(monitor_name):
  &quot;&quot;&quot;Отримати дефолтний режим монітору, у вигляді NNNNxNNNN&quot;&quot;&quot;
  monitors = get_monitors()
  return [x for x in monitors[monitor_name] if &quot;+&quot; in x][0].strip().split()[0]

def is_monitor_on(monitor_name):
  &quot;&quot;&quot;Визначити, чи горить монітор&quot;&quot;&quot;
  monitors = get_monitors()
  return len([x for x in monitors[monitor_name] if &quot;*&quot; in x]) &gt; 0

def toggle_monitor(monitor_name):
  &quot;&quot;&quot;Ввімкнути/вимкнути монітор. Вибирається дефолтне розширення екрану&quot;&quot;&quot;
  monitors = get_monitors()
  # все робимо у try ... catch, бо ліньки було розбирати всі варіанти, коли неможливо визначити дефолтний монітор
  try:
    if not is_monitor_on(monitor_name):
      subprocess.call([&quot;xrandr&quot;, &quot;--output&quot;, monitor_name, &quot;--mode&quot;, get_default_monitor(monitor_name)])
    else:
      subprocess.call([&quot;xrandr&quot;, &quot;--output&quot;, monitor_name, &quot;--off&quot;])
  except:
    pass


def main(screen):
  curses.nonl()
  selected = 0
  items = list(get_monitors().keys())

  while True:
    ### відрисовка
    s = curses.newwin(len(items) + 2, 20, 20, 1)
    s.keypad(1) # режим спрощеного вводу клавіш-стрілочок
    s.box()
    for i in range(0, len(items)):
      if i == selected:
        s.addstr(i+1, 1, items[i], curses.A_STANDOUT)
      else:
        s.addstr(i+1, 1, items[i])
    s.refresh()

    ### обробка
    key = s.getch()
    if key in (ord(&quot;q&quot;), 27):
      break
    elif key == curses.KEY_DOWN:
      selected = min(selected + 1, len(items) - 1)
    elif key == curses.KEY_UP:
      selected = max(selected - 1, 0)
    elif key == 13:
      toggle_monitor(items[selected])
    s.erase()

if __name__ == '__main__':
  try:
    curses.wrapper(main)
  except KeyboardInterrupt:
    # не виводити стек, якщо натиснули Ctrl-C
    pass
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/542/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=542&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/11/05/%d0%bf%d0%b0%d1%81%d0%ba%d0%b0%d0%bb%d1%8c-%d0%bd%d0%b0-%d0%b1%d1%83%d0%ba%d0%b2%d1%83-py/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>

		<media:content url="http://danbst.files.wordpress.com/2011/11/turtle-dervative.png" medium="image">
			<media:title type="html">turtle-dervative</media:title>
		</media:content>

		<media:content url="http://danbst.files.wordpress.com/2011/11/multiscreen-shot.png" medium="image">
			<media:title type="html">multiscreen-shot</media:title>
		</media:content>
	</item>
		<item>
		<title>Майнкрафт</title>
		<link>http://danbst.wordpress.com/2011/10/15/%d0%bc%d0%b0%d0%b9%d0%bd%d0%ba%d1%80%d0%b0%d1%84%d1%82/</link>
		<comments>http://danbst.wordpress.com/2011/10/15/%d0%bc%d0%b0%d0%b9%d0%bd%d0%ba%d1%80%d0%b0%d1%84%d1%82/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 17:51:18 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Пости]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=539</guid>
		<description><![CDATA[Шпілка варта того, щоб в неї тиждень позадротити! Єдина онлайн шпілка, де креативність, оригінальність та творчість ставиться вище усього. Усім, кому колись сподобалась &#8220;алхімія&#8221; &#8211; качати і шпілити. Написана на Java і клієнт займає менше 10 Мб. PS. Мінімум один з читачів повинен зацікавитись, оскільки у грі реалізовано &#8220;воксельну графіку&#8221; на OpenGL, яка майже не [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=539&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Шпілка варта того, щоб в неї тиждень позадротити! Єдина онлайн шпілка, де креативність, оригінальність та творчість ставиться вище усього.</p>
<p>Усім, кому колись сподобалась &#8220;алхімія&#8221; &#8211; качати і шпілити. Написана на Java і клієнт займає менше 10 Мб. </p>
<p>PS. Мінімум один з читачів повинен зацікавитись, оскільки у грі реалізовано &#8220;воксельну графіку&#8221; на OpenGL, яка майже не тормозить )</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/539/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=539&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/10/15/%d0%bc%d0%b0%d0%b9%d0%bd%d0%ba%d1%80%d0%b0%d1%84%d1%82/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Недільний вечір, тільки текст&#8230;</title>
		<link>http://danbst.wordpress.com/2011/10/09/%d0%bd%d0%b5%d0%b4%d1%96%d0%bb%d1%8c%d0%bd%d0%b8%d0%b9-%d0%b2%d0%b5%d1%87%d1%96%d1%80-%d1%82%d1%96%d0%bb%d1%8c%d0%ba%d0%b8-%d1%82%d0%b5%d0%ba%d1%81%d1%82/</link>
		<comments>http://danbst.wordpress.com/2011/10/09/%d0%bd%d0%b5%d0%b4%d1%96%d0%bb%d1%8c%d0%bd%d0%b8%d0%b9-%d0%b2%d0%b5%d1%87%d1%96%d1%80-%d1%82%d1%96%d0%bb%d1%8c%d0%ba%d0%b8-%d1%82%d0%b5%d0%ba%d1%81%d1%82/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 21:55:55 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Пости]]></category>
		<category><![CDATA[Програмування]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=536</guid>
		<description><![CDATA[Не секрет, що інколи я пишу програмістські пости в даний блог. Серед них доволі явно проявляються ланцюжки постів, об&#8217;єднані одним &#8220;сюжетом&#8221;. Хочу зараз проаналізувати один з таких ланцюжків, найменш зрозумілий читаючим. Принципи програмування нового покоління Ч.1 Мета в житті, яка досягнеться після смерті. Абстрактне завдання на тисячу тисяч життів. Амінь Модель класифікатора/колектора знань Його варто [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=536&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Не секрет, що інколи я пишу програмістські пости в даний блог. Серед них доволі явно проявляються ланцюжки постів, об&#8217;єднані одним &#8220;сюжетом&#8221;. Хочу зараз проаналізувати один з таких ланцюжків, найменш зрозумілий читаючим.</p>
<li><a href="http://danbst.wordpress.com/2009/09/21/%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%B8-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D0%BE%D0%BA%D0%BE%D0%BB/">Принципи програмування нового покоління Ч.1</a></li>
<li><a href="http://danbst.wordpress.com/2010/03/18/%D0%BC%D0%B5%D1%82%D0%B0/">Мета в житті, яка досягнеться після смерті. Абстрактне завдання на тисячу тисяч життів. Амінь</a></li>
<li><a href="http://danbst.wordpress.com/2011/06/12/%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-%D0%BA%D0%BB%D0%B0%D1%81%D0%B8%D1%84%D1%96%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0%D0%BA%D0%BE%D0%BB%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0-%D0%B7%D0%BD%D0%B0%D0%BD/">Модель класифікатора/колектора знань</a></li>
<p>Його варто доповнити ще одним постом:</p>
<li><a href="http://cybportal.univ.kiev.ua/wiki/%D0%9A%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87:Danbst/MMbook">MMBook</a></li>
<p>Усі ці пости є точками зору однієї ідеї. З кожним роком я все краще і краще її розумію, проте досі не можу виразити &#8220;на папері&#8221;. Якщо дати коротку характеристику постам &#8211; я намагаюсь передбачати майбутнє. Саме те майбутнє, коли слово &#8220;реалізація&#8221; буде асоціювватись з рутинною і повністю автоматизованою операцією. Враховуючи темпи розвитку, я навіть сподіваюсь застати це &#8220;майбутнє&#8221;.</p>
<p>Недавно я знайшов ще одну сторону ідеї. Власне, вона проста як дошка і розвинулась під враженням від теорії категорій.</p>
<li>Сутність може бути виражена моделлю. Під &#8220;моделлю&#8221; я маю на увазі набір об&#8217;єктів і зв&#8217;яків, система у загальному значенні. Більшість операцій відбуваються на даному рівні, на ньому ж працює синергетика.
<li>У моделі може бути реалізація. Під &#8220;реалізацією&#8221; я розумію конретику, яка власне і вирішує задачу\проблему. Наприклад, руль, джойстик і клавіші зі стрілочками &#8211; це реалізація моделі &#8220;керування транспортним засобом&#8221;. Реалізацією може бути конкретний шматок коду, конкретний спосіб врегульовування різноманітних правових питань, навіть інша модель може бути реалізацією.
<li>Між моделлю і реалізацією є третій рівень &#8211; інтерфейс. Основна його задача &#8211; зменшити кількість дублів реалізацій та моделей. А також забезпечити поліморфізм реалізацій. Уявіть собі це як перехідник: з однієї сторони у нього &#8220;втикається&#8221; модель (тобто, інтерфейс визначає, якими властивостями повинна володіти модель&#8221;, а з іншого &#8211; втикається реалізація (інтерфейс специфікує, які дії\структури\точки\властивості повинна мати реалізація для забезпечення коректності інтерфейсу).
<li>Існує компоновщик, який зтирає грані між моделлю, інтерфейсом і реалізацією, формуючи тільки одну сутність &#8211; &#8220;вирішення задачі&#8221;. Для програмних систем уявити цей компоновщик ще можливо &#8211; генератор коду по моделі + компіляція. Для більш високорівневих понять потрібно буде якраз використовувати наробки теорії категорій.
<p>У даної ідеї поки-що один недолік &#8211; я не знаю як її реалізувати, навіть не знаю з якої сторони підійти до реалізації =) Проте не сумнівайтесь &#8211; для мене цей недолік несуттєвий =)))</p>
<h3>Про віртуальну смерть</h3>
<p>Мені відомо уже багато прикладів віртуальної смерті людей. Особливо цікавою дана тема стала після смерті (віртуальної же!) Марка Пілгріма. Мало того, я сам про це подумував, іноді так хочеться забути про інтернет і почати жити тільки реальним життям. Проте чого я не розумію &#8211; навіщо видаляти свій контент??? Нехай він і здається Вам безглуздим або лишнім або шкідливим &#8211; залиште його! Ваша точка зору насправді є зовсім не точкою, а вектором, напрямком думки. Для тих одиниць, яким саме цей ВЕКТОР потрібний, це буде безцінний скарб на шляху до виконання віртуального самовбивства або будь-якої іншої важливої задачі.</p>
<p>А так, виходить, що Ви подовжуєте чужі мучення. Вельми і вельми велике дякую!</p>
<p>Не можна йти шляхом воїна, якщо Ви вмієте і висловлюєте свої думки. Це &#8211; програш. Мене не стільки розчарував Марк, скільки той інший чувак, описаний у 2 абзаці &#8220;Мета в житті, &#8230;&#8221;. Зараз уже навіть можна відкрити ім&#8217;я, бо хететепе безслідно зникло, і ні кеш гугла, ні вебархів не вберегли дані. Єдиний більш-менш виражаючий твір, який зберегла павутина, це <a href="http://teplovoz.com/creo/12752.html">ескіз на тепловозі</a>. А було штук 100 якісних, послідовно дроблячих мізки у тонку стружку невиражених думок постів. Я поставив би саме акцент на послідовних, бо прочитання посту з відривом віж контексту призводило або до пришвидшеного розриву шаблонів або до повного нерозуміння\неприйняття важливості абсурду. Щиро сподіваюсь, що тобі, Олеже, десь там добре.</p>
<h3>Ключі</h3>
<p>В даному місці потрібно розповісти про ключі. Будь-який автор залишає у своїх творах, свідомо або несвідомо, ключі. Одні називають їх &#8220;стилем&#8221;, інші &#8220;манерою&#8221;. Інколи так і є.</p>
<p>Але ключі створені для замків, правильно? Задача ключа &#8211; знайти замок, фактично, це спосіб автора адресації тексту тільки тим читачам, чий замок відкривається використаним ключем. За рахунок цього деякі автори можуть маніпулювати різними групами людей, впихуючи у твір різні типи ключів.</p>
<p>Якщо ви автор &#8211; проаналізуйте свою творчість, і ви знайдете ідеї, речення, навіть словосполучення, якими ви і намагаєтесь підчепити &#8220;потрібного&#8221; читача. Вам не потрібна розуміння від усіх і кожного, вам важливо донести інформацію до цікавих вам людей, чиї імена і адреси неможливо знати.</p>
<p>Фактично по даному критерію і можна оцінити &#8220;якість&#8221; автора. Якщо ключі автора Вас зачепили, а дехто інший вважає твір занадто сентиментальним і тому неприроднім &#8211; не спішіть ставити бирку на людину або автора. Краще знайдіть проблему у собі і вирішіть її раз і назавжди, не обов&#8217;язково самогубством.</p>
<p>На цьому базується практично все, але найяскравіше проявляється у дзені, коанах, театрах, сюрреалістичних картинах, &#8230;</p>
<h3>Ідея чи символ?</h3>
<p>В чому принципова різниця між ідеєю і символом (гуглим вікі)?</p>
<p>Ось ми йдемо по тротуару. Під ногами &#8211; плитка. Плитки разом формують візерунок. Білий, червоний, білий, червоний,&#8230; Подумайте, навіщо існує цей рисунок? Відповідь &#8220;бо так архітектор вирішив&#8221; буде правильною тільки в частині випадків.</p>
<p>Уявіть собі, що ви йдете, а плитка все ще чередується. Білий, червоний, білий, червоний,&#8230; Ви берете лом і намагаєтесь змінити порядок. Ха, дзуськи! Лом не може пробитись поміж плиток, або гнеться, або взагалі кришиться! Ви хочете знайти межу, коли плитка просто кінчається, а отже і кінчається порядок &#8220;білий-червони&#8221; &#8211; і несподівано визначаєте, що у плитки немає межі! Ні вправо ні вліво ні вперед ні назад. Ви шукаєте невідповідність біля сторонніх об&#8217;єктів, які плитка &#8220;оминає&#8221; &#8211; але чудо, навіть поряд з ними порядок зберігається за рахунок фракталізації площини.</p>
<p>Після багатоденних пошуків Ви все-таки знаходите корінь липи, що пробився десь посередині майдану і порушив структуру.</p>
<p>Допоки ви не знайшли корінь, біло-червона череда плиток була ідеєю, непорушною, незлманною. Після &#8211; це став сього лиш символ. Символізм завжди допускає помилки і недоліки, без недоліків символ став би ідеєю. Фактично тому і неможливо виразити ідею &#8211; де гарантія, що ви зробите це без помилок і не виразите випадково символ? Підміна понять &#8211; це кримінальна стаття&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/536/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/536/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/536/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=536&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/10/09/%d0%bd%d0%b5%d0%b4%d1%96%d0%bb%d1%8c%d0%bd%d0%b8%d0%b9-%d0%b2%d0%b5%d1%87%d1%96%d1%80-%d1%82%d1%96%d0%bb%d1%8c%d0%ba%d0%b8-%d1%82%d0%b5%d0%ba%d1%81%d1%82/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Dual code. Шифрування Rijndael</title>
		<link>http://danbst.wordpress.com/2011/10/04/dual-code-%d1%88%d0%b8%d1%84%d1%80%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-rijndael/</link>
		<comments>http://danbst.wordpress.com/2011/10/04/dual-code-%d1%88%d0%b8%d1%84%d1%80%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-rijndael/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 17:41:05 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Програмування]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dual code]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Rijndael]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=533</guid>
		<description><![CDATA[Виявилось, не будь-який алгоритм можна спростити F#-ом. Іноді сильний внесок у реалізацію вносить технологія. Зараз приведу приклад одного метода, написаного на трьох мовах у технології .NET: C#, F# і IronPython. public static byte[] EncryptByteArray(byte[] data, string key){ var rijnd = Rijndael.Create(); var ct = rijnd.CreateEncryptor( (new PasswordDeriveBytes(key, null)).GetBytes(16), new byte[16]); var ms = new MemoryStream(); [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=533&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Виявилось, не будь-який алгоритм можна спростити F#-ом. Іноді сильний внесок у реалізацію вносить технологія. Зараз приведу приклад одного метода, написаного на трьох мовах у технології .NET: C#, F# і IronPython.</p>
<table>
<tr>
<td>
<PRE style="border-bottom:#ccc 1px dashed;border-left:#ccc 1px dashed;background:white;color:black;border-top:#ccc 1px dashed;border-right:#ccc 1px dashed;padding:5px;"><SPAN style="color:blue;">public</SPAN> <SPAN style="color:blue;">static</SPAN> <SPAN style="color:blue;">byte</SPAN>[] EncryptByteArray(<SPAN style="color:blue;">byte</SPAN>[] data, <SPAN style="color:blue;">string</SPAN> key)<BR>{<BR>	<SPAN style="color:blue;">var</SPAN> rijnd = <SPAN style="color:#2b91af;">Rijndael</SPAN>.Create();<BR>	<SPAN style="color:blue;">var</SPAN> ct = rijnd.CreateEncryptor(<BR>		(<SPAN style="color:blue;">new</SPAN> <SPAN style="color:#2b91af;">PasswordDeriveBytes</SPAN>(key, <SPAN style="color:blue;">null</SPAN>)).GetBytes(16),<BR>		<SPAN style="color:blue;">new</SPAN> <SPAN style="color:blue;">byte</SPAN>[16]);<BR> <BR>	<SPAN style="color:blue;">var</SPAN> ms = <SPAN style="color:blue;">new</SPAN> <SPAN style="color:#2b91af;">MemoryStream</SPAN>();<BR>	<SPAN style="color:blue;">var</SPAN> cs = <SPAN style="color:blue;">new</SPAN> <SPAN style="color:#2b91af;">CryptoStream</SPAN>(ms, ct, <SPAN style="color:#2b91af;">CryptoStreamMode</SPAN>.Write);<BR> <BR>	cs.Write(data, 0, data.Length);<BR>	cs.FlushFinalBlock();<BR> <BR>	<SPAN style="color:blue;">return</SPAN> ms.ToArray();<BR>}</PRE>
</td>
</tr>
<tr>
<td>
<PRE style="border-bottom:#ccc 1px dashed;border-left:#ccc 1px dashed;background:white;color:black;border-top:#ccc 1px dashed;border-right:#ccc 1px dashed;padding:5px;">    <SPAN style="color:blue;">let</SPAN> EncryptByteArray data (key:string) =<BR>        <SPAN style="color:blue;">begin</SPAN><BR>            <SPAN style="color:blue;">let</SPAN> rijnd = Rijndael.Create();<BR>            <SPAN style="color:blue;">let</SPAN> ct = rijnd.CreateEncryptor(<BR>                        (<SPAN style="color:blue;">new</SPAN> PasswordDeriveBytes(key, <SPAN style="color:blue;">null</SPAN>)).GetBytes(16),<BR>                        Array.zeroCreate 10);<BR> <BR>            <SPAN style="color:blue;">let</SPAN> ms = <SPAN style="color:blue;">new</SPAN> MemoryStream ();<BR>            <SPAN style="color:blue;">let</SPAN> cs = <SPAN style="color:blue;">new</SPAN> CryptoStream (ms, ct, CryptoStreamMode.Write);<BR> <BR>            cs.Write(data, 0, data.Length);<BR>            cs.FlushFinalBlock();<BR> <BR>            ms.ToArray()<BR>        <SPAN style="color:blue;">end</SPAN></PRE>
</td>
</tr>
<tr>
<td>
<PRE style="border-bottom:#ccc 1px dashed;border-left:#ccc 1px dashed;background:white;color:black;border-top:#ccc 1px dashed;border-right:#ccc 1px dashed;padding:5px;"><SPAN style="color:blue;">def</SPAN> EncryptByteArray (data, key):<BR>    rijnd = Rijndael<SPAN style="color:blue;">.</SPAN>Create();<BR>    ct = rijnd<SPAN style="color:blue;">.</SPAN>CreateEncryptor(<BR>        (PasswordDeriveBytes(key, None))<SPAN style="color:blue;">.</SPAN>GetBytes(16),<BR>        Array[Byte](range(10)));<BR><BR>    ms = MemoryStream();<BR>    cs = CryptoStream(ms, ct, CryptoStreamMode<SPAN style="color:blue;">.</SPAN>Write);<BR><BR>    cs<SPAN style="color:blue;">.</SPAN>Write(data, 0, data<SPAN style="color:blue;">.</SPAN>Length);<BR>    cs<SPAN style="color:blue;">.</SPAN>FlushFinalBlock();<BR><BR>    <SPAN style="color:blue;">return</SPAN> ms<SPAN style="color:blue;">.</SPAN>ToArray();<BR></PRE>
</td>
</tr>
</table>
<p>Потрібно пам&#8217;ятати, що ML мови є досить гармонічними, проте не спрощують код ЗАВЖДИ. А є випадки, коли навпаки &#8211; ускладнюють. Але про це в інший раз.</p>
<p>Пітон версію приведено для тих, хто вважав що на Пітоні код буде простішим. </p>
<p>PS. begin, end і крапки з комою у F# версії додані чисто для приколу. Якщо використовувати синтаксис #light, то їх нафіг не потрібно.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/533/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/533/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=533&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/10/04/dual-code-%d1%88%d0%b8%d1%84%d1%80%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-rijndael/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
		<item>
		<title>Чому неможлива надсвітлова швидкість</title>
		<link>http://danbst.wordpress.com/2011/09/26/%d1%87%d0%be%d0%bc%d1%83-%d0%bd%d0%b5%d0%bc%d0%be%d0%b6%d0%bb%d0%b8%d0%b2%d0%b0-%d0%bd%d0%b0%d0%b4%d1%81%d0%b2%d1%96%d1%82%d0%bb%d0%be%d0%b2%d0%b0-%d1%88%d0%b2%d0%b8%d0%b4%d0%ba%d1%96%d1%81%d1%82/</link>
		<comments>http://danbst.wordpress.com/2011/09/26/%d1%87%d0%be%d0%bc%d1%83-%d0%bd%d0%b5%d0%bc%d0%be%d0%b6%d0%bb%d0%b8%d0%b2%d0%b0-%d0%bd%d0%b0%d0%b4%d1%81%d0%b2%d1%96%d1%82%d0%bb%d0%be%d0%b2%d0%b0-%d1%88%d0%b2%d0%b8%d0%b4%d0%ba%d1%96%d1%81%d1%82/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 06:01:28 +0000</pubDate>
		<dc:creator>danbst</dc:creator>
				<category><![CDATA[Пости]]></category>

		<guid isPermaLink="false">http://danbst.wordpress.com/?p=527</guid>
		<description><![CDATA[Недавно прочитав на хабрі про нейтрино, що рухаються з більшою ніж у світла швидкістю. Прикольно! А в честь цього я розповім, чому надсвітлова швидкість неможлива в рамках теорії відносності, а заодно Вам стане зрозумілий зміст релятивістських формул. Й так, яким є світ у розмінні ЗТВ (загальної теорії відносності)? Якщо сильно спростити, то він є чотиривимірним [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=527&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Недавно прочитав на хабрі про нейтрино, що рухаються з більшою ніж у світла швидкістю. Прикольно! А в честь цього я розповім, чому надсвітлова швидкість неможлива в рамках теорії відносності, а заодно Вам стане зрозумілий зміст релятивістських формул.</p>
<p>Й так, яким є світ у розмінні ЗТВ (загальної теорії відносності)? Якщо сильно спростити, то він є чотиривимірним простором-часом. Давайте спробуємо уявити собі це простір-час. Станьте прямо, подивіться вліво, потім вправо &#8211; це перша вісь. Потім подивіться вперед і назад &#8211; це друга вісь. Потім подивіться вверх і вниз &#8211; це третя вісь. А після цього, як ви утворили у своїй уяві 3 взаємноперпендикулярні осі, вам доведеться прикрутити ще одну. Подивіться в минуле, а потім у майбутнє &#8211; це буде четверта вісь. Хоч нам і здається, що час є атрибутом точки в просторі, він насправді є повноцінною координатою, просто як плоскатики не відчувають третю вісь координат, так і ми не відчуваємо четветру вісь часу. Але не будемо на цьому зупинятись.</p>
<p>Тепер уявимо систему у русі. Вектор швидкості руху точки завжди можна спроектувати на осі системи координат, в якій вона власне і рухається. Якщо точка рухається вздовж однієї осі, то проекції на інші будуть рівні нулю, і єдина ненульова проекція буде показувати реальну швидкість точки. В принципі, хто вчив фізику, це повинен розуміти, а також пам&#8217;ятати формули обчсилення проекції. Також потрібно розуміти поняття реальної швидкості, тобто власне довжини вектору руху, неспроектованого.</p>
<p>Теорія відносності каже (якщо сильно спростити) наступне: кожна точка нашого всесвіту рухається, і власна довжина вектору швидкості руху дорівнює швидкості світла. Тобто, навіть якщо ми сидимо на попі, то ми все-рівно рухаємось, але &#8211; по осі часу, рухаємось в майбутнє.</p>
<p>Давайте уявимо, що ми не рухаємось у просторі. Згідно з ТО це означає, що ми рухаємось в часі з максимальною швидкістю &#8211; швидкістю світла. Тепер спробуйте відхилити вектор швидкості руху від четвертої осі. Одразу з&#8217;являються проекції на інші координати, що одзначає &#8211; ми почали рух у просторі. Варто відмітити, що проекція на часову вісь дещо зменшилась, тобто рух часу для нас уповільнився. Якщо ми розженемось до світлової швидкості в просторі, то проекція на часову вісь стане нульовою &#8211; час для нас зупиниться.</p>
<p>Тепер, сподіваюсь, зрозуміло, на чому базується заборона надсвітлової швидкості. Адже згідно теорії, 300 000 000 м/c &#8211; це єдиний стандарт швидкості в нашому всесвіті, з даною швидкістю рухається усе-усе, і ніщо не може рухатись швидше або повільніше даної константи.</p>
<p>Взято <a href="http://solovyov.net/blog/2011/02/26/nothing-faster-than-light/">звідси</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danbst.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danbst.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danbst.wordpress.com/527/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danbst.wordpress.com&amp;blog=6928698&amp;post=527&amp;subd=danbst&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danbst.wordpress.com/2011/09/26/%d1%87%d0%be%d0%bc%d1%83-%d0%bd%d0%b5%d0%bc%d0%be%d0%b6%d0%bb%d0%b8%d0%b2%d0%b0-%d0%bd%d0%b0%d0%b4%d1%81%d0%b2%d1%96%d1%82%d0%bb%d0%be%d0%b2%d0%b0-%d1%88%d0%b2%d0%b8%d0%b4%d0%ba%d1%96%d1%81%d1%82/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bc78ac3f1246f30c55f3339c3e7586f?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">danbst</media:title>
		</media:content>
	</item>
	</channel>
</rss>
