<?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>Футурошок &#187; object-c</title>
	<atom:link href="http://www.pupsor.com/category/object-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pupsor.com</link>
	<description>мое будущее, настоящее и прошлое</description>
	<lastBuildDate>Sun, 05 Sep 2010 12:36:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Создаем Инсталлер Для MacOS Application</title>
		<link>http://www.pupsor.com/2009/09/19/sozdaem-installer-dlya-macos-application/</link>
		<comments>http://www.pupsor.com/2009/09/19/sozdaem-installer-dlya-macos-application/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 17:48:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[object-c]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[dmg]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.pupsor.com/?p=1115</guid>
		<description><![CDATA[Как я уже говорил раньше, мы занимаемся разработкой интересного ПО, который уже пару лет присутствует на win платформе и радует сотни людей. Год назад был готов app для macos, но не понятно по каким причинам релиз откладывался. Причины, если быть точнее, ясны, но решить их было сложно. Параллельно очень многое быстро менялось, отвлекало и выбивало [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Как я уже говорил раньше, мы занимаемся разработкой интересного ПО, который уже пару лет присутствует на win платформе и радует сотни людей. Год назад был готов app для macos, но не понятно по каким причинам релиз откладывался. Причины, если быть точнее, ясны, но решить их было сложно. Параллельно очень многое быстро менялось, отвлекало и выбивало из колеи, что в итоге привело меня к изучению <strong>Object-C</strong> и поднятия из руин дистриба под macos. Я приехал в Америку изучать английский язык и стал изучать Object-C тоже. Вроде даже что-то получается, поэтому разработку нашего ПО продолжил в одиночку (хотя, не буду врать, бОльшая часть была готова, но мелкие баги, которые не давали нормально работать имели место быть). Изначально, дистрибутив имел инсталлятор аля windows installation style. То есть жмет на dmg, потом на pkg, выскакивает окошко и там жмешь Next -> Next -> Next и потом Ok. </p>
<p>Если моим читатели не в курсе, под маком ставить обычный софт одно удовольствие. Открывается файл dmg и перетаскиваете иконку с программой в Application директорию. И запускаете. Все. Просто и ясно, никаких exe, никаких инсталляторов, ничего выбирать не нужно, все втыкается по наитию. Мне это очень нравится в Яблочных девайсах и программах, а так как ПО у нас максимально упрощает жизнь людям, то и инсталлятор должен быть простой. Искал-искал, чем же мне инсталлятор сделать и сделать так, чтобы это было как-то автоматизировано для последующих билдов, так как сами знаете &#8211; руками пару раз собрать весело, а потом рутина от которой воротит, поэтому я теперь пробую искать пути &#8220;<strong>реализовать и радоваться</strong>&#8220;. И нашел свой ответ на блоге у <a href="http://drnicwilliams.com/">Dr Nic</a>, а если быть точнее по адресу <a href="http://drnic.github.com/choctop/">http://drnic.github.com/choctop/</a>. Command-line тулза, позволяющаю собирать пакет с вашим приложением, так мало того, еще и дизайн можно воткнуть свой. Чтобы проще было понять, то я вам покажу, как выглядит инсталлятор от Adium:</p>
<p><img src="http://www.pupsor.com/wp-content/uploads/2009/09/Screen-shot-2009-09-19-at-10.43.18-AM.png" alt="adium installer" title="adium installer" width="605" height="426" class="aligncenter size-full wp-image-1116" /></p>
<p>Вот типа такого позволяет choctop создать, автоматизировать этот процесс и наслаждаться сборками новых дистрибов. Процесс я описывать не буду, так как автор описал его максимально просто, еще и видео сделал с примером, поэтому вставляю видео здесь, наслаждайтесь.</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3049180&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3049180&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pupsor.com/2009/09/19/sozdaem-installer-dlya-macos-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Learn</title>
		<link>http://www.pupsor.com/2009/08/18/how-to-learn/</link>
		<comments>http://www.pupsor.com/2009/08/18/how-to-learn/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 05:57:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[object-c]]></category>
		<category><![CDATA[книги]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[how to learn]]></category>

		<guid isPermaLink="false">http://www.pupsor.com/?p=1076</guid>
		<description><![CDATA[by Aaron Hillegass

All sorts of people come to my class: the bright and the not so bright, the motivated and the lazy, the experienced and the novice. Inevitable, the people who get the most from the class share one characteristic: They remain focused on the topic at hand.
The first trick to maintaining focus is to [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><strong>by Aaron Hillegass</strong></p>
<p><img src="http://www.pupsor.com/wp-content/uploads/2009/08/draft_lens1941246module9145168photo_1208398891cocoa-puro-300.jpg" alt="draft_lens1941246module9145168photo_1208398891cocoa-puro-300" title="draft_lens1941246module9145168photo_1208398891cocoa-puro-300" width="300" height="388" class="aligncenter size-full wp-image-1077" /></p>
<p>All sorts of people come to my class: the bright and the not so bright, the motivated and the lazy, the experienced and the novice. Inevitable, the people who get the most from the class share one characteristic: They remain focused on the topic at hand.</p>
<p>The first trick to maintaining focus is to get enough sleep. I suggest ten hours of sleep each night while you are studying new ideas. Before dismissing this idea, try it. You will wake up refreshed and ready to learn. Caffeine is not a substitute for sleep. </p>
<p>The second trick is to stop thinking about yourself. While learning something new, many students will think, &#8220;Damn, this is hard for me. I wonder if I am stupid.&#8221; Because stupidity is such an unthinkably terrible thing in our culture, the students will then spend hours constructing arguments that explain why they are intelligent yet are having difficulties. The moment you start down this path, you have lost your focus. </p>
<p>I used to have a boss named Rock. Rock had earned a degree in astrophysics from Cal Tech and had never had a job in which he used his knowledge of the heavens. Once I asked him whether he regretted getting the degree. &#8220;Actually, my degree in astrophysics has proved to very valuable,&#8221; he said. &#8220;Some things in this world are just hard. When I am struggling with something, I sometimes think &#8216;Damn, this is hard for me. I wonder if I am stupid,&#8217; and then I remember that I have a degree in astrophysics from Cal Tech; I must not be stupid.&#8221;</p>
<p>Before going and farther, assure yourself that you are not stupid and that some things are hard. Armed with this silly affirmation and a well-rested mind, you are ready to conquer with <strong>Cocoa</strong>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pupsor.com/2009/08/18/how-to-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Model-View-Controller</title>
		<link>http://www.pupsor.com/2009/08/13/model-view-controller/</link>
		<comments>http://www.pupsor.com/2009/08/13/model-view-controller/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 06:16:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[object-c]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://www.pupsor.com/?p=1052</guid>
		<description><![CDATA[В любом деле должен быть порядок, конечно не просто это &#8211; следить за всем, но если правильно начать, то возможно привычка сохранится. Вот, например, америка и ее мусорка. Мы привыкли, что есть помойное ведро, стоит оно под раковиной с однаразовым пакетиком, который при наполнение летит в мусорку за домом. Тут же три мусорных ведра, да [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>В любом деле должен быть порядок, конечно не просто это &#8211; следить за всем, но если правильно начать, то возможно привычка сохранится. Вот, например, америка и ее мусорка. Мы привыкли, что есть помойное ведро, стоит оно под раковиной с однаразовым пакетиком, который при наполнение летит в мусорку за домом. Тут же три мусорных ведра, да и ведром-то с трудом назвать можно &#8211; box. Имеется три типа мусора и нужно следить куда и какой выкидывать. По началу очень непривычно, но потом с мыслью свыкаешься, но все равно порой возникают вопросы &#8211; какой ящик выбрать? </p>
<p>Так же и в программировании, когда начинаешь делать что-то, лучше начинать делать правильно. Не красотой алгоритмов вырабатывать эту правильность, а дизайном внутри. Если мусор скидывать в один ящик, то переработать его будет очень сложно, так как отделить банку или пакет пластиковый от салфетки будет сложно. Так и с кодом, если насрать в main.m (в <strong>XCode</strong> расширение .m для исходников) линейно, то потом черт ногу сломит (привету <strong>Артему</strong> за дельные советы! он знает). Вот и придумали люди <strong>MVC</strong>. <strong>Model-View-Controller</strong>. </p>
<p><strong>Model</strong> &#8211; содержит в себе объекты, которых хранят данные и производят логические манипуляции с этими данными. </p>
<p><strong>View</strong> представляет из себя объекты, которые показывают/получают информацию юзеру. Окошки, кнопки&#8230;</p>
<p><strong>Controller</strong> это объекты, которые выступают в роли посредника между Model и View. </p>
<p>Очень наглядно можно познакомиться с <strong>MVC</strong> на простом примере <strong>Currency Converter</strong>. У нас будет два объекта: <strong>Converter</strong>, который будет служить в данном случае нашей <strong>Model</strong> и <strong>Controller</strong>, который будет выступать посредником между <strong>Converter</strong> и <strong>User Interface</strong>. <strong>Controller</strong> является основой в приложении, так как controller выполняет связь между интерфейсом и функционалом, он и руководит всей деятельностью приложения. Объект <strong>Controller</strong> получает данные, которые вводит пользователь в editbox, передает их в <strong>Converter</strong>, затем получает обработанный ответ от <strong>Converter</strong> и отфутболивает обратно в editbox пользователю. <strong>Converter</strong> может быть использован в любом другом приложении, так как изолирован от любых вмешательств. Получает данные на входе и выпуливает ответ, все. </p>
<p><img src="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-16.png" alt="Picture 16" title="Picture 16" width="446" height="282" class="aligncenter size-full wp-image-1053" /></p>
<p><strong>Создаем Controller class.</strong> В Interface Builder выбираем NSObject Объект из Library и перетаскиваем его в MainMenu.xib, переименовываем в Controller и задаем исходящие параметры класса: rateField, dollarField, totalField and converter. Наш контроль требует от нас только одного действия &#8211; &#8220;convert&#8221;. Когда юзер будет кликать на кнопку Convert, мы будем посылать сообщение convert: нашему контроллеру.<br />
<a href="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-17.png"><img src="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-17-300x241.png" alt="Picture 17" title="Picture 17" width="300" height="241" class="aligncenter size-medium wp-image-1057" /></a></p>
<p><a href="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-18.png"><img src="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-18-118x300.png" alt="Picture 18" title="Picture 18" width="118" height="300" class="aligncenter size-medium wp-image-1058" /></a></p>
<p>Далее дело у нас идет за Model Class. Тоже повторяем и для model &#8211; создаем object по имени Converter, то есть бросаем NSObject и переименовывам в Converter (outlets и actions никаких не делаем). Получаем:</p>
<p><img src="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-19.png" alt="Picture 19" title="Picture 19" width="446" height="440" class="aligncenter size-full wp-image-1059" /></p>
<p>Соединяем Controller с интерфейсом. На объекте Controller <strong>зажимаем ctrl &#8211; мышку</strong> и тянем на наш интерфейс в район text field&#8217;ов (ничем показать не могу стрелочки за неимением графических редакторов). То есть зажали, дотащили указатель до TextField напротив Exchange Rate per Dollar и выбираем rateField, далее таже процедура для Dollars to Convert и TextField на котором выбираем dollarField и не забываем про totalField. </p>
<p><a href="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-20.png"><img src="http://www.pupsor.com/wp-content/uploads/2009/08/Picture-20-288x300.png" alt="Picture 20" title="Picture 20" width="288" height="300" class="aligncenter size-medium wp-image-1060" /></a></p>
<p>Для того, чтобы сообщить Controller&#8217;у наш action, нужно ОТ кнопки Convert -> потянуть control-drag до объекта Controller и выбрать там единственный из hint &#8211; convert:. Сохранять не забываем. </p>
<p>И, наконец, для связи Model с Controller мы между двумя объектами натягиваем control-drag от <strong>Controller</strong> к <strong>Converter</strong> и выбираем <strong>converter</strong>. Как видите, мы ни одной строки кода не написали, а сделали уже очень много. Посмотрите внимательно &#8211; мы получили логическую структуру под названием MVC в которой Model общается с Controller, View общается с Controller, а Controller всем этим делом рулит, так как ни Model, ни View не могут общаться друг с другом. </p>
<p>Теперь нужно сгенерировать наши классы, которые мы мышкой натаскали. Выбирает объект Controller в MainMenu.xib и идем в File -> Write Class Classes&#8230; Выбираем язык Object-C и не забываем галочку с .h. Тоже самое и для Converter. Все, смотрим в XCode, а у нас уже там кода немного появилось. Файлы можно закинуть в папочку Classes. </p>
<p>Создаем Conversion метод для подсчета.<br />
Converter.h:</p>
<blockquote><p>
#import <Cocao/Cocoa.h><br />
@interface Converter : NSObject {<br />
}<br />
- (float) converterAmount: (float) sum atRate: (float) rate;<br />
@end</p></blockquote>
<p>Converter.m:</p>
<blockquote><p>#import &#8220;Converter.h&#8221;<br />
@implementation Converter<br />
- (float) converterAmount:(float)sum atRate:(float)rate<br />
{<br />
	return (sum * rate);<br />
}<br />
@end</p></blockquote>
<p>Controller.m:</p>
<blockquote><p>
#import &#8220;Controller.h&#8221;<br />
<strong>#import &#8220;Converter.h&#8221;</strong></p>
<p>@implementation Controller<br />
- (IBAction)convert:(id)sender {<br />
<strong>	float rate = [rateField floatValue]; // берем значение из поля rateField<br />
	float sum = [dollarFiled floatValue]; // берем значение из dollarField<br />
	float total = [converter converterAmount:sum atRate:rate]; //конвертим это все дело, вызывая converter</p>
<p>	[totalField setFloatValue:total]; //выводим результат в поле totalField</strong><br />
}<br />
@end</p></blockquote>
<p>Build and Run! Пример взят из книги Learning Cocao With Objective-C, так как я сам сидел разбирался с MVC, заодно решил мысли привести в кучу и оформить это в виде поста, так как когда сам пишешь и структурируешь все по пунктам &#8211; оседает в голове лучше. Если кто-то начинает изучать Object-C и хочет программировать для iPhone &#8211; есть отличшнейшее видео в iTunes в разделе <strong>Stanford</strong>. Хотя вот прямой линк <a href="http://cs193p.com/">http://cs193p.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pupsor.com/2009/08/13/model-view-controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
