<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1793630632384489392</id><updated>2012-02-12T17:29:52.606+04:00</updated><category term='icq'/><category term='jokes'/><category term='erlang'/><category term='maven'/><category term='ar5418'/><category term='freedom'/><category term='fedora10'/><category term='firefox'/><category term='google docs'/><category term='fedora9'/><category term='windows xp'/><category term='dir-300'/><category term='ati'/><category term='haskell'/><category term='openvpn'/><category term='logwatch'/><category term='.net'/><category term='skype2'/><category term='mldonkey'/><category term='google toolbar'/><category term='openoffice.org'/><category term='fedora8'/><category term='asp'/><category term='virtualbox'/><category term='statistic'/><category term='xmpp'/><category term='java'/><category term='jabber'/><category term='keyboard mapping'/><category term='talk'/><category term='security'/><category term='radeonhd'/><category term='fedora12'/><category term='openssl'/><category term='cloud'/><category term='mmorpg line'/><category term='sendmail'/><category term='skype3'/><category term='linux bugs'/><category term='vlc'/><category term='hp 1020'/><category term='trac'/><category term='android'/><category term='google bugs'/><category term='fedora7'/><category term='fedora11'/><category term='apache22'/><category term='ubuntu'/><category term='procmail'/><category term='google'/><category term='svn'/><category term='windows vista'/><category term='value'/><category term='c++interacting'/><category term='hr'/><category term='m3n'/><category term='livna'/><category term='fedora6'/><category term='google talk'/><category term='im'/><category term='pidgin'/><category term='skype'/><category term='fedora'/><category term='hacking'/><category term='iGoogle'/><category term='wine'/><category term='subjects'/><category term='spellcheck'/><category term='gnome'/><category term='leopard'/><category term='python'/><category term='monitor'/><category term='telnet'/><category term='debian'/><category term='languageobjects'/><category term='off topic'/><category term='code'/><category term='livecd'/><category term='ipc'/><category term='personal-fm'/><category term='hardware'/><category term='linux'/><category term='thunderbird2'/><category term='hibernate'/><category term='cvs'/><category term='macbook pro'/><category term='politics'/><category term='gis'/><category term='mac os x'/><category term='blog'/><category term='vnc'/><category term='literature'/><category term='C#'/><category term='formail'/><category term='languagefuture'/><category term='rhythmbox-shoutcast'/><category term='imap'/><category term='kernel'/><category term='google reader'/><category term='macports'/><category term='lcd'/><category term='gmail'/><category term='wga'/><title type='text'>Журнал рабочих черновиков</title><subtitle type='html'>Наброски, заметки, статьи помогающие сделать правильный выбор. Обзор современных технологий.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://axet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default?start-index=101&amp;max-results=100'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>321</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2895239553277546082</id><published>2012-02-12T17:29:00.001+04:00</published><updated>2012-02-12T17:29:52.615+04:00</updated><title type='text'>Android Settings Pane</title><content type='html'>Панель настроек в Андройде не самая удобная и доступная.&lt;br /&gt;
&lt;br /&gt;
Потому на своем телефоне я создал отдельную рабочую область с настройками.&lt;br /&gt;
&lt;br /&gt;
Кому интересно как она выглядит, прикладываю скриншот.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-1vZMEbL2fzs/Tze-xkf1UAI/AAAAAAAAHk8/bpJzx5sVVXU/s1600/Screenshot_2012-02-12-17-29-00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-1vZMEbL2fzs/Tze-xkf1UAI/AAAAAAAAHk8/bpJzx5sVVXU/s1600/Screenshot_2012-02-12-17-29-00.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2895239553277546082?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2895239553277546082/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/02/android-settings-pane.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2895239553277546082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2895239553277546082'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/02/android-settings-pane.html' title='Android Settings Pane'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1vZMEbL2fzs/Tze-xkf1UAI/AAAAAAAAHk8/bpJzx5sVVXU/s72-c/Screenshot_2012-02-12-17-29-00.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6860323404248333630</id><published>2012-02-10T15:28:00.003+04:00</published><updated>2012-02-10T15:38:07.518+04:00</updated><title type='text'>Skype hack 3</title><content type='html'>Опять увели скайп аккаунт.&lt;br /&gt;
&lt;br /&gt;
Как же это заебало. Сколько можно твердить этой тех поддержки что бы они прекратили менять мой почтовый адрес на адрес злоумышлинников?&lt;br /&gt;
&lt;br /&gt;
Знаете у меня тонна всяких интернет аккаунтов. Почтовых, банковских, игровых в том чилсе стим и ориджин. Ворут только скайп.&lt;br /&gt;
&lt;br /&gt;
Причем ворут в наглую - пишут в поддержку на восстановление достуапа и те уже 3 раз за последние пол года отдают доступ. Причем в этот раз соовершенно внаглую - при активном соединении, мой клиент отключился и отказался включатся повторно сославшись что пароль изменен.&lt;br /&gt;
&lt;br /&gt;
Воровство случилось по той же схеме что и во-второй раз. Видимо есть какая-то уезвимость в службах Скайп+Гугл domains.&lt;br /&gt;
&lt;br /&gt;
Я еще раз проверил все логи. Никто не заходил под моим имейлом, не заходил на доменную службу. Однако следеды ведут куда-то между этими службами.&lt;br /&gt;
&lt;br /&gt;
Похоже эта уезвимость довольно популярная и все кул-хацкеры ее эксплоатируют.&lt;br /&gt;
&lt;br /&gt;
Сначало меняют почту с @gmail.com на мой личный домен @axet.ru стоящей google domains + &amp;nbsp;freedns. Потом меняют второй раз пароль и логин.&lt;br /&gt;
&lt;br /&gt;
Первая смена происодит с легкой руки поддержки скайпа. Заебали ублюдки в поддержке скайпа.&lt;br /&gt;
&lt;br /&gt;
Потом, видимо, воруется токен сброса пароля или само письмо и сбрасывается пароль второй раз.&lt;br /&gt;
&lt;br /&gt;
К сожалению проверить и уточнить информацию по схеме нет возможности. Так как поддержка и служба безопасности скайпа ублюдки не желают сотрудничать и расскрывать шаги и ИП адреса хакеров. Придется все искать самостоятельно.&lt;br /&gt;
&lt;br /&gt;
Это дурдом!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-VWQ0hYkW0ak/TzT_WvHPnEI/AAAAAAAAHg0/e34Lpkp9tk4/s1600/Screen+Shot+2012-02-10+at+15.25.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-VWQ0hYkW0ak/TzT_WvHPnEI/AAAAAAAAHg0/e34Lpkp9tk4/s640/Screen+Shot+2012-02-10+at+15.25.02.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-B30tdCV9abw/TzT_XE6K4TI/AAAAAAAAHg4/aTdtx_zNcO0/s1600/Screen+Shot+2012-02-10+at+15.25.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="392" src="http://3.bp.blogspot.com/-B30tdCV9abw/TzT_XE6K4TI/AAAAAAAAHg4/aTdtx_zNcO0/s640/Screen+Shot+2012-02-10+at+15.25.08.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-50VmFogaJ8I/TzT_XjdbwHI/AAAAAAAAHhA/FhP47ThxSf8/s1600/Screen+Shot+2012-02-10+at+15.25.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://1.bp.blogspot.com/-50VmFogaJ8I/TzT_XjdbwHI/AAAAAAAAHhA/FhP47ThxSf8/s640/Screen+Shot+2012-02-10+at+15.25.14.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span id="goog_1857189002"&gt;&lt;/span&gt;&lt;span id="goog_1857189003"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6860323404248333630?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6860323404248333630/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/02/skype-hack-3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6860323404248333630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6860323404248333630'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/02/skype-hack-3.html' title='Skype hack 3'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VWQ0hYkW0ak/TzT_WvHPnEI/AAAAAAAAHg0/e34Lpkp9tk4/s72-c/Screen+Shot+2012-02-10+at+15.25.02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-9161075047525578659</id><published>2012-02-09T23:48:00.001+04:00</published><updated>2012-02-09T23:48:19.399+04:00</updated><title type='text'>Next Android</title><content type='html'>Чем бы я руководствовался при выборе следующего телефона на андроиде, или чего мне ненравится в Nexus S?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Magnometer - или по простому компас. Позицию определяет из под палки, google sky с трудом понимает где находится&lt;/li&gt;
&lt;li&gt;Нет поддержки two way call recording&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Links&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://forum.xda-developers.com/showthread.php?t=993793"&gt;http://forum.xda-developers.com/showthread.php?t=993793&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nathanielkh.wordpress.com/android-app/record-my-call/record-my-call-phone-compatibility-list/"&gt;http://nathanielkh.wordpress.com/android-app/record-my-call/record-my-call-phone-compatibility-list/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-9161075047525578659?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/9161075047525578659/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/02/next-android.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9161075047525578659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9161075047525578659'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/02/next-android.html' title='Next Android'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4217884504455927582</id><published>2012-02-07T13:20:00.001+04:00</published><updated>2012-02-07T16:58:59.794+04:00</updated><title type='text'>Человек 2.0</title><content type='html'>Я подумал какими же мы рождаемся криворукими, даже ходить не умеем. Почему бы мы сразу после рождения нам уметь ходить, танцевать, разговаривать на нескольких языках? Почему мы сразу после рождения не знаем то что знали наши родители?&lt;br /&gt;
&lt;br /&gt;
Выглядит это так, что природа просто не додумала человека и сделала свой первый черновик. Не совершенный, не приспособленный к аналитическому мылению и явно ее следующий шаг будет новая более совершенная версия человека 2.0, лет эдак через миллион.&lt;br /&gt;
&lt;br /&gt;
Это очивидно, что если бы природа нас задумала изначально, как существ с разумом и аналитическими способностями, она бы заложила возможность передавать знания между поколениями на уровне генов.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
В доказательство этого приведу простое рассуждение.&lt;br /&gt;
&lt;br /&gt;
Раз на генетическом уровне передается только знание как сосать сиську, есть еду и размножаться. То не сложно сделать вывод - природа не рассчитывала, что знания накопленные в течении жизни предыдущих поколений могут пригодится в следующих поколениях и эти знания теряются на биологическом уровне.&lt;br /&gt;
&lt;br /&gt;
То есть средняя продолжительность жизни тогда была 30 лет, через 30 лет все равно там где была еда еды не будет. Тех тварий от которых нужно убегать убегать будет не нужно, а траву которая была ядовита 30 лет назад - через 30 все равно вытопчут. Потому природа решила - останется только передавать самые важные умения - размножаться и жрать, а остальное все равно не пригодится.&lt;br /&gt;
&lt;br /&gt;
То есть следующая версия человека будет не с функцией хождения по воде, чего ждут многие, а должна поддерживать передачу знаний на уровне генов!&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b id="internal-source-marker_0.3787559219636023"&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Если допустить, что жизнь человеческая может управляться разумом, -- то&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;уничтожится возможность жизни.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: right;"&gt;
&lt;b&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Л.Н. Толстой&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4217884504455927582?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4217884504455927582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/02/20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4217884504455927582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4217884504455927582'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/02/20.html' title='Человек 2.0'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4254545095762373063</id><published>2012-01-25T06:50:00.004+04:00</published><updated>2012-01-26T19:41:39.696+04:00</updated><title type='text'>Pirating is illegal? Since then?!</title><content type='html'>Столько копий сломано вокруг темы компьютерного пиратсва. Поднимаются темы копирайта, передачи права, легального и не легального обмена, копилефта.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Все это можно найти &amp;nbsp;в интернете, почитать - очень много хороших идей.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Однако, бизнес в очередной раз все переврал. Сказал - защищать авторов, а на деле защищает свои интересы.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Не хочу писать много воды. А просто посоветовать свой выход из ситуации, мое видение. Если мои идеи (или я это тоже у кого то украл, надо бы проверить) это случится на практике то будут довольны все и бизнес и пользователи.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Идея простая - сделать незаконным, уголовным преступлением продажу всех форм интелектуальной собственности, музыки, фильмов, программ, игр и всего прочьего за реальные деньги. То есть запретить продажу того что для воспроизводства (копии) не требует серезных материальных затрат.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Да, я хочу что бы купить песню за 1 цент было уголовным делом, и сайт продавший эту песню с выгодо получателями отправлялся в первом случае в бан, а во втором случае на карторгу без интернета.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Что бы это не привело к уничтожению всей индустрии целиком, необходимо ввести новые формы отношений - понятие электронной-интеллектуальной валюты. Это электронная форма денег будет позволять совершать платежы в рамках описанных отношений.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Все легальные операции с интелектуальной собственностью должны проходить исключительно в электонной валюте. Захотел купить песню в интернет на страницу своего кошелька и за 100 едениц покупай песню.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Где взять эту валюту?&lt;br /&gt;
&lt;br /&gt;
Сделать биржу, на котороый будут проходить торги электронной валюты в реальную валюту. На этой бирже можно обменить деньги на электронные деньги на открытом рынке. На этой бирже владельцы счетов - компании индустрии полуачют от вас реальный деньги в обмен на электронные, на которые вы потом купите их продукт.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Третий шаг сделать эмисию электронных денег. Электронные деньги вы можете не только обменять на бирже но и получить их со своего веб сайта за высокую посещяемость \ клики.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Главные плюсы от этой схемы:&lt;br /&gt;
&lt;br /&gt;
- рынок цен должен урегулировать, не будет такой большой разницы в цене для разных стран и разных достатков&lt;br /&gt;
&lt;br /&gt;
- цены на продукты упадут (думаю раз в 50. песня станет стоить не 99 центов а 0.02 цента), станут более доступные и их продажи. А продажи возврастут, так как цена стнет просто смешной. Думаю что эта индустрия потеряет в прибыли раза 2 бюджета, но станет более доступной и более полезной для общества.&lt;br /&gt;
&lt;br /&gt;
- материальные ценности, такие как еда, бензин, золото перестанут конкурировать с виртуальными элементарно воспроизводятся и не должны быть конкурены реальным вещам.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Это черновик, не судите строго.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4254545095762373063?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4254545095762373063/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/why-pirating-is-illegal.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4254545095762373063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4254545095762373063'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/why-pirating-is-illegal.html' title='Pirating is illegal? Since then?!'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2632639947568295094</id><published>2012-01-22T22:07:00.003+04:00</published><updated>2012-01-22T22:20:25.036+04:00</updated><title type='text'>bash reload feature</title><content type='html'>Оказывается что после изменения содержимого bash &amp;nbsp;скрипта на диске исполняемый скрипт перегружается и продолжает исполнение с предыдущий позиции.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Исполнение файла происходит даже в том случае если новый замещенный файл по старой позиции содержит комментарий или другую функцию испольнение которой не должно происходить при нормальном запуске.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;222.txt&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;u() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; cat 333.txt &amp;gt; 222.sh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; sleep 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;u&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-style: italic; font-weight: bold;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="font-style: italic; font-weight: bold;"&gt;
333.txt&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;u() {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; cat 333.txt &amp;gt; 222.sh&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#####################&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; sleep 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;u&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;i&gt;#&amp;nbsp;cp 222.txt 222.sh; bash 222.sh&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;222.sh: line 10: eep: command not found&lt;/i&gt;&lt;/div&gt;
&lt;i&gt;
&lt;div&gt;
222.sh: line 11: syntax error near unexpected token `}'&lt;/div&gt;
&lt;div&gt;
222.sh: line 11: `}'&lt;/div&gt;
&lt;div&gt;
#&amp;nbsp;&lt;/div&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2632639947568295094?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2632639947568295094/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/bash-reload-feature.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2632639947568295094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2632639947568295094'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/bash-reload-feature.html' title='bash reload feature'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8588896817501768013</id><published>2012-01-22T21:51:00.002+04:00</published><updated>2012-01-22T21:52:03.442+04:00</updated><title type='text'>endless bash script</title><content type='html'>&lt;br /&gt;
&lt;b&gt;&lt;i&gt;111.sh&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;update() {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; echo "echo -n ." &amp;gt;&amp;gt; 111.sh&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; echo "update" &amp;gt;&amp;gt; 111.sh&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; sleep 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo -n .&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;update&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8588896817501768013?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8588896817501768013/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/endless-bash-script.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8588896817501768013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8588896817501768013'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/endless-bash-script.html' title='endless bash script'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8043543289077653262</id><published>2012-01-22T00:38:00.000+04:00</published><updated>2012-01-22T00:38:09.943+04:00</updated><title type='text'>Skype security breach 2</title><content type='html'>Опять, второй раз за пол года, украли мой аккаунт скайпа.&lt;br /&gt;
&lt;br /&gt;
По той же схеме. Пишут письмо в тех поддержку - смените пожалуйста регистрационный имейл. И те, торопятся его меняют.&lt;br /&gt;
&lt;br /&gt;
О чем это говорит?&lt;br /&gt;
&lt;br /&gt;
Только о том что если ваши данные, деньги на счету, контакты, переписка, не прочитанные сообщения важны вам (а так же если они нужны кому-то еще) то не пользуйтесь скайпом.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
В этот раз схема чуть изменилась.&lt;br /&gt;
&lt;br /&gt;
Я так же как и в первый раз получил сообщение о том что поддержка поменяла мой регистрационный аккаунт, но кроме этого получил второе письмо что пароль был обновлен.&lt;br /&gt;
&lt;br /&gt;
Разница с первым слуачем в &lt;a href="http://axet.blogspot.com/2011/11/skype-security-issues.html"&gt;ноябре&lt;/a&gt;, в том, что теперь мой аккаунт был зарегистирован на @gmail.com. В то время как первый раз на мой персональный домен @axet.ru&lt;br /&gt;
&lt;br /&gt;
Пока не пойму где тут пробелма. Первое о очивидное - фигли поддержка меняет так легко адреса. Второе - зачем понадобилось менять сначало на @axet.ru потом уже окончательно воровать.&lt;br /&gt;
&lt;br /&gt;
Хостинг @axet.ru держит гугл через наследование доменных имен и тот и другой на серверах гугла. Хостин dns имен http://freedns.afraid.org. Есть предположение что письма с активацией воруются через поисинг dns или через ошибку админского доступа на freedns.afraid.org. Но минуту назад я заходил проверить - все настройки на месте. И зашел я проверить их ровно в ту минуту когда получил это пиьсмо "счастья". Похоже что не там проблема.&lt;br /&gt;
&lt;br /&gt;
Но даже если смогли воровать всю переписку через воровство домена, тогда не понятно почему не украли все остальное. У меня полно поролей, не только от этого скайпа. Есть более важные другие службы.&lt;br /&gt;
&lt;br /&gt;
И кроме того, что не менее важно, не понятно почему письма не содержат информации о том на какой адрес меняется имя скайп. Так как если вы меняете имейл через веб интерфейс - то вам приходит соовершенно другое письмо и в нем указан этот адрес. А сейчас очивидно что это сделал поддержка, и очивидно есть какой-то другой хитрый способ воровать толи активацию то ли ключи.. Черт его знает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Вообщем пока буду думать, надеюсь в этот раз поддержка скайпа расскроет данные вора.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-dwyTC7MvdUk/TxsfHki2GWI/AAAAAAAAHMY/twcdKDc-Vog/s1600/Screen+Shot+2012-01-22+at+00.22.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="380" src="http://3.bp.blogspot.com/-dwyTC7MvdUk/TxsfHki2GWI/AAAAAAAAHMY/twcdKDc-Vog/s640/Screen+Shot+2012-01-22+at+00.22.28.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Второе письмо:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-CQB13P9TvDg/TxsfIxcg3SI/AAAAAAAAHMg/Lk2RhOJykVk/s1600/Screen+Shot+2012-01-22+at+00.22.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="386" src="http://2.bp.blogspot.com/-CQB13P9TvDg/TxsfIxcg3SI/AAAAAAAAHMg/Lk2RhOJykVk/s640/Screen+Shot+2012-01-22+at+00.22.39.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8043543289077653262?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8043543289077653262/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/skype-security-breach-2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8043543289077653262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8043543289077653262'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/skype-security-breach-2.html' title='Skype security breach 2'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-dwyTC7MvdUk/TxsfHki2GWI/AAAAAAAAHMY/twcdKDc-Vog/s72-c/Screen+Shot+2012-01-22+at+00.22.28.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8342437844590981333</id><published>2012-01-02T20:31:00.001+04:00</published><updated>2012-01-02T20:31:31.545+04:00</updated><title type='text'>samba on debian 6</title><content type='html'>&lt;br /&gt;
Так как пришлось перестанавливать сервер восстановил конфиги самбы.&lt;br /&gt;
&lt;br /&gt;
Какой функционал мне требуется?&lt;br /&gt;
&lt;br /&gt;
- Хранить файлы для интернета&lt;br /&gt;
- Хранить файлы личные: фото, проекты.&lt;br /&gt;
&lt;br /&gt;
Потому настройка довольно простая. Но с небольшим удобным дополнением - файлы открыты на запись только для тех кто хочет эти файлы изменить. Причем защита чисто от случайной модификации а не с правами пользователей.&lt;br /&gt;
&lt;br /&gt;
Потому схема простая. Если заходите на сервер по пути \\mini.local\www попадаете в папку только для чтения - ее видно всем, без логина и пароля. А если хотите поменять файлы заходите по ссылке \\mini.local\www-rw.&lt;br /&gt;
&lt;br /&gt;
Все просто.&lt;br /&gt;
&lt;br /&gt;
Еще небольшой фокус. Что бы вирусы и просто случайно никто не удалил файлы папка www-rw невидимая.&lt;br /&gt;
&lt;br /&gt;
Вот конфигруационный файл:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/samba/smb.conf&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;i&gt;&lt;b&gt; &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;map to guest = bad user&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;guest ok = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;guest account = nobody&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[www]&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; path = /mnt/shared/www&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; writeable = no&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; browseable = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; guest ok = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; force user = nobody&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[www-rw]&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; path = /mnt/shared/www&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; writeable = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; browseable = no&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; guest ok = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; force user = nobody&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[local]&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; path = /mnt/shared/local&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; writeable = no&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; browseable = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; guest ok = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; force user = nobody&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[local-rw]&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; path = /mnt/shared/local&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; writeable = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; browseable = no&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; guest ok = yes&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; force user = nobody&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8342437844590981333?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8342437844590981333/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/samba-on-debian-6.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8342437844590981333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8342437844590981333'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/samba-on-debian-6.html' title='samba on debian 6'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2962011412163577006</id><published>2012-01-02T19:15:00.002+04:00</published><updated>2012-01-02T19:28:14.710+04:00</updated><title type='text'>OpenVPN for Debian 6</title><content type='html'>Продолжая серию статей о том как настроить openvpn на разных дистибутивах.&lt;br /&gt;
&lt;br /&gt;
Последняя &lt;a href="http://axet.blogspot.com/2010/03/openvpn-for-fedora-12.html" target="_blank"&gt;инструкция&lt;/a&gt; была для Fedora 12, которая была установлена на моем сервере. К сожалению Fedora перестала выпускать сборки для PowerPC и я вынужен был перейти на .deb based дистрибутив.&lt;br /&gt;
&lt;br /&gt;
Настройку я копирую, сохраня авторизацию по имени \ паролю. Использовать сертификаты слижком усложнет настройку и она не удобна в дальнейшем. &lt;br /&gt;
&lt;br /&gt;
Как настроить openvpn&amp;nbsp; на сервере не сломая его?&lt;br /&gt;
&lt;br /&gt;
Первое что нужно сделать это установить требуемые пакеты.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# apt-get install openvpn bridge-utils&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Следующий шаг - создать ключи.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd /etc/openvpn&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mkdir keys&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd keys&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl dhparam -out dh1024.pem 1024&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl genrsa -des3 -out ca.key 4096&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl req -new -x509 -days 365 -key ca.key -out ca.crt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl genrsa -des3 -out server.key 4096&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl req -new -key server.key -out server.csr&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cat server.key | openssl rsa -text &amp;gt; server.txt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Следующее: обновить файл /etc/default/openvpn&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/default/openvpn&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[...]&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;OPTARGS="--script-security 2"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Затем настроить интерфейсы.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/network/interfaces&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto lo&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;iface lo inet loopback&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto br0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;iface br0 inet dhcp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; pre-up /usr/sbin/openvpn --mktun --dev tap0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; post-down /usr/sbin/openvpn --rmtun --dev tap0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; bridge_ports eth0 tap0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
И файл конфига сервера.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/openvpn/tap0.conf&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;proto tcp-server&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mode server&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tls-server&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dev tap0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;plugin /usr/lib/openvpn/plugin/lib/openvpn-auth-pam.so login&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;client-cert-not-required&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;username-as-common-name&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ca keys/ca.crt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cert keys/server.crt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;key keys/server.txt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dh keys/dh1024.pem&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;client-to-client&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;duplicate-cn&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;keepalive 10 120&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;comp-lzo&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;persist-key&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;persist-tun&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;status openvpn-status.log&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;verb 3&lt;/span&gt;&lt;span class="pln"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span class="pln"&gt;up &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;usr&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;bin&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;openvpn&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;upnp&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;up&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sh&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span class="pln"&gt;down &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;usr&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;bin&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;openvpn&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;upnp&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;down&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sh&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл для клиента:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;client.conf&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;client&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dev tap&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;proto tcp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;remote tax.ath.cx 1194&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;resolv-retry infinite&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;nobind&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;persist-key&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;persist-tun&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# route 192.168.2.0 255.255.255.0 192.168.54.2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ca ca.crt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auth-user-pass&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;comp-lzo&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;script-security 2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Следующим шагом, если вы хотите запустить сервер за nat сервером (роутером) и сделать доступным его с интернета необходимо прописать переброску портов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Я написал небольшой скрипт, который делает это автоматически.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# mkdir ~/source&lt;br /&gt;
# git clone https://code.google.com/p/openvpn-upnp/&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# cd openvpn-upnp&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# git submodule init&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# git submodule update&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# make deb&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# make ideb&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Возможные проблемы:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Если ваш дистрибутив еще не настроен (после установки) то возможно на нем будет запущен сервис network-manager в место привычного networking.&amp;nbsp; Если попробуете включить и выключить по-привычке через update-rc.d то возникнет знакомая ошибка:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# insserv networking&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;insserv: warning: current start runlevel(s) (empty) of script `networking' overwrites defaults (2 3 4 5).&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;insserv: warning: current stop runlevel(s) (0 6) of script `networking' overwrites defaults (0 1 6).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Для переключения его на использование последнего сервиса необходимо выполнить следующие:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# update-rc.d network-manager remove&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# insserv -d networking&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2962011412163577006?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2962011412163577006/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/openvpn-for-debian-6.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2962011412163577006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2962011412163577006'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/openvpn-for-debian-6.html' title='OpenVPN for Debian 6'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4135175156760767339</id><published>2012-01-02T12:22:00.000+04:00</published><updated>2012-01-14T15:22:19.721+04:00</updated><title type='text'>ICS 4</title><content type='html'>Не смог дождаться автоматического обновления андроида на своем телефоне Nexus S. Установил&amp;nbsp; в ручную. Версия 4.0.3.&lt;br /&gt;
&lt;br /&gt;
В интернете полно инструкций как это сделать и все прошло без ошибок.&lt;br /&gt;
&lt;br /&gt;
Какие замечания? Скажу сразу проблем не добавилось. Минусы из серии предыдущих версий. Плюсов больше.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Плюсы&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Появилась возможность сохранять логин \ пароль для VPN соединений&lt;/li&gt;
&lt;li&gt;Появился график и встроеннный контроллер для мобильного трафика&lt;/li&gt;
&lt;li&gt;Появилась возможность шифровать телефон ключем, защищающий данные на флешке от кражы.&lt;/li&gt;
&lt;li&gt;Опявилась отдельная галочка для смены часовой зоны. Раньше, во время путешествий, было нужно снимать галочку "Автоматическая установка времени" и менять зону руками.&lt;/li&gt;
&lt;li&gt;Небольшие приятные изменения по интерфейсу во всех пунктах меню, настройках и рабочим экранам.&lt;/li&gt;
&lt;li&gt;Оффлайн почта. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Минусы&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Залоченый экран паттерном, иногда не дает ввести ключ и сбрасывает введенный паттерн пока вы пытаетесь разлочить телефон&lt;/li&gt;
&lt;li&gt;Много параметров не сохраняться онлайн. Если вы очистили телефон не сохраняться настройки: vpn, позиции иконок, системные настройки.&lt;/li&gt;
&lt;li&gt;Часто валится Google+ и просить отправить репорт.&lt;/li&gt;
&lt;li&gt;Нет возможности добавить в Google Talk сторонний jabber аккаунт.&lt;/li&gt;
&lt;li&gt;Хоть и появилось шифрование, но есть ряд проблем.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Нельзя отменить шифрование, один раз залоченый телефон требует форматирования для продолжения работы.&lt;/li&gt;
&lt;li&gt;Паттерн для шифрования обязательно должен быть либо цифровым либо текстовым и нельзя совмещать его с визуальным паттерном. То есть если вы защитили телефон 20 символами пароля то эти 20 символов вы и должны вводить каждый раз что бы посмотреть входящую СМСку.&lt;/li&gt;
&lt;li&gt;Шифрование не шифрует системные файлы.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Переключение языка раньше было возможно слайдом на клавише пробел. Теперь через длительное на него нажатие открывается новый диалог. Ужасно неудобно.&lt;/li&gt;
&lt;li&gt;Иногда закрывает все отктые приложения (видимо оконный менеждер все грохает)&lt;/li&gt;
&lt;li&gt;Иногда самотоятельно перегружается при большой нагрузке или нехватки памяти.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4135175156760767339?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4135175156760767339/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2012/01/ics-4.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4135175156760767339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4135175156760767339'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2012/01/ics-4.html' title='ICS 4'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3671282815530528582</id><published>2011-12-29T16:51:00.002+04:00</published><updated>2011-12-29T16:51:58.905+04:00</updated><title type='text'>monit tomcat</title><content type='html'>Tomcat довольно часто валиться от нехватки памяти. это чаще всего происходит при перезагрузке выложенных под томкат модулей.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Избежать этого не получается потому приходится запускать дополнительные службы мониторинга. и при наступлении критической систуации (падение, нехватка памяти или просто зависание) эти службы перезапустят любой системный сервис.&lt;br /&gt;
&lt;br /&gt;
Как настроить monit для tomcat6?&lt;br /&gt;
&lt;br /&gt;
Для начала установить monit. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;apt-get install monit&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Потом разрешить его запуск в defaults debian&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/default/monit&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[...]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;startup=1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Создать скрипт для мониторинга tomcat&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/monit/conf.d/tomcat6&lt;/b&gt;&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;check process tomcat6 with pidfile /var/run/tomcat6.pid&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;start program = "/etc/init.d/tomcat6 start"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;stop program = "/etc/init.d/tomcat6 stop"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if failed host localhost port 443 type tcpssl protocol http&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; and request "/monit" with timeout 15 seconds for 3 cycles then restart&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if totalmem &amp;gt; 1500 MB for 10 cycles then restart&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if 5 restarts within 5 cycles then timeout&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее необходимо создать веб приложение из одного файла index.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mkdir /var/lib/tomcat6/webapps/monit/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/var/lib/tomcat6/webapps/monit/index.html&lt;/b&gt;&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;OK&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
И самым последним моментом будет настройка файла monitrc. Можете просто убрать комментарии с соответсвующих паарметров конфигруационного файла.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/monit/monitrc&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set daemon&amp;nbsp; 120&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[…]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set logfile&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[…]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set idfile /var/.monit.id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[…]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set statefile&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[…]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set eventqueue&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[...]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set httpd port 2812 and&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3671282815530528582?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3671282815530528582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/monit-tomcat.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3671282815530528582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3671282815530528582'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/monit-tomcat.html' title='monit tomcat'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5523199654387939858</id><published>2011-12-29T15:48:00.001+04:00</published><updated>2012-01-13T00:43:55.578+04:00</updated><title type='text'>tomcat6 keystore</title><content type='html'>Для подключения SSL в tomcat 6 необходимо сделать несколько шагов.&lt;br /&gt;
&lt;br /&gt;
Прежде всего хочу сказать что есть два варианта включения этой поддержки. Через ява JSSE движок или напрямую через OpenSSL бибилотеку.&lt;br /&gt;
&lt;br /&gt;
Так как я уже давно использую оба способа я пришел к выводу что меньше всего проблем возникает в с использованием первого варианта.&lt;br /&gt;
&lt;br /&gt;
Хочу сказать пару слов про второй варинат. Во втором случае у вас возникает множество проблем с libtcnative-1. В некоторых дистрибутивах эта библиотека отсуствтует и вам необходимо ее устанавливать и следить за ее обновлениями в ручном режиме. Так же недавно я обнаружил что поддержка privileged ports так же не доступна с OpenSSL движком. Это означает что штатными средствами вашей платформы вы не сможете заставить работать tomcat на портах ниже 1024 и скорей всего будете использовать iptable nap mapping или apache proxy. Оба этих варианта не будут самым оптимальным способом использование этой фукнции. Потому я совсем рекомендую этот последний варинат не использовать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для запуска апача необходимо настроить server.xml и включить Connector https. Такая настройка уже есть в конфиге, достаточно убрать комментарии и указать путь к хранилищу сертификатов:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxThreads="150" scheme="https" secure="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clientAuth="want" sslProtocol="TLS"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystoreFile="${catalina.base}/conf/keystore" keystorePass="123456"&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; truststoreFile="${catalina.base}/conf/keystore" truststorePass="123456" /&amp;gt;&lt;/span&gt;&lt;br /&gt;
И исправить второй коннектор, его порт:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port="80" protocol="HTTP/1.1" &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionTimeout="20000" &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; URIEncoding="UTF-8"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; redirectPort="443" /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Создание сертификатов может быть сделано в ручном, само подписаном сертификате. Или с помощью подписанного сертификата центральным хранилищем. Как создать само подписанный сертификат я писал совсем недавно тут:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://axet.blogspot.com/2011/12/x509-basic-commands.html"&gt;http://axet.blogspot.com/2011/12/x509-basic-commands.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Далее необходимо получить файл sun keystore. Делается это следующим скриптом:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/axet/home-bin/blob/common/tomcat6_ks"&gt;https://github.com/axet/home-bin/blob/common/tomcat6_ks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
И последний момент - разрешение на запуск на служебных портах. Для этого в файле Debian tomcat6 необходимо изменить строчку:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;/etc/defaults/tomcat6&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AUTHBIND=yes&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5523199654387939858?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5523199654387939858/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/tomcat6-keystore.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5523199654387939858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5523199654387939858'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/tomcat6-keystore.html' title='tomcat6 keystore'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1141905324983499402</id><published>2011-12-26T15:49:00.002+04:00</published><updated>2011-12-30T18:56:25.463+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openssl'/><title type='text'>x509 – Basic commands</title><content type='html'>&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# create CA key&lt;br /&gt;
openssl genrsa -des3 -out ca.key 4096&lt;br /&gt;
# create CA request&lt;br /&gt;
openssl req -new -x509 -days 365 -key ca.key -out ca.crt&lt;br /&gt;
&lt;br /&gt;
# create server key&lt;br /&gt;
openssl genrsa -des3 -out server.key 4096&lt;br /&gt;
# create server req&lt;br /&gt;
openssl req -new -key server.key -out server.csr&lt;br /&gt;
# sign server req&lt;br /&gt;
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt&lt;br /&gt;
&lt;br /&gt;
# create client key&lt;br /&gt;
openssl genrsa -des3 -out client.key 4096&lt;br /&gt;
# create terminal req&lt;br /&gt;
# Common Name (eg, YOUR name) []:5 (where 5 - is client id)&lt;br /&gt;
openssl req -new -key client.key -out client.csr&lt;br /&gt;
# sign terminal req&lt;br /&gt;
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt&lt;br /&gt;
# convert to der&lt;br /&gt;
openssl pkcs8 -topk8 -inform PEM -in client.key -outform DER -nocrypt -out client.der&lt;br /&gt;
# convert to pk12&lt;br /&gt;
openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name client&lt;br /&gt;
&lt;br /&gt;
# Printout&lt;br /&gt;
openssl x509 -text &amp;lt; client.crt&lt;br /&gt;
&lt;br /&gt;
# Printout key&lt;br /&gt;
openssl rsa -text &amp;lt; client.key&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1141905324983499402?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1141905324983499402/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/x509-basic-commands.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1141905324983499402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1141905324983499402'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/x509-basic-commands.html' title='x509 – Basic commands'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6072321197914039963</id><published>2011-12-26T14:25:00.001+04:00</published><updated>2011-12-26T15:59:53.597+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Как автоматически установить дарйвера принтера на Линукс?</title><content type='html'>Очень просто из консоли установить драйвер, если вы знаете модель и у вас есть сам драйвер:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;CUPS pdf - printer&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/sbin/lpadmin -p Cups-PDF -v cups-pdf:/ -m CUPS-PDF.ppd -E&lt;/span&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;i&gt;VKP80&lt;/i&gt;&lt;/b&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/sbin/lpadmin -E -p&amp;nbsp;VKP80&amp;nbsp;-P&amp;nbsp;VKP80.ppd -m VKP80 -v&amp;nbsp;usb://CUSTOM%20Engineering/VKP80&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt;&lt;a href="http://www.custom.it/downloads/drivers/VKP80_CUPSDrv-1.01.tar.gz"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.custom.it/downloads/drivers/VKP80_CUPSDrv-1.01.tar.gz&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;i&gt;TG2480&lt;/i&gt;&lt;/b&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/sbin/lpadmin -E -p TG2480-H -P TG2480-H.ppd -m TG2480-H&amp;nbsp;-v&amp;nbsp;usb://CUSTOM%20Engineering/TG2480-H&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://www.custom.it/downloads/drivers/TG2480-H_CUPSDrv_100.tar.gz"&gt;http://www.custom.it/downloads/drivers/TG2480-H_CUPSDrv_100.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt;Если вы не знаете модель и какой драйвер требуется - установите принтер один раз в ручном режиме и запишите настройки.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6072321197914039963?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6072321197914039963/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/blog-post_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6072321197914039963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6072321197914039963'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/blog-post_26.html' title='Как автоматически установить дарйвера принтера на Линукс?'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8214873387670410662</id><published>2011-12-26T13:45:00.002+04:00</published><updated>2011-12-26T16:01:49.015+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><title type='text'>Проектные файлы в репозитории</title><content type='html'>Довольна острая тема принимающее явление активного противостояния между разными группами людей имеющие разные взгляды... Очем это я... А да!&lt;br /&gt;
&lt;br /&gt;
Так хранить или не хранить проектыные файлы в репозитории, даже если они могут быть сгенерированы? Мое мнение - хранить.&lt;br /&gt;
&lt;br /&gt;
Позволю себе на эту тему небольшую лекцию. Все файлы исходников, которые имеют отношение к проекту&amp;nbsp;храняться в репозитории. Все настройки, которые производятся локально,&amp;nbsp;не должны затрагивать репозиторий. Так если я создаю скрипты, которые&amp;nbsp;запускают локальный сервер с логином и паролем - я не кладу эти файлы в&amp;nbsp;репозиторий, и не держу их в дирректории с локальным репозиторием (можно хранить на следующим уровне вверх). Так как если этот файл поместить в дирректорию с репозиторием этот файл&amp;nbsp;будет отображаться каждый раз когда я запрашиваю статус проекта под&amp;nbsp;системой контроля версии. Таким образом команда git stauts (svn st, hg&amp;nbsp;st) показывает все файлы, которые должны быть помещены под контроль&amp;nbsp;версий или измененные файлы. Сама библиотека - должна легко и удобно портироваться между&amp;nbsp;средами разработками. Ее задача - быть доступной для всех платформ \&amp;nbsp;сред разработки, которые мы хотим поддерживать. Следовательно ее должно&amp;nbsp;быть просто импортировать и подключать к проектам без доп настроек.&amp;nbsp;Таких как создание нового проекта и импорирование файлов по одному \ &amp;nbsp;с&amp;nbsp;указанием библиотек для импорта. К тому же к этому я придерживаюсь следующего правила: если мы запускаем еклипс на исходники и он&amp;nbsp;создает проектные файлы, внутри дирректории исходников (он так и&amp;nbsp;должен делать) то пометить эти файлы в .gitignore - будет помещение&amp;nbsp;помещение локальной информации нерелевантной к проекту под систему&amp;nbsp;контроля версии. Так какая разница пометить эти файлы в .gitignore или&amp;nbsp;поместить их под проект тем самым облегчить импорт библиотеки?&lt;br /&gt;
&lt;br /&gt;
И последнее - платформенно зависимые файлы \ пользовательские файлы проекта, конечно ненужно сохранять под систему контроля версий. Такие файлы генерируются специально для текущего окружения и \ или настроект пользователя. А именно: результат automake или пользовательские файлы visual studio .suo.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
А остальнмо дело личное, поддерживать \ тестировать платформы целевые&amp;nbsp;платформы или опустить это на пользователей. Все это ложиться того кто&amp;nbsp;поддерживает проект. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8214873387670410662?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8214873387670410662/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8214873387670410662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8214873387670410662'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/blog-post.html' title='Проектные файлы в репозитории'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6951520898745652632</id><published>2011-12-24T16:36:00.002+04:00</published><updated>2011-12-26T16:01:56.636+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dir-300'/><title type='text'>DIR-300/NRU/B1 - dd-wrt.com</title><content type='html'>&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.3014818506781012"&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DIR-300/NRU/B1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Поскольку система сборки очень запутана и сайт не достаточно информативен делаю набор выдержек, которые могут пригодится для прошивки роутера.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Роутер, в режиме восстановления не прошивается из других под других ОС кроме Windows. Ошибка будет очень не информативна. При прошивке роутера он напишет что файл испорчен.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;База данных: нужно вбить имя роутера и кликнуть на его имени (ссылка не подсвечивается)&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="http://www.dd-wrt.com/site/support/router-database"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.dd-wrt.com/site/support/router-database&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Последние сборки доступны по ссылке (в дирректории dlink-dir300-revb):&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;На сайте предоставлены 2 вида прошивок: &amp;nbsp;factory-webflash, ddwrt-webflash. Используется только factory-webflash. ddwrt-webflash используется для перепрошивки уже перепрошитого роутера (upgrade).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ссылки на вики для роутера DIR-300:&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="http://www.dd-wrt.com/wiki/index.php/DIR-600"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.dd-wrt.com/wiki/index.php/DIR-600&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.dd-wrt.com/wiki/index.php/D-Link_DIR-600_/_300vB"&gt;http://www.dd-wrt.com/wiki/index.php/D-Link_DIR-600_/_300vB&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Восстановление оригинальной прошивки (файл dir300b_v2.06_b9fe.bin):&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;
&lt;li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://ftp.dlink.ru/pub/Router/DIR-300_NRU/Firmware/"&gt;http://ftp.dlink.ru/pub/Router/DIR-300_NRU/Firmware/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: 15px;"&gt;В настоящий момент очень плохо реализована поддержка IPTV. Пакеты маршрутизируются на все интерфейсы роутера и глушат полностью ВайФай. Данная проблема решена в последней версии ядра (2.6.34).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6951520898745652632?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6951520898745652632/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/dir-300nrub1-dd-wrtcom.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6951520898745652632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6951520898745652632'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/dir-300nrub1-dd-wrtcom.html' title='DIR-300/NRU/B1 - dd-wrt.com'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6465964415408700122</id><published>2011-12-24T10:23:00.003+04:00</published><updated>2011-12-26T16:02:09.436+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate nested transactions</title><content type='html'>Сталкивались вы когда-нибудь с вложенными транзакциями?&lt;br /&gt;
&lt;br /&gt;
В двух словах: эта такая транзакция которая создается внутри родительской транзакции. И может быть обработана независимо от основной.&lt;br /&gt;
&lt;br /&gt;
Но проще это объяснить на примере.&lt;br /&gt;
&lt;br /&gt;
Например. Например вам нужно сделать сервис, который будет регулярно опрашивать базу данных и проводить обработку транзакций. Каждый такой вызов транзакции должен сопровождаться обращением в интернет или какую-другую нестабильную среду и в результате чего может образоваться ошибка (или что более правильно исключение).&lt;br /&gt;
&lt;br /&gt;
Вот как-то так.&lt;br /&gt;
&lt;br /&gt;
Что бы обеспечить стабильность, вы должны обрабоать эту ошибку и в дальнейшем привизать эту ошибку к транзакции.&lt;br /&gt;
&lt;br /&gt;
То есть простым языком получаете список необработанных транзакций. Вызываете функцию обработки транзакции и ошибку записываете в другое поле той же транзакции.&lt;br /&gt;
&lt;br /&gt;
Как все это реализовать на Hibernate \ Spring?&lt;br /&gt;
&lt;br /&gt;
Ну в документации сказано что есть такое средство. Называется nested transaction. Для его активации у метода, создающего вложенную транзакцию необходимо использовать&amp;nbsp;атрибут PROPAGATION_NESTED. А еще прописать в tarnsactionmanager проперти&amp;nbsp;nestedTransactionAllowed со значением true.&lt;br /&gt;
&lt;br /&gt;
Вот как выглядит эта теория на практике:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;dao.xml&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;








&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s3"&gt;bean&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"transactionManager"&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;class&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"org.springframework.orm.hibernate3.HibernateTransactionManager"&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s3"&gt;property&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;name&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"sessionFactory"&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;ref&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"sessionFactory"&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s3"&gt;property&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;name&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"nestedTransactionAllowed"&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s4"&gt;value&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;"true"&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/&lt;/span&gt;bean&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;








&lt;br /&gt;
&lt;b&gt;&lt;i&gt;IncomeProcessor.java&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Service&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Transactional&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;public class IncomeProcessor {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; [...]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; @Scheduled(fixedRate = 60 * 1000)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; public void processNormal() {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Transaction&amp;gt; list = some.list();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Transaction t : list) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;process(t);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(Exception e){&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t.setError(e);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dao.update(t);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; @Transactional(propagation = Propagation.NESTED)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; public void process(Transaction t) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doSomeExternalJob(t);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;В примере мы получем список, пробегаемся по всем эелемнтам и все ошибки (исключения) записываем в объект transaction в базу данных. В териории все исключения возникшие в вызове process(), обернуты обработчиком откатывают все изменения в базе данных сделаные методом doSomeExternalJob(). Таким образом мы не теряем данные и не захламляем базу новыми объектами созданными до возникновения исключения.&lt;br /&gt;
&lt;br /&gt;
Но на практике такой подход не работает. Я не стал разбераться ошибка ли это хибернейта или jdbc драйвера. Я стал разбераться в том как эти вложенные транзакции реализованы и нашел сразу две довольно критичные проблемы в приведенной выше схеме. Так что стандартный механизм спринга лучше в таком варианте не использовать, если не хотите потерять данные (или пропустить обработку).&lt;br /&gt;
&lt;br /&gt;
Прежде всего хочу сказать как это должно быть реализовано в jdbc драйвере.&lt;br /&gt;
&lt;br /&gt;
При обработке вложенных транзакций драйвер, в точке входа в функцию создает так называемые Savepoint. И при выходе, в случае возникновения ошибки вызвает функцию у соединения rollback() с передачей ей нужной точки сохранения. Таким образом при входе в фукнцию process должна была бы вызваться&amp;nbsp;connection.setSavepoint() и при выходе, для отката части транзакции&amp;nbsp;connection.rollback(savePoint).&lt;br /&gt;
&lt;br /&gt;
Почему это не работает, непонятно. Можно покапаться в исходниках sping / hibernate благо они доступны и найти что нибудь глупое навроде не правильной версии jdbc или пропуск создания какогонибудь хитрого bean с указанной логикой. Я решил не искать проблему и не создавать баг репорта по причине что я нашел вторую проблему. Так же связанную с привиденным выше алгоритмом работы. И эта ситуация на корню блокирует любые попытки программно (с помощью атрибутов) сделать элегантное решение этих nested transactions.&lt;br /&gt;
&lt;br /&gt;
В чем эта вторая проблема заключается и почему исправление вложных транзакций так сложно?&lt;br /&gt;
&lt;br /&gt;
Я провел простой эксперимент. Провел симуляцию правильной логики сохранения \ откатов savepoints и обнаржил что не все объекты всстанавливают свое исходное состояние. Несмотря на то что откат проходит успешно некоторые объекты все равно остаются в своем прежнем состоянии как до отката. Отмененная транзакция до указанного savepoint ни как не затрагивает объектов уже скаченных с сервера, закешированных и измененных на памяти.&lt;br /&gt;
&lt;br /&gt;
Что это означает. Если вы создаете savepoint для текущей транзакции и передаете в фукнцию обработки объект транзакция то не смотря на то что вызываете rollback нет такого маханизма в спринге что бы отслеживать объекты измененные на памяти и запрашивать автоматически их состояния с сервера.&lt;br /&gt;
&lt;br /&gt;
Что привело меня к мысли что исправление вложенных транзакций все равно не повзолит реализовать указанную лоигку только на стороне спринг \ хибернейт библиотек. Так как перечитывать состояние всех объектов после отката одной транзакции не имеет практического смысла и к тому же приведет к потере данных. А откатывать отдельный параметр было бы так же не допустимо.&lt;br /&gt;
&lt;br /&gt;
В результате этих рассуждений я решил реализовать все это руками, с исправлением указанных проблем. Привожу работающий код:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;NestedTransaction.java&lt;/i&gt;&lt;/b&gt;







&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;package&lt;/span&gt; com.payment.db.services;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; java.sql.Connection;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; java.sql.SQLException;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; java.sql.Savepoint;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; java.util.List;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; java.util.Stack;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; org.hibernate.SessionFactory;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; org.hibernate.jdbc.Work;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;abstract&lt;/span&gt; &lt;span class="s1"&gt;class&lt;/span&gt; NestedTransaction&amp;lt;T&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; list(SessionFactory sessionFactory, List&amp;lt;T&amp;gt; list) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;final&lt;/span&gt; Stack&amp;lt;Savepoint&amp;gt; s = &lt;span class="s1"&gt;new&lt;/span&gt; Stack&amp;lt;Savepoint&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;for&lt;/span&gt; (T e : list) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;try&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sessionFactory.getCurrentSession().doWork(&lt;span class="s1"&gt;new&lt;/span&gt; Work() {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; execute(Connection connection) &lt;span class="s1"&gt;throws&lt;/span&gt; SQLException {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s.push(connection.setSavepoint());&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; process(e);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span class="s1"&gt;catch&lt;/span&gt; (Exception ee) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sessionFactory.getCurrentSession().doWork(&lt;span class="s1"&gt;new&lt;/span&gt; Work() {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; execute(Connection connection) &lt;span class="s1"&gt;throws&lt;/span&gt; SQLException {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; connection.rollback(s.pop());&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sessionFactory.getCurrentSession().refresh(e);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exception(e, ee);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;abstract&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; process(T e);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;abstract&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; exception(T e, Exception ee);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;i&gt;IncomeProcessor.java&lt;/i&gt;&lt;/b&gt;&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;package com.payment.db.services;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Service&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Transactional&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;public class IncomeProcessor extends NestedTransaction&amp;lt;ChargePool&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; [...]&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; @Scheduled(fixedRate = 60 * 1000)&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; public void processNormal() {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List&amp;lt;ChargePool&amp;gt; list = chargepool.listAvailable();&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (list == null || list.size() == 0) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list(sessionFactory, list);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; public void process(ChargePool cp) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Charge c = cp.getCharge();&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!c.isLinked())&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new RuntimeException("operation on non linked charge");&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SomeProcessIncome(cp);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; public void exception(ChargePool cp, Exception e) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cp.setLastOperationRespond(ExceptionText.covert(e));&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cp.setLastOperationDate(new Date());&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chargepool.update(cp);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
В приведенном примере создан базовый класс для обработки вложенных транзакций с использованием фукнций сохранения \ отката состояний (Savepoint) и так же исправлена проблема с откатом объектов на памяти вызовом фукнции&amp;nbsp;sessionFactory.getCurrentSession().refresh(e)&lt;br /&gt;
&lt;br /&gt;
















&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6465964415408700122?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6465964415408700122/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/hibernate-nested-transactions.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6465964415408700122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6465964415408700122'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/hibernate-nested-transactions.html' title='Hibernate nested transactions'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5090055649383257964</id><published>2011-12-17T16:02:00.002+04:00</published><updated>2011-12-26T16:03:03.315+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Send Hibernate to the Network</title><content type='html'>Пришлось решть стандартную задачу на ява по пересылке объектов Java с одной машины на другую по сети. Довольно простая операция если учитывать что все это уже релализовано в самой Джаве и воспользоваться механизмом сериализации может любой желающий.&lt;br /&gt;
&lt;br /&gt;
Для сериализации объектов достаточно имплиментировать интерфейс Serializable и после этого одним вызовом метода writeObject класса ObjectOutputStream сохранять объекты в любой поток. Этот поток может быть массивом на памяти, файлом или сокетом. Создав правильным образом экземпляр класса ObjectOutputStream можно заливать данные в любых направлениях.&lt;br /&gt;
&lt;br /&gt;
Однако я работал не с совсем стандартными объектами и их сериализация несколько усложнилась. В мою задачу входила серилизация объектов полученных из базы данных через Hibernate библиотеку и передача их на другую машину в сети.  Теперь я хочу поделиться найденым решением для удобной сериализации Hibernate объектов. &lt;br /&gt;
&lt;br /&gt;
Работая с базой данных через Hibernate у вас есть выбор. Этот выбор напрямую скажется на том как эффективно и как сложно будет реализовавать мехнизм передачи объектов.&lt;br /&gt;
&lt;br /&gt;
Первый вариант заключается в том, что бы получать все объекты полностью загруженными из базы данных.&amp;nbsp; Это довольно простой способ, все данные загружены в объект и сериализация объектов сводится к простому помещению объектов в поток без подготовки. Однако, если вы начнете работать с базой данных в таком режиме - то это будет крайне не эффективно и врядли ваш сервер сможет рабоать больше чем с 10 пользователями одновременно.&lt;br /&gt;
&lt;br /&gt;
Второй вариант позволяет получаеть объект не полностью инициализированным данными. Он заключается в том, что бы после получения объекта данные в нем подгружались из базы только после обращения к ним. То есть например, вы получаете объект записи транзакций за последние 3 месяца и обращаетесь к запясям начиная с 5000 номера по 9000 номер. В этом случае Хибернейт получит из базы только указанный интервал данных, без выкачивания всех остальных записей. Ко всему прочьему, так же не будут сразу загружены все связанные объекты и свойства классов. Работа по такой схеме очень ускоряется так как объем трафика и данных получаемой с базы уменьшается.&lt;br /&gt;
&lt;br /&gt;
Однако если вы попытаетесь передать по сети полученный объект с без загруженных объектов то ява выдаст следующую ошибку:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.hibernate.LazyInitializationException: could not initialize proxy - no Session&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; com.payment.dao.Wallet_$$_javassist_2.getId(Wallet_$$_javassist_2.java)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Это происходит по одной причине. Объект загруженный с базы данных, переданный по сети передается вместе со всеми данными и внутренними структурами содержащие ссылки на текущее соединение с базой данных. Но так как вы передали объект на другую машину и попытались получить данные которые не были загружены - выдается ошибка обозначающая отсутствие связи с базой данных.&lt;br /&gt;
&lt;br /&gt;
Что бы этого избежать необходимо специальным образом обработать объект так, что бы все данные в него загрузились до отправки его на другой комьютер. Для этого существуют разные способы и самый правильный будет использовать библиотеку Dozer.&lt;br /&gt;
&lt;br /&gt;
Эта библиотека позволяет преобразоваывать объекты на лету полученных из базы данных из одного типа, набора полей и иерархии в другой набор объектов который вы хотели бы получить на выходе. Эта библиотека программируется через xml конфигурационный файл и позволяет задавать преобазования настариваемые пользователем. Полезным для нас свойством этой библиотеки помимо преобразования объектов будет копирование объектов на лету. Так что поместив не полностью загруженный объект в метод mapper на выходе из него мы получем копию, полностью загруженных данных. После чего мы без труда отправим копию по сети изключив из нее всю информацию о сесиях и базы данных. В нашем же случае, нам даже не придется делать дополнительные настройки. В самом простом случае, Dozer можно запустить без настроек и тогда она будет преобразоыввать объект из самого себя и сам себя.&lt;br /&gt;
&lt;br /&gt;
Поэтому для передачи объектов нам не потребуется разбераться в настройках, а будет достаточно просто вызова метода mapper.&lt;br /&gt;
&lt;br /&gt;
Вот такой простой код позволяет получать на вход объект с сессией без данных, а на выходе получать объект с полностью загруженными данными и без информации о обазе данных и сессии:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static public &amp;lt;T&amp;gt; T dozer(T o) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (o == null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (T) mapper.map(o, o.getClass());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Однако на практике все оказалось не так хорошо. Из за ошибки в библиотеки эта конструкция не работала. Программа валилась где-то внутри ее собственного кода и не позволяла сериализовавть объект на выходе этой функции.&lt;br /&gt;
&lt;br /&gt;
Я привожу этот пример, как потенциально рабочий и возможно с ним не будет проблем в следующем резиле программы. На момент написания статьи он не работал. Версия Dozer: 5.3.2. javassist 3.12.1.GA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SEVERE: Servlet.service() for servlet server threw exception&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;java.lang.NullPointerException&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at javassist.util.proxy.RuntimeSupport$DefaultMethodHandler.invoke(RuntimeSupport.java:37)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.payment.dao.User_$$_javassist_13.writeReplace(User_$$_javassist_13.java)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.reflect.Method.invoke(Method.java:616)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1049)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1131)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Что бы обойти сложившуюся ситуацию есть несколко вариантов. Приведу только один.&lt;br /&gt;
&lt;br /&gt;
Для передачи объекта необходимо форсировать загрузку данных для Lazy объекта. Для этого необходимо вызвать метод Hibernate.initialize(object) для всех объектов полученных с через hibernate.&lt;br /&gt;
&lt;br /&gt;
Скажем если вы загружаете объект командой:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static public Wallet get(Long id) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (Wallet) sessionFactory.getCurrentSession().createQuery("from Wallet where id = :id")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .setParameter("id", id).uniqueResult();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Новый объект Wallet w; должен быть проинициализирован вызовом Hibernate.initialize(w) После чего его можно сериализовать для передачи по сети. Однако подгружены будут только простые переменные класса. И если в вашем классе есть связанные коллекции ссылающиеся на другие объекты базы данных то они не будут загружены и вы не сможете сохранить объект в поток.&lt;br /&gt;
&lt;br /&gt;
Для того что бы инициировать все связанные объекты необхоимо вручную вызвать методы для этих коллекций и связанных объектов. Так например если ваш объект Кошелек показывает список Транзакций, которые в свою очередь могут ссылаться на другие объекты необходимо вызвать все методы поочереди. Wallet w; for (Transaction t : w.getTransactions()) t.getUser();&amp;nbsp; и так далее.&lt;br /&gt;
&lt;br /&gt;
С проктической точки зрения необходимо автоматизировать этот процесс через работу с java reflect api. Моя реализация, которая решает данную проблему можеть быть более элегантной и не использовать обязательного наследования. Но я хочу привести ее в том виде который я использовал.&lt;br /&gt;
&lt;br /&gt;
Для сериализации всех связанных объектов @Entity необходимо их унаследовать от одного класса Lazy. Затем у верхнего объекта, который со всеми вложенными данными необходимо вызвать метод lazyInit()&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Lazy {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean lazyLoaded = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean lazyTest(Class&amp;lt;?&amp;gt; cc, Class&amp;lt;?&amp;gt; ccc) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return cc.asSubclass(ccc) != null;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (ClassCastException e) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean lazyGeneric(Type c, Class&amp;lt;?&amp;gt; ccc) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterizedType pp = (ParameterizedType) c;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Class&amp;lt;?&amp;gt; tt = (Class&amp;lt;?&amp;gt;) pp.getActualTypeArguments()[0];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return tt.asSubclass(Lazy.class) != null;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (ClassCastException e) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object[] lazyAnnotate() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArrayList&amp;lt;Object&amp;gt; list = new ArrayList&amp;lt;Object&amp;gt;();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Class&amp;lt;?&amp;gt; c = this.getClass();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Field f : c.getDeclaredFields()) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Class&amp;lt;?&amp;gt; cc = f.getType();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type g = f.getGenericType();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.setAccessible(true);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lazyTest(cc, Lazy.class))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.add(f.get(this));&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lazyGeneric(g, Lazy.class))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.add(f.get(this));&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return list.toArray();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RuntimeException(e);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void lazyInit() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lazyLoaded)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazyLoaded = true;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Object o : lazyAnnotate()) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (o instanceof Lazy) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((Lazy) o).lazyInit();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (o instanceof Set&amp;lt;?&amp;gt;) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Lazy l : (Set&amp;lt;? extends Lazy&amp;gt;) o) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.lazyInit();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (o instanceof List&amp;lt;?&amp;gt;) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Lazy l : (List&amp;lt;? extends Lazy&amp;gt;) o) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.lazyInit();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hibernate.initialize(this);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Метод вызываемый перед сериализацией:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static public &amp;lt;T&amp;gt; T dozer(T o) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (o == null)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((Lazy) o).lazyInit();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return o;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static public &amp;lt;T&amp;gt; List&amp;lt;T&amp;gt; dozer(List&amp;lt;T&amp;gt; e) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e == null)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArrayList&amp;lt;T&amp;gt; r = new ArrayList&amp;lt;T&amp;gt;();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Object o : e) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r.add((T) Dozer.dozer(o));&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return r;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br /&gt;
&lt;br /&gt;
Наследование всех классов Entity, которые должны быть инициализированы:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;@Entity&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;@Table(name = "wallet")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;public class Wallet extends Lazy implements Serializable {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5090055649383257964?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5090055649383257964/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/12/send-hibernate-to-network.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5090055649383257964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5090055649383257964'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/12/send-hibernate-to-network.html' title='Send Hibernate to the Network'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4279407404581796365</id><published>2011-11-06T01:12:00.000+04:00</published><updated>2011-12-26T16:03:10.863+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Skype security issues</title><content type='html'>Все мы знаем много разговоров о том какой безопасный скайп. Не раз наталкивались на сообщения в&amp;nbsp; новостях что протокол зашифрован и куча очумелых хакеров ломают эту систему и сломать не могут.&lt;br /&gt;
&lt;br /&gt;
Могу вас обрадовать - все гораздо проще.&lt;br /&gt;
&lt;br /&gt;
Совсем недавно я потерял доступ к своему аккаунту, потрерял деньги на счете и потерял всю личную переписку которую там вел.&lt;br /&gt;
&lt;br /&gt;
Как вы думаете это случилось?&lt;br /&gt;
&lt;br /&gt;
Что первое приходит на ум? Украли пароль? Украли данные с зашиврованного жесткого диска? Подсадили пароль?&lt;br /&gt;
&lt;br /&gt;
Все это мне пришло в первую секунду и я потратил все выходные на форматирование, переустановку системы, смену всех паролей от онлайн служб и все равно находился в нервном состоянии и легком недоумении о том как же несмотря на все меры безопасности я потерял пароль?&lt;br /&gt;
&lt;br /&gt;
Спешу обрадовать: все что я убил на своем ноутбуке и потерял кучу времени было напрасно. Проблема была не в тех перечисленных уязвимостях, не в том что я запустил на своей машине вирус или потерял пароль использую открытую Wifi сеть. Все гораздо проще.&lt;br /&gt;
&lt;br /&gt;
И самое старшное здесь, что это может случится и с вами.&lt;br /&gt;
&lt;br /&gt;
И знаете как все это произошло? Поддержка скайп получила письмо с просьбой сменить регистрационный имей, на имей злоумышлинника. Что она и сделала БЕЗ КОЛЛЕБАНИЙ!&lt;br /&gt;
&lt;br /&gt;
То есть, людей в Скайп не волнут, что вы пол часа назад вышли из системы и пользовались ей до этого в течении больше пяти лет. Их не волнует ваша частная переписка. Их не волнут что на счету есть деньги (которые тоже были украдены). Их вообще не беспокоит что можно связаться с владельцем счета по имейл, телефону или подождать 6 часов пока я выйду на связь.&lt;br /&gt;
&lt;br /&gt;
Они просто сменили имейл адерс, а хакер поменял пароль и получил полный контроль ко всему аккаунту!&lt;br /&gt;
&lt;br /&gt;
Это пидеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Интересно так же другое, как вся эта история стала мне понятна и вскрыта вся безолаберность их системы безопасности. Эти ребята в поддержке, конечно мне ничего не обяснили и до сих пор не вернули деньги. Объяснять придется мне.&lt;br /&gt;
&lt;br /&gt;
Во-первых я очень хорошо понимаю что такое безопасность компьютера и не делаю никаких глупостей. Жесткий диск зашифрован, пароли сгенерированы и храняться в защищенном месте.&lt;br /&gt;
&lt;br /&gt;
Доступ к этим данным есть только у меня. А копьютер довольно хорошо контролируется. Поэтому вся эта ситуация просто не вписывалась в рамки моего понимания как можно украть эти данные. Это было технически не возможно.&lt;br /&gt;
&lt;br /&gt;
Ответ всплыл сам сабой и по полной случайности. Сегодя, будуче еще в шоке от этой кражи (а прошло уже 7 дней с того момента), зашел на сайт скайпа и в целях безопасности сменил своей имейл.&lt;br /&gt;
&lt;br /&gt;
Какого же было мое удивление что письмо о смене имейла через веб интерфейс отличалось от того имейла которое пришло от скайпа в первый раз о смене почты.&lt;br /&gt;
&lt;br /&gt;
В первом случае, когда злоумышленник поменял мой регистрационный адрес через службу поддержки письмо было следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 600px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-left: 20px; padding-right: 20px; padding-top: 20px;"&gt;&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 560px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="left" width="450"&gt;&lt;h1 style="color: #999999; font-family: Helvetica, Arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 28px;"&gt;



Hi there Alexey Kuznetsov,&lt;/h1&gt;
&lt;/td&gt;
                            &lt;td align="left" width="110"&gt;&lt;a href="http://www.skype.com/" style="line-height: 0;" target="_blank"&gt;
                                &lt;img alt="www.skype.com" border="0" src="http://download.skype.com/share/mailings/campaigns/200608emailframework/logo_newbrand.gif" vspace="20" /&gt;
                            &lt;/a&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;tr&gt;
                    &lt;td style="padding-left: 20px; padding-right: 20px; padding-top: 40px;"&gt;&lt;h2 style="color: #999999; font-family: Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 26px; margin: 0;"&gt;



Your &lt;span class="il"&gt;Skype&lt;/span&gt; account details&lt;/h2&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;tr&gt;
                &lt;td style="padding: 20px 20px;"&gt;&lt;div style="color: #333333; font: normal 14px Helvetica, Arial, sans-serif; line-height: 19px;"&gt;
Confirmation of change to account details.&lt;br /&gt;
&lt;br /&gt;
We have successfully updated your &lt;span class="il"&gt;Skype&lt;/span&gt; account with the changes you requested.&lt;br /&gt;
&lt;br /&gt;
We are sending this confirmation email for your security.&lt;br /&gt;
&lt;br /&gt;
However, &lt;span class="il"&gt;Skype&lt;/span&gt; will no longer send emails to this address, so if you didn't make any changes to your account or you have any queries, please &lt;a href="https://support.skype.com/support_request/?intcmp=CS-ContactSupport-PasswordResetEmail" style="color: #00aff0; font-weight: bold; text-decoration: underline;" target="_blank"&gt;contact Customer Support&lt;/a&gt; as soon as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #666666; font-family: Helvetica, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 24px; margin: 0;"&gt;
Talk soon,&lt;br /&gt;
The people at &lt;span class="il"&gt;Skype&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
В этом письме (оно реально пришло с серверов поддержки скайпа, это не фишнг) не указан адрес на который приозошла смена адреса. А второе письмо, которое пришло после смены адреса через веб интерфейс выглядело так:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 600px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-left: 20px; padding-right: 20px; padding-top: 20px;"&gt;&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 560px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="left" width="450"&gt;&lt;h1 style="color: #999999; font-family: Helvetica, Arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 28px;"&gt;



Hi there Alexey Kuznetsov,&lt;/h1&gt;
&lt;/td&gt;
                            &lt;td align="left" width="110"&gt;&lt;a href="http://www.skype.com/" style="line-height: 0;" target="_blank"&gt;
                                &lt;img alt="www.skype.com" border="0" src="http://download.skype.com/share/mailings/campaigns/200608emailframework/logo_newbrand.gif" vspace="20" /&gt;
                            &lt;/a&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;tr&gt;
                    &lt;td style="padding-left: 20px; padding-right: 20px; padding-top: 40px;"&gt;&lt;h2 style="color: #999999; font-family: Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 26px; margin: 0;"&gt;



Registered email successfully changed&lt;/h2&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;tr&gt;
                &lt;td style="padding: 20px 20px;"&gt;&lt;div style="color: #333333; font: normal 14px Helvetica, Arial, sans-serif; line-height: 19px;"&gt;
Registered email address successfully changed. We've updated your registered email address to *&lt;a href="mailto:***@gmail.com" target="_blank"&gt;**@gmail.com&lt;/a&gt;. &lt;a href="http://track.skype.com/e/click?m=7131000008843247206&amp;amp;go=myaccount&amp;amp;x=intcmp%3DT_167-_-H-_-051111-_-myaccount" style="color: #00aff0; font-weight: bold; text-decoration: underline;" target="_blank"&gt;Visit your account&lt;/a&gt; to review your changes at any time.&lt;br /&gt;
&lt;br /&gt;
If you have not changed your email address, please contact &lt;span class="il"&gt;Skype&lt;/span&gt; Customer Service with any questions as someone may have fraudulently gained access to your account. 
            &lt;/div&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 600px;"&gt;
        &lt;tbody&gt;
&lt;tr&gt;
            &lt;td style="padding-bottom: 20px; padding-left: 20px; padding-right: 20px; padding-top: 30px;"&gt;&lt;div style="color: #666666; font-family: Helvetica, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 24px; margin: 0;"&gt;
Talk soon,&lt;br /&gt;
The people at &lt;span class="il"&gt;Skype&lt;/span&gt;&lt;/div&gt;
&lt;div style="color: #666666; font-family: Helvetica,Arial,sans-serif; font-size: 18px; font-weight: bold; line-height: 24px; margin: 0pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
        &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Что говорит только об одном - в первом случае, кража случилось с легкой руки поддержки скайп. Которая не разобравшись просто стала соучастником предступления по краже персональной информации, денег со счета и просто они ПИДЕРЫ,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4279407404581796365?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4279407404581796365/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/11/skype-security-issues.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4279407404581796365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4279407404581796365'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/11/skype-security-issues.html' title='Skype security issues'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5130876879877175610</id><published>2011-10-10T18:06:00.002+04:00</published><updated>2012-01-13T00:40:02.091+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><title type='text'>git https setup</title><content type='html'>Как подключить git для работы через https протокол?&lt;br /&gt;
&lt;br /&gt;
Настройку сервера я уже описывал &lt;a href="http://axet.blogspot.com/2011/02/trac-svn-pam-auth.html"&gt;тут&lt;/a&gt;, настройка клиента заключается в следующем:&lt;br /&gt;
&lt;br /&gt;
1) загрузка и установка ssl сертификата сервера&lt;br /&gt;
2) прописывание логина\пароля в конфиг файле&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;1) ssl&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
mkdir ~/.git&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
wget_cert [your_host]&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
c_rehash -c ~/.git&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;b&gt;~/.gitconfig&lt;/b&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
[http]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sslCAPath = /Users/axet/.git/&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
to debug:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span class="st"&gt;GIT_CURL_VERBOSE=1 git clone host_url&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;2) login config&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;b&gt;~/.netrc&lt;/b&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;machine github.com login yourname password 123456&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://axet.blogspot.com/2011/02/trac-svn-pam-auth.html"&gt;http://axet.blogspot.com/2011/02/trac-svn-pam-auth.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/axet/home-bin/blob/common/wget_cert"&gt;https://github.com/axet/home-bin/blob/common/wget_cert&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5130876879877175610?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5130876879877175610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/10/git-https-setup.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5130876879877175610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5130876879877175610'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/10/git-https-setup.html' title='git https setup'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3759757438054066571</id><published>2011-09-28T19:44:00.002+04:00</published><updated>2012-01-13T00:44:27.647+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Iso2Flash</title><content type='html'>Если у вас есть .iso образ и вы хотите его использовать на usb-flash или ide-flash (ata-flash) что для этого нужно?&lt;br /&gt;
&lt;br /&gt;
Достаточно скопировать содерижмое iso  на флешку и установить syslinux.&lt;br /&gt;
&lt;br /&gt;
Вот простой скрипт для этой задачи:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/axet/home-bin/blob/common/iso2flash.sh"&gt;https://github.com/axet/home-bin/blob/common/iso2flash.sh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3759757438054066571?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3759757438054066571/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/09/iso2flash.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3759757438054066571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3759757438054066571'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/09/iso2flash.html' title='Iso2Flash'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2527129988183502947</id><published>2011-09-18T19:50:00.001+04:00</published><updated>2011-12-26T16:03:45.271+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><title type='text'>Jabber clients for Android</title><content type='html'>Искал для своего Андроида IM jabber клиент. Остановился на &lt;a class="ot-anchor" href="http://trillian.im/"&gt;trillian.im&lt;/a&gt; и после нескольких недель отказался проблемы следующие:&lt;br /&gt;&lt;br /&gt;- теряет историю&lt;br /&gt;- иногда жрет сообщения и не доставляет их на все подключенные устройства&lt;br /&gt;- иногда жрет часть сообщения на русском и в оффлайн (редко)&lt;br /&gt;- не поддерживает подтверждения отправки, потому все сообщения выглядят не доставленными для собеседника&lt;br /&gt;&lt;br /&gt;из плюсов:&lt;br /&gt;&lt;br /&gt;- поддержа old ssl для jabber&lt;br /&gt;- центральное место для всех аккаунтов&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2527129988183502947?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2527129988183502947/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/09/jabber-clients-for-android.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2527129988183502947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2527129988183502947'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/09/jabber-clients-for-android.html' title='Jabber clients for Android'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-505192768516665889</id><published>2011-09-18T19:49:00.002+04:00</published><updated>2011-12-26T16:03:53.236+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>Dropbox &amp; Wuala</title><content type='html'>Пользовался двумя службами облачного хранения файлов. Имена на слуху: Dropbox и Wuala.&lt;br /&gt;&lt;br /&gt;Обе
 заслуживают внимания и довольно с хорошим покрытием в новостных лентах.
 Мы знамем об открытости данных и небезопасном хранении в Dropbox  и 
слышим только хорошее про Wuala.&lt;br /&gt;&lt;br /&gt;Хочу рассказать с столкнулся и 
отсоветовать пользоваться Wuala несмотря на их хорошую ценовую политику и
 надежную распределенную систему.&lt;br /&gt;&lt;br /&gt;Прежде всего сразу после 
подключения хранилища на 25 гигов я загрузил туда всю информацию и 
удалил ее с жестого диска. До того как вся информация попадет на сервера
 она должна была храниться в локальном кеше и оберегаться приложением как зеница 
ока. Предупреждая любые проблемы вовремя загрузки, такие как обрывы 
сязи, перезагрузка ОС и программы.&lt;br /&gt;&lt;br /&gt;Какого же было мое 
расстройство после того как я узнал что выход программы очищает этот 
самый загружаемый кеш и все данные находящиеся в  нем после перезапуска 
приложения пропали. А охуел.&lt;br /&gt;&lt;br /&gt;Еще один момент. После этого 
инцидента я захотел скачать уже закаченные данные обратно на  свой второй компьютер и 
часть файлов (1% может быть) не захотели грузится с разными ошибками 99%
 загрузки или иные проблемы.&lt;br /&gt;&lt;br /&gt;Вобщем не советую рисковать своими данными и пользоваться Wuala.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-505192768516665889?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/505192768516665889/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/09/dropbox-wuala.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/505192768516665889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/505192768516665889'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/09/dropbox-wuala.html' title='Dropbox &amp; Wuala'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4368551236419920662</id><published>2011-09-16T17:32:00.001+04:00</published><updated>2011-09-16T17:33:29.471+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>Rhythmbox Shoutcast</title><content type='html'>По запросу "rhythmbox shoutcast" гугл выдает мой проект под строчкой номер один :)&lt;br /&gt;
&lt;br /&gt;
И делат он это потому что это выбор пользователей, то есть ваш выбор!&lt;br /&gt;
&lt;br /&gt;
Спасибо!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://code.google.com/p/rhythmbox-shoutcast/"&gt;http://code.google.com/p/rhythmbox-shoutcast/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4368551236419920662?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4368551236419920662/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/09/rhythmbox-shoutcast.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4368551236419920662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4368551236419920662'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/09/rhythmbox-shoutcast.html' title='Rhythmbox Shoutcast'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4458051464686762206</id><published>2011-08-19T17:36:00.006+04:00</published><updated>2011-12-26T16:04:11.338+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Apple Multi OS Fail</title><content type='html'>Довно пробую различные миксы ОС на моем ноуте для получения максимальной отдачи. Всегда пытался получить максимум из железки и от каждой ОС в отдельности. Так работая в интернете я запускал Mac, программируя - Linux, а играя - Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
К сожалению со времением пришел к выводу что ни железо, ни прошивки ни сами ОС не самодостаточны и требуют тюнинга, решения которого до сих пор нет.&lt;br /&gt;
&lt;br /&gt;
Так например запустить любую ОС на Аппл железе у вас получится с серезными ограничениями. Дело в том что прошивка EFI на ноутбуках Аппл очень старая&amp;nbsp; и давно уже не совместима с последними стандартами, а все ОС отличные от Мака требуют EFI более новую.&lt;br /&gt;
&lt;br /&gt;
Смотрите сами на таблицу:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://support.apple.com/kb/ht1237?viewlocale=ru_RU"&gt;http://support.apple.com/kb/ht1237?viewlocale=ru_RU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
На ней видно, что новая прошивка (EFI 2.0 возможно это UEFI 2.0) появляется только в 2010 году и на момет написания статьи доступна на паре ноутбуков.&lt;br /&gt;
&lt;br /&gt;
Что же остается пользователям которые не получили долгожданную UEFI 2.0?&lt;br /&gt;
&lt;br /&gt;
Для этих пользователей EFI Apple поддерживает режим эмуляции BIOS&amp;nbsp; и позволяет загружать ОС с жесткого диска с MBR загрузчика.&lt;br /&gt;
&lt;br /&gt;
При использовании этой возможности так же накладываются ограничения на остальные внешние устройства. Так например ваша клавиатура нотбука может не работать после перехода в режим эмуляции биоса до полного старта ОС. Или еще более неудобное ограничение - вы не можете запуститься с внешнего CD \ Флешки подключенных по USB.&lt;br /&gt;
&lt;br /&gt;
Другими словами - сломайся на ноутбуке СД и вы полностью лишены возможности запустить другую ОС отличную на Мак ОСХ.&lt;br /&gt;
&lt;br /&gt;
Интересные замечания есть на сайте REFIT в разделе слухи и мифы. Где подробно рассматривают различные ограничения этой EFI от Аппл:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://refit.sourceforge.net/myths/"&gt;http://refit.sourceforge.net/myths/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Теперь посмотрим на то что у нас остается для тех кто хочет запускать другие ОС на железе от аппл.&lt;br /&gt;
 &lt;br /&gt;
Ваш жесткий диск будет иметь гибридный загрузчик. Это означает что на диске будет 2 таблицы разделов полностью независимых друг от друга с возможностью их синхронизации. Одна для GPT диска и содержит до 128 возможных разделов. А вторая таблица MBR и на ней может быть указано до 4 разделов (технологическое ограничение).&lt;br /&gt;
&lt;br /&gt;
Второй момент. Если вы установлии ОС Х у вас на жестком диске есть минимум 3 портиции 
испольованные для этой самой ОС. Следовательно для остальных ОС у вас есть только 1 свободная партиция которую вы можете использовать для установки дополнительной ОС.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, технически возможно, выбрать необходимые партиции с раздела GPT и делать маппинг этих разделов в область MBR, а ненужные занятые разделы ОСХ вообще не мапить в MBR область. Но на сегодняшний момент ни одна программа работы с дисками этого не поддерживает и если вы даже решите так поступать - придется это делать руками. А с другой стороны даже если бы такая возможность была, то будете ограничены 4 различными ОС и ни одной больше. И еще один очень печальный момент - большинство программ автоматически синхронизируют разделы между GPT и MBR&amp;nbsp; и после того как вы руками произведете все настройки в MBR секторе hex редактором - эти настройки внезапно пропадают.&lt;br /&gt;
 &lt;br /&gt;
Все эти ограничения неудачной эмуляции от Аппл возможно решить используя современные ОС с поддержкой EFI 1.1, которая установлена на большинстве ноутбуков от аппл. Но к сожалению таких ОС с поддержкой такой старой версии не много.&lt;br /&gt;
&lt;br /&gt;
Линукс поддерживает EFI 1.1 с серезными ограничениями, Виндус не поддерживат вообще. И я не думаю что версия Windows 8 вдруг включит эту поддержку.&lt;br /&gt;
&lt;br /&gt;
Интересные рассуждения на этот счет написал человек (помоему работает в редхад, и разрабатывает драйвера для видео карт АТИ) и подробно выставляет все сложности перехода:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mjg59.dreamwidth.org/4957.html"&gt;http://mjg59.dreamwidth.org/4957.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mjg59.dreamwidth.org/2929.html"&gt;http://mjg59.dreamwidth.org/2929.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mjg59.dreamwidth.org/4125.html"&gt;http://mjg59.dreamwidth.org/4125.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mjg59.dreamwidth.org/3611.html"&gt;http://mjg59.dreamwidth.org/3611.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mjg59.dreamwidth.org/3244.html"&gt;http://mjg59.dreamwidth.org/3244.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Вообщем пока использовать железо Аппл с другой ОС крайне не удобно, а сама ОСХ требует нехилых доработок что бы быть операционной системой номер один.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4458051464686762206?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4458051464686762206/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/08/apple-multi-os-fail.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4458051464686762206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4458051464686762206'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/08/apple-multi-os-fail.html' title='Apple Multi OS Fail'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8788607418752133440</id><published>2011-07-26T23:10:00.004+04:00</published><updated>2012-01-02T14:13:14.511+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>MacMini network booting</title><content type='html'>&lt;br /&gt;
Небольшая инструкция о том как устновить \ запустить линукс на Mac Mini (PPC) без работающего СД.&lt;br /&gt;
&lt;br /&gt;
Для этого достаточно на любой рабочей машине в сети установить tftp сервер и загрузить на него образ debian.&lt;br /&gt;
&lt;br /&gt;
Установка tftp сервера не вызывает проблем.&lt;br /&gt;
&lt;br /&gt;
# sudo port install tftp-hpa&lt;br /&gt;
&lt;br /&gt;
Далее необходимо зайти на сайт debian и скачать нужный образ.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.debian.org/distrib/netinst"&gt;http://www.debian.org/distrib/netinst&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Далее в разделе Network boot необходмо выбрать свою архитектуру процессора (powerpc) и скачать установочные файлы:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/boot.msg" rel="nofollow"&gt;boot.msg&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/initrd.gz" rel="nofollow"&gt;initrd.gz&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/vmlinux" rel="nofollow"&gt;vmlinux&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/yaboot" rel="nofollow"&gt;yaboot&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/yaboot.conf" rel="nofollow"&gt;yaboot.conf&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Файлы необходимо поместить в папку tftp на локальной машине. И запустить сервер.&lt;br /&gt;
&lt;br /&gt;
Для версии &lt;b&gt;Debian Squeeze:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
# cd&amp;nbsp; /opt/local/var/tftp-hpa/&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/boot.msg&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/initrd.gz&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/vmlinux&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/yaboot&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-powerpc/current/images/powerpc/netboot/yaboot.conf&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Debian Lenny:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-powerpc/current/images/powerpc/netboot/yaboot&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-powerpc/current/images/powerpc/netboot/boot.msg&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-powerpc/current/images/powerpc/netboot/initrd.gz&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-powerpc/current/images/powerpc/netboot/vmlinux&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-powerpc/current/images/powerpc/netboot/yaboot.conf&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Debian Wheezy:&lt;/b&gt;&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-powerpc/current/images/powerpc/netboot/boot.msg&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-powerpc/current/images/powerpc/netboot/initrd.gz&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-powerpc/current/images/powerpc/netboot/vmlinux&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-powerpc/current/images/powerpc/netboot/yaboot&lt;br /&gt;
# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-powerpc/current/images/powerpc/netboot/yaboot.conf&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
# sudo tftpd -L -c -s /opt/local/var/tftp-hpa/&lt;br /&gt;
&lt;br /&gt;
Далее необходимо на маке войти в openfirmware (Command + Option + F + O или WindowsKey + Alt + F + O) и прописать в переменную загрузки boot-device и указать адрес сервера.&lt;br /&gt;
&lt;br /&gt;
# boot enet:192.168.54.104,yaboot&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
# setenv boot-device enet:192.168.54.104,yaboot&lt;br /&gt;
# boot&lt;br /&gt;
&lt;br /&gt;
Для отладке на стороне сервера можно использовать:&lt;br /&gt;
&lt;br /&gt;
# sudo tcpdump -i en1 port 69&lt;br /&gt;
&lt;br /&gt;
Далее, после установки линукса, возможно использование следующих команд для переключения мака на загрузку с жесткого диска или переключить обратно на загрузку tftp.&lt;br /&gt;
&lt;br /&gt;
# sudo nvsetenv boot-device "enet:192.168.54.104,yaboot" &lt;br /&gt;
&lt;br /&gt;
# sudo nvsetenv boot-device hd:,\\\\:tbxi&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Возможные проблемы:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Если вы ошиблись и ваш макмини-сервер завис ненайдя tftp не пугайтесь достаточно пождожать около 3 минут и загрузка продолжится с жесткого диска.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;На моей машине не всегда появляется самый диалог выбора загрузки ядра и машина на этом этапе зависает. Если вы сталкнулись с той же проблеммой просто откройте файл yaboot.conf и добавте таймаут после любой строки:&lt;br /&gt;&lt;br /&gt;timeout=3&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;Иногда он долго грузится прежде чем показать ядро или приветствие, подождите минуту &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Не все модели Win-клавиатур поддерживают ввод до загрузки ОС. Потому если сочитание клавишь Windows + Alt + F + O не работает - остается либо найти мак-клавиатуру или найти у соседа совместимую Win с поддержкой мака. Так же можете настроить boot-dev из самой Mac OS X. (Например у меня не работает Genius (Genius SlimStar 100) клава, а Logitech (Logitech® Ultra-Flat Keyboard m/n: Y-BP62a p/n: 867673-0112 pid: sy617uk) работает). Насколько я помню это вызвано не правильной инициализацией самой клавиатуры, требующей больше команд и доступной только после запуска биоса.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Если любой из Debian дистрибутивов зависает при запуске - попробуйте другую версиюю: более ранюю или полее позднюю. (У меня зависает последний Squeeze. Притом что Lenny и Wheezy работают)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8788607418752133440?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8788607418752133440/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/07/macmini-network-booting.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8788607418752133440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8788607418752133440'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/07/macmini-network-booting.html' title='MacMini network booting'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1676156772622668204</id><published>2011-07-20T16:20:00.003+04:00</published><updated>2011-12-26T16:04:25.628+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Mac OS X Linux printer browse</title><content type='html'>Как подключить принтер находящейся на линукс машине к Маку?&lt;br /&gt;
&lt;br /&gt;
Достаточно зайти по адресу http://localhost:631/admin&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-9djgWn7eu1M/TibH_4PdCGI/AAAAAAAAFXk/wlL5mE7d6Xw/s1600/Screen+shot+2011-07-20+at+16.18.55+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://2.bp.blogspot.com/-9djgWn7eu1M/TibH_4PdCGI/AAAAAAAAFXk/wlL5mE7d6Xw/s320/Screen+shot+2011-07-20+at+16.18.55+.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Нажать на кнопку Edit configuration file и добавить строчку:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;BrowseRemoteProtocols CUPS dnssd&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
прямо&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;перед:&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;BrowseLocalProtocols CUPS dnssd&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
В результате получится что-то следующее:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Jx04P7NDSlA/TibH_TpxHmI/AAAAAAAAFXg/GpitOAy5Uvw/s1600/Screen+shot+2011-07-20+at+16.18.42+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-Jx04P7NDSlA/TibH_TpxHmI/AAAAAAAAFXg/GpitOAy5Uvw/s320/Screen+shot+2011-07-20+at+16.18.42+.png" width="311" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
После этих действий можно заходить в Системные настройки и добавлять принтер в ручную.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1obsisKO_Ng/TibIm602TNI/AAAAAAAAFXo/Wh1D3wTKtnE/s1600/Screen+shot+2011-07-20+at+16.21.46+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://3.bp.blogspot.com/-1obsisKO_Ng/TibIm602TNI/AAAAAAAAFXo/Wh1D3wTKtnE/s320/Screen+shot+2011-07-20+at+16.21.46+.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1676156772622668204?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1676156772622668204/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/07/mac-os-x-linux-printer-browse.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1676156772622668204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1676156772622668204'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/07/mac-os-x-linux-printer-browse.html' title='Mac OS X Linux printer browse'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9djgWn7eu1M/TibH_4PdCGI/AAAAAAAAFXk/wlL5mE7d6Xw/s72-c/Screen+shot+2011-07-20+at+16.18.55+.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7687498925297454935</id><published>2011-03-22T23:56:00.005+03:00</published><updated>2011-03-22T23:59:04.712+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Dancing Android</title><content type='html'>&lt;iframe title="YouTube video player" width="1000" height="750" src="http://www.youtube.com/embed/rTUwqxHpXMY?hd=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7687498925297454935?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7687498925297454935/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/03/dancing-android.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7687498925297454935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7687498925297454935'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/03/dancing-android.html' title='Dancing Android'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/rTUwqxHpXMY/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3278775543358588340</id><published>2011-02-20T12:47:00.008+03:00</published><updated>2011-08-17T21:14:34.133+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Dropbox with Debian Squeeze</title><content type='html'>Для создания пакета nautilus-dropbox.deb необходимо:&lt;br /&gt;
&lt;br /&gt;
1) Создать дирреторию для сборки и получить исходники&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# mkdir ~/source&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# cd ~/source/&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# wget https://www.dropbox.com/download?dl=packages/nautilus-dropbox-0.6.7.tar.bz2 -O nautilus-dropbox-0.6.7.tar.bz2&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# tar -xvf nautilus-dropbox-0.6.7.tar.bz2&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# cd nautilus*&lt;/div&gt;
&lt;br /&gt;
2) Постараться собрать и найти все недостающие пакеты: &lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# ./configure&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# make&lt;/div&gt;
&lt;br /&gt;
То что понадобилось на моей машине:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# sudo apt-get install dh-make&lt;br /&gt;
# sudo apt-get install autotools-dev &lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# sudo apt-get install python-gtk2-dev&lt;br /&gt;
# sudo apt-get install libnautilus-extension-dev &lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# sudo apt-get install python-docutils&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;/div&gt;
&lt;br /&gt;
3) создать&amp;nbsp; debian/ дирреторию со всеми необходимыми описаниями.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# dh_make -f ../nautilus-dropbox-0.6.7.tar.bz2&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
(выбрать single binary нажатием s)&lt;br /&gt;
&lt;br /&gt;
4) создать debian пакет (.deb)&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# dpkg-buildpackage -rfakeroot&lt;/div&gt;
&lt;br /&gt;
5)&amp;nbsp; установить только что созданный пакет&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
# sudo dpkg -i ../nautilus-dropbox_0.6.7-1_amd64.deb&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3278775543358588340?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3278775543358588340/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/02/dropbon-with-debian-squeeze.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3278775543358588340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3278775543358588340'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/02/dropbon-with-debian-squeeze.html' title='Dropbox with Debian Squeeze'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6877681520421177347</id><published>2011-02-19T12:39:00.005+03:00</published><updated>2012-01-09T23:06:46.035+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache22'/><category scheme='http://www.blogger.com/atom/ns#' term='trac'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Настройка trac + svn + hg + git + pam auth</title><content type='html'>Как сделать авторизацию на корпоративный сайт разработчика простой и удобной как для самих разрабочиков так и для администратора?&lt;br /&gt;
&lt;br /&gt;
Ответ простой - использовать одну систему авторизации. Я использую системную, в тех случаях где можно перейти на pam или авторизацию по паролю я это делаю при первой возможности. Для доступа на сайт обязательно использование SSL шифрования (https) что бы системные логины не летали по http протоколу в открытую. Итак конфигруация.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Создание репозитория svn и настройка trac довольно хорошо описана в интернете потому просто приведу пути до репозиториев и конфигруацию apache + ssl (libapache2-mod-authnz-external).&lt;br /&gt;
&lt;br /&gt;
# apt-get install libapache2-mod-authnz-external&lt;br /&gt;
# a2enmod authnz_external&lt;br /&gt;
# a2enmod ssl&lt;br /&gt;
# a2enmod dav&lt;br /&gt;
# a2enmod dav_fs&lt;br /&gt;
# a2enmod authz_unixgroup &lt;br /&gt;
# a2ensite default-ssl &lt;br /&gt;
&lt;br /&gt;
Настройка git репозитория на стороне сервера требует нескольких шагов:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;git init --bare web_repo&lt;/i&gt; или &lt;i&gt;git clone --bare source web_repo&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;cd web_repo; mv hooks/post-update.sample hooks/post-update; ./hooks/post-update&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;chmod a+rw -R . &lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;b&gt;/var/lib/svn&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;README.txt&amp;nbsp;&lt;/li&gt;
&lt;li&gt;conf&lt;/li&gt;
&lt;li&gt;dav&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;db&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;format&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;hooks&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;locks&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;svn&lt;b&gt; &lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;/var/lib/trac&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;README&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;VERSION&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;attachments&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;conf&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;htdocs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;log&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;plugins&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;templates&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;/var/lib/git/&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;  axet --&amp;gt; /home/axet/git&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;/etc/apache2/conf.d/trac&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ScriptAlias /trac /var/www/trac/cgi-bin/trac.fcgi/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AddExternalAuth pwauth /usr/sbin/pwauth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SetExternalAuthMethod pwauth pipe&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;Location /trac&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SetHandler mod_python&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; PythonHandler trac.web.modpython_frontend&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; PythonInterpreter main&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; PythonOption TracEnv /var/lib/trac&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; PythonOption TracUriRoot /trac&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SetEnv PYTHON_EGG_CACHE /tmp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthType Basic&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthName "Your company project name"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthBasicProvider external&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthExternal pwauth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require valid-user&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require group developers&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLOptions +StrictRequire&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLRequireSSL&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;Location "/trac/login"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthPAM_Enabled On&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthType Basic&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthName "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Your company project name&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthBasicProvider external&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthExternal pwauth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require valid-user&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require group developers&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLOptions +StrictRequire&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLRequireSSL&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/location&amp;gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;/etc/apache2/conf.d/svn&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AddExternalAuth pwauth /usr/sbin/pwauth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SetExternalAuthMethod pwauth pipe&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;Location /svn&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; DAV svn&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SVNPath /var/lib/svn&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthzSVNAccessFile /var/lib/svn/conf/authz&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthType Basic&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthName "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Your company project name&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthBasicProvider external&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthExternal pwauth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require valid-user&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Require group developers&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLOptions +StrictRequire&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; SSLRequireSSL&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/apache2/conf.d/hg&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AddExternalAuth pwauth /usr/sbin/pwauth&lt;br /&gt;
SetExternalAuthMethod pwauth pipe&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /hg /var/lib/hg/hgweb.cgi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /hg&amp;gt;&lt;br /&gt;
&amp;nbsp; AuthType Basic&lt;br /&gt;
&amp;nbsp; AuthName "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Your company project name&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"&lt;br /&gt;
&amp;nbsp; AuthBasicProvider external&lt;br /&gt;
&amp;nbsp; AuthExternal pwauth&lt;br /&gt;
&amp;nbsp; Require valid-user&lt;br /&gt;
&amp;nbsp; Require group developers&lt;br /&gt;
&amp;nbsp; SSLOptions +StrictRequire&lt;br /&gt;
&amp;nbsp; SSLRequireSSL&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/apache2/conf.d/git&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AddExternalAuth pwauth /usr/sbin/pwauth&lt;br /&gt;SetExternalAuthMethod pwauth pipe&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SetEnv GIT_PROJECT_ROOT /var/lib/git&lt;br /&gt;SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;Location /git&amp;gt;&lt;br /&gt;&amp;nbsp; AuthType Basic&lt;br /&gt;&amp;nbsp; AuthName "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Your company project name&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"&lt;br /&gt;&amp;nbsp; AuthBasicProvider external&lt;br /&gt;&amp;nbsp; AuthExternal pwauth&lt;br /&gt;&amp;nbsp; Require valid-user&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; AuthzUnixgroup on&lt;br /&gt;&amp;nbsp; Require group developers&lt;br /&gt;&amp;nbsp; SSLOptions +StrictRequire&lt;br /&gt;&amp;nbsp; SSLRequireSSL&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;/var/lib/hg/hgweb.cgi&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; #&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; # An example hgweb CGI script, edit as necessary&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; # See also http://mercurial.selenic.com/wiki/PublishingRepositories&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; # Path to repo or hgweb config to serve (see 'hg help hgweb')&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; config = "/var/lib/hg/repos"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; # Uncomment and adjust if Mercurial is not installed system-wide:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; #import sys; sys.path.insert(0, "/path/to/python/lib")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; # Uncomment to send python tracebacks to the browser if an error occurs:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; #import cgitb; cgitb.enable()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import os&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;os.environ["HGENCODING"] = "UTF-8" &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; from mercurial import demandimport; demandimport.enable()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; from mercurial.hgweb import hgweb, wsgicgi&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; application = hgweb(config)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; wsgicgi.launch(application)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/var/lib/hg/repos&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[collections]&lt;br /&gt;
/var/lib/hg = /var/lib/hg&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6877681520421177347?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6877681520421177347/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/02/trac-svn-pam-auth.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6877681520421177347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6877681520421177347'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/02/trac-svn-pam-auth.html' title='Настройка trac + svn + hg + git + pam auth'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3700559915095368716</id><published>2011-02-02T16:07:00.008+03:00</published><updated>2011-02-20T12:49:37.341+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian Squeeze cross compiling (32 binarys on 64 host)</title><content type='html'>Как собрать 32 битный бинарник на 64 хосте для Дебиана?&lt;br&gt;
&lt;br&gt;
Все это очень подробно описано на странице:&lt;br&gt;
&lt;br&gt;
&lt;a href="http://wiki.debian.org/BuildingCrossCompilers"&gt;http://wiki.debian.org/BuildingCrossCompilers&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Однако опущен момент с дополинтельными библиотеками, устанавливать которые придется вручную.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2011/02/debian-squeeze-cross-compiling-32.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3700559915095368716?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3700559915095368716/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/02/debian-squeeze-cross-compiling-32.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3700559915095368716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3700559915095368716'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/02/debian-squeeze-cross-compiling-32.html' title='Debian Squeeze cross compiling (32 binarys on 64 host)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3480862332269545378</id><published>2011-01-22T20:56:00.000+03:00</published><updated>2011-01-22T20:56:35.089+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox-shoutcast 2.0.1</title><content type='html'>rhythmbox-shoutcast 2.0.1 за первый месяц после релиза скачен более чем 1000 раз! Предыдущий релиз за тот же период был скачен около 800 раз.&lt;br /&gt;
&lt;br /&gt;
Положительная тенденция, и очень хорошее настроение!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3480862332269545378?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3480862332269545378/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2011/01/rhythmbox-shoutcast-201.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3480862332269545378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3480862332269545378'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2011/01/rhythmbox-shoutcast-201.html' title='rhythmbox-shoutcast 2.0.1'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4601157258899577375</id><published>2010-12-28T14:22:00.002+03:00</published><updated>2011-01-02T23:37:13.305+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox-shoutcast 2.0</title><content type='html'>Поздравляю с наступающим новым годом и новым релизом плагина rhythmbox-shoutcast!&lt;br&gt;
&lt;br&gt;
Две вещи хочется отметить особо:&lt;br&gt;
&lt;br&gt;
1) как же люди жадные до денег и не умеющие создавать хорошие сообщества мешают людям и себе развиваться.&lt;br&gt;
&lt;br&gt;
2) вторая новость. хорошая. как показал себя opensource с хорошей стороны.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/12/rhythmbox-shoutcast-20.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4601157258899577375?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4601157258899577375/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/12/rhythmbox-shoutcast-20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4601157258899577375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4601157258899577375'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/12/rhythmbox-shoutcast-20.html' title='rhythmbox-shoutcast 2.0'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8627276527817991461</id><published>2010-10-27T12:33:00.003+04:00</published><updated>2010-12-10T10:30:23.070+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macports'/><title type='text'>Mac OSX Java boken</title><content type='html'>Последнее обновление от Аппл, убивает яву:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sh-3.2# ls /System/Library/Frameworks/JavaVM.framework/Headers/&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;AWTCocoaComponent.h&amp;nbsp;&amp;nbsp;&amp;nbsp; NSJavaConfiguration.h&amp;nbsp;&amp;nbsp;&amp;nbsp; jdwpTransport.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JDWP.h&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NSJavaVirtualMachine.h&amp;nbsp;&amp;nbsp;&amp;nbsp; jni.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JDWPCommands.h&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jawt.h&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jni_md.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JavaVM.h&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jawt_md.h&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jvmti.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sh-3.2# ls /System/Library/Frameworks/JavaVM.framework/Headers/jni.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/System/Library/Frameworks/JavaVM.framework/Headers/jni.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sh-3.2# cat /System/Library/Frameworks/JavaVM.framework/Headers/jni.h&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cat: /System/Library/Frameworks/JavaVM.framework/Headers/jni.h: No such file or directory&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sh-3.2# &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://trac.macports.org/ticket/26934"&gt;http://trac.macports.org/ticket/26934&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8627276527817991461?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8627276527817991461/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/10/mac-osx-java-boken.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8627276527817991461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8627276527817991461'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/10/mac-osx-java-boken.html' title='Mac OSX Java boken'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3575611320002036469</id><published>2010-10-26T10:56:00.000+04:00</published><updated>2010-10-26T10:56:31.096+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Mozilla bugfix flame</title><content type='html'>&amp;gt; Don't know if anybody realized but it too almost excatcly 10 years to fix this&lt;br /&gt;
&amp;gt; bug, as it was filed on 2000-10-29&lt;br /&gt;
&lt;br /&gt;
I actually already had a "congratulate bug 58406 on its birthday" task in my&lt;br /&gt;
calendar. How can you be so heartless and kill it just a few days from its 10th&lt;br /&gt;
birthday? ;-)&lt;br /&gt;
&lt;br /&gt;
https://bugzilla.mozilla.org/show_bug.cgi?id=58406&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Исправить ошибку это не настоящий праздник, настоящий праздник только в нужной последовательности!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Астров. Что ты сегодня такой печальный? Профессора жаль, что ли?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Войницкий. Оставь меня.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Астров. А то, может быть, в профессоршу влюблен?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Войницкий. Она мой друг.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Астров. Уже?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Войницкий. Что значит это "уже"?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Астров. Женщина может быть другом мужчины лишь в такой последовательности: сначала приятель, потом любовница, а затем уж друг.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;br /&gt;
&lt;i&gt;А.П.Чехов&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3575611320002036469?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3575611320002036469/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/10/mozilla-bugfix-flame.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3575611320002036469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3575611320002036469'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/10/mozilla-bugfix-flame.html' title='Mozilla bugfix flame'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5220184222114269870</id><published>2010-10-18T11:35:00.002+04:00</published><updated>2010-10-18T11:35:59.976+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>ip4 counter</title><content type='html'>&lt;script type="text/javascript" language="javascript" src="http://inetcore.com/project/ipv4ec/en-us/wolf_c.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
http://inetcore.com/project/ipv4ec/index_en.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5220184222114269870?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5220184222114269870/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/10/ip4-counter.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5220184222114269870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5220184222114269870'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/10/ip4-counter.html' title='ip4 counter'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4898720225211758114</id><published>2010-10-03T10:10:00.001+04:00</published><updated>2010-10-03T10:14:12.413+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>zyxel adsl p-660h ee</title><content type='html'>Довольно долго у меня был ADSL модем zyxel adsl p-660h ee. За это время я успел попробовать этот модем на вскус и получить массу негативных эмоций. Это и зависание модема, и тормоза вызванные самим модемом, и непонятные причины препятствующие восстановлению соединения, и регулярное отключение службы upnp...&lt;br /&gt;
&lt;br /&gt;
Если у вас будет выбор между adsl модемами, берите dlink. Почему? Потому что у них открытая (open source) прошивка. И скажем, если через 5 лет, adsl стандарты не поменяются, а появится поддержка ipv6 то скорей всего вам даже не придется менять модем. Просто скачаете новую прошибвку и все.&lt;br /&gt;
&lt;br /&gt;
Кстати, насчет поддержки. Я писал обо всех проблемах в службу поддержки zyxel, описывал зависания и все выше перечисленные проблемы. Все что мне там посоветовали это перезагрузить модем или обновить прошивку выложенную у них на сайте 4 летней давности.&lt;br /&gt;
&lt;br /&gt;
При том, когда у моего dlink wifi роутер появились проблемы с получением динамического адреса, написав в их поддержку мне не то что ответили, а даже перезвонил спец уточнить детали. Но так как адрес, выдавался zyxel модемом, то и выяснить проблему до конца не удалось. Так что выбор - за нормальной поддержкой и open source!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ссылки по теме:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="ftp://ftp.dlink.ru/pub/ADSL/GPL_source_code/"&gt;ftp://ftp.dlink.ru/pub/ADSL/GPL_source_code/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4898720225211758114?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4898720225211758114/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/10/zyxel-adsl-p-660h-ee.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4898720225211758114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4898720225211758114'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/10/zyxel-adsl-p-660h-ee.html' title='zyxel adsl p-660h ee'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-377272477355571928</id><published>2010-09-24T21:12:00.000+04:00</published><updated>2010-09-24T21:12:33.299+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Учитесь честно достигать успеха</title><content type='html'>Кроме того... писать в свой блог!&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;br /&gt;
Учитесь честно достигать успеха&lt;br /&gt;
И привлекать благодаря уму.&lt;br /&gt;
А побрякушки, гулкие, как эхо,&lt;br /&gt;
Подделка и не нужны никому.&lt;br /&gt;
Когда всерьез владеет что-то вами,&lt;br /&gt;
Не станете вы гнаться за словами,&lt;br /&gt;
А рассужденья, полные прикрас,&lt;br /&gt;
Чем обороты ярче и цветистей,&lt;br /&gt;
Наводят скуку, как в осенний час&lt;br /&gt;
Вой ветра, обрывающего листья.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;Иоганн Гете (в переводе Б. Пастернак) &lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-377272477355571928?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/377272477355571928/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post_1947.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/377272477355571928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/377272477355571928'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post_1947.html' title='Учитесь честно достигать успеха'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1824530135515228166</id><published>2010-09-24T21:02:00.000+04:00</published><updated>2010-09-24T21:02:38.559+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Командная работа</title><content type='html'>Работать сообща в коллективе, двигаясь к общей цели можно разными способами.&lt;br /&gt;
&lt;br /&gt;
Совместная работа это не просто получение прыбыли компанией, а умение находить общий язык в стремлении к понятным для всех целям.&lt;br /&gt;
&lt;br /&gt;
Кто-то идет заниматься карьерой, ставя свои решения выше других предложений и тем самым убивает рационалность. Кто-то приводит структурное решение, давящее бюракратией. И то и другое рождает нравственное сопративление, которое разрушает рабочий коллектив.&lt;br /&gt;
&lt;br /&gt;
И на мой взгляд, самым эффективным способом управления и образцом подражания понятным для всех есть открытое программное обеспечение.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; — Погодите, я сам скажу, что я думаю. Я думаю, что если бы  дремлющего в человеке зверя можно было остановить угрозою, все равно,  каталажки или загробного воздаяния, высшею эмблемой человечества был бы  цирковой укротитель с хлыстом, а не жертвующий собою проповедник. Но в  том-то и дело, что человека столетиями поднимала над животным и уносила  ввысь не палка, а музыка: неотразимость безоружной истины,  притягательность ее примера. До сих пор считалось, что самое важное в  Евангелии нравственные изречения и правила, заключенные в заповедях, а  для меня самое главное то, что Христос говорит притчами из быта, поясняя  истину светом повседневности. В основе этого лежит мысль, что общение  между смертными бессмертно и что жизнь символична, потому что она  значительна.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;Борис Пастернак &amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1824530135515228166?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1824530135515228166/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post_24.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1824530135515228166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1824530135515228166'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post_24.html' title='Командная работа'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-9179432313526780552</id><published>2010-09-23T17:27:00.002+04:00</published><updated>2010-12-10T10:16:31.429+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox progress</title><content type='html'>Не жданно не гадано, мое приложение к проигрывателю rhythmbox начало стремительно заваевывать симпатии у пользователей. Идет этот успех постепенно и расспространяется в интернете как сафранное радио, быстро, интересно и с большим удовольствием.&lt;br&gt;
&lt;br&gt;
На сегодняшний момент меньше чем за 2 месяца после последнего релиза, приложение скачали 1100 раз! Это по 550 человек в месяц.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/09/rhythmbox-progress.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-9179432313526780552?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/9179432313526780552/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/rhythmbox-progress.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9179432313526780552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9179432313526780552'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/rhythmbox-progress.html' title='rhythmbox progress'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3557849417333711451</id><published>2010-09-22T23:03:00.001+04:00</published><updated>2010-09-22T23:04:29.905+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>С днем программиста.. ой.</title><content type='html'>Профессия профессией, а все-таки надо иногда читать книжки :)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Есть две стороны жизни в каждом человеке: жизнь личная, которая тем более свободна, чем отвлеченнее ее интересы, и жизнь стихийная, роевая, где человек неизбежно исполняет предписанные ему законы.&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;Л. Н. Толстой&lt;/i&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3557849417333711451?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3557849417333711451/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3557849417333711451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3557849417333711451'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/blog-post.html' title='С днем программиста.. ой.'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8587283896758626672</id><published>2010-09-15T15:30:00.000+04:00</published><updated>2010-09-15T15:30:40.543+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Russian Linux</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img12.nnm.ru/f/8/b/3/1/d88ff8f9245b510bdee92868db0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://img12.nnm.ru/f/8/b/3/1/d88ff8f9245b510bdee92868db0.jpg" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;i&gt;И тогда-то решила - бежать, бежать... Я хочу, чтобы ты понял меня, помог... Я хочу бежать из России...&lt;/i&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: right;"&gt;&lt;i&gt;А. Н. Толстой&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8587283896758626672?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8587283896758626672/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/russian-linux.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8587283896758626672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8587283896758626672'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/russian-linux.html' title='Russian Linux'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5229625056162301674</id><published>2010-09-03T18:46:00.001+04:00</published><updated>2010-12-10T10:17:31.487+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>chat/ppp</title><content type='html'>Всегда я ощущал какую-то магическую силу за протоколом общения между компьютером с модемным соединением и стороной сервера. Мне казалось это происходит при участии кучи программ со сложными условиями, которые конкурируют друг с другом и пытаются сделать наше соединение стабильным.&lt;br&gt;
&lt;br&gt;
И это загадочное чувство, чего-то страшного, меня не покинуло бы ни когда, если бы я не прочитал документацию. И все встало на свои места.&lt;br&gt;
&lt;br&gt;
Знаете, доволно это распространенная штука chat/ppp соединение. Используется их можно установить обыкновенное dialup  соединение, коммутируемое в звуковом диапазоне легко распозноваемое человеком на не вооруженное ухо. А еще есть adsl  соединение, еще есть GPRS. И что меня заставило взять документацию в руки это - ppp/chat соединение с карманными комьпютерами.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/09/chatppp.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5229625056162301674?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5229625056162301674/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/09/chatppp.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5229625056162301674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5229625056162301674'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/09/chatppp.html' title='chat/ppp'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2106012574049028362</id><published>2010-08-22T23:02:00.000+04:00</published><updated>2010-08-22T23:02:04.663+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='value'/><title type='text'>Третья кнопка</title><content type='html'>Сколько было всего эксперементов с таким привычным устройсйством ввода как компьютерная мышка.&lt;br /&gt;
&lt;br /&gt;
Новые кнопки, дизайн, разрешение и эта эпопея не может остановится. Постоянные непрерывные изменения и новые улучшения... которыми можно с трудом пользоваться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Лично я уже отказался от всех предложений в этом сегменте рынка и прикупил Гениус мышку за 200 рублей. Две кнопки и лазер с низу.&lt;br /&gt;
&lt;br /&gt;
Но вот одно улучшение, которое мне сейчас кажется приживется: добавить еще одну кнопку - прикосновение. Это некоторый гибрид между активным экраном, тачпадом и привычным нам устройством вода с новый логикой более удобного управления.&lt;br /&gt;
&lt;br /&gt;
Только подумайте как это станет удобно. Теперь позиция мышки сочетается совместно с наличием руки на указателе, если вы убераете руку&amp;nbsp; - программа это сразу же понимает и не делает никаких действий на активной области. Как толко кладете, срабатывает стандартная логика.&lt;br /&gt;
&lt;br /&gt;
Если это даже не покажется революцией в это области, то во всяком случае это позволит не показывать надаедающие всплывающие окна, загараживающие все на своем пути, на том месте где вы оставили мышку и начали набирать текст.&lt;br /&gt;
&lt;br /&gt;
Как думаете делать на это патент?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2106012574049028362?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2106012574049028362/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/08/blog-post_22.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2106012574049028362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2106012574049028362'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/08/blog-post_22.html' title='Третья кнопка'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3173896887695117916</id><published>2010-08-14T22:08:00.000+04:00</published><updated>2010-08-14T22:08:02.747+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Как создать хороший проект?</title><content type='html'>Терпением и любовью. Теме же приемами, как вопитывать ребенка, не размениваясь по мелочам.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;-- Никогда, никогда не женись, мой друг; вот тебе мой совет: не женись&lt;br /&gt;
до тех пор, пока ты не скажешь себе, что ты сделал все, что мог, и до тех пор, пока ты не перестанешь любить ту женщину, какую ты выбрал, пока ты не увидишь ее ясно; а то ты ошибешься жестоко и непоправимо. Женись стариком, никуда негодным... А то пропадет все, что в тебе есть хорошего и высокого. Все истратится по мелочам. Да, да, да! Не смотри на меня с таким удивлением. Ежели ты ждешь от себя чего-нибудь впереди, то на каждом шагу ты будешь чувствовать, что для тебя все кончено, все закрыто, кроме гостиной, где ты будешь стоять на одной доске с придворным лакеем и идиотом... Да что!... Он энергически махнул рукой.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;Л. Н. Толстой&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3173896887695117916?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3173896887695117916/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3173896887695117916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3173896887695117916'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/08/blog-post.html' title='Как создать хороший проект?'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8489419125360856922</id><published>2010-07-25T12:23:00.003+04:00</published><updated>2010-12-10T10:17:57.302+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox shoutcast stations</title><content type='html'>Как работают favorite stations в плагине rhythmbox-shoutcast?&lt;br&gt;
&lt;br&gt;
Разработка плагина идет полныйм ходом и постоянно раскрывает незначительные особенности той или иной среды в которой приходится работать. Все эти детали, оказывают большое значение на принятие решений и саму разработку этого приложения.&lt;br&gt;
&lt;br&gt;
Сегодня я хочу рассказать об одной из таких проблем, вызванная поведением Шуткаст сервера, которая привела к переработке алгоритма работы со списком &amp;quot;любимых&amp;quot; радио стацний.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/07/rhythmbox-shoutcast-stations.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8489419125360856922?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8489419125360856922/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/07/rhythmbox-shoutcast-stations.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8489419125360856922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8489419125360856922'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/07/rhythmbox-shoutcast-stations.html' title='rhythmbox shoutcast stations'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6188135523125005936</id><published>2010-07-10T06:42:00.004+04:00</published><updated>2010-12-10T10:18:30.379+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>maven assembly projects</title><content type='html'>Покопавшись немного с модной системой сборки для ява - мавин, понял, что она именно модная, а не полезная.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/07/maven-assembly-projects.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6188135523125005936?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6188135523125005936/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/07/maven-assembly-projects.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6188135523125005936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6188135523125005936'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/07/maven-assembly-projects.html' title='maven assembly projects'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-262316356376679252</id><published>2010-05-15T00:07:00.000+04:00</published><updated>2010-05-15T00:07:03.851+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Про улучшения</title><content type='html'>Иногда приходят мысли взять часть кода и оранизовать из нее библиотеку, с нормальной версионностью, с интерфейсами, с описанием АПИ. Один раз собраться, договориться, согласовать. Думаешь всем же будет только в радость, ан нет...&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Граждане, спать пора, потушили бы свечку.&lt;br /&gt;
- То есть как - свечку? Это же вагон...&lt;br /&gt;
- А так - безопаснее как-то... С поля все окна видны - мелькают...&lt;br /&gt;
В вагоне сразу замолчали. Особенно ясно постукивали колеса. Летели&lt;br /&gt;
паровозные искры в темноту степи. Затем кто-то прохрипел в последнем&lt;br /&gt;
негодовании:&lt;br /&gt;
- Кто сказал: "тушить свечку"? (Молчание. Стало жутковато.) Ага,&lt;br /&gt;
свечку... А самому по чемоданам лазить. А вот найти, кто сказал, и с&lt;br /&gt;
площадки - под откос.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;А. Н. Толстой &lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-262316356376679252?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/262316356376679252/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/262316356376679252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/262316356376679252'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/05/blog-post.html' title='Про улучшения'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-590639767904133101</id><published>2010-05-14T09:01:00.001+04:00</published><updated>2010-12-10T10:20:46.834+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Про gosuslugi.ru</title><content type='html'>После грандиозных фанфар на телевидении, горячих и высоких слов президента обозначелся переход нашей страны на новую ветвь развития - интернет век.&lt;br&gt;
&lt;br&gt;
Этот век начинается с преобразования всего плохого во все хорошее путем стандартизации, вывода на чистую воду всех коррупционных схем, создание правовых институтов и механизмов обеспечивающих защиту граждан и самое главное - светлого будущего.&lt;br&gt;
&lt;br&gt;
Казалось бы теперь наступил новый момент общения государства с гражданином и все становится на новые рельсы, как никогда до сих пор! В цепочке гражданин - государство появился новый элемент - компьютер, и благодаря этому элементу, все само собой теперь начнет улучшаться и становится удобным для жизни.&lt;br&gt;
Давайте посмотрим как эта идея воплощена в грандиозном детещи демократии по рассийски на передовом сайте нового поколения - gosuslugi.ru&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/05/gosuslugiru.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-590639767904133101?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/590639767904133101/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/05/gosuslugiru.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/590639767904133101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/590639767904133101'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/05/gosuslugiru.html' title='Про gosuslugi.ru'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4166105641227584661</id><published>2010-04-11T01:16:00.000+04:00</published><updated>2010-04-11T01:16:52.944+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Make Love</title><content type='html'>&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class Base&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;public:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; void MakeLove() {}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;};&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class Try : public Base&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;protected:&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Try() {}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; void DoLove() {}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;};&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;int main(int argc, const char* argv[])&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Try give_a_try;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; give_a_try.DoLove(); &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return 0;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# g++ main.cpp &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main.cpp: In function ‘int main(int, const char**)’:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main.cpp:10: error: ‘Try::Try()’ is protected&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main.cpp:16: error: within this context&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt; Наследовать достоин только тот,&lt;br /&gt;
Кто может к жизни приложить наследство.&lt;br /&gt;
Но жалок тот, кто копит мертвый хлам.&lt;br /&gt;
Что миг рождает, то на пользу нам.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/i&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&amp;nbsp;Иоганн Гете (в переводе Б. Пастернак) &lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4166105641227584661?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4166105641227584661/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/04/make-love.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4166105641227584661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4166105641227584661'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/04/make-love.html' title='Make Love'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1811501296054946200</id><published>2010-04-04T19:13:00.000+04:00</published><updated>2010-04-04T19:13:14.585+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox shoutcast statistics</title><content type='html'>За 4 месяца существования проекта такая статистика:&lt;br /&gt;
&lt;br /&gt;
- проект скачан более 280 раз.&lt;br /&gt;
- за первые три месяца его скачали 140 раз, и за последние 2,5 недели 130!&lt;br /&gt;
- в среднем приложение скачивают 8 человек в день. &lt;br /&gt;
- за все время его посетило 1000 человек и продержались на сайте в среднем 3 минуты.&lt;br /&gt;
- я получил 4 письма с благодрностью и очень хорошими словами.&lt;br /&gt;
- первым по посещяемости среди стран стоит Россия (около 40% трафика), на втором месте USA (35%) и на третьем Германия (20%).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1811501296054946200?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1811501296054946200/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/04/rhythmbox-shoutcast-statistics.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1811501296054946200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1811501296054946200'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/04/rhythmbox-shoutcast-statistics.html' title='rhythmbox shoutcast statistics'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3473953279386366075</id><published>2010-03-23T14:58:00.002+03:00</published><updated>2010-03-23T14:58:54.000+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Э-э-эх, что-то скучно стало</title><content type='html'>Пойду поработаю...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Courier New;"&gt;Ежели людей по работе ценить... тогда лошадь лучше всякого человека... возит и - молчит!&lt;/span&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;М. Горький&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3473953279386366075?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3473953279386366075/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3473953279386366075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3473953279386366075'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/blog-post.html' title='Э-э-эх, что-то скучно стало'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-174495446622363295</id><published>2010-03-21T21:46:00.000+03:00</published><updated>2010-03-21T21:46:01.847+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Linux vs Windows</title><content type='html'>Не часто случается, что я начинаю разберать на анонимном форуме обсуждение недостатков и преимуществ операционных систем. Кто-то говорит о проблемах одной, кто-то защищает другую. И всегда находится какое-то особенное, возмутительное явление, опрактидывающее чашу терпения участников.&lt;br /&gt;
&lt;br /&gt;
Раньше меня это задевало, бросало в бой, а сейчас просто кажется так глупо.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;А здесь на завтра назначено брать штурмом Кремль и арсенал...&lt;br /&gt;
Иван Ильич, мы с Дашей прибежим к вам завтра с утра смотреть революцию...&lt;/span&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;i&gt;А. Н. Толстой&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-174495446622363295?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/174495446622363295/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/linux-vs-windows.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/174495446622363295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/174495446622363295'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/linux-vs-windows.html' title='Linux vs Windows'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5262741313232315748</id><published>2010-03-19T10:46:00.007+03:00</published><updated>2010-12-10T10:22:31.416+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fedora12'/><category scheme='http://www.blogger.com/atom/ns#' term='openvpn'/><title type='text'>OpenVPN for Fedora 12</title><content type='html'>Настроил в очередной раз виртуальную сеть на машине с федорой.&lt;br&gt;
&lt;br&gt;
До этого я один раз описывал как настроить виртуальную сеть для Fedora 9 с использованием сертификатов (&lt;a href="http://blog.axet.ru/2008/04/openvpn-with-fedora-8.html"&gt;http://blog.axet.ru/2008/04/openvpn-with-fedora-8.html&lt;/a&gt;) и вот настал очередной момент когда я решил возобновить пользование этой сеткой.&lt;br&gt;
&lt;br&gt;
В этот раз я хочу описать более подробно как происходит маршрутизация и настройка по шагам с использованием авторизации по паролю (проще настраивать). В таком случае будет значительно меньше вопросов о том &amp;quot;почему моя сеть не работает&amp;quot;.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/03/openvpn-for-fedora-12.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5262741313232315748?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5262741313232315748/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/openvpn-for-fedora-12.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5262741313232315748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5262741313232315748'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/openvpn-for-fedora-12.html' title='OpenVPN for Fedora 12'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7503925555530914871</id><published>2010-03-16T10:09:00.002+03:00</published><updated>2010-12-10T10:22:52.921+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox shoutcast history</title><content type='html'>Сегодня хочу поделится реальным опытом разработки приложения для линукста с минимальным начальным опытом.&lt;br&gt;
&lt;br&gt;
Как вы уже заметили я занимаюсь разработкой небольшого плагина для linux плеера rhythmbox для проигрывания станций с серверов shoutcast. Работа не пыльная, но несмотря на ее простоту к необходимо подходить организованно что бы добиться какого то стабильного результата.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-history.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7503925555530914871?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7503925555530914871/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-history.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7503925555530914871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7503925555530914871'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-history.html' title='rhythmbox shoutcast history'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1524590056649984224</id><published>2010-03-14T18:05:00.001+03:00</published><updated>2010-03-14T18:06:16.161+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox-shoutcast 1.2.2</title><content type='html'>Из приятного: вышел релиз rhythmbox-shoutcast plugin 1.2.2.&lt;br /&gt;
&lt;br /&gt;
Нового по сравнению с релизом 1.0.0:&lt;br /&gt;
&lt;br /&gt;
- автоматическая проверка версии плагина по интернету&lt;br /&gt;
- добавлен фильтр станций отмечанных как "Любимые"&lt;br /&gt;
- добавлена возможность копировать url станции&lt;br /&gt;
- добавлено сохранение поцийий станций\жанров между перезапусками&lt;br /&gt;
&lt;br /&gt;
Из не приятного:&lt;br /&gt;
&lt;br /&gt;
- замечан баг в rhythmdb, метод entry_lookup_by_location, который должен возвращать запись из базы данных по URL работает не всегда корректно.&lt;br /&gt;
&lt;br /&gt;
Скажем можно добавить 100 радио станций с уникальным URL для каждой, а затем попытаться получить нужную стацнию и entry_lookup_by_location может вернуть другую или вообще ничего не вернуть.&lt;br /&gt;
&lt;br /&gt;
Пока что сделал простую отписку в багзиллу gnome.org. Если они будут долго это переваривать, придется смотреть как это работает и где закрылась ошибка.&lt;br /&gt;
&lt;br /&gt;
Думаю что ошибка может быть:&lt;br /&gt;
- при сохранении\загрузки базы данных&lt;br /&gt;
- кривой функции хеширования&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/rhythmbox-shoutcast/"&gt;http://code.google.com/p/rhythmbox-shoutcast/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1524590056649984224?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1524590056649984224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-122.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1524590056649984224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1524590056649984224'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-122.html' title='rhythmbox-shoutcast 1.2.2'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4728207929988685731</id><published>2010-03-07T21:16:00.001+03:00</published><updated>2010-12-10T10:23:37.192+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>rhythmbox-shoutcast small step</title><content type='html'>Немнго продвинулся в написании плагина (переборол лень) и добавил сохранение информации о жанрах и станциях в базу данных. В результате теперь между запусками программы а так же переключениями между жанрами станции не теряются и берутся мгновенно из базы.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-small-step.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4728207929988685731?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4728207929988685731/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-small-step.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4728207929988685731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4728207929988685731'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/rhythmbox-shoutcast-small-step.html' title='rhythmbox-shoutcast small step'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4039635662555806696</id><published>2010-03-06T19:42:00.001+03:00</published><updated>2010-03-06T21:21:58.758+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google gears x64 linux</title><content type='html'>Несмотря на огрожающее "32-bit OS (64-bit not supported)" решил установить последнюю версию Google Gears на свой Linux-x64-Firefox-Box.&lt;br /&gt;
&lt;br /&gt;
И о чудо! Оно заработало!&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://gears.google.com/"&gt;http://gears.google.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4039635662555806696?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4039635662555806696/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/03/google-gears-x64-linux.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4039635662555806696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4039635662555806696'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/03/google-gears-x64-linux.html' title='Google gears x64 linux'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1396273094011052717</id><published>2010-02-27T22:41:00.000+03:00</published><updated>2010-02-27T22:41:30.073+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Haskell</title><content type='html'>Очередное навождение мне предстало в лице Хаскел!&lt;br /&gt;
&lt;br /&gt;
Нет, нет. Это&amp;nbsp; не мужик мне приснился, а статья подвернулась об языке названном в его честь.&lt;br /&gt;
&lt;br /&gt;
Количество текста, который я планировал писать про erlang плавно замещается таким же объемом на более интересным и позитивным про новую, более обнадеживающую среду.&lt;br /&gt;
&lt;br /&gt;
erlang остался в моей памяти как нечто недоделаное и не родившееся, навроде вымерших диназавров. Оно появилось поздно и уже объективно отстало.&lt;br /&gt;
&lt;br /&gt;
Новое, и на мой взгляд очень перспективное называется Hackel. Оно содержит в себе все хорошее из декларативный языков навроде erlang'а и куда больше своего собсбственного и оригинального.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Что почитать?&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/library/l-haskell/"&gt;http://www.ibm.com/developerworks/ru/library/l-haskell/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/library/l-haskell2/"&gt;http://www.ibm.com/developerworks/ru/library/l-haskell2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/library/l-haskell3/"&gt;http://www.ibm.com/developerworks/ru/library/l-haskell3/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/Haskell"&gt;http://ru.wikipedia.org/wiki/Haskell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1396273094011052717?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1396273094011052717/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/haskell.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1396273094011052717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1396273094011052717'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/haskell.html' title='Haskell'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5965841937174203610</id><published>2010-02-25T23:45:00.002+03:00</published><updated>2010-02-25T23:47:03.568+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Жизнь в движении</title><content type='html'>&lt;span class="z19Dle" id="col-z123i54rdmv4h3b2v22qi1qplqfqvb0n0"&gt;&lt;span class="zo"&gt;А вы знаете почему метро в Москве ходит с такими большими перерывами? Так что между поездами скапливается здоровая толпа? Правильно. Они экономит ресурс составов, стараются пускать их реже, что бы каждый из них проходил меньше километража. А знаете засчет чего происходит экономия? &lt;br /&gt;
&lt;br /&gt;
За счет нас с вами, которые талкаются, давятся, злятся, ругаются, качают права, требуют и играют в игру дарвина. Каждый день, в каждом вогоне, постоянно уплотняясь, сдавливаясь, и раздражаясь. Экономя на вогонах, они каждый день отнимают несколько часов нашей жизни из за стрессов и нервотрепки, за это железо. &lt;br /&gt;
&lt;br /&gt;
А в офицальной статистике основная причина: пьянство, гибель на доргах и аборты.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;i&gt;Спуститесь вниз на землю с облаков!&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Поближе присмотритесь, кто ваш зритель?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Он равнодушен, груб и бестолков.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Он из театра бросится к рулетке&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Или в объятья ветреной кокетки.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;А если так, я не шутя дивлюсь,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;К чему без пользы мучить бедных муз?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Валите в кучу, поверху скользя,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Что подвернется, для разнообразья.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Избытком мысли поразить нельзя,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Так удивите недостатком связи.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Но что случилось с вами? Вы в экстазе?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;Иоганн Гете (в переводе Б. Пастернак) &lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5965841937174203610?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5965841937174203610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/blog-post_25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5965841937174203610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5965841937174203610'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/blog-post_25.html' title='Жизнь в движении'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-725476567991803396</id><published>2010-02-22T18:19:00.000+03:00</published><updated>2010-02-22T18:19:08.671+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macbook pro'/><title type='text'>Macbook pro linux function keys</title><content type='html'>Настройка функциональных клавиш на Mac под линукс. Обновленная версия.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;chkconfig --add kbfix&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-style: italic;"&gt;/etc/init.d/kbfix&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;# chkconfig: 12345 90 01&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;# description: fix apple fn keys&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;echo "2" &amp;gt; /sys/module/hid_apple/parameters/fnmode&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-725476567991803396?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/725476567991803396/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/macbook-pro-linux-function-keys.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/725476567991803396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/725476567991803396'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/macbook-pro-linux-function-keys.html' title='Macbook pro linux function keys'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-346121178342546125</id><published>2010-02-11T17:39:00.001+03:00</published><updated>2010-02-11T18:29:47.380+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Google идет в перед</title><content type='html'>Гугл начал захват мира через подмену браузера от мозилла. Чужими руками, ребят создавших Firefox, они подвинули долю Internet Explorer в общем интернет трафике. Этот шаг сместил на шаг веру в единый стандарт интернет браузинга в сторону более открытой технологии. И что потом? Гугл выпускает свой бразуер, отказавшись от помощи тех&amp;nbsp; с кем начинали. (Firefox / Chrome)&lt;br /&gt;
&lt;br /&gt;
Что не смогли заменить - купили (Google Video / YouTube).&lt;br /&gt;
&lt;br /&gt;
Что не смогли купить - заменили (Twitter / Buzz).&lt;br /&gt;
&lt;br /&gt;
Что не подошло под их стандарт - отказалались (Flash / Html5).&lt;br /&gt;
&lt;br /&gt;
Что приносит деньги создали (Paypal / Google chekcout).&lt;br /&gt;
&lt;br /&gt;
Google voice, который пока еще, не добрался до России.&lt;br /&gt;
&lt;br /&gt;
Я начинаю терять уверенность в том, что остались службы, которые бы еще не были совмещены с google аккаунтом, или пока такие еще остались?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-346121178342546125?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/346121178342546125/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/google.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/346121178342546125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/346121178342546125'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/google.html' title='Google идет в перед'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7819211515368168518</id><published>2010-02-02T12:41:00.001+03:00</published><updated>2010-02-02T12:44:35.433+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Вид из окна</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_lxb0VufVhSw/S2fzRajqtYI/AAAAAAAAEl8/dU4ZXtxlq9U/s1600-h/00013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_lxb0VufVhSw/S2fzRajqtYI/AAAAAAAAEl8/dU4ZXtxlq9U/s640/00013.jpg" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7819211515368168518?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7819211515368168518/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7819211515368168518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7819211515368168518'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/blog-post.html' title='Вид из окна'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_lxb0VufVhSw/S2fzRajqtYI/AAAAAAAAEl8/dU4ZXtxlq9U/s72-c/00013.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6700506450442446819</id><published>2010-02-02T12:39:00.001+03:00</published><updated>2010-12-10T10:24:11.981+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macbook pro'/><title type='text'>Ремонт Magsafe (зарядка)</title><content type='html'>Как оказалось разобрать и собрать штекер магсейф не такая большая проблема. И это легко сделать в домашних условиях.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/02/magsafe.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6700506450442446819?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6700506450442446819/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/02/magsafe.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6700506450442446819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6700506450442446819'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/02/magsafe.html' title='Ремонт Magsafe (зарядка)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_lxb0VufVhSw/S2fvgDfzIcI/AAAAAAAAEkM/1eL3LRUDF7o/s72-c/00003.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4346806704181690884</id><published>2010-01-27T22:18:00.002+03:00</published><updated>2010-12-10T10:25:11.039+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Вывод чисел прописью</title><content type='html'>Одна из типовых задачек которые вы можете выполнять в институте на уроках информатики может быть задачей о переводе числового представление в прописное или перевод из десятичной системы в шестнадцатеричную.&lt;br&gt;
&lt;br&gt;
Так как все эти задачки уже давно решены, вам нет необходимости изобретать велосипед, а достаточно просто обратится к исходному коду и найти готовый пример.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://axet.blogspot.com/2010/01/blog-post.html#more"&gt;Дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4346806704181690884?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4346806704181690884/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4346806704181690884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4346806704181690884'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2010/01/blog-post.html' title='Вывод чисел прописью'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3218907631009937482</id><published>2009-12-30T21:59:00.001+03:00</published><updated>2009-12-30T22:01:52.724+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google bugs'/><title type='text'>Thanks to Google for keeping my home page fine!</title><content type='html'>В настоящий момент я не могу придерживаться утверждения обозначенного в заголовке к данной теме.&lt;br /&gt;
&lt;br /&gt;
Ребята из гугл тим, завалили службу маппинга имен для app engine &amp;amp;&amp;amp; sites. Старый сломанный мапинг, удалить нельзя, а новый нельзя добавить. И все случилось под новый год!!!&lt;br /&gt;
&lt;br /&gt;
Моя страничка www.axet.ru лежит с 18 декабря (возможно 18-24 судя по статистики с google analytics).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.google.com/support/forum/p/Google+Apps/thread?fid=6421087ef73ca90a00047bcc2829fe1c&amp;amp;hl=en"&gt;http://www.google.com/support/forum/p/Google+Apps/thread?fid=6421087ef73ca90a00047bcc2829fe1c&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3218907631009937482?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3218907631009937482/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/thanks-to-google-for-keeping-my-home.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3218907631009937482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3218907631009937482'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/thanks-to-google-for-keeping-my-home.html' title='Thanks to Google for keeping my home page fine!'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4644223608931063818</id><published>2009-12-22T15:30:00.001+03:00</published><updated>2010-03-12T16:29:18.737+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox-shoutcast'/><title type='text'>Rhythmbox shoutcast</title><content type='html'>Если кто то хотел запустить шут-каст радио на своем линукс-rhythmbox плеере, а такого плагина не смог найти. То теперь эта мечта может осуществится. Я набросал пару строчек и теперь они выложены в интернете как плагин для этого плеера.&lt;br /&gt;
&lt;br /&gt;
Версия совсем сырая, не доработан интерфейс, нету ни какого обновления\сохранения плей листов скаченных с сервера, но со своей основной функцией он уже сейчас справляется.&lt;br /&gt;
&lt;br /&gt;
Если мне будет очень скушно, напишу еще немного кода и сделаю нормальный интерфейс.&lt;br /&gt;
&lt;br /&gt;
Адрес сайта: &lt;a href="http://code.google.com/p/rhythmbox-shoutcast/"&gt;http://code.google.com/p/rhythmbox-shoutcast/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4644223608931063818?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4644223608931063818/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/rhythmbox-shoutcast.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4644223608931063818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4644223608931063818'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/rhythmbox-shoutcast.html' title='Rhythmbox shoutcast'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5595751917195248995</id><published>2009-12-17T11:02:00.000+03:00</published><updated>2009-12-17T11:02:59.603+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='languageobjects'/><title type='text'>Обман GoF (В сокращении)</title><content type='html'>Понимаю нежелание читать &lt;a href="http://blog.axet.ru/2009/12/blog-post_10.html"&gt;огромные тексты&lt;/a&gt;. Поэтому приведу тут сокращенный вариант.&lt;br /&gt;
&lt;br /&gt;
1. В книге постоянно путаются базовые определения. Классы называются объектами, объекты на памяти интсанциированными классами и вперемешку между собой. Такой подход очень сильно путает начинающего читателя, который может подумать что так оно и есть. И еще больше запутаться, в место того что бы наводить порядок в своей голове.&lt;br /&gt;
&lt;br /&gt;
2. В книге дается не достаточно конкретные инструкции о правилах применения паттернов. Что в свою очередь, так же сильно усложняет материал для начинающего программиста разобраться в том что же это такое паттерн, и когда его надо приминять.&lt;br /&gt;
&lt;br /&gt;
3. Книга не отвечает на вопросы качественной разработки, и реюз кода. Они создают обратное явление направленное на рождение кода, и акцентирование внимание только на объектной модели на памяти.&lt;br /&gt;
&lt;br /&gt;
4. Авторы книги создали культ программирования объектов на памяти, вместо программирования кодом. В результате получается не читаемый проект не подверженный статистическому анализу.&lt;br /&gt;
&lt;br /&gt;
В статье я даю некоторый анализ этих действий и причин приведших к образованию указанных явлений. Кроме того, даю некоторые советы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5595751917195248995?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5595751917195248995/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/gof.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5595751917195248995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5595751917195248995'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/gof.html' title='Обман GoF (В сокращении)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6898924581621756439</id><published>2009-12-10T19:42:00.002+03:00</published><updated>2009-12-10T20:07:46.906+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='languageobjects'/><title type='text'>Обман GoF (Книга)</title><content type='html'>При выборе новой темы для журнала, или новой книги для изучения я стараюсь придерживаться простого правила: если материал в книге кажется абсурдным, мало информативным или ложном этот материал не достоин упоминания в моем журнале. Таким образом, можно добиться повышение общего качества материалов доступных в сети. Чем меньше будет ссылок на ерунду, тем быстрей про не забудут. Поэтому я не пишу (стараюсь) про дураков, глупости и авторские фантазии, что бы про них быстрей забыли или вообще не узнали.&lt;br /&gt;
&lt;br /&gt;
Однако, сегодня я сделаю исключение. И напишу об одной такой книге, которую считаю полностью недостойной внимания. Во всяком случае считаю не допустимым базированию обучения по шаблонному (паттерному) программированию на этой книжке. Хоть на мой взгляд эта книжка просто напичкана такими липовыми определениями, и ее содержимое (шаблонное программирование) лучше изучать по другим источникам. Но в силу ее популярности, считаю нужным поместить информацию на нее в своем журнале. Дело в том, что эта книга является чуть ли не библией некоторых горе разработчиков, которые стараются скакать по звонким, лишенным сути технологиям тем самым приукрашивая свои липовые наработки.&lt;br /&gt;
&lt;br /&gt;
Я говорю об достаточно известном труде, который мне достался в переводе А. Слинкина. Книга называется "Приемы объектно-ориентированного проектирования Паттерны проектирования". Иначе известная как GoF (Gang of Four) (Design Patterns Elements of Reusable Object-Oriented Software).&lt;br /&gt;
&lt;br /&gt;
Конечно, я сделаю небольшую оговорку, я читал именно перевод на русский. Оригинал возможно не содержал таких серьезных ошибок. И возможно я буду напрасно строчить тексты указывающие на недочеты. Но не смотря на возможные опусы перевода, в книге встречаются целые абзацы, содержимое которых у меня взывает откровенное возмущение. Поэтому нахожу важным поделится своим мнением, возможно эти выводы помогут кому-то не сделать ошибок в самом начале в выборе заведомо ложных утверждений. Что в последствии может привести к ловинному образованию ложного комка понятий, которые ни как не смогут выстроится в правильном направлении.&lt;br /&gt;
&lt;br /&gt;
Итак разберемся с понятиями, которые являются фундаментом для понимания книги. &lt;br /&gt;
&lt;br /&gt;
Ворох терминов используемых не согласованно и часто не правильно, будут только усугублять содержимое, которое выстраивается поверх обозначенных примитивов. Объект, класс, экземпляр класса, совсем забытое и почти не встречающееся, но не менее важное: среда исполнения - все это вместо четко обозначенных значений слов, превращается прямо на глазах у читателя в кашу взаимозаменяемых терминов.&lt;br /&gt;
&lt;br /&gt;
В книге нету четкого определения основных терминов, которые они используют. Давайте их перечислим, с правильным вложенным в них смысла:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;класс - код описывающий поведение объекта с данными&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;объект - экземпляр класса на памяти в среде исполнения&lt;/li&gt;
&lt;li&gt;реализация объекта - код отвечающий определению объекта&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;среда исполнения - среда подключенная к среде исполнения, библиотекам и операционной системе.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Что, кстати, относится к определению объекта, которое не правильно дается в книги, объекта как совокупность данных и функций. Это определение было прочитано авторами из какого-то космического триллера, современной попсовой литературы. Понятие объекта никогда не включало алгоритмы их обрабатывающие. Особенно это имеет отношение к С++, о котором они пишут. Почему? Если сказать просто, то вы одним определением переменной можете обратиться к любым данным и любой области памяти просто определив A* a; на желаемую область памяти и работать с ней. Что подтверждает что данные на которые указывает класс, есть нечто абстрактное то, что посчитал разработчик данными.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо вспомнить, что процесс заполнения С++ шаблонов типами называется не созданием объекта, а инстанциацией класса. А результирующая сущность - классом или инстанциированным классом. Понятие же объекта может использоваться только к куску памяти, инициализированному в среде исполнения.&lt;br /&gt;
&lt;br /&gt;
На мой взгляд "дизайн паттерн", это еще одна революционная идея, которая была искусственна привита и раздута в первую очередь для бизнеса, помогающая делать из процесса разработки показуху. В редких случая помогает разработчикам лучше представлять о том, как необходимо работать с данными.&lt;br /&gt;
&lt;br /&gt;
Я находил подобную концепцию в среде КОБРА (CORBA). Когда цель разработки сделать не код эффективным, а управление процессом разработки. Сделав предсказуемый результат по времени и по приемлимому качеству в разработке вы напроч убиваете эффективное решение. Видимо этот заразный подход проник и в С++. Автор языка которого, был на как раз на стороне тврческих людей, изобретая творческий красивый язык в котором было бы приятно работать.&lt;br /&gt;
&lt;br /&gt;
И еще раз я хочу уточнить, что не плохо когда каждый человек это маленький винтик в процессе. Плохо когда этот винтик ничего не значит и ничего не понимает. В этом случае его легко обмануть и сделать из него дойную корову, забыв напрочь про идею и вообще живых людей.&lt;br /&gt;
&lt;br /&gt;
Я вообще много раз говорил о том, что новое в программирование это забытое старое (и один раз сказал в совсем журнале, в черновике "Это не история повторяется..."). Так те люди, которые придумали новую концепцию в программирование и стали супер-звездами рассказав миру про MVC (дизайн паттерн работы с данными, где данные отделяются от метода их отображения и алгоритмами обрабатывающими их), совсем не такие современные. На самом деле, эти ребята были двоечниками-маркетологами, которые вообще не знали, что такое машина Тьюринга и то, что она на этих принципах и работает.&lt;br /&gt;
&lt;br /&gt;
То есть то, что было прародителем всех современных компьютеров, уже давно в себе содержало основное определине разделения данных (ленты) и их механизма работы с ним (то что читает и мотает ленту). За то теперь, мы можем легко показать заказчикам концепцию на которой строется наша система, показать решения которые используются для ее построения, показать группу разработчиков включая архитектора, программиста, администратора, менежера и еще пачку людей из общего процесса. То в таком случае гораздо проще получить бюджет, чем показать одного программиста строчащего прозрачный код на лету.&lt;br /&gt;
&lt;br /&gt;
Не надо смотреть на меня косо, я не говорю что у такого подхода есть одни минусы. Я&amp;nbsp; говорю о том, что страшно, когда мы сидящие напротив мониторов и вбивающие *((void*)0)=0 не хотим понимать, как создается модель разработки и, что за профессия такая, давать безполезные советы с названием "Системного архитектора". И я хочу показать эту профессию в ее естественном, не извращенном бизнесом, понятии.&lt;br /&gt;
&lt;br /&gt;
Бизнес говорит, ваш Хумен ресурс говорит, ваш менеджер говорит, что надо работать как надо, и никто не понимает, что нужно делать на самом деле. А я хочу пролить свет на эту пролему, убрать это однобокое всоприятие обязанностей и задач и начать наконце концов работать вместе. Работать командой которая понимает свои функции, природу решения задачи свойственной не только бизнес решениям, но и адаптированию их на уровне среды исполнения (эффективных дизайн паттернов, в отношении этой самой среды), а не тупо дает возможность зарабатываеть денег владельцу компании. Ведь когда каждый участник процесса понимает свои и обязанности своего товарища, команда легко видит халтуру и халтурщиков, прикрывающихся звонкими формулами.&lt;br /&gt;
&lt;br /&gt;
Сейчас я хочу разрушить миф об "Дизайн паттернах".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Начнем с плюсов. Вернее с тех определений которые, выдвигаются в пользу мнимых преимуществ, от использования дизайн паттернов.&lt;br /&gt;
&lt;br /&gt;
Я ни коим образом не могу согласится с определением "повторного использования кода" данного авторами в книге. Авторы утверждают, что повторным использованием является наследование классов и при том же не является использование библиотечных функций. То есть, если вы унаследовались от класса, то вы повторно используете функции это класса. Вопрос: зачем тогда наследовать если вам просто нужна таже самая логика? Если вы используете функции класса работы с данными, то вы должны создать экземпляр этого класса и работать с данными методами этого класса. То есть просто создать его экземпляр на памяти (объект). И в том что вы создали объект, никакого повторного использования кода нет и быть не может. Ведь когда вы вызываете системную функцию для выделения памяти вы не повторно используете системную функцию вызова памяти. Другими словами ведь из за того что вам на ум не пришло писать свои функции работы с памятью, вы не можете утверждать, что экономите уже написанный код.&lt;br /&gt;
&lt;br /&gt;
Видимо авторы хотят указать на другой аспект наследования - оно нужно, что бы переопределить логику объекта. То есть изменить концепцию работы класса с данными. Или иначе: сделать подстановку новой реализации.&lt;br /&gt;
&lt;br /&gt;
Если же говорить об повтором использовании, то это целая вереница условий: атомарность функций, классов, отсутствие глоабльных объектов и фиговин так любимых горе-дизайн-паттер разработчиками называемыми Сингелтон (еще один гвоздь, почему дизайн паттерн плох).&lt;br /&gt;
&lt;br /&gt;
Соответственно, речь о том что с помощью паттернов повторное использование кода увеличивается это утверждение не имеет силы. Паттерны придуманы для того что бы облегчить коллективное производство, соогласование действий в случае одновременного создания большого объема кода уменьшает это самое повторное использование. Во вторых, уже упомянутый Сингельтон, ставит вообще крест на наследовании и повтороном использовании кода, так как переопределение таких конструкций вообще не возможно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Авторы демонстрируют пример наследования, у которого в недостатоках указывается наследование и отсутсвие возможнсти для переопределния иерархии наследования вовремя выполнения. Такую конструкцию лучше себе вообще не представлять перед сном. А как аргумент в пользу шаблонов проектирования, такой апофеоз вообще стыдно предъявлять.&lt;br /&gt;
&lt;br /&gt;
Видимо этот вывод не спешно делается из авторских утверждений о том, что код должен быть сам по себе, а объекты на памяти сами по себе. В результате получить не читаемый код, с множество виртуальных конструкций-объектов на памяти. Автор хочет показать что его орлиный взор, способен заниматься отладкой таких воздушных замков?&lt;br /&gt;
&lt;br /&gt;
Лишний раз идет подтверждение о том что создается не продукт, готовый к использованию. А создается бизнес решение для высасывания денег на поддержку виртуальной среды построенной на блестящих дизайн паттерн идеях. Конечно бизнес не виноват, он живет по правилам которые придумал не он, а государство - ему надо зарабатывать рубль. И программист не виноват он написал по заданию.&amp;nbsp; И архитектор не виноват, который нарисовал пару десятков дизайн-паттернов на доске делал это по этой вот книжке. Просто в этой истории все вместе, тихо погружаются в абсурд ни кто не задаваясь вопросом: "а хорошо ли это?"&lt;br /&gt;
&lt;br /&gt;
Большинство материалов так или иначе связанных с дизайн паттернами, это описание воздушных проблем, созданных не для решения зачад программирования, а для описание процессов которые могут происходить внутри приложения. И самое важное, что необхдимо помнить - писать так ненадо!&lt;br /&gt;
&lt;br /&gt;
Не буду танцевать дальше на абсурде тех утверждений и предлагать в таком случае яву машину, или реализацию виртуальной машины на С++, или использование RTTI или перевод проекта на python. Речь об эффективном программирование а не об мистических возможностях той или иной среды (да в указанных мной средах возможно изменять наследование при приложении определенной доли усилий).&lt;br /&gt;
&lt;br /&gt;
Я задам вопрос по другому, вы вообще зачем пишите такой код, который должен на лету быть пересобран? Задача программирования создать простой эффективный код, который бы удовлетворял принципам повторного использования. Код должен быть читаем без документации, без коментариев и быть понятен с первых минут его использования. А в парадигмах С++, код должен быть типизирован. То есть вообще отсутствовать какой либо намек на виртуализацию среды.&lt;br /&gt;
&lt;br /&gt;
Если же придерживаться тех идей, на которых построена эта книга - пиши код, и думай об объектах, то код такой и выйдет - черти прочтешь его без многолетней тренировки в абстракциях из этой книги. Это что то вроде розовых очков, один раз написав такой код в очках, другой разработчик тоже должен их надеть (купить предварительно) что бы разобраться в нем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Следующий аргумент-паттерн, активно рекламируемый на страницах книжки есть Абстрактная фабрика. Это шаблон вообще унижение для С++. Язык в котором есть идеальное понятие класса, оптимизируемого для конкретного процессора и создающего оптимизрованный код путем инстанциирования шаблона не может идти в сравнение с ущербной абстрактной фабрикой родившейся в виртуальной машине. Постораюсь объяснить простым языком.&lt;br /&gt;
&lt;br /&gt;
Любой инстациированный класс из шаблона, образует набор самостоятельных классов с независимой реализаций. В результате чего, компилятор образует из них независимый объектный код, который в свою очередь оптимизируется процессором. Следовательно, любой параметр шаблона, будет индивидуально оптимизирован для процессора. А если этот параметр, является объектом (в этом случае java или C# generics отдыхают, так как поддерживают только примитивы) то это понятие объекта оптимизируется для процессора. Что является вообще уникальным явлением на сегодняшний день.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В определении даваемым в книге понятию дизайн паттерн, очень близко и родственно стоит понятие интерфейса. К сожалению, авторы книги делают лже-утверждение, на котором сыпятся множество разработчиков начиная писать абстрактный код перегруженный определением абстрактных конструкций. Нельзя говорить об отделении реализации не дав четких условий ее появлению. То есть нельзя говорить используйте интерфейсы у классов потому что вы получите масштабируемый проект. Это ерунда.&lt;br /&gt;
&lt;br /&gt;
СОВЕТ 1&lt;br /&gt;
&lt;br /&gt;
Такими простыми определениями вы только убьете проект. К сожалению другого определения авторы не дали. А я дам! Создавайте интерфейс, когда вы хотите скрыть реализацию в библиотеках (продаваемых, отдаваемых на сторону), когда вы хотите делать две реализации одного и того же алгоритма, и когда у вас появляется класс со схожей природой (два одинаковых класса).&lt;br /&gt;
&lt;br /&gt;
Еще раз хочу обратить внимание, что наследование реализаций это хороший код, в противовес тому утверждению, которое дается в книги. Плохо не наследовать реализацию класса, а не понимать что вы делаете.&lt;br /&gt;
&lt;br /&gt;
СОВЕТ2&lt;br /&gt;
&lt;br /&gt;
На что я хотел бы обратить внимание. Старайтесь записывать свои мысли (кодом), их проще оценить, исправить и отладить. Я вооще сторонник другого стиля разработки, его смысл в создании групп разработки базирующейся на потребоностях бизнеса, но не эксплуатирующий яркие конструкции. Я уверен, и знаю такую модель разработки , при которой программисты создают код, читаемый без специальных знаний, качественный, интересный и не пергруженный конструкциями которые требуют не только специальных сред разработки но и горы бесполезных знаний затмевающих основную цель - создание эффективного кода.&lt;br /&gt;
&lt;br /&gt;
К сожалению, это тоже довольно большой кусок размышений и я его не буду рассматривать в этой стате. Однако это не просто размышлизм, такие примеры есть - это открыте разработки. Это открыте конструкции, посмотрите как они это делают и вы поймете о чем я говорю.&lt;br /&gt;
&lt;br /&gt;
Так вот если вы начнете писать то что думате в коде, а не создавать воздушные замки. То код у вас будет выглдить по тем дизайн паттернам, рассмотреным в книге. Но написан он будет не на памяти а в коде ввиде конструкций наследования, шаблонов, интерфейсов.&lt;br /&gt;
&lt;br /&gt;
СОВЕТ3&lt;br /&gt;
&lt;br /&gt;
Несмотря на общую критику и безалаберный подход заложенный в концепции. Я нахожу очень интересным пример использования шаблонов проектирования на примере текстового редактора рассмотренного в книге. Хоть и рассмотренная в начале книги шаблонная техника не выдерживает ни какой критики, сами по себе они пишут не так плохой код.&lt;br /&gt;
&lt;br /&gt;
Если конечно не замечать таких ляпов как образование новых типов-строк. Это продолжение начатой авторами темы об всеобщей виртуализации, к которой так неудержно смотремится банда четырех.&lt;br /&gt;
&lt;br /&gt;
Писать в коде конструкции strcmp(nameName, "Value") все равно что образовывать новый тип данных. Язык С++, это прежде всего язык типов, и компилятор делает работу за вас только в том случае, если вы этой парадигмы придерживаетесь. И если вы не ходите дубировать код (как раз в этом месте можно использовать термин повторное использование кода) то вам необходимо отказываться от строчек на этапе обработки данных от пользователя.&lt;br /&gt;
&lt;br /&gt;
Так создавая новый тип const char* value = "Motif"; не забудьте создать одноименный класс и switch функцию, обеспечивающую создание одноименного объекта-свойсва на памяти. Хотя бы уж enum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Необходимо заметить одну особенность изложения материала авторами. Банда четырех большие сторонники виртуализации и работы на памяти (с37). Парадигма, когда код становится несущественнным и менее приоритетным чем объект на памяти. Этим самым при чтении книги вас всегда подталкивают использовать паттеры как часть их концепции использующих память как ресурс. Тем самым как я уже говорил они создают воздушный замок, не читаемый сторонним наблюдателем. Отладка такой среды в разы трудней, так как вам необходима среда отладки с мощной системой визуализации.&lt;br /&gt;
&lt;br /&gt;
Другими словами, эти ребята писали код только под Microsot Visual Stidio.&lt;br /&gt;
&lt;br /&gt;
Хоть это и отдельная тема, которую я бы с удовольствием рассмотрел в отдельной статье. Я скажу пару слов и тут. Почему это интересно и большой объем для исследования? Приведу пример, вы никогда не задумывалиь почему большинство проектов под Линукс написано на простом плоском и могучем GObject (Objective-C)? Ответ простой: невозможно отлаживать виртуальный бред с кучей наследований на памяти. Но это нужно рассматривать подробней, в следующий раз...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Основной мыслью, которую продвигают авторы книги сводится исключительно к работе с объектом на памяти. И все разговоры о том, что проект с испльзованием паттернов предполагает повторное использование, гибкость в модификации это всего лишь заблуждение авторов. Нельзя решить все проблемы в проекте, введя полную свободу в работу с объектом (с38). Утверждая что код не значит ничего, а виртуальная среда - все, меняя объект на памяти, а не в коде они получают виртуальную машину, а не язык паттернов. Это очень серезное заблуждение и ошибка приводящая к развалу проекта. Этот принцип, закрытости логических конструкций и перевод их&amp;nbsp; в виртуальную среду (память) усложняет процесс отладки и в корне лишает возможности проводить аналитический анализ исходного кода.&lt;br /&gt;
&lt;br /&gt;
Этот вывод подтерждает тот факт, что код это лишь отображение объектов и он имеет маленькую значимость (с37), то что с наследование на памяти нельзя переопределить (с38).&lt;br /&gt;
&lt;br /&gt;
Из чего я делаю вывод, что все паттерны&amp;nbsp; представленные в этой книге работающие с памятью это всего лишь плод воображения авторов считающих что язык их ограничивает. Таким путем были созданы не одни среды и новые языки, которые в полсдествии вернулись или постепенно начали возвращатся (к типизации, интерфейсам, шаблонам) к паратигмам С++. И эти структуры имеющют отношения к серезной разработке, и созданию качественного продукта. Абстрактные фабрики и другие паттерны, нуждающиеся в создании неконтролируемых структур, нужны в исключительных случаях, и за частую вносят большие затрудения в анализ исходного кода и повторное его использование.&lt;br /&gt;
&lt;br /&gt;
Я ожидают, что в скором времени эти ребята создадут новый язык, без типов, интерфейсов, без наследования и с возможностью переопределять любой метод любого класса. Конечно, такие среды уже есть, но как я уже сказал, все новое это хорошо забытое старое и авторы движутся именно по этому пути. Не делайте их ошибок!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Design_Patterns_%28book%29"&gt;http://en.wikipedia.org/wiki/Design_Patterns_%28book%29&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6898924581621756439?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6898924581621756439/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post_10.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6898924581621756439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6898924581621756439'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post_10.html' title='Обман GoF (Книга)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-4148348248724497169</id><published>2009-12-05T16:05:00.000+03:00</published><updated>2009-12-05T16:05:49.894+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Больше вопросов...</title><content type='html'>Что бы вопросов становилось меньше, после публикации достаточно пространных текстов я хочу уточнить свою позицию.&lt;br /&gt;
&lt;br /&gt;
Почему я это пишу и вообще какое оно есть отношение к программированию и С++?&lt;br /&gt;
&lt;br /&gt;
Создается впечатление что вроде бы журнал не распологает к тем мыслям, которые я себе позволяю сюда писать. И вообще он о том как писать программы и развивать в себе системный подход к процессу программирования. А тексты, которые я иногда размещаю, похожы на филосовские размыление двоченика-шизофреника. Но!&lt;br /&gt;
&lt;br /&gt;
Материал излагается что в такой форме, что бы пролить свет на причины приводящие к образованию бизнеса и использованию той работы которую все программисты дружно не задумываясь делают. Создавая программу мы частенько не хотим знать, как наша программа попадет на рынок и будет помогать добрым людям решать их повседенвные проблеммы.&lt;br /&gt;
&lt;br /&gt;
Процесс разработки так же тесно связан с технологиями и методами работы на поле технических револци, с теми языками, средами, операцинными системами которые мы выбираем для решения наших задач. И вот эти все незаметные и проктически автоматически процессы выбора создают рынок, не заметный нашему потребителю - программисту. Такой рынок это ни что иное как еще один вид бизнеса, сосуществующего с остальной культурой программирования.&lt;br /&gt;
&lt;br /&gt;
Этот вид бизнеса мне особенно интересен и симпатичен в силу того, что он является образцом любой предпринимательской деятельности в отличии от типичного искуственного вставления нормативов и правил.&lt;br /&gt;
&lt;br /&gt;
Именно в такой незатейливой форме от простого к сложному, от незнания к совершенству создается и шлифуется любой процесс в том числе и разработки программ. И если вы сможете уловить эту суть, суть процесса, а не потоки денег, вы сможете зарабоать и добится большего успеха чем те, кто забыв обо всем стремится поднятся любыми честными и безчестными методами по карьерной лестнице.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;     В этой нелепости, противной здравому смыслу, было что-то символическое. И уступая ее многозначительности, доктору тоже хотелось выбежать на площадку и остановить гимназиста готовым, рвавшимся наружу изречением. Ему хотелось крикнуть и мальчику, и людям в вагоне что спасение не в верности формам, а в освобождении от них.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/i&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;Б. Пастернак &lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-4148348248724497169?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/4148348248724497169/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post_05.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4148348248724497169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/4148348248724497169'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post_05.html' title='Больше вопросов...'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8869206087412112461</id><published>2009-12-05T15:41:00.000+03:00</published><updated>2009-12-05T15:41:54.794+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Это не история повторяется...</title><content type='html'>Это не история повторяется, это мы рождаемся и умераем и делаем ошибки тех, кто набив бобышки теперь мешает нам идти и поступать так же.&lt;br /&gt;
&lt;br /&gt;
Я уже писал о том, что программные среды появляющиеся как грибы на почве современных технологий под давлением глобализации являются следствием нескольких факторов. Во-первых: мы не хотим учится, нам проще делать ошибки и делать выводы о том, как не хорошо поступать. Во-вторых: нам навязывают идеи в интересах некоторых бизнес аудиторий, которая соориентирована на захват сфер влияния, пропаганды своих интересов и продвижении продуктов. В последствии для получения контроля над аудиторией (продвижение продуктов, и информационная пропоганда).&lt;br /&gt;
&lt;br /&gt;
Эти оба фактора способствуют созданию и росту среды вместе с ее адуиторией, несмотря на то что они все приходят всегда к одному и тому же и все что сейчас кажется новым уже было когда-то изобретено.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Начинать с начала свойствоенно людям. Они не хотят учится, хотят одним взмахом рукова создавать озера, бросив сотней баксов почувствовать себя сверх человеком, и за пять минут просмотра презентации понять и принять решение о "перспективности" идеи - разжеванная, кастированная информация лучше входит.&lt;br /&gt;
&lt;br /&gt;
Это касается не только развития большинства технологий и языковых средств, но так же свойственно в таких областях как хужожественная литература.&lt;br /&gt;
&lt;br /&gt;
Все любят фантастику, читать шизофрению о Сталине сражающемся с рептилиями, и борбе синих человечков с зелеными. Интересней (понятней так как у этих историй есть начало и конец) чем взять книгу Хокинга, и узнать как устроена вселенная (сложней, так как необходимо базироваться на опыте других людей).&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; &lt;i&gt;Пергаменты не утоляют жажды.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; Ключ мудрости не на страницах книг.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; Кто к тайнам жизни рвется мыслью каждой,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt; В своей душе находит их родник.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;br /&gt;
Иоганн Гете (в переводе Б. Пастернак) &lt;/i&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8869206087412112461?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8869206087412112461/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8869206087412112461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8869206087412112461'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/12/blog-post.html' title='Это не история повторяется...'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7050380433697452265</id><published>2009-11-21T18:57:00.002+03:00</published><updated>2009-11-21T21:34:06.045+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Купите нашу функцию...</title><content type='html'>Получил очередной красивый буклетик-открыту по почте с рекламмой авиакомпании. Написано о том как экономить, лучше и дельше летать, брать услуги в кридит с оформлением фирменной банковской карты. Потом написано, что еще можно делать с этой картой и на наших авиалиниях. Куда обращаться. Потом написано, мелким текстом, сноски в каких случаях действуют указанные условия, потом ссылка на сайт с дополнительной информацией, потом ссылка на номер и текст договора, потом еще какой-то pdf файл, потом я кинул эту бумажку в мусорку.&lt;br /&gt;
&lt;br /&gt;
Маркетинг просто переходит все мыслимые и не мыслимые границы. Сколько можно это терпеть нам потребителям их услуг? На плакатах, буклетах, в банерах, СМС рекламме всегда нам дают одну и туже сжатую, бесполезную информацию которая обрисованная одним красивым короткоим слогоном "Безлимитный интернет" и тонной мукулатуры с обезятельствами ползователя, которые вы должны прочитать, понять и принять.&lt;br /&gt;
&lt;br /&gt;
Я задаю вопрос: "Сколько еще это будет продолжаться?"&lt;br /&gt;
&lt;br /&gt;
Когда слова в рекламме наконец начнут отражать действительное положение вещей, а не быть ловким инструментом потоком легальной лжи со свех источников информации? Когда слогон "С нами быстрей" наконец будет объективен и мы точно будем знать принимая релкамный листок на что нам рассчитывать? Как облегчить потребителям, и рекламмодалеям взаимодействие не потеряв привыных моделей работы с аудиторией?&lt;br /&gt;
&lt;br /&gt;
Ведь я не против смотреть на контекстную реклмму от гугл, не против получать полезные и выгодные предложения от производителей тратуарной плитки или комерческих предложений в сфере мобильных услуг. Только текущее положение вещей не позволяет объективно оценть предложение по двум-трем словам и принять решение выгодно оно или нет. И вопрос заключается в том, как же так сделать что бы мне как потребителю было все понятно об условиях договора только по первому предложению?&lt;br /&gt;
&lt;br /&gt;
И я нашел выход из этой ситуации :)&lt;br /&gt;
&lt;br /&gt;
Вся сложность заключется в том, что получая такой реклмный буклетик, я первым делом представляю груды мукулатуры, которые мне предстоит изучить что бы принять объектинвое решение. Вся информация в рекламном листке это всего лишь миф родившийся в восполенном мозгу пиарщика, который ни каким образом не относится к реальному положению вещей (и вооще он не трезв был когда это писал). Так как в большинстве случаяв условия договоров просто грабительские или на худой конец ни чем не лучше уже имеющихся. Все что вы рискуете получить, начиная разбераться&amp;nbsp; с новым "кормерческим" предложением - это потреять время и понять что вам это ненужно.&lt;br /&gt;
&lt;br /&gt;
Так вот для облегчения этой работы я предлогаю на всех рекламных буклетах писать некоторое число, напирмер так: "Самый дешевый интернет [*3456/5]". Число в квардартных скобках это не сноска на договор, а отношение величины (или его обратная величина) всех сопутствующих материалов, документов, сносок и условий договора необходимых к прочтению (в словах) в соотношении с длинной данного слогона. Что бы исключить возможный перечень всех документов, в ключая и азбуку и школьным словарем необходимо вводить некоторые катергории относительной сложности документа, как в привиденном случае число 5 может означать среднее образование, или число 6 юридическое образование.&lt;br /&gt;
&lt;br /&gt;
Естественным образом введение такой системы привидет к сокращению объема общего объема метарилов к изучению буклета (первое число), удлиление слогонов и их больше объетивности (первое число) и их упрощении к восприятию, уменьшению сложности материала (второе число)!&lt;br /&gt;
&lt;br /&gt;
И потребители сразу оценив два числа смогут сказать, интересует их этот продукт или нет.&amp;nbsp; Скажем я не хочу читать больше 50 000 знаков для ознакомления с простыми решениями. И если содержимое буклета в словах длиной 100 слов в отношении к сопутствующей документации в 60 000 слов будет равно 600\5. Так я буду автоматически отбрасывать мелкие предложения в которых показатели выше 600\5 и читать показтель которых ниже :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7050380433697452265?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7050380433697452265/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/11/blog-post_21.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7050380433697452265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7050380433697452265'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/11/blog-post_21.html' title='Купите нашу функцию...'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7344859105887643854</id><published>2009-11-11T00:11:00.000+03:00</published><updated>2009-11-11T00:11:30.248+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Вид из окна (реального, моего)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_lxb0VufVhSw/SvnW8hRCpTI/AAAAAAAAEhk/20w_mtz15ks/s1600-h/00001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_lxb0VufVhSw/SvnW8hRCpTI/AAAAAAAAEhk/20w_mtz15ks/s640/00001.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7344859105887643854?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7344859105887643854/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7344859105887643854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7344859105887643854'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/11/blog-post.html' title='Вид из окна (реального, моего)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lxb0VufVhSw/SvnW8hRCpTI/AAAAAAAAEhk/20w_mtz15ks/s72-c/00001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-9094911376771794207</id><published>2009-11-09T16:30:00.000+03:00</published><updated>2009-11-09T16:30:21.297+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><title type='text'>Snow Leopard USB Install</title><content type='html'>В сети можно найти довольно много материалов о том, как устновить новую операционную систему от Apple с помощью USB флешки. В большинстве инструкций (или во всех без исключения) необходимым компонентом является рабочая операционная система Mac OS X. То есть для того что бы выполнить указанную инструкцию по настройки USB stick на работу с Snow Leopard вам нужен рабочий компьютер с уже установленной операционной системой.&lt;br /&gt;
&lt;br /&gt;
Однако, основным поводом для создания этого резервного носителя с установщиком операционной системы является во первых: отстутствие работающего привода в копьютере (болезнь почти всех, если не всех, машин от apple под брендом MacBook), и само собой отсутствие работающей операционной системы.&lt;br /&gt;
&lt;br /&gt;
В таком случае куда возможней найти рабочий компьютер под управлением Windows или Linux машину, чем собственно компьютер под Mac OS X. Но к сожалению инструкции об настройки флешки под эти опреационные системы в сети нету.&lt;br /&gt;
&lt;br /&gt;
Я решил восполнить данный недостаток и написать инструкцию настройки USB флеш для установки Snow Leopard из под Linux.&lt;br /&gt;
&lt;br /&gt;
Для начала вам потребуется:&lt;br /&gt;
- Рабочая машина с Linux&lt;br /&gt;
- Образ Snow leopard в формате .iso&lt;br /&gt;
- Флешка размером минимум 8GB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Первым делом загрузитесь в Linux и запустите утилиту &lt;a href="http://gparted.sourceforge.net/"&gt;gparted&lt;/a&gt;. И дале выполните следующие шаги:&lt;br /&gt;
&lt;br /&gt;
- инициализируйте диск с новой меткой разделов gpt (Device/Create Partition table).&lt;br /&gt;
- создайте 1 раздел 200 мегобайт с файловой системой fat32&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWsv7z51I/AAAAAAAAEhM/liUkOKihDbM/s1600-h/Screenshot-Create+new+Partition.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWsv7z51I/AAAAAAAAEhM/liUkOKihDbM/s320/Screenshot-Create+new+Partition.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
- создайте 2 раздел под остальное место с файловой системой hfs+&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWtisLa0I/AAAAAAAAEhU/0sLyI8L_aSg/s1600-h/Screenshot-Create+new+Partition-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWtisLa0I/AAAAAAAAEhU/0sLyI8L_aSg/s320/Screenshot-Create+new+Partition-1.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- нажмите кнопку принять изменения.&lt;br /&gt;
&lt;br /&gt;
Затем, правой кнопкой мышки измените флаги первого раздела с msftree на boot.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWuiEH4AI/AAAAAAAAEhc/a1iQtOAi41E/s1600-h/Screenshot-Manage+flags+on+-dev-sdb1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWuiEH4AI/AAAAAAAAEhc/a1iQtOAi41E/s320/Screenshot-Manage+flags+on+-dev-sdb1.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После чего можете приступать к следующему этапу - записи раздела с образа snow leopard.iso&lt;br /&gt;
&lt;br /&gt;
Прежде чем начать запись раздела, вам необходимо определить где он на диске находится. Дело в том что формат диска с операционной системой Mac OS X не совсем стандартный образ. В нем записано два образа, первый с драйверами под Windows, а второй - установщик Mac OS X. Для того чтобы найти указанный рездел (смещение для него) необходимо использовать утилиту hexedit.&lt;br /&gt;
&lt;br /&gt;
Открываем образ snowleopard командой hexedit snow leopard.iso и выполняем поиск hex-последовательности "482b0004". Для моего образа snow leopard билда 10A432 (Snow Leopard 10.6.0) смещения такие:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;3DA91400&amp;nbsp;&amp;nbsp; 48 2B 00 04&amp;nbsp; 00 00 01 00&amp;nbsp; 31 30 2E 30&amp;nbsp; 00 00 00 00&amp;nbsp; H+......10.0....&lt;br /&gt;
3DA91410&amp;nbsp;&amp;nbsp; C6 9B F3 4E&amp;nbsp; C6 9C 6F 67&amp;nbsp; 00 00 00 00&amp;nbsp; C6 9C 55 BE&amp;nbsp; ...N..og......U.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Что бы переместить указанную патицию прямо на патицию флешки выполняем следующую последовательность команд:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# /sbin/losetup -o 1034489856 /dev/loop0 snowleopard.iso &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# dd if=/dev/loop0 of=/dev/sdb2 bs=5M&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Число 1034489856 - это шестнацатеричное 3DA91000.&lt;br /&gt;
Устройства /dev/sdb2 - это второй рездел флеш диска созданнго через программу gparted. &lt;br /&gt;
&lt;br /&gt;
Минут через десять команда dd выполнится и USB-stick готов для работы. &lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cat snow leopard.iso | md5&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f303591a8cc124d68f10155b10696348&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cat snow leopard.iso | shasum&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;9e92a6c8c0b166fd8ea6442ccb6d32025e349cbd&amp;nbsp; -&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Snow Leopard 10.6 build 10A432 golden master&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ссылки по теме:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.64lines.com/mounting-hfs-plus"&gt;http://www.64lines.com/mounting-hfs-plus&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.maciverse.com/install-os-x-snow-leopard-from-usb-flash-drive.html"&gt;http://www.maciverse.com/install-os-x-snow-leopard-from-usb-flash-drive.html&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-9094911376771794207?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/9094911376771794207/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/11/snow-leopard-usb-install.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9094911376771794207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/9094911376771794207'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/11/snow-leopard-usb-install.html' title='Snow Leopard USB Install'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lxb0VufVhSw/SvgWsv7z51I/AAAAAAAAEhM/liUkOKihDbM/s72-c/Screenshot-Create+new+Partition.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-6818183260465745578</id><published>2009-11-02T15:13:00.001+03:00</published><updated>2010-05-26T15:54:41.647+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><title type='text'>VirtualBox 3 raw access to hard drive</title><content type='html'>&lt;small&gt;26.05.2010 update for backup gtp table&lt;/small&gt;&lt;br /&gt;
&lt;br /&gt;
Как подключить реальный жесткий диск к &lt;a href="http://blog.axet.ru/2007/09/virtualbox.html"&gt;VirtualBox 2.0&lt;/a&gt; я уже писал раньше. В предыдущей версии к сожалению были проблемы работы с подключением жесткого  диска из под OS X. В последней версии такая проблема была устранна.&lt;br /&gt;
&lt;br /&gt;
Вот примеры использования:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mac OS X:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Работать с реальым жестким диском не рекомендуется из под простого пользователя из за слижком больших прав на изменение данных. Поэтому будет лучше создать виртуальную машину из под учетной записи администратора, и уже специально для нее открыть доступ к жесткому диску. Для этого откройте консоль, и напишите &lt;i&gt;sudo su&lt;/i&gt;, после чего VirtualBox для запуска менеджера виртуальных машин. Тем самым вы запустите VirtualBox под учетной записью администратора, что не позволит случайно изменить данные на жестком диске простым пользователям. Виртуальную машину лучше создайте под именем localhost, без каких либо дополнительных параметров, только на всякий случай создайте вируальный жесткий диск с параметрами по умолчанию (ни размер, ни имя менять не нужно).&lt;br /&gt;
&lt;br /&gt;
Далее вам необходимо создать файл vmdk, открывающий доступ к жесткому диску для виртуальной машины. Для этого придется сделать несколько действий, так как в VB есть ошибка под номером &lt;a href="http://www.virtualbox.org/ticket/1461"&gt;1461&lt;/a&gt;. Если в будущем ее исправят, то процедура создания vmdk диска упростится до следующей:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;# sudo su&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;# VBoxManage internalcommands createrawvmdk -filename ~/Library/VirtualBox/HardDisks/localhost.vmdk -rawdisk /dev/disk0 -partitions 0,1,3,4&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При создании диска учитывайте какие разделы своего жесткого диска вы хотели использовать под виртуальной машиной, но учтите: необходимо пропустить все партиции которые использует операционная система, по просту она заблокирует создание диска со смантированными партициями. В моем случае я игнорирую партицию номер 2 с установленной и запущенной Mac OS X. Для того что бы увидеть список партиций введите команду:&lt;br /&gt;
&lt;br /&gt;
# VBoxManage internalcommands listpartitions -rawdisk /dev/disk0&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;VirtualBox Command Line Management Interface Version 3.0.10&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(C) 2005-2009 Sun Microsystems, Inc.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;All rights reserved.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Number&amp;nbsp; Type&amp;nbsp;&amp;nbsp; StartCHS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndCHS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size (MiB)&amp;nbsp; Start (Sect)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xee&amp;nbsp; 1023/254/63&amp;nbsp; 1023/254/63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xaf&amp;nbsp; 1023/254/63&amp;nbsp; 1023/254/63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40879&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 409640&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x83&amp;nbsp; 1023/254/63&amp;nbsp; 1023/254/63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 395020&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 84557864&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x07&amp;nbsp; 1023/254/63&amp;nbsp; 1023/254/63&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40631&amp;nbsp;&amp;nbsp;&amp;nbsp; 893558872&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Кроме того, Mac OS X частенько монтирует виндус раздел при старте системы, поэтому для успешной работы команды createrawvmdk вам придется его вручную отмонтировать.&lt;br /&gt;
&lt;br /&gt;
Так как в настоящий момент ошибка 1461 не исправлена, то процедура создания vmdk файла несколько усложняется. Вы его просто напросто создадите руками. Для этого вызовите команду:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;# gpt -r show /dev/disk0&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gpt show: /dev/disk0: Suspicious MBR at sector 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size&amp;nbsp; index&amp;nbsp; contents&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MBR&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pri GPT header&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pri GPT table&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 409600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp; GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 409640&amp;nbsp;&amp;nbsp; 83722224&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; GPT part - 48465300-0000-11AA-AA11-00306543ECAC&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 84131864&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 426000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 84557864&amp;nbsp; 809001008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp; GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 893558872&amp;nbsp;&amp;nbsp; 83214256&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp; GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 976773128&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 976773135&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sec GPT table&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 976773167&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sec GPT header&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Далее используя эту таблицу мы видим физическое распределение секторов на диске (предыдущая команда VBoxManage internalcommands listpartitions показывала логические сектора). Далее выполните команду создания жесткого диска через VirtualBox, как показано в рабочем примере, но создающую не правильный жесткий диск из за ошибки 1461.&lt;br /&gt;
&lt;br /&gt;
Вот пример части файла vmdk, который создала VirutualBox:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Extent description&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 1 FLAT "localhost-pt.vmdk"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 409639 FLAT "/dev/disk0s1"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 83722224 ZERO &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 426000 ZERO &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 809001008 FLAT "/dev/disk0s3"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 83214256 FLAT "/dev/disk0s4"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 40 ZERO &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Как мы видим, первый сектор диска (загрузчик) помечан 1 сектором. И явно указывает на логическое разбиение диска, нам же нужно повторить физическую его структуру для этого меняем значения в секции # Extent description на следующие:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Extent description&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 40 FLAT "localhost-pt.vmdk"&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 409600 FLAT "/dev/disk0s1"&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 83722224 ZERO &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 426000 ZERO &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 809001008 FLAT "/dev/disk0s3"&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 83214256 FLAT "/dev/disk0s4"&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;RW 40 FLAT "localhost-bt.vmdk" 0&lt;/div&gt;&lt;br /&gt;
Как не солжно догадатся, мы просуммировали длинну gpt информации о диске взятой из вывода команды gpt show (1 + 1 + 32 + 6) == 40. Далее, чуть чуть подкорректировали размер первого раздела, и оставили без изменения остальные значения. Так как они полностью совпадают со значениями из вывода gtp show утилиты.&lt;br /&gt;
&lt;br /&gt;
В целом мы почти закончили. Нехватает только скопировать данные с нашего реального диска в файл раздела localhost-pt.vmdk. Делется это командой:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# dd if=/dev/disk0 of=localhost-pt.vmdk count=40 bs=512&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# dd if=/dev/disk0 of=localhost-bt.vmdk skip=976773128 count=40 bs=512&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
После чего запускаем VirtualBox и монтируем наш vmdk жесткий диск вместо виртуального присоединенного к localhost.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;# VirtualBox&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Linux:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Работа с родным жестим диском из под линукса схожа с работой из под OS X. Вам так же необходимо использовать две учетные записи из под пользователя и супер пользователя (root).&lt;br /&gt;
&lt;br /&gt;
Создание образа диска делается следующей командой:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# VBoxManage internalcommands createrawvmdk -filename ~/.VirtualBox/HardDisks/localhost.vmdk -rawdisk /dev/sda&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее необходимо создать вайл для запуска хост машины:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;~/localhost.sh&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/bin/bash&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# монтирование папки с образами OS&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gvfs-mount smb://mini.local/www&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/sbin/sfdisk&amp;nbsp; -A4 /dev/sda&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;VBoxManage startvm localhost&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
И запускать его с помощью dbus-launch, обеспечив тем самым возможность монтирования файловой системы gvfs. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows XP&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Работа из под Windows XP несколько проще, так как вам ненужно запускать отдельную учетую запись.&lt;br /&gt;
&lt;br /&gt;
Для создание диска нажмите Win_key+R и выполните слудющую команду:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;"C:\Program Files\Sun\xVM VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "%USERPROFILE%\.VirtualBox\HardDisks\localhost.vmdk" -rawdisk \\.\PhysicalDrive0 &lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Запуск виртуальной ос лучше осуществлять следующими запускающими файлами:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;c:\soft\localhost.bat&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;diskpart /s localhost.txt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;start "VB" "C:\Program Files\Sun\VirtualBox\VirtualBox"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;c:\soft\localhost.txt&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sel disk 0 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sel part 3 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;act&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ссылки по теме:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jardinmagique.info/2009/08/setup-virtualbox-on-macosx-to-boot.html"&gt;http://blog.jardinmagique.info/2009/08/setup-virtualbox-on-macosx-to-boot.html&lt;/a&gt;&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-6818183260465745578?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/6818183260465745578/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/11/virtualbox-3-raw-access-to-hard-drive.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6818183260465745578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/6818183260465745578'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/11/virtualbox-3-raw-access-to-hard-drive.html' title='VirtualBox 3 raw access to hard drive'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-7197008750072527764</id><published>2009-10-02T00:24:00.000+04:00</published><updated>2009-10-02T00:24:00.191+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Stay with Linux</title><content type='html'>&lt;span style="font-family: Courier New;"&gt;Не так просто понять, что значит счастье, но так просто быть вместе.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Courier New;"&gt;Вся  моя мысль в том, что ежели люди порочные связаны между, собой и составляют силу, то людям честным надо сделать только то же самое. Ведь как просто.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;i&gt;Л. Н. Толстой &lt;/i&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-7197008750072527764?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/7197008750072527764/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/10/stay-with-linux.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7197008750072527764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/7197008750072527764'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/10/stay-with-linux.html' title='Stay with Linux'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5797414080534968337</id><published>2009-09-28T10:11:00.004+04:00</published><updated>2009-09-28T14:27:47.963+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Stay away from Erlang</title><content type='html'>Если система не имеет устоявшихся правил и постоянно модифицируется это свидетельствует об ошибках проектирования в самом начале пути. Можно безконечно заниматся модификациями и улучшениями, стараясь достигнуть совершенства и баланса всех ее составляющих. Но такой путь возможен при соблюдении нескольких условий.&lt;br /&gt;
&lt;br /&gt;
Во-первых: при каждой существенной итерации система должна качественно улучшатся, избегая ошибок которые были допущены в плилотных версиях продукта.&lt;br /&gt;
&lt;br /&gt;
Во-вторых: частое испралвение ошибок, слабый рост, в догоняющей позиции должен компенсироваться революционными идеями способными вместить в себя все предыдущие технологии в наиболее выгодном свете.&lt;br /&gt;
&lt;br /&gt;
И, наконец, третье: такой рост возможен лишь с согласия всех лиц у чавствующих в разработке и использовании этой системы.&lt;br /&gt;
&lt;br /&gt;
Получается, что как только аудитория становится более грамотной, переростает систему и ее авторов система умерает. Это происходит постепенно и нужно лишь ждать когда автор, ее идейный вдохновитель поймет свое бессилие и откажется догонять впереди его идующую толпу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Очень наглядный тому пример можно увидеть в этом интервью.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell"&gt;http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Беседуют два уже не молодых человека. Каждый придерживается своей системы и своих взглядов. У каждого свое представлние об одних и тех же технолгиях (функциональном программировании, например), но они продолжают улыбаться друг другу и вести дружелюбную беседу. Вот она: полит корректность.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы двум людям, совершенно разных взглядов быть так приветливым необходимо: либо быть настоящим лицимером, политиком, либо иметь хорошую выдержку и понимать, что слабую технологию легче всего поглотить, чем воевать против нее.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
SPJ: Whenever you've got concurrency and multiple processes working, you need to be very careful about side effects. Otherwise it just does your head in. Something that Haskell and Erlang both share is being careful about effects. Haskell is sort of super-careful and Erlang is merely careful, but in both cases, we don't have this, unrestricted side effects all the time, the computational fabric being effectful. It seems to me it makes it jolly hard to write programs that exploit multithreads.&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
JA: And the garbage collector doesn't need to know about what types are generated.&lt;br /&gt;
&lt;br /&gt;
SPJ: Oh the garbage collector, that's not a problem. Our garbage collectors are complicated, not because of types, it knows nothing of types.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
SPJ: Do you have any profiling tools? &lt;br /&gt;
&lt;br /&gt;
JA: Yes, sure. &lt;br /&gt;
&lt;br /&gt;
SPJ: So, you can see "Oh, this process is stalled."&lt;br /&gt;
&lt;br /&gt;
JA: What's interesting is when you are finding the sequentiality.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
JA: With each new generation of chips, it's... We don't know what's going to happen.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
JA: When you're developing Erlang, you don't have to write the entire program to get it to work, and you're not quite sure what the types are. In Erlang you just write some program here, and you evaluate something and it throws out this great big thing and you say: "Oh, that's what the type was". Then you can say: "Well that wasn't quite right, let's change it to that". But you're not restricted in having to get all the bits working before you can just do those experiments. Wouldn't you miss something like that?&lt;br /&gt;
&lt;br /&gt;
SPJ: You still don't have to get all the bits working, you have to think of what type you might have, but you might evolve that type. &lt;br /&gt;
&lt;br /&gt;
JA: Or you can just run it and see. We have things called parse transforms which allow you to change them. In a module you can say there's a parse transform, and the parse transform is given the parse tree of the program and it can turn it into another parse tree before it's given to the compiler. That's a way of doing deeply sinful things that you normally can't do. And the nice thing about that is, somebody has asked me "How do I get started with this?"&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ссылки по теме:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell"&gt;http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell&lt;/a&gt; &lt;i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://book.realworldhaskell.org/read/"&gt;http://book.realworldhaskell.org/read/&lt;/a&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-5797414080534968337?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/5797414080534968337/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/stay-away-from-erlang.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5797414080534968337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/5797414080534968337'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/stay-away-from-erlang.html' title='Stay away from Erlang'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2465314705584569061</id><published>2009-09-26T22:02:00.003+04:00</published><updated>2009-09-26T22:15:43.999+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ati'/><category scheme='http://www.blogger.com/atom/ns#' term='macbook pro'/><category scheme='http://www.blogger.com/atom/ns#' term='linux bugs'/><title type='text'>Macbook Pro USB flash boot (part 2)</title><content type='html'>&lt;a href="http://blog.axet.ru/2009/05/macbook-pro-usb-flash-boot.html"&gt;&amp;nbsp;- Macbook Pro USB flash boot (part 1)&lt;/a&gt;&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Fedora 12 Snap3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Подготавливаясь к предстоящему резилу Fedora 12 решил провести основные тесты на своих машинах. У меня два ноутбука Asus M3N (живучий малый) и MacBook Pro 2.1 (железный малый), и один mac mini (Ну совсем маленький. Он не дорос доучастия в тестах). На обоих машинах я испытывал те или иные проблемы связанные с различными аспектами работы системы. Начиная от загрузки и заканчивая поддержкой различных устройств.&lt;br /&gt;
&lt;br /&gt;
Могу сказать сразу: результаты внушают оптимизм и некоторые старые ошибки оказались исправлены. Что же касается новых фукнций (автоматическая отправка ошибок, переработанный anaconda устновщик, и ряд других, которые я не успел толком опробовать) они заставляют ждать резил Fedora 12 с нетерпением.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Не буду описывать все составляющие моего щастья связанные с Fedora 12. Опишу только все еще не решенную проблему с загрузкой с usb через EFI loader.&lt;br /&gt;
&lt;br /&gt;
Всего существует 2 способа загрузки ноутбука MacBook Pro с usb насителя:&lt;br /&gt;
&amp;nbsp;- загрузка с использованием efi загрузчика&lt;br /&gt;
&amp;nbsp;- непосредственная загрузка с одного из 4 разделов mbr диска.&lt;br /&gt;
&lt;br /&gt;
Первый (efi) использует расширенные фукнции переферии (EFI) и ориентируясь на разделы gpt диска может произвести загрузку с одного из 128 разделов. Что выгодно отличает этот способ загрузки от старого проверенного bios загрузчика поддерживающего всего 4 раздела на жестком диске.&lt;br /&gt;
&lt;br /&gt;
Дальше больше. Так как современное ядро линукса научилось не только работать с жестким диском по всем современным технологиям, но уже начинает перенимать на себя и остальные фукнции операционной системы (постепенно разбухая и накапливая новый фукнционал). Так, совсем недавно, появилась новая фукнция ядра называемая KMS (Kernel mode settings). Мехнизм позволяющий иницилизировать видео карту в ядре с последующей передачей видео контекста в пользовательское приложение графического интерфейса (менеджера окон или других программ с поддержкой GUI). Эта новая фукнция не всегда работает хорошо и в некоторых случаях производит иницилаизацию ведео карты не правильно. Что в свою очередь приводит к зависанию системы сразу после загрузки ядра. Это еще одно условие успешной загрузки с usb flash. &lt;br /&gt;
&lt;br /&gt;
Кроме того, имеет место сборка grub, и сборка X-server.&lt;br /&gt;
&lt;br /&gt;
Так у нас получается некоторый набор условий неудачное совпадение которых может приводить к падению системы. Что мы и попробуем перечислить все возможные варианты:&lt;br /&gt;
&lt;br /&gt;
Вот приблизительные варианты загрузки:&lt;br /&gt;
&lt;br /&gt;
rEFIT \ Alt boot -&amp;gt; EFI \ BIOS -&amp;gt; USB \ HDD -&amp;gt; fedora grub \ grub2 -&amp;gt; KMS \ nomodeset&lt;br /&gt;
&lt;br /&gt;
Попробуем проверить все эти комбинации на практике:&lt;br /&gt;
&lt;br /&gt;
1) rEFIT -&amp;gt; EFI -&amp;gt; USB -&amp;gt; fedora grub -&amp;gt; В обоих случаях (KMS\nomodeset) зависание после включение grub, ядро не может инициализировать видео вывод и картинка menu grub не исчезает)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5VBkyXy9I/AAAAAAAAEfM/d5PIqJ-_8zI/s1600-h/00011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5VBkyXy9I/AAAAAAAAEfM/d5PIqJ-_8zI/s320/00011.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) rEFIT -&amp;gt; EFI -&amp;gt; USB -&amp;gt; grub2 -&amp;gt; KMS (Порча экрана после загрузки ядра и зависание)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_lxb0VufVhSw/Sr5V-6BRAQI/AAAAAAAAEfU/EwGOndzAQ5k/s1600-h/00008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_lxb0VufVhSw/Sr5V-6BRAQI/AAAAAAAAEfU/EwGOndzAQ5k/s320/00008.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) rEFIT -&amp;gt; EFI -&amp;gt; USB -&amp;gt; grub2 -&amp;gt; nomodeset -&amp;gt; Загрузка до запуска X server и падение x servera&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5WWLrV-6I/AAAAAAAAEfc/RoeUB6KsJdo/s1600-h/00010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5WWLrV-6I/AAAAAAAAEfc/RoeUB6KsJdo/s320/00010.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) rEFIT -&amp;gt; BIOS -&amp;gt; USB -&amp;gt; В обоих случаях (KMS\nomodeset) остановка загрузки - проблема с прошивкой MacBook Pro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5Wo1dO01I/AAAAAAAAEfk/-OvpHse3nTI/s1600-h/00006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5Wo1dO01I/AAAAAAAAEfk/-OvpHse3nTI/s320/00006.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
5) rEFIT -&amp;gt; BIOS -&amp;gt; HDD -&amp;gt; fedora grub -&amp;gt; В обоих случаях (KMS/nomodeset) успешная загрузка&lt;br /&gt;
&lt;br /&gt;
Из выше привиденных тестов можно сделать вывод: во-первых прошивка macbook pro несколько старовата, apple не желает их поддерживать. во-вторых загрузка linux через EFI всегда приводит к проблемам инициализации контекста видео карты. И в противовес последнему утверждению, загрузка&amp;nbsp; через BIOS ядра линукса всегда успешная.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2465314705584569061?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2465314705584569061/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/macbook-pro-usb-boot-part-2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2465314705584569061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2465314705584569061'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/macbook-pro-usb-boot-part-2.html' title='Macbook Pro USB flash boot (part 2)'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lxb0VufVhSw/Sr5VBkyXy9I/AAAAAAAAEfM/d5PIqJ-_8zI/s72-c/00011.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3899288914587766478</id><published>2009-09-26T16:09:00.004+04:00</published><updated>2009-09-26T20:09:40.861+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistic'/><title type='text'>Обзор ОС посетителей</title><content type='html'>&lt;table border="0" cellspacing="0" cols="3" frame="VOID" rules="NONE"&gt;&lt;colgroup&gt;&lt;col width="19"&gt;&lt;/col&gt;&lt;col width="204"&gt;&lt;/col&gt;&lt;col width="67"&gt;&lt;/col&gt;&lt;/colgroup&gt;  &lt;tbody&gt;
&lt;tr&gt;    &lt;td align="RIGHT" bgcolor="#000000" height="19" sdnum="1033;0;@" sdval="1" style="border-left: 1px solid rgb(0, 0, 0); border-top: 1px solid rgb(0, 0, 0);" width="19"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: white; font-family: Thorndale; font-size: small;"&gt;1&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-top: 1px solid rgb(0, 0, 0);" width="204"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;Opera / Windows &lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-right: 1px solid rgb(0, 0, 0); border-top: 1px solid rgb(0, 0, 0);" width="67"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;21,75&amp;nbsp;%&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td align="RIGHT" bgcolor="#000000" height="19" sdnum="1033;0;@" sdval="2" style="border-left: 1px solid rgb(0, 0, 0);"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: white; font-family: Thorndale; font-size: small;"&gt;2&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;Firefox / Windows &lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-right: 1px solid rgb(0, 0, 0);"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;19,46&amp;nbsp;%&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td align="RIGHT" bgcolor="#000000" height="19" sdnum="1033;0;@" sdval="3" style="border-left: 1px solid rgb(0, 0, 0);"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: white; font-family: Thorndale; font-size: small;"&gt;3&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;Firefox / Linux &lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-right: 1px solid rgb(0, 0, 0);"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;16,10&amp;nbsp;%&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td align="RIGHT" bgcolor="#000000" height="19" sdnum="1033;0;@" sdval="4" style="border-left: 1px solid rgb(0, 0, 0);"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: white; font-family: Thorndale; font-size: small;"&gt;4&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;Internet Explorer / Windows &lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-right: 1px solid rgb(0, 0, 0);"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;14,31&amp;nbsp;%&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td align="RIGHT" bgcolor="#000000" height="19" sdnum="1033;0;@" sdval="5" style="border-bottom: 1px solid rgb(0, 0, 0); border-left: 1px solid rgb(0, 0, 0);"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: white; font-family: Thorndale; font-size: small;"&gt;5&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-bottom: 1px solid rgb(0, 0, 0);"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;Safari / Macintosh &lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;    &lt;td align="LEFT" bgcolor="#ffffff" style="border-bottom: 1px solid rgb(0, 0, 0); border-right: 1px solid rgb(0, 0, 0);"&gt;&lt;span style="color: black; font-family: Thorndale; font-size: small;"&gt;7,59&amp;nbsp;%&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3899288914587766478?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3899288914587766478/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3899288914587766478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3899288914587766478'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/blog-post.html' title='Обзор ОС посетителей'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-744564765005137629</id><published>2009-09-24T22:28:00.001+04:00</published><updated>2009-09-24T22:29:01.673+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>t = malloc(...</title><content type='html'>Java 1.4, XSD, Java 1.5, Web2.0, Erlang, C, Flash, Flex SDK, HTML, IE, Opera, C#, docs.google.com, bing.com, QT4, C++, Eclipse, QT4.5, livejournal.com, XLT, Python, ICQ, OpenGL, VirtualBox, OpenSUSE, Skype, Google Talk, yandex.ru, kms, XEN, Bluetooth, Direct3D, WiMax, Firefox, google.com, blogspot.com, Netbeans, ... &lt;br /&gt;
&lt;br /&gt;
Разгоняемся... ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Courier New;"&gt;Пфуль был один из тех безнадежно, неизменно, до мученичества самоуверенных людей, которыми только бывают немцы, и именно потому, что только немцы бывают самоуверенными на основании отвлеченной идеи-науки, то есть мнимого знания совершенной истины. Француз бывает самоуверен потому,   что   он   почитает   себя   лично,  как   умом,  так   и   телом, непреодолимо-обворожительным  как  для мужчин, так и  для женщин. Англичанин самоуверен на  том  основании, что  он есть гражданин благоустроеннейшего  в мире государства,  и потому, как англичанин,  знает  всегда,  что ему делать нужно, и  знает, что  все, что он делает как англичанин,  несомненно хорошо. Итальянец самоуверен  потому, что он  взволнован и забывает  легко и  себя и  других. Русский самоуверен именно потому, что  он ничего не знает и знать не хочет, потому что не верит, чтобы можно было  вполне знать что-нибудь.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;Л. Н. Толстой&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-744564765005137629?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/744564765005137629/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/t-malloc.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/744564765005137629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/744564765005137629'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/t-malloc.html' title='t = malloc(...'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-8131861421748306227</id><published>2009-09-20T15:23:00.001+04:00</published><updated>2009-09-20T15:28:29.382+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>gencodingconverter-1.1.0</title><content type='html'>После борьбы с непобедимой ленью я все же нашел в себе силы дописать плагин для конвертирования файлов на лету для &lt;a href="http://projects.gnome.org/gedit/"&gt;Gedit&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
В новой версии вы сможете:&lt;br /&gt;
- Настраивть список интересующих вас кодировок&lt;br /&gt;
- Использовать диалог наглядного преобразования кодировок&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Недостаки:&lt;br /&gt;
- слабая поддержка encoding API приложеиня gedit (в коде есть некоторые хаки)&lt;br /&gt;
- не удобный функционал Gtk.ComboBox который съеадет нажатие enter у диалога&lt;br /&gt;
- небольшие проблемы порядком следования кодировок (они сортируются произвольно)&lt;br /&gt;
&lt;br /&gt;
Получить эту утилиту можно по адресу: &lt;a href="http://code.google.com/p/gencodingconverter/"&gt;http://code.google.com/p/gencodingconverter/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-8131861421748306227?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/8131861421748306227/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/gencodingconverter-110.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8131861421748306227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/8131861421748306227'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/gencodingconverter-110.html' title='gencodingconverter-1.1.0'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-2633407801318593657</id><published>2009-09-11T02:01:00.001+04:00</published><updated>2009-09-11T02:02:12.691+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fedora11'/><category scheme='http://www.blogger.com/atom/ns#' term='ati'/><title type='text'>xorg-x11-drv-ati-6.12.3 fedora 11 build</title><content type='html'>Обновленный драйвер для Fedora 11.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;# инициализация дерева rpmbuild
# rpmdev-setuptree
# cd ~/rpmbuild
# yumdownloader&amp;nbsp; --source xorg-x11-drv-ati
# rpm -i xorg-x11-drv-ati-*

# cd
# mkdir source
# cd source

# получение нового клона репозитория
# git clone git://anongit.freedesktop.org/xorg/driver/xf86-video-ati
# cd xf86-video-ati

# или обновление
# cd xf86-video-ati
# git pull

# проверте последнюю версию релиза по ссылке (tag)
# http://cgit.freedesktop.org/xorg/driver/xf86-video-ati/

# git archive --format=tar --prefix=xf86-video-ati-6.12.3/&amp;nbsp; xf86-video-ati-6.12.3 | bzip2 &amp;gt; ~/rpmbuild/SOURCES/xf86-video-ati-6.12.3.tar.bz2

# cd ~/rpmbuild/SPECS

# далее необходимо удалить все секции patch (вручную или с помощью пача):
# patch &amp;lt;&amp;lt; EOF
--- xorg-x11-drv-ati.spec.old 2009-09-11 01:58:19.000000000 +0400
+++ xorg-x11-drv-ati.spec 2009-09-11 01:58:45.000000000 +0400
@@ -4,7 +4,7 @@
 
 Summary:   Xorg X11 ati video driver
 Name:      xorg-x11-drv-ati
-Version:   6.12.2
+Version:   6.12.3
 Release:   14%{?dist}
 URL:       http://www.x.org
 License:   MIT
@@ -43,14 +43,7 @@
 
 %prep
 %setup -q -n %{tarball}-%{version}
-%patch1 -p1 -b .modeset
-%patch2 -p1 -b .modeset-fixes
-%patch3 -p1 -b .modeset-still-more-fixes
-%patch6 -p1 -b .bgnr
-%patch7 -p1 -b .r600-fb-size
-%patch8 -p1 -b .srcrb
-%patch9 -p1 -b .rs690
-%patch10 -p1 -b .lvds
+
 
 %build
 autoreconf -iv
EOF



# rpmbuild -ba xorg-x11-drv-ati.spec

# sudo rpm -U ~/rpmbuild/RPMS/i586/xorg-x11-drv-ati-6.12.3-0.fc10.i386.rpm
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-2633407801318593657?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/2633407801318593657/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/09/xorg-x11-drv-ati-6123-fedora-11-build.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2633407801318593657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/2633407801318593657'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/09/xorg-x11-drv-ati-6123-fedora-11-build.html' title='xorg-x11-drv-ati-6.12.3 fedora 11 build'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-3550779059471697048</id><published>2009-08-18T22:37:00.004+04:00</published><updated>2009-08-18T22:40:11.401+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Re: [Pidgin] #34: Voice/video support</title><content type='html'>&lt;pre&gt;#34: Voice/video support
-------------------------+--------------------------------------------------
 Reporter:  MarkDoliner  |        Owner:  Maiku
    Type:  enhancement  |       Status:  closed
Milestone:  2.6.0        |    Component:  libpurple
 Version:               |   Resolution:  fixed
 Keywords:               |
-------------------------+--------------------------------------------------
Changes (by darkrain42):

 * status:  new =&amp;gt; closed
 * resolution:  =&amp;gt; fixed
 * milestone:  Voice and Video Support =&amp;gt; 2.6.0


--
Ticket URL: &amp;lt;&lt;a href="http://developer.pidgin.im/ticket/34#comment:178" target="_blank"&gt;http://developer.pidgin.im/&lt;wbr&gt;&lt;/wbr&gt;ticket/34#comment:178&lt;/a&gt;&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-3550779059471697048?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/3550779059471697048/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/08/re-pidgin-34-voicevideo-support.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3550779059471697048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/3550779059471697048'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/08/re-pidgin-34-voicevideo-support.html' title='Re: [Pidgin] #34: Voice/video support'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-1436246156151925123</id><published>2009-08-08T18:36:00.006+04:00</published><updated>2009-08-10T21:12:48.416+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Бизнес управление</title><content type='html'>Самым гумманым методом мотивирования персонала. Одинаково выгодным для бизнеса и самих сотрудников есть самообразование с должной долей чувства ответственности перед своей работой. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Но овладевает свободой людей лишь тот, кто успокоит их совесть.    &lt;/i&gt;  &lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;i&gt;Ф. М. Достовевский.&lt;/i&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1793630632384489392-1436246156151925123?l=axet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axet.blogspot.com/feeds/1436246156151925123/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://axet.blogspot.com/2009/08/blog-post_6753.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1436246156151925123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1793630632384489392/posts/default/1436246156151925123'/><link rel='alternate' type='text/html' href='http://axet.blogspot.com/2009/08/blog-post_6753.html' title='Бизнес управление'/><author><name>Alexey Kuznetsov</name><uri>https://profiles.google.com/114524238879134529595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-XS7bLA1M9EU/AAAAAAAAAAI/AAAAAAAAGPI/U8eKSkWWYAw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1793630632384489392.post-5178705363216434912</id><published>2009-08-08T12:24:00.002+04:00</published><updated>2009-08-09T20:10:21.133+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hr'/><title type='text'>Бизнес на дураках</title><content type='html'>Решил я написать несколько страничек о большой и серезной теме, которая затрагивает всех кто занимается или имеет отношение к IT бизнесу. Это и программисты, и художники и бизнесмены ну и не обойдем стороной и наше государство и нашу действительность.&lt;br /&gt;
&lt;br /&gt;
Почему вопрос сложный? Ну, во-первых я думаю что у меня не получится дать объективную картинку, поскольку меня эта тема сильно беспокоит, а следовательно я отношусь к поднимаемому вопросу не равнодушно и немного предвзято. Во-вторых у меня недостаточно опыта, что бы говорить про позицию людей на всех уровнях, так например я не занимался получением гос. денег, или например, у меня нет серезного опыта ведения бизнеса в российских условиях. Все что я пишу здесь это взгляд системщика, проектировщика и прграммиста общающегося в выше упомянутых кругах. Я постараюсь передать те настроения, то отношение с которым люди всех уровней занимаются и создают наше славное имя лучших, самых умных, самых не ординарных специалистов во всем мире. Ну и может быть о том почему лучше не связываться вообще с российскими IT-компаниями.&lt;br /&gt;
&lt;br /&gt;
Это незнаю еще как получится мое повествование, я стараюсь написать объективно, но уже сейчас выходит что этот бизнес, его модель строится на дураках. Просто, быстро, наскоку, и не задаваясь вопросами качества и целесообразностью тех или иных решений. Вообщем, развлекаемся как хотим.&lt;br /&gt;
&lt;br /&gt;
Прежде, чем я что либо скажу по поднимаемому вопросу, хочу уточнить что единственная правильная (с технической точки зрения) модель разработки программного обеспечения - является опенсорс модель. Она, как показало время, является самой живучей, самой прогрессивной и самой прозрачной. Та модель, в которой видно специалиста, видно качество решения и видно куда уходит труд специалистов, решаюших данную задачу. Что же касается приложения бизнеса к этому вопросу, то конкретно в российских условиях, то эта черта, об эффективности, приобретает окраску несколько другого направления. Эффективность бизнеса, а не эффективность решения. То есть, определяющую роль, при принятии решений будет играть не перспектива данного вложения при долгом планировании и учете модернизации, а чисто бабло.&lt;br /&gt;
&lt;br /&gt;
Деньги переварачивают все наизнанку. В голове хорошего бизнесмена определяющим фактором является процесс, который связывает людей, ценности и производство. Если производство эффективно, и процесс возобновляемый и легко модернизируемый (качественный) то он будет приносить доход для владельца. Доход этот может выражаться в любых еденицах измерения, как в тапочках, носках или совоупной стоимости интелектуальной собственности, так и в рублях, которые мы впускаем в этот процесс. Для хорошего бизнесмена это не важно. Важно что определяющим фактором является эффективность производства, и кажестя что эффективное производство это качественный код, леко модернизируемый и грамотно спроектированная система.&lt;br /&gt;
&lt;br /&gt;
На первый взгляд все становится на свои места - хорошо сделал, хорошо заработал. Однако, мы не должны забывать про действительность тех условий в которых приходится работать. Чуть выше я случайно сделал поспешный вывод, что эффективность производства, определяется качеством разработки, а следовательно увеличением прибыли. На самом деле все абсолютно наоборот. В нашей стране эффективное производство может существовать только с абсолюно безграмотным (с технической точки зрения) управлением. Почему? спросите вы, я постараюсь объяснить. &lt;br /&gt;
&lt;br /&gt;
Но не будем торопится. Я хочу сказать об термине который всегда повляется в моем тексте в неожиданных местах - "техническая точка зрения". Что я вкладываю в этот термин? "Техническая", она только по тому, что точно соотсветствует эффективному процесу заложенному в модель разработки\производства нашего продукта. Другими словами то что изучается и выводится как наука, является техническим решением для нашего вопроса, то есть другими словами научная точка зрения. Эта гадкая составляющая всегда была злейшим врагом любого бизнесмена. Именно она, мешает всему процессу забивания денег на рынке. Технически грамотные специалисты, никогда не могли быстро работать. А это мешает зарабатывать деньги. Они не могут быстро сдать работу. А это еще больше замедляет получение денег. Они отказываются принимать плохую и не качественную работу и требует доработок. А это требует еще больших вложений и в конце концов полностью убивает не качественный, с технической точки зрения, поставленный бизнес процесс. О каково!&lt;br /&gt;
&lt;br /&gt;
Наши бизнес мужи это быстро схватили, и как следовало этого ожидать случился новый викток развития нашего российского бизнеса. Это будет&amp;nbsp; технический скачек в область настоящего круговорота бабла. Раз нормальный бизнес не возможен с техническими людьми, давайте возмем подготовленных специалистов, уже прошедших этот ненужный этап взросления как вникание в детатли технологии и уже умеющих вести бизнес. Я говорю о мальчиках и крутых менеджерах специалистах МБА.&lt;br /&gt;
&lt;br /&gt;
Именно этот виток развития Нашего бизнеса, позволил поставить на поток совершенно не поднимаемую отрасль как ИТ индустрия. Кто как не качественный МБА человек может леко и быстро сдавать и принмать работу не з
