<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Apple Geek &#187; Статьи</title>
	<atom:link href="http://theapplegeek.ru/archives/category/articles/feed" rel="self" type="application/rss+xml" />
	<link>http://theapplegeek.ru</link>
	<description>Чему ты научился сегодня?</description>
	<lastBuildDate>Fri, 30 Jul 2010 13:48:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Сравнение времени автономной работы MacBook Pro Unibody при работе с HDD и SSD</title>
		<link>http://theapplegeek.ru/archives/4242</link>
		<comments>http://theapplegeek.ru/archives/4242#comments</comments>
		<pubDate>Fri, 30 Jul 2010 13:46:50 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[ssd]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4242</guid>
		<description><![CDATA[Решил посмотреть, как повлияла установка SSD на время автономной работы моего ноутбука MacBook Pro Unibody (Core 2 Duo 2.8 GHz). Запустил просмотр полноэкранного видео разрешения 512&#215;384 (XVid) в VLC сначала с диском SSD Intel X25-M G2, а затем со штатным HDD 500 GB 5400 rpm. Яркость экрана выставил на половину, WiFi включен. Два диска являются [...]]]></description>
			<content:encoded><![CDATA[<p>Решил посмотреть, как повлияла <a href="http://theapplegeek.ru/archives/4208" >установка SSD</a> на время автономной работы моего ноутбука MacBook Pro Unibody (Core 2 Duo 2.8 GHz).</p>
<p>Запустил просмотр полноэкранного видео разрешения 512&#215;384 (XVid) в VLC сначала с диском SSD Intel X25-M G2, а затем со штатным HDD 500 GB 5400 rpm. Яркость экрана выставил на половину, WiFi включен. Два диска являются идентичными клонами, сделанные с помощью <a href="http://theapplegeek.ru/archives/4059" >SuperDuper!</a>. Мониторинг батареи &#8211; в <a href="http://theapplegeek.ru/archives/814" >MiniBatteryLogger</a>.</p>
<p>SSD &#8211; 04:30:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd1-full.png"  class="image-link" rel="lightbox[4242]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd1-thumb1.png" height="325" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p><span id="more-4242"></span></p>
<p>HDD &#8211; 04:25:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_hdd1-full.png"  class="image-link" rel="lightbox[4242]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_hdd1-thumb1.png" height="325" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Вывод &#8211; при постоянном считывании с диска время автономной работы с SSD и HDD практически одинаковое. Скорее всего на HDD при эпизодическом чтении время будет дольше, но порядок будет в районе десятков минут, отнюдь не часов.</p>
<p>Т.е. установка SSD значительно улучшила впечатление от работы и практически не повлияла на время автономной работы. Что замечательно.</p>
<p>Следующим этапом проверю время автономной работы с SSD на свежеустановленной Mac OS X.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4242/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Работа с WiFi из командной строки (airport)</title>
		<link>http://theapplegeek.ru/archives/4237</link>
		<comments>http://theapplegeek.ru/archives/4237#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:49:04 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4237</guid>
		<description><![CDATA[Из подборки на superuser.com я освежил для себя подзабытую команду airport, с помощью которой можно работать с WiFi-подсистемой. Утилита находится в дебрях фреймворка Apple80211: /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport Для упрощения работы можно сделать алиас: $ vim ~/.bash_profile alias ap='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport' Сканирование сетей: $ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group) XXXXXXX 00:00:00:00:00:a6 -65 2 N IL [...]]]></description>
			<content:encoded><![CDATA[<p>Из подборки на <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://superuser.com/questions/52483?tab=votes&#038;page=2#tab-top" >superuser.com</a></noindex> я освежил для себя подзабытую команду airport, с помощью которой можно работать с WiFi-подсистемой.</p>
<p>Утилита находится в дебрях фреймворка Apple80211:</p>
<pre>
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport
</pre>
<p><span id="more-4237"></span></p>
<p>Для упрощения работы можно сделать алиас:</p>
<pre>
$ vim ~/.bash_profile
alias ap='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport'
</pre>
<p>Сканирование сетей:</p>
<pre>
$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
<small>SSID    BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
XXXXXXX 00:00:00:00:00:a6  -65       2  N IL WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)
YYYYYYY 00:00:00:00:00:ab  -34       7  Y AT WPA2(PSK/AES/AES)</small>
</pre>
<ul>
<li>SSID &#8211; service set identifier. Имя, которое идентифицирует беспроводную сеть</li>
<li>BSSID &#8211; basic service set identifier. В большинстве случаев это идентификатор Access Point и является её MAC-адресом</li>
<li>RSSI &#8211; Received signal strength indication. Мощность сигнала. Чем больше значение, тем сигнал мощнее (в примере сигнал сети YYYYYYY сильнее XXXXXXX).</li>
<li>CHANNEL &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/IEEE_802.11#Channels_and_international_compatibility" >канал</a></noindex>, на котором работает сеть. Для информации &#8211; в 802.11g есть всего три неинтерферирующих канала, поэтому если вокруг много активно работающих сетей, то будет наблюдаться снижение скорости и сбои в работе.</li>
<li>HT &#8211; я так и не нашёл, что это такое.</li>
<li>CC &#8211; страна, определяет частотный диапазон и конфигурируется для Access Point. IL &#8211; Израиль, AT &#8211; Австрия.</li>
<li>SECURITY (auth/unicast/group) &#8211; технология защиты, обмен ключами, шифрование.</li>
</ul>
<p>Информация по текущей сети:</p>
<pre>
$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I
<small>     agrCtlRSSI: -37
     agrExtRSSI: 0
    agrCtlNoise: -89
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 145
        maxRate: 144
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: 00:00:00:00:00:ab
           SSID: XXXXXXXXXXXX
            MCS: 15
        channel: 7</small>
</pre>
<p>Почти все параметры говорят сами за себя (кроме lastTxRate и maxRate, которые я не могу объяснить внятно). Меня интересуют два параметра:</p>
<ul>
<li>agrCtlRSSI &#8211; мощность сигнала, чем выше, тем лучше</li>
<li>agrCtlNoise &#8211; шум, чем меньше, тем лучше</li>
</ul>
<p>Отключение от сети</p>
<pre>
$ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4237/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>superuser.com</title>
		<link>http://theapplegeek.ru/archives/4236</link>
		<comments>http://theapplegeek.ru/archives/4236#comments</comments>
		<pubDate>Wed, 28 Jul 2010 14:03:18 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4236</guid>
		<description><![CDATA[Бывает интересно следить за перетеканием новостей и статей из англоязычной в русскоязычную техно-блогосферу. Наихудший сценарий &#8211; простой перевод &#8220;один-в-один&#8221; без ссылки на оригинал. Правильные сценарии &#8211; или указание ссылки без излишнего распространения о содержимом (мне нравится подход John Gruber&#8217;а), или перевод интересной статьи для тех, кто не знает иностранный язык, сопровождая комментариями (лучший блог этого [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ddd-thumb1.png" height="62" align="right" width="254" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Бывает интересно следить за перетеканием новостей и статей из англоязычной в русскоязычную техно-блогосферу. Наихудший сценарий &#8211; простой перевод &#8220;один-в-один&#8221; без ссылки на оригинал. Правильные сценарии &#8211; или указание ссылки без излишнего распространения о содержимом (мне нравится подход John Gruber&#8217;а), или перевод интересной статьи для тех, кто не знает иностранный язык, сопровождая комментариями (лучший блог этого направления ведёт <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://alexmak.net" >alexmak</a></noindex>), или попытка осмыслить и применить. Конечно же, правильные сценарии подразумевают указание первоисточника.</p>
<p><span id="more-4236"></span></p>
<p>Пару дней назад была интересная цепочка: <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://superuser.com/questions/52483/terminal-tips-and-tricks-for-mac-os-x" >SuperUser</a></noindex> &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://daringfireball.net/linked/2010/07/25/terminal-tips" >Gruber</a></noindex> &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://deepapple.com/news/37855.html" >DeepApple</a></noindex>. Это демонстрация того, как нужно перепечатывать информацию.</p>
<p>Кстати, как раз <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://deepapple.com/" >DeepApple</a></noindex> я считаю лучшим русскоязычным новостным ресурсом об Apple. Виден профессиональный подход, знание и любовь к предмету.</p>
<p>Завёл я эту тему, чтобы порекомендовать <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://superuser.com/" >Superuser.com</a></noindex> (Q&#038;A for computer enthusiasts and power users). Программисты используют такой же ресурс <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://stackoverflow.com/" >StackOverflow.com</a></noindex> (Q&#038;A for professional and enthusiast programmers).</p>
<p>А лучше всего начать использовать Superuser как раз с <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://superuser.com/questions/52483/terminal-tips-and-tricks-for-mac-os-x" >Terminal Tips and Tricks For Mac OS X</a></noindex> &#8211; я почерпнул из статьи несколько полезных приёмов. Или с &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://superuser.com/questions/1191/what-are-some-must-have-mac-os-x-programs" >What are some “must have” Mac OS X programs?</a></noindex>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4236/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Установка SSD Intel X25-M G2 в MacBook Pro Unibody</title>
		<link>http://theapplegeek.ru/archives/4208</link>
		<comments>http://theapplegeek.ru/archives/4208#comments</comments>
		<pubDate>Mon, 26 Jul 2010 13:38:53 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[ssd]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4208</guid>
		<description><![CDATA[Пару дней назад, не выдержав неторопливости штатного диска MacBook Pro (500 GB 5400 rpm), я осуществил давно желаемую операцию &#8211; приобрёл SSD-диск Intel X25-M G2. Выбор SSD &#8211; задача нетривиальная. Нельзя просто сказать: &#8220;Вот у меня есть $NNN, нужен диск на GGG GB, сюда попадают N дисков, производитель FFF мне нравится, его и беру&#8221;. Перед [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/07/00_ssd_in-thumb1.png" height="130" align="right" width="180" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Пару дней назад, не выдержав неторопливости штатного диска MacBook Pro (500 GB 5400 rpm), я осуществил давно желаемую операцию &#8211; приобрёл SSD-диск Intel <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.intel.com/design/flash/nand/mainstream/index.htm" >X25-M</a></noindex> G2.</p>
<p>Выбор SSD &#8211; задача нетривиальная. Нельзя просто сказать: &#8220;Вот у меня есть $NNN, нужен диск на GGG GB, сюда попадают N дисков, производитель FFF мне нравится, его и беру&#8221;. Перед покупкой нужно понять разницу в контроллерах, поддерживается ли <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.bit-tech.net/hardware/storage/2010/02/04/windows-7-ssd-performance-and-trim/1" >TRIM</a></noindex>, какая статистика отказов и т.п.</p>
<p>Перед покупкой стоит тщательно форумы, статьи и обзоры. Для получения информации, какой контроллер используется, нужно посмотреть &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.pcper.com/ssd" >SSD Decoder Ring &#8211; an SSD comparison guide</a></noindex>&#8220;. Я уже не говорю о том, что нужно понимать, зачем нужен SSD, знать его сильные и слабые стороны. Вы можете почитать статью &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://3.14.by/ru/read/ssd-crash-course" >SSD: Что о них нужно знать</a></noindex>&#8220;. Мне понравилось заключение:</p>
<p><span id="more-4208"></span></p>
<blockquote>
<p><b>Стоит ли ставить SSD?</b> Определенно да. Если есть лишние 150-300$, лучше купить SSD для системы и программ, вместо 4-х ядерного процессора. или процессора с чуть большей частотой. Эффект не заметить невозможно!</p>
</blockquote>
<p>Сначала я хотел взять Crucial&#8217;s RealSSD C300, но проблема, с которой стулкнулся <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.engadget.com/2010/03/26/firmware-corruption-probe-implicates-at-least-one-realssd-c300/" >Anandtech</a></noindex>, удержала меня от покупки.</p>
<p>После чтения разных статей и обзоров я наткнулся на FAQ Overclockers.ru &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://forums.overclockers.ru/viewtopic.php?f=24&#038;t=330650&#038;start=1340" >SSD-накопители: выбор, использование, обсуждение</a></noindex>&#8220;. Там было очень хорошо сказано:</p>
<blockquote>
<p>Убедительная просьба НЕ задавать вопросы типа: &#8220;Какой SSD купить под систему???&#8221;</p>
<p>Короткий ответ: Intel X25-M G2 или, если денег мало, Intel X25-V.</p>
</blockquote>
<p>К тому моменту я тоже пришёл к этому же мнению. Почитать о впечатлениях от этого диска вы можете в статье Егора Егорова &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://egorfine.livejournal.com/444515.html" >SSD год спустя: Intel!</a></noindex>&#8220;. В статье есть замеры скорости, сравнение с HDD и почившим SSD Patriot Warp, а также видео, показывающее время загрузки с HDD и SSD. Профессиональный же обзор есть на THG &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.thg.ru/storage/intel_x25-m_34_nm_02ha/index.html" >Intel X25-M с памятью 34 нм: новая прошивка творит чудеса</a></noindex>&#8220;.</p>
<p>Изначально мне хотелось поставить диск максимальной ёмкости, ведь штатный диск 500 GB был заполнен на 85%. Но я взвесил преимущества диска Intel на 160 GB и реально оценил, нужна ли мне большая часть данных постоянно, и принял верное решение. После очистки видео, просмотренных сериалов и подобного на ноутбуке у меня осталось всего 60 GB.</p>
<p>Кстати, нужно знать об одной важной особенности (не получится купить дорогой диск SSD и использовать его, не задумываясь) &#8211; ни в коем случае нельзя заполнять диск больше, чем на 70-80%. Чем меньше свободного места, тем активнее запись в оставшееся место и ресурс диска может израсходоваться за пару месяцев.</p>
<p>Одно уточнение. Intel X25-M G2 поставляется в двух вариантах &#8211; с креплением под 3.5&#8243; (SSDSA2MH160G2R5) и без него (SSDSA2MH160G2C1). Если есть возможность, то достаточно взять вторую модель, это сэкономит немного денег. Я взял первую, так как вариантов не было.</p>
<h3>Firmware</h3>
<p>Перед установкой диска нужно обновить Firmware. Для Intel его можно списать по адресу <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.intel.com/go/ssdfirmware/" >Intel® SATA Solid-State Drive Firmware Update Tool</a></noindex>. Firmware поставляется в виде iso-образа, его нужно залить на болванку командой:</p>
<pre>
$ hdiutil burn 110902HD88208850.iso
</pre>
<p>Диск является загрузочным, с него можно загрузиться как на Mac, так и на PC.</p>
<p>Обычно я устанавливаю новый диск в карман USB, полностью подготавливаю его, и только затем переставляю в ноутбук. Здесь же операция не получилась &#8211; программа обновления не смогла найти SSD-диск, подключённый по USB. Поэтому пришлось подключать SSD к PC SATA-кабелем, после чего программа распознала диск. Оказалось, что диск и так поставляется с последней версией Firmware:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_firmware-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_firmware-thumb.png" height="259" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Если бы под рукой не было бы PC, я бы вставил SSD в ноутбук и провёл обновление &#8211; это равноценно.</p>
<h3>Клонирование штатного диска</h3>
<p>Затем я перенёс максимальное количество данных, которые мне не нужны каждый день, на внешний диск. В поиске больших каталогов мне помогла программа <a href="http://theapplegeek.ru/archives/3437" >DaisyDisk</a>. Из 400 GB на диске осталось 60 GB. И это меня очень порадовало.</p>
<p><a href="http://theapplegeek.ru/archives/1664" >Методы клонирование штатного диска</a> я описывал ранее. На этот раз я использовал <a href="http://theapplegeek.ru/archives/4059" >SuperDuper!</a> (я копировал диск без загрузки с Install DVD, впрочем, почти все описанные методы не требуют этого). После клонирования диска убедился в работоспособности системы, загрузившись с USB (зажатый Alt при перезагрузке или выбор Startup Disk в System Preferences).</p>
<p>Всё, я имею полную копию загрузочного диска, можно переставлять диск.</p>
<h3>Замена диска</h3>
<p>Аккуратно ложу ноутбук на фетровую тряпочку (да, по гороскопу я Дева ;-)</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_install-thumb.png" height="281" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Переворачиваю</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_ssd_install-thumb.png" height="301" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Достаю свой любимый набор отвёрток</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/03_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/03_ssd_install-thumb.png" height="343" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Выкручиваю винтики, ложу их в том виде, как они находились в ноутбуке. Это облегчает сборку, так как винтики разных размеров:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/04_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/04_ssd_install-thumb.png" height="359" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Крышка снимается без усилий, диск &#8211; в левом нижнем углу</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/05_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/05_ssd_install-thumb.png" height="298" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Диск демпфирован специальными направляющими</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/06_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/06_ssd_install-thumb.png" height="355" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Снимаю выкручиваю болтики, снимаю верхний демпфер</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/07_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/07_ssd_install-thumb.png" height="271" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Вынимаю осторожно диск, он подключен одним шлейфом</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/08_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/08_ssd_install-thumb.png" height="373" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/09_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/09_ssd_install-thumb.png" height="300" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Отсоединяю кабель</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/10_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/10_ssd_install-thumb.png" height="321" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Откручиваю 4 болтика с диска отвёрткой Torx T6:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/11_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/11_ssd_install-thumb.png" height="330" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/12_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/12_ssd_install-thumb.png" height="361" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Все болтики и детали не скидываю в кучу, а аккуратно размещаю в порядке выкручивания</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/13_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/13_ssd_install-thumb.png" height="242" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Достаю SSD-диск (чёрную накладку снимать не нужно):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/14_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/14_ssd_install-thumb.png" height="353" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>По размерам они практически одинаковые, только SSD легче:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/15_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/15_ssd_install-thumb.png" height="273" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Вкручиваю болтика в диск:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/16_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/16_ssd_install-thumb.png" height="319" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Подключаю шлейф SATA:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/17_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/17_ssd_install-thumb.png" height="402" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Устанавливаю диск на место:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/18_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/18_ssd_install-thumb.png" height="320" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Фиксирую его:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/19_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/19_ssd_install-thumb.png" height="369" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Ставлю обратно крышку:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/20_ssd_install-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/20_ssd_install-thumb.png" height="289" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Включаю и начинаю восхищаться реальным приростом скорости.</p>
<h3>Тюнинг</h3>
<p>Самое главное, что нужно изменить в системе &#8211; это <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://blogs.nullvision.com/?p=275" >отключить запись atime</a></noindex> (access time) при обращении к файлам. Если этого не сделать, то ресурс диска израсходуется гораздо быстрее.</p>
<pre>
$ sudo vim /Library/LaunchDaemons/com.my.noatime.plist
<small>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
	&lt;dict&gt;
		&lt;key&gt;Label&lt;/key&gt;
		&lt;string&gt;com.my.noatime&lt;/string&gt;
		&lt;key&gt;ProgramArguments&lt;/key&gt;
		&lt;array&gt;
			&lt;string&gt;mount&lt;/string&gt;
			&lt;string&gt;-vuwo&lt;/string&gt;
			&lt;string&gt;noatime&lt;/string&gt;
			&lt;string&gt;/&lt;/string&gt;
		&lt;/array&gt;
		&lt;key&gt;RunAtLoad&lt;/key&gt;
		&lt;true/&gt;
	&lt;/dict&gt;
&lt;/plist&gt;</small>

$ sudo chown root:wheel /Library/LaunchDaemons/com.my.noatime.plist
</pre>
<p>И перезагрузиться.</p>
<p>Состояние до изменения:</p>
<pre>
$ mount | grep " / "
/dev/disk0s2 on / (hfs, local, journaled)
</pre>
<p>Состояние после перезагрузки:</p>
<pre>
$ mount | grep " / "
/dev/disk0s2 on / (hfs, local, journaled, <b>noatime</b>)
</pre>
<p>Есть ещё и другие рекомендации по тюнингу (например, отключение hibernate, вынесение некоторых каталогов в RAM-диск, etc). Я пока этого не делал, инструкции приводятся в статьях &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://blogs.nullvision.com/?p=275" >Mac OS X SSD tweaks</a></noindex>&#8221; (обсуждение на <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://news.ycombinator.com/item?id=1271298" >Hacker News</a></noindex>).</p>
<p>Об опыте обновления можно почитать в статье &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://damieng.com/blog/2010/04/09/macbook-pro-upgrade-to-crucial-256gb-ssd" >MacBook Pro 256GB SSD upgrade experience</a></noindex>&#8220;, здесь есть несколько интересных мыслей.</p>
<h3>Личный опыт</h3>
<p>Ощущения потрясающие. Всё стало работать очень быстро. Приложения стартуют почти мгновенно. Preview фотографий в iPhoto и иконки приложений в iTunes отрисовываются очень быстро. Наконец-то я могу сразу после запуска системы работать, а не ждать, пока загрузятся все программы.</p>
<p>Немного фактов о загрузке Mac OS X на MacBook Pro 2.8 GHz.</p>
<ul>
<li>Яблоко появлялось на 00:35, теперь &#8211; 00:15</li>
<li>Переключение в графический режим происходило на 01:05, теперь на 00:35</li>
<li>Программы заканчивали прыгать в доке в 02:20, теперь в 00:50</li>
<li>Раньше дисковая активность продолжалась ещё до 04:30 (и она толком не давала работать), теперь я могу работать уже с 00:50</li>
</ul>
<h3>Бенчмаркинг</h3>
<p>Результаты <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.speedtools.com/QuickBench.html" >QuickBench</a></noindex>.</p>
<p>Стандартный тест SSD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_bench-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_ssd_bench-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>HDD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/02/01_fv-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/02/01_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Большие файлы SSD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_ssd_bench-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_ssd_bench-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>HDD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/02/03_fv-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/02/03_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Расширенный тест SSD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/03_ssd_bench-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/03_ssd_bench-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>HDD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/02/05_fv-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/02/05_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>И результаты <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.xbench.com/" >XBench</a></noindex> для SSD:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/04_ssd_bench-full.png"  class="image-link" rel="lightbox[4208]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/04_ssd_bench-thumb.png" height="416" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<h3>Вывод</h3>
<p>Ноутбук просто носится. Я очень доволен. Посмотрю, насколько долго SSD проработает. Учитывая возможность внезапного отказа, я в первую очередь думаю о бекапах.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4208/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Уведомления о днях рождениях в iCal</title>
		<link>http://theapplegeek.ru/archives/4164</link>
		<comments>http://theapplegeek.ru/archives/4164#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:26:37 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Обзоры программ]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4164</guid>
		<description><![CDATA[Меня постоянно удивляла работа iCal с днями рождений. Они фиксируются в контактных данных, но кроме записи в календаре при включенной опции iCal &#8220;Show Birthdays calendar&#8221; пользы от них нет &#8211; я лично смотрю в календарь от силы пару раз в неделю. Никакие уведомления о приближении памятной даты не предусмотрены. В итоге приходится полагаться по-прежнему на [...]]]></description>
			<content:encoded><![CDATA[<p>Меня постоянно удивляла работа iCal с днями рождений. Они фиксируются в контактных данных, но кроме записи в календаре при включенной опции iCal &#8220;Show Birthdays calendar&#8221; пользы от них нет &#8211; я лично смотрю в календарь от силы пару раз в неделю. Никакие уведомления о приближении памятной даты не предусмотрены. В итоге приходится полагаться по-прежнему на память, чтобы не забыть дни рождения друзей. Т.е. вроде и есть информация, но она практически бесполезна.</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_bd-thumb.png" height="531" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>На этой неделе я в очередной раз пропустил день рождения подруги, хоть чётко помнил о нём всю предыдущую неделю.</p>
<p>&#8220;Пора что-то делать&#8221;, &#8211; сказал я себе. И приступил.</p>
<p><span id="more-4164"></span></p>
<p>Есть способ, использующий штатные возможности iCal, он описан в статье &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.macosxhints.com/article.php?story=20090923134257835" >Add alarms to all existing iCal birthday events </a></noindex>&#8220;. Используется скрипт на AppleScript, который в календаре Birthdays (он должен быть включён в iCal) добавляет алармы к дням рождений (я установил показывать аларм днём раньше нужной даты):</p>
<pre>
tell application "iCal"
	tell calendar "Birthdays"
		set all_events to every event
		repeat with this_event in all_events
			tell this_event
				delete every sound alarm
				delete every display alarm
				make new display alarm at end with properties {trigger interval:-((1 * days) / (1 * minutes))}
			end tell
		end repeat
	end tell
end tell
</pre>
<p>Есть одна проблема &#8211; скрипт нужно запускать самому после добавления дня рождения в контакты. Это можно было бы сделать через LaunchDaemons, StartupItems или cron, но мне внезапно стало лень это делать, и я воспользовался программой <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.devzero.it/yabi/" >Yabi</a></noindex>, которую рекомендовали в комментариях к используемой мною статье.</p>
<p><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.devzero.it/yabi/" >Yabi</a></noindex> устанавливаеися в виде Preference Pane, следит за обновлениями контактов и вносит данные в календарь. Всё, что заявлено, она делает &#8211; для пробы я добавил ДР через MobileMe, данные подхватились на ноутбуке и в течение нескольких минут появилось новое событие в календаре. Само собой для внесения данных компьютер должен работать, когда он выключен, события автоматически не внесутся.</p>
<p>Покажу скриншоты. Можно указать календарь, в который помещаются события:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_bd-thumb.png" height="391" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Можно настроить заголовки для сообщений, поддерживаются дни рождения и годовщины:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/03_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/03_bd-thumb.png" height="391" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/04_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/04_bd-thumb.png" height="234" width="261" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>По умолчанию создаётся три нотификации. Поддерживается отображение сообщения, отправка почты и запуск скриптов.</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/05_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/05_bd-thumb.png" height="391" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>При возникновении проблем или изменении календаря можно провести пересинхронизацию:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/06_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/06_bd-thumb.png" height="391" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Надеюсь, что теперь забытых дней рождений не будет :-)</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/07_bd-full.png"  class="image-link" rel="lightbox[4164]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/07_bd-thumb.png" height="390" width="340" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p><i>Немного рекламы.</i> Что-то не везёт мне на доходы от рекламы (вы заметили, что сейчас сайт чист), попробую разместить постовой (странное слово как на мой взгляд). Никогда с SEO особо не сталкивался, вот сайт киевской компании Идеал, которая этим занимается: <a href="http://ideal.kiev.ua" >ideal.kiev.ua</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4164/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Книги для начинающих программистов под iOS</title>
		<link>http://theapplegeek.ru/archives/4146</link>
		<comments>http://theapplegeek.ru/archives/4146#comments</comments>
		<pubDate>Mon, 19 Jul 2010 13:27:33 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[developer]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4146</guid>
		<description><![CDATA[Профессионально я перестал занимался программированием лет десять назад (писал системы на разных языках, но предпочитал C и C++, как под DOS, так и под Windows), перейдя в область сетевого/системного администрирования. Конечно же, я продолжал писать, но уже на скриптовых языках Shell, Perl, немного TCL и Python. Год назад во время общения с разработчиком Blogo мне [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_loc-thumb1.png" height="224" align="right" width="170" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Профессионально я перестал занимался программированием лет десять назад (писал системы на разных языках, но предпочитал C и C++, как под DOS, так и под Windows), перейдя в область сетевого/системного администрирования. Конечно же, я продолжал писать, но уже на скриптовых языках Shell, Perl, немного TCL и Python.</p>
<p>Год назад во время общения с разработчиком Blogo мне снова захотелось &#8220;вернуться в семью&#8221;, и я начал присматриваться к программированию под Mac OS X. Ничего тогда толком не написал, но немного в Objective-C разобрался. Язык мне очень понравился, даже несмотря на лёгкое презрение к нему хардкорных программистов.</p>
<p>Потом у меня появилась идея нескольких приложений под iPhone и тут программирование более плотно вошло в мою жизнь. По основному роду деятельности у меня достаточно серьёзная занятость, поэтому приходится урывать для программирования время вечерами. Но хватит самооправданий &#8211; расскажу о тех книгах, по которым я учился и с которыми продолжаю работать (спасибо Артёму, который глядя на скриншоты программ чтения pdf под iPad задал мне вопрос о том, какие книги по программированию я бы мог порекомендовать).</p>
<p><span id="more-4146"></span></p>
<p>Итак, вот мой список. Сразу скажу &#8211; все книги я или купил в электронном виде, или получил доступ через <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/" >SafariBooksOnline</a></noindex>.</p>
<p>Начальные знания по Objective-C я получил из двух книг:</p>
<ul>
<li>Mark Dalrymple, Scott Knaster. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://apress.com/book/view/9781430218159" >Learn Objective–C on the Mac</a></noindex></li>
<li>Stephen G. Kochan. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/9780321605559" >Programming in Objective-C 2.0</a></noindex> (2nd Edition). Скоро будет <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.amazon.com/Programming-Objective-C-2-0-Developers-Library/dp/0321711394/ref=dp_ob_title_bk" >третья редакция</a></noindex> книги.</li>
</ul>
<p>По iOS мне очень помогли такие книги:</p>
<ul>
<li>Jeff LaMarche, David Mark. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://apress.com/book/view/9781430224594" >Beginning iPhone 3 Development: Exploring the iPhone SDK</a></noindex>.</li>
<li>Jeff LaMarche, David Mark. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://apress.com/book/view/9781430225058" >More iPhone 3 Development: Tackling iPhone SDK 3</a></noindex>. Если вы купите первую книгу, то на эту даётся скидка 50%.</li>
<li>Erica Sadun. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/9780321670168" >The iPhone Developer&#8217;s Cookbook 2nd Edition</a></noindex>. Книга на мой взгляд слишком много тянет с iPhone SDK 2.0, но некоторые рецепты можно посмотреть.</li>
<li>Toby Boudreaux. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/9780596805760" >Programming the iPhone User Experience</a></noindex>. Достойная книга, полистал и выборочно почитал, рекомендую.</li>
<li>Maher Ali. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/9780470683989" >iPhone SDK 3 Programming: Advanced Mobile Development for Apple iPhone and iPod touch</a></noindex>. Прочитал главу по Map Kit, книга понравилась.</li>
<li>Gary Bennett, Wolfgang Ante, Benjamin Jackson, Neil Mix, Steven Peterson, Matthew Rosenfeld, Michael Ash. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://apress.com/book/view/9781430223573" >iPhone Cool Projects</a></noindex>. Интересно почитать истории ведущих разработчиков с примерами кода.</li>
<li>Ben Britten Smith, Danton Chin, Arne de Vries, Claus Hoefele, Ben Kazez, Saul Mora, Leon Palm, Scott Penberthy, Charles Smith, David Smith, Joost van de Wijgerd. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://apress.com/book/view/9781430229223" >More iPhone Cool Projects</a></noindex>. Эту книгу ещё не смотрел.</li>
<li>James Bucanek. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.amazon.com/Professional-Xcode-Wrox-Programmer/dp/0470525223" >Professional Xcode 3</a></noindex>. Её я листал в виде образца под Amazon Kindle, стоит почитать для понимания XCode.</li>
</ul>
<p>Книги по системе контроля версий (я использую Git):</p>
<ul>
<li>Jon Loeliger. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://my.safaribooksonline.com/9780596158187" >Version Control with Git</a></noindex></li>
<li>Scott Chacon. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://progit.org/" >Pro Git</a></noindex>. Книга бесплатная.</li>
</ul>
<p>Буду благодарен за рекомендации книг по Objective-C, XCode, iOS и Mac OS X, которые используете вы.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4146/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Несовместимость L2TP VPN-сервера и Back To My Mac на одной системе</title>
		<link>http://theapplegeek.ru/archives/4139</link>
		<comments>http://theapplegeek.ru/archives/4139#comments</comments>
		<pubDate>Wed, 07 Jul 2010 11:42:37 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4139</guid>
		<description><![CDATA[Вчера я упомянул, что на VPN-сервере (Mac OS X) нельзя настроить одновременно L2TP VPN Server и Back To My Mac. Подтвержу это скриншотами. Back To My Mac выключен: Соединение устанавливается: Но если Back To My Mac включен: То соединение не устанавливается: Это единственное изменение, которое я проводил. В документации Apple сказано: If you wish to [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера я <a href="http://theapplegeek.ru/archives/4130" >упомянул</a>, что на VPN-сервере (Mac OS X) нельзя настроить одновременно L2TP VPN Server и Back To My Mac. Подтвержу это скриншотами.</p>
<p>Back To My Mac выключен:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_l2tpp-full.png"  class="image-link" rel="lightbox[4139]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_l2tpp-thumb.png" height="170" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p><span id="more-4139"></span></p>
<p>Соединение устанавливается:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_l2tpp-full.png"  class="image-link" rel="lightbox[4139]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_l2tpp-thumb.png" height="480" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Но если Back To My Mac включен:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/03_l2tpp-full.png"  class="image-link" rel="lightbox[4139]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/03_l2tpp-thumb.png" height="176" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>То соединение не устанавливается:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/04_l2tpp-full.png"  class="image-link" rel="lightbox[4139]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/04_l2tpp-thumb.png" height="480" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Это единственное изменение, которое я проводил.</p>
<p>В <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://support.apple.com/kb/HT3944" >документации</a></noindex> Apple сказано:</p>
<blockquote>
<p>If you wish to enable NAT port forwarding to L2TP VPN servers at private addresses on your AirPort Extreme or Time Capsule network, first ensure that MobileMe is disabled in AirPort Utility. If you configure NAT port forwarding to L2TP VPN servers at private addresses with MobileMe enabled, the setting for port forwarding to the servers will be ignored.&#8221;</p>
</blockquote>
<p>Если вам нужен и Back to My Mac, и VPN-сервер, то используйте PPTP VPN. Хоть он и менее безопасный, но он работает в такой конфигурации.</p>
<p>Немного деталей. Вот процесс установки соединения без Back To My Mac:</p>
<pre>
<small>45.599012 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
45.601468 192.168.98.2 -> 109.162.11.133 ISAKMP Identity Protection (Main Mode)
46.058368 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
46.069876 192.168.98.2 -> 109.162.11.133 ISAKMP Identity Protection (Main Mode)
46.438942 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
46.439629 192.168.98.2 -> 109.162.11.133 ISAKMP Identity Protection (Main Mode)
47.738940 109.162.11.133 -> 192.168.98.2 ISAKMP Quick Mode
47.741256 192.168.98.2 -> 109.162.11.133 ISAKMP Quick Mode
47.938956 109.162.11.133 -> 192.168.98.2 ISAKMP Quick Mode
48.177831 109.162.11.133 -> 192.168.98.2 ESP ESP (SPI=0x0c380875)
48.200824 192.168.98.2 -> 109.162.11.133 ESP ESP (SPI=0x0d034052)
...
50.379150 192.168.98.2 -> 109.162.11.133 ESP ESP (SPI=0x0d034052)
50.417807 109.162.11.133 -> 192.168.98.2 ESP ESP (SPI=0x0c380875)
52.650222 192.168.98.2 -> 109.162.11.133 ISAKMP Informational
53.650658 192.168.98.2 -> 109.162.11.133 ISAKMP Informational</small>
</pre>
<p>А вот &#8211; с ним:</p>
<pre>
<small> 5.492165 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
 8.492130 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
11.475359 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)
14.532159 109.162.11.133 -> 192.168.98.2 ISAKMP Identity Protection (Main Mode)</small>
</pre>
<p>При включении Back To My Mac производится маппинг портов 5353 и 4500 в запросах NAT-PMP Map UDP Request, поэтому L2TP-сервер не может обслуживать запросы, идущие на порт 4500 (IKE NAT Traversal), и в итоге соединение не устанавливается.</p>
<p>Напоследок приведу трейсы при включении и отключении Back To My Mac.</p>
<p>Включаю Back To My Mac</p>
<pre>
<small> 28.815152 192.168.98.2 -> 109.162.11.133 UDPENCAP NAT-keepalive
 33.488924 192.168.98.2 -> 192.168.98.1 NAT-PMP External Address Request
	NAT Port Mapping Protocol, External Address Request
	    Version: 0
	    Opcode: External Address Request (0)

 33.489063 192.168.98.2 -> 192.168.98.1 SSDP M-SEARCH * HTTP/1.1
	 M-SEARCH * HTTP/1.1\r\n
	     [Expert Info (Chat/Sequence): M-SEARCH * HTTP/1.1\r\n]
	         [Message: M-SEARCH * HTTP/1.1\r\n]
	         [Severity level: Chat]
	         [Group: Sequence]
	     Request Method: M-SEARCH
	     Request URI: *
	     Request Version: HTTP/1.1
	 Host:239.255.255.250:1900\r\n
	 ST:urn:schemas-upnp-org:service:WANIPConnection:1\r\n
	 Man:"ssdp:discover"\r\n
	 MX:3\r\n
	 \r\n

 33.489094 192.168.98.2 -> 192.168.98.1 NAT-PMP Map UDP Request
	NAT Port Mapping Protocol, Map UDP Request
	    Version: 0
	    Opcode: Map UDP Request (1)
	    Reserved: 0
	    Internal Port: 5353
	    Requested External Port: 5353
	    Requested Port Mapping Lifetime: 7200

 33.489109 192.168.98.2 -> 192.168.98.1 SSDP M-SEARCH * HTTP/1.1
	 M-SEARCH * HTTP/1.1\r\n
	     [Expert Info (Chat/Sequence): M-SEARCH * HTTP/1.1\r\n]
	         [Message: M-SEARCH * HTTP/1.1\r\n]
	         [Severity level: Chat]
	         [Group: Sequence]
	     Request Method: M-SEARCH
	     Request URI: *
	     Request Version: HTTP/1.1
	 Host:239.255.255.250:1900\r\n
	 ST:urn:schemas-upnp-org:service:WANPPPConnection:1\r\n
	 Man:"ssdp:discover"\r\n
	 MX:3\r\n
	 \r\n

 33.489134 192.168.98.2 -> 192.168.98.1 NAT-PMP Map UDP Request
	NAT Port Mapping Protocol, Map UDP Request
	    Version: 0
	    Opcode: Map UDP Request (1)
	    Reserved: 0
	    Internal Port: 4500
	    Requested External Port: 4500
	    Requested Port Mapping Lifetime: 7200

 33.489148 192.168.98.2 -> 192.168.98.1 SSDP M-SEARCH * HTTP/1.1
	 M-SEARCH * HTTP/1.1\r\n
	     [Expert Info (Chat/Sequence): M-SEARCH * HTTP/1.1\r\n]
	         [Message: M-SEARCH * HTTP/1.1\r\n]
	         [Severity level: Chat]
	         [Group: Sequence]
	     Request Method: M-SEARCH
	     Request URI: *
	     Request Version: HTTP/1.1
	 Host:239.255.255.250:1900\r\n
	 ST:urn:schemas-upnp-org:service:WANIPConnection:1\r\n
	 Man:"ssdp:discover"\r\n
	 MX:3\r\n
	 \r\n

 33.493555 192.168.98.1 -> 192.168.98.2 ICMP Destination unreachable (Port unreachable)
 33.493559 192.168.98.1 -> 192.168.98.2 ICMP Destination unreachable (Port unreachable)
 33.493723 192.168.98.1 -> 192.168.98.2 ICMP Destination unreachable (Port unreachable)
 	Destination port: ssdp (1900)

 33.493962 192.168.98.1 -> 192.168.98.2 NAT-PMP External Address Response
    Version: 0
    Opcode: External Address Response (128)
    Result Code: Success (0)
    Seconds Since Start of Epoch: 13283
    External IP Address: 111.222.111.222 (111.222.111.222)

 33.502106 192.168.98.1 -> 192.168.98.2 NAT-PMP Map UDP Response
	 Version: 0
	 Opcode: Map UDP Response (129)
	 Result Code: Success (0)
	 Seconds Since Start of Epoch: 13283
	 Internal Port: 5353
	 Mapped External Port: 32773
	 Port Mapping Lifetime: 7200

 33.510384 192.168.98.1 -> 192.168.98.2 NAT-PMP Map UDP Response
	 Version: 0
	 Opcode: Map UDP Response (129)
	 Result Code: Success (0)
	 Seconds Since Start of Epoch: 13283
	 Internal Port: 4500
	 Mapped External Port: 32774
	 Port Mapping Lifetime: 7200</small>
</pre>
<p>Отключаю Back To My Mac</p>
<pre>
<small>  3.936568 192.168.98.2 -> 192.168.98.1 NAT-PMP Map UDP Request
	  Version: 0
	  Opcode: Map UDP Request (1)
	  Reserved: 0
	  Internal Port: 4500
	  Requested External Port: 32774
	  Requested Port Mapping Lifetime: 0

  3.936664 192.168.98.2 -> 192.168.98.1 SSDP M-SEARCH * HTTP/1.1
	  M-SEARCH * HTTP/1.1\r\n
	      [Expert Info (Chat/Sequence): M-SEARCH * HTTP/1.1\r\n]
	          [Message: M-SEARCH * HTTP/1.1\r\n]
	          [Severity level: Chat]
	          [Group: Sequence]
	      Request Method: M-SEARCH
	      Request URI: *
	      Request Version: HTTP/1.1
	  Host:239.255.255.250:1900\r\n
	  ST:urn:schemas-upnp-org:service:WANPPPConnection:1\r\n
	  Man:"ssdp:discover"\r\n
	  MX:3\r\n
	  \r\n

  3.938951 192.168.98.1 -> 192.168.98.2 ICMP Destination unreachable (Port unreachable)
	Destination port: ssdp (1900)
  3.943055 192.168.98.1 -> 192.168.98.2 NAT-PMP Map UDP Response
	  Version: 0
	  Opcode: Map UDP Response (129)
	  Result Code: Success (0)
	  Seconds Since Start of Epoch: 13310
	  Internal Port: 4500
	  Mapped External Port: 32774
	  Port Mapping Lifetime: 0

  6.038227 192.168.98.2 -> 192.168.98.1 NAT-PMP Map UDP Request
	  Version: 0
	  Opcode: Map UDP Request (1)
	  Reserved: 0
	  Internal Port: 5353
	  Requested External Port: 32773
	  Requested Port Mapping Lifetime: 0

  6.038303 192.168.98.2 -> 192.168.98.1 SSDP M-SEARCH * HTTP/1.1
	  M-SEARCH * HTTP/1.1\r\n
	      [Expert Info (Chat/Sequence): M-SEARCH * HTTP/1.1\r\n]
	          [Message: M-SEARCH * HTTP/1.1\r\n]
	          [Severity level: Chat]
	          [Group: Sequence]
	      Request Method: M-SEARCH
	      Request URI: *
	      Request Version: HTTP/1.1
	  Host:239.255.255.250:1900\r\n
	  ST:urn:schemas-upnp-org:service:WANIPConnection:1\r\n
	  Man:"ssdp:discover"\r\n
	  MX:3\r\n
	  \r\n

  6.040599 192.168.98.1 -> 192.168.98.2 ICMP Destination unreachable (Port unreachable)
  	Destination port: ssdp (1900)

  6.043605 192.168.98.1 -> 192.168.98.2 NAT-PMP Map UDP Response
	  Version: 0
	  Opcode: Map UDP Response (129)
	  Result Code: Success (0)
	  Seconds Since Start of Epoch: 13310
	  Internal Port: 5353
	  Mapped External Port: 32773
	  Port Mapping Lifetime: 0</small>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4139/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>VPN-сервер в локальной сети за AirPort Express. Настройка Port Mapping</title>
		<link>http://theapplegeek.ru/archives/4130</link>
		<comments>http://theapplegeek.ru/archives/4130#comments</comments>
		<pubDate>Tue, 06 Jul 2010 13:09:18 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4130</guid>
		<description><![CDATA[Администраторам часто приходится работать с серверами удалённо, как по ssh, так и по VNC/RDP/Screen Sharing/Remote Management. Можно открывать прямой доступ к нужным сервисам, полагаясь на пароли. Можно улучшать безопасность, разрешая доступ на брендмауерах только с определённых доверенных хостов и категорически не допускать внесения в этот список сетей по принципу &#8220;Ага, Yota. Ага, у них блок [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_vpn-thumb1.png" height="200" align="right" width="200" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Администраторам часто приходится работать с серверами удалённо, как по ssh, так и по VNC/RDP/Screen Sharing/Remote Management.<br />
Можно открывать прямой доступ к нужным сервисам, полагаясь на пароли. Можно улучшать безопасность, разрешая доступ на брендмауерах только с определённых доверенных хостов и категорически не допускать внесения в этот список сетей по принципу &#8220;Ага, Yota. Ага, у них блок /18. Ага, администратор пользуется Yota. Ага, разрешим доступ со всего блока /18&#8243; (к сожалению, в этом блоке есть сотни зараженных хостов, которые сканируют всё окружающее на предмет дыр, а от дыр не застрахован никто).</p>
<p>Но можно построить составную политику безопасности &#8211; для доступа в сеть использовать VPN-шлюз, а уже через VPN можно получить доступ к нужным ресурсам. Это и удобно &#8211; доступ можно разрешить из публичного Интернет, и достаточно безопасно при условии нормальной политики паролей.</p>
<p><span id="more-4130"></span></p>
<p>В своей лаборатории я использую Mac OS X Server, на котором решил проверить вопросы, возникающие при реализации такой схемы. В Mac OS X Server VPN-сервер встроен и управляется через GUI. Вы также можете вручную настроить VPN-сервер на Mac OS X по статье Павла Цибулина &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.papasha.kiev.ua/2010/01/snow-leopard-as-vpn-server.html" >Snow Leopard as VPN server</a></noindex>&#8220;.</p>
<p>Конфигурация сети такова:</p>
<ul>
<li>доступ в Интернет из локальной сети обеспечивается WiFi-маршрутизатором через NAT</li>
<li>в локальной сети стоит VPN-сервер на Mac OS X Server 10.6</li>
<li>нужно получить доступ из публичного Internet в локальную сеть через VPN-сервер</li>
</ul>
<p>На первый взгляд всё просто &#8211; настраиваешь проброс нужных портов с внешнего интерфейса WiFi-маршрутизаторе на VPN-сервер и пользуешься. Но реальная жизнь всегда сложнее.</p>
<p>У меня стоит <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.linksysbycisco.com/EU/en/products/WRT610N/" >Linksys WRT610n v1</a></noindex> (с последней официальной прошивкой). В нём можно описать один хост из локальной сети как хост из DMZ, и все запросы на внешний адрес WiFi-маршрутизатора будут передаваться автоматически на этот хост. Сделал &#8211; глухо. Ни PPTP, ни L2TP не заработали, в логах были попытки, но дальше LCP ничего не шло, и соединение не устанавливалось. При попытке соединения из локальной сети VPN поднимался без вопросов. Вывод &#8211; причина в маршрутизаторе.</p>
<p>Решил зайти с другой стороны и явно разрешить используемые порты &#8211; аналогичная картина.</p>
<p>И тут я вспомнил, что давно хотел купить для лаборатории AirPort Express (предварительно найдя информацию, что интересующая меня схема возможна). Сказано &#8211; сделано. Зашёл в <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://store.iland.ua/index.php?main_page=product_info&#038;cPath=3_27&#038;products_id=94" >iLand</a></noindex> (Киев), пообщался с приятными людьми, повосхищался iPhone4, и вышел с AirPort Express.</p>
<p>Настроил точку, открыл нужные порты согласно документа &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://support.apple.com/kb/ts1629" >&#8220;Well known&#8221; TCP and UDP ports used by Apple software products</a></noindex>&#8220;:</p>
<table width="100%" cellspacing="0" border="0" id="kbtable">
<tbody>
<tr valign="top" id="header">
<td width="60"><b>Port</b></td>
<td width="75"><b>TCP or UDP</b></td>
<td width="160"><b>Service or Protocol Name</b></td>
<td width="60"><b>RFC</b></td>
<td width="325"><b>Used by / Additional information</b></td>
</tr>
<tr valign="top">
<td><strong>500</strong></td>
<td>UDP</td>
<td>ISAKMP/IKE</td>
<td>-</td>
<td>Mac OS X Server VPN service, Back to My Mac (MobileMe, Mac OS X v10.5 or later).</td>
</tr>
<tr valign="top" id="even">
<td><strong>1701</strong></td>
<td>UDP</td>
<td>L2TP</td>
<td>-</td>
<td>Mac OS X Server VPN service</td>
</tr>
<tr valign="top">
<td><strong>1723</strong></td>
<td>TCP</td>
<td>PPTP</td>
<td>-</td>
<td>Mac OS X Server VPN service</td>
</tr>
<tr valign="top" id="even">
<td><strong>4500</strong></td>
<td>UDP</td>
<td>IKE NAT Traversal</td>
<td>-</td>
<td>Mac OS X Server VPN service, Back to My Mac (MobileMe, Mac OS X v10.5 or later).<br />
<strong>Note</strong>: VPN and MobileMe are mutually exclusive when configured through an Apple access point (such as an AirPort Base Station); MobileMe will take precedence.
            </td>
</tr>
</tbody>
</table>
<p>Конфигурация AirPort выглядит так:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/02_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/02_vpn-thumb.png" height="392" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Детали по портам:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/03_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/03_vpn-thumb.png" height="362" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/04_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/04_vpn-thumb.png" height="362" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/05_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/05_vpn-thumb.png" height="362" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/06_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/06_vpn-thumb.png" height="362" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Само собой, для VPN-сервера настроена выдача статического адреса по DHCP:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/07_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/07_vpn-thumb.png" height="423" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>VPN-сервер у меня уже настроен (и L2TP, и PPTP). Были, конечно, некоторые проблемы &#8211; не всё так быстро происходит, как пишется. Они были связаны именно с L2TP &#8211; PPTP заработал сразу.</p>
<p>Но после вчитывания в фразу &#8220;VPN and MobileMe are mutually exclusive when configured through an Apple access point (such as an AirPort Base Station); MobileMe will take precedence&#8221; и многократного запуска <a href="http://theapplegeek.ru/archives/431" >tshark</a> я отключил на сервере &#8220;Back to My Mac&#8221;. После чего всё заработало (и PPTP, и L2TP):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/08_vpn-full.png"  class="image-link" rel="lightbox[4130]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/08_vpn-thumb.png" height="480" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Особенность &#8211; при настройке PPTP нужно указать &#8220;Encryption Level = Auto&#8221;.</p>
<p>Есть и другие вопросы (динамическая выдача маршрутов на нужные сети, маршрутизация, фильтрация), но об этом напишу в другой раз.</p>
<p>P.S. Маршрутизатор Linksys WRT610n v1 остался не у дел. Попробовал поставить прошивку dd-wrt, но радиочасть не захотела включаться. Откатился обратно. Да и что-то у меня нет желания возиться со странными неофициальными прошивками &#8211; Apple меня развратил красотой решений. А вот AirPort Express я очень доволен. Сейчас воткнул в него наушники и транслирую музыку с ноутбука. Благодать.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4130/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Получение информации по приложениям iPhone в iTunes из shell</title>
		<link>http://theapplegeek.ru/archives/4112</link>
		<comments>http://theapplegeek.ru/archives/4112#comments</comments>
		<pubDate>Mon, 05 Jul 2010 10:32:21 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[iTunes]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4112</guid>
		<description><![CDATA[Как вы могли прочитать, у меня есть две учётные записи iTunes. Первая &#8211; традиционная в iTunes USA, которой я пользуюсь давно, покупая коды iTunes Gift Card. Вторая &#8211; новая в iTunes Russia, приложения я покупаю по привязанной карте Visa Classic. Само собой с iTunes Russia всё просто &#8211; купил программу, небольшие деньги снялись с карты [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/07/00_apps-thumb1.png" height="200" align="right" width="200" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Как вы <a href="http://theapplegeek.ru/archives/3673" >могли прочитать</a>, у меня есть две учётные записи iTunes. Первая &#8211; традиционная в iTunes USA, которой я пользуюсь давно, покупая коды <a href="http://theapplegeek.ru/archives/3660" >iTunes Gift Card</a>. Вторая &#8211; новая в iTunes Russia, приложения я покупаю по привязанной карте Visa Classic.</p>
<p>Само собой с iTunes Russia всё просто &#8211; купил программу, небольшие деньги снялись с карты и всё. В iTunes USA нужны коды, я периодически  их покупаю на $50 &#8211; $100, что пробивает дыру в бюджете. Но в USA Store есть и музыка, и фильмы, и все приложения. А вот в Russia Store часть программ попросту отсутствует, часть появляется с задержкой, а про музыку я вообще молчу &#8211; её нет.</p>
<p>Приходится пользоваться параллельно двумя учётными записями. Это вызывает неудобства с обновлениями &#8211; нужно явно перелогиниваться в нужный App Store. Поэтому я стараюсь удалить бесплатные программы из USA Store и установить их из Russia Store.</p>
<p><span id="more-4112"></span></p>
<p>Когда программ от нескольких единиц до нескольких десятков, то это не вызывает сложностей. Но у меня их 252, причём явно ненужные мне программы я удаляю.</p>
<p>Вручную нажать 252 раз Cmd+I для просмотра, к какой учётной записи какая программа привязана, а потом ещё перейти в App Store, чтобы убедиться, какая из них бесплатная, это уже большой кусок работы.</p>
<p>Есть простая программа <a href="http://theapplegeek.ru/archives/2748" >App Store Expense Monitor</a>, показывающая затраты на все приложения, но мне она не подходит.</p>
<p>Поэтому я решил слегка автоматизировать процесс, составив список бесплатных программ, привязанных к старой учётной записи. Бесплатность придётся в любом случае перепроверять в iTunes App Store, но сделать это пару десятков раз проще, чем пару сотен раз.</p>
<p>Идея проста &#8211; в архиве приложения app.ipa (это zip-архив) в файле iTunesMetadata.plist находится вся нужная информация, включая имя учётной записи, дату покупки, стоимость и ещё много параметров. Приложения обычно находятся в каталоге &#8220;/Users/$USER/Music/iTunes/iTunes Music/Mobile Applications&#8221; (я не претендую на общий случай, в моём случае и 98% других случаях это так).</p>
<p>Например, вот так можно посмотреть информацию по программе Things (plist в программах может быть и в бинарном виде, поэтому нужно провести конвертацию в формат xml1 программой plutil):</p>
<pre>
$ unzip -p "/Users/$USER/Music/iTunes/iTunes Music/Mobile Applications/Things.ipa" \
	iTunesMetadata.plist | \
	plutil -convert xml1 - -o -
</pre>
<p>А дальше &#8211; наворачивание кода вокруг этой одной команды, чтобы привести вывод к виду, который мне нужен. Не претендую на оптимальность и универсальность кода, но он в моём случае работает.</p>
<p><b>Предупреждение.</b> Ошибка в shell можно привести к разным результатам. Поэтому перез запуском чужих программ, скриптов и прочего убедитесь, что вы понимаете их назначение и имейте наготове резервную копию всех данных (<a href="http://theapplegeek.ru/archives/4059" >клон</a>, Time Machine, etc) &#8211; это никогда не будет лишним.</p>
<p>Вот моя программа, она также доступна в <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dl.dropbox.com/u/243759/Site/20100705/apps.sh.txt" >Dropbox</a></noindex>:</p>
<pre>
#!/bin/sh
APPDIR="/Users/$USER/Music/iTunes/iTunes Music/Mobile Applications"
find "${APPDIR}" -name \*.ipa |
while read line
do
    unzip -p "${line}" iTunesMetadata.plist | plutil -convert xml1 - -o - | \
    grep -A 1 -i    -e "<key>AppleID</key>" -e "<key>price</key>" \
                    -e "<key>priceDisplay</key>" -e "<key>itemName</key>" \
                    -e "<key>purchaseDate</key>" | \
    grep -e string -e integer -e date | \
    sed -e 's/^.*<[a-z]*>//' -e 's/<\/[a-z]*>//' | \
    sed 's/T[0-9]*:[0-9]*:[0-9]*Z//' | \
    tr '\n' '\t' | \
    awk -F '\t' '{
        if ($5 ~ /20[0-9][0-9]-/) {
            printf "%10s\t%-20s\t%10s\t%10s\t%-s\n", $5, $1, $3, $4, $2;
        } else {
            if ($2 ~ /20[0-9][0-9]-/) {
                printf "%10s\t%-20s\t%10s\t%10s\t%-s\n", $2, $1, $4, $5, $3;
            } else {
                printf "Unknown format:\t%s\n", $0;
            }
        }
    }'
done
</pre>
<p>Результат вот (третья колонка &#8211; цена в центах * 10):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/07/01_apps-full.png"  class="image-link" rel="lightbox[4112]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/07/01_apps-thumb.png" height="263" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>И несколько полезных команд. Запись результатов в файл для дальнейшего анализа:</p>
<pre>
$ ./bin/apps.sh | tee ~/Documents/apps.txt
</pre>
<p>Перечень всех бесплатных программ, отсортированный по дате приобретения (&#8220;grep -i free&#8221; не подходит, в названии платных программ может встречаться &#8220;free&#8221;, например, программа &#8220;WifiTrak (Find FREE WiFi)&#8221; стоит $0.99):</p>
<pre>
$ cat ~/Documents/apps.txt | awk -F '\t' '$4 ~ /F[rR][eE][eE]/ {print $0}' | sort -n
</pre>
<p>Вариант:</p>
<pre>
$ cat ~/Documents/apps.txt | awk -F '\t' '$3 == 0 {print $0}' | sort -n
</pre>
<p>Общее количество программ (я недосчитался 14 программ из 252, но разбираться лень, мне этого достаточно):</p>
<pre>
$ cat ~/Documents/apps.txt | wc -l
</pre>
<p>Суммарная стоимость всех программ</p>
<pre>
$ cat ~/Documents/apps.txt | awk -F '\t' 'BEGIN {sum=0} {sum += $3;} END {printf "Total: $%4.2f\n", sum/1000}'
</pre>
<p>Распределение количества установленных программ по месяцам (update = purchase, не удивляйтесь):</p>
<pre>
$ cat ~/Documents/apps.txt | awk -F '\t' '{print $1}' | \
	sed 's/-[0-9]*$//' | sort -n | uniq -c
<small>   2 2009-03
   3 2009-04
   5 2009-06
   7 2009-07
   6 2009-08
   3 2009-09
   2 2009-10
  10 2009-11
  10 2009-12
   3 2010-01
   3 2010-02
  36 2010-04
  22 2010-05
  73 2010-06
  53 2010-07</small>
</pre>
<p>И т.д., и т.п. Shell &#8211; вещь мощная и всегда под рукой. Желающие могут посмотреть примеры &#8220;one-liner&#8217;ов&#8221; для <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://sed.sourceforge.net/sed1line.txt" >sed</a></noindex> и <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://kaneda.bohater.net/faq/awk1line.txt" >awk</a></noindex>. Более правильно было бы анализировать все данные, подготовив их в Perl/Python/ObjectiveC, но shell более доступен.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4112/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Популярные статьи за июнь 2010</title>
		<link>http://theapplegeek.ru/archives/4105</link>
		<comments>http://theapplegeek.ru/archives/4105#comments</comments>
		<pubDate>Fri, 02 Jul 2010 11:46:34 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[top10]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4105</guid>
		<description><![CDATA[Блогу 11 месяцев. В следующем месяце будет ровно год. Подарков, раздачи лицензий и прочего не будет, за дешёвой популярностью я не гонюсь. Да и круглая дата больше является показателем моего упорства, а не волшебным моментом, когда стадо единорогов прилетит и осыпет всех радужным хламом :-) Мне очень нравится давняя реклама пива, говорящая о том, что [...]]]></description>
			<content:encoded><![CDATA[<p>Блогу 11 месяцев. В следующем месяце будет ровно год. Подарков, раздачи лицензий и прочего не будет, за дешёвой популярностью я не гонюсь. Да и круглая дата больше является показателем моего упорства, а не волшебным моментом, когда стадо единорогов прилетит и осыпет всех радужным хламом :-)</p>
<p>Мне очень нравится давняя реклама пива, говорящая о том, что радоваться жизни можно тихо. Точно так же можно тихо, но настойчиво работать, ставя своей целью систематизировать свои знания и поделиться ими с вами, уважаемые читатели.</p>
<p><span id="more-4105"></span></p>
<p>Мой эксперимент с размещением контекстной рекламы показал её слабую эффективность для моего конкретного случая. Для повышения дохода можно было бы сделать из сайта новогоднюю ёлочку, мигающую флеш-баннерами, увешанную горизонтальными, вертикальными и квадратными блоками в неимоверном количестве. Но от таких сайтов у меня устойчивое отвращение, и это не мой путь. Но один блок рекламы я всё-таки оставил для статистики.</p>
<p><b>Update 05.07.2010.</b> Я вас обманул &#8211; поставил два блока рекламы.</p>
<p>В июле я устраиваю очередной недельный отпуск. На этот раз на море. Если удастся, то возьму с собой только iPad и посмотрю, насколько его удобно использовать для работы.</p>
<p>Все заявления сделаны, теперь покажу десяток популярных статей за месяц:</p>
<ol>
<li><a href="http://theapplegeek.ru/archives/3705" >Процесс покупки iPad с доставкой по почте через DHL</a></li>
<li><a href="http://theapplegeek.ru/archives/3660" >Покупка кодов iTunes Gift Card</a></li>
<li><a href="http://theapplegeek.ru/archives/3728" >Добавление книг в формате epub в библиотеку iTunes для iBooks под iPad</a></li>
<li><a href="http://theapplegeek.ru/archives/3953" >Немного деталей о сетевой активности iPhone</a></li>
<li><a href="http://theapplegeek.ru/archives/3166" >Установка Mac OS X с внешнего USB-диска</a></li>
<li><a href="http://theapplegeek.ru/archives/3800" >Конвертация видео с несколькими звуковыми дорожками и субтитрами для iPad</a></li>
<li><a href="http://theapplegeek.ru/archives/966" >Блокировка Flash в Safari (ClickToFlash)</a></li>
<li><a href="http://theapplegeek.ru/archives/3950" >Сколько трафика потребляется в месяц на моём iPhone</a></li>
<li><a href="http://theapplegeek.ru/archives/1428" >Схемы разделов в Mac OS X. GUID partition table. Часть 1 (MBR)</a></li>
<li><a href="http://theapplegeek.ru/archives/431" >Готовимся анализировать сетевой трафик при помощи Wireshark</a></li>
</ol>
<p><i>Сердюков Олег, The Apple Geek</i></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4105/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached (user agent is rejected)
Page Caching using memcached (user agent is rejected)
Database Caching 12/64 queries in 0.085 seconds using memcached
Object Caching 779/865 objects using memcached

Served from: theapplegeek.ru @ 2010-07-31 02:45:29 -->