<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2968202416661480706</id><updated>2024-10-05T05:46:36.143+03:00</updated><category term="ruby"/><category term="бред"/><category term="c++"/><category term="ня"/><category term="c++0x"/><category term="lisp"/><category term="nmea"/><category term="матмех"/><category term="ненависть"/><category term="факториал"/><category term="64-bit"/><category term="D"/><category term="J programming language"/><category term="OCaml"/><category term="c#"/><category term="css"/><category term="damn"/><category term="digma m1"/><category term="float"/><category term="fuckups"/><category term="gps"/><category term="graph"/><category term="hack"/><category term="linux"/><category term="mathematical analysis"/><category term="number theory"/><category term="primeswing"/><category term="programming"/><category term="serial-to-usb"/><category term="theorems"/><category term="todo"/><category term="unicode"/><category term="автобусы"/><category term="егэ"/><category term="информатика"/><category term="метапрограммирование"/><category term="мфти"/><category term="мысли"/><category term="переводчики"/><category term="печально"/><category term="программизм"/><category term="статистика"/><category term="ужоснах"/><category term="физика"/><category term="хумор"/><category term="я-идиот"/><title type='text'>drifting-ice-floe feelingsnippets</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>61</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3775472833472861084</id><published>2012-08-04T13:02:00.000+04:00</published><updated>2012-08-04T13:02:00.601+04:00</updated><title type='text'></title><content type='html'>Хана пришла этому блогу.&lt;br /&gt;
&lt;br /&gt;
И вот почему. Всякую мелкую бытовуху гораздо приятней обсуждать с френдами, чем выкладывать её в бложик, который всё равно никто не комментирует (хотя кто-то читает-таки вроде бы). IT-related посты куда разумней писать на английском, что, я собственно, и намереваюсь делать на lomereiter.wordpress.com, где пока что в основном сугубо GSoC weekly reports обитают. Что касается всяческих идей, я теперь стал на ε умнее и буду их, пожалуй, копить в голове, изыскивая пути их когда-нибудь монетизировать. Ибо нехер разбрасываться такими вещами.&lt;br /&gt;
(Мешанина из русского и английского тоже выглядит крайне убого. Небось отпугивает англоязычных читателей, хотя хз, не осведомлялся. Вообще, всё больше склоняюсь к мнению, что русский язык нахрен не нужен, и более того, было бы неплохо выкинуть все языки, кроме одного, на свалку истории, кому надо — пусть изучают just for fun. Мне даже похрен, английский или китайский останется — просто дико неудобно все эти языковые барьеры преодолевать, сколько ж можно уже, в век транснациональных корпораций-то?..)&lt;br /&gt;
&lt;br /&gt;
Такие дела.</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3775472833472861084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/08/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3775472833472861084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3775472833472861084'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/08/blog-post.html' title='&lt;/blog&gt;'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-8084480132142859257</id><published>2012-06-28T21:47:00.000+04:00</published><updated>2012-06-28T21:47:12.805+04:00</updated><title type='text'>унылая бабка</title><content type='html'>Пошёл я тут, понимаешь, накануне отъезда в прачечную скармливать тупому баблоприёмнику мелочь в виде 1-2-5-10-рублёвых монеток, скопившуюся за полгода. И тут хренакс - бабка, которая всей их хренью заведует, чё-то бурчать начала, типа &quot;вот вы все сцуки, уже который по счёту такой, а я вот каждый день всю вашу мелочь в магазин отношу... а вы тут ещё смеётесь... я вас запооомню... ууу&quot;. Я даже как-то проникся её тяжкой судьбой и отошёл от изначального плана, вместо 49 монеток всего 36 закинул. Такие дела. Придётся какому-нибудь кофейному автомату на вокзале теперь монетки скармливать. Ну не в магазин же идти, правда?&lt;br /&gt;
&lt;br /&gt;
Но вообще между теми же кофейными автоматами и тупым баблоприёмником из местной прачечной есть одно существенное различие. Последний я неспроста называю тупым: эта мразь не выдаёт сдачи. Так что бабку даже, наверное, можно понять :))) Но с другой стороны она ж каждый день тазы со шмотками с места на место таскает, ну что ей стоит несколько килограммов мелочи до магазина дотащить?) (Хотя в худшем случае, т.е. при обслуживании сотни человек в сутки и если каждый закидывает около 150 рублей рублёвыми монетами, по моим прикидкам где-то 50 килограммов выходит. Но такой адский флэшмоб представить трудно :D (хмм... а чо, п*здатая идея, кстати))</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/8084480132142859257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/06/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/8084480132142859257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/8084480132142859257'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/06/blog-post.html' title='унылая бабка'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-2979143226667677744</id><published>2012-05-17T23:58:00.003+04:00</published><updated>2012-05-17T23:58:37.631+04:00</updated><title type='text'>[гугл] ололо</title><content type='html'>Приехали, блджад. Вот что мне Google AdSense в почте щас отобразил:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;a class=&quot;u6&quot; href=&quot;http://pagead2.googlesyndication.com/aclk?sa=L&amp;amp;ai=BsBa-T1S1T6jRBsWKlALJyui5COnizbIC0e-gpzHAjbcBsMbsChADGAMgho-AAigFOABQ6teT4vj_____AWCEzfCFpB6yAQ9tYWlsLmdvb2dsZS5jb226AQhnbWFpbC1jdsgBAdoBO2h0dHA6Ly9tYWlsLmdvb2dsZS5jb20vTVRRd01qSTBNelV3TVRVeU9EYzVPVGN3T1VWWVVFRk9SRVZFqQKeWY0t_EZhPsgCmaK9IqgDAegD3QXoAyD1AwAAAEQ&amp;amp;num=3&amp;amp;sig=AOD64_1r0sy8gQBBY5180PMH8UW8Z3KyBQ&amp;amp;adurl=http://educacentre.ru/rus_en.html&quot; style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px; font-weight: bold; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Russian Language Courses&lt;/a&gt;&lt;div class=&quot;vc&quot; style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; padding-top: 2px;&quot;&gt;
Learn Russian at Educacentre! 20&amp;nbsp;years&amp;nbsp;of&amp;nbsp;teaching experience.&lt;/div&gt;
&lt;div class=&quot;xz&quot; style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; overflow-x: hidden;&quot;&gt;
&lt;a class=&quot;vd&quot; href=&quot;http://pagead2.googlesyndication.com/aclk?sa=L&amp;amp;ai=BsBa-T1S1T6jRBsWKlALJyui5COnizbIC0e-gpzHAjbcBsMbsChADGAMgho-AAigFOABQ6teT4vj_____AWCEzfCFpB6yAQ9tYWlsLmdvb2dsZS5jb226AQhnbWFpbC1jdsgBAdoBO2h0dHA6Ly9tYWlsLmdvb2dsZS5jb20vTVRRd01qSTBNelV3TVRVeU9EYzVPVGN3T1VWWVVFRk9SRVZFqQKeWY0t_EZhPsgCmaK9IqgDAegD3QXoAyD1AwAAAEQ&amp;amp;num=3&amp;amp;sig=AOD64_1r0sy8gQBBY5180PMH8UW8Z3KyBQ&amp;amp;adurl=http://educacentre.ru/rus_en.html&quot; style=&quot;color: #009933; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;www.educacentre.ru&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
Это гуглу надо учиться русскому, а то их сраный translate порой ухитряется смысл предложений искажать с точностью до наоборот при переводе с русского на английский.&lt;br /&gt;
Да и ваще гугл -- трэш. Этот свой Drive вот кинули на рынок без поддержки linux, гниды.&lt;br /&gt;
(Наверно, странно это всё писать из chromium через blogger.com, да. Ну а хули, работает же, и хрен с ним.)</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/2979143226667677744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/05/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/2979143226667677744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/2979143226667677744'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/05/blog-post.html' title='[гугл] ололо'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3619092619029060592</id><published>2012-04-17T23:10:00.001+04:00</published><updated>2012-04-17T23:10:16.821+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="бред"/><title type='text'>[бред] порядок вежливости</title><content type='html'>А я вот тут намедни придумал способ количественного измерения вежливости. Правда, пока что только дискретно, так что назовём это порядком вежливости PV : человеки -&amp;gt; натуральный ряд (начиная с нуля)&lt;br /&gt;
&lt;br /&gt;
Итак, пусть мы хотим измерить PV(Вася). Познакомим Васю с неким, допустим, Петей, который скажет Васе, что никогда не обижается, а потом в один прекрасный момент... ну, например, сделает как-нибудь так, чтобы Вася за него запнулся. Если PV(Вася) &amp;gt; 0, Вася извинится за то, что запнулся. А если больше 1, то извинится за то, что забыл, что Петя не обижается. Ну и так далее, так что PV(Вася) будет равняться глубине рекурсии.&lt;br /&gt;
&lt;br /&gt;
Возникает естественный вопрос: а можно ли это дело как-то на всю вещественную ось продолжить, по типу факториала и гамма-функции? Наверное, можно что-нибудь изощрённое придумать. Скажем, если бы были средства для удаления памяти Васи за последние N дней, эксперимент можно было бы повторить дофига раз и взять среднее. Или взвешенное среднее. Или ещё что-нибудь, неважно... %-)</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3619092619029060592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/04/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3619092619029060592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3619092619029060592'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/04/blog-post.html' title='[бред] порядок вежливости'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-7083450030607095612</id><published>2012-03-23T00:04:00.003+04:00</published><updated>2012-03-23T00:04:33.888+04:00</updated><title type='text'>о почте россии</title><content type='html'>...а знаете, это как-то неправильно, что надо физический адрес адресата указывать. Хотя кто-то, наверное, скажет — эй, ну он же &lt;u&gt;&lt;i&gt;адрес&lt;/i&gt;&lt;/u&gt;ат, хрен ли тебе не нравится?&lt;br /&gt;
А вот не нравится, блджад! С хрена ли адрес обязан быть физическим? Может, я хочу послать &lt;strike&gt;человеку&lt;/strike&gt; анонимусу открытку и при этом не знаю его адреса и знать не хочу, потому что уважаю его анонимность. А?! А вот если бы анонимус мог зайти на сайт российской почты, получить там uuid, который на протяжении им определённого времени будет оной службою маппиться в его физический адрес, а потом сообщить сий uuid мне для использования... Эх, мечты, мечты... :(</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/7083450030607095612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/03/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/7083450030607095612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/7083450030607095612'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/03/blog-post.html' title='о почте россии'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-4341315313320034194</id><published>2012-02-13T17:38:00.002+04:00</published><updated>2012-02-13T17:38:17.758+04:00</updated><title type='text'>A few words about xmlCleanupParser</title><content type='html'>Today I wrote an application which uses both libxml2 and GStreamer. It crashed for some mysterious reason which turned out to be xmlCleanupParser called twice. Damn it, it turns out that the only reason for that function to exist is getting rid of valgrind messages!&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;
&lt;pre&gt;This frees up a few global variables allocated by libxml2. A few
kilobytes at most, but if they get deallocated while somehow the library
is still in use, the application is very likely to crash.
  So never call this in a library.
  In an app the only safe place to call it is close to the exit
It&#39;s still useful to make sure there is no memory leak when running a
program under valgrind or equivalent memory checker.&lt;/pre&gt;
&lt;/blockquote&gt;
(&lt;a href=&quot;http://mail.gnome.org/archives/xml/2011-April/msg00048.html&quot;&gt;http://mail.gnome.org/archives/xml/2011-April/msg00048.html&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Cool, huh?!&lt;br /&gt;
 &lt;br /&gt;
I think it&#39;s worthwhile to emphasize the thought:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NEVER EVER FUCKING CALL xmlCleanupParser() IN A LIBRARY!&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/4341315313320034194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2012/02/few-words-about-xmlcleanupparser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/4341315313320034194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/4341315313320034194'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2012/02/few-words-about-xmlcleanupparser.html' title='A few words about xmlCleanupParser'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-1963812155771103973</id><published>2011-12-09T23:33:00.001+04:00</published><updated>2012-02-13T15:44:59.406+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++"/><category scheme="http://www.blogger.com/atom/ns#" term="бред"/><title type='text'>Инфиксная запись функций (С++)</title><content type='html'>В общем-то, последующее — полный изврат и к применению не рекомендуется :)&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;#include &amp;lt;functional&amp;gt;

template &amp;lt;typename Func&amp;gt; struct infix_operator;
template &amp;lt;typename Func&amp;gt; infix_operator&amp;lt;Func&amp;gt;&amp;amp; operator|(int, infix_operator&amp;lt;Func&amp;gt;&amp;amp;);
template &amp;lt;typename Func&amp;gt; int operator|(const infix_operator&amp;lt;Func&amp;gt;&amp;amp;, int );

template &amp;lt;typename Func&amp;gt;
struct infix_operator {
    typedef infix_operator&amp;lt;Func&amp;gt; infix_t;
    int left;
    static Func func;
    friend infix_t&amp;amp; operator|&amp;lt;&amp;gt;(int, infix_t&amp;amp;);
    friend int operator|&amp;lt;&amp;gt;(const infix_t&amp;amp;, int);
};
template &amp;lt;typename Func&amp;gt; Func infix_operator&amp;lt;Func&amp;gt;::func;

template &amp;lt;typename Func&amp;gt;
infix_operator&amp;lt;Func&amp;gt;&amp;amp; operator|(int left, infix_operator&amp;lt;Func&amp;gt;&amp;amp; op) {
    op.left = left; return op;
}

template &amp;lt;typename Func&amp;gt;
int operator|(const infix_operator&amp;lt;Func&amp;gt;&amp;amp; op, int right) {
    return infix_operator&amp;lt;Func&amp;gt;::func(op.left, right);
}

static struct : infix_operator&amp;lt;std::plus&amp;lt;int&amp;gt;&amp;gt; {} PLUS;
static struct : infix_operator&amp;lt;std::multiplies&amp;lt;int&amp;gt;&amp;gt; {} TIMES;
static struct : infix_operator&amp;lt;std::divides&amp;lt;int&amp;gt;&amp;gt; {} DIV;
static struct : infix_operator&amp;lt;std::modulus&amp;lt;int&amp;gt;&amp;gt; {} MOD;

#include &amp;lt;iostream&amp;gt;
int main() {
    std::cout &amp;lt;&amp;lt; (((2 |PLUS| 3) |TIMES| (36 |DIV| 6)) |MOD| 17) &amp;lt;&amp;lt; std::endl;
}

&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/1963812155771103973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/12/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1963812155771103973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1963812155771103973'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/12/blog-post.html' title='Инфиксная запись функций (С++)'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3449362866795685158</id><published>2011-11-08T13:59:00.000+04:00</published><updated>2011-11-08T13:59:26.169+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++0x"/><title type='text'>On variadic templates</title><content type='html'>&lt;a href=&quot;http://www.jot.fm/issues/issue_2008_02/article2/&quot;&gt;GCC developers, February 2008&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;background-color: #ddffee;&quot;&gt;
We have implemented the complete specification of variadic templates in the
          GNU C++ compiler [8], which are available in GCC 4.3. The implementation itself
          was relatively straightforward in GCC, implying that this feature can be implemented
          in other C++ compilers without architectural changes. Our basic implementation
          approach involved adding flags to each kind of template parameter and
          each function parameter stating whether these parameters are in fact parameter
          packs. 
&lt;br /&gt;
...&lt;/blockquote&gt;
&lt;a href=&quot;http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx&quot;&gt;Microsoft guys,&amp;nbsp; September 2011&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;background-color: #ddffee;&quot;&gt;
We&#39;ve developed a new scheme for simulating variadic templates.&amp;nbsp; 
Previously in VC9 SP1 and VC10, we repeatedly included subheaders with 
macros defined differently each time, in order to stamp out overloads 
for 0, 1, 2, 3, etc. arguments.&amp;nbsp; (For example, &lt;memory&gt; included 
the internal subheader &lt;span face=&quot;Courier New&quot; style=&quot;font-family: Courier New;&quot;&gt;&lt;xxshared&gt;&lt;/xxshared&gt;&lt;/span&gt; repeatedly, in order to stamp out &lt;span face=&quot;Courier New&quot; style=&quot;font-family: Courier New;&quot;&gt;make_shared&lt;t&gt;(args, args, args)&lt;/t&gt;&lt;/span&gt;.)&amp;nbsp;
 In VC11, the subheaders are gone.&amp;nbsp; Now we define variadic templates 
themselves as macros (with lots of backslash-continuations), then expand
 them with master macros.&amp;nbsp; This internal implementation change has some 
user-visible effects.&amp;nbsp; First, the code is more maintainable, easier to 
use (adding subheaders was a fair amount of work), and slightly less 
hideously unreadable.&amp;nbsp; This is what allowed us to easily implement 
variadic emplacement, and should make it easier to squash bugs in the 
future.&amp;nbsp; Second, it&#39;s harder to step into with the debugger (sorry!).&amp;nbsp; 
Third, pair&#39;s pair(&lt;span face=&quot;Courier New&quot; style=&quot;font-family: Courier New;&quot;&gt;piecewise_construct_t, tuple&lt;args1...&gt;, tuple&lt;args2...&gt;&lt;/args2...&gt;&lt;/args1...&gt;&lt;/span&gt;)
 constructor had &quot;interesting&quot; effects.&amp;nbsp; This requires N^2 overloads (if
 we support up to 10-tuples, that means 121 overloads, since empty 
tuples count here too).&amp;nbsp; We initially observed that this (spamming out 
so many pair-tuple overloads, plus all of the emplacement overloads) 
consumed a massive amount of memory during compilation, so as a 
workaround we reduced infinity.&amp;nbsp; In VC9 SP1 and VC10, infinity was 10 
(i.e. &quot;variadic&quot; templates supported 0 to 10 arguments inclusive).&amp;nbsp; In 
the VC11 Developer Preview, infinity is 5 by default.&amp;nbsp; This got our 
compiler memory consumption back to what it was in VC10.&amp;nbsp; If you need 
more arguments (e.g. you had code compiling with VC9 SP1 or VC10 that 
used 6-tuples), there&#39;s an escape hatch.&amp;nbsp; You can define &lt;span face=&quot;Courier New&quot; style=&quot;font-family: Courier New;&quot;&gt;_VARIADIC_MAX&lt;/span&gt;
 project-wide between 5 and 10 inclusive (it defaults to 5).&amp;nbsp; Increasing
 it will make the compiler consume more memory, and may require you to 
use the &lt;span face=&quot;Courier New&quot; style=&quot;font-family: Courier New;&quot;&gt;/Zm&lt;/span&gt; option to reserve more space for PCHes.&lt;memory&gt;&lt;/memory&gt;&lt;/memory&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3449362866795685158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/11/on-variadic-templates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3449362866795685158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3449362866795685158'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/11/on-variadic-templates.html' title='On variadic templates'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6337412546028483918</id><published>2011-10-31T20:11:00.000+04:00</published><updated>2011-10-31T20:11:20.762+04:00</updated><title type='text'>Ещё один неплохой шрифт</title><content type='html'>&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/7/75/MonofurSP.svg/199px-MonofurSP.svg.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;235&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/7/75/MonofurSP.svg/199px-MonofurSP.svg.png&quot; width=&quot;199&quot; /&gt;&lt;/a&gt;Что-то осточертел мне Consolas. (А уж стандартные шрифты — и подавно.)&lt;br /&gt;
Решил порыться в инете и наткнулся на то, что вы видите справа:&lt;br /&gt;
&lt;br /&gt;
 Недостаток — нету&lt;b&gt; bold&lt;/b&gt;. Но это компенсируется забавными &#39;e&#39;, &#39;g&#39;, &#39;j&#39;, а также прыгающими циферками :-)</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6337412546028483918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/10/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6337412546028483918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6337412546028483918'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/10/blog-post.html' title='Ещё один неплохой шрифт'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3392410619780166627</id><published>2011-10-20T20:53:00.001+04:00</published><updated>2011-10-20T21:13:24.518+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++0x"/><category scheme="http://www.blogger.com/atom/ns#" term="ня"/><title type='text'>Оно работает o_O</title><content type='html'>Решил тут запилить паттерн Visitor с &lt;strike&gt;блэкдже&lt;/strike&gt; использованием std::shared_ptr:

&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#include &amp;lt;memory&amp;gt;
#include &amp;lt;type_traits&amp;gt;

...

struct Node : public std::enable_shared_from_this&amp;lt;Node&amp;gt; {
    virtual ~Node() {}
    virtual void accept(Visitor&amp;amp;) = 0;
};

#define DEFINE_ACCEPT_METHOD \
    virtual void accept(Visitor&amp;amp; v) { \
        v.visit(std::static_pointer_cast&amp;lt;std::remove_pointer&amp;lt;decltype(this)&amp;gt;::type&amp;gt;(shared_from_this())); \
    }

struct SomeNode : public Node {  
    ...
   DEFINE_ACCEPT_METHOD;
    ...
};
&lt;/pre&gt;
Но на самом деле макросы - зло. В данном случае можно обойтись безо всякой магии, просто заюзав CRTP ещё раз:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;template &amp;lt;class NodeType&amp;gt;                                                                                       
struct VisitableNode : public Node {
    virtual void accept(Visitor&amp;amp; v) {
        v.visit(std::static_pointer_cast&amp;lt;NodeType&amp;gt;(shared_from_this()));
    }
};

struct SomeNode : public VisitableNode&amp;lt;SomeNode&amp;gt; { 
    ... 
};&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3392410619780166627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/10/oo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3392410619780166627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3392410619780166627'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/10/oo.html' title='Оно работает o_O'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-8135145258891324213</id><published>2011-09-04T11:55:00.001+04:00</published><updated>2011-09-04T11:55:11.565+04:00</updated><title type='text'>визуализация ОДУ в Asymptote</title><content type='html'>Задали нам, понимаешь, изоклины порисовать на досуге. Ну вот какой уважающий себя программер будет подобной фигнёй вручную заниматься? И вспомнил я тут про Asymptote.&lt;br /&gt;
Несколько минут ковыряния в документации привели к следующему: для рисования поля направлений и интегральных кривых имеется модуль &lt;a href=&quot;http://asymptote.sourceforge.net/doc/slopefield.html&quot;&gt;slopefield&lt;/a&gt;, а для рисования изоклин — модуль &lt;a href=&quot;http://asymptote.sourceforge.net/doc/contour.html&quot;&gt;contour&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Ну и вот что получилось:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;import&lt;/span&gt; contour;
&lt;span style=&quot;color: blue;&quot;&gt;import&lt;/span&gt; slopefield;
&lt;span style=&quot;color: blue;&quot;&gt;import&lt;/span&gt; graph; // чтобы оси нарисовать

settings.outformat = &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;png&quot;&lt;/span&gt;;
unitsize(2cm);

&lt;span style=&quot;color: #2b91af;&quot;&gt;pair&lt;/span&gt; a = (-5, -5);
&lt;span style=&quot;color: #2b91af;&quot;&gt;pair&lt;/span&gt; b = (5, 5);

limits(a, b); // картинка ограничена прямоугольником с углами в a и b
xaxis(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;$x$&quot;&lt;/span&gt;, EndArrow);
yaxis(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;$y$&quot;&lt;/span&gt;, EndArrow);

&lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt; f(&lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt; x, &lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt; y) { &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;  x^2 + y^2 - 1; }
&lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt;[] isoclines = map(&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt;(&lt;span style=&quot;color: #2b91af;&quot;&gt;real&lt;/span&gt; x){&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; x*x;}, // анонимная функция применяется к
                     uniform(1, 10, 9)                // массиву {1,2,3,4,5,6,7,8,9,10}
                   ); 

add(slopefield(f, a, b));
draw(contour(f, a, b, isoclines), green);

currentpen = red + 1.5;             // 1.5 - толщина пера в bp (bp == 1/72 дюйма)
&lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt; (var i : uniform(-5, 5, 20)) {  // range-based for, так сказать
    draw(curve((i, i), f, a, b));
    draw(curve((0, i), f, a, b));
} &lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBQOTVrf3tcdhQ_UDaGfzPrcfQPfgXswJBCU3IZ_g3x6zDmc-vS8a4DUkFRHxc3c_mrEBk3aWEmW4LStR9QNyG6oER_LBvv-zukTxLvAAViIQoj1qBnrTNp_nbqugA8D9TxbJHx39BkCw/s1600/ode.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBQOTVrf3tcdhQ_UDaGfzPrcfQPfgXswJBCU3IZ_g3x6zDmc-vS8a4DUkFRHxc3c_mrEBk3aWEmW4LStR9QNyG6oER_LBvv-zukTxLvAAViIQoj1qBnrTNp_nbqugA8D9TxbJHx39BkCw/s400/ode.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/8135145258891324213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/09/asymptote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/8135145258891324213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/8135145258891324213'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/09/asymptote.html' title='визуализация ОДУ в Asymptote'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBQOTVrf3tcdhQ_UDaGfzPrcfQPfgXswJBCU3IZ_g3x6zDmc-vS8a4DUkFRHxc3c_mrEBk3aWEmW4LStR9QNyG6oER_LBvv-zukTxLvAAViIQoj1qBnrTNp_nbqugA8D9TxbJHx39BkCw/s72-c/ode.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6651184266730473473</id><published>2011-08-25T19:40:00.001+04:00</published><updated>2011-08-25T19:40:40.430+04:00</updated><title type='text'>gсс 4.6+ и венда</title><content type='html'>Почитывая &quot;C++ Concurrency in Action&quot;, осознал, что пользоваться установленной в универе MS VC++ 2010 буду неспособен. Во-первых, потому что в GCC 4.6+ уже реализовали порядка половины стандарта C++0x, включая атомарные типы, мьютексы, потоки и т.п. Во-вторых, потому что терпеть не могу проприетарщину.&lt;br /&gt;
&lt;br /&gt;
Возможных решений вырисовывалось несколько:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Cygwin: преимущество перед прочими вариантами - gcc, vim и прочие привычные штуковины из мира UNIX в одном флаконе. Только вот в его репозиториях даже в experimental лежит лишь gcc 4.5. Фэйл. Нет, ну не совсем фэйл: можно было кое-как собрать свежий gcc из исходников. Однако, как выяснилось, у меня не настолько прямые руки...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mingw-w64.sourceforge.net/&quot;&gt;Mingw-w64&lt;/a&gt;: форк полудохлого &lt;a href=&quot;http://mingw.org/&quot;&gt;mingw&lt;/a&gt;. В разделе Automated builds можно скачать свежие сборки. Однако, чтобы заработали std::thread, std::mutex и тому подобные няшки, нужно, стоя на одной руке, почесать левой ногой за правым ухом. Я даже пробовал, но как-то не вышло :&#39;-(&lt;br /&gt;
(Точнее говоря, с помощью &lt;a href=&quot;http://mingw-users.1079350.n2.nabble.com/Mingw-w64-public-Pthreads-recipe-for-using-std-thread-with-mingw-mingw32-mingw-w64-td5698033.html&quot;&gt;вот этого вот&lt;/a&gt; совета мне удалось заставить работать std::thread, но не std::mutex, без которого использовать многопоточность - тот ещё маразм. При попытке заюзать мьютексы g++ плевался чем-то вроде &quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace;&quot;&gt;error: there are no arguments to &#39;__gthread_mutex_timedlock&#39; that depend on a template parameter, so a declaration of &#39;__gthread_mutex_timedlock&#39; must be available&quot;&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;И вот сегодня я внезапно наткнулся на вот это:&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/mingw-builds/&quot;&gt;http://code.google.com/p/mingw-builds/&lt;/a&gt;&amp;nbsp;Обсуждение сборок &lt;a href=&quot;http://forum.sources.ru/index.php?showtopic=337722&quot;&gt;здесь&lt;/a&gt;. Все многопоточные фичи вроде работают. В общем, человеку под ником niXman - респект и уважуха :-)&lt;br /&gt;А поскольку everything just works, то и говорить особо не о чем. Единственное, что можно отметить: читайте &quot;Description&quot; на гуглокоде во избежание недоразумений. Например, в текущем snapshot-е GCC 4.7.0 для работы std::thread надо компилять сорцы с флагом -static.&lt;/li&gt;
&lt;li&gt;Ещё, наверное, возможен вариант в виде Live USB с линухом. Однако ну его на фиг, ибо наш препод, как выяснилось в прошлом году, даже Vim/GVim ни разу не видел.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
В итоге я, ясен пень, остановился на mingw-builds. И вам советую во избежание плясок с бубном)&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6651184266730473473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/08/g-46.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6651184266730473473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6651184266730473473'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/08/g-46.html' title='gсс 4.6+ и венда'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3497894479560517659</id><published>2011-08-18T21:50:00.000+04:00</published><updated>2011-08-18T21:50:41.076+04:00</updated><title type='text'>map::iterator: избавляемся от -&gt;first и -&gt;second</title><content type='html'>Решил тут в процессе изучения С++ старый свой код порефакторить. Попался такой вот кусочек:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;typedef unordered_map&amp;lt;int,double&amp;gt; ColumnMap;
typedef ColumnMap::const_iterator ColumnMapIter;
...
for(ColumnMapIter it = row-&amp;gt;begin(); it != row-&amp;gt;end(); ++it) {
    ColumnMap *tmp = other -&amp;gt; rlist[it -&amp;gt; first];
    ColumnMapIter it_col = tmp -&amp;gt; find(col);
    if (it_col != tmp-&amp;gt;end()) {
        val += (it -&amp;gt; second ) * (it_col -&amp;gt; second);
    }
}
&lt;/pre&gt;
Согласитесь, что в этих first и second чёрт ногу сломит. Однако в плюсах имеется такая редкоиспользуемая фича, как указатели на члены класса. Почитать про них можно, например, здесь: &lt;a href=&quot;http://www.informit.com/guides/content.aspx?g=cplusplus&amp;amp;seqNum=142&quot;&gt;http://www.informit.com/guides/content.aspx?g=cplusplus&amp;amp;seqNum=142&lt;/a&gt;&lt;br /&gt;
С их-то помощью и можно заменить first и second на что-нибудь более понятное. &lt;br /&gt;
&lt;br /&gt;
Смотрите:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;typedef unordered_map&amp;lt;int,double&amp;gt; ColumnMap;
typedef ColumnMap::const_iterator ColumnMapIter;
...
typedef ColumnMap::value_type ColumnMapPair;
const ColumnMapPair::first_type ColumnMapPair::* column = &amp;amp;ColumnMapPair::first;
ColumnMapPair::second_type ColumnMapPair::* value = &amp;amp;ColumnMapPair::second;
...
for(ColumnMapIter it = row-&amp;gt;begin(); it != row-&amp;gt;end(); ++it) {
    ColumnMap *tmp = other -&amp;gt; rlist[*it.*column];
    ColumnMapIter it_col = tmp -&amp;gt; find(col);
    if (it_col != tmp-&amp;gt;end()) {
        val += (*it.*value) * (*it_col.*value);
    }
}
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3497894479560517659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/08/mapiterator-first-second.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3497894479560517659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3497894479560517659'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/08/mapiterator-first-second.html' title='map::iterator: избавляемся от -&gt;first и -&gt;second'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6790668914082812039</id><published>2011-08-14T16:27:00.003+04:00</published><updated>2011-08-14T16:27:52.603+04:00</updated><title type='text'>занятненький подкаст</title><content type='html'>Рыская по Википедии, случайно наткнулся на &lt;a href=&quot;http://skepticality.com/&quot;&gt;skepticality.com&lt;/a&gt;. На данный момент это официальный подкаст журнала &quot;Skeptic&quot;, выпускаемого организацией &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Skeptics_Society&quot;&gt;The Skeptics Society&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Сейчас на сайте выложено 160+ выпусков на самые разнообразные темы. Между прочим, каждый из них снабжён пачкой ссылок для заинтересовавшихся затронутыми в нём топиками.&lt;br /&gt;
Короче, рекомендую всем желающим объективно воспринимать реальность :-)</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6790668914082812039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/08/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6790668914082812039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6790668914082812039'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/08/blog-post.html' title='занятненький подкаст'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6191906293188638267</id><published>2011-07-05T21:07:00.000+04:00</published><updated>2011-07-05T21:07:54.422+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ня"/><title type='text'>[oh shi~] теория музыки</title><content type='html'>Интересующимся сабжем советую погуглить &quot;music theory Z/12Z&quot;. Можно найти довольно убойную муть.&lt;br /&gt;
&lt;br /&gt;
Вот, например, с моноидами аффинных отображений, их генераторами и тому подобным:&lt;br /&gt;
&lt;a href=&quot;http://www.math.uchicago.edu/%7Emay/VIGRE/VIGRE2007/REUPapers/FINALFULL/Bartlett.pdf&quot;&gt;www.math.uchicago.edu/~may/VIGRE/VIGRE2007/REUPapers/FINALFULL/Bartlett.pdf&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6191906293188638267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/07/oh-shi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6191906293188638267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6191906293188638267'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/07/oh-shi.html' title='[oh shi~] теория музыки'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-448660518552159533</id><published>2011-06-12T08:42:00.003+04:00</published><updated>2011-06-14T21:52:55.820+04:00</updated><title type='text'>[жж] ностальгия</title><content type='html'>Знаете что? Хочу, чтоб интернет был таким, как 5 лет назад.&lt;br /&gt;
&lt;br /&gt;
Во-первых, сегодня он таков, что знакомиться с кем-либо по сети совершенно не хочется. Раньше на момент начала общения о собеседнике было неизвестно ничего, кроме его ника и, быть может, аватарки, пары фотографий да истории сообщений на форуме. Сейчас же почти каждый зарегистрирован &quot;вконтакте&quot;. И хрен бы с ним, если бы просто зарегистрирован — с некоторых пор какого-то чёрта всё это проиндексировано поисковиками и даже регистрации не нужно, чтобы узнать инфу о человеке: загуглил имя, фамилию и ещё что-нибудь — вот тебе и фотка, и интересы, и откуда родом, и где учится (ну, разумеется, если параноиков типа меня в расчёт не брать). А теперь вот ещё и френдлисты открыли. Это вообще, на мой взгляд, диковато: &quot;скажи мне, кто твои друзья, и я скажу, кто ты&quot;. (Правда, концентрация истинных друзей там колеблется от 5 до 50 процентов в зависимости от политики френдования. Но общее представление всё же заиметь можно.) В итоге теряется весь интерес: ведь блин, вся суть знакомства в _постепенности_ раскрытия одной личности перед другой. А со всеми этими грёбаными социальными сетями можно безо всякого знакомства сделать вывод о том, что человек — кусок идиота (причём вывод вполне может оказаться неправильным); заранее узнать о наличии общих знакомых, вкусах в плане музыки и кино; о том, куда субъект ездил отдыхать этим летом и так далее. Ну что за скукота?&lt;br /&gt;
&lt;br /&gt;
Во-вторых, в техническом аспекте тоже творится кошмар: как подумаешь, что весь трафик этого идиотского &quot;вконтактика&quot; идёт по голому HTTP безо всяких SSL — жуть берёт. Средневековье какое-то. А ведь у FaceBook HTTPS-доступ есть, между прочим. Но у нас-то Россия: как обычно, отстаём в техническом плане. И почти всем пофиг — народ и аббревиатуры &quot;HTTP&quot; в большинстве своём не слышал. А уж криптографические протоколы — так это и вовсе какая-то неведомая ёбаная хуйня, кому оно надо?&lt;br /&gt;
И, блеать, не думайте, что это всё чисто теория. Вот, нате вам видео, как чел снифать кукисы в public Wi-Fi сети: &lt;a href=&quot;http://www.youtube.com/watch?v=jsFODcwiRFY&quot;&gt;http://www.youtube.com/watch?v=jsFODcwiRFY&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Так что IRC/ICQ во всех отношениях лучше были. А ещё Jabber и Skype есть... Но народ же не осилит. Да и надо же куда-то выкладывать в большинстве своём бездарные фоточки и псевдоумные цитаты, чтоб их кто-нибудь &quot;лайкнул&quot;, подняв ЧСВ автору. Буэээээ...</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/448660518552159533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/06/blog-post_12.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/448660518552159533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/448660518552159533'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/06/blog-post_12.html' title='[жж] ностальгия'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-1334480610237032181</id><published>2011-06-01T00:31:00.006+04:00</published><updated>2011-06-04T20:08:17.234+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="64-bit"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Ruby, 64-bit, Bignum и все-все-все</title><content type='html'>Итак, свершилось! Переехал я на 64 бита, благо Intel Atom N450 их поддерживает. Вроде как всё летает просто: ещё бы, целых 8 новых регистров задействуются! Библиотеки для длинной арифметики, как и полагается, ускорились в два раза.&lt;br /&gt;
&lt;br /&gt;
Ну так вот, попытался я и интерпретатор Ruby на 64 бита пересадить. Точнее, его Bignum-ы. По умолчанию никакой поддержки 64-битовых целых в качестве digit-ов почему-то не предусмотрено. «Ну фиг ли», — решил я, «тоже мне проблема», — добавил в include/ruby/defines.h несколько строчек и пересобрал:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#if defined(__x86_64__)
# define BDIGIT unsigned long
# define SIZEOF_BDIGITS SIZEOF_LONG
# define BDIGIT_DBL __uint128_t
# define BDIGIT_DBL_SIGNED __int128_t
# define PRI_BDIGIT_PREFIX &quot;&quot;
# define PRI_BDIGIT_DBL_PREFIX &quot;&quot;
#elif ...
&lt;/pre&gt;&lt;br /&gt;
Ну ладно, даже собралось. Правда, по поводу random.c в процессе появилось несколько варнингов — деление на ноль, например :-))) Хрень в том, что там есть такая строчка:&lt;br /&gt;
&lt;pre&gt;#define DIGSPERINT (SIZEOF_INT/SIZEOF_BDIGITS)
&lt;/pre&gt;Почему-то предполагается, что эта шняга всегда не меньше единицы, и на неё спокойно делят. Только вот в нашем случае 4 / 8 = 0, хыхых. Надо будет поковырять rb_rand_dump и rb_rand_load.&lt;br /&gt;
Впрочем, с генерацией псевдорандомных длинных чисел разобраться удалось (функция limited_big_rand):&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;...
#elif SIZEOF_BDIGITS == 4     
# define BIG_GET32(big,i) (RBIGNUM_DIGITS(big)[(i)])
# define BIG_SET32(big,i,d) (RBIGNUM_DIGITS(big)[(i)] = (d))
#else  
    /* SIZEOF_BDIGITS == 8 */ 
# define BIG_GET32(big,i) \   
    ((i) &amp;amp; 1 ? \              
     RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] &amp;gt;&amp;gt; 32 : \
     RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] &amp;amp; 0xffffffff )
# define BIG_SET32(big,i,d) \ 
    do { \
        if ((i) &amp;amp; 1) \        
        RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] = \
        ((d) &amp;lt;&amp;lt; 32) + (RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] &amp;amp; 0xffffffff); \
        else \
        RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] &amp;amp;= 0xffffffff00000000ULL, \
        RBIGNUM_DIGITS(big)[(i)&amp;gt;&amp;gt;1] += (d); \
    } while(0);               
#endif 
&lt;/pre&gt;&lt;br /&gt;
Был и ещё один глюк: строки в числа преобразовывались верно, а вот наоборот — нифига. Чтобы пофиксить, добавил в функции rb_big2str0 (bignum.c) строки&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#if SIZEOF_BDIGITS &amp;gt; 4
    hbase *= hbase;
#endif&lt;/pre&gt;сразу после такого же сравнения с двойкой. &lt;br /&gt;
&lt;br /&gt;
Пришлось также вручную подправить значение BASE в ext/bigdecimal/bigdecimal.h: в противном случае возникало переполнение. BASE должно равняться 10**9, а не 10**19. Было следующее:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;...
#elif SIZEOF_BDIGITS &amp;gt;= 8
# define RMPD_COMPONENT_FIGURES 19
# define RMPD_BASE ((BDIGIT)10000000000000000000U)
#elif SIZEOF_BDIGITS &amp;gt;= 4
# define RMPD_COMPONENT_FIGURES 9
# define RMPD_BASE ((BDIGIT)1000000000U)
#elif ...
&lt;/pre&gt;Вообще говоря, эта хрень только в trunk-е появилась, и здравая логика подсказывает, что во избежание переполнения здесь везде надо &#39;&amp;gt;=&#39; заменить на &#39;&amp;gt;&#39;. (По крайней мере, в старых стабильных версиях на 32-битных машинах BASE было равно 10000).&lt;br /&gt;
&lt;br /&gt;
Ну по крайней мере арифметические операции, ради которых всё затевалось, вроде работают. И скорость числодробления действительно круто возросла: взять хотя бы тот же 1000000! — одна и та же версия ruby с 32-битными digit-ами считает его за 57 секунд, а с 64-битными — всего за 19. Жесть. То бишь действительно удвоение скорости засчёт бóльшей разрядности + дополнительный прирост засчёт использования полного набора регистров (по крайней мере мне кажется, что это основные факторы).</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/1334480610237032181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/06/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1334480610237032181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1334480610237032181'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/06/blog-post.html' title='Ruby, 64-bit, Bignum и все-все-все'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6335836444529248679</id><published>2011-05-30T23:37:00.002+04:00</published><updated>2011-05-31T09:15:46.052+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ня"/><title type='text'>охренительно</title><content type='html'>Ради любопытства слил сегодня свежий ruby из trunk-а, скомпилял. С удивлением обнаружил, что в 1.9.3dev (rev. 31825) наконец-то заимплементили &lt;a href=&quot;http://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication&quot;&gt;Тоом-Кука&lt;/a&gt;! Не FFT, конечно, но всё же прогресс налицо. (Написать, что ли, летом Шёнхаге-Штрассена? — за два месяца можно управиться =)...)&lt;br /&gt;
Произошёл сий коммит, кстати говоря, совсем недавно — 22 мая (rev. 31695).&lt;br /&gt;
Да и в целом скорость повыше, чем у 1.9.2-p336, на котором я сидел до этого.&lt;br /&gt;
Так что надо почаще обновляться, пожалуй =) &lt;br /&gt;
&lt;br /&gt;
Но охренительно не только это. Есть такая замечательная вещь, как &lt;a href=&quot;http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/&quot;&gt;Intel Vtune Amplifier&lt;/a&gt; — вроде как самый ништяковый профайлер на сегодняшний день (по крайней мере, для &lt;nobr&gt;Intel-овских&lt;/nobr&gt; процессоров). Цены на лицензионный продукт просто зверские (900$). Но если побродить по сайту, ВНЕЗАПНО оказывается, что &quot;&lt;a href=&quot;http://software.intel.com/en-us/articles/non-commercial-software-development/&quot;&gt;developers who are developing software on their own time without compensation&lt;/a&gt;&quot; могут скачать некоммерческую версию вообще на халяву! (правда, есть один нюанс: только для linux; причём у меня установка превратилась в долгое ковыряние с компиляцией их драйверов; впрочем, для убунты вроде поставляется с уже скомпилированными дровами).&lt;br /&gt;
&lt;br /&gt;
Ну и про ещё одну забавную штуку напишу, коль скоро она соответствует заголовку: оказывается, есть &lt;a href=&quot;http://en.wikipedia.org/wiki/Szilassi_polyhedron&quot;&gt;гомеоморфный тору семигранник, у которого каждая грань соседствует со всеми остальными&lt;/a&gt;. У кого руки чешутся — можете даже склеить, там внизу есть ссылочка на pdf с развёрткой. Получите конструктивную (в наибуквальнейшем смысле :-)) оценку снизу хроматического числа тора.</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6335836444529248679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/05/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6335836444529248679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6335836444529248679'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/05/blog-post.html' title='охренительно'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-107756882303381256</id><published>2011-05-14T07:08:00.000+04:00</published><updated>2011-05-14T07:08:21.088+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="факториал"/><title type='text'>О вычислении факториала: часть 2</title><content type='html'>&lt;a href=&quot;http://lomereiter.blogspot.com/2011/02/blog-post_12.html&quot;&gt;Когда-то я писал&lt;/a&gt; о наиболее продвинутом на сегодняшний день методе вычисления факториала. Сегодня, читая Википедию, наткнулся и на ссылку с оценкой сложности этого метода: &lt;a href=&quot;http://www.cecm.sfu.ca/personal/pborwein/PAPERS/P29.pdf&quot;&gt;держите&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Статью (пока что) не читал. Результат, который там приводится, таков:&lt;br /&gt;
временная сложность составляет &lt;img alt=&quot;O(\log \log n \cdot M(n \log n))&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=O%28%5Clog%20%5Clog%20n%20%5Ccdot%20M%28n%20%5Clog%20n%29%29&quot; /&gt;, где &lt;img alt=&quot;M(n \log n)&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=M%28n%20%5Clog%20n%29&quot; /&gt; — временная сложность перемножения двух чисел длины &lt;img alt=&quot;n \log n&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=n%20%5Clog%20n&quot; /&gt;.&lt;br /&gt;
(Для сравнения: в случае разбиения произведения на два произведения примерно равной длины сложность отличается тем, что вместо log(log(n)) в формуле стоит просто log(n). В случае же тупого перемножения последовательных чисел сложность равна O(n² log n).)&lt;br /&gt;
&lt;br /&gt;
Таким образом, в случае использования метода Шёнхаге-Штрассена сложность — &lt;img alt=&quot;O(n\,\cdot\,(\log n \log \log n)^2)&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=O%28n%5C%2C%5Ccdot%5C%2C%28%5Clog%20n%20%5Clog%20%5Clog%20n%29%5E2%29&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
В случае же использования метода Карацубы, для которого &lt;img alt=&quot;M(n) = n^{\log_23}&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=M%28n%29%20%3D%20n%5E%7B%5Clog_23%7D&quot; /&gt;, сложность, соответственно,  — &lt;img alt=&quot;O((n \log n)^{\log_23}\,\cdot\,\log \log n)&quot; class=&quot;mid&quot; src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=O%28%28n%20%5Clog%20n%29%5E%7B%5Clog_23%7D%5C%2C%5Ccdot%5C%2C%5Clog%20%5Clog%20n%29&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Даже проверил из любопытства: (кривая - график f(N) = 1.532e-10 * (N log N)&lt;sup&gt;log&lt;sub&gt;2&lt;/sub&gt;3&lt;/sup&gt; * log log N)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi173tcYqv3BkT62rJ0iUKJUmmqNHrE0cw83ksX1r4ewmNzL9ibeTH7-C6DdECmr6cpe4K3XZies-gx_76N8_20J3eugEPToowOKtLA8VdBW03-3IyKKI1SEMRFFhqhB4CWubK8d4pMQZE/s1600/primeswing.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi173tcYqv3BkT62rJ0iUKJUmmqNHrE0cw83ksX1r4ewmNzL9ibeTH7-C6DdECmr6cpe4K3XZies-gx_76N8_20J3eugEPToowOKtLA8VdBW03-3IyKKI1SEMRFFhqhB4CWubK8d4pMQZE/s640/primeswing.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/107756882303381256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/05/2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/107756882303381256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/107756882303381256'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/05/2.html' title='О вычислении факториала: часть 2'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi173tcYqv3BkT62rJ0iUKJUmmqNHrE0cw83ksX1r4ewmNzL9ibeTH7-C6DdECmr6cpe4K3XZies-gx_76N8_20J3eugEPToowOKtLA8VdBW03-3IyKKI1SEMRFFhqhB4CWubK8d4pMQZE/s72-c/primeswing.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-6851370345289459060</id><published>2011-05-09T18:53:00.002+04:00</published><updated>2011-05-09T19:28:15.748+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="number theory"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Release of ruby-numtheory 0.0.3</title><content type='html'>First, I&#39;d like to say a few words about the history of the project.&lt;br /&gt;
Right after I switched to Ruby with respect to solving ProjectEuler.net problems, I realized that there&#39;s actually no number-theoretical Ruby libraries at all. Of course, I could just turn to some more advanced tools like PARI-GP or switch to, say, Python which has nzmath library. But: 1) I love Ruby.  2) Number-theoretical algorithms are themselves useful to know and understand for I&#39;m sorta mathematician ;-)&lt;br /&gt;
Thus I decided to write my own library. And now, I suppose, it even might be useful for somebody else.&lt;br /&gt;
&lt;br /&gt;
Well, what has been implemented so far?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Eratosphenes sieve&lt;/li&gt;
&lt;li&gt;Factorization by trial division.&lt;/li&gt;
&lt;li&gt;Common multiplicative functions: moebius, sigma, phi, pi.&lt;/li&gt;
&lt;li&gt;Jacobi symbol&lt;/li&gt;
&lt;li&gt;Powermod (works with negative powers also whenever the inverse exists)&lt;/li&gt;
&lt;li&gt;N-th fibonacci number&lt;/li&gt;
&lt;li&gt;Fast factorial computation by PrimeSwing algorithm&lt;/li&gt;
&lt;li&gt;Multiplicative order&lt;/li&gt;
&lt;li&gt;Miller-Rabin primality test&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;The gem is at &lt;a href=&quot;http://rubygems.org/gems/ruby-numtheory&quot;&gt;rubygems.org/gems/ruby-numtheory&lt;/a&gt;; Thanks to the existence of rake-compiler, precompiled version for Windows is also available.&amp;nbsp;&lt;/div&gt;&lt;div&gt;The features to be implemented in the near future are some more primality tests (I hope I will eventually understand AKS), and roots modulo n (at least Tonelli-Shanks algorithm). Maybe, something else.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/6851370345289459060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/05/release-of-ruby-numtheory-003.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6851370345289459060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/6851370345289459060'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/05/release-of-ruby-numtheory-003.html' title='Release of ruby-numtheory 0.0.3'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-1639009980443960127</id><published>2011-05-02T00:21:00.001+04:00</published><updated>2011-05-02T00:21:39.201+04:00</updated><title type='text'>немного об Asymptote</title><content type='html'>Как-то раз на лекции И. Романовский нахваливал нам MetaPost. Штука эта, безусловно, крута. Только вот есть у неё один существенный недостаток: при редком использовании самобытный синтаксис языка напрочь забывается (сужу по себе).&lt;br /&gt;
&lt;br /&gt;
Однако существует не менее хороший язык Asymptote, созданный под влиянием MetaPost. Появился он в 2004 году (то бишь где-то вчера утром по меркам старика Романовского) и обладает C++-подобным синтаксисом. Даже Java-подобным, я б сказал.&lt;br /&gt;
&lt;br /&gt;
Например, нарисуем фигурную скобку:&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint linenums&quot;&gt;unitsize(1cm);

settings.outformat = &quot;gif&quot;;

int height = 10;
real slant_coeff = 0.12;
transform t = shift(0, height/4);
pair A = (0, 0), B = (1, 0), C = t * B;

guide g = A{up}::{right}C; 
g = g -- reverse(shift(B-A) * g);
g = g -- shift(B-A) * rotate(180) * g;
g = slant(slant_coeff) * g;

fill(g--cycle);

add(currentpicture, reflect(t^-1 * A, t^-1 * B) * currentpicture); &lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;br /&gt;
Как видите, всё просто. Сперва задаём единичную длину и выходной формат, после чего инициализируем некоторые переменные. Как можно видеть, помимо обычных числовых типов есть transform, который по сути своей есть набор из 6 чисел, соответствующих определённому аффинному преобразованию в 2D. Преобразования применяются путём умножения слева. Их также можно умножать друг на друга (12-я строка) и возводить в целочисленную степень, в том числе и отрицательную, если это возможно (последняя строка).&lt;br /&gt;
&lt;br /&gt;
(Ещё стоит отметить, что в 7-й строке height/4 = 2.5, а вовсе не 2, как можно подумать.)&lt;br /&gt;
&lt;br /&gt;
Теперь по поводу guide. В Asymptote есть также тип path — путь в его топологическом смысле, — очень похожий на guide. Разница в том, что guide — это набор узлов и контрольных точек, на которых будет при отрисовке построена кривая Безье, а path заключает в себе &lt;i&gt;уже&lt;/i&gt; построенную кривую. &lt;br /&gt;
Путь в простейшем случае задаётся как набор точек, как-либо соединённых: соединение прямой линией обозначается &#39;--&#39;, кривой Безье — &#39;..&#39;, кривой Безье с минимумом перегибов — &#39;::&#39;. Также в фигурных скобках могут задаваться различные параметры навроде направления или кривизны.&lt;br /&gt;
&lt;br /&gt;
Для 3D используются типы triple, path3, transform3, surface, projection, ...&lt;br /&gt;
&lt;br /&gt;
И, да, между прочим: несмотря на всю схожесть с C++, в Asymptote нет постфиксных форм операторов инкремента/декремента. Только инфиксные. Так уж вышло.&lt;br /&gt;
&lt;br /&gt;
В общем, кто заинтересовался — гоу на &lt;a href=&quot;http://asymptote.sourceforge.net/&quot;&gt;http://asymptote.sourceforge.net&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;vertical-align:top&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtCqe5NpWsFXOYW7ybOJrL4cw0o2GbH5r5Eejw15nf9y9ExTv7M4yfgCQP5X5bAM3btL2-Tok9fpHy0d_7j0qTfDPNEE1QWmVds7aJ8f0d6hT4ms_peCt-F2KHL5Ck9Q8vycRt63VYBHM/s1600/curly_bracket.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtCqe5NpWsFXOYW7ybOJrL4cw0o2GbH5r5Eejw15nf9y9ExTv7M4yfgCQP5X5bAM3btL2-Tok9fpHy0d_7j0qTfDPNEE1QWmVds7aJ8f0d6hT4ms_peCt-F2KHL5Ck9Q8vycRt63VYBHM/s200/curly_bracket.gif&quot; width=&quot;72&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/1639009980443960127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/05/asymptote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1639009980443960127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/1639009980443960127'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/05/asymptote.html' title='немного об Asymptote'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtCqe5NpWsFXOYW7ybOJrL4cw0o2GbH5r5Eejw15nf9y9ExTv7M4yfgCQP5X5bAM3btL2-Tok9fpHy0d_7j0qTfDPNEE1QWmVds7aJ8f0d6hT4ms_peCt-F2KHL5Ck9Q8vycRt63VYBHM/s72-c/curly_bracket.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3349936025975750952</id><published>2011-04-15T11:02:00.000+04:00</published><updated>2011-04-15T11:02:08.903+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ненависть"/><title type='text'>ненависти пост</title><content type='html'>Решил тут от скуки на kinopoisk.ru зарегаццо. Уже при заполнении профиля задолбался. Программистам сего сайта надо руки отрывать нахрен.&lt;br /&gt;
&lt;br /&gt;
Поле &quot;блог&quot; — ссылка обязательно должна с &#39;http://&#39; начинаться. А что, блджад, есть блоги, на ftp расположенные?&lt;br /&gt;
Аватар — только файлы с расширением jpg/jpeg. Итить-колотить, неужели трудно на сервере в нужный формат конвертировать? С хера ли пользователь должен этим заниматься? Ну ладно, конвертнул. И только при загрузке сервер ответил, что высота должна быть не менее 190 пикселов (и это они «аватаром» называют?). Твою мать, вот почему про то, что надо грузить файл в JPG не более 2МБ, возле кнопки написано, а про минимальный размер — ни слова?&lt;br /&gt;
&lt;br /&gt;
Ну их нахер, короче. Среди российских сайтов КиноБаза рулит и педалит.</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3349936025975750952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/04/blog-post_15.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3349936025975750952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3349936025975750952'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/04/blog-post_15.html' title='ненависти пост'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3264640242989875943</id><published>2011-04-10T15:49:00.001+04:00</published><updated>2011-04-11T21:16:55.425+04:00</updated><title type='text'>трюки быстрого счёта</title><content type='html'>Наткнулся давеча на такую вот раздачу: &lt;a href=&quot;http://rutracker.org/forum/viewtopic.php?t=2918851&quot;&gt;http://rutracker.org/forum/viewtopic.php?t=2918851&lt;/a&gt; (Примечание: лучше не читайте там описание, это наполовину рекламный бред. Впрочем, возможно, вам хочется почитать рекламный бред. А может, вы ещё и порядочный гражданин нероссии и люто-бѣшено ненавидите трекеры... Тогда вам дорога сюда: &lt;a href=&quot;http://www.glad2teach.co.uk/fast_maths_calculation_tricks.htm&quot;&gt;http://www.glad2teach.co.uk/fast_maths_calculation_tricks.htm&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Аннотация: серия коротких (3-5 минут) роликов, где презентуются всяческие хитровы*$%нные приёмы счёта. Объяснения идут на английском с жутким индусским акцентом (хотя, наверное, бывает и хуже...). Приёмы эти, как утверждается, пришли из Вед, но это весьма сомнительно.&lt;br /&gt;
&lt;br /&gt;
Короче, в целом полезно посмотреть. По крайней мере, сможете после этого, к примеру, 207 и 212 перемножать устно, а не в столбик.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;а вообще — что-то осточертела мне вся эта математика. *пошёл Юнга курить* (прим. для особо упоротых: нет, не того, в честь которого соответствующие диаграммы назвали)&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3264640242989875943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/04/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3264640242989875943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3264640242989875943'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/04/blog-post.html' title='трюки быстрого счёта'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-3843346187512382648</id><published>2011-03-17T21:27:00.000+03:00</published><updated>2011-03-17T21:27:28.227+03:00</updated><title type='text'>Делить или умножать?</title><content type='html'>Сегодня информатик на лекции заявил, что следует писать не &lt;code&gt;&lt;b&gt;x / 2.0&lt;/b&gt;&lt;/code&gt;, а &lt;code&gt;&lt;b&gt;x * 0.5 &lt;/b&gt;&lt;/code&gt;, ибо деление тормознее умножения. Как показала проверка, это действительно так (в данном случае деление раза эдак в 3 медленнее).&lt;br /&gt;
&lt;br /&gt;
Однако из этого не следует делать вывод, что в критичных местах кода нужно заменять деление на умножение — благо большинство компиляторов управятся с этой тягомотиной куда быстрее вас. Более того, они к тому, что получилось после замены деления на умножение, таких оптимизаций (на уровне машинных инструкций) наприменяют, что вам и не снилось.&lt;br /&gt;
&lt;br /&gt;
Перейдём к циферкам.&lt;br /&gt;
&lt;br /&gt;
Использовался gcc 4.4.5.&lt;br /&gt;
Тестовый код:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;const int N = 100000000;
double x; int i;
int main() {
    for (i = 0; i &amp;lt; N; ++i)
        x = i / 2.0; // или же i * 0.5
    return 0;
}
&lt;/pre&gt;&lt;br /&gt;
При компиляции безо всяких флагов результаты следующие: деление — 5.5 секунд, умножение — 1.6 секунды. Ух ты, надо всюду умножение использовать!&lt;br /&gt;
&lt;br /&gt;
А теперь компилируем со слабой оптимизацией (-O1) и осознаём, что все наши усилия по оптимизации кода были смехотворны: теперь в обоих вариантах получилось 1.1 секунды.&lt;br /&gt;
&lt;br /&gt;
(Между прочим: у fpc, похоже, с floating-point оптимизациями дела обстоят паршиво. У gpc (который из GNU Compiler Collection) &amp;nbsp;— нормально, вроде бы так же, как и у gcc (в общем-то, неудивительно). &lt;strike&gt;Надеюсь, в этих ваших Delphi с этим норма&lt;/strike&gt; а хотя не, фтопку делфи ^_^)&lt;br /&gt;
&lt;br /&gt;
Мораль: вместо того чтобы превращать свой код в нечитабельную хренотень, пользуйтесь современными компиляторами.</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/3843346187512382648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/03/blog-post_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3843346187512382648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/3843346187512382648'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/03/blog-post_17.html' title='Делить или умножать?'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968202416661480706.post-383602937628682606</id><published>2011-03-13T22:42:00.001+03:00</published><updated>2011-03-13T22:44:52.299+03:00</updated><title type='text'>обо всём и ни о чём</title><content type='html'>(Как-то вот не набирается мыслей на полноценный пост. Хоть на каком-нибудь juick аккаунт заводи...)&lt;br /&gt;
&lt;br /&gt;
Итак, на прошлой неделе...&lt;br /&gt;
&lt;br /&gt;
Обнаружил ништяковый шрифт под названием &lt;a href=&quot;http://en.wikipedia.org/wiki/Consolas&quot;&gt;Consolas&lt;/a&gt;. (Если что от Microsoft и может быть хорошего, так это шрифты. Ну ладно-ладно, DirectX ещё, так и быть.) Заодно удосужился наконец разобраться, что такое subpixel rendering и hinting.&lt;br /&gt;
&lt;br /&gt;
Открыл для себя &lt;a href=&quot;http://www.padrinorb.com/&quot;&gt;Padrino&lt;/a&gt; — веб-фреймворк на Ruby. Всё-таки Rails как-то монструозен, а Sinatra, наоборот, слишком минималистична (или &#39;-ен&#39;? а, пофиг). Ну и с Heroku пришлось подружиться, альтернативных бесплатных хостингов для Ruby-приложений и нет фактически.&lt;br /&gt;
&lt;br /&gt;
А ещё принял участие в &lt;a href=&quot;http://codefest.org.in/event.php?name=perplexed!&quot;&gt;perplexed!&lt;/a&gt;. Что за турнир — объяснять долго, по ссылке можете заиметь представление. Вообще, чумовая вещь =) Маньяки-организаторы (что символично, индусы) изначально планировали сделать его 12-часовым, но всё же укоротили до 8-ми часов. Никогда ещё такой извращенский код не писал)))&lt;br /&gt;
&lt;br /&gt;
А ещё... Ой, не, пожалуй, хватит ^_^</content><link rel='replies' type='application/atom+xml' href='http://lomereiter.blogspot.com/feeds/383602937628682606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lomereiter.blogspot.com/2011/03/blog-post_13.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/383602937628682606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968202416661480706/posts/default/383602937628682606'/><link rel='alternate' type='text/html' href='http://lomereiter.blogspot.com/2011/03/blog-post_13.html' title='обо всём и ни о чём'/><author><name>lomereiter</name><uri>http://www.blogger.com/profile/00185471803062906653</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCnf5rKlcSMa7ggROFoJgx2AjXFbYjXbXT28tL0xrwA10fgT5Wu83UaS0Q6bPHo6GZOnS-LymGAkS7LfWygDugOofgZXYtcUVLZOcgoQkqBcn91KD-pmLc803cUzDRg/s1600/a68a06d5259e3e0244cb3bd1af3c0e60.jpeg'/></author><thr:total>0</thr:total></entry></feed>