tag:blogger.com,1999:blog-41087550858792393632008-08-20T15:36:24.498+03:00Deepen C++Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comBlogger100125tag:blogger.com,1999:blog-4108755085879239363.post-30887237780861587822008-07-25T16:02:00.010+03:002008-08-05T16:41:24.799+03:00Sysadmin Books and Sysadmin Day<div style="text-align: justify;">Символичное чтение у меня получилось. В <a href="http://www.sysadminday.com/">День Сисадмина</a> читаю книгу для Сисадминов - "DNS и BIND" Пола Альбитца и Крикета Ли издательства О'Рейли. В общем могу всячески рекомендовать, если вдруг у кого возникнет желание разобраться в том, как работает DNS. В ней все это довольно подробно расписано и вполне человеческим языком. Я, если честно, был удивлен, когда узнал, что понятие делегирование домена означает <span class="fullpost">передача ответственности по его администрированию (в том числе и по делегированию субдоменов) третьей стороне, потому как сразу же возникает вопрос - а чем собственно является процедура продления домена у регистраторов?<div style="text-align: center;"><br /><img src="http://lh4.ggpht.com/jnvolkov/SInQ5A0GUoI/AAAAAAAAAZo/jzKXlNRea5Q/s800/dns%26bind.JPG" /></div><br /><br />Ну а всех Системных Администраторов хочу подравить с их профессиональным праздником ;-)<br /><br /><div style="text-align: center;"><img src="http://lh5.ggpht.com/jnvolkov/SInTfdK2nSI/AAAAAAAAAaU/FpZQvSVY1o8/s800/sysadmin_card.gif" /></div></span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-38779158875429284872008-07-02T11:30:00.004+03:002008-07-02T11:37:19.709+03:00Детективы кода<div style="text-align: justify;">Для читающих на украинском языке <a href="http://madf.livejournal.com/29292.html">рекомендую</a>. Интересный рассказ про Qt, Qt Cryptographic Architecture и шифрование.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-79624511113589353012008-07-01T13:09:00.007+03:002008-08-06T09:27:22.444+03:00Yandex Blogosphere Pulse - C++ Ведет Со Значительным Отрывом<div style="text-align: justify;">Яndex считает, что о C++ в блогах пишут гораздо чаще, чем о java, .NET, python, php, ruby. Интересно чем это обусловлено? Популярностью языка? его сложностью? количеством граблей? складом ума людей, которые отважились на нем писать программы? Как вы считаете?<br /><span class="fullpost"><br /><div style="text-align: center;"><br /><a href="http://blogs.yandex.ru/pulse/pulse.xml?query0=c%2B%2B&query1=python&query2=ruby&query3=php&query4=java&query5=.net&period=20070701-20080701"><img title="" alt="График" class="img" width="500" height="385" border="0" src="http://pulse.blogs.yandex.net/?query0=c%2B%2B&query1=python&query2=ruby&query3=php&query4=java&query5=.net&period=20070701-20080701&size=small"><br>Пульс блогосферы за год по запросам c++, python, ruby, php, java и .net</a><br /></div><br />Upd: как оказалось обусловлено Яndex'ом. Подробнее - см. в камментах ))<br /></span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-32880309953304830612008-06-25T10:10:00.006+03:002008-06-25T11:13:39.789+03:00C and C++ Cheat Sheets<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_zs4Dr34z3CM/SGH91Lnq7oI/AAAAAAAAARc/CUZBkD62cjY/s1600-h/cheatsheets-icon.gif"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_zs4Dr34z3CM/SGH91Lnq7oI/AAAAAAAAARc/CUZBkD62cjY/s320/cheatsheets-icon.gif" alt="" id="BLOGGER_PHOTO_ID_5215728933565820546" border="0" /></a><br /><div style="text-align: justify;"><br /><br />Нашел в сети несколько шпаргалок по C/C++: <a href="http://itp.nyu.edu/compform/c_cheat_sheet.pdf">1</a>, <a href="http://research.cs.queensu.ca/home/cisc124/2004f/C_Cheat.pdf">2</a>, <a href="http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf">3</a>, <a href="http://www.redspotstudios.com/CPlusPlusRefresher.pdf">4</a>, <a href="http://faculty.olin.edu/%7Ejcrisman/Teaching/SigSysWeb/Embedded/c_cheat_sheet.htm">5</a>, <a href="http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20%28ANSI%29%202.2.pdf">6</a>, <a href="http://www.i18nguy.com/unicode/c-unicode.html">Unicode-enabling Microsoft C/C++ Source Code</a>, <a href="http://en.wikibooks.org/wiki/C%2B%2B_Programming/Cheat_Sheet">Understanding C++/Quick Reference</a>, <a href="http://www.linuxsoftware.co.nz/cppcontainers.html">C++ Containers Cheat Sheet</a>.<br /><br />Хотя, надо признаться, что <a href="http://slash7.com/articles/2006/11/3/stuff-you-can-download">шпаргалки</a> от <a href="http://slash7.com/">Amy Hoy</a> по Rails выглядят значительно симпатичнее ))</div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-44858196897044792222008-06-23T12:06:00.003+03:002008-06-23T12:15:05.034+03:00back|track>> 3 released<div style="text-align: justify;">20 июня <a href="http://remote-exploit.blogspot.com">Max Mozer</a>, один из разработчиков linux дистрибутива <a href="http://remote-exploit.org/backtrack.html">Backtrack</a> <a href="http://remote-exploit.blogspot.com/2008/06/backtrack-3-released-today.html">сообщил</a> в своем блоге о выходе релиза 3-й версии этого penetration testing дистрибутива. Скачать его можно <a href="http://remote-exploit.org/backtrack_download.html">здесь</a>. Must Have всем, интересующимся вопросами взлома и защиты. Во всяком случае если не пригодится, то не помешает уж точно =).<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-48524377667911843112008-06-07T17:32:00.003+03:002008-06-07T18:50:09.355+03:005 программ, с которыми я работаю ежедневно<div style="text-align: justify;">via <a href="http://begemotov.net/creator/reviews/programmyi-kotoryie-ya-ispolzuyu/">Begemot</a> получил вышеназванную эстафету и задумался поскольку таких программ достаточно много и выбрать из них наиболее часто используемые не такая уж и простая задача. Дабы не повторяться лишний раз, то браузер и мессенджер остались <a href="http://deepencpp.blogspot.com/2008/02/5.html">теми же</a> )). Помимо них использую в порядке убывания частоты:<br /><ol><li><a href="http://notepad-plus.sourceforge.net/ru/site.htm">Notepad++</a> - простой, компактный, удобный и быстрый текстовый редактор, поддерживающий плагины, подсветку синтаксиса и множество других полезных и приятных мелочей, да в добавок еще и распространяемый под лицензией GNU GPL. Его я, в основном, использую для написания кода и правки текста.</li><li>Remote Desktop Client - использую для доступа к тестовому энвайронменту, который развернут на другой машине.</li><li><a href="http://www.tortoisecvs.org/">TortoiseCVS</a> - для чего используется, объяснять думаю не нужно. Хотя возможны вариации: <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, <a href="http://tortoisehg.sourceforge.net/">TortoiseHg</a> - иногда хочется посмотреть на исходники какого-нить проекта, а они либо в svn либо в mercurial.</li><li><a href="http://westbyte.com/dm/">Download Master</a> - менеджер закачек, с тех пор как я для себя его открыл он экономит мне множество времени и нервов (раньше часто приходилось кусать локти, когда закачка обрывалась по той или иной причине)</li><li><a href="http://www.adobe.com/products/acrobat/readstep2.html">Adobe Acrobat Reader</a> и <a href="http://windjview.sourceforge.net/">WinDjVu</a> - програрммы для чтения электронных книг и документов.</li></ol>Ну что ж, вот пожалуй и все :-). В свою очередь хотелось бы услышать подобный рассказ от:<br /><ul><li><a href="http://alenacpp.blogspot.com">Алёна С++</a><br /></li><li><a href="http://alexott-ru.blogspot.com">Alex Ott</a></li><li><a href="http://stump-workshop.blogspot.com"><span class="entry-author-name">Sergey Rozovik</span></a></li><li><a href="http://brightestbear.blogspot.com"><span class="entry-author-name">Сергей Кондриков</span></a></li><li><a href="http://mdf-i.blogspot.com"><span class="entry-author-name">Андрей Валяев</span></a></li><li><a href="http://sashkoblog.blogspot.com">Aleksandr Lysenko</a></li><li><a href="http://evgeny-lazin.blogspot.com">Lazin</a></li><li><a href="http://madf.livejournal.com/" rel="nofollow">madf</a></li><li><a href="http://ua-coder.blogspot.com">cencio</a></li><li><a href="http://www.codeblogz.ru"><span class="post-author vcard"><span class="fn">Сергей | codeBlogZ</span></span></a></li><li><a href="http://dask-blog.blogspot.com"><span class="post-author vcard"><span class="fn">Сергей Семёнов</span></span></a></li></ul></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-42755741934296137962008-06-03T14:47:00.005+03:002008-07-02T14:16:38.102+03:00Задачка на собеседование<div style="text-align: justify;">Многие у себя в блогах публикуют разные головоломные задачки, а тут как раз сегодня у сотрудника возникла ситуация над которой мы некоторое время помедитировали, пока не пришел <a href="http://www.liveinternet.ru/users/magician_nimble/blog/">nimblemag</a> и не обьяснил. Код, собственно, ниже. Код рабочий. Обьяснить почему работает.<br /><pre><code class="cpp"><br />#include &lt;cstdlib&gt;<br />#include &lt;iostream&gt;<br />using namespace std;<br />int main (int argc, char** argv){<br />cout&lt;&lt;argv[argc-1]&lt;&lt;endl<br /> &lt;&lt;argc[argv-1]&lt;&lt;endl;<br />return EXIT_SUCCESS;<br />}<br /></code></pre><br />Ответ ниже белым по белому (да, такой способ я у <a href="http://www.eldar.com/">Эльдара Мусаева</a> подсмотрел) чтоб посмотреть выделяем текст<br />===отсюда=== <br /><span style="color: rgb(255, 255, 255);">На самом деле все просто и вытекает из комутативности операции сложения:<br /><br />#include &lt;cstdlib&gt;<br />#include &lt;iostream&gt;<br />using namespace std;<br />int main (int argc, char** argv){<br /> <s>cout&lt;&lt;(*argv+(argc-1))&lt;&lt;endl&lt;&lt;((argc-1)+*argv)&lt;&lt;endl;</s><br /> cout&lt;&lt;*(argv+(argc-1))&lt;&lt;endl&lt;&lt;*((argc-1)+argv)&lt;&lt;endl; <br />return EXIT_SUCCESS;<br />}<br /></span><br />===досюда===<br />Отдельное Спасибо <a href=http://white-knight-is-alive.blogspot.com/>White Knight</a> за нахождение ошибки в коде ответа(см. комментарии).<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-32611275408275902112008-06-02T10:19:00.003+03:002008-06-02T12:23:02.148+03:00Разгребая закладки - Fighting the Lemmings<div style="text-align: justify;">Большинство новостей из мира Open Source я получаю через канал новостей сайта <a href="http://www.opennet.ru/opennews/">OpenNet.ru</a>. Обычно если новость меня чем-то заинтересовала, то она оседает у меня в закладках, а так как я интересуюсь очень многим, то можно представить во что превращается со временем панель закладок <a href="http://www.mozilla.com/en-US/firefox/">огненной лисы</a>. Посему периодически я их разгребаю, попутно просматривая. Так и в этот раз увидел у себя в закладках ссылку на статью <a href="http://lex.iki.rssi.ru/%7Eserj/docs/lemmings_ru/lemmings_ru.html">Fighting the Lemmings</a>, о разработке переносимого ПО. Мысли, в принципе, практически идентичны <a href="http://www.appinf.com/download/PortableSystems.pdf">этим</a>, что лишний раз подтверждает их правильность.<br />И еще одно - я чуть ранее <a href="http://deepencpp.blogspot.com/2008/04/big-buck-bunny-open-movie-project.html">писал</a> про мультик Big Buck Bunny, созданный при помощи <a href="http://www.blender.org/">Blender</a>, так вот, его полную версию уже можно <a href="http://www.bigbuckbunny.org/index.php/download/">скачать</a> или посмотреть на youtube<br /><br /><div style="text-align: center;"><object height="355" width="425"><param name="movie" value="http://www.youtube.com/v/YE7VzlLtp-4&amp;hl=en"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/YE7VzlLtp-4&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"></embed></object></div><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-18616081737373485332008-05-23T09:02:00.013+03:002008-05-23T11:44:55.613+03:00О пользе открытого кода в учебном процессе<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_zs4Dr34z3CM/SDZ4IKRlctI/AAAAAAAAANo/xcGOniHAS0k/s1600-h/avion.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_zs4Dr34z3CM/SDZ4IKRlctI/AAAAAAAAANo/xcGOniHAS0k/s320/avion.png" alt="" id="BLOGGER_PHOTO_ID_5203478501065585362" border="0" /></a><div style="text-align: justify;">Прежде чем высказаться по теме, хочу поделиться несколькими ссылками, которые могут пригодиться. <a href="http://photoshop.aws.sitepoint.com/">Первая</a> - Sitepoint раздают за бесплатно книгу "The Photoshop Anthology: 101 Web Design Tips, Tricks &amp; Techniques", загрузить можно в двух вариантах - print-ready (более высокого качества) и, очевидно, для чтения с монитора. Линк на загрузку присылают на мыло. <a href="http://think-async.blogspot.com/2008/05/boostasio-vs-asio.html">Вторая</a> - разработчик сетевой библиотеки для С++ Boost.Asio Chris Kohlhoff рассказывает об отличиях между Asio и Boost.Asio.<br /><br />Ну а теперь по теме. Хоть она и обсуждалась уже почти где только можно, я же хочу рассказать о случае, которые произошел не далее как вчера. Вчера жена делала диплом, основную часть которого составляет куча расчетов газотурбинного двигателя. Эти расчеты производятся при помощи набора консольных приложений, которые изначально писались еще во времена, когда программы хранились на перфокартах, а с приходом DOS были адаптированны под новую платформу (правда я предполагаю, что до этого они были адаптированны еще и под ЕС ЭВМ, а уж потом под DOS). Исходные данные находятся в файлах, выходные данные также записываются в файл. Казалось бы это хорошо для конвеерной обработки данных, однако формат выходных данных одного расчета не соответствует формату входных данных другого расчета.<br /><br />Но не это самое досадное. Изюминка данного программного комплекса состоит в том, что с некоторой вероятностью он не работает, и на одних и тех же входных данных может рапортовать как "domain error: Math error - sqrt()" так и "Program stopped". И если по поводу первой ошибки у меня еще и возникают некоторые догадки, то относительно второй я могу лишь руками развести. Руководство пользователя крайне краткое и подсказок не дает. А эти программы используются на протяжении всего времени обучения в университете для дипломного и курсового проектирования. "Эхх, был бы исходный код" - подумал я и махнул на это все рукой,- может завтра заработает. Дизасемблировать и выяснять алгоритм у меня не было ни времени не желания.<br /><br />Я понимаю, что код закрыт, скорее всего, потому как методика расчета в то время являлась гостайной, но мне почему-то кажеться, что идеальным был бы вариант, если бы такой комплекс был написан на одном из интерпретируемых языков, вроде питона, руби или перла и распространялся в исходных кодах (естественно, если методика до сих пор не засекречена).<br /><br />Вот такими соображениями я руководствуюсь, когда говорю, что открытое ПО в учебном процессе крайне полезно, поскольку позволяет по прошествии времени не утратить знания. Однако это уже отдельный разговор.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-41391628908346017292008-05-19T10:29:00.005+03:002008-05-19T12:09:01.266+03:00Designing and Building Portable Systems in C++. Part II - Solutions<div style="text-align: justify;">....продожение. <a href="http://deepencpp.blogspot.com/2008/05/designing-and-building-portable-systems.html">Начало</a>.<br /><br />Как нетрудно было догадаться из предыдущего поста, пожалуй единственным подходящим решением проблем, возникающих при разработке портабельных систем, является абстракция и обобщенное программирование - сильные стороны C++. Описание техник можно поискать в серии книг C++ In Depth, книгах Мейерса и прочих гуру, я же приведу некоторые мысли относительно моментов, на которые следует обратить внимание, если вы используете для разработки сторонние библиотеки/компоненты.<br /><br />Наличие довольно большого колличества библиотек для решения самых разнообразных задач, компилируемых под несколько основных платформ, существенно облегчает работу программиста. Однако все же существует несколько вопросов, которые возникают при использовании сторонней библиотеки при разработке продукта, и практически все они относятся к качеству кода...<br /><span class=fullpost><br />Первым моментом, на который стоит обратить внимание, пожалуй, будет стабильность кодовой базы. Согласитесь, не совсем приятно будет, когда при выпуске новой версии программного продукта вы решили заодно проапгрейдить библиотеки и обнаружили, что разработчики одной из них заодно с пофикшеными багами поменяли API и билд сваливается.<br /><br />Вторым - то насколько этот компонент подвергается тестированию, что повышает вероятность отлова багов до выпуска релизов, а вместе с этим и вероятность обойтись без лишней головной боли.<br /><br />Третьим - наличие поддержки и ее вменяемости. Да я понимаю, что у вас комманда "звезд", которые умеют читать код по диагонали и нюхом чуять баги. Но они приходят и уходят и, вполне вероятно, что поддержкой все же придется воспользоваться.<br /><br />Четвертым - <span name="itembody" class="text">maintainable ли код? Насколько легко будет споровождать его </span><span name="itembody" class="text">(если он открыт)</span><span name="itembody" class="text"> в случае, если разработчики "забьют" на компонент? Насколько легко сопровождать код, написанный с использованием этой библиотеки? (так как в большинстве случаев библиотека и язык, на котором она написана, диктуют стиль программирования). Насколько легко вы воспринимаете идиомы, используемые при написании такого кода?<br /><br />Пятым фактором является портируемость - то, что вынесено в заголовок данного поста, поэтому по умолчанию подразумевается портируемость библиотеки. Однако тут нужно учесть ряд моментов, как-то: есть ли зависимости от третьих библиотек? насколько все сказанное выше относится к этим библиотекам? Понятно, что в ряде случаев такую оценку провести попросту невозможно, поэтому зачастую просто полагаются на разработчиков и если они говорят, что "portable", - значит </span><span name="itembody" class="text">"portable" и все тут.<br /><br />Шестым фактором является наличие возможности локализации. Можно ли использовать библиотеку/компонент в другой временной/географической зоне? нужны ли изменения?<br /><br />Вот такие вот пироги. Все сказанное, конечно, так - абстрактные мысли, не подкрепленные личным опытом, поэтому хотелось бы услышать мнения людей, которым действительно приходилось сталкиваться с подобными проблемами, может чего упустил? написал неправильно? Из тех кого я читаю, на ум приходит пожалуй только </span><a href="http://alexott-ru.blogspot.com/">Alex Ott</a>.<br /><br />Велкам в камменты, как говориться ;-).<br /></span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-47614871121379395702008-05-15T16:42:00.001+03:002008-05-15T16:45:31.548+03:00Designing and Building Portable Systems in C++. Part I - Problems<div style="text-align: justify;">В <a href="http://deepencpp.blogspot.com/2008/04/yet-another-cpp-coding-styleguide-and.html">прошлом посте</a> я запостил <a href="http://www.appinf.com/download/PortableSystems.pdf">ссылку</a> на документ, опсывающий некоторые тонкости, разработки портируемых программ на C++. Наконец дошли руки более подробно прочитать этот документ и я с удивлением обнаружил, что на <a href="http://wl.ua/">прошлой работе</a> с некоторыми описываемыми ситуациями мне приходилось сталкиваться. Несмотря на то, что сам язык был спроектирован как платформонезависимый, создание кроссплатформенного ПО не является таким простым, как хотелось бы. Однако обо всем по порядку... <span class="fullpost"><br /><br />Одной из основных проблем, при написании портируемого кода на С++, являются отличия компиляторов. Несмотря на то, что сам язык описан довольно детально в стандарте, трактовки самого стандарта в станах компиляторостроителей иногда различаются. Кроме того, C++ часто ругают (вполне заслуженно) за сложность, особенно когда дело касается шаблонов. Эта сложность по определению ну никак не может облегчить жизнь как разработчикам компиляторов, так и "обычным" программистам, которые эти компиляторы используют.<br /><br />Однако не только сложность языка источник проблем. Стандарт - один из этих источников. Описывая поведение большинства (но не всех) элементов языка, он, вместе с тем, оставляет некоторые из них <span style="font-style: italic;">implementation-defined, unspecified</span> или <span style="font-style: italic;">undefined</span>. В тексте документа приводится такой пример:<br /><pre><code class="cpp">void f(int a, int b, int c)<br />{<br /> cout &lt;&lt; "a = " &lt;&lt; a &lt;&lt; ", b = " &lt;&lt; b &lt;&lt; ", c = " &lt;&lt; c &lt;&lt; endl;<br />}<br /><br />int main(int argc, char** argv)<br />{<br /> int i = 0;<br /> f(i++, i++, i++);<br /> return 0;<br />}</code></pre><br />И оговаривается, что на разных платформах результат выполнения программы будет разным<br /><blockquote><br />For example, on Mac OS X, using GCC 3.3, the program fragment yields the following output<br />a = 0, b = 1, c = 2<br /><br />This is what one would intuitively expect, assuming left-to-right argument evaluation. Compiled with HP ANSI C++ A.03.57 on HP-UX 11.11, the result is the same. However,when compiled with Compaq C++ 6.5 on HP Tru64 5.1, the program yields:<br />a = 0, b = 0, c = 0<br /><br />which may be surprising<br /></blockquote><br />Что характерно, - оба результата верны, потому такие моменты следует учитывать и не полагаться на ваш любимый компилятор, поскольку даже следующая его версия может иметь отличный behaviour.<br /><br />"Расширения" языка, которыми зачастую грешат разработчики из обоих лагерей (MS и <a href="http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/index.html#toc_C_002b_002b-Extensions">GNU</a>), тоже мешают писать портируемый код. Особенно "грешат" на майкрософтовский компилер, у которого есть опция для отключения подобного рода расширений. Заодно автоматически у вас пропадает возможность использовать Platform SDK, так как его заголовочные файлы используют эти расширения. Меня самого когда-то возмущала необходимость использовать тип BOOL, вместо bool (сейчас уже правда не возмущает) и я до сих пор иногда забываю ставить новую строчку в конце файла, с раздражением наблюдая ворнинги компилятора. <br /><br />Типы. На разных платформах фундаментальные типы могут иметь разный размер. Поэтому если в вашей программе необходимо 32 битное беззнаковое целое, то проще всего, наверное, определить свой тип в заголовочном файле сразу, чем потом по всему коду выискивать и менять unsigned на myint32_t. В стандарте языка С ISO/IEC 988:1999 к стати есть типы int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, определенные в stdint.h, однако это тот случай, где С++ не обратно совместим с С. Может в следующем стандарте поправят. Там вроде как намечается соласовать стандарты. Про типы с плавающей запятой вообще отдельная сказка, ее лучше почитать в оригинале.<br /><br />Порядок байт. Определяет как размещаются байты в памяти - старший->младший или младший->старший. Это потенциальная проблема, если есть необходимость производить обмент бинарными данными между системами с различным порядком байт.<br /><br />Выравнивание данных. На многих архитектурах данные обычно выравниваются на границу слова, что иногда может приводить к проблемам. В частности, приводится следующий пример:<br /><pre><code class="cpp">struct Header<br />{<br /> UInt32 size;<br /> UInt32 checksum;<br />};<br />...<br />void handleData(void* pData)<br />{<br /> Header* pHeader = reinterpret_cast&lt;Header*&gt;(pData);<br /> for (int i = 0; i &lt; pHeader-&gt;size; ++i)<br /> ...<br />}</code></pre><br />и говорится, что если адрес на который указывает pData не выравнен на границу 4х байт, то на другой архитектуре это может привести к ошибке времени выполнения.<br /><br />Там где дело касается API операционных систем дела обстоят еще хуже - совсем недавно в одном из блогов наткнулся на замечания по поводу портирования софта linux -> windows (блог к стати мне понравился, жаль ссылку потерял). Для меня, к стати, оказалась сюрпризом информация о том, что Windows NT поддерживала POSIX, а с приходом WindowsXP ее убрали. <br /><br />В общем, проблем вполне достаточно. В следующей части напишу про некоторые решения, призванные прийти на помощь в борьбе за чистое небо над головой программиста... Тфу! ну в общем вы поняли ))</span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-14078184063008978492008-05-13T16:18:00.009+03:002008-05-13T17:57:03.428+03:00Баги - страшные и ужастные<div style="text-align: justify;">Рядовой программист при написании программы зачастую не особо задумывается об ошибках, которые волей-неволей, но закрадываются в код. Эти ошибки зачастую совершенно неочевидны и посему приживаются довольно надолго, как например <a href="http://www.vnode.ch/fixing_seekdir">этот</a> 25 летний баг, <a href="http://www.osnews.com/story/19731">доставшийся всем BSD системам по наследству от 4.2 BSD</a>.<br /><br />Еще некоторое время назад я совершенно не понимал зачем нужны все эти обновления, хотфиксы, патчи и пр., если в большинстве случаев ПО работает корректно. Однако информация (особенно ценная), будучи одним из самых востребованных товаров, зачастую страдает от недостатка внимания к ее защите. Вы думаете, что ваш компьютер полностью защищен? Тогда взгляните хотя бы <a href="http://securitytracker.com/archives/underlyingos/805.html">сюда</a>. С тем обилием нелицензионного софта на просторах нашей Родины велик риск поставить себе ОС или софт с уже "предустановленными" программами - троянами, вирусами, различными руткитами )), которые тут же примутся усердно работать, собирая информацию о вас и вашей деятельности и отсылая ее своим "хозяевам". Или же вы станете частью какого-нить <a href="http://ru.wikipedia.org/wiki/%D0%91%D0%BE%D1%82%D0%BD%D0%B5%D1%82">ботнета</a>. Перспектив масса, но ни одна из них особо не радует. Выход остается один - выдернуть сетевой кабель из системного блока, так как ни проприетарное ни открытое ПО не защищено от уязвимостей. Зачастую слышно, что для полноценной работы в Linux нужен инет, ну никак без него.... Для других ОС ситуация обстоит так же - все обновления ПО качаются из интернета.<br /><br />Ну а если уязвима например библиотека? <a href="http://www.coresecurity.com/?action=item&amp;id=2260">которая используется в сотнях государственных учереждений, университетов, частных и коммерческих организациях национального и международного масштаба</a>? А если где-то до сих пор работает софт, саппорт для которого discontinued, и используется уязвимая версия? А если этот софт управляет вашей АТС или работает в сети сотовой связи и вы не сможете однажды набрать "03"? или управляет АЭС, расположенной неподалеку от вас? или...<br /><br />В общем к чему я веду -"семь раз проверь, один раз закоммить". (C) Народная программистcкая мудрость.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-1156340654914479062008-04-24T17:08:00.003+03:002008-04-24T17:29:14.528+03:00Yet Another Cpp Coding StyleGuide and even more...<div style="text-align: justify;">Набрел на сайте <a href="http://pocoproject.org/poco/documentation/">PoCo</a> на два интересных документа: <a href="http://www.appinf.com/download/PortableSystems.pdf">Designing and Building Portable Systems in C++</a> и <a href="http://www.appinf.com/download/CppCodingStyleGuide.pdf">C++ Coding Style Guide</a>. В конце первого документа нашлась еще одна очень интересная ссылка на <a href="http://www.trumphurst.com/cpplibs1.html">перечень С++ библиотек</a> (как свободных так и закрытых). В PoCo, к стати, <a href="http://pocoproject.org/poco/blog/?p=131">недавно добавили</a> <a href="http://poco.svn.sourceforge.net/viewvc/poco/poco/branches/poco-1.3.3/Data/MySQL/">поддержку MySQL</a>.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-78198556796810216512008-04-11T11:41:00.006+03:002008-04-16T09:51:09.473+03:00Big Buck Bunny Open Movie Project<div style="text-align: justify;">После завершения проекта <a href="http://orange.blender.org/">Orange</a>, результатом которого стало создание анимационного фильма <a href="http://orange.blender.org/download">Elephants Dream</a> с открытым "исходным кодом", <a href="http://www.blender.org/blenderorg/blender-foundation/">Blender Foundation</a> и <a href="http://www.blender.org/community/user-community/">Blender Community</a> начали новый проект <a href="http://peach.blender.org/">Peach</a>, целью которого является создание небольшого анимационного фильма.<br />Как и в прошлый раз, небольшая комманда лучших 3D аниматоров из blender community собралась в Амстердаме для работы над проектом, который длился с Октября 2007 по Апрель 2008. Как и в прошлый раз для работы с изображением и анимацией использовалось открытое ПО (blender, gimp, может что еще... ). Исключением являлась работа со звуком, для которой <a href="http://peach.blender.org/index.php/dolby-mastering/">использовались технологии Dolby Laboratories</a> (по крайней мере для выпуска фильма на кинопленке). В первую неделю комманда занималась preproduction work, с этой целью они организовали Peach Workshop для проработки деталей сценария, по окончании которого был разработан development roadmap и шестимесячный план:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://peach.blender.org/wp-content/uploads/planning.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://peach.blender.org/wp-content/uploads/planning.png" alt="" border="0" /></a><br />По ходу дела, <span class="fullpost">за неделю до старта проекта у него появились спонсоры: <a href="http://www.digitalepioniers.nl/Peach">Digitale Pioniers</a>, <a href="http://www.maqina.nl/">Maqina Computersystems</a> выступили в качастве спонсоров железа, sound студия <a href="http://www.wavemage.com/" target="_blank">wavemage</a>. Чуть позже к <a href="http://peach.blender.org/index.php/page/5/">спонсорам присоединилась Sun</a>, чей грид <a href="http://www.network.com/">network.com</a> использовался для рендеринга. Акция dvd preordering на момент начала проекта принесла 1144 заказа, среди которых 947 были предоплачены.<br /><br /><a href="http://peach.blender.org/index.php/meanwhile-there-are-lots-of-things-happening-in-the-studio/">И закипела работа :-D</a><br /><div style="text-align: center;"><br /><object height="355" width="425"><param name="movie" value="http://www.youtube.com/v/R209z8kmY0Y"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/R209z8kmY0Y" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"></embed></object><br /><br />Вот еще одно видео, где показано, как персонажи "оживлялись"<br /><br /><object height="355" width="425"><param name="movie" value="http://www.youtube.com/v/-WrTxP_ETzQ"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/-WrTxP_ETzQ" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"></embed></object><br /></div><br />Интересно было почитать, как решилась <a href="http://peach.blender.org/index.php/mesh-deform-modifier/">проблема анимаации</a> "толстых" персонажей.<br /><br />Отдельно стоит сказать о железе и софте, на ктором работали аниматоры. Железо - это пять <a href="http://www.maqina.nl/product/viewproduct.asp?AreaID=-364187415&amp;ProductFormID=1078838818">Maqina C6850DC 3D Blender Workstation’s</a> <em>(Dual Core 3ghz, 4gig ram, GeForce 8800 GTS), </em>две Maqina X5130DC Workstation’s<em> (Quad Core 2ghz, 4gig ram, NVidia Quadro FX 1700), </em>и Maqina X5345QC Workstation<em> (8 Core 2.33ghz, 8gig ram, NVidia Quadro FX 1700).</em> Большинство рабочих мест укомплектовано двумя мониторами (оно и не удивительно)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_zs4Dr34z3CM/R_83rzAz7xI/AAAAAAAAAMo/yYzFsGiGvYY/s1600-h/treemaker_screenshot.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_zs4Dr34z3CM/R_83rzAz7xI/AAAAAAAAAMo/yYzFsGiGvYY/s320/treemaker_screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5187926521321615122" border="0" /></a><br />На все системах установлена 64bit Ubuntu Gutsy Desktop. Каждый пользователь может войти под своим аккаунтом на любой машине - настройки хранятся на сервере. Все это добро соединено в гигабитную сеть. Все используют версию blender из svn, в которой , видимо, присутствуют используемые аниматорами новшества. Что характерно, они у себя отмечают, что Peach это видимо первый серьезный проект использующий blender, скомпилированный как 64-битное приложение (64, так как им необходимо большое колличество оперативки для рендеринга, однако меня несколько смутило <a href="http://peach.blender.org/index.php/maqina-workstations-benchmarks/">упоминание, что на 32х битах можно адресовать 2 Гб</a>).<br /><br />В конце-концов, фильм получил название <a href="http://peach.blender.org/index.php/project-peach-is-pretty-proud-to-present/">Big Buck Bunny</a>:<br /><q>A little explanation about the title Big Buck Bunny:<br /><br />‘Big’ because the main character isn’t small.<br /><br />‘Buck’ is the term for a male rabbit. It’s also the name of a movie character played by an actor we used as a reference.<br /><br />‘Bunny’ because…. ah, I’m not gonna explain that.</q><br />Как уже упоминалось выше, для рендеринга, <a href="http://peach.blender.org/index.php/our-renderfarm-and-how-it-works/">использовался</a> грид SUN, которая предоставила им 50000 часов машинного времени. Разработчики упоминают, что данная ферма не использовалась ранее для рендеринга подобного масштаба, поэтому этот процесс является хорошим стресс-тестом для их инфраструктуры. Как показала практика, тест оказался эффективным и грид (ну по крайней мере один его узел) <a href="http://peach.blender.org/index.php/woosh-the-deadline-passed-or-how-everything-that-can-go-wrong-does/">упал</a>. Видимо после падения, у них возникли проблемы со шрифтами, и комманда решила, что быстрее будет отрендерить оставшиеся 2000+ фреймов на собственных машинах. Однако снова возникают проблемы разного рода (как всегда перед самим финишем). В частности, трава отрендеренная на ферме и на машинах аниматоров отличалась, причем они пришли к выводу, что виной всему реализация qsort() на Solaris, отличная от реализации в libc. В общем чтение <a href="http://peach.blender.org/index.php/woosh-the-deadline-passed-or-how-everything-that-can-go-wrong-does/">этого поста</a>, заставило меня не раз улыбнуться )). <br /><br />Вотъ, а вчера <a href="http://peach.blender.org/index.php/premiere-big-buck-bunny-today/">было обьявлено </a>о премьере. Трейлер же можно посмотреть ниже ;-D.<br /><div style="text-align: center;"><br /><object type="application/x-shockwave-flash" data="http://www.vimeo.com/moogaloop.swf?clip_id=798022&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=" height="225" width="400"> <param name="quality" value="best"> <param name="allowfullscreen" value="true"> <param name="scale" value="showAll"> <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=798022&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color="></object><br /><a href="http://www.vimeo.com/798022/l:embed_798022">Big Buck Bunny - Official Trailer</a> from <a href="http://www.vimeo.com/user399249/l:embed_798022">Andy Goralczyk</a> on <a href="http://vimeo.com/l:embed_798022">Vimeo</a>.<br /></div><br /></span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-73673217529109354572008-03-17T12:05:00.003+02:002008-03-17T12:17:18.118+02:00C and C++ Secure Coding Standard<div style="text-align: justify;">По ссылке с <a href="http://www.opennet.ru/opennews/art.shtml?num=14751">OpenNet</a> набрел на готовящийся к выходу неформальный стандарт по безопасному кодированию на <a href="https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard">С</a> и <a href="https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637">С++</a>. Довольно приличное колличество информации собрано в одном месте, что, естественно, радует. Стоит прочтения, единственное, что меня раздражало - это жутко неудобная система навигации по разделам. Хотелось бы заполучить это все в plain html или в pdf. Может когда вычитают, сделают. Будем надеяться. В общем рекомендую всем, кому приходится писать на этих языках (впрочем некоторые правила применимы и не только к С с С++). Надо добавить линки в <a href="http://deepencpp.blogspot.com/2007/09/c-c09-useful-resources.html">C &amp; C++ useful resources</a>.</div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-46009799300697543042008-03-14T10:10:00.003+02:002008-03-14T16:45:33.177+02:00Netflix Prize. Just give it a shot...<div style="text-align: justify;">Как это ни печально, но синоптики с погодой в Харькове сегодня не ошиблись. С самого утра дождь. То то я так долго просыпался. Однако этот пост будет не об этом.<br /><br />Некоторое время назад блуждая по Википедии в поисках информации по data mining наткнулся на <a href="http://ru.wikipedia.org/wiki/Netflix_Prize">статью</a> (эта же статья на <a href="http://en.wikipedia.org/wiki/Netflix_Prize">английском</a>) о конкурсе, организованном компанией <a href="http://www.netflix.com/">Netflix</a> - <a href="http://www.netflixprize.com/">Netflix Prize</a>. А тут недавно и в блогах <a href="http://www.volinrok.com/2008/03/05/million-za-algoritm/">пробежал пост</a> об этом конкурсе. Решил более подробно ознакомиться. Netflix занимается арендой DVD через интернет. Ну и как многие e-commerce компании у них есть адвизори, т.е. список товаров (или услуг), которые они рекомендуют клиенту, на основании уже совершенных заказов. Для повышения вероятности того, что рекомендуемый фильм понравится клиенту, Netflix был разработан основанный на линейной регрессии алгоритм Cinematch, который дает СКО на тестовом множестве даннах 0,9525. В нетфликсе почухали репу и решили учредить конкурс - тот кто добьется 10% улучшения алгоритма получит 1 млн американских денег. Кроме того, также есть приз "за прогресс" - 50000 денег за улучшение на 1% по сравнению с предыдущим лауреатом конкурса.<br /><br />Все участники (и вообще все желающие) могут скачать следующие 4 файла:<br /><br /><ul><li>Тренировочные данные (training data set) содержат более 100 млн оценок, которые более 480 тыс. клиентов поставили 17.770 фильмам. Каждая оценка представляет собой квадруплет <номер клиента, номер фильма, дата оценки, оценка>. Номера клиентов и фильмов — целые числа, оценка — целое число от 1 до 5 (низшая оценка 1, высшая 5).Таким образом, в среднем каждый клиент поставил около 200 оценок, а каждый фильм получил около 5000. Однако количество оценок сильно варьирует: так, некоторые фильмы получили всего 3 оценки, а один клиент оценил более 17 тыс. фильмов.</li></ul><ul><li>Квалификационные данные (qualifying data set) содержат 2,8 млн триплетов <пользователь, фильм, дата оценки>. Оценки известны только жюри и будут опубликованы по окончании соревнования.</li></ul><ul><li>Названия и годы выхода в прокат всех 17.770 фильмов.</li></ul><ul><li>Фрагмент тренировочной базы данных, распределённый так же, как квалификационные данные. Этот фрагмент может использоваться, например, для оценки алгоритмов до посылки их на сайт.</li></ul><br />Для того чтобы участник не мог использовать СКО для угадывания оценок, квалификационный набор данных разделён надвое. Участникам сообщаются результаты одной из половинок, называемой quiz set, но для получения приза (любого) учитываются результаты другой половинки — test set. Участники не знают, какая из записей к какой половинке относятся.<br /><br />В общем, судя по <a href="http://www.netflixprize.com/leaderboard">LeaderBoard</a>, прогресс есть и довольно приличный. Однако, как замечают некоторые разработчики, в последнее время СКО меняется буквально на сотые, тысячные доли. Трудновато, как оказалось, построить модель человека. Однако <a href="http://www.google.com.ua/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjustaguyinagarage.blogspot.com%2F&amp;ei=Do_aR9LPLJ3o0ATnjuynCg&amp;usg=AFQjCNE5CrWk-EfMRrOt-6m3YtuI4tYNTg&amp;sig2=15m5I1xb5ljSmyjcYZyk4A">Хлопец в Гараже</a>, являясь психологом, быстренько догнал и перегнал многих участников, и теперь входит в первую 10-ку команд. Он дескать взял да предположил, что решение может лежать на стыке математики и психологии...<br /><br />Ну шо народ? Го Netflix?<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-41707413650239887072008-02-29T09:10:00.002+02:002008-02-29T10:34:15.449+02:005 инструментов<div style="text-align: justify;">Принимаю эстафету "5 инструментов без которых я не могу работать продуктивно" от <a href="http://alenacpp.blogspot.com/">Алены С++</a>. Но сначала маленькое предисловие: поскольку речь идет именно о продуктивности, то я не буду описывать все те тулзы, с которыми мне приходится иметь дело при разработке ПО. Постараюсь написать лишь о тех, которые позволяют мне быстро и в сжатые сроки решать какие-либо повседневные задачи.<br /><br />Итак эти самые 5 инструментов:<br /><ol><li><a href="http://www.mozilla.com/firefox/">Firefox</a> - хороший браузер, к нему написано множество дополнений, которые облегчают работу (<a href="https://addons.mozilla.org/ru/firefox/addon/427">ScrapBook</a>, <a href="https://addons.mozilla.org/ru/firefox/addon/433">Flashblock</a>, <a href="https://addons.mozilla.org/ru/firefox/addon/2410">Foxmarks</a>, <a href="http://minimizetotray.mozdev.org/">MinimizeToTray</a>, <a href="http://imglikeopera.mozdev.org/">ImgLikeOpera</a>).<br /></li><li><a href="http://www.pidgin.im/">Pidgin</a> - multi-protocol Instant Messaging client, поддерживающий AIM, Bonjour, Gadu-Gadu, Google Talk, Groupwise, ICQ, IRC, MSN, MySpaceIM, QQ, SILC, SIMPLE, Sametime, XMPP, Yahoo!, Zephyr. Простой, есть версии как для Linux так и для Windows.<br /></li><li><a href="http://www.farmanager.com/index.php?l=ru">Far Manager</a> / <a href="http://yakuake.uv.ro/">Yakuake</a> + <a href="http://www.gnu.org/software/bash/">bash</a> + <a href="http://www.ibiblio.org/mc/">mc</a> - файловые менеджеры, консоль, командный интепретатор соответственно под Windows и Linux, так как обеими этими системами я пользуюсь в равной мере.<br /></li><li><a href="http://www.google.com/a/help/intl/en/index.html">Gmail</a> - почта, прельщает довольно удобный веб-интерфейс, хороший спам-фильтр.</li><li><a href="http://www.google.com/">Google</a> - всем известная поисковая система, использую для поиска различной информации.</li></ol>Вот кажись все.<br />Передаю эстафету<br /><ul><li><a href="http://www.blogger.com/profile/04382725998308329157" rel="nofollow">_winnie</a></li><li><a href="http://sashkoblog.blogspot.com/">Aleksandr Lysenko</a></li><li><a href="http://cyberzx.blogspot.com/">CyberZX</a></li><li><a href="http://tolyanych.blogspot.com/">Роману Коновалову</a></li><li><a href="http://stump-workshop.blogspot.com">Sergey Rozovik</a><br /></li></ul></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-28363624462629874072008-02-26T12:06:00.002+02:002008-02-27T08:47:01.214+02:00Суждено ли С++ стать платформой?<div style="text-align: justify;">В виду того, что в последнее время все больше и больше появляется самых различных кроссплатформенных <a href="http://deepencpp.blogspot.com/2007/09/c-c09-useful-resources.html">библиотек для С++</a>, у меня все чаще и чаще возникает мысля о том, что и С++ может в конечном итоге стать платформой, как это произошло с Java. Однако все же остаются некоторые сомнения. Ведь насколько я понимаю наличие хороших библиотек еще не все, что нужно для того, чтобы считаться платформой. Одному мне так кажеться?<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-70987903213703752162008-01-19T22:25:00.000+02:002008-01-19T22:43:55.504+02:00Линус критикует C++<div style="text-align: justify;">Via <a href="http://aruslan.livejournal.com/">aruslan </a>узнал об <a href="http://article.gmane.org/gmane.comp.version-control.git/57918">ответе</a> Линуса на вопрос Dmitry Kakurin почему Git написан на С а не на С++. Больше всего понравились цитаты<br /><blockquote>Quite frankly, even if<br />the choice of C were to do *nothing* but keep the C++ programmers out,<br />that in itself would be a huge reason to use C.<br /></blockquote>Что и говорить, тут трудно не согласиться, поскольку многие программеры на С++ считают себя сильно "мегакрутыми" (коими в действительности не являются) для того чтобы снизойти до чистого С. Это действительно хороший способ :-)<br /><blockquote>C++ leads to really really bad design choices. You invariably start using<br />the "nice" library features of the language like STL and Boost and other<br />total and utter crap, that may "help" you program, but causes:<br /><br />- infinite amounts of pain when they don't work (and anybody who tells me<br />that STL and especially Boost are stable and portable is just so full<br />of BS that it's not even funny)<br /><br />- inefficient abstracted programming models where two years down the road<br />you notice that some abstraction wasn't very efficient, but now all<br />your code depends on all the nice object models around it, and you<br />cannot fix it without rewriting your app.<br /><br />In other words, the only way to do good, efficient, and system-level and<br />portable C++ ends up to limit yourself to all the things that are<br />basically available in C. And limiting your project to C means that people<br />don't screw that up, and also means that you get a lot of programmers that<br />do actually understand low-level issues and don't screw things up with any<br />idiotic "object model" crap.<br /></blockquote>Подобные мысли и меня когда-то <a href="http://deepencpp.blogspot.com/2007/07/c-vs-c.html">одолевали</a>. Ну а согласно <a href="http://www.catb.org/%7Eesr/writings/cathedral-bazaar/">The Cathedral and the Bazaar</a> успех софтины зависит от других факторов. <a href="http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918">Ветвь дискуссии</a> по вопросу Дмитрия. Занятное чтиво.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-16877238624163157212008-01-13T19:17:00.000+02:002008-01-13T19:24:13.317+02:00Сертификация на brainbench<div style="text-align: justify;">Только что завершил тестирование на брейнбенче. Некоторые вопросы были достаточно простыми, некоторые - посложнее. Теперь на сайдбаре этого блога висит вот такая вот картинка со ссылкой на страницу результата.<br /><br /><div style="text-align: center;"><a href="http://www.brainbench.com/xml/bb/transcript/public/viewtranscript.xml?pid=7322124"><img alt="C++ Master Brainbench Certificate" src="http://www.brainbench.com/images/certlogo/color/mastercert/cppprogrammer.gif" /></a><br /></div><br />Довольный, хоть многие и говорят, что brainbench - не показатель.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-29912686262376291432008-01-10T13:02:00.000+02:002008-02-06T14:12:29.012+02:00А возможно и не const...<div style="text-align: justify;">Прочитав недавно в блоге <a href="http://alenacpp.blogspot.com/">Алёны С++</a> статью <a href="http://alenacpp.blogspot.com/2008/01/const.html">Возможно, самый важный const</a>, губоко задумался нельзя ли все-таки как нибудь обойти запрет на следующее<br /><pre><code class="cpp"><br />string&amp;s = string("abc");<br />int&amp;i = 1;<br /></code></pre><br />И совершенно неожиданно вспомнил, что когда-то давным-давно на далеком-далеком форуме (чет меня опять не туда понесло ;-)) прочитал о том, как тимлид учил зеленых программеров: "<span style="font-style: italic;">тыкаем в любое место <span style="font-weight: bold;">throw 1</span>; если программа летит - бьем дубиной по голове</span>"<br /><br />Это я к тому что при генерации исключения происходит <span class="fullpost">его копирование, поэтому обработчик имеет копию исходного исключения. Хотя на реализацию не накладывается ограничений и исключение может быть скопировано несколько раз до того, как будет перехвачено. Т.е. исключение, которое не может быть скопировано - не может быть и перехвачено.<br /><pre><code class="cpp"><br />try {<br />throw 1;<br />}<br />catch(int&amp;i){<br />//можем менять i<br />}<br />catch(...){}<br /></code></pre><br /><br />Проверяем<br /><pre><code class="cpp"><br />try {<br /> try {<br /> throw 1;<br /> }<br /> catch(int&amp;i){<br /> cout&lt;&lt;"int&amp; "&lt;&lt;i&lt;&lt;endl;<br /> i=2;<br /> throw;<br /> }<br /> catch(...){}<br />}<br />catch(int&amp;i){<br /> cout&lt;&lt;"int&amp; "&lt;&lt;i&lt;&lt;endl;<br />}<br />catch(...){}<br /></code></pre><br /><br />Факт повторной генерации исключения отмечается отсутствием операнда у <i><b>throw</b></i>. Причем повторно сгенерированное исключение является исходным исключением (копией или нет - думаю зависит от реализации, по крайней мере в Стандарте ничего не нашел по этому поводу. Может плохо искал? Пните меня в комментах, если найдете). Хотя по идее оно должно копироваться, так как это все же генерация, хоть и повторная. Однако в реализации gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21), которой я на данный момент пользуюсь, в момент повторной генерации эксепшн не копируется.<br /><pre><code class="cpp"><br /><br />#include &lt;iostream&gt;<br />#include &lt;cstdlib&gt;<br /><br />//класс исключения<br />class ex {<br />public:<br />ex(const ex&amp;){cout&lt;&lt;"Copy ctor"&lt;&lt;endl;};<br />ex(){cout&lt;&lt;"ctor"&lt;&lt;endl;};<br />~ex(){cout&lt;&lt;"dtor"&lt;&lt;endl;}<br />};<br />//<br />int main(int argc, char *argv[])<br />{<br />try {<br /> try {<br /> throw ex();<br /> }<br /> catch(ex&amp;){cout&lt;&lt;"Rethrow"&lt;&lt;endl;throw;}<br /> catch(...){throw;}<br />}<br />catch(ex&amp;){}<br />catch(...){}<br />return EXIT_SUCCESS;<br />}<br /></code></pre><br />Причем, что интересно, на отсутствие <b>copy constructor</b> ругается, если его <b>private</b> или <b>explicit</b> сделать, а в процессе распространения исключения и при генерации его не использует.<br /><br /><b>Update</b><br />В результате пинков открыл таки 15.1 пункт Стандарта и почитал его. И как правильно заметили в комментариях, время жизни ссылки все равно ограничено обработчиком и не превышает время жизни временной переменной, а время жизни временной переменной, в свою очередь, определяется другим механизмом, а не наличием ссылок на нее.<br /><br /><b>Update2</b><br />15.1.6<br />A <i>throw-expression</i> with no operand rethrows the exception beeing handled. The exception is reactivated with existing temporary; no new temporary exception object is created.<br /><br />Так что во время повторной генерации исключения копирования не происходит.<br /><br /></span><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-62720280558743609372008-01-09T11:34:00.000+02:002008-01-09T11:50:09.272+02:00gcc. Полное руководство<div style="text-align: justify;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_zs4Dr34z3CM/R4SVVekcIbI/AAAAAAAAAI4/pW0rYFGTJFo/s1600-h/gcc.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_zs4Dr34z3CM/R4SVVekcIbI/AAAAAAAAAI4/pW0rYFGTJFo/s400/gcc.jpg" alt="" id="BLOGGER_PHOTO_ID_5153408069834383794" border="0" /></a>Только что скачал книгу Артура Гриффитса "GCC: The Complete Reference" на русском. Однозначно must have для каждого программера под linux , который ценит свое время. Содержание вообще привело меня в неописуемый восторг - мало того что присутствуют разделы по конфигурированию, установке и тестировании компилятора, но также рассказано о сборке кросс-компилятора (чего мне пока с последними версиями gcc проделать на удалось - под ARM собираться не хочет, binutils собираются, bootstrap compiler тоже, а сборка libc - сваливается... или это сборка полноценного компилера? не помню уже... после десятка безуспешных попыток я это дело отложил на неопределенное время. Может книжка эта поможет?), расширениях GNU для С и С++, Objective-C, Java, Fortran и Ada, GDB, смешивание языков, сборка компилятора для ембедед систем тоже не обделены вниманием.<br />В общем и целом - 600 страниц ОЧЕНЬ ПОЛЕЗНОГО ТЕКСТА.<br />Скачать можно по ссылкам ниже<br /><a href="http://rapidshare.com/files/75085770/GCC._Polnoe_ruvodstvo.rar" target="_blank">rapidshare</a><br /><a href="http://depositfiles.com/files/2634065" target="_blank">depositfiles</a><br /><a href="http://natahaus.ifolder.ru/4475904" target="_blank">ifolder</a><br />ЗЫ: сам я качал с рапидшары, так что за небитость остальных ссылок не ручаюсь.<br />ЗЫЫ: А сами сылки нашел вот <a href="http://c2p.ru/">тут</a><br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-73687466577804711922008-01-07T13:36:00.000+02:002008-01-20T22:28:10.232+02:00Сдвиг в индустрии?<div style="text-align: justify;">В последнее время писать особо времени нет в виду подготовки к защите диплома в феврале. Да что там писать, даже на работу иногда времени нет, благо что она part time (хотя де-факто - в большинстве своем full time). Так вот, бродя по сайтам ведущих харьковских фирм, занимающихся разработкой ПО, наткнулся на сайте компании <a href="http://www.program-ace.com.ua/">Program-Ace</a> на вакансию <a href="http://www.program-ace.com.ua/job/">Senior C++/Haskell developer</a>.<br /><p style="font-style: italic;" class="arialstandard"><span style="font-size:85%;">Приглашаем к долгосрочному сотрудничеству специалиста профиля Senior C++/Haskell developer – для участия в разработке архитектуры в рамках уже сложившейся команды, которая имеет не только опыт в данной области, но и целый ряд успешно выполненных проектов (прекомпилятор ESQL/C и т.д.). Мы ищем настоящего профессионала, которому свойственны: стремление к решению нетривиальных и сложных задач с использованием самых современных подходов и решений; желание всесторонне планировать и активно разрабатывать архитектуру; высокая степень реализации профессиональных амбиций.</span></p> <span style="font-style: italic;font-size:85%;" ><b>Обязанности:</b><br />• Разработка архитектуры.<br />• Составление плана работ.<br />• Оперативное и профессиональное решение поставленных задач.<br /><br /><br /><b>Требования:</b><br />• Языки: С++, Haskell.<br />• Библиотеки общего назначения: STL, boost.<br />• Знание паттернов и современных подходов к разработке.<br />• Владение функциональными языками на высоком уровне.<br /><br />Желательны: знания и опыт в области разработки компиляторов.</span> <br /><br />Чуть ранее о подобных наблюдениях писал <a href="http://www.blogger.com/profile/12742106367384624657">lrrr:</a> <a href="http://brainslugs.blogspot.com/2007/12/erlang-amazon.html">здесь</a> и <a href="http://brainslugs.blogspot.com/2007/11/erlang-job.html">здесь</a>. Может Erlang и Haskell, да и вообще распределенное и функциональное программирование - next big thing in industry? В последнее время наблюдается устойчивый интерес в блогах разработчиков к этим технологиям. Ваше мнение? Если несложно, то отпишитесь в комментах к этому посту.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-36389110253190164052007-12-17T13:50:00.000+02:002008-01-20T22:27:56.070+02:00gOS goes live<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_zs4Dr34z3CM/R2ZkaukcITI/AAAAAAAAAHM/bqUprWqM6qk/s1600-h/header_logo_left.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_zs4Dr34z3CM/R2ZkaukcITI/AAAAAAAAAHM/bqUprWqM6qk/s400/header_logo_left.jpg" alt="" id="BLOGGER_PHOTO_ID_5144910034657616178" border="0" /></a><br /><div style="text-align: justify;">Событие уже давнее конечно, но все равно считаю нужным о нем написать. Итак, встречайте - <a href="http://www.thinkgos.com/">gOS</a>!!!<br />Да, да... еще один дистр линуха...<br />Однако не все так просто, как кажется на первый взгляд. Что вы скажете например об <a href="http://www.walmart.com/catalog/product.do?product_id=7754614">Everex gPC</a> всего за 199$? Отличный выбор, если вам необходим недорогой офисный компьютер с доступом в интернет. Помимо набора офисных средств, в состав ОС включены средства, для работы с популярными веб сервисами. В общем я понимаю, что сейчас еще одним дистрибутивом никого не удивишь, да и случай продажи компьютеров с предустановленным линуксом уже не первый (первыми были Dell кажись), но все равно приятно. Подробности можно почитать <a href="http://www.linux.com/feature/121151">здесь</a> и <a href="http://www.thinkgos.com">здесь</a>.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-4108755085879239363.post-46653723392793813382007-12-14T13:32:00.000+02:002007-12-14T13:57:05.125+02:00Возвращение джедая<div style="text-align: justify;">Последние две недели прошли в бегах по универу, посему до того чтобы написать что-либо осмысленное руки ну совсем не доходили. Разве что так - <a href="http://yuriy-volkov.blogspot.com/">общие мысли</a>, да дополнил слегка <a href="http://deepencpp.blogspot.com/2007/09/c-c09-useful-resources.html">пост о полезных ресурсах по С++</a>.<br /><br />Поковыряв boost::any, проникся подходом к реализации - действительно интереснейший способ, который подробно описан в статье "<a href="http://www.two-sdg.demon.co.uk/curbralan/papers/ValuedConversions.pdf">Valued Conversions</a>" by Kevlin Henney. Везде, где только можно, этот класс использовать не получится, так как кастовать каждый раз - слишком накладно (хотя я не замерял, но думаю, что накладно по времени выполнения будет). Подобный же подход можно использовать и для реализации any_function.<br /><br />Кроме того, надыбал интересную <a href="http://axofiber.no-ip.org/inside/properties.in.cpp.htm">статейку</a> про реализацию Properties in C++. В отличие от этой <a href="http://dvinogradov.blogspot.com/2006/12/properties-in-c.html">"Properties in C++"</a>, опубликованной в блоге <a href="http://dvinogradov.blogspot.com/">Raider's Programming Blog</a>, здесь используется подход, когда mutator &amp; accessor являются параметрами шаблона, что на мой неискушенный взгляд удобнее, так как нет никакой необходимости менять их в рантайме. Единственное, что неудобно, так это то, что напрямую не поддерживаются такие операции как например ++ .<br /><br />В общем классы any_function и property мне бы пожалуй пригодились, так, что попробую, наверное, их реализовать. Пока что все.<br /></div>Yuriy Volkovhttp://www.blogger.com/profile/10400110255029957028noreply@blogger.com