<?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'><id>tag:blogger.com,1999:blog-112139442284219562</id><updated>2010-03-13T10:55:31.997+03:00</updated><title type='text'>Привет, Я Твой Разум!</title><subtitle type='html'>Powered by .NET :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-8082325581611113278</id><published>2009-06-25T00:00:00.000+04:00</published><updated>2009-06-27T14:48:05.148+04:00</updated><title type='text'>Прощальное</title><content type='html'>&lt;p&gt;Ухожу в отпуск. На год. Постараюсь писать. В &lt;a href="http://twitter.com/marselkhaidarov"&gt;твиттер&lt;/a&gt;.&lt;/p&gt;  &lt;hr /&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="motivated" border="0" alt="motivated" src="http://lh5.ggpht.com/_im-cgTShf5s/SkX45OrfLuI/AAAAAAAABjk/oLXOLlUaNaI/motivated%5B7%5D.jpg?imgmax=800" width="500" height="450" /&gt;  &lt;p align="center"&gt;&lt;em&gt;У тебя изумительное портфолио. Удача вселенной с тобой. Верю в тебя.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-8082325581611113278?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/8082325581611113278/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=8082325581611113278' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/8082325581611113278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/8082325581611113278'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/06/blog-post.html' title='Прощальное'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-3541734213089647424</id><published>2009-05-24T17:51:00.001+04:00</published><updated>2009-05-24T17:51:29.690+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Blackberry 8100 Pearl</title><content type='html'>&lt;p&gt;Попали мне в руки сабжевые аппараты в количестве 2х штук. Из Британии и Штатов, залоченные на Водафон и Т-Мобайл соотвественно. Задача: разлочка, прошивка и русификация. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSCF3744" border="0" alt="DSCF3744" src="http://lh4.ggpht.com/_im-cgTShf5s/ShlQ3w17wTI/AAAAAAAABg0/Vc-oBEI-c40/DSCF3744%5B2%5D.jpg?imgmax=800" width="400" height="300" /&gt; &lt;/p&gt;  &lt;p&gt;Разлочка осуществлялась при помощи MFI Multiloader по &lt;a href="http://forum.gsmhosting.com/vbb/showthread.php?p=3932278"&gt;инструкции&lt;/a&gt;.&amp;#160; Точнее, предполагалось ее осуществить по инструкции, однако программа стабильно выдавала «Unable to cast COM object of type 'RIMRADIOCOMLib.RIMRadioObjClass...».&amp;#160; После нескольких неудачных попыток, оставшись по сути с милым кирпичиком в руках, запустил Desktop Manager и – о чудо – мне предложили установить новую прошивку. Что я и сделал, предварительно прошивку эту русифицировав по &lt;a href="http://www.blackberrys.ru/forum/index.php?showtopic=686"&gt;инструкции&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;В случае со вторым аппаратом, от T-Mobile, решено было не рисковать, а заплатить за код. Благо после появления способов самостоятельной разлочки цены на коды сильно упали. Вот только код не подошел и пришлось вновь обращаться к MML. Далее сценарий повторяется полностью. :)&lt;/p&gt;  &lt;p&gt;В целом машинки очень приятные. По возможностям немного отстают от 8800, да и клавиатура ShureType после полноценной QWERTY – штука неудобная, но привыкнуть можно.&lt;/p&gt;  &lt;p&gt;А вообще, хочу себе 8110. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-3541734213089647424?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/3541734213089647424/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=3541734213089647424' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/3541734213089647424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/3541734213089647424'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/05/blackberry-8100-pearl.html' title='Blackberry 8100 Pearl'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-4078265411882824819</id><published>2009-05-13T20:04:00.001+04:00</published><updated>2009-06-27T14:34:00.297+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Продаю BlackBerrry 8800</title><content type='html'>Продается идеальный компаньон для любителя спорта и музыки. Продается по причине скорого отбывания счастливого владельца в ряды вооруженных сил.&lt;br /&gt;&lt;br /&gt;Что включено:&lt;br /&gt;&lt;ol&gt;&lt;del&gt;&lt;li&gt;Смартфон BlackBerrry 8800 в очень хорошем состоянии (косметически состояние идеальное). Цвет темно-синий. &lt;a href="http://market.yandex.ru/model.xml?hid=91491&amp;amp;modelid=1011715&amp;amp;show-uid=853708212422290422"&gt;http://market.yandex.ru/model.xml?hid=91491&amp;amp;modelid=1011715&amp;amp;show-uid=853708212422290422&lt;/a&gt; Стоимость в России: 17000 р. Особенности: лично для меня после знакомства с BB все прочие платформы кажутся глючным убожеством (кроме, возможно iPhone и Android). GPS работает отлично и очень экономно. Аккумултора на 1500 mAh хватает на неделю, при пользовании GPS по часу в день - 3-4 дня. В комплекте кабель USB и зарядка. Прошивка последняя, русские интерфейс и ввод. Полностью разлочен. &lt;/li&gt;&lt;li&gt;Запасной аккумулятор, оригинальный, 1500 mAh. &lt;/li&gt;&lt;/del&gt;&lt;li&gt;Защитный чехол OtterBox 1933, цвет черный+желтый &lt;a href="http://www.otterbox.com/blackberry-8800/blackberry-8800-series-defender-case/"&gt;http://www.otterbox.com/blackberry-8800/blackberry-8800-series-defender-case/&lt;/a&gt; Стоимость в США: $49.99 (сейчас там распродажа, отдают за $39.99) &lt;/li&gt;&lt;li&gt;Карта памяти MicroSD 8GB Class 4 + картридер &lt;/li&gt;&lt;li&gt;Стерео bluetooth гарнитура Philips SHB7102 &lt;a href="http://market.yandex.ru/model.xml?modelid=1627576&amp;amp;hid=418706"&gt;http://market.yandex.ru/model.xml?modelid=1627576&amp;amp;hid=418706&lt;/a&gt; Гарантия Эльдорадо, осталось полгода. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;За все прошу 9000 р.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-4078265411882824819?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/4078265411882824819/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=4078265411882824819' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/4078265411882824819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/4078265411882824819'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/05/blackberrry-8800.html' title='Продаю BlackBerrry 8800'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-6190025919102562587</id><published>2009-04-11T15:43:00.002+04:00</published><updated>2009-04-11T15:47:50.903+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Запуск веб-сервера Cassini для выбранной папки</title><content type='html'>&lt;p&gt;Возникает иногда необходимость запустить какой-нибудь проект ASP.NET либо статический html/xml с путями относительно «\», лежащий в произвольной папке. &lt;/p&gt;&lt;p&gt;Для таких целей пригоден к использованию и встроенный «ASP.NET Development Server», но ежели же захочется большей гибкости, чем только смена порта – то здесь придется обратиться к альтернативам. Например, &lt;a href="http://ultidev.com/download/default.aspx"&gt;UltiDev Cassini Web Server&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Теперь нужно лишь добавить нужный пункт в меню Explorer, что делается путем несложных манипуляций с реестром:&lt;/p&gt;&lt;pre&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_CLASSES_ROOT\Folder\shell]&lt;br /&gt;[HKEY_CLASSES_ROOT\Folder\shell\UltiDevCassinWebServer]&lt;br /&gt;[HKEY_CLASSES_ROOT\Folder\shell\UltiDevCassinWebServer\command]&lt;br /&gt;@="\"C:\\Program Files\\UltiDev\\Cassini Web Server for ASP.NET 2.0\\UltiDevCassinWebServer2.exe\" /run \"%1\""&lt;/pre&gt;&lt;p&gt;Перед последним знаком кавычек можно вставить необходимые параметры, например «default.xml 80» – для установки документа по умолчанию и порта.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-6190025919102562587?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/6190025919102562587/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=6190025919102562587' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6190025919102562587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6190025919102562587'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/04/cassini.html' title='Запуск веб-сервера Cassini для выбранной папки'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-2160954476272986582</id><published>2009-03-22T11:58:00.001+03:00</published><updated>2009-03-22T11:59:53.785+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>BlackBerry 8800. Часть 5: Почта, tips’n’tricks</title><content type='html'>&lt;h4&gt;Почта&lt;/h4&gt;  &lt;p&gt;Способ заставить работать почту в отсутствии BES/BIS имеется, имя ему – &lt;a href="http://funambol.com/"&gt;Funambol&lt;/a&gt;. И все бы хорошо, здесь вам и push, и календарь, и интеграция в родные приложения, но… только если вы не общаетесь ни на каком другом языке окромя английского. Как ни прискорбно, с юникодом сей сервис не дружит. Ну и в довесок push у меня не заработал – лишь обращение к серверу каждые 15 минут, каждый раз с превышением нетарифицируемого объема трафика и соответствующим облегчением баланса.&lt;/p&gt;  &lt;p&gt;Остается лишь Gmail, который, в отличие от версии для J2ME, позволяет работать с аккаунтами Google Apps. Да и push здесь вроде-бы есть, который у меня снова превратился в постоянный опрос сервера.&lt;/p&gt;  &lt;h4&gt;Tips’n’Tricks&lt;/h4&gt;  &lt;p&gt;Рекомендую изучить справку по клавиатурным комбинациям – очень полезная штука. Еще пара комбинаций:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Alt+LShift+Del&lt;/strong&gt; – холодная перезагрузка, аналог вынимания батареи. В случае если браузер разлочен способом, озвученным парой постов ниже, не забывать удалять затем лишние сервисбуки.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Alt+LShift+H&lt;/strong&gt; – экран «Help Me!» – дает информацию о версии прошивки, IMEI, времени аптайма, заряде батареи и доступной памяти.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Установка приложений&lt;/strong&gt; прямо с ББ возможна: для этого из встроенного файлового менеджера (&lt;em&gt;Media &amp;gt; [Menu] &amp;gt; Explore&lt;/em&gt;) нужно запустить &lt;strong&gt;jad&lt;/strong&gt; или &lt;strong&gt;jar&lt;/strong&gt;. Установка и работа приложений, предназначенных для generic J2ME устройств, не гарантирована.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-2160954476272986582?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/2160954476272986582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=2160954476272986582' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2160954476272986582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2160954476272986582'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blackberry-8800-5-tipsntricks.html' title='BlackBerry 8800. Часть 5: Почта, tips’n’tricks'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-3255173193465461837</id><published>2009-03-22T11:23:00.002+03:00</published><updated>2009-05-13T19:53:49.107+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='otterbox'/><title type='text'>BlackBerry 8800. Часть 4: OtterBox 1933</title><content type='html'>&lt;p&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title="OtterBox" border="0" alt="OtterBox" align="right" src="http://lh5.ggpht.com/_im-cgTShf5s/ScX2U15YssI/AAAAAAAABX8/wNHXvMeNx5A/OtterBox%5B4%5D.png?imgmax=800" width="240" height="104" /&gt;О &lt;a href="http://www.otterbox.com/blackberry-8800/blackberry-8800-series-defender-case"&gt;таком чехле&lt;/a&gt; читал ранее на одном из множества западных ББ-ресурсов. Настала пора и мне таким обзавестись. Посмотрел довольно убедительное &lt;a href="http://www.youtube.com/results?search_type=&amp;amp;search_query=otterbox+1933%7C8800&amp;amp;aq=f"&gt;видео&lt;/a&gt; и все для себя решил. &lt;/p&gt;&lt;p&gt;Брал все на том же ибее, благо здесь можно взять новый экземпляр за рекомендованные $50, но уже с доставкой. А с учетом BestOffer, обошелся мне заветный ВыдроЯщик во все 45 баксов.&lt;/p&gt;&lt;p&gt;Замечу, поясной держатель обладает фичей, выгодно отличающей фирменные холстеры ББ от других производителей – это магнит, отвечающий за автоматическую смену настроек текущего профиля при помещении устройства в держатель и извлечении из него. В настройках профилей наборы установок разделены на &lt;strong&gt;«In Holster»&lt;/strong&gt; и &lt;strong&gt;«Out of Holster»&lt;/strong&gt;, так что звуки, световая индикация и вибрация легко настраиваются для каждого режима.&lt;/p&gt;&lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="В первый, декабрьский снег" border="0" alt="В первый, декабрьский снег" src="http://lh4.ggpht.com/_im-cgTShf5s/ScX1jShRN0I/AAAAAAAABX4/8xaMbRDNrh8/DSCF3604%5B4%5D.jpg?imgmax=800" width="480" height="360" /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;(на экране &lt;/em&gt;&lt;a href="http://gpsed.com/"&gt;&lt;em&gt;Gpsed&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;Далее…&lt;/h4&gt;&lt;p&gt;Почта на ББ и Tips’n’Tricks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-3255173193465461837?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/3255173193465461837/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=3255173193465461837' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/3255173193465461837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/3255173193465461837'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blackberry-8800-4-otterbox-1933.html' title='BlackBerry 8800. Часть 4: OtterBox 1933'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-5200714687339745610</id><published>2009-03-22T08:54:00.001+03:00</published><updated>2009-03-22T11:35:12.201+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>BlackBerry 8800. Часть 3: Укрощение девайса</title><content type='html'>&lt;h4&gt;eBay&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="ebay" border="0" alt="ebay" align="right" src="http://lh3.ggpht.com/_im-cgTShf5s/ScXSi3dW1aI/AAAAAAAABX0/Zl-u8Rrf4bk/ebay%5B6%5D.png?imgmax=800" width="154" height="64" /&gt; &lt;/h4&gt;  &lt;p&gt;Поиск стоит вести по США и Канаде. Как советуют многие, не стоит отбрасывать продавцов, не доставляющих Worldwide, спросить их, не пожелают ли они поделиться заморским чудом с гражданином (некогда?) враждебной страны, ничего не стоит. Если аппарат залочен (а стоит брать именно такие, потому как наценка за разлоченность может существенно превышать стоимость разлочки через сторонний сервис) – необходимо разведать, во сколько обойдется разлочка. Для самых распространенных американской AT&amp;amp;T/Cingular и канадской Rogers эта операция как правило стоит менее 10 баксов, а для некоторых (T-Mobile) легко может достигать и полтиника, так что стоит подумать, стоит ли брать задешево такой аппарат, чтобы затем разориться на разлочке.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Источник: &lt;/em&gt;&lt;a href="http://www.blackberryfaq.com/index.php/Buying_a_BlackBerry_off_eBay"&gt;&lt;em&gt;Buying a BlackBerry off eBay&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Итак, вы решили стать счастливым обладателем сего девайса. За неимением друзей в BB-enabled странах и денег для обращения к перекупщикам, вы решили обратиться на eBay.&lt;/p&gt;    &lt;p&gt;Вот вы присмотрели несколько лотов, теперь перед покупкой проделываем следующее:&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Проверяем репутацию (feedback) продавца &lt;/li&gt;      &lt;li&gt;Отписываем продавцу и просим следующее:        &lt;ol&gt;         &lt;li&gt;Возможна-ли доставка в страну вашего нахождения, стоимость доставки, наличие страховки и кода отслеживания посылки (tracking number). &lt;/li&gt;          &lt;li&gt;IMEI девайса &lt;/li&gt;          &lt;li&gt;Дополнительных фотографий &lt;/li&gt;          &lt;li&gt;Спрашиваем о состоянии, новый или б/у. В случае б/у:            &lt;ol&gt;             &lt;li&gt;О возможности сделать рефанд. Конечно, отправка товара на родину - непростая операция для находящегося в России покупателя, так что никогда не нужно пренебрегать пунктом первым о фидбеках. &lt;/li&gt;              &lt;li&gt;О наличии IP Policy &lt;/li&gt;              &lt;li&gt;Разлочен-ли девайс, просим фото с подтверждением. &lt;/li&gt;           &lt;/ol&gt;         &lt;/li&gt;       &lt;/ol&gt;     &lt;/li&gt;      &lt;li&gt;После получения ответа, можно позвонить оператору, под брендом которого выпущен девайс и удостовериться по IMEI, что аппарат чист перед законом: не украден или потерян. Если девайс не разлочен, ищем там-же на eBay - возможен-ли анлок и сколько это будет стоить. &lt;/li&gt;      &lt;li&gt;Далее можно делать ставку, жать BuyItNow! или следовать какой-то другой стратегии совершения покупок на eBay. &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;Итак, вы получили долгожданный девайс. Что делаем теперь:&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Если аппарат продавался как разлоченый, удостоверяемся в этом, следуя инструкции (ниже). &lt;/li&gt;      &lt;li&gt;Иначе снова отправляемся на eBay и покупаем анлок. Ждем от нескольких минут до наступления следующего рабочего дня и следуем простой инструкции по разлочке, имеющейся у каждого продавца анлоков. &lt;/li&gt;      &lt;li&gt;Далее проверяем наличие IT Policy. Если сервис имеется и доставляет неудобства, &lt;a href="http://www.blackberryfaq.com/index.php/Remove_IT_Policy"&gt;избавляемся&lt;/a&gt;. &lt;/li&gt;      &lt;li&gt;Затем можно сделать полную очистку и поставить свежую прошивку. &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;Что, если вы получили не то, что хотели.&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Обратиться к продавцу и попросить рефанда. Обратиться в банк и попросить чарджбека. Пожаловаться в PayPal. &lt;/li&gt;      &lt;li&gt;Обращаться в милицию, пожалуй, не стоит. &lt;/li&gt;      &lt;li&gt;Сделать фотографии того, что было получено. &lt;/li&gt;      &lt;li&gt;Оставить негативный отзыв о продавце. &lt;/li&gt;   &lt;/ol&gt; &lt;/blockquote&gt;  &lt;h4&gt;Разлочка&lt;/h4&gt;  &lt;p&gt;Выясним для начала, залочен-ли он:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Источник: &lt;/em&gt;&lt;a href="http://www.blackberryfaq.com/index.php/How_do_I_determine_if_my_BlackBerry_is_%22unlocked%22%3F"&gt;&lt;em&gt;How do I determine if my BlackBerry is &amp;quot;unlocked&amp;quot;?&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Для этого необходимо выполнить следующую последовательность действий:&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Заглянуть в &lt;b&gt;Options &amp;gt; Advanced Options &amp;gt; Sim Card&lt;/b&gt; &lt;/li&gt;      &lt;li&gt;Набрать на клавиатуре &lt;b&gt;MEPD &lt;/b&gt;(для устройств с SureType клавиатурой ввод осуществляется в режиме MultiTap, т.е. ввести нужно &lt;b&gt;MEPPD&lt;/b&gt; &lt;/li&gt;      &lt;li&gt;Если девайс разлочен, все пункты на появившемся экране должны быть &lt;b&gt;Disabled&lt;/b&gt;. Наличие же &amp;quot;&lt;b&gt;Active&lt;/b&gt;&amp;quot; говорит о том, устройство залочено на оператора. &lt;/li&gt;   &lt;/ol&gt; &lt;/blockquote&gt;  &lt;p&gt;Неповезло? Процесс разлочки прост до невозможности. Находим на том же ибее по запросу типа «blackberry 8800 (AT&amp;amp;T, ATT, AT T) unlock» самого дешевого либо самого быстрого (с учетом выходных и разницы во времени) продавца, покупаем найденный лот, в сопроводительной заметке указываем модель аппарата и IMEI (*#06#). Через считанные часы получаем сообщение с кодом.&lt;/p&gt;  &lt;h4&gt;Заливаем новую прошивку&lt;/h4&gt;  &lt;p&gt;Для этого отправляемся на BlackberryForums, находим форум по интересующей модели и среди прикрепленных сверху тредов ищем что-то вроде «Attention: Latest OS: 8800 4.5.0.195/4.5.0.132 (Multilanguage)», причем модель должна быть именно та, что нам нужно, потому как, например, прошивки для 8800, 8820 и 8830 – &lt;strong&gt;разные&lt;/strong&gt;. Ищем именно Multilanguage, если нам нужны русский интерфейс и (или) русский ввод. Если мультиязычной нет, ссылка на более раннюю версию ОС есть конце поста о последней версии. &lt;/p&gt;  &lt;p&gt;Еще один вариант поиска свежих прошивок – самостоятельно прогуляться &lt;a href="http://www.blackberryfaq.com/index.php/BlackBerry_Operating_System_Downloads"&gt;по сайтам операторов&lt;/a&gt;, что может навести и на что-то более свежее, чем есть на BBForums.&lt;/p&gt;  &lt;p&gt;Процесс прошивки следующий: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;скачиваем прошивку и устанавливаем &lt;/li&gt;    &lt;li&gt;лезем в «c:\program files\common files\research in motion\apploader» и удаляем «vendor.xml» &lt;/li&gt;    &lt;li&gt;подсоединяем ББ кабелем и запускаем находящийся в вышеуказанной папке «Loader.exe» &lt;/li&gt;    &lt;li&gt;дальнейшее не должно составить трудностей &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;Заставляем работать браузер&lt;/h4&gt;  &lt;p&gt;Все подробно описано здесь: &lt;a title="http://bb.anworm.com/Home/russian" href="http://bb.anworm.com/Home/russian"&gt;http://bb.anworm.com/Home/russian&lt;/a&gt;. Спасибо товарищу Anworm из Вьетнама за то, что подарил браузер рабочему народу. После перепрошивки данный процесс придется повторять.&lt;/p&gt;  &lt;h4&gt;Далее…&lt;/h4&gt;  &lt;p&gt;Как помочь нашему девайсу выжить в суровых российских условиях. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-5200714687339745610?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/5200714687339745610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=5200714687339745610' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/5200714687339745610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/5200714687339745610'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blackberry-8800-3.html' title='BlackBerry 8800. Часть 3: Укрощение девайса'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-2971330155753513375</id><published>2009-03-21T19:50:00.001+03:00</published><updated>2009-03-22T11:51:28.098+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>BlackBerry 8800. Часть 2: Софт, BT, GPS</title><content type='html'>&lt;p&gt;Радуйтесь, бывшие пользователи «альтернативных» платформ – на ББ не существует понятия нехватки памяти – ее хватает всегда.&lt;/p&gt;  &lt;p&gt;Для начала пройдемся по стандартным приложениям.&lt;/p&gt;  &lt;h4&gt;Сообщения&lt;/h4&gt;  &lt;p&gt;Предназначено для работы со всеми типами сообщений (SMS, MMS, E-mail), но внимательно пройдясь по настройкам можно заметить опцию для отправки e-mail в свободное плавание, что оказалось очень полезным, и я благополучно убрал почту с глаз долой. В одном списке отображаются и отправленные, и принятые сообщения, сгруппированные по дате. Иконками обозначается статус (не прочитано, прочитано, отправляется, отправлено, доставлено). При переходе к сообщению, отображается весь поток диалога.&lt;/p&gt;  &lt;h4&gt;Заметки&lt;/h4&gt;  &lt;p&gt;Заголовок и текст, имеется поиск.&lt;/p&gt;  &lt;h4&gt;Календарь&lt;/h4&gt;  &lt;p&gt;Замечательнейшая вещь. Запомнилось, как им восхищались в одном из подкастов Mobile-review.com, даже не до конца осознавая все его возможности. И ведь есть чем восхищаться. Новая запись в календарь добавляется следующим образом:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;выбираемся день и час, просто ставя на него выделение и ничего не нажимая &lt;/li&gt;    &lt;li&gt;начинаем набирать на клавиатуре текст записи &lt;/li&gt;    &lt;li&gt;при необходимости откорректировать длительность, прокручиваем трекболом вверх или вниз (часто нужно добавить простое уведомление нулевой длительности – для этого достаточно взмаха пальцем вверх) &lt;/li&gt;    &lt;li&gt;нажимаем на трекбол – voi la – заметка создана &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Для созданной таким образом записи устанавливается время нотификации, заданное в настройках. При необходимости изменить эту либо одну из множества дополнительных опций записи уже придется лезть в ее подробности, т.е. еще раз нажать на трекбол.&lt;/p&gt;  &lt;h4&gt;Браузер&lt;/h4&gt;  &lt;p&gt;Подходит для повседневного использования. Пользовался поначалу Оперой мини, но постепенно перешел на встроенное приложение, потому как оно лучше ладит с не лучшим качеством gprs у Билайна. Если на Сименсе мне приходилось запускать почтовый клиент чтобы дать понять аппарату, что gprs доступен и пора уже перестать убеждать оперу в обратном, то здесь я проделывал ровно то же самое с помощью браузера – загружал гугл, закрывал, переходил в Оперу и она «волшебным» образом начинала работать. Еще одно достоинство браузера по сравнению со шведским конкурентом – поддержка диагонального перемещения курсора, а не только NSWE.&lt;/p&gt;  &lt;h4&gt;Медиа (аудио, видео, фото, диктофон)&lt;/h4&gt;  &lt;p&gt;Все работает отлично. В этом же разделе имеется файловый менеджер. Аудио с плейлистами, группировкой по исполнителю/альбому/жанру. Единственный минус – видео не желает отдавать звук по bluetooth A2DP– только на спикерфон. С аудио в этом плане все в порядке.&lt;/p&gt;  &lt;h4&gt;Калькулятор&lt;/h4&gt;  &lt;p&gt;Задействует аппаратные кнопки, функций в достатке.&lt;/p&gt;  &lt;h4&gt;Будильник&lt;/h4&gt;  &lt;p&gt;Будильник здесь один, иногда этого бывает мало. Работает на ура.&lt;/p&gt;  &lt;h4&gt;Задачи, хранитель паролей, поиск,..&lt;/h4&gt;  &lt;p&gt;Не пользуюсь&lt;/p&gt;  &lt;h4&gt;Сторонние приложения&lt;/h4&gt;  &lt;p&gt;Лишь перечислю:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Opera Mini&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Gmail, Gmaps&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;iSkoot&lt;/strong&gt; (Skype) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Instango&lt;/strong&gt; (IM: ICQ, Jabber, MSN, etc., с некоторыми клиентами возможны кракозябры в icq) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;BBTran&lt;/strong&gt; (словарь/переводчик, используются онлайн сервисы Google Translate, Reference.com, etc.) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;BBFileScout&lt;/strong&gt; (файловый менеджер, работает с архивами zip) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Gpsed&lt;/strong&gt; (GPS: текущая информация, составление маршрутов, geotagging, мощная онлайн-составляющая) &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Bluetooth&lt;/h4&gt;  &lt;p&gt;Поначалу могут возникнуть трудности с элементарной передачей файла из-за очень строгих настроек безопасности. Решается это просто: перед отправкой файла необходимо спарить девайсы, добавить получателя в список доверенных устройств.&amp;#160; Для получения файла, тоже от доверенного устройства, необходимо выбрать соответствующую из меню приложения Media. Добавлю: поддерживается A2DP, наушники Philips работают преотлично, батарейка при этом расходуется прилично, но не быстрее чем у прочих девайсов. В сочетании с картой в 8Gb (текущая прошивка поддерживает до 16) – хорошее музыкальное решение.&lt;/p&gt;  &lt;h4&gt;GPS&lt;/h4&gt;  &lt;p&gt;Холодный старт – менее минуты, очень бережное расходование батареи. Больше сказать нечего, работает и все тут.&lt;/p&gt;  &lt;h4&gt;Далее…&lt;/h4&gt;  &lt;p&gt;Расскажу о процессе укрощения девайса от вбивания в адресную строку заветных &lt;a href="http://ebay.com/"&gt;http://ebay.com/&lt;/a&gt; до превращения в незаменимого делового помощника и идеального спутника ведущего активный образ жизни человека.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-2971330155753513375?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/2971330155753513375/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=2971330155753513375' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2971330155753513375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2971330155753513375'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blackberry-8800-2.html' title='BlackBerry 8800. Часть 2: Софт, BT, GPS'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-6757275939951601763</id><published>2009-03-21T15:42:00.001+03:00</published><updated>2009-03-21T15:43:48.356+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Опыт эксплуатации BlackBerry 8800</title><content type='html'>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="© RIM" border="0" alt="© RIM" align="right" src="http://lh4.ggpht.com/_im-cgTShf5s/ScTgse4m01I/AAAAAAAABXs/CRUxLqrNoQY/BlackBerry_Logo_Preferred_Colour_R%5B4%5D.jpg?imgmax=800" width="240" height="53" /&gt; &lt;/p&gt;  &lt;p&gt;Для начала расскажу немного, чем же так славятся ББ, как это работает.&lt;/p&gt;  &lt;p&gt;Есть 2 типа сервисов для доступа к электронной почте, IM и прочим прелестям ББ – это BIS (BlackBerry Internet Service) и BES (BlackBerry Enterprise Server). Первый предоставляется оператором и включен в план, т.е. серверная часть размещена на площадке оператора. Во втором случае все это размещено на стороне организации, решившей порадовать своих сотрудников. В России операторы предоставляют лишь ПО для организации BES, причем за немалые деньги – около $10K. Таким образом, по-простому сервисы ББ у нас &lt;strong&gt;недоступны&lt;/strong&gt;. Существует вариант покупки BES вскладчину либо для перепродажи соответствующей услуги, и даже работает (за подробностями – в гугл), но взглянув на стоимость ежемесячных выплат мне эта затея показалась неразумной.&lt;/p&gt;  &lt;p&gt;Конечно же концепция ББ – это не только обмен сообщениями, но и полный контроль над устройствами, предоставляемый и BIS, и BES. Но это уже совсем другая история, к тому же счастливые обладатели разлоченных девайсов этого лишены, так что за подробностями снова в гугл.&lt;/p&gt;  &lt;h4&gt;Теперь о 8800&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="8800_ENG_EDGE_TopAngle" border="0" alt="8800_ENG_EDGE_TopAngle" align="right" src="http://lh6.ggpht.com/_im-cgTShf5s/ScTgtMU1FiI/AAAAAAAABXw/BuIOFwspI4E/8800_ENG_EDGE_TopAngle%5B5%5D.jpg?imgmax=800" width="200" height="280" /&gt;&lt;/h4&gt;  &lt;p&gt;Мне на руки сей девайс попал в конце августа прошлого, 2008 года. Хорошо поюзаный &lt;strong&gt;8800&lt;/strong&gt; в цвете Dark Blue, залоченный на AT&amp;amp;T, обошелся в ~$140 с доставкой из Штатов. Разлочен был на следующий же день, благо желающих прислать код разлочки в обмен на бумажку с фейсом товарища Гамильтона на eBay предостаточно.&lt;/p&gt;  &lt;p&gt;Устройство очень приятное, действительно «A Stylish Way To Get Things Done». Корпус – на четверочку с минусом, после длительного общения с Benq Siemens S68 мне очень нехватало алюминия и soft-touch пластика. Но решение было найдено :), о чем позже.&lt;/p&gt;  &lt;h4&gt;Управление и индикация&lt;/h4&gt;  &lt;p&gt;Основной управляющий элемент – трекбол, штука действительно удобная, к тому же абсолютно индифферентная к толщине перчаток на руках. По бокам от трекбола – крупные кнопки, покрытые серебрянкой, которая со временем может и послезать. Клавиатура – полноразмерная QWERTY, очень удобная, из дополнительных клавиш – &lt;strong&gt;Alt&lt;/strong&gt;, &lt;strong&gt;Shift&lt;/strong&gt; и &lt;strong&gt;Sym&lt;/strong&gt;(bol).&lt;/p&gt;  &lt;p&gt;С левого торца – одна настраиваемая кнопка, справа – 2 для регулирования громкости. Сверху – кнопка управления питанием (длительное нажатие) и подстветкой (короткие нажатия – &lt;em&gt;выкл&lt;/em&gt;., &lt;em&gt;макс&lt;/em&gt;., &lt;em&gt;авто&lt;/em&gt;) и кнопка для перехода в режим &lt;strong&gt;Standby&lt;/strong&gt; (при этом блокируется клавиатура, что помогает при использовании неоригинальных чехлов и кобур) – штука ИМХО бесполезная при наличии хорошего чехла.&lt;/p&gt;  &lt;p&gt;Справа от разговорного динамика – световой индикатор, режимы следующие: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;красный&lt;/strong&gt; (звонок, сообщение, событие календаря) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;синий&lt;/strong&gt; (работающее bluetooth-соединение) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;желтый&lt;/strong&gt; (слабый заряд батареи) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;зеленый&lt;/strong&gt; (индикация покрытия сети, по-простому – постоянное моргание, отключаемо). &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Интерфейс&lt;/h4&gt;  &lt;p&gt;Переопределяем с помощью тем оформления, коих бывает 4 типа по набору иконок на экране в режиме ожидания: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Zen&lt;/strong&gt; (набор иконок настраиваемый, определяется порядком в первой строчке иконок главного меню) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Today&lt;/strong&gt; (отображаются списки последних сообщений и событий календаря) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Icons&lt;/strong&gt; (по-сути, без режима ожидания, отображение главного меню) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;L&lt;/strong&gt; (предопределенный набор по левому и нижнему краям экрана) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Все это варьируется в темах сторонних разработчиков. Я пользуюсь стандартной Dimensions Zen, потому как какие бы темы я не ставил, они не меняли верхнюю часть экрана в главном меню – не знаю, чей это баг, но меня устраивает и то, что есть.&lt;/p&gt;  &lt;p&gt;Расположение иконок в главном меню настраивается, возможно скрытие оных и размещение в папки.&lt;/p&gt;  &lt;p&gt;Кнопка меню вызывает собственно меню, кнопка «Назад» – переход на уровень вверх либо закрытие приложения (реже – скрытие, зависит от приложения), кнопка отбоя – выход в режим ожидания. &lt;/p&gt;  &lt;p&gt;Кнопка вызова работает по своему назначению отовсюду (ну, кроме клиента для Skype – &lt;strong&gt;iSkoot&lt;/strong&gt;, в котором это еще и инициирование voip-звонка к выделенному в списке контакту). &lt;/p&gt;  &lt;p&gt;При попытке ввода с клавиатуры – работает поиск по адресной книге, таким образом чтобы совершить звонок нужно лишь начать набирать имя человека из режима ожидания либо из главного меню. Если первый введенный символ – цифра, в дополнение доступен ввод номера. Такое поведение настраиваемо, в альтернативном случае на клавиатуру можно навесить быстрый вызов приложения.&lt;/p&gt;  &lt;h4&gt;Далее…&lt;/h4&gt;  &lt;p&gt;Расскажу о приложениях, встроенных и сторонних, работе bluetooth и GPS.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-6757275939951601763?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/6757275939951601763/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=6757275939951601763' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6757275939951601763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6757275939951601763'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blackberry-8800.html' title='Опыт эксплуатации BlackBerry 8800'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-2613829591579462577</id><published>2009-03-20T21:16:00.002+03:00</published><updated>2009-03-21T13:49:33.925+03:00</updated><title type='text'>Ну, с новым блогом, товарищи!</title><content type='html'>&lt;p&gt;В преддверии скорого отбытия в вооруженные силы избавился от всего лишнего (хостинг, некоторые домены). Дописываю диплом.&lt;/p&gt;&lt;p&gt;Планирую написать пару постов про &lt;strong&gt;Blackberry&lt;/strong&gt;, которым пользуюсь уже полгода . И который, кстати, недавно умудрился (небывалое!) зависнуть, да так, что три кнопки не помогли и пришлось снимать чехол (о нем будет отдельный разговор) и вынимать батарейку.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-2613829591579462577?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/2613829591579462577/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=2613829591579462577' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2613829591579462577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/2613829591579462577'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blog-post_2199.html' title='Ну, с новым блогом, товарищи!'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-7950749690428244655</id><published>2008-01-08T21:06:00.000+03:00</published><updated>2009-03-20T21:06:37.515+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Миграция из C# в Java: Линкобзор</title><content type='html'>&lt;p&gt;Теперь дополню список ссылок на ресурсы для мигрантов. Напомню, пара линков была в &lt;a href="/post/Migracija-iz-C-v-Java-Chast-1.aspx"&gt;первой части&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Для начала, конечно-же, &lt;strong&gt;Википедия&lt;/strong&gt;: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;По-английски: &lt;a href="http://en.wikipedia.org/wiki/Category:Java_programming_language" target="_blank"&gt;http://en.wikipedia.org/wiki/Category:Java_programming_language&lt;/a&gt; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;По-русски: &lt;a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Java" target="_blank"&gt;http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Java&lt;/a&gt; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Далее, что же приготовила для нас собственно &lt;strong&gt;Sun&lt;/strong&gt;: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;&lt;a href="http://java.sun.com/"&gt;Java.sun.com&lt;/a&gt; - аналог &amp;quot;нашего&amp;quot; msdn.microsoft.com. Стартовая страница радует баннером &amp;quot;Run Desktop Apps Faster with Java&amp;quot; - faster than что? :))) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Без спецификации никуда: &lt;a href="http://java.sun.com/docs/books/jls/"&gt;http://java.sun.com/docs/books/jls/&lt;/a&gt; - довольно объемная книжка, читается сложновато - за один присест прочитываю не более 30 страниц. Но охват хороший. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Code Conventions лежат &lt;a href="http://java.sun.com/docs/codeconv/" target="_blank"&gt;рядом&lt;/a&gt;. Датированы 1999 годом, так что если нужны рекомендации для современных фич вроде перечислений или дженериков - добор пожаловать в спецификацию, пунктом выше. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Альтернативные рекомендации, уже посвежее, &lt;a href="http://geosoft.no/development/javastyle.html" target="_blank"&gt;здесь&lt;/a&gt;. Различия с официальными имеются, в чем-то я с ними согласен, в чем-то нет. Нужно будет их как-нибудь совместить и повесить получившееся на стенку :) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Скачать содержимое &lt;a href="http://java.sun.com/docs/books/tutorial/"&gt;http://java.sun.com/docs/books/tutorial/&lt;/a&gt; всем скопом можно &lt;a href="http://java.sun.com/docs/books/tutorial/information/download.html" target="_blank"&gt;здесь&lt;/a&gt;, ссылки &amp;quot;&lt;a href="http://java.sun.com/docs/books/tutorialNB/download/tutorial.zip" target="_blank"&gt;Online Tutorial&lt;/a&gt;&amp;quot; и, если нужно, &amp;quot;&lt;a href="http://java.sun.com/docs/books/tutorialNB/download/SwingTutorialExamples.zip" target="_blank"&gt;Swing Tutorial Examples&lt;/a&gt;&amp;quot;. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Книги в электронном виде (вроде этой: &lt;a href="http://java.sun.com/products/jlf/" target="_blank"&gt;Java Look and Feel Design Guidelines&lt;/a&gt;). Каталога не нашел, да и староваты они уже. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Блоги на &lt;a href="http://weblogs.java.net" target="_blank"&gt;weblogs.java.net&lt;/a&gt; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Далее &lt;strong&gt;IBM&lt;/strong&gt;. Замечательный ресурс &lt;a href="http://www.ibm.com/developerworks/" target="_blank"&gt;developerWorks&lt;/a&gt; (именно так, в сamelСase) &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;&lt;a href="http://www.ibm.com/developerworks/views/java/libraryview.jsp" target="_blank"&gt;Раздел Java по-английски&lt;/a&gt;&amp;#160; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;&lt;a href="http://www.ibm.com/developerworks/ru/views/java/libraryview.jsp" target="_blank"&gt;По-русски&lt;/a&gt;. Переводы появляются с заметным опозданием, но вполне читаемо &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Русскоязычных комьюнити по Java сравнимых с RSDN не нашел (Juga.Ru не впечатлил), так что только &lt;strong&gt;тройка форумов&lt;/strong&gt;: &lt;/p&gt;  &lt;p&gt;К сожалению, эти два юзают движки для форума на ПХП: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;&lt;a href="http://javatalks.ru/" target="_blank"&gt;JavaTalks&lt;/a&gt; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;&lt;a href="http://forum.juga.ru/" target="_blank"&gt;Форум на Juga.Ru&lt;/a&gt;&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160; Ну и не забудем: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;&lt;a href="http://gzip.rsdn.ru/Forum/group/java.aspx"&gt;Форум на RSDN.ru&lt;/a&gt; &lt;/div&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/112139442284219562-7950749690428244655?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/7950749690428244655/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=7950749690428244655' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7950749690428244655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7950749690428244655'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2008/01/c-java.html' title='Миграция из C# в Java: Линкобзор'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-4972220121121059643</id><published>2008-01-08T21:05:00.000+03:00</published><updated>2009-03-21T15:49:52.738+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Миграция из C# в Java: Часть 4</title><content type='html'>&lt;p&gt;Оригинал здесь &lt;a href="http://software.ericsink.com/entries/java_eclipse_4.html"&gt;http://software.ericsink.com/entries/java_eclipse_4.html&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Предыдущие части: &lt;a href="http://www.helloimyourmind.com/2009/03/c-java-1.html"&gt;1&lt;/a&gt;, &lt;a href="http://www.helloimyourmind.com/2007/12/c-java-2.html"&gt;2&lt;/a&gt;, &lt;a href="http://www.helloimyourmind.com/2007/12/c-java-3.html"&gt;3&lt;/a&gt; &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Как члены программы Microsoft VSIP, мы создавали плагины source control для линейки Visual Studio в течение восьми лет. Когда я начал свой прошлый набег на мир Eclipse, я был полон энергии чтобы изучить всю сферу плагинов по эту сторону &amp;quot;забора&amp;quot;. До сих пор я впечатлен. &lt;/p&gt;  &lt;h4&gt;Source Control и Bug Tracking &lt;/h4&gt;  &lt;p&gt;Первым плагином, что я установил, был мой собственный. SourceGear Fortress включает плагин для Eclipse, но я никогда не пробовал его до этого. &lt;/p&gt;  &lt;p&gt;Моя первая реакция - я действительно полюбил, как Eclipse оперирует установкой плагинов. Весь процесс управляется из самого Eclipse. В меню Help имеется подменю Software Updates. Все, что я должен сделать - указать URL сайта обновлений: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://download.sourcegear.com/Fortress/latest/update"&gt;http://download.sourcegear.com/Fortress/latest/update&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Оставшаяся часть процесса очень проста, и существенно автоматизирована. &lt;/p&gt;  &lt;p&gt;После установки мне стали доступны несколько дополнительных представлений:&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1731_image001_1975b410-31b6-46c6-92bc-07163628c4a7" border="0" alt="1731_image001_1975b410-31b6-46c6-92bc-07163628c4a7" src="http://lh5.ggpht.com/_im-cgTShf5s/ScPa3Ax91wI/AAAAAAAABXg/oWSECMgWZZo/1731_image001_1975b410-31b6-46c6-92bc-07163628c4a7%5B2%5D.jpg?imgmax=800" width="439" height="37" /&gt; &lt;/p&gt;  &lt;p&gt;И кое-что новое в меню Tools:&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1731_image002_46884d5c-79ee-413d-900e-a35108e7a425" border="0" alt="1731_image002_46884d5c-79ee-413d-900e-a35108e7a425" src="http://lh6.ggpht.com/_im-cgTShf5s/ScPa4fHBHUI/AAAAAAAABXk/MTsUyCqJuQw/1731_image002_46884d5c-79ee-413d-900e-a35108e7a425%5B2%5D.jpg?imgmax=800" width="392" height="187" /&gt; И несколько новых разделов в настройках:&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1731_image003_0c755c2f-0a7c-4558-95ac-9e8669cd25a6" border="0" alt="1731_image003_0c755c2f-0a7c-4558-95ac-9e8669cd25a6" src="http://lh6.ggpht.com/_im-cgTShf5s/ScPa5pBYcAI/AAAAAAAABXo/tqcan05MsyE/1731_image003_0c755c2f-0a7c-4558-95ac-9e8669cd25a6%5B2%5D.jpg?imgmax=800" width="472" height="161" /&gt; &lt;/p&gt;  &lt;p&gt;В итоге, использование средств source control в Eclipse показалось мне довольно приятным и простым. Если это похоже на хвастовство своим продуктом, то я это допускаю, за исключением пары смягчающих факторов: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Я лично не имею никакого отношения к этому плагину, т.е. это не столько хвастовство, сколько комплимент достижениям своих коллег. &lt;/li&gt;    &lt;li&gt;По моему опыту, плагины source control во многом подобны детям. В большей степени, поведение детей (или плагинов) отражает качество структуры и руководства даваемых родителями (или IDE). Таким образом, говоря, что наш плагин работает очень хорошо, я хвалю Eclipse. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Однако скажу по правде, я нашел [я так думаю] баг в нашем плагине для Eclipse. К счастью, благодаря тому, что Fortress&amp;#160; имеет поддержку встроенного bug-tracking, я смог воспользоваться плагином, чтобы сообщить о баге прямо из Eclipse. &lt;/p&gt;  &lt;h4&gt;CheckStyle &lt;/h4&gt;  &lt;p&gt;В &lt;a href="http://www.helloimyourmind.com/2007/12/c-java-2.html"&gt;части 2&lt;/a&gt; я жаловался на способ обработки сравнения объектов в Java (== для идентичности, .equals() для содержимого). Я получил довольно много комментариев и писем об этом, но признаюсь, что удалил все заметки от тех дураков, посчитавших, что я просто не понимаю указатели. &lt;/p&gt;  &lt;p&gt;Хотя несколько человек предложили мне воспользоваться плагином под названием &lt;a href="http://eclipse-cs.sourceforge.net/" rel="nofollow" target="_blank"&gt;CheckStyle&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;И снова, установка предельно проста. После этого я незамедлительно запустил CheckStyle для своего кода, чтобы лишь посмотреть на результат без предварительной настройки. &lt;/p&gt;  &lt;p&gt;CheckStyle пожаловался примерно на 301 место, где я разместил &lt;a href="http://www.helloimyourmind.com/2009/03/c-java-1.html"&gt;фигурные скобки на новой строке&lt;/a&gt;. :-) &lt;/p&gt;  &lt;p&gt;В общем, CheckStyle выглядит просто отлично. Я буду экспериментировать с ним далее и настрою на соответствие моему стилю. Я не исключаю что снова допущу ошибку с ==, уже понимая, как это сработает в Java, но это хорошо - осознавать, что в этом случае CheckStyle может указать мне на это. &lt;/p&gt;  &lt;h4&gt;Экосистема &lt;/h4&gt;  &lt;p&gt;Люди из VSIP всегда говорят об &amp;quot;экосистеме&amp;quot; Visual Studio, наборе организаций, создающих всевозможные типы плагинов для Visual Studio. &lt;/p&gt;  &lt;p&gt;Соответствующая экосистема для Eclipse оказалась просто огромной. Когда я погуглил по словам &amp;quot;eclipse plugin&amp;quot;, первые два результата оказались сайтами, предназначенными для помощи в поисках плагинов. Один из них - &lt;a href="http://www.eclipseplugincentral.com/"&gt;http://www.eclipseplugincentral.com/&lt;/a&gt;, который может похвастаться 991 плагинами в своем каталоге. &lt;/p&gt;  &lt;p&gt;Но я-то знаю, что их как минимум 992, потому как плагина SourceGear Fortress там не оказалось. :-) &lt;/p&gt;  &lt;p&gt;Просматривая разделы, обнаруживаешь невероятное разнообразие плагинов. Многие из них не впечатляют, на крайние случаи подсказывают лишь насколько велика поверхность этой экосистемы на самом деле: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Здесь есть плагин для редактирования статей Википедии &lt;/li&gt;    &lt;li&gt;Здесь есть VNC плагин, т.е. я могу управлять удаленными машинами не покидая Eclipse. &lt;/li&gt;    &lt;li&gt;Здесь есть плагин, позволяющий сыграть в Сапера в Eclipse. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;На самом деле, смотря на этот список плагинов, я начал понимать, что Eclipse по существу современный Emacs. Истинно консервативные пользователи Emacsжелают делать все в Emacs. Один мой коллега любит редактировать /etc/passwd и устанавливать Emacs как shell. Кажется, Eclipse движется в том же направлении. &lt;/p&gt;  &lt;h4&gt;В завершение. &lt;/h4&gt;  &lt;p&gt;На данный момент я попробовал 2 плагина Eclipse - на очереди еще 990. Думаю, это будет забавно. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-4972220121121059643?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/4972220121121059643/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=4972220121121059643' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/4972220121121059643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/4972220121121059643'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2008/01/c-java-4.html' title='Миграция из C# в Java: Часть 4'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-1008369677175599439</id><published>2008-01-07T21:01:00.000+03:00</published><updated>2009-03-20T21:01:43.375+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='py2exe'/><title type='text'>Автоматизация сборки с помощью py2exe</title><content type='html'>&lt;p&gt;Думаю, все питонщики знакомы с py2exe, позволяющем создавать exe для Windows. Однако работа с этим инструментом не тривиальна, так что уже довольно давно для самых простых задач (других с помощью питона мне решать пока не приходилось) имеется у меня батник, позволяющий за одно движение мыши превратить файл консольного приложения на Python в exe'шник. Конечно, возможности py2exe этим не ограничиваются, однако лично мне этого хватает, да и познания в bat'нике не велики. &lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:1f5b5e31-1731-4edc-8623-d43d72b8ac2f" class="wlWriterSmartContent"&gt;     &lt;pre&gt;@echo off&lt;br /&gt;rem PY2EXE executable builder&lt;br /&gt;&lt;br /&gt;if &amp;quot;%1&amp;quot; == &amp;quot;&amp;quot; (&lt;br /&gt;    echo Using: buildexe entry_point_path [-noopt]&lt;br /&gt;    echo entry_point_path     - path to the .py file that contains program entry point&lt;br /&gt;    echo -noopt             - disable Python compiler optimization&lt;br /&gt;    &lt;br /&gt;    goto END&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;set DRIVE=%~d1&lt;br /&gt;set OUTDIR=%~dp1&lt;br /&gt;set OPTIONS=-OO&lt;br /&gt;&lt;br /&gt;rem Disabling optimization&lt;br /&gt;if &amp;quot;%2&amp;quot; == &amp;quot;-noopt&amp;quot; (&lt;br /&gt;    set OPTIONS=&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;%DRIVE%&lt;br /&gt;cd %OUTDIR%&lt;br /&gt;&lt;br /&gt;rem Creating setup file for PY2EXE&lt;br /&gt;echo # setup.py                                      &amp;gt; setup.py&lt;br /&gt;echo from distutils.core import setup                 &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo import py2exe                                     &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo setup(options = {&amp;quot;py2exe&amp;quot;: {                     &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo     &amp;quot;bundle_files&amp;quot;: 1,                             &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo     &amp;quot;optimize&amp;quot;: 2,                                 &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo     &amp;quot;dist_dir&amp;quot;: &amp;quot;bin&amp;quot;}},                         &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo     zipfile = &amp;quot;lib.zip&amp;quot;,                         &amp;gt;&amp;gt; setup.py&lt;br /&gt;echo     console = [&amp;quot;%~n1.py&amp;quot;])                         &amp;gt;&amp;gt; setup.py&lt;br /&gt;&lt;br /&gt;rem Creating bat-file for rebuilding manually&lt;br /&gt;echo @echo off                                          &amp;gt; rebuild.bat&lt;br /&gt;echo rem Made by 'PY2EXE executable builder'.         &amp;gt;&amp;gt; rebuild.bat&lt;br /&gt;echo %DRIVE%                                         &amp;gt;&amp;gt; rebuild.bat&lt;br /&gt;echo cd %OUTDIR%                                    &amp;gt;&amp;gt; rebuild.bat&lt;br /&gt;echo %~dp0python %OPTIONS% setup.py py2exe             &amp;gt;&amp;gt; rebuild.bat&lt;br /&gt;&lt;br /&gt;rem Calling PY2EXE&lt;br /&gt;%~dp0python %OPTIONS% setup.py py2exe&lt;br /&gt;&lt;br /&gt;:END&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Для запуска нужно только перетащить в Проводнике файл .py на этот батник, после чего в папке с .py появятся: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;&lt;strong&gt;rebuild.bat&lt;/strong&gt; - батник для пересборки &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;      &lt;li&gt;&lt;strong&gt;setup.py&lt;/strong&gt; - проект py2exe (что-то вроде build.xml для Ant, код на Python вообще вещь универсальная, достаточно посмотреть на питоновские ORM, где схема БД описывается... кодом на Python. Привет, Hibernate! :)) &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;      &lt;li&gt;&lt;strong&gt;\bin&lt;/strong&gt; - папка, содержащая выходные даннные &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;      &lt;li&gt;&lt;strong&gt;\build&lt;/strong&gt; - папка с зависимостями, для дистрибуции не нужна &lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;&lt;/p&gt;&lt;br /&gt;  &lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-1008369677175599439?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/1008369677175599439/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=1008369677175599439' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/1008369677175599439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/1008369677175599439'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2008/01/py2exe.html' title='Автоматизация сборки с помощью py2exe'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-6769704248918792173</id><published>2007-12-13T20:56:00.000+03:00</published><updated>2009-03-20T20:56:18.982+03:00</updated><title type='text'>Дизайн - это вам не…</title><content type='html'>&lt;p&gt;Сегодня второй день в должности дизайнера.&amp;#160; Собственно, что я выяснил: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;&amp;quot;Дизайн - это вам не программинг, тут головой думать надо!&amp;quot;&lt;/font&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Пока все. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-6769704248918792173?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/6769704248918792173/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=6769704248918792173' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6769704248918792173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6769704248918792173'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2007/12/blog-post.html' title='Дизайн - это вам не…'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-7203270833051110224</id><published>2007-12-10T20:54:00.000+03:00</published><updated>2009-03-20T20:54:50.676+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Миграция из C# в Java: Часть 3</title><content type='html'>&lt;p&gt;Оригинал &lt;a href="http://software.ericsink.com/entries/java_eclipse_3.html" target="_blank"&gt;здесь&lt;/a&gt;. &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;До 2002 года я открыто отвергал большинство IDE. Они казались мне слишком настойчивыми. Они постоянно пытались контролировать мою систему сборки или формат кода. Если я хочу раскрыть какие-то вещи, мне нужно что-то взамен. Долгое время обмен не казался мне честным. THINK C на Macintosh был единственной IDE, которая действительно мне нравилась. &lt;/p&gt;  &lt;p&gt;Visual Studio .NET 2002 стала первой IDE для Windows, расположившей меня в себе. Я до сих пор использую vi или emacs почти каждый день, но допускаю, что стал больше использовать Visual Studio. &lt;/p&gt;  &lt;p&gt;В прошлом году я перешел на Visual Studio 2005 и полюбил ее. Это настолько великолепный продукт, что меня беспокоило, каков же будет следующий релиз. И вот вышла Visual Studio 2008, вероятно, вскоре я попробую ее. Но Visual Studio 2005 похожа на &amp;quot;Если оно работает, так и нечего беспокоиться&amp;quot;. Последнее, что мне нужно, это чтобы она стала в чем-то хуже, потому как я совершенно не представляю, как она могла бы быть лучше. &lt;/p&gt;  &lt;p&gt;Я догадываюсь, когда что-то уже появляется в IDE, просто у меня не очень хорошее воображение. :-) &lt;/p&gt;  &lt;p&gt;Я начал использовать Eclipse несколько недель назад и теперь понимаю, где Visual Studio находит пространство для улучшений. Я думаю, Eclipse удивительна, и я лишь прошелся по поверхности. &lt;/p&gt;  &lt;p&gt;Во всяком случае, вот пара избранных мной на этот раз фич Eclipse: &lt;/p&gt;  &lt;h4&gt;Постоянная сборка. &lt;/h4&gt;  &lt;p&gt;Когда я установил Eclipse, первое, что я сделал - поискал пункт меню для начала сборки приложения. Когда я не нашел ни одного, я предположил, что должно быть, система меню здесь в полном беспорядке и контринтуитивна. Как они допустили, что такую часто используемую команду так сложно найти? &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="1730_image001_2" border="0" alt="1730_image001_2" align="right" src="http://lh6.ggpht.com/_im-cgTShf5s/ScPYYlVw41I/AAAAAAAABXY/Q3VsPkGLKYI/1730_image001_2%5B3%5D.jpg?imgmax=800" width="242" height="95" /&gt; &lt;/p&gt;  &lt;p&gt;Конечно, теперь я понимаю, что Eclipse не имеет такой команды, потому как сборка выполняется автоматически и постоянно. В действительности, такая возможность меня зацепила. Однажды это привело в замешательство, однако в остальном оно Просто Работает. Я делаю изменения в коде, сохраняю файл и панель Problems автоматически показывает существующие предупреждения и ошибки. Приятно. &lt;/p&gt;  &lt;p&gt;В действительности, этим утром я потревожил Visual Studio 2005 чтобы исправить баг. После внесения изменений, я сохранил файл и уставился вниз экрана в ожидании запуска компиляции. Лишь несколько секунд спустя я догадался нажать Ctrl-Shift-B. &lt;/p&gt;  &lt;h4&gt;Быстрая правка. &lt;/h4&gt;  &lt;p&gt;Мне действительно по душе функция Quick Fix в Eclipse. В основном, всякий раз, получая ошибку компиляции или предупреждение, я ставлю текстовый курсор на &amp;quot;проблемное&amp;quot; место и жму Ctrl-1. Это вызывает инструмент Quick Fix, который отображает окно со списком путей решения данной проблемы. Например, если я пытаюсь вызвать несуществующий метод, мне предлагается создать его. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="1730_image002_2" border="0" alt="1730_image002_2" src="http://lh5.ggpht.com/_im-cgTShf5s/ScPYZyH2zXI/AAAAAAAABXc/I-LvGDFd5dw/1730_image002_2%5B2%5D.jpg?imgmax=800" width="575" height="144" /&gt; &lt;/p&gt;  &lt;p&gt;Студия предлагает сходные возможности (например, Generate Method Stub), но Quick Fix кажется более оригинальным. Мне почти всегда предлагается несколько вариантов разрешения ситуации, включая предпросмотр результата быстрой правки. &lt;/p&gt;  &lt;p&gt;Это особенно удобно, если имеешь дело с исключениями. Я большей частью испытываю неприязнь к тому, что Java заставляет объявлять, какие исключения могут быть брошены из метода. Ctrl-1 дает мне также возможность с легкостью добавить объявления типов исключений или блоки try/catch. &lt;/p&gt;  &lt;h4&gt;В завершение. &lt;/h4&gt;  &lt;p&gt;Ясно, что я новичок в Eclipse, так что мои представления о ее возможностях могут быть неверными. И как я и сказал, я лишь начинаю. Во время написания данного поста я обнаружил &amp;quot;Generate Constructor Using Fields...&amp;quot;. Жаль, что я нашел это немного раньше. :-) &lt;/p&gt;  &lt;p&gt;В любом случае, вы можете свободно меня корректировать, дополнять или обвинять в невежестве или называть 7 причин, по которым я должен использовать IntelliJ. &lt;/p&gt;  &lt;p&gt;Но главным образом я лишь говорю, что опыт с Eclipse дал мне намного большие перспективы по части IDE в общем. Сравнивая Visual Studio и Eclipse, я не могу назвать, который из них однозначно лучше. По большей части я впечатлен, что эти два соперника могут научиться так многому друг у друга. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-7203270833051110224?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/7203270833051110224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=7203270833051110224' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7203270833051110224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7203270833051110224'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2007/12/c-java-3.html' title='Миграция из C# в Java: Часть 3'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-6672391543605114169</id><published>2007-12-02T20:52:00.000+03:00</published><updated>2009-03-20T20:52:39.835+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Миграция из C# в Java: Часть 2</title><content type='html'>&lt;p&gt;Продолжим тему миграции. Перевод первой части пресдтавлен &lt;a href="http://www.helloimyourmind.com/2009/03/c-java-1.html"&gt;здесь&lt;/a&gt;, а ниже представлен перевод части 2. А в это время у Эрика уже имеется &lt;a href="http://software.ericsink.com/entries/java_eclipse_4.html" target="_blank"&gt;часть 4&lt;/a&gt;. &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Как я уже упоминал в части 1, прошло уже прочти десять лет с тех пор, как я последний раз писал на Java. Очевидно, что этого достаточно, чтобы подавить некоторые наиболее неприятные воспоминания. Например, я совсем забыл, как работает следующий код: &lt;/p&gt;  &lt;pre&gt;&lt;p&gt;&lt;br /&gt;String a = new String(&amp;quot;foo&amp;quot;);&lt;br /&gt;String b = new String(&amp;quot;foo&amp;quot;);&lt;br /&gt;if (a == b)&lt;br /&gt;{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // этого никогда не случится&lt;br /&gt;} &lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;В C# используя оператор == вы получаете ожидаемое. В Java == значит лишь, что две строки представляют собой один обхъект, а не равенство самих строк. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Причина: Перегрузка Операторов &lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Более широко, возарвщение к Java заставляет меня понять, насколько я разбираюсь в перегрузке операторов в C#. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Я не говорю, что считаю перегрузку операторов действительно полезной для моих собственных классов. Главным образом, я считаю это лишь способом позволить программистам создавать плохой код. Я допущу использование перегрузки операторов в малых долях в Sawdust для упрощения манипуляций с 3D точками и векторами, но я мог-бы обойтись и без них. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Те мне менее, мне действительно нравится использование перегрузки операторов в классах .NET Framework: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Использование == для сравнения строк очень интуитивно. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Естественно выглядит использование &amp;lt; и &amp;gt; для сравнение объектов DateTime. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Доступ к элементам Dictionary по индексу с помощью [] кажется верным. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ничего из этого не доступно в Java, и я теряю их всех. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Особенно это касается строк. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Однако это еще не так огорчает. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Ты Доолжен Подшутить Надо Мной. &lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Что действительно шокирует, так это то, что постратил неделю или около того на написание неверного кода и не получил никаких предупреждений от среды разработки. Я не понимал, что == не может быть использован для сравнения строк, пока не обратил внимание на некорректные результаты, выдаваемые приложением, и не начал раскапывать причины. Думаю, какое-нибудь предупреждение на этот случай было бы к месту. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;И откровенно я был сильно удивился, когда не получил ни одного. Я считаю верно - такое ощущение, что Eclipse делает удивительную работу по части отслеживания ошибок и предупореждений. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="1729_image001_2" border="0" alt="1729_image001_2" align="right" src="http://lh3.ggpht.com/_im-cgTShf5s/ScPX5KAjUVI/AAAAAAAABXU/9kX5KtKr5d0/1729_image001_2%5B3%5D.jpg?imgmax=800" width="292" height="162" /&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Когда я получаю ошибку или предупреждение, Eclipse указывает мне на них несколькими способами совсем не прерывая мою работу. Вкладка Problems дает мне полный список. В редакторе я получаю желтые или красные пометки. На левой границе отображаются иконки для каждой строки с ошибкой. В Explorer файлы с ошибками также помечаются иконками. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Когда я набираю название нового класса, Eclipse проверяет имя на каждом новом символе и предупреждает, если оно совпадает с именем, используемым где-лиюбо еще. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Вчера после полудня я открыл окно моего офиса. Eclipse заметил это, воспользовался моим IP-адресом для определения моего местоположения, проверил погоду для Champaign, обнаружил в прогнозе дождь и предупредил меня, что следует не забыть закрыть окно перед уходом домой. :-) &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Серьезно, Eclipse самая болтливая среда разработки что я использовал, и нет, я не жалуюсь. Я нахожу Eclipse чрезвычайно приятным. Он придупреждает иеня о многом, но эти предупреждения непосредственны, уместны и полезны. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;И поэтому я немогу поверить, что никакая часть среды Eclipse не решилась предупредить меня о сравнении строк. Мои ожидания были очень высоки. Eclipse предупреждает меня так часто, что я даже заметил, что пытаюсь сидеть в правильной позе, лишь бы не обратить на это его внимание. Но по некоторым причинам, Eclipse молча принял использование == для сравнения строк, даже если такое использование в большинстве случаев некорректно. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;В Итоге.&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Думаю, я только здесь закончил свои жалобы. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Я сожадею, что этот пост в целом позитивен к C# и негативен к Java. Чтобы удержать баланс, в части 3 я остановлюсь на некоторых областях, где Eclipse выглядит лучше, чем Visual Studio. Way better.&amp;#160; :-) &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-6672391543605114169?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/6672391543605114169/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=6672391543605114169' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6672391543605114169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/6672391543605114169'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2007/12/c-java-2.html' title='Миграция из C# в Java: Часть 2'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-9193202022576772999</id><published>2007-11-29T20:49:00.000+03:00</published><updated>2009-03-20T20:50:05.617+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Миграция из C# в Java: Часть 1</title><content type='html'>&lt;p&gt;Я и сам хотел написать несколько постов на тему перехода из .NET на Java, но, не дочитав до конца спецификацию Java, заявлять о чем-то не решался.    &lt;br /&gt;Вообще, эта тема мало рассмотрена. Об обратном переходе говорится везде, и книги тоже выходят. А здесь такие вот пробелы. &lt;/p&gt;  &lt;p&gt;По теме нашел лишь следующее: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.javacamp.org/javavscsharp/index.html" target="_blank"&gt;Java VS. C#&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/library/j-roadmap.html" target="_blank"&gt;IBM developerWorks:&amp;#160;&amp;#160; Getting on the open road Migrate to the Java platform&lt;/a&gt; (не про переход с .NET, но на безрыбье...) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;А тут вот Эрик Синк представил серию постов (пока 3 штуки) на эту тему. Ниже представлен перевод &lt;a href="http://www.ericsink.com/entries/java_eclipse_1.html" target="_blank"&gt;части первой&lt;/a&gt;. &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Пару недель назад я начал еше один проект. Мои регулярные читатели, знают, что в основном я использую C#. Тем не менее, для этого проекта я решил воспользоваться Java и Eclipse. &lt;/p&gt;  &lt;p&gt;Я не писал на Java уже несколько лет. Версия JDK в то время была 1.1.7. Средой разработки была Symantec Café, Supercede и Emacs. Понятие рефакторинг значило не более чем тема диссертации Билла Оупдайка (&lt;a href="ftp://st.cs.uiuc.edu/pub/papers/refactoring/opdyke-thesis.ps.Z" target="_blank"&gt;файл PostScript&lt;/a&gt;). Eclipse появилась несколькими годами позже. &lt;/p&gt;  &lt;p&gt;Я думаю, настало время освежить свои взгляды. &lt;/p&gt;  &lt;h4&gt;Фигурные Скобки. &lt;/h4&gt;  &lt;p&gt;Моя младшая дочь спит. Время от времени она встает посреди ночи и начинает ходить во сне. Я найду ее внизу в семейной комнате бормочащей о животных в зоопарке. Я возвращаю ее назад в кровать. А с утра она уже ничего не помнит. Почему она делает это? Я не знаю, но предполагаю, что у любого будут проблемы со сном после двухчасового просмотра &lt;a href="http://en.wikipedia.org/wiki/The_Suite_Life_of_Zack_and_Cody" target="_blank"&gt;The Suite Life of Zach and Cody&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Или, возможно, это наследственное. Видимо, на прошлой неделе я встал посреди ночи, поехал к O'Hare, полетел в Сан-Хосе, взял такси в штаб-квартиру Sun, наплевал на их газон, поехал домой и вернулся в кровать.Я не помню ничего из этого. &lt;/p&gt;  &lt;p&gt;Что я помню, так это то, на что я обратил внимания в Java - что фигурные скобки располагаются на предыдущей строке, и мое умственное здоровье стало стремительно ухудшаться. &lt;/p&gt;  &lt;p&gt;Мне заметно полегчало, когда я открыл диалог настроек Eclipse и сделал следующее:&amp;#160; &lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="1728_image001_2" border="0" alt="1728_image001_2" src="http://lh4.ggpht.com/_im-cgTShf5s/ScPXM6fd3tI/AAAAAAAABXM/rMbHH21wrJA/1728_image001_2%5B5%5D.jpg?imgmax=800" width="399" height="363" /&gt; &lt;/p&gt;  &lt;p&gt;Ах да, и это тоже: &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="1728_image002_2" border="0" alt="1728_image002_2" src="http://lh6.ggpht.com/_im-cgTShf5s/ScPXOJa-6FI/AAAAAAAABXQ/opCH1L31L94/1728_image002_2%5B5%5D.jpg?imgmax=800" width="266" height="70" /&gt; &lt;/p&gt;  &lt;p&gt;Эти изменения настроек возымели для меня огромное значение. По-видимому, естественный стиль в мире Java - располагать фигурные скобки на одной строке с предшествующей ей конструкцией. Но в любом случае я не смог бы к этому привыкнуть. я не говорю, что мой стиль объективно лучше. Я лишь говорю, что не могу справиться. &lt;/p&gt;  &lt;p&gt;К счастью, Eclipse обладает невероятными функциами кастомизации. После вышеизложенных изменений я лишь нажал &amp;quot;Ctrl-Shift-F&amp;quot; и весь мой код стал намного привлекательней для меня. &lt;/p&gt;  &lt;p&gt;Я надеался, что это работало и за пределами IDE. Я приобрел &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0596009208/sawdust08-20" target="_blank"&gt;Head First Java&lt;/a&gt; и &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0596007736/sawdust08-20" target="_blank"&gt;Java in a Nutshell&lt;/a&gt;. Обе книги были великолепны, но я продолжал обнаруживать свою левую руку жмущей &amp;quot;Ctrl-Shift-F&amp;quot; в надежде отворматировать книжную страницу. &lt;/p&gt;  &lt;p&gt;Этим утром по пути на работу я заметил чью-то попытку свернуть с неверной полосы. Моя левая рука жала &amp;quot;Ctrl-Shift-F&amp;quot;. &lt;/p&gt;  &lt;h4&gt;Раскладки Клавиш. &lt;/h4&gt;  &lt;p&gt;Замечательная кастомизируемость Eclipse пришла на выручку снова для раскладок клавиш. Разница между Visual Studio и Eclipse значительна. &lt;/p&gt;  &lt;p&gt;Например, три наиболее часто используемые мной команды отладчика: Debug, Step Over, и Step Into. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Для Visual Studio клавиши по умолчанию: F5, F10 and F11.&amp;#160; &lt;/li&gt;    &lt;li&gt;Для Eclipse это: F11, F6, and F5. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Правда в том, что я ищу раскладку Visual Studio и могу набрать указанное выше. Сознательно я не знаю, что они значат. Они лишь запрятаны где-то в моей бессознательной памяти. Это автоматизм. И когда я впервые запустил отладку в Eclipse, кое-что работало совсем не так хорошо. &lt;/p&gt;  &lt;p&gt;В действительности, комбинации клавиш настолько различны по сравнению с Visual Studio, что я заподозрил их умышленное происхождение из недоброжелательных причин. Тем не менее, пока я не нашел сочетание клавиш, означающих &amp;quot;Go to Declaration&amp;quot; в одной среде и &amp;quot;Reformat my Hard Disk&amp;quot; в другой, я собирался отложить все подозрения и принять свою излишнюю параноидальность. &lt;/p&gt;  &lt;p&gt;До сих пор я делаю знать, что значит &amp;quot;Ctrl-Shift-F&amp;quot; в Visual Studio? &lt;/p&gt;  &lt;h4&gt;В Итоге. &lt;/h4&gt;  &lt;p&gt;Обычно я не люблю делать излишнюю кастомизацию своей рабочей среды. В конце концоа, я пользователь Windows. Все мои измененные настройки теряются после переустановки системы. Легче научиться пользоваться вещами в из естественном состоянии. &lt;/p&gt;  &lt;p&gt;Но если я собираюсь использовать Visual Studio и Eclipse одновременно, мне определенно нужно, чтобы один из них был немного сходен с другим. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-9193202022576772999?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/9193202022576772999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=9193202022576772999' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/9193202022576772999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/9193202022576772999'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/c-java-1.html' title='Миграция из C# в Java: Часть 1'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-8557957052747338704</id><published>2007-10-16T21:45:00.000+04:00</published><updated>2009-03-20T20:45:19.623+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webforms'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><title type='text'>Практика с XSLT в ASP.NET</title><content type='html'>&lt;p&gt;Часто возникает необходимость в небольшом сайте, но ASP.NET оказывается слишком тяжеловесен, статичный HTML не устраивает совмещением данных и представления, а PHP или SSI просто брезгуешь. &lt;/p&gt;  &lt;p&gt;В случае же использования XSLT кодирование займет ненамного больше времени, чем в случае с HTML. В этом посте я рассмотрю 2 варианта развертывания XSLT-сайта под ASP.NET. &lt;/p&gt;  &lt;p&gt;Трансформацию на стороне клиента не рассматриваю, потому как на любителя это. Не в том смысле, что простые пути - не наш выбор, а в том, что выставлять данные напоказ... хмм... нет. &lt;/p&gt;  &lt;h3&gt;Вариант первый: собственный рендерер страницы&lt;/h3&gt;  &lt;p&gt;Пример: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;/test1/default.aspx:&lt;/em&gt; &lt;/p&gt;  &lt;pre&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; &lt;br /&gt;CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;_Default&amp;quot; %&amp;gt;&lt;br /&gt;//&lt;br /&gt;&amp;lt;root title=&amp;quot;Page Title&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;data&amp;gt;&lt;br /&gt;        &amp;lt;item text=&amp;quot;node 1 contents&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;item text=&amp;quot;node 2 contents&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;item text=&amp;quot;node 3 contents&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;/data&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;/test1/default.aspx.cs:&lt;/em&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public partial class _Default : XslTransformPage &lt;br /&gt;{&lt;br /&gt;    public _Default() : base(&amp;quot;test1.xsl&amp;quot;) { }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Как видно, содержимое страницы представляет собой данные в формате XML. И страница эта наследуется от XslTransformPage, реализующего функционал XSL преобразования: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;/app_code/xsltransformpage.cs:&lt;/em&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Xml.Xsl;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Caching;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;//&lt;br /&gt;public class XslTransformPage : Page&lt;br /&gt;{&lt;br /&gt; public XslTransformPage() { }&lt;br /&gt; //&lt;br /&gt;    public XslTransformPage(string styleSheetFile)&lt;br /&gt;    {&lt;br /&gt;        this.styleSheetFile = styleSheetFile;&lt;br /&gt;    }&lt;br /&gt; //&lt;br /&gt;    private string styleSheetFile;&lt;br /&gt;    public string StyleSheetFile&lt;br /&gt;    {&lt;br /&gt;        get { return styleSheetFile; }&lt;br /&gt;        set { styleSheetFile = value; }&lt;br /&gt;    }&lt;br /&gt; //&lt;br /&gt;    protected override void Render(HtmlTextWriter writer)&lt;br /&gt;    {&lt;br /&gt;        if (Cache[Request.RawUrl] != null)&lt;br /&gt;        {&lt;br /&gt;            writer.Write(Cache[Request.RawUrl].ToString());&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;  //&lt;br /&gt;        string xslPath = Server.MapPath(&amp;quot;~/App_Code/&amp;quot; + styleSheetFile);&lt;br /&gt;        if (!File.Exists(xslPath))&lt;br /&gt;            throw new HttpException(404, &amp;quot;Cannot find &amp;quot; + Request.RawUrl);&lt;br /&gt;  //&lt;br /&gt;        XslCompiledTransform transform = new XslCompiledTransform();&lt;br /&gt;        transform.Load(xslPath);&lt;br /&gt;  //&lt;br /&gt;        StringBuilder inBuilder = new StringBuilder();&lt;br /&gt;        StringBuilder outBuilder = new StringBuilder();&lt;br /&gt;  //&lt;br /&gt;        using (StringWriter sw = new StringWriter(inBuilder))&lt;br /&gt;        using (HtmlTextWriter hw = new HtmlTextWriter(sw))&lt;br /&gt;        {&lt;br /&gt;   //Получает содержимое страницы, т.е. данные в xml&lt;br /&gt;            base.Render(hw);&lt;br /&gt;   //&lt;br /&gt;            using (StringReader sr = new StringReader(inBuilder.ToString()))&lt;br /&gt;            using (XmlReader xr = XmlReader.Create(sr))&lt;br /&gt;   //&lt;br /&gt;            using (XmlWriter xw = XmlWriter.Create(outBuilder))&lt;br /&gt;                transform.Transform(xr, xw);&lt;br /&gt;        }&lt;br /&gt;  //&lt;br /&gt;        Cache.Add(Request.RawUrl, outBuilder.ToString(),&lt;br /&gt;            new CacheDependency(new string[] { Request.PhysicalPath, xslPath }),&lt;br /&gt;            Cache.NoAbsoluteExpiration,&lt;br /&gt;            new TimeSpan(24, 0, 0),&lt;br /&gt;            CacheItemPriority.Normal, null);&lt;br /&gt;  //&lt;br /&gt;        writer.Write(outBuilder.ToString());&lt;br /&gt;    }&lt;br /&gt;} &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Кроме преобразования здесь используется также кеширование результата преобразования. &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Вариант второй: HttpHandler на .aspx&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Как, наверное, понятно, используется HttpHandler, навешиваемый на расширение .aspx, вот таким образом: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;app.config:&lt;/em&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;httpHandlers&amp;gt;&amp;#160; &amp;lt;add verb=&amp;quot;*&amp;quot; path=&amp;quot;*.aspx&amp;quot; type=&amp;quot;XslTransformHandler&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/httpHandlers&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Теперь сам обработчик: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;/app_code/xsltransformhandler.cs:&lt;/em&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Caching;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Xml.Xsl;&lt;br /&gt;//&lt;br /&gt;public class XslTransformHandler : IHttpHandler&lt;br /&gt;{&lt;br /&gt;    public void ProcessRequest(HttpContext context)&lt;br /&gt;    {&lt;br /&gt;        string path = context.Request.Path.Substring(context.Request.ApplicationPath.Length);&lt;br /&gt;  //&lt;br /&gt;        ProcessRequest(context, path);&lt;br /&gt;    }&lt;br /&gt; //&lt;br /&gt;    public void ProcessRequest(HttpContext context, string path)&lt;br /&gt;    {&lt;br /&gt;        context.Response.ContentType = &amp;quot;text/html&amp;quot;;&lt;br /&gt;  //&lt;br /&gt;        if (context.Cache[path] == null)&lt;br /&gt;        {&lt;br /&gt;            string xslPath = String.Empty;&lt;br /&gt;            string xmlPath = String.Empty;&lt;br /&gt;   //&lt;br /&gt;            string xslFile = String.Empty;&lt;br /&gt;            string xmlFile = String.Empty;&lt;br /&gt;            string xmlDir = String.Empty;&lt;br /&gt;   //&lt;br /&gt;            string[] parts = path.Contains(&amp;quot;/&amp;quot;) ?&lt;br /&gt;                path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries) :&lt;br /&gt;                new string[] { path };&lt;br /&gt;   //&lt;br /&gt;   // Замечу, что файл стилей будет один для каждой папки, для корневой: &lt;br /&gt;   //   default.xsl, ...&lt;br /&gt;            if (parts.Length == 1)&lt;br /&gt;            {&lt;br /&gt;                xslFile = &amp;quot;default.xsl&amp;quot;;&lt;br /&gt;                xmlFile = Path.GetFileNameWithoutExtension(parts[0]) + &amp;quot;.xml&amp;quot;;&lt;br /&gt;                xmlDir = &amp;quot;&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;            //   ... для вложенных - вида папка.папка...папка.xsl&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                xslFile = String.Join(&amp;quot;.&amp;quot;, parts, 0, parts.Length - 1) + &amp;quot;.xsl&amp;quot;;&lt;br /&gt;                xmlFile = Path.GetFileNameWithoutExtension(parts[parts.Length - 1]) + &amp;quot;.xml&amp;quot;;&lt;br /&gt;                xmlDir = String.Join(&amp;quot;/&amp;quot;, parts, 0, parts.Length - 1);&lt;br /&gt;                if (xmlDir.Length &amp;gt; 0)&lt;br /&gt;                    xmlDir += &amp;quot;/&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;   //&lt;br /&gt;            xslPath = context.Server.MapPath(&amp;quot;~/App_Code/&amp;quot; + xslFile);&lt;br /&gt;            xmlPath = context.Server.MapPath(&amp;quot;~/App_Data/&amp;quot; + xmlDir + xmlFile);&lt;br /&gt;   //&lt;br /&gt;            if (!File.Exists(xmlPath) || !File.Exists(xslPath))&lt;br /&gt;                throw new HttpException(404, &amp;quot;Cannot find&amp;quot; + context.Request.RawUrl);&lt;br /&gt;   //&lt;br /&gt;            XslCompiledTransform transform = new XslCompiledTransform();&lt;br /&gt;            transform.Load(xslPath);&lt;br /&gt;   //&lt;br /&gt;            StringBuilder sb = new StringBuilder();&lt;br /&gt;            using (XmlReader xr = XmlReader.Create(xmlPath))&lt;br /&gt;            using (XmlWriter xw = XmlWriter.Create(sb))&lt;br /&gt;                transform.Transform(xr, xw);&lt;br /&gt;   //&lt;br /&gt;            context.Cache.Add(path, sb.ToString(),&lt;br /&gt;                new CacheDependency(new string[] { xmlPath, xslPath }),&lt;br /&gt;                Cache.NoAbsoluteExpiration,&lt;br /&gt;                new TimeSpan(12, 0, 0),&lt;br /&gt;                CacheItemPriority.Normal, null);&lt;br /&gt;   //&lt;br /&gt;            context.Response.Write(sb.ToString());&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;            context.Response.Write(context.Cache[path].ToString());&lt;br /&gt;    }&lt;br /&gt; //&lt;br /&gt;    public bool IsReusable&lt;br /&gt;    {&lt;br /&gt;        get { return false; }&lt;br /&gt;    }&lt;br /&gt;} &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Пример: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Для запрашиваемого &lt;em&gt;/test2/default.aspx&lt;/em&gt; данные будут распологаться в &lt;em&gt;/App_Data/test2/default.xml&lt;/em&gt;, а стили в &lt;em&gt;/App_Code/test2.xsl&lt;/em&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Для запрашиваемого &lt;em&gt;/test2/subdir/page.aspx&lt;/em&gt;: в &lt;em&gt;/App_Data/test2/subdir/page.xml&lt;/em&gt; и &lt;em&gt;/App_Code/test2.subdir.xsl&lt;/em&gt; соответственно. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;А самого файла .aspx может и не существовать, либо в случае со страницами по умолчанию (например, default.aspx) он может присутствовать и быть пустым, чтобы IIS был в курсе о ее существовании. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Также, как и в случае со статичными данными, xml может быть получен и из БД (SELECT FOR XML) и вообще откуда угодно, и оба описанных метода можно приспособить в том числе и для этого. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Да, немногословно как-то получилось :) &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-8557957052747338704?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/8557957052747338704/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=8557957052747338704' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/8557957052747338704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/8557957052747338704'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/xslt-aspnet.html' title='Практика с XSLT в ASP.NET'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-7820306338152963429</id><published>2007-06-27T21:44:00.000+04:00</published><updated>2009-03-20T20:44:44.966+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='msbuild'/><title type='text'>Задание версии и даты сборки при компиляции</title><content type='html'>&lt;p&gt;Задание версии и даты сборки при компиляции    &lt;br /&gt;    &lt;br /&gt;Недавно около часа гуглил как же запихнуть в AssemblyInfo ревизию SVN. Остановился было на &lt;a href="http://msbuildtasks.tigris.org/" target="_blank"&gt;сборнике MSBuild тасков&lt;/a&gt;, когда обнаружил замечательную утилиту SubWCRev из состава &lt;a href="http://tortoisesvn.tigris.org/" target="_blank"&gt;Tortoise SVN&lt;/a&gt;, которая вдобавок умеет вставлять еще и дату.     &lt;br /&gt;    &lt;br /&gt;Используется это так: &lt;/p&gt;  &lt;ul style="margin-top: 0px; margin-bottom: 0px"&gt;Создается шаблонный файл AssemblyInfo.template.cs следующего вида:    &lt;br /&gt;&lt;em&gt;AssemblyInfo.template.cs:&lt;/em&gt;     &lt;br /&gt;    &lt;table border="0" width="96%"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td&gt;           &lt;pre&gt;[assembly: AssemblyDescription(&amp;quot;Inductive UI Toolkit Test Application. Built at $WCDATE$.&amp;quot;)]&lt;br /&gt;[assembly: AssemblyVersion(&amp;quot;2.2.$WCREV$.*&amp;quot;)]&lt;/pre&gt;&lt;br /&gt;        &lt;/td&gt;&lt;br /&gt;      &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;В файл проекта инклудится проектик, таргет BeforeBuild (описан в Microsoft.Common.targets) в котором будет выполняться понятно из его названия когда: &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;em&gt;MyProject.csproj:&lt;/em&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;table border="0" width="96%"&gt;&lt;tbody&gt;&lt;br /&gt;      &lt;tr&gt;&lt;br /&gt;        &lt;td&gt;&lt;br /&gt;          &lt;pre&gt;&amp;lt;Import Project=&amp;quot;$(MSBuildProjectDirectory)\..\RevisionInfo.targets&amp;quot; /&amp;gt;&lt;/pre&gt;&lt;br /&gt;        &lt;/td&gt;&lt;br /&gt;      &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;em&gt;RevisionInfo.targets:&lt;/em&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;table border="0" width="96%"&gt;&lt;tbody&gt;&lt;br /&gt;      &lt;tr&gt;&lt;br /&gt;        &lt;td&gt;&lt;br /&gt;          &lt;pre&gt;&amp;lt;Project xmlns=&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;    &amp;lt;SubWCRevDir&amp;gt;C:\Program Files\TortoiseSVN\bin&amp;lt;/SubWCRevDir&amp;gt;&lt;br /&gt;  &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- Sets AssemblyVersion value based on Subversion revision --&amp;gt;&lt;br /&gt;  &amp;lt;Target Name=&amp;quot;BeforeBuild&amp;quot; Condition=&amp;quot; '$(Configuration)|$(Platform)' == 'Release|AnyCPU' &amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Exec Command='&amp;quot;$(SubWCRevDir)\SubWCRev&amp;quot; $(MSBuildProjectDirectory) &lt;br /&gt;        $(MSBuildProjectDirectory)\Properties\AssemblyInfo.template.cs &lt;br /&gt;        $(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs' IgnoreExitCode=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/pre&gt;&lt;br /&gt;        &lt;/td&gt;&lt;br /&gt;      &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;Студия довольно благосклонно отнеслась к правке файла проекта и теперь при Release-билде проекта будет создаваться новый AssemblyInfo.cs с нужными данными. &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/112139442284219562-7820306338152963429?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/7820306338152963429/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=7820306338152963429' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7820306338152963429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/7820306338152963429'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blog-post_1168.html' title='Задание версии и даты сборки при компиляции'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-112139442284219562.post-5658129740143094156</id><published>2007-05-23T21:43:00.000+04:00</published><updated>2009-03-20T20:43:55.802+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><title type='text'>Почему тупит дизайнер</title><content type='html'>&lt;p&gt;В &lt;strong&gt;IuiToolkit&lt;/strong&gt; встала необходимость заиметь такое свойство, которому уже &lt;strong&gt;в дизайнере&lt;/strong&gt; можно было бы присвоить следующие значения: &lt;/p&gt;  &lt;ul style="margin-top: 0px; margin-bottom: 0px"&gt;Экземпляра любого класса соответствующего типа (при наличии конструктора без параметров, конечно же)    &lt;br /&gt;Возвращаемого значения любого статического метода (также без параметров)     &lt;br /&gt;.. статического свойства     &lt;br /&gt;.. статического поля &lt;/ul&gt;  &lt;br /&gt;+ Создавался еще custom CollectionEditor для хранения задач.   &lt;br /&gt;  &lt;br /&gt;В процессе разработки всего этого пришлось познакомиться со следующими прелестями дизайнера:   &lt;br /&gt;  &lt;h4 class="formatter"&gt;Если из UITypeEditor'а возвращается ссылка на тот же объект, он не сериализуется&lt;/h4&gt; Это проявилось в дизайнере коллекции, т.к. коллекция, передаваемая в редактор, только меняла свое содержимое, объект оставался тот же самый и сравнив их по ссылкам, дизайнер не сериализовал &amp;quot;не изменившуюся&amp;quot; коллекцию.   &lt;br /&gt;Для решения нужно использовать методы ITypeDescriptorContext.OnComponentChanging и ITypeDescriptorContext.OnComponentChanged, следующим образом:   &lt;br /&gt;  &lt;table border="0" width="96%"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;pre&gt;    public class TasksEditor : UITypeEditor&lt;br /&gt;    {&lt;br /&gt;        private IWindowsFormsEditorService editorService;&lt;br /&gt;&lt;br /&gt;        public override object EditValue(ITypeDescriptorContext context,&lt;br /&gt;            IServiceProvider provider, object value)&lt;br /&gt;        {&lt;br /&gt;            object newValue = value;&lt;br /&gt;&lt;br /&gt;            if (context != null &amp;amp;&amp;amp; &lt;br /&gt;                context.Instance != null &amp;amp;&amp;amp;&lt;br /&gt;                provider != null)&lt;br /&gt;            {&lt;br /&gt;                editorService = (IWindowsFormsEditorService)provider.&lt;br /&gt;                    GetService(typeof(IWindowsFormsEditorService));&lt;br /&gt;&lt;br /&gt;                if (editorService != null)&lt;br /&gt;                {&lt;br /&gt;                    TasksEditorDialog d = new TasksEditorDialog();&lt;br /&gt;                    d.Tasks = (TasksGroupsCollection)value;&lt;br /&gt;&lt;br /&gt;                    context.OnComponentChanging();&lt;br /&gt;                    if (editorService.ShowDialog(d) == DialogResult.OK)&lt;br /&gt;                    {&lt;br /&gt;                        newValue = d.Tasks;&lt;br /&gt;                        context.OnComponentChanged();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return newValue;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        //...&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;      &lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;  &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В статьях MSDN, посвященных UITypeEditor упоминаний этого не нашел и попался. Благо, гугл затем направил на верный путь. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 class="formatter"&gt;Асинхронные вызовы в UITypeEditor'е&lt;/h4&gt;&lt;br /&gt;В диалоге редактора асинхронно перебирались Reflection'ом сборки. И выполнялось это, естественно, асинхронно. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Поначало с помощью BackgroundWorker'а, который ввел себя несовсем предсказуемо. В какой-то момент времени по завершении DoWork диалог просто закрывался без каких либо пояснений. К сожалению отладка дизайнера в Express-студии ограничена, а MessageBox'ами выяснилось только то, что при этом не вызывается ни OnRunWorkerCompleted, ни даже FormClosing. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ОК, с BackgroundWorker'ом нам не по пути, реализовал асинхронность вручную с помощью делегатов и BeginInvoke. Результат из метода возвращался с помощью IAsyncResult. Здесь лучше не стало, в тот момент, когда метод завершал работу, студия просто валилась с предложением др.Ватсона отправить отчет. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;С чувством, что меня здесь не ждали, реализовал следующее: выбросил IAsyncResult и организовал передачу в асинхронный метод делегата EndProcessingCallback, который вызывался в конце метода. И... заработало!) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 class="formatter"&gt;Сложности отладки designtime-компонентов&lt;/h4&gt;&lt;br /&gt;Если единожды воспользоваться в дизайнере таким компонентом и изменить его состояние, то при следующем билде компонента, и открывании дизайнера того компонента, в котором используется наш designtime-компонент, студия может заявить, что не может привести тип X к типу X. Почему? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как выяснилось, designtime-компонент закешировался в (LocalApplicationData)\Microsoft\(Visual Studio | VCSExpress | VBExpress)\8.0\ProjectAssemblies и будет там оставаться неизменным по перезапуска студии. И никакие Cleanup'ы и Rebuild'ы здесь не помогут. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 class="formatter"&gt;MSB4018: The &amp;quot;GenerateResource&amp;quot; task failed unexpectedly.&lt;/h4&gt;&lt;br /&gt;Также, если сильно увлечься designtime'ом можно словить и такую ошибку. Это баг в MSBuild, лечится только переустановкой .NET Framweork'а. Связана эта ошибка, как понятно, с ресурсами, у меня таким образом MSBuild не нашел понимания в находящимися там System.Reflection.Runtime[Constructor|Field|Method|Property]Info, сериализующимися наследниками System.Reflection.[Constructor|Field|Method|Property]Info, запиханными туда дизайнером студии. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;И не нужно спешить добавлять в файл проекта ноду GenerateResourceNeverLockTypeAssemblies, как предложено на &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=491745&amp;amp;SiteID=1" target="_blank"&gt;форуме MSDN&lt;/a&gt; — я добавил было — не помогло, переставил фреймворк — та же фигня. И лишь после удаления этого ключа, MSBuild дал добро. &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/112139442284219562-5658129740143094156?l=www.helloimyourmind.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.helloimyourmind.com/feeds/5658129740143094156/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=112139442284219562&amp;postID=5658129740143094156' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/5658129740143094156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/112139442284219562/posts/default/5658129740143094156'/><link rel='alternate' type='text/html' href='http://www.helloimyourmind.com/2009/03/blog-post_20.html' title='Почему тупит дизайнер'/><author><name>Марсель Хайдаров</name><uri>http://www.blogger.com/profile/06508025692126201589</uri><email>marsel@khaidarov.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02679032898227090768'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>