tag:blogger.com,1999:blog-2513595079032972812024-03-13T22:14:39.228+10:00Sergey's thoughtsСергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.comBlogger80125tag:blogger.com,1999:blog-251359507903297281.post-8862740183117729222015-02-11T17:19:00.002+10:002015-02-13T04:15:51.590+10:00HowTo // Как строить Apache Thrift // part 2<div dir="ltr" style="text-align: left;" trbidi="on">
Обновление к предыдущей <a href="http://sergeysthoughts.blogspot.ru/2014/02/howto-apache-thrift-visual-studio.html">статье</a>. <br />
<br />
Не прошло и полгода, как коллеги из Siemens проникшись преимуществами <a href="http://www.cmake.org/">CMake</a> и добавили его таки в <a href="http://thrift.apache.org/">Apache Thrift</a>. Причем похоже у них <a href="https://issues.apache.org/jira/browse/THRIFT-2850">большие планы</a> по полной замене automake в версии 1.0.0 и есть возможность (видимо их большинство в Apache Thrift project team).<br />
<br />
Кое что взяли из моего, теперь уже бесспорно, заброшенного проекта.<br />
<br />
Поддержка уже в ветке <a href="https://github.com/apache/thrift">master</a>. </div>
Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-64273859486197620562014-02-07T08:12:00.002+11:002014-09-10T04:04:11.099+11:00HowTo // Как строить Apache Thrift в Visual Studio<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: small;">Доброго времени суток!</span><br />
<br />
<h4 style="text-align: left;">
<span style="font-size: small;"><u><b>Прелюдия</b><b> (не очень полезная информация)</b></u></span></h4>
Возник интерес по сборке и использованию <a href="http://thrift.apache.org/">Apache Thrift</a> (в прошлом проект Facebook-а) у себя в продукте на Windows.<br />
<br />
У Apache все работают на Mac/Linux и индейцев проблемы остального населения не беспокоят. Хотя, надо признать, в последние версии "пролезли" обрезанные проекты от Visual Studio для компилятора и библиотеки - земной поклон.<br />
<br />
Мы же по<strike> простому</strike> крестьянски в Windows мастерим (иногда из любви к кросс платформенности проверяя MinGW/Cygwin или в виртуалочке на распоследней Fedora с clang).<br />
<br />
И так мне не любо, когда необходимо читать README_WINDOWS.txt с какими-то инструкциями, что нужно <b><u>вручную</u> </b>что-то скопировать, что-то переименовать и что-то прописать в переменные окружения. Да так, что руки невольно начинают "ерзать" по клавиатуре и описывать проект в CMake (простите за мою слабость к данному инструменту).<br />
<br />
Так как "индейские" ребята из племени Апачей (как и Гуглоидов), походу, ненавидят CMake, о чем они демонстративно заявили, накорню убив в <a href="https://issues.apache.org/jira/browse/THRIFT-797">Июне 10-го</a> интергацию какого-то залетного "перца" и его надежду в светлое будущее кросс платформенного генератора билдов. Поэтому, подавать это в "индейское" племя (Jira то бишь) видимо смысла нет.<br />
<br />
Ну так вот... Подсмотрев идею не интрузивного (или не инвазивного???) проекта для <a href="https://github.com/jesperes/protobuf-cmake">Google Protobuf</a> накидал похожее для ApacheThrift о чем спешу поделиться - может кому тоже подойдет.<br />
<br />
<h4 style="text-align: left;">
<u><b>HowTo (полезная информация)</b></u></h4>
<h3 style="text-align: left;">
Зависимости</h3>
<a href="http://cmake.org/">CMake </a>(у меня 2.8.12)<br />
<a href="http://git-scm.com/">Git</a><br />
Какой нибудь компилятор C++ (у меня основная платформа msvc++ 11 (vs2012))<br />
<a href="http://gnuwin32.sourceforge.net/">Flex/Bison</a><br />
<a href="http://www.boost.org/">Boost C++</a> (1.55 использую собранный, тем компилятором что выбрали выше)<br />
Клонируете исходный код Thrift (можно <a href="http://git-wip-us.apache.org/repos/asf/thrift.git">официальный</a>, можно <a href="http://github.com/apache/thrift">зеркало</a>)<br />
Клонируете мой проект (<a href="https://github.com/snikulov/thrift.cmake">fork me on github</a>)<br />
<br />
запустить из командной строки<br />
<br />
<blockquote class="tr_bq">
cmake <путь к моему проекту> -DTHRIFT_SRC_ROOT=<путь до клона thrift></blockquote>
если стандартный генератор не люб - добавте -G<имя генератора> (я например фэн <a href="http://martine.github.io/ninja/">Ninja</a>)<br />
<br />
Дополнительные опции (вроде понятные)<br />
<br />
Обязательные (если cmake не найдет сам, по любому придется указать - зависимость) <br />
<ul style="text-align: left;">
<li>-DBOOST_ROOT=<путь до Boost C++ Library></li>
</ul>
<br />
Необязательные (без них будет строиться, но пропадут фичи упаковки и криптования) <br />
<ul style="text-align: left;">
<li>-DWITH_TESTS=ON</li>
<li>-DZLIB_ROOT=<путь до ZLib></li>
<li>-DOPENSSL_ROOT_DIR=<путь до OpenSSL></li>
</ul>
<br />
Может заработать не сразу - штука экспериментальная.<br />
Патчи и проблемные репорты приветствуются, хотя не обещаю скорого исправления :)<br />
Пока в планах - добавление Libevent для асинхронных сервера и клиента и инсталляция.<br />
Далее - как пойдет.<br />
<br />
Удачи.<br />
---------- <br />
If you build it, CR will come... (старая Motorola-вская шутка)</div>
Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-44710685468178650752012-12-19T07:12:00.000+11:002014-08-29T17:58:26.420+11:00Brainbench замерки. <div dir="ltr" style="text-align: left;" trbidi="on">
Случайно зашел в прошлом году на Brainbench и по дешевке (что-то около 10 долларов) купил безлимитную подписку. Было бы дороже, не купил бы по причине банальной жадности.<br />
<br />
Время выходит, деньги пропадают, посему решил замерить скиллы.<br />
<br />
Вроде получилось, хотя последний дался тяжелее :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.brainbench.com/xml/bb/transcript/public/viewtranscript.xml?pid=7395311" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="http://2.bp.blogspot.com/-mLWXMmByhgk/UNDMQaqWx3I/AAAAAAAABko/f9t_wmXznbk/s1600/cfundamentals.gif" title="http://www.brainbench.com/xml/bb/transcript/public/viewtranscript.xml?pid=7395311" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.brainbench.com/xml/bb/transcript/public/viewtranscript.xml?pid=7395311" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="http://3.bp.blogspot.com/-IC9L6FBtt2o/UNDMTUVJv3I/AAAAAAAABkw/Tv6pYdorlBY/s1600/cprogrammer.gif" title="http://www.brainbench.com/xml/bb/transcript/public/viewtranscript.xml?pid=7395311" /></a></div>
<br />
Осталось до конца января 2013 еще осилить замер по C++.<br />
<br />
Детали в транскрипте <b style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Transcript ID#: <span name="demo_personid">7395311</span></b></div>
Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-89171739311569837012011-12-07T12:24:00.000+11:002011-12-07T12:24:22.205+11:00git+ssh через https прокси<div dir="ltr" style="text-align: left;" trbidi="on">
В продолжение предидущей <a href="http://www.blogger.com/goog_1299939284">темы</a><a href="http://sergeysthoughts.blogspot.com/2010/02/git-http-linux.html"> о работе git из-за прокси</a>.<br />
<br />
Собственно, предидущая тема рассчитана на взятие и обновления исходного кода из репозитория (git clone/pull). Отдачу дельты она не подразумевает (git push).<br />
Однако в жизни разработчика наступает момент, когда необходимо что-либо поместить на сервер.<br />
<br />
В моем случае это была конфигурация редактора <a href="http://www.gnu.org/s/emacs/">emacs</a> на <a href="https://github.com/snikulov/emacs.rc">github</a>. При изпользозании одного редактора и на работе и дома хочеться иметь общую конфигурацию. Конфигурацию, обычно меняешь по ходу работы и нужно удачный вариант сохранить для дальнейшего использования.<br />
<br />
<br />
И тут на помощь нам приходит <a href="http://www.agroman.net/corkscrew/">corkscrew</a>. На <a href="http://start.fedoraproject.org/">Fedora</a> она есть в репозиториях.<br />
<br />
<ol style="text-align: left;">
<li>Устанавливаем corkscrew (<b>yum install corkscrew</b>)</li>
<li>Добавляем в $HOME/.ssh/config следующие строчки</li>
</ol>
<blockquote class="tr_bq">
Host github.com<br /> User git <br /> HostName ssh.github.com<br /> Port 443<br /> ProxyCommand corkscrew 127.0.0.1 9090 %h %p</blockquote>
<br />
<br />
У меня используется cntlm прокси, поэтому адрес 127.0.0.1 и порт 9090. Если у кого не так, нужно заменить эти значения на те, которые используются в вашей сети.<br />
<br />
Теперь git push должен работать из-за прокси.<br />
Если нужен другой сервер с ssh (не <a href="http://github.com/">github.com</a>), его также нужно добавить в $HOME/.ssh/config<br />
<br />
<br />
.<br />
<br /></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-79236405719912812792010-10-06T17:59:00.001+11:002010-10-06T18:03:50.313+11:00Цитата от Стива (перепост)<span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; ">Не имеет смысла нанимать толковых людей, а затем указывать, что им делать. Мы нанимаем толковых людей, чтобы они говорили, что делать нам.</span><div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; "><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; ">Взято <a href="http://www.happy-pm.com/blog/?p=5946">отсюда</a></span></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-63478690758264702592010-09-09T01:23:00.002+11:002010-09-09T01:34:46.732+11:00Основные принципы PixarГуглил я тут недавно и наткнулся на статью в <a href="http://www.shrc.ru/clauses/detail.php?ID=19286">SHR Consulting</a> про <a href="http://www.pixar.com/">Pixar</a> - секрет фантастического успеха Стива Джобса.<br /><br />Надо сказать, что довольно простые и правильные принципы. Многим компаниям имеет смысл перенять их.<div><br /></div><div>Не могу не привести их у себя<br /><br /><span style="font-weight:bold;"></span><blockquote><span style="font-weight:bold;">Принципы успешности Pixar</span><br /><ol><li>Всегда учиться: команда Pixar постоянно задает себе вопросы: «почему» и «что если ..?», что приводит к замечательным открытиям.</li><li>Поиск правильных партнеров: Pixar работает с компанией Disney, Томом Хенксом, Стивом Джобсом, Тимом Алленом и многими другими. Правильные партнеры помогут оптимизировать эффективность и раскроют потенциал.</li><li>Командность: хорошие команды состоят из хороших элементов, в команде много задач важнее собственных желаний. Команда Pixar оставалась командой даже в не самые светлые свои дни.</li><li>Человеческий капитал: Pixar дисциплинированно воспитывали и растили лучших из лучших, они инвестировали в блестящих людей. Человеческий капитал это не затраты – это инвестиции.</li><li>Доверие интуиции: история Pixar полна моментов, когда логика бизнеса говорила "нет" творческой интуиции (например, 3D анимация по сравнению с 2D), но они воплощали в жизнь идеи и добивались оглушительного успеха.</li><li>Вера в успех: эта вера позволила компании работать в течение очень трудных лет.</li><li>Талант: Только талантливо рассказанные и показанные истории становятся бестселлерами.</li><li>Работа - это праздник: команда Pixar отмечает как праздник маленькие технические победы в течение работы.</li><li>Упорство: Pixar потребовались десять долгих лет, чтобы добиться успеха, в течение которых компания перепродавалась, теряла миллионы долларов.</li></ol></blockquote></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-59863203589284579722010-09-08T23:14:00.004+11:002010-09-08T23:46:05.179+11:00туннельный синдромПрочитал историю <a href="http://lionet.livejournal.com/71005.html">о туннельном синдроме</a>. Ведь работаю с клавиатурой. Правда с <a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard">Dvorak раскладкой</a>. Иногда подолгу и на ноутбуке. И emacs использую. И колесо мышки кручу. Стало немного неуютно...<br /> <br />Потом прочел <a href="http://eao197.blogspot.com/2010/09/prog-1k-c.html">комментарии от Евгения Охотникова</a> и успокоился. Честно признаюсь - ну не даю я 1 КLOC в рабочий день. А если бы и давал, то как в анекдоте - такая бы фигня получалась.<br /><br />Берегите себя и свои пальцы/кисти.Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-50632836817718331692010-08-21T16:28:00.000+11:002010-08-21T16:28:05.093+11:00Tim(oshka)Собственно, хочу представить - мой младшенький сын - Тимофей<br /><br /><a href="http://goo.gl/photos/5Uey" imageanchor="1" style="clear:right;margin-bottom:1em;margin-left:1em"><img border="0" src="http://lh6.ggpht.com/_kP8Hst1bKuU/TG9g9HI2LWI/AAAAAAAAAwE/60k4zmduRI0/s512/281.JPG"></a>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-69128391924219771402010-05-06T19:19:00.002+11:002010-05-06T19:26:53.290+11:00Кто такие консерваторы?В фоне говорит телевизор. <br />В Великобритании предвыборная гонка...<br />Консерваторы против лейбористов... <br />Лидер консерваторов посещает детские сады и объясняет детям, кто такие консерваторы и почему они лучше лейбористов...<br /><br />Спрашиваю жену:<br />- Дорогая, а кто такие консерваторы?<br />Старший сын (3 года и 2 месяца) ковыряясь в своих игрушках не глядя говорит:<br />- Я знаю, кто такие консерваторы. Это те кто открывает банки!<br /><br />...<br /><br />Мы с женой ничего не могли говорить минут 15 :)))))Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-89213574880396126082010-02-18T01:03:00.005+10:002011-02-04T23:36:05.992+10:00Как использовать git из за HTTP прокси с Linux машиныОригинал статьи на Английском <a href="http://www.emilsit.net/blog/archives/how-to-use-the-git-protocol-through-a-http-connect-proxy/">здесь</a><div><br /></div><div>Собственно суть проблемы.</div><div><br /></div><div>Все началось с того что я решил вытянуть на работе <a href="http://gitorious.com/boost/cmake">boost-cmake с gitorious</a>, но так как там большие блобы, то клонирование по http:// протоколу через корпаративный прокси заканчивалось ошибкой 500, где-нибудь в районе 25-30%. Описание проблемы, похоже на приведенное <a href="http://support.github.com/discussions/repos/957-cant-clone-over-http-or-git">здесь</a>.</div><div><br /></div><div>Утверждалось, что по git:// схеме такого быть не должно.</div><div><br /></div><div>1. Собственно предложенный вариант - <a href="http://en.wikipedia.org/wiki/Tunneling_protocol">туннель git протокола через HTTP CONNECT</a>. Данная схема используется для https:// соединений на порт 443. Так как все корпаративные прокси поддерживают данную возможность, то необходимо попросить админа разрешить метод HTTP CONNECT на порт 9418, который используется git.<span class="Apple-style-span" style="line-height: 19px;font-family:'Lucida Sans','Lucida Grande','Lucida Sans Unicode',sans-serif;font-size:13px;" ><span class="Apple-style-span" style="line-height: normal;font-family:Georgia,serif;font-size:16px;" > </span></span></div><div><span class="Apple-style-span" style="line-height: 19px;font-family:'Lucida Sans','Lucida Grande','Lucida Sans Unicode',sans-serif;font-size:13px;" ><span class="Apple-style-span" style="line-height: normal;font-family:Georgia,serif;font-size:16px;" ><br /></span></span></div><div>2. Далее нужна утилита socat - устанавливаем ее со своего Linux репозитория (<b>yum install socat</b>).</div><div><br /></div><div>3. Создайте исполняемый скрипт с именем gitproxy (или выберите имя на ваше усмотрение) где-нибудь в месте из переменной PATH (например ~/bin):</div><div><br /></div><div><span class="Apple-style-span" style="line-height: 19px;font-family:'Lucida Sans','Lucida Grande','Lucida Sans Unicode',sans-serif;font-size:13px;" ><div id="gist-49288" class="gist" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 0);"><div class="gist-file" style="margin: 0px 0px 1em; padding: 0px; border: 1px solid rgb(222, 222, 222); font-weight: inherit; font-style: inherit; font-size: 13px; font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; vertical-align: baseline;"><div class="gist-data gist-syntax" style="margin: 0px; padding: 0px; border-width: 0px 0px 1px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline; background-color: rgb(248, 248, 255); overflow: auto; border-bottom: 1px solid rgb(221, 221, 221);"><div class="gist-highlight" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline; background-color: transparent ! important;"><pre style="margin: 0px ! important; padding: 0.25em 0.5em 0.5em ! important; border-width: 0px; vertical-align: baseline; white-space: pre; font: 1em/1.5 'andale mono','lucida console',monospace; background-color: transparent ! important; border-style: none ! important;"><div class="line" id="LC1" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;">#!/bin/sh </div><div class="line" id="LC2" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># Use socat to proxy git through an HTTP CONNECT firewall. </div><div class="line" id="LC3" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># Useful if you are trying to clone git:// from inside a company. </div><div class="line" id="LC4" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># Requires that the proxy allows CONNECT to port 9418. </div><div class="line" id="LC5" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># </div><div class="line" id="LC6" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># Save this file as gitproxy somewhere in your path (e.g., ~/bin) and then run </div><div class="line" id="LC7" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># chmod +x gitproxy </div><div class="line" id="LC8" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># git config --global core.gitproxy gitproxy </div><div class="line" id="LC9" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># </div><div class="line" id="LC10" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># More details at http://tinyurl.com/8xvpny </div><div class="line" id="LC11" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"> </div><div class="line" id="LC12" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"># Configuration. Common proxy ports are 3128, 8123, 8000. </div><div class="line" id="LC13" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;">_proxy=proxy.yourcompany.com </div><div class="line" id="LC14" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;">_proxyport=3128 </div><div class="line" id="LC15" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;"> </div><div class="line" id="LC16" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 13px; font-family: inherit; vertical-align: baseline;">exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport</div></pre></div></div><div class="gist-meta" style="margin: 0px; padding: 0.5em; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 11px; font-family: inherit; vertical-align: baseline; overflow: hidden; color: rgb(102, 102, 102); background-color: rgb(234, 234, 234);"><a href="http://gist.github.com/raw/49288/189f181512fa92d4ef1973e284755c04b5bcea1d/gitproxy-socat" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 11px; font-family: inherit; vertical-align: baseline; color: rgb(51, 102, 153); text-decoration: none; float: right;">view raw</a><a href="http://gist.github.com/49288#file_gitproxy_socat" style="margin: 0px 10px 0px 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 11px; font-family: inherit; vertical-align: baseline; color: rgb(102, 102, 102); text-decoration: none; float: right;">gitproxy-socat</a><a href="http://gist.github.com/49288" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 11px; font-family: inherit; vertical-align: baseline; color: rgb(51, 102, 153); text-decoration: none;">This Gist</a> brought to you by <a href="http://github.com/" style="margin: 0px; padding: 0px; border-width: 0px; font-weight: inherit; font-style: inherit; font-size: 11px; font-family: inherit; vertical-align: baseline; color: rgb(51, 102, 153); text-decoration: none;">GitHub</a>.</div></div></div></span></div><div><div><br /></div><div>4. Конфигурируем git на использование данного скрипта (<b>git config --global core.gitproxy gitproxy</b> или имя выбранное вами на шаге 3)</div><div><br /></div><div>Собственно и все. Теперь git:// URL-ы тоже работают.</div><div><br /></div><div>Оказалось, действительно, на данном протоколе все работает стабильнее।<br /><br />Обновил:<br /> - 04.02.2011 - исправил досадную опечатку в пункте 4 (спасибо <a href="http://yalexand.blogspot.com/">Yalexand</a>)<br /></div></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com3tag:blogger.com,1999:blog-251359507903297281.post-69788927975906167102010-02-14T01:33:00.002+10:002010-02-14T01:44:01.431+10:00Зимняя олимпиада 2010 // трагедия на санной трассеПрочитал новость о трагедии Кумариташвили и посмотрел <a href="http://news.sportbox.ru/Vidy_sporta/Sani/1_m/spbvideo_Tragediya-na-trasse-Sannogo-centra-Uistlera">видео</a>.<br /><br />Следующая тема о том де, <a href="http://news.sportbox.ru/Vidy_sporta/Sani/1_m/spbnews_Prichinoy-tragedii-nazvana-oshibka-Kumaritashvili">что он сам виноват</a>.<br /><br />После таких новостей - поганенько на душе. Лично я считаю, что тут явно виноват оргкомитет и тот, кто принимал трассу. Ошибка спортсмена не должна приносить такие последствия. И обесечить безопасность - основная задача олимпийских чиновников.<br /><br />На повороте должна была быть установлена уловительная сетка, поскольку на таких скоростях даже у опытных спортсменов могли быть ошибки. И это не значит что они должны так глупо погибать.<br /><br />Соболезнования родным и близким атлета.Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com1tag:blogger.com,1999:blog-251359507903297281.post-32077165279228670782010-02-04T14:21:00.002+10:002010-02-04T14:25:02.727+10:00открыли исходники SymbianПока Google бодается с Apple появилась еще одна открытая платформа - Symbian. Время покажет, будет ли из этого прок, и станет ли Symbian привлекательной платформой для производителей телефонов.<br /><br />Ну а пока можно ознокомиться с исходными кодами некогда закрытой мобильной платформы <a href="http://developer.symbian.org/">здесь</a>.Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-1573733966082313812010-02-03T17:50:00.002+10:002010-02-03T18:02:12.198+10:00Стив Джобс о Google...В связи с участившимся сравнением Apple iPhone vs Google Android знаменательно следующее высказывание <a href="http://www.3dnews.ru/news/stiv_dzhobs_rezko_viskazalsya_v_adres_google_i_adobe/">Стива </a><div><blockquote></blockquote><blockquote> <span class="Apple-style-span" style=" ;font-family:Tahoma, Verdana, Arial, sans;font-size:13px;">Мы не открывали поисковый сервис, но они вошли в телефонный бизнес. Будьте уверены, что их целью является уничтожение iPhone. Мы не позволим этому случиться</span></blockquote><span class="Apple-style-span" style=" ;font-family:Tahoma, Verdana, Arial, sans;font-size:13px;"></span><blockquote></blockquote></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-39095677583423117232010-02-03T17:25:00.002+10:002010-02-03T17:28:01.694+10:00Вышел "новый" Boost1 новая библиотека и некоторое количество исправленных проблем...<div><br /></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><h3><span>New Libraries</span></h3><ul><li><span><a href="http://www.boost.org/libs/uuid/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Uuid</a>:</span> A universally unique identifier, from Andy Tompkins.</li></ul></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><h3><span>Updated Libraries</span></h3><ul><li><span><a href="http://www.boost.org/libs/asio/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Asio</a>:</span><ul><li>Added a new HTTP Server 4 example illustrating the use of stackless coroutines with Asio.</li><li>Changed handler allocation and invocation to use <code style="font-size: 11px; "><span>boost</span><span>::</span><span>addressof</span></code> to get the address of handler objects, rather than applying <code style="font-size: 11px; "><span>operator</span><span>&</span></code> directly (<a href="https://svn.boost.org/trac/boost/ticket/2977" target="_blank" style="color: rgb(34, 68, 187); ">#2977</a>).</li><li>Restricted MSVC buffer debugging workaround to 2008, as it causes a crash with 2010 beta 2 (<a href="https://svn.boost.org/trac/boost/ticket/3796" target="_blank" style="color: rgb(34, 68, 187); ">#3796</a>, <a href="https://svn.boost.org/trac/boost/ticket/3822" target="_blank" style="color: rgb(34, 68, 187); ">#3822</a>).</li><li>Fixed a problem with the lifetime of handler memory, where Windows needs the <code style="font-size: 11px; "><span>OVERLAPPED</span></code>structure to be valid until both the initiating function call has returned and the completion packet has been delivered.</li><li>Don't block signals while performing system calls, but instead restart the calls if they are interrupted.</li><li>Documented the guarantee made by strand objects with respect to order of handler invocation.</li><li>Changed strands to use a pool of implementations, to make copying of strands cheaper.</li><li>Ensured that kqueue support is enabled for BSD platforms (<a href="https://svn.boost.org/trac/boost/ticket/3626" target="_blank" style="color: rgb(34, 68, 187); ">#3626</a>).</li><li>Added a <code style="font-size: 11px; "><span>boost_</span></code> prefix to the <code style="font-size: 11px; "><span>extern</span> <span>"C"</span></code> thread entry point function (<a href="https://svn.boost.org/trac/boost/ticket/3809" target="_blank" style="color: rgb(34, 68, 187); ">#3809</a>).</li><li>In <code style="font-size: 11px; "><span>getaddrinfo</span></code> emulation, only check the socket type (<code style="font-size: 11px; "><span>SOCK_STREAM</span></code> or <code style="font-size: 11px; "><span>SOCK_DGRAM</span></code>) if a service name has been specified. This should allow the emulation to work with raw sockets.</li><li>Added a workaround for some broken Windows firewalls that make a socket appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.</li><li>Applied a fix for reported excessive CPU usage under Solaris (<a href="https://svn.boost.org/trac/boost/ticket/3670" target="_blank" style="color: rgb(34, 68, 187); ">#3670</a>).</li><li>Added some support for platforms that use older compilers such as g++ 2.95 (<a href="https://svn.boost.org/trac/boost/ticket/3743" target="_blank" style="color: rgb(34, 68, 187); ">#3743</a>).</li></ul></li><li><span><a href="http://www.boost.org/libs/circular_buffer/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Circular Buffer</a>:</span><ul><li>Added methods erase_begin(size_type) and erase_end(size_type) with constant complexity for such types of stored elements which do not need an explicit destruction e.g. int or double.</li><li>Similarly changed implementation of the clear() method and the destructor so their complexity is now constant for such types of stored elements which do not require an explicit destruction (the complexity for other types remains linear).</li></ul></li><li><span><a href="http://www.boost.org/libs/fusion/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Fusion</a>:</span><ul><li>The accumulator is the first argument to the functor of <code style="font-size: 11px; "><span>fusion</span><span>::</span><span>fold</span></code> and <code style="font-size: 11px; "><span>fusion</span><span>::</span><span>accumulate</span></code>(<a href="https://svn.boost.org/trac/boost/ticket/2355" target="_blank" style="color: rgb(34, 68, 187); ">#2355</a>).</li><li>Added support for associative iterators and views (<a href="https://svn.boost.org/trac/boost/ticket/3473" target="_blank" style="color: rgb(34, 68, 187); ">#3473</a>).</li></ul></li><li><span><a href="http://www.boost.org/libs/graph/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Graph</a>:</span><ul><li>Removed old interface to <code style="font-size: 11px; "><span>compressed_sparse_row_graph</span></code>, making new interface the default.</li></ul></li><li><span><a href="http://www.boost.org/libs/integer/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Integer</a>:</span><ul><li>Reverted Trunk to release branch state (i.e. a "known good state").</li><li>Fixed issues: <a href="https://svn.boost.org/trac/boost/ticket/653" target="_blank" style="color: rgb(34, 68, 187); ">653</a>, <a href="https://svn.boost.org/trac/boost/ticket/3084" target="_blank" style="color: rgb(34, 68, 187); ">3084</a>, <a href="https://svn.boost.org/trac/boost/ticket/3177" target="_blank" style="color: rgb(34, 68, 187); ">3177</a>, <a href="https://svn.boost.org/trac/boost/ticket/3180" target="_blank" style="color: rgb(34, 68, 187); ">3180</a>, <a href="https://svn.boost.org/trac/boost/ticket/3548" target="_blank" style="color: rgb(34, 68, 187); ">3568</a>, <a href="https://svn.boost.org/trac/boost/ticket/3657" target="_blank" style="color: rgb(34, 68, 187); ">3657</a>, <a href="https://svn.boost.org/trac/boost/ticket/2134" target="_blank" style="color: rgb(34, 68, 187); ">2134</a>.</li><li>Added long long support to <tt>boost::static_log2</tt>, <tt>boost::static_signed_min</tt>,<tt>boost::static_signed_max</tt>, <tt>boost::static_unsigned_min</tt><tt>boost::static_unsigned_max</tt>, when available.</li><li>The argument type and the result type of <tt>boost::static_signed_min</tt> etc are now typedef'd. Formerly, they were hardcoded as <tt>unsigned long</tt> and <tt>int</tt> respectively. Please, use the provided typedefs in new code (and update old code as soon as possible).</li></ul></li><li><span><a href="http://www.boost.org/libs/iostreams/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Iostreams</a>:</span><ul><li>Fixed many outstanding issues. Thanks to Richard Smith for his work on this. (<a href="https://svn.boost.org/trac/boost/ticket/3612" target="_blank" style="color: rgb(34, 68, 187); ">#3612</a>, <a href="https://svn.boost.org/trac/boost/ticket/3311" target="_blank" style="color: rgb(34, 68, 187); ">#3311</a>,<a href="https://svn.boost.org/trac/boost/ticket/2094" target="_blank" style="color: rgb(34, 68, 187); ">#2094</a>, <a href="https://svn.boost.org/trac/boost/ticket/3010" target="_blank" style="color: rgb(34, 68, 187); ">#3010</a>, <a href="https://svn.boost.org/trac/boost/ticket/2894" target="_blank" style="color: rgb(34, 68, 187); ">#2894</a>, <a href="https://svn.boost.org/trac/boost/ticket/3011" target="_blank" style="color: rgb(34, 68, 187); ">#3011</a>, <a href="https://svn.boost.org/trac/boost/ticket/3352" target="_blank" style="color: rgb(34, 68, 187); ">#3352</a>, <a href="https://svn.boost.org/trac/boost/ticket/3505" target="_blank" style="color: rgb(34, 68, 187); ">#3505</a>).</li><li>For more information see the <a href="http://www.boost.org/libs/iostreams/doc/release_notes.html" target="_blank" style="color: rgb(34, 68, 187); ">library release notes</a>.</li></ul></li><li><span><a href="http://www.boost.org/libs/program_options/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Program.Options</a>:</span><ul><li>Information about option name added to a few exception classes and various clean ups in exception classes (<a href="https://svn.boost.org/trac/boost/ticket/3423" target="_blank" style="color: rgb(34, 68, 187); ">#3423</a>).</li><li>Description wordwrapping in presense of default parameters fixed (<a href="https://svn.boost.org/trac/boost/ticket/2613" target="_blank" style="color: rgb(34, 68, 187); ">#2613</a>).</li><li>Empty value in configuration file is now permitted (<a href="https://svn.boost.org/trac/boost/ticket/1537" target="_blank" style="color: rgb(34, 68, 187); ">#1537</a>).</li><li>Quotes are no longer stripped from string values (<a href="https://svn.boost.org/trac/boost/ticket/850" target="_blank" style="color: rgb(34, 68, 187); ">#850</a>).</li><li>Fix endless loop in case of long default arguments (<a href="https://svn.boost.org/trac/boost/ticket/689" target="_blank" style="color: rgb(34, 68, 187); ">#689</a>).</li><li>Fix compile warning caused by usage of boost::any (<a href="https://svn.boost.org/trac/boost/ticket/2562" target="_blank" style="color: rgb(34, 68, 187); ">#2562</a>).</li><li>Fix memory bug in example/response_file.cpp (<a href="https://svn.boost.org/trac/boost/ticket/3525" target="_blank" style="color: rgb(34, 68, 187); ">#3525</a>).</li><li>Most compilation warnings were fixed (<a href="https://svn.boost.org/trac/boost/ticket/3608" target="_blank" style="color: rgb(34, 68, 187); ">#3608</a>).</li><li>Make column width for description text configurable. (<a href="https://svn.boost.org/trac/boost/ticket/3703" target="_blank" style="color: rgb(34, 68, 187); ">#3703</a>).</li><li>Add general split function: split_unix() (<a href="https://svn.boost.org/trac/boost/ticket/2561" target="_blank" style="color: rgb(34, 68, 187); ">#2561</a>).</li><li>Enable open config files from given file name (<a href="https://svn.boost.org/trac/boost/ticket/3264" target="_blank" style="color: rgb(34, 68, 187); ">#3264</a>).</li><li>Additional flag for required options (<a href="https://svn.boost.org/trac/boost/ticket/2982" target="_blank" style="color: rgb(34, 68, 187); ">#2982</a>).</li><li>Enable case insensitive style for command line (<a href="https://svn.boost.org/trac/boost/ticket/3498" target="_blank" style="color: rgb(34, 68, 187); ">#3498</a>).</li></ul></li><li><span><a href="http://www.boost.org/libs/property_map/index.html" target="_blank" style="color: rgb(34, 68, 187); ">PropertyMap</a>:</span><ul><li>Removed old header files (directly in the <code style="font-size: 11px; "><span>boost</span><span>/</span></code> directory); they were deprecated since 1.40, replaced by headers in <code style="font-size: 11px; "><span>boost</span><span>/</span><span>property_map</span><span>/</span></code>.</li></ul></li><li><span><a href="http://www.boost.org/libs/proto/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Proto</a>:</span><ul><li>Fix const correctness issues with <code style="font-size: 11px; "><span>proto</span><span>::</span><span>flatten</span></code> and friends (<a href="https://svn.boost.org/trac/boost/ticket/3364" target="_blank" style="color: rgb(34, 68, 187); ">#3364</a>).</li><li>Accomodate recent change to <code style="font-size: 11px; "><span>fusion</span><span>::</span><span>fold</span></code>, remove old support for Doxygen and pre-1.35 Fusion (<a href="https://svn.boost.org/trac/boost/ticket/3553" target="_blank" style="color: rgb(34, 68, 187); ">#3553</a>).</li><li>In binary operations, when one operand has a user-specified domain and the other has the default domain, the user-specified domain trumps.</li><li>Fix <code style="font-size: 11px; "><span>BOOST_PROTO_EXTENDS</span></code> to work with elaborated types.</li><li>Work around EDG compiler bug with function types and cv-qualification.</li></ul></li><li><span><a href="http://www.boost.org/libs/regex/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Regex</a>:</span><ul><li>Added support for Functors rather than strings as format expressions.</li><li>Improved error reporting when throwing exceptions to include better more relevant information.</li><li>Improved performance and reduced stack usage of recursive expressions.</li><li>Fixed tickets <a href="https://svn.boost.org/trac/boost/ticket/2802" target="_blank" style="color: rgb(34, 68, 187); ">#2802</a>, <a href="https://svn.boost.org/trac/boost/ticket/3425" target="_blank" style="color: rgb(34, 68, 187); ">#3425</a>, <a href="https://svn.boost.org/trac/boost/ticket/3507" target="_blank" style="color: rgb(34, 68, 187); ">#3507</a>, <a href="https://svn.boost.org/trac/boost/ticket/3546" target="_blank" style="color: rgb(34, 68, 187); ">#3546</a>, <a href="https://svn.boost.org/trac/boost/ticket/3631" target="_blank" style="color: rgb(34, 68, 187); ">#3631</a>, <a href="https://svn.boost.org/trac/boost/ticket/3632" target="_blank" style="color: rgb(34, 68, 187); ">#3632</a>, <a href="https://svn.boost.org/trac/boost/ticket/3715" target="_blank" style="color: rgb(34, 68, 187); ">#3715</a>, <a href="https://svn.boost.org/trac/boost/ticket/3718" target="_blank" style="color: rgb(34, 68, 187); ">#3718</a>, <a href="https://svn.boost.org/trac/boost/ticket/3763" target="_blank" style="color: rgb(34, 68, 187); ">#3763</a>, <a href="https://svn.boost.org/trac/boost/ticket/3764" target="_blank" style="color: rgb(34, 68, 187); ">#3764</a></li></ul></li><li><span><a href="http://www.boost.org/libs/spirit/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Spirit</a>:</span> Spirit V2.2, see the '<a href="http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/spirit/what_s_new.html" target="_blank" style="color: rgb(34, 68, 187); ">What's New</a>' section for details.</li><li><span><a href="http://www.boost.org/libs/unordered/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Unordered</a>:</span><ul><li>Support instantiating the containers with incomplete value types.</li><li>Add <code style="font-size: 11px; "><span>erase_return_void</span></code> as a temporary workaround for the current <code style="font-size: 11px; "><span>erase</span></code> which can be inefficient because it has to find the next element to return an iterator (<a href="http://svn.boost.org/trac/boost/ticket/3693" target="_blank" style="color: rgb(34, 68, 187); ">#3693</a>).</li><li>Add templated find overload for compatible keys.</li><li>Improved codegear compatibility.</li><li>Other minor changes, full details in <a href="http://www.boost.org/doc/html/unordered/changes.html#unordered.changes.boost_1_42_0" target="_blank" style="color: rgb(34, 68, 187); ">the changelog</a>.</li></ul></li><li><span><a href="http://www.boost.org/libs/xpressive/index.html" target="_blank" style="color: rgb(34, 68, 187); ">Xpressive</a>:</span><ul><li><code style="font-size: 11px; "><span>match_results</span></code> no longer relies on undefined behavior in <code style="font-size: 11px; "><span>std</span><span>::</span><span>list</span></code> (<a href="https://svn.boost.org/trac/boost/ticket/3278" target="_blank" style="color: rgb(34, 68, 187); ">#3278</a>).</li><li>Do NOT copy singular iterators (<a href="https://svn.boost.org/trac/boost/ticket/3538" target="_blank" style="color: rgb(34, 68, 187); ">#3538</a>).</li><li>Eliminate gcc and darwin warnings (<a href="https://svn.boost.org/trac/boost/ticket/3734" target="_blank" style="color: rgb(34, 68, 187); ">#3734</a>).</li></ul></li></ul></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><h3><br /></h3></div></span></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-37127609384552982012009-11-18T01:18:00.001+10:002009-11-18T01:18:15.009+10:00RedHat Fedora 12 is outКак-то незаметно в День моего Рождения выпустили 11.2 OpenSuse.<br>Досадно, что я к этому времени уже полностью перешел на Fedora... И она обновилась сегодня до 12 версии!<br><br>Брать можно <a href="http://fedoraproject.org/ru/get-fedora">здесь</a><br clear="all"> <br>-- <br>Best Regards,<br>Sergey Nikulov<br> Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-74553439868490186502009-11-11T22:08:00.002+10:002009-11-11T22:16:49.924+10:00New system language from GoogleGoogle разошелся... В этом году объявил уже о втором новом языке придуманном ими.<div>Язык назвали <a href="http://golang.org/">Go</a>. Я бы на их месте назвал его Goo :-)</div><div><div>Результат скрещивания C++ и Python. </div><div><br /></div></div>Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-80276407494721350082009-09-22T16:39:00.002+11:002009-09-22T17:08:11.271+11:00Continuous integrationСлучилось так что потрабовалось для проекта подобрать сервер для <a href="http://en.wikipedia.org/wiki/Continuous_integration">Continuous integration</a>.<br /><br />Решил вначале опробовать <a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a>. Все таки <a href="http://martinfowler.com/">Мартин Фаулер</a> вроде приложил руку к его созданию.<br /><br />Конфигурационный инструмент, который должен был запуститься со странички через Java WebStart, на Linux-е запускаться и не подумал.<br /><br />После 2х часов RTFM-а, грубо ругаясь, прекратил тщетные попытки описать проект для C++/CMake/SVN и, успокаивая себя тем что это же OSS, и не надеясь ни на что хорошее бросил <a href="https://hudson.dev.java.net/">Hudson</a>-овский war в папку приложений Tomcat.<br /><br />Используя Hudson web-интерфейс за пару минут создал два проекта которые проверяют SCM на наличие изменений, запускают билд, если изменения есть, высылает сообщение по почте и результат публикуют на FTP.<br /><br />Ну а после того как обнаружил в списке дополнений слова cmake & scons... Я фанат Hudson-а!<br /><br />Надо сказать, что я никому не посоветую CruiseControl.Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-25083820592085815912009-06-24T21:52:00.001+11:002013-03-29T00:08:55.826+11:00удаление Visual Studio 2008<div dir="ltr" style="text-align: left;" trbidi="on">
Собственно оказалось нетривиальной задачей...<br />
Рекомендую воспользоваться <a href="http://go.microsoft.com/fwlink/?LinkId=105801">инструментом от издателя</a>.</div>
Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-52094788747264838082009-06-09T19:18:00.002+11:002009-06-09T19:32:41.041+11:00про интернет в Калифорнии (продолжение...)Сегодня прихожу на рабочее место - смотрю какой-то мужичек возле моего ноута крутиться.<br />- Вотс гоин он? говорю.<br />Он отвечает на чистейшем американском - а это ваш компьютер?<br />- Мой - говорю.<br />- А вы ничего большого не качали? - спрашивает он, видимо в надежде на отмазки.<br />- Качал говорю - не далее как в конце прошлой недели - 8 Гб за вечер утянул в торрентах с сайта Fedoraproject.org<br />- Ну вообщем-то говорит не большая проблема, просто вы канал нам просадили на прошлой недели в усмерть - никто работать не мог. Я - говорит - грешным делом на порновирус рассчитывал - а тут вы со своим Линуксом.<br />- Да - говорю я, не извиняясь - херня такая этот Линукс - говорю смотри - апдэйтов кажет 686 штук и показал значек ПэкаджКита. Хотя - говорю - на прошлой неделе не менее после установки вытянул...<br />- А ограничить по полосе его нельзя?<br />- Да можно, тока я думал у вас в Америке с пропускной способностью каналов проблем нет, начал я испорченный Иллинойсовским безлимитом на комкасте....<br />- Не делайте так больше - сказал мужик и ушел...<br /><br />Вот такая вот поучительная история...<br />Походу тут каналы в Силиконке нифига не широкие...<br />И "палят" на них реально...Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com1tag:blogger.com,1999:blog-251359507903297281.post-47057126814549471792009-06-09T17:12:00.003+11:002009-06-09T18:20:01.699+11:00C++ для встроенного ПОЧитаю статью на <a href="http://www.embedded.com/columns/technicalinsights/217800095">Руководство по С++ для осмотрительного программера встроенных систем</a> на <a href="http://www.embedded.com/">embedded.com</a>.<br /><br />Прежде всего, хочеться отметить, что мне понравился сайт, как ресурс. Я давно на него поглядывал, но все не находил времени почитать. Интересные советы, статьи. Нельзя сказать, что все новое и незнакомое - где-то слышал то, где-то это...<br /><br />Вообщем, иногда имеет смысл поглядывать, и не забывать.<br /><br />Решил немного посчитать и поэкспериментировать.<br /><br />Написал маленький и смешной кусок кода:<br /><br /><span style="font-weight: bold;font-size:85%;" >int main(int argc, char * argv[])<br />{<br />return 0;<br />}</span><br /><br />скопировал текст в два файла:<br />try_me.c<br />try_me.cpp<br /><br />собрал "в лоб" по простому...<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ gcc try_me.c -o try_c<br />[snikulov@solarwind c_vs_cpp]$ g++ try_me.cpp -o try_cpp<br />[snikulov@solarwind c_vs_cpp]$ ls -la<br />total 32<br />drwxrwxr-x. 2 snikulov snikulov 4096 2009-06-08 23:28 .<br />drwxrwxr-x. 6 snikulov snikulov 4096 2009-06-08 22:41 ..<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">4728</span> 2009-06-08 23:27 try_c<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">5047</span> 2009-06-08 23:27 try_cpp<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.c<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.cpp<br />[snikulov@solarwind c_vs_cpp]$<br /></span><br />Ну что тут сказать - 4728 vs. 5047<br /><br />Вообщем C++ вариант больше на 300 байт просто без всего.<br /><br />Играемся с опциями компилятора (пока по размеру -Os):<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ g++ try_me.cpp <span style="color: rgb(0, 0, 153);">-Os</span> -o try_cpp<br />[snikulov@solarwind c_vs_cpp]$ gcc try_me.c <span style="color: rgb(0, 0, 153);">-Os</span> -o try_c<br />[snikulov@solarwind c_vs_cpp]$ ls -la<br />total 32<br />drwxrwxr-x. 2 snikulov snikulov 4096 2009-06-08 23:33 .<br />drwxrwxr-x. 6 snikulov snikulov 4096 2009-06-08 22:41 ..<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">4728</span> 2009-06-08 23:33 try_c<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">5047</span> 2009-06-08 23:33 try_cpp<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.c<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.cpp<br />[snikulov@solarwind c_vs_cpp]$<br /></span><br />Эффекта не замечаем - предполагаю что компилер оптимизирует (означает что оптимизировать там нечего ;-) )<br /><br />Ок. Переходим к отключению фич языка C++ - это должно быть интереснее, ибо размером больше (наверное за счет них)<br /><br />Первая - RTTI<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ gcc try_me.c -o try_c<br />[snikulov@solarwind c_vs_cpp]$ g++ try_me.cpp <span style="color: rgb(0, 0, 153);">-fno-rtti</span> -o try_cpp<br />[snikulov@solarwind c_vs_cpp]$ ls -la<br />total 32<br />drwxrwxr-x. 2 snikulov snikulov 4096 2009-06-08 23:38 .<br />drwxrwxr-x. 6 snikulov snikulov 4096 2009-06-08 22:41 ..<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">4728</span> 2009-06-08 23:38 try_c<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">5047</span> 2009-06-08 23:38 try_cpp<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.c<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.cpp<br /><br /></span>Никакго эффекта. Угу.<br /><br />Переходим к другой фиче - исключения<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ g++ try_me.cpp <span style="color: rgb(0, 0, 153);">-fno-exceptions</span> -o try_cpp<br />[snikulov@solarwind c_vs_cpp]$ ls -la<br />total 32<br />drwxrwxr-x. 2 snikulov snikulov 4096 2009-06-08 23:39 .<br />drwxrwxr-x. 6 snikulov snikulov 4096 2009-06-08 22:41 ..<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">4728</span> 2009-06-08 23:38 try_c<br />-rwxrwxr-x. 1 snikulov snikulov <span style="color: rgb(255, 0, 0);">4818</span> 2009-06-08 23:39 try_cpp<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.c<br />-rw-rw-r--. 1 snikulov snikulov 55 2009-06-08 22:43 try_me.cpp<br />[snikulov@solarwind c_vs_cpp]$<br /></span><br />Уже лучше<br />4728 vs. 4818<br /><br />Что же там такое - смотрим (я взял опцию -d ибо по остальному большого различия не увидел... хотя я конечно лукавлю - сами посмотрите)<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ readelf -d try_c<br /><br />Dynamic section at offset 0x4ec contains 20 entries:<br /> Tag Type Name/Value<br />0x00000001 (NEEDED) Shared library: [libc.so.6]<br />0x0000000c (INIT) 0x8048274 <br /></span><span style="font-weight: bold;font-size:85%;" >-= skip =-<br /></span><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ readelf -d try_cpp</span><br /><br /><span style="font-weight: bold;font-size:85%;" >Dynamic section at offset 0x52c contains 23 entries:<br /> Tag Type Name/Value<br />0x00000001 (NEEDED) Shared library: [libstdc++.so.6]<br />0x00000001 (NEEDED) Shared library: [libm.so.6]<br />0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]<br />0x00000001 (NEEDED) Shared library: [libc.so.6]<br />0x0000000c (INIT) 0x80482c0<br />-= skip =-<br />snikulov@solarwind c_vs_cpp]$<br /></span><br />Ну... Вообще бардак<br /><br />Полагаем и время выполнения из-за этого должно немного проседать.<br />Проверяем (используем не совсем точный метод расчета):<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ time ./try_c<br /><br />real 0m0.002s<br />user 0m0.000s<br />sys 0m0.001s<br />[snikulov@solarwind c_vs_cpp]$ time ./try_cpp<br /><br />real 0m0.005s<br />user 0m0.001s<br />sys 0m0.002s<br />[snikulov@solarwind c_vs_cpp]$<br /></span><br /><br />Ну приблизительно. А почему? Ну, как нетрудно догадаться, видимо из-за библиотек?<br />Проверим<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ strace ./try_c<br />execve("./try_c", ["./try_c"], [/* 53 vars */]) = 0<br />brk(0) = 0x98aa000<br />access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)<br />open("/etc/ld.so.cache", O_RDONLY) = 3 <br />fstat64(3, {st_mode=S_IFREG|0644, st_size=137461, ...}) = 0 <br />mmap2(NULL, 137461, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f6f000 <br />close(3) = 0 <br />open("/lib/libc.so.6", O_RDONLY) = 3 <br />read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\253\227\0004\0\0\0\304"..., 512) = 512<br />fstat64(3, {st_mode=S_IFREG|0755, st_size=1803388, ...}) = 0 <br />mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f6e000 <br />mmap2(0x964000, 1513768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x964000 <br />mprotect(0xacf000, 4096, PROT_NONE) = 0 <br />mmap2(0xad0000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16b) = 0xad0000<br />mmap2(0xad3000, 10536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xad3000 <br />close(3) = 0 <br />mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f6d000 <br />set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f6d6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 <br />mprotect(0xad0000, 8192, PROT_READ) = 0 <br />mprotect(0x960000, 4096, PROT_READ) = 0 <br />munmap(0xb7f6f000, 137461) = 0 <br />exit_group(0) = ? <br /><br /></span>C++ версия должна быть "пожирнее"<br /><br /><span style="font-weight: bold;font-size:85%;" >[snikulov@solarwind c_vs_cpp]$ strace ./try_cpp <br />execve("./try_cpp", ["./try_cpp"], [/* 53 vars */]) = 0 <br />brk(0) = 0x9e42000 <br />access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <br />open("/etc/ld.so.cache", O_RDONLY) = 3 <br />fstat64(3, {st_mode=S_IFREG|0644, st_size=137461, ...}) = 0 <br />mmap2(NULL, 137461, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb8097000 <br />close(3) = 0 <br />open("/usr/lib/libstdc++.so.6", O_RDONLY) = 3 <br />read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\3523\0004\0\0\0\360"..., 512) = 512 <br />mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8096000 <br />fstat64(3, {st_mode=S_IFREG|0755, st_size=950040, ...}) = 0<br />mmap2(0x2fa000, 977644, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2fa000<br />mmap2(0x3dd000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe2) = 0x3dd000<br />mmap2(0x3e3000, 23276, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3e3000<br />close(3) = 0<br />open("/lib/libm.so.6", O_RDONLY) = 3<br />read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`$\256\0004\0\0\0<"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=206204, ...}) = 0 mmap2(0xadf000, 159872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xadf000 mmap2(0xb05000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25) = 0xb05000 close(3) = 0 open("/lib/libgcc_s.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@O&\0004\0\0\0P"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=172840, ...}) = 0 mmap2(0x263000, 174312, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x263000 mmap2(0x28d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x29) = 0x28d000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\253\227\0004\0\0\0\304"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1803388, ...}) = 0 mmap2(0x964000, 1513768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x964000 mprotect(0xacf000, 4096, PROT_NONE) = 0 mmap2(0xad0000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16b) = 0xad0000 mmap2(0xad3000, 10536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xad3000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8095000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8094000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb8095b20, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0<br />mprotect(0xad0000, 8192, PROT_READ) = 0<br />mprotect(0xb05000, 4096, PROT_READ) = 0<br />mprotect(0x3dd000, 16384, PROT_READ) = 0<br />mprotect(0x960000, 4096, PROT_READ) = 0<br />munmap(0xb8097000, 137461) = 0<br />exit_group(0) = ?<br />[snikulov@solarwind c_vs_cpp]$<br /><br /></span>Ну вообщем понятно...<br />Оптимизировать непросто. Тут всегда балансируешь на гранях. Когда-то приходит время выбирать. Или быстро и красиво запрограммировать (конструкторы, деструкторы, перегрузки, и т.д.), или уместить все это в железку, чтобы приемлемо работало.<br /><br />Пошел искать опцию как отключить libm из зависимостей.<br />-Wl,-nostdlib не помогло.<br /><br />P.S.<br />В рассылке по Embedded Linux Developers Kit мужик задал вопрос - а кто-нибудь перл собирал для ресурсо-ограниченного оборудования?<br />Видимо не очень ограничен, если спрашивает.Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-36744777189960753072009-05-31T09:09:00.002+11:002009-05-31T09:18:21.112+11:00крушение иллюзий...Дмал хоть в силиконовой долине будет _быстрый_ беспроводной интернет. Как бы не так!!! Intel C/C++ Compiler for Linux качается уже 8 часов!!! И конца на видно...<br /><br />В то же время Sun Developer Express вытянул за 4 часа.<br /><br />Не совсем ясно почему так.<br />Результат трассировки говорит что интел вроде ближе<br /><br />snikulov@linux-m0ft:/opt> traceroute www.intel.com<br />traceroute to www.intel.com (209.234.250.178), 30 hops max, 40 byte packets using UDP<br /> 1 10.10.10.1 (10.10.10.1) 152.980 ms 145.084 ms 147.297 ms<br /> 2 192.168.0.1 (192.168.0.1) 177.922 ms 175.383 ms 184.031 ms<br /> 3 bras6-l0.pltnca.sbcglobal.net (151.164.184.82) 188.939 ms 184.575 ms 178.264 ms<br /> 4 76.246.22.2 (76.246.22.2) 170.945 ms 167.853 ms 163.914 ms<br /> 5 151.164.93.237 (151.164.93.237) 155.814 ms 150.163 ms 142.610 ms<br /> 6 151.164.171.196 (151.164.171.196) 135.924 ms 130.859 ms 123.636 ms<br /> 7 asn3356-level3.eqsjca.sbcglobal.net (151.164.250.138) 31.344 ms 35.329 ms 47.115 ms<br /> 8 ae-13-69.car3.SanJose1.Level3.net (4.68.18.5) 47.623 ms ae-33-89.car3.SanJose1.Level3.net (4.68.18.133) 181.125 ms ae-13-69.car3.SanJose1.Level3.net (4.68.18.5) 89.511 ms<br /> 9 COTENDO.car3.SanJose1.Level3.net (4.71.112.50) 133.830 ms 38.267 ms 85.974 ms<br />10 te3-1.bbr1.lax1.bandcon.com (216.151.179.181) 123.315 ms 140.327 ms 137.079 ms<br />11 te3-2.bbr1.phx1.bandcon.com (216.151.179.197) 130.389 ms 125.480 ms 118.946 ms<br />12 te8-1.bbr1.dfw1.bandcon.com (216.151.179.210) 111.088 ms 104.126 ms 96.747 ms<br />13 209.234.250.178 (209.234.250.178) 89.029 ms 80.981 ms 76.275 ms<br />snikulov@linux-m0ft:/opt><br /> <br />snikulov@linux-m0ft:/opt> traceroute www.sun.com<br />traceroute to www.sun.com (72.5.124.61), 30 hops max, 40 byte packets using UDP<br /> 1 10.10.10.1 (10.10.10.1) 240.749 ms 240.361 ms 232.654 ms <br /> 2 192.168.0.1 (192.168.0.1) 326.406 ms 333.125 ms 329.258 ms <br /> 3 bras6-l0.pltnca.sbcglobal.net (151.164.184.82) 344.893 ms 337.704 ms 348.631 ms<br /> 4 64.164.107.1 (64.164.107.1) 319.859 ms 334.167 ms 335.374 ms <br /> 5 * 69.220.8.95 (69.220.8.95) 691.902 ms 684.616 ms <br /> 6 * * * <br /> 7 asn3561-savvis.eqsjca.sbcglobal.net (151.164.89.134) 276.214 ms 136.078 ms 413.023 ms<br /> 8 208.175.172.10 (208.175.172.10) 432.797 ms 430.899 ms 424.730 ms <br /> 9 border2.te7-1-bbnet1.sfo002.pnap.net (63.251.63.17) 438.945 ms 438.397 ms 432.441 ms<br />10 * * * <br />11 * * * <br />12 * * * <br />13 * * * <br />14 * * * <br />15 * * *<br />16 * * *<br />17 * * *<br />18 * * *<br />19 * * *<br />20 * * *<br />21 * * *<br />22 * * *<br />23 * * *<br />24 * * *<br />25 * * *<br />26 * * *<br />27 * * *<br />28 * * *<br />29 * * *<br />30 * * *Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com3tag:blogger.com,1999:blog-251359507903297281.post-73633344909616188242009-05-24T17:56:00.004+11:002009-05-24T18:13:24.978+11:00размер имеет значение...Партия поставила задачу сократить размер инсталляции встроенного обеспечения вдвое...<br /><br />Поковырялись в <a href="http://www.denx.de/wiki/DULG/ELDK">ELDK</a>, немножко сократили за счет реорганизации инсталляции, но все равно не хватает.<br /><br />Возникла мысль выкинуть C++ рантаймовую либу.<br />Для этого необходимо переписать парочку модулей на C.<br /><br />Начал смотреть библиотеки для C.<br /><br />Интересными для исследования показались:<br /><ul><li>A Simple Generic Library for C (<a href="http://sglib.sourceforge.net/">http://sglib.sourceforge.net/</a>)</li><li>C Algorithms (<a href="http://c-algorithms.sourceforge.net/">http://c-algorithms.sourceforge.net/</a>)</li><li>c-generic-library (<a href="http://code.google.com/p/c-generic-library/">http://code.google.com/p/c-generic-library/</a>)</li></ul><br />Может еще кто что подскажет? :-)Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-4211874142213874312009-05-23T19:39:00.002+11:002009-05-23T19:42:47.709+11:00мысли на ночь :)Что-то возникло желание прикупить нетбук Eee Pc с Linux на борту.<br />Усиленно с ним борюсь :)))<br />Приятно, что он так долго живет без питания...Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-27848626938749387272009-05-22T18:18:00.002+11:002009-05-22T18:30:59.246+11:00Странное стечение обстоятельств и необычных местНу вот, скажете, то ничего нет в блоге, а то по нескольку сообщений в день...<br />Просто давление времени снизилось ("но график, у меня есть график") и вот я пишу ни о чем :-)<br /><br />Во-первых - тренирую русский язык - стал замечать, что делаю ошибки при письме<br />Во-вторых - в <a href="http://twitter.com/snikulov">твитере</a> так много не напишешь<br /><br />Да, о чем это я?<br /><br />Собственно на выходных был в <a href="http://en.wikipedia.org/wiki/Redwood_Regional_Park">Redwood парке</a> и не подазревал, что рядом с ним <a href="http://en.wikipedia.org/wiki/Hans_Reiser">Ганс Рейзер</a> (создатель <a href="http://en.wikipedia.org/wiki/ReiserFS">ReiserFS</a> для <a href="http://linux.com/">Linux</a>) закопал убиенную им жену - Нину.<br /><br />Вот где приходиться бывать иногда...Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0tag:blogger.com,1999:blog-251359507903297281.post-15564067672080730522009-05-22T18:09:00.002+11:002009-05-22T18:17:54.015+11:00Прибыль ни на чемПовелся я, значит, уже не помню сколько времени назад на Гулевский адсенс.<br />И добавил его себе в блог ни на что особо не надеясь :-)<br />Ну есть и есть - вроде не перегрузил блог этими картинками<br />Сегодня решил посмотреть - глядь, а там уже как бы и 5 долларов 12 центов!!!<br />О чем это говорит?<br />Думаете о том что кто-то кликает по ссылкам?<br />Ну вероятно... Однако, на самом деле о том что через лет 20 я получу 100 баксов ни за что :-)<br /><br />Удачи!Сергейhttp://www.blogger.com/profile/10973621537470546724noreply@blogger.com0