<?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>Блог</title>
	<atom:link href="http://wert1go.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://wert1go.ru</link>
	<description>просто блог</description>
	<lastBuildDate>Sun, 08 Jan 2012 10:18:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>RageR &#8211; читалка новых русскоязычных rage комиксов</title>
		<link>http://wert1go.ru/rager-chitalka-novyx-russkoyazychnyx-rage-komiksov</link>
		<comments>http://wert1go.ru/rager-chitalka-novyx-russkoyazychnyx-rage-komiksov#comments</comments>
		<pubDate>Sun, 08 Jan 2012 10:17:30 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[RageR]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=884</guid>
		<description><![CDATA[Как оказалось, в последнее время в интернетах популярны rage комиксы. В Маркете имеется целая плеяда приложений для чтения оных комиксов, но все они предлагаю только англоязычные комиксы. Вызов был принят. RageR &#8211; читалка новых русскоязычных rage комиксов. Простое? легкое и полностью бесплатное приложение, с помощью которого можно читать самые свежие комиксы с популярных отечественных ресурсов (пока [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-full wp-image-885" title="RageR" src="http://wert1go.ru/wp-content/uploads/2012/01/250.png" alt="RageR" width="250" height="250" />Как оказалось, в последнее время в интернетах популярны <a href="http://lurkmore.to/Rage_Comics">rage комиксы</a>. В Маркете имеется целая плеяда приложений для чтения оных комиксов, но все они предлагаю только англоязычные комиксы. Вызов был принят.</p>
<p style="text-align: justify;">RageR &#8211; читалка новых русскоязычных rage комиксов.</p>
<p style="text-align: justify;">Простое? легкое и полностью бесплатное приложение, с помощью которого можно читать самые свежие комиксы с популярных отечественных ресурсов (пока comicsbook.ru и troll-face.ru). Приложение получает свежие комиксы в течение двух часов. Есть возможность добавлять комиксы в избранное.</p>
<p style="text-align: justify;">Все комиксы просматриваются в режиме он-лайн, так что наличие интернета обязательно.</p>
<p style="text-align: justify;">Приложение на маркете:</p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.rager">RageR</a></p>
<p style="text-align: justify;"><span id="more-884"></span>Ключевые слова: <strong>rage комиксы</strong>, <strong>фуу комиксы</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/rager-chitalka-novyx-russkoyazychnyx-rage-komiksov/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Историк v1.3</title>
		<link>http://wert1go.ru/istorik-v1-3</link>
		<comments>http://wert1go.ru/istorik-v1-3#comments</comments>
		<pubDate>Mon, 02 Jan 2012 14:16:51 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[Историк]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=875</guid>
		<description><![CDATA[Новая версия Историка вышла еще до нового года (1.2), но я временил с публикацией изменений, и, как оказалось, не зря &#8211; по невнимательности упустил один баг, который заставляет приложение падать. Поэтому приложение пришлось вновь обновить, без особых нововведений, но уж лучше так, чем с багом. Нововведения за версии 1.2 и 1.3: - были добавлены новые [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright" title="Историк v1.3 - история России на Android" src="http://wert1go.ru/wp-content/uploads/2011/12/250.jpg" alt="" width="250" height="250" />Новая версия Историка вышла еще до нового года (1.2), но я временил с публикацией изменений, и, как оказалось, не зря &#8211; по невнимательности упустил один баг, который заставляет приложение падать. Поэтому приложение пришлось вновь обновить, без особых нововведений, но уж лучше так, чем с багом. Нововведения за версии 1.2 и 1.3:<br />
- были добавлены новые тематические тесты, темы следующие:</p>
<ul style="text-align: justify;">
<li>Древнерусское государство</li>
<li>Русские земли в XII–XIII вв</li>
<li>Образование единого Российского государства в XIV–XV вв</li>
<li>Россия в XVI веке</li>
<li>Россия в XVII веке</li>
<li>Российская империя в XVIII веке</li>
<li>Россия в XIX веке</li>
<li>Россия в начале XX века</li>
<li>СССР в 1917–1930-е годы</li>
<li>Великая Отечественная война</li>
<li>СССР в 1945–1964гг</li>
<li>СССР в 1964–1984гг</li>
<li>СССР в 1985–1991гг</li>
<li>Россия в 1990-е годы XX в</li>
</ul>
<div style="text-align: justify;">- обновлен модуль тестирования в целом, теперь результаты теста можно просматривать, а удачно пройденные тесты запоминаются</div>
<div style="text-align: justify;">- косметические изменения в модуле исторических личностей</div>
<div style="text-align: justify;">- исправлены ошибки приводившие к падению приложения</div>
<p style="text-align: justify;">Приложение выпущено в двух версиях:</p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historianfree">Историк Free (с рекламой)</a></p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historian">Историк (без рекламы, но за 30р)</a></p>
<div style="text-align: justify;">Ключевые слова: <strong>история России на Android</strong>, <strong>история России на андроид</strong></div>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/istorik-v1-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AndroidExplore, выпуск 1</title>
		<link>http://wert1go.ru/androidexplore-vypusk-1</link>
		<comments>http://wert1go.ru/androidexplore-vypusk-1#comments</comments>
		<pubDate>Sun, 25 Dec 2011 15:47:54 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[saxparser]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=869</guid>
		<description><![CDATA[Пока готовил новую версию Историка, пришлось столкнуться и исследовать несколько особенностей Android, дабы столкновения с ними в будущем проходили менее болезненно решил фиксировать самое интересное (дабы вновь не рыскать по stackoverflow.com, благодаря которому решается подавляющее большинство проблем) 1.  getStringArray(),  reference table overflow Если вы используете означенный метод для работы с большими массивами строк и работаете [...]]]></description>
			<content:encoded><![CDATA[<p>Пока готовил новую версию Историка, пришлось столкнуться и исследовать несколько особенностей Android, дабы столкновения с ними в будущем проходили менее болезненно решил фиксировать самое интересное (дабы вновь не рыскать по stackoverflow.com, благодаря которому решается подавляющее большинство проблем)</p>
<h3>1.  getStringArray(),  reference table overflow</h3>
<p>Если вы используете означенный метод для работы с большими массивами строк и работаете с версиями ниже Android 2.3.3, то добро пожаловать в клуб начинающих парсеров.</p>
<p>getStringArray() не прибирает за собой как следовало бы, из-за чего происходит переполнение таблицы ссылок (в ней максимум 512 элементов), ну а из-за этого приложение банально падает.</p>
<p>Выходы:</p>
<p>а) перевод приложения на версии от 2.3.3</p>
<p>б) использование парсера</p>
<p>Выход а &#8211; не кошерный, поэтому идем и учимся использовать парсер. Мне подошел SAX parser:</p>
<ul>
<li><a href="http://www.quizful.net/post/sax-parser-java">пример реализации на java</a></li>
<li><a href="http://stackoverflow.com/questions/3522181/should-i-be-using-something-other-than-getresource-getstringarray-to-populat">пример непосредственно для Android</a></li>
</ul>
<p>Парсер однако не идеален, бывает так, что без причины бьет строки &#8211; для борьбы с этим используете методы startElement() и endElement(). И да, работает он медленнее встроенных функций.</p>
<h3>2. Форматирование текста в xml файлах ресурсов</h3>
<p><span id="more-869"></span><br />
Наверняка, однажды захочется выводить в TextView не голый текст, а что-то, хоть слегка отформатированное, ну  а для этого нет ничего лучше html, проблема лишь в том, что парсинг xml родными функция не дает должного результата.</p>
<p>А все потому, что все теги игнорируется, несмотря на то, что мы пытаемся их отобразить используя Html.fromHtml(), без паники несколько символов исправят положение:</p>
<p>&lt;string name=&#8221;about&#8221;&gt;&lt;![CDATA[<br />
&lt;p&gt;Благодарю за установку приложения Историк.&lt;/p&gt;<br />
&lt;p&gt;Историк - это интерактивный справочник по истории России. Цель существования приложения - предоставить<br />
удобный интерфейс для работы с массивом информации по истории нашей страны.&lt;/p&gt;<br />
&lt;p&gt;Если приложение вам понравилось, оставьте свою оценку на Android Market.&lt;/p&gt;]]&gt;<br />
&lt;/string&gt;</p>
<p>Чтобы получить и вывести отформатированный текст просто:</p>
<p>Spanned sp = Html.fromHtml(getResources().getString(R.string.about));</p>
<p>text.setText(sp);</p>
<p>Где text &#8211; экземпляр TextView.</p>
<h3>3. Главный экран? Дайте два</h3>
<p>Это повторялось уже не раз и не два, и даже не сотню, но мне удалось про это забыть, поэтому:</p>
<p>Нужно постоянно помнить о возможной смене ориентации &#8211; скорее всего приложение изменится так, что при должной НЕ подготовке вызовет facepalm у уставшего разработчика.</p>
<p>Выход: думать заранее об смене ориентации и готовить макеты сразу для портретного и ландшафтного вида. Оба должны иметь одинаковое имя, но один из них будет главным и скорее всего будет храниться в основной папке &#8211; layout, а второй будет лежать в папке layout-land или layout-port в зависимости от обстоятельств.</p>
<h3>4. Сохранение данных или снова о смене ориентации экрана</h3>
<p>При смене ориентации экрана Activity убивается, и метод onCreate вызывает еще раз (первый раз был при запуске Activity). Если вы не позаботитесь об сохранении данных, которыми оперирует приложение, то получите пустой экран (в зависимости от роли потерянных данных). Пример: <a href="http://wert1go.ru/pishem-prilozhenie-dlya-android">приложение решения квадратных уравнений</a>. Если вы осилили мануал, и получили приложение, то уже могли заметить, что при смене ориентации экрана все данных пропадают.</p>
<p>Выход:</p>
<p>1. Использование метода onSaveInstanceState(), <a href="http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate">читаем топовый ответ</a>.</p>
<p>2. Использование SharedPreferences, <a href="http://stackoverflow.com/questions/4861379/android-sharedpreferences">опять читаем топовый ответ</a>.</p>
<p>Что именно использовать зависит от ваших потребностей. Первый способ позволяет хранить данные в пределах Activity, второй в пределах всего приложения.</p>
<h3>5. Загрузка https страниц</h3>
<p>В работе с WebView я продвинулся не намного дальше, туториала от Google, но уже столкнулся с тем, что загрузить Маркет с помощью этого примера не получается.</p>
<p>Выход:</p>
<p>Добавить в класс Web-клиента этот метод:<br />
@Override</p>
<p>public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {</p>
<p>handler.proceed(); // Ignore SSL certificate errors</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/androidexplore-vypusk-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Историк v1.1</title>
		<link>http://wert1go.ru/istorik-v1-1</link>
		<comments>http://wert1go.ru/istorik-v1-1#comments</comments>
		<pubDate>Sun, 25 Dec 2011 14:56:19 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[Историк]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=866</guid>
		<description><![CDATA[Вчера обновил приложение до версии 1.1, теперь Историк стал умнее: - расширена база дат и событий, понятий и определений - добавлен раздел о исторических личностях - добавлен демо-вариант ЕГЭ по истории за 2012 год Так же были сделаны кое-какие косметические изменения: - главный экран программы теперь набор прямоугольников (понравился UI с WP7) - новая клевая [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-867" title="Историк 1.1 - история России на Android" src="http://wert1go.ru/wp-content/uploads/2011/12/250.jpg" alt="Историк 1.1 - история России на Android" width="250" height="250" />Вчера обновил приложение до версии 1.1, теперь Историк стал умнее:</p>
<p>- расширена база дат и событий, понятий и определений</p>
<p>- добавлен раздел о исторических личностях</p>
<p>- добавлен демо-вариант ЕГЭ по истории за 2012 год</p>
<p>Так же были сделаны кое-какие косметические изменения:</p>
<p>- главный экран программы теперь набор прямоугольников (понравился UI с WP7)</p>
<p>- новая клевая иконка (см. справа)</p>
<p>- описание приложения и последних изменений теперь можно прочитать в самом приложении</p>
<p>В планах: расширение контента, кое-какие изменения в подаче материала, добавление светлой темы.</p>
<p style="text-align: justify;">Приложение выпущено в двух версиях:</p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historianfree">Историк Free (с рекламой)</a></p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historian">Историк (без рекламы, но за 30р)</a></p>
<p>Ключевые слова: <strong>история России на Android</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/istorik-v1-1/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Историк &#8211; История России в кармане</title>
		<link>http://wert1go.ru/istorik-istoriya-rossii-v-karmane</link>
		<comments>http://wert1go.ru/istorik-istoriya-rossii-v-karmane#comments</comments>
		<pubDate>Sat, 17 Dec 2011 07:52:18 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[Историк]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=862</guid>
		<description><![CDATA[Выложил в Маркет свое первое приложение имя которому Историк v1.0. Приложение простое, в нем не используются какие-либо графические или технологические изыски, но тем не менее, на мой взгляд оно весьма полезно (особенно когда нет доступа к интернету). Приложение предлагает следующий функционал основанный на истории России: - хронологическая таблица дат и событий - основные понятия и [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-medium wp-image-863" title="512" src="http://wert1go.ru/wp-content/uploads/2011/12/512-300x300.png" alt="" width="300" height="300" />Выложил в Маркет свое первое приложение имя которому <strong>Историк v1.0</strong>.</p>
<p style="text-align: justify;">Приложение простое, в нем не используются какие-либо графические или технологические изыски, но тем не менее, на мой взгляд оно весьма полезно (особенно когда нет доступа к интернету).</p>
<p style="text-align: justify;">Приложение предлагает следующий функционал основанный на истории России:</p>
<p style="text-align: justify;">- хронологическая таблица дат и событий</p>
<p style="text-align: justify;">- основные понятия и определения</p>
<p style="text-align: justify;">- тесты для проверки знаний</p>
<p style="text-align: justify;">Модуль дат и событие сортируется по мере ввода данных, аналогично работает и модуль понятий и определений. Тесты для проверки знаний (5 вариантов) представляют из себя наборы по 20 вопросов, на каждый из которых имеется по 4 ответа.</p>
<p style="text-align: justify;">Кому и зачем: школьникам и студентам, оставшимся без интернета на зачете/экзамене/контрольной.</p>
<p style="text-align: justify;">Приложение выпущено в двух версиях:</p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historianfree">Историк Free (с рекламой)</a></p>
<p style="text-align: justify;"><a href="https://market.android.com/details?id=ru.wert1go.historian">Историк (без рекламы, но за 30р)</a></p>
<p style="text-align: justify;">Вся информация для приложения была взята из открытых источников, изображение иконки и промо - Bernhard Karl von Koehne (1883, взято из Википедии).</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/istorik-istoriya-rossii-v-karmane/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Регистрация разработчика в Android Market</title>
		<link>http://wert1go.ru/registraciya-razrabotchika-v-android-market</link>
		<comments>http://wert1go.ru/registraciya-razrabotchika-v-android-market#comments</comments>
		<pubDate>Thu, 15 Dec 2011 10:59:10 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=856</guid>
		<description><![CDATA[Зарегистрировался час назад, и решил поделиться полученным опытом. В идеале регистрация в Android Market проходит по следующему алгоритму:  Идем сюда, и начинаем вводить свои данные. Оплачиваем взнос в 25 $ (С использованием кредитки) Регистрируем аккаунт продавца в Google Checkout Публикуем приложение Профит И конечно же есть несколько веских &#8220;НО&#8221;, которые способны попортить нервы и потратить [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Зарегистрировался час назад, и решил поделиться полученным опытом.</p>
<p style="text-align: justify;">В идеале регистрация в Android Market проходит по следующему алгоритму:</p>
<ol style="text-align: justify;">
<li> <a href="https://market.android.com/publish/">Идем сюда</a>, и начинаем вводить свои данные.</li>
<li>Оплачиваем взнос в 25 $ (С использованием кредитки)</li>
<li>Регистрируем аккаунт продавца в Google Checkout</li>
<li>Публикуем приложение</li>
<li>Профит</li>
</ol>
<div style="text-align: justify;">И конечно же есть несколько веских &#8220;НО&#8221;, которые способны попортить нервы и потратить время &#8211; они сосредоточены в пунктах 2 и 3.</div>
<h3 style="text-align: justify;">Оплата взноса</h3>
<p>Погуглив немного становится ясно, что людям без пластиковых карт придется таки топать в банк и выписывать себе карточку. Но это впечатление ложное, как всегда есть альтернатива, поэтому вот оба пути:</p>
<div style="text-align: justify;"><strong>Путь с пластиковой картой</strong></div>
<div style="text-align: justify;">Завести пластиковую карту, если нет (в сетях рекомендуют Visa Classic USD + Приват банк). Затем заказать на сайте банка карточку Visa Classic Internet (USD) пополнить ее баланс одним из доступных способов и оплатить. Учтите, что на карте должно быть <a href="http://prodroid.com.ua/?p=1">больше 25$</a>.<span id="more-856"></span></div>
<div style="text-align: justify;"><strong>Путь с виртуальной картой</strong></div>
<div style="text-align: justify;">Если нет желания или возможности последовать по первому пути, то есть и другой путь. О его существовании мне подсказал клиент Webmoney предложив купить карты MasterCard и Visa Classic для интернета. Это виртуальные карты, с определенным номиналом и кратким сроком жизни. Но самое главное это то, что они предоставляют необходимые для регистрации данные:</div>
<div style="text-align: justify;">
<ul>
<li>номер карты</li>
<li>CVV код</li>
<li>дату истечения срока действия</li>
</ul>
<div>Купить такую карту можно <a href="http://www.plati.ru/asp/list_pin.asp?id_f=11354">здесь</a>. Номинал карты может быть производным, но помните про то, что он должен быть больше 25,35 $.</div>
<div>Если вы пойдете этим путем, то часть данных которые должны браться с карты вводить придется самим:</div>
<div>
<ul>
<li>Имя Фамилия</li>
<li>Почтовый индекс</li>
<li>Адрес</li>
</ul>
<div>Советую указывать реальные, мало ли что. По поводу того, что карты реально не существует не волнуйтесь &#8211; Google сразу прикрепляет вашу карту к аккаунту, дабы вы могли оплачивать другие покупки, но вы можете в любой момент удалить любую из карт и указать новую.</div>
</div>
</div>
<h3 style="text-align: justify;">Регистрация аккаунта продавца в Google Checkout</h3>
<div style="text-align: justify;">Здесь мне повезло &#8211; регистрация завершилась за несколько десятков секунд (да, я не читал соглашение). Но, дело в том, что у меня уже был аккаунт в Google Adsense и Google автоматически связал мои аккаунты в единой целое.</div>
<div style="text-align: justify;">Для тех же у кого аккаунта в Google Adsense еще нет есть простой рецепт:</div>
<div>
<ol style="text-align: justify;">
<li>Создаем блог на <a href="http://www.blogger.com/">Blogger.com</a></li>
<li>Приводим его в порядок (любой шаблон, свое название, какой-нибудь пост и блок AdSense в сайдбаре &#8211; все это просто и понятно)</li>
<li>Регистрируемся в Google Adsense, в качестве сайта указываем только что созданный блог</li>
<li>Ждем одобрения</li>
</ol>
<div style="text-align: justify;">Вывод заработанных на продаже приложений денег будет происходить через Google Adsense, так что в настройках нужно будет запросить подтверждение аккаунта &#8211; вам вышлют письмо с пин-кодом. После этого можно будет настроить способ выплаты:</div>
<div style="text-align: justify;">
<ul>
<li>Чек</li>
<li>Платеж через систему <a href="https://pps.rapida.ru/?aID=301&amp;ggg=1&amp;ctime=3">Rapida</a></li>
</ul>
<div>Я работаю со вторым вариантом и получаю деньги на webmoney (у сервиса уйма настроек и шаблонов платежей, в т.ч. можно получать деньги почтовыми переводами или на пластиковую карту). Минимальный порог выплат 100 y.e.</div>
</div>
<div style="text-align: justify;">Вроде все. Вопросы в комментарии.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/registraciya-razrabotchika-v-android-market/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Компиляция и установка apk файла</title>
		<link>http://wert1go.ru/kompilyaciya-i-ustanovka-apk-fajla</link>
		<comments>http://wert1go.ru/kompilyaciya-i-ustanovka-apk-fajla#comments</comments>
		<pubDate>Fri, 25 Nov 2011 16:23:41 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=831</guid>
		<description><![CDATA[В прошлый раз мы написали простую программу. Она спокойно запускается и работает на эмуляторе, но вот поделиться ей с кем-нибудь не получится – максимум ее можно будет установить на свой телефон при помощи Eclipse. Дабы разобраться с этой не справедливостью мы научимся компилировать программы для Android в apk файлы, а заодно научимся их инсталлировать на [...]]]></description>
			<content:encoded><![CDATA[<p>В прошлый раз <a href="http://wert1go.ru/pishem-prilozhenie-dlya-android">мы написали простую программу</a>. Она спокойно запускается и работает на эмуляторе, но вот поделиться ей с кем-нибудь не получится – максимум ее можно будет установить на свой телефон при помощи Eclipse. Дабы разобраться с этой не справедливостью мы научимся компилировать программы для Android в apk файлы, а заодно научимся их инсталлировать на эмуляторе без помощи Eclipse.</p>
<h3>Компиляция программы</h3>
<p>Eclipse берет практически все заботы по компиляции программы на себя – разработчику остается лишь внимательно заполнять требуемые поля.</p>
<ol>
<li>Переходим: File -&gt; Export…</li>
<li>Выбираем Android -&gt; Export Android Aplication, жмем Next</li>
<li>Выбираем проект для компиляции, жмем Next</li>
<li>Создаем (или используем старый) файл для хранения ключей, жмем Next</li>
<li>Заполняем необходимые данные, жмем Next</li>
<li>Выбираем папку, куда будет сохранен apk файл и давим Finish</li>
</ol>
<p><a href="http://wert1go.ru/wp-content/uploads/2011/11/equation.apk">apk</a> написанной в прошлый раз программы.</p>
<h3>Установка apk файла на эмулятор</h3>
<p>После того, как вы заполучили apk файл его можно устанавливать и на телефон и на эмулятор. С установкой телефон у их владельцев думаю проблем не будет, а вот с установкой apk на эмулятор разберемся.<span id="more-831"></span></p>
<p>Первым делом нам нужно узнать где хранится файл adb.exe. В моем случае (я не изменял настроек установки ADT) файл хранится по адресу:</p>
<blockquote><p><strong>C:\Program Files\Android\platform-tools</strong></p></blockquote>
<p>Копируем в эту папку apk файл, который хотим установить.</p>
<p>Теперь нужно запустить командную строку, напоминаю как это делается:</p>
<ol>
<li>Пуск -&gt; Выполнить</li>
<li>Ввести cmd и нажать Enter</li>
</ol>
<p>Появится командная строка. По умолчанию она уже готова работать с какой-нибудь папкой. Нам нужна не какая-нибудь, а вполне конкретная папка, поэтому переходим в нее с помощью команды &#8220;cd&#8221;:</p>
<blockquote><p><strong>cd C:\Program files\Android\platform-tools</strong></p></blockquote>
<p>Затем вводим команду:</p>
<blockquote><p><strong>adb </strong><strong>install *.</strong><strong>apk</strong></p></blockquote>
<p>За место * вводится имя файла. Кстати аналогичным способом можно и удалять программы с эмулятора, нужно лишь, слегка, изменить команду:</p>
<blockquote><p><strong>adb </strong><strong>uninstall *.</strong><strong>apk</strong></p></blockquote>
<p>И, конечно же, для установки и удаления программ необходимо, чтобы эмулятор был включен.</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/kompilyaciya-i-ustanovka-apk-fajla/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пишем простое приложение для Android: решение квадратного уравнения</title>
		<link>http://wert1go.ru/pishem-prilozhenie-dlya-android</link>
		<comments>http://wert1go.ru/pishem-prilozhenie-dlya-android#comments</comments>
		<pubDate>Mon, 21 Nov 2011 12:22:02 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Приложения]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=794</guid>
		<description><![CDATA[Первая программа, которую мы самостоятельно напишем, будет простой, но ее написание позволит освоиться с основами разработки приложений для Android, а именно узнаем: Где располагаются основные файл проектов, и как с ними работать Как сделать простенький интерфейс для приложения Как осуществлять переходы между экранами приложения Как выводить текстовые данные У каждой программы должна быть задача, для [...]]]></description>
			<content:encoded><![CDATA[<p>Первая программа, которую мы самостоятельно напишем, будет простой, но ее написание позволит освоиться с основами разработки приложений для Android, а именно узнаем:</p>
<ul>
<li>Где располагаются основные файл проектов, и как с ними работать</li>
<li>Как сделать простенький интерфейс для приложения</li>
<li>Как осуществлять переходы между экранами приложения</li>
<li>Как выводить текстовые данные</li>
</ul>
<p>У каждой программы должна быть задача, для которой это программа создается, такая задача будет и у нашей программы – она будет решать квадратные уравнения. И прежде чем приступать к написанию программы нужно разобраться с поставленной задачей. Во-первых, напоминаю, что такое квадратное уравнение вообще:</p>
<p style="text-align: center;"><img class="size-full wp-image-795  aligncenter" title="Квадратное уравнение" src="http://wert1go.ru/wp-content/uploads/2011/11/android_7.png" alt="Квадратное уравнение" /></p>
<p>Из первого уравнения становится ясно, что изменяемыми у нас будут 3 параметра – a, b, c. Все остальное &#8211; расчет, формирование данных для вывода и сам вывод результата &#8211; будет зависеть от них, поэтому мы окажем им особое внимание. Во-вторых, сразу оговорим требования к приложению, их будет немного:</p>
<ol>
<li>Главный экран, с которого будет производиться его запуск</li>
<li>Прием данных пользователя на специальном экране</li>
<li>Расчет уравнения по нажатию на кнопку (с проверкой введенных данных)</li>
<li>Вывод результата в читабельном формате</li>
</ol>
<p>Теперь можно приступать к написанию программы, отталкиваться будем от озвученных требований. Создаем новый или редактируем старый Android проект и начинаем. Я назвал свой проект equation.<span id="more-794"></span></p>
<h3>Требование 1: Главный экран, с кнопкой запуска</h3>
<p>Первый класс, который создает для нас Eclipse – дочерний класс Activity. Activity можно охарактеризовать просто как рабочее окно или рабочий экран (более точно и подробно). Это нам собственно и было нужно. Код созданного файла:</p>
<pre><code class="java">package ru.wert1go.equation;
import android.app.Activity;
import android.os.Bundle;
public class EquationActivity extends Activity {
 /** Called when the activity is first created. */
@Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }
} </code></pre>
<ul>
<li>package – имя пакета</li>
<li>import – импорт всех необходимых для работы приложения пакетов. Как узнать какой пакет вам нужен? Это можно либо знать, либо узнавать, когда Eclipse подчеркивает красным что-либо – в этом случае всплывающая подсказка пояснит чего не хватает, или что нужно делать. Для новичков Eclipse сильно облегчает жизнь:  все необходимые пакеты импортируются нажатием – Ctrl + Shift + O, советую это запомнить.</li>
<li>EquationActivity – название класса</li>
<li>onCreate – метод, который вызывает при запуске приложения (подробнее)</li>
<li>setContentView – метод подгружающий интерфейс приложения</li>
<li>R.layout.main – переменная, которая дает знать методу, что именно подгружать</li>
</ul>
<p>У каждого приложения на ОС Android существует класс R, в котором хранятся закодированные ссылки на данные приложения (подробнее), обращаясь к классу подобным образом layout.main мы говорим приложению что-то вроде:</p>
<p>“Эй, посмотри у нас там, на складе, в папке layout  лежит бумажка с надписью main”</p>
<p>На деле все обстоит примерно так же: приложение обращается к &#8220;складу&#8221; &#8211; папке res, затем заходит в папку layout – где хранятся xml макеты приложения, и затем загружает файл main.xml</p>
<p style="text-align: center;"><img class="size-full wp-image-807  aligncenter" title="Package Explorer" src="http://wert1go.ru/wp-content/uploads/2011/11/android_5.png" alt="Package Explorer" /></p>
<p>Чтобы увидеть его следуем в Package Explorer по следующему пути:</p>
<blockquote><p><strong><em>название вашего проекта -&gt; res -&gt; layout -&gt; main.xml</em></strong></p></blockquote>
<p>Затем слева внизу переключаемся с графического вида (в нем пока нет необходимости) на xml вид. Сразу же исправим содержимое файла на необходимое нам (напомню, нужна кнопка). Теперь он будет выглядеть так:</p>
<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:paddingLeft="20dip"
 android:paddingRight="20dip" &gt;
&lt;Button
 android:id="@+id/start"
 android:text="@string/start_button"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_centerInParent="true" /&gt;
&lt;/RelativeLayout&gt; </code></pre>
<p>Разметка приложения напоминает разметку сайта, тем кто с ней знаком освоится с разметкой интерфейса будет очень просто. Давайте разбираться.</p>
<p>RelativeLayout – макет с относительным позиционированием, то есть положение элементов макета определяется отношением между ними (<a href="http://developer.android.com/reference/android/widget/RelativeLayout.html">подробнее</a>).</p>
<blockquote><p>Например: Блок 2 расположен под Блок 1, для этого нужно указать атрибут: android:layout_below = &#8220;Блок 1&#8243;</p></blockquote>
<p><em>Таблица атрибутов RelativeLayout</em></p>
<table border="0">
<tbody>
<tr>
<td valign="top" width="196"><strong>Атрибут</strong></td>
<td valign="top" width="442"><strong>Значение</strong></td>
</tr>
<tr>
<td valign="top" width="196">xmlns:android</td>
<td valign="top" width="442">Объявление пространства имен XML, этот атрибут необходимо указывать у внешнего тега</td>
</tr>
<tr>
<td valign="top" width="196">android:layout_width</td>
<td valign="top" width="442">Ширина макета, можно указывать в различных величинах, а можно воспользоваться двумя функциональными значениями: fill_parent – занять все доступное место в родительском теге (в нашем случае занять пространство шириною в экран), wrap_content – занять место эквивалентное размеру содержимого</td>
</tr>
<tr>
<td valign="top" width="196">android:layout_height</td>
<td valign="top" width="442">Аналогично ширине</td>
</tr>
<tr>
<td valign="top" width="196">android:orientation</td>
<td valign="top" width="442">Ориентация макета, вертикальная или горизонтальная (т.е. колонка или строка)</td>
</tr>
<tr>
<td valign="top" width="196">android:paddingLeft</td>
<td valign="top" width="442">Установка поля, т.е. расстояния от края экрана (в данном случае левого края) до содержимого</td>
</tr>
</tbody>
</table>
<p>Button – тег создающий нужную нам кнопку <em>Таблица атрибутов Button</em></p>
<table border="0">
<tbody>
<tr>
<td valign="top" width="243"><strong>Атрибут</strong></td>
<td valign="top" width="395"><strong>Значение</strong></td>
</tr>
<tr>
<td valign="top" width="243">android:id</td>
<td valign="top" width="395">Объявление id элемента, с его помощью будем обращаться к элементу из программы</td>
</tr>
<tr>
<td valign="top" width="243">android:text</td>
<td valign="top" width="395">Текс, который будет написан на кнопке. Строка @string/start_button</td>
</tr>
<tr>
<td valign="top" width="243">android:layout_centerInParent</td>
<td valign="top" width="395">Атрибут, указывающий, что наш элемент будет находится в центре родительского элемента</td>
</tr>
</tbody>
</table>
<p>Параметры размеров кнопки (layout_width, layout_height см в предыдущей таблице). XML макет готов, но Eclipse будет настойчиво сигналить об ошибке, и не спроста.</p>
<p>В макете мы прописали значение атрибута android:text = &#8220;@string/start_button&#8221;. Этой строкой мы говорим макету, где лежит текст, который будет написан на кнопке. Макет конечно же прекрасно знает, где это место, но нужного ему текста там нет. В Package Explorer открываем:</p>
<blockquote><p><em><strong>res -&gt; values -&gt; strings.xml</strong></em></p></blockquote>
<p>По открытию переходим на вкладку strings.xml в левом нижнем углу. Здесь хранятся все текстовые данные программы. Это очень удобно, ведь если мы будем использовать одну и ту же строку в нескольких местах, и нам вдруг захочется ее изменить, то изменять нам ее прийдется лишь единожды в файле strings.xml Думаю здесь все ясно:</p>
<ul>
<li>string – тег, в котором хранится текст</li>
<li>name – атрибут string, содержимое которого является идентификатором строки, то есть если нам потребуется строка, то мы будем обращаться к ней по ее имени.</li>
</ul>
<p>Строчку с name=”hello” можно удалить (именно она выводилась в нашем Hello World), и нужно добавить текст для кнопки, содержимое файла станет таким:</p>
<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
 &lt;string name="hello"&gt;Hello World, EquationActivity!&lt;/string&gt;
 &lt;string name="app_name"&gt;Equation&lt;/string&gt;
&lt;/resources&gt; </code></pre>
<p>Сохраняем изменения, и возвращаемся в файл main.xml, теперь он не сигнализирует об ошибках и мы можем посмотреть как он будет выглядеть, для этого нужно переключиться на вкладку GaphicLayout, с которой мы благополучно сбежали в самом начале. С макетом покончено.Теперь нужно заставить кнопку работать.</p>
<p>На минутку вспомним требования, исходя из них у нас должно быть два рабочих экрана, то есть два дочерних класса Activity, и чтобы наша кнопка могла работать нужен второй экран, хотя бы пустой, который будет открываться по нажатию. Поэтому давайте создадим новый класс, переходим</p>
<blockquote><p><strong><em>File -&gt; New -&gt; Class</em></strong></p></blockquote>
<p>В поле Name вводим, например App и нажимаем Finish. После этого заменяем содержимое файла App.java содержимым нашего первого файла, затем исправляем имя класса с EquationActivity на App. Создадим так же для класса xml макет:</p>
<blockquote><p><strong><em>File -&gt; New -&gt; Android XML File</em></strong></p></blockquote>
<p>Задаем какое-нибудь имя файла, я предлагаю app, и сохраняем его. В файле App.java исправляем R.layout.main на R.layout.имя_файла_который_вы_только_что_создали.</p>
<p>Все забываем про эти файлы, на какое-то время. Вернемся к EquationActivity. Самое время рассказать программе о кнопке &#8211; для этого обновим метод onCreate:</p>
<pre><code class="java">
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  <strong>View mStartButton = findViewById(R.id.start);</strong>
  <strong>mStartButton.setOnClickListener(this);</strong>
} </code></pre>
<p>Две новые строчки выделены. В первой мы создаем объект класса View под названием mStartButton (все элементы интерфейса программ для Android являются объектами View), затем мы определяем его как ссылку на кнопку.</p>
<p>Для этого используется метод findViewById (если дословно то: Найти объект типа View по id) с параметром R.id.start – при создании кнопки мы указывали ее id, именно по этому id мы к ней обращаемся, при помощи все того же класса R и приставки id.</p>
<p>Второй строкой мы прикрепляем к кнопке слушатель setOnClickListener – метод, который будет ожидать нажатия на кнопку. Не забываем нажимать Ctrl + Shift + O для импорта нужных пакетов. Eclipse начнет сигнализировать о неполадках, и будет прав.</p>
<p>Для работы слушателя нужно подключить интерфейс onClickListener и переопределить предоставляемый им метод onClick, который и будет откликаться на нажатие кнопки. Звучит страшно, но на деле ничего сложного:</p>
<pre><code class="java">
...
public class EquationActivity extends Activity implements OnClickListener{
...
@Override
public void onClick(View view) {
} ...
 </code></pre>
<p>Осталось совсем немного! Нужно переопределить метод onClick &#8211; этот метод будет срабатывать при каждом нажатии на кнопку.</p>
<p>Необходимо сделать так, чтобы он открывал новый экран, а именно экран описываемый файлом App.java. В этом нам поможет компонент приложения – Intent (переводится как намерение).</p>
<p><strong>Intent</strong> – структура данных, содержащая абстрактное описание операций к выполнению. Если не поняли про абстрактное, то пока это и не нужно, важно понять что это элемент для задания каких-либо действий и передачи данных между Activity, т.е. рабочими экранами приложения.</p>
<p>Финальный вид класса EquationActivity.java:<br />
package ru.wert1go.equation;</p>
<pre><code class="java">
package ru.wert1go.equation;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class EquationActivity extends Activity implements OnClickListener{

	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Регистрируем кнопку (сначала создаем ее в main.xml) и добавляем listener
        View mStartButton = findViewById(R.id.start);
        mStartButton.setOnClickListener(this);
    }

	//Переопределяем функцию для рекции на нажатие кнопки
    @Override
	public void onClick(View view) {
		Intent intent = new Intent(this, App.class);
		startActivity(intent);
	}
}

</code></pre>
<p>Снова было добавлено две строки. В первой мы создаем экземпляр класса Intent, и передаем ему два параметра this – указатель на текущий класс, и App.class – указатель на класс, к которому необходимо перейти. Сам переход осуществляется второй строкой, при помощи метода startActivity, которому в качестве параметра передается объект intent (помните, он есть структура данных).</p>
<p>Казалось бы все, можно запускать приложение. Но нет, если сделать это прямо сейчас, то по нажатии на кнопку программа выдаст ошибку.</p>
<p>Дело в том, что она не знает, что класс, к которому мы обращаемся, есть activity, которую можно запустить. Сейчас же нужно исправить это. Для этого откроем файл AndroidManifest.xml (не забудьте переключиться на просмотр xml внизу экрана) здесь много тегов и их атрибутов, в дальнейших статьях, по мере необходимости мы будем к ним обращаться, а пока найдем закрывающийся тег &lt;/activity&gt; и вставим сразу после него следующее:</p>
<ul>
<li>android:label – название программы, которое будет красоваться вверху экрана (в strings.xml можете по играться с названием)</li>
<li>android:name – имя дочернего класса Activity, записывается именно с точкой впереди (либо указывается полное название пакета), без расширения</li>
</ul>
<p>Обратите внимание на содержимое первого тега activity, это описание первого класса, в моем случае EquationActivity (<a href="http://developer.android.com/guide/topics/fundamentals.html#Manifest">подробнее о Manifest</a>).</p>
<p>Сохраняем файл, переходим во вкладку первого класса и запускаем приложение. Если вы сделали все без ошибок, то по запуску приложения у вас появится черный экран с кнопкой, после нажатия на которую откроется просто черный экран:</p>
<p style="text-align: center;"><img class="size-full wp-image-809  aligncenter" title="Главный экран -> Не главный экран&#8221; src=&#8221;http://wert1go.ru/wp-content/uploads/2011/11/android_6.png&#8221; alt=&#8221;Главный экран -> Не главный экран&#8221; /></p>
<h3>Требование 2: Прием данных пользователя на отдельном экране</h3>
<p>Пришло самое время подумать, а как будет выглядеть прием данных от пользователя? Начали думать? А зря, нужно просто посмотреть на уравнение. У нас три изменяемых параметра, значит нужно три поля для ввода данных, поэтому выглядеть ввод данных будет так:</p>
<p style="text-align: center;"><img class="size-full wp-image-812  aligncenter" title="Ввод данных" src="http://wert1go.ru/wp-content/uploads/2011/11/android_8.png" alt="Ввод данных" /></p>
<p>Давайте теперь реализуем это на практике. Для этого проследуем в ранее созданный app.xml – файл разметки второго экрана приложения. Удаляем все его содержимое и копируем или вводим следующий код:</p>
<pre><code>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:paddingLeft="20dip"
  android:paddingRight="20dip"
&gt;
  &lt;LinearLayout
    android:id="@+id/equation"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dip"
    android:paddingBottom="10dip"
  &gt;
    &lt;EditText
      android:id="@+id/a"
      android:hint="1"
      android:inputType="numberSigned"
      android:layout_width="40dip"
      android:layout_height="wrap_content"
    /&gt;
    &lt;TextView
      android:text="@string/xqudratic_text"
      android:textSize="30dip"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
    /&gt;
    &lt;EditText
      android:id="@+id/b"
      android:hint="0"
      android:inputType="numberSigned"
      android:layout_width="40dip"
      android:layout_height="wrap_content"
    /&gt;
    &lt;TextView
      android:text="@string/x_text"
      android:textSize="30dip"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
    /&gt;
    &lt;EditText
      android:id="@+id/c"
      android:hint="0"
      android:inputType="numberSigned"
      android:layout_width="40dip"
      android:layout_height="wrap_content"
    /&gt;
    &lt;TextView
      android:text="@string/equal_text"
      android:textSize="30dip"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
    /&gt;
  &lt;/LinearLayout&gt;
&lt;/RelativeLayout&gt;
</code></pre>
<p>Вы уже немного знакомы с xml разметкой приложений, поэтому вам не составит труда опознать тег RelativeLayout, а так же большинство атрибутов этого и новых тегов. Новые теги:</p>
<ul>
<li>LinearLayout – макет с линейным позиционированием элементов, то есть элементы будут идти друг за другом (по горизонтали или вертикали, напомню, зависит от атрибута android:orientation)</li>
<li>EditText – поле для ввода и редактирования символьных данных</li>
<li>TextView – поле для выводя символьных данных</li>
</ul>
<p><em>Таблица новых атрибутов</em></p>
<table border="0">
<tbody>
<tr>
<td valign="top" width="319"><strong>Атрибут</strong></td>
<td valign="top" width="319"><strong>Значение</strong></td>
</tr>
<tr>
<td valign="top" width="319">android:hint</td>
<td valign="top" width="319">Текст подсказка, исчезает как только пользователь начинает вводить данные</td>
</tr>
<tr>
<td valign="top" width="319">android:inputType</td>
<td valign="top" width="319">Определение типа вводимых данных. numberSigned – целые числа со знаками</td>
</tr>
<tr>
<td valign="top" width="319">android:textSize</td>
<td valign="top" width="319">Размер выводимого текста. Единица измерения dip (не зависимый от плотности пиксель) –величина, значение которой будет масштабироваться под размеры дисплея, то есть указывая ее мы избавляемся от необходимости подгонять интерфейс и тексты под великое множество дисплеев Android-девайсов.</td>
</tr>
</tbody>
</table>
<p>Вот как соотносятся xml теги и элементы интерфейса:</p>
<p style="text-align: center;"><img class="size-full wp-image-813  aligncenter" title="Соотношение тегов и элементов интерфейса" src="http://wert1go.ru/wp-content/uploads/2011/11/android_9.png" alt="Соотношение тегов и элементов интерфейса" /></p>
<p>Возвращаемся к коду разметки и обращаем внимание на то, что у LinearLayout указан id (это на будущее), у TextView текст снова хранится в string.xml. Последнее означает, что нужно наведаться туда и добавить необходимые данные, а именно строки:</p>
<pre><code>
&lt;string name="xqudratic_text"&gt;x² + &lt;/string&gt;
&lt;string name="x_text"&gt;x + &lt;/string&gt;
&lt;string name="equal_text"&gt; = 0&lt;/string&gt;
</code></pre>
<p>Теперь, сохраним разметку и загрузим приложение. По нажатию на кнопку у нас откроется уже не пустой экран:</p>
<p style="text-align: center;"><img class="size-full wp-image-814  aligncenter" title="Вид интерфейса" src="http://wert1go.ru/wp-content/uploads/2011/11/android_10.png" alt="Вид интерфейса" /></p>
<p>Попробуйте ввести что-нибудь и вы убедитесь, что ничего кроме положительных и отрицательных чисел ввести не удастся.</p>
<h3>Требование 3: Расчет уравнения по нажатию на кнопку и проверка введенных данных</h3>
<p>Кнопки мы уже делать умеем, поэтому смело новую добавляем в app.xml, после тега &lt;/LinearLayout&gt;:</p>
<pre><code>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;Button
  android:id="@+id/start"
  android:text="@string/start_button"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_centerInParent="true"
/&gt; &lt;/RelativeLayout&gt; </code></pre>
<p>Здесь вам все должно быть знакомо, кроме одного атрибута. Хотя, если вы внимательно читали его я упоминал в качестве примера, повторюсь: android:layout_below=”@+id/equation” Говорит нам о том, что кнопка будет располагаться ниже элемента с id equation, а это наш LinearLayout. Текст для кнопки добавьте сами, вы уже умеете. Переходим к файлу App.java. Здесь нам необходимо:</p>
<ol>
<li>Объявить классу о существовании кнопки и прикрепить к ней Listener</li>
<li>Подключить интерфейс onClickListener и переопределить предоставляемый им метод onClick</li>
<li>Объявить несколько переменных уровня класса:</li>
</ol>
<ul>
<li>String mResult</li>
<li>float D;</li>
<li>float x1 = 0;</li>
<li>float x2 =0;</li>
</ul>
<p>Мы это уже делали раньше, сейчас есть только одно важное отличие – то, как мы переопределим метод onClick. Прежде чем заниматься решением этого вопроса предлагаю сразу определиться с необходимыми методами. Нам потребуются:</p>
<ul>
<li>метод вывода данных (showResult())</li>
<li>метод расчета уравнения(solveEquation())</li>
<li>метод подготовки выходных данных(getResult())</li>
</ul>
<p>Исходя из этого списка мы уже можем переопределить метод onClick:</p>
<pre><code> @Override public void onClick(View v) { showResult(); } </code></pre>
<p>Теперь напишем метод showResult():</p>
<pre><code>
private void showResult() {
		//Регистрируем поля для ввода данных
		EditText mEditA = (EditText) findViewById(R.id.a);
		EditText mEditB = (EditText) findViewById(R.id.b);
		EditText mEditC = (EditText) findViewById(R.id.c);
		//Получение введенных данных
		String mA = mEditA.getText().toString();
		String mB = mEditB.getText().toString();
		String mC = mEditC.getText().toString();
		//Получение подготовленного результата расчета
		getResult(mA, mB, mC);
		//Вывод данных
		TextView mResultField = (TextView) findViewById(R.id.resultField);
		mResultField.setText(Html.fromHtml(mResult));
	}
</code></pre>
<p>Первым делом нам нужно зарегистрировать поля для ввода данных. Для этого мы создаем объект типа EditText и даем ему ссылку на поле данных при помощи функции findViewById, где id – это id EditText, которые мы добавляли в app.xml, на Java это записывается так:</p>
<pre><code> EditText mEditA = (EditText) findViewById(R.id.a); </code></pre>
<p>Буквы a, b, c соответствуют переменным уравнения. Следующий шаг это получение введенных данных. Для этого создается переменная типа String, и в нее сохраняется значение из поля EditText, предварительно преобразованное в String, на Java это выглядит так:</p>
<pre><code> String mA = mEditA.getText().toString(); </code></pre>
<p>Теперь у нас есть данные, на основе которых мы можем получить результат, и мы передаем их методу getResult(). Метод getResult():</p>
<pre><code>
	private void getResult(String a, String b, String c) {
		//Объявление переменных
		int mValueA;
		int mValueB;
		int mValueC;

		//Проверяем были ли введенны данные вообще
		if (a.length() == 0) {
			a = "1";
			mValueA = 1;
		} else
			mValueA = Integer.parseInt(a); //Достаем из строки число типа int

		if (b.length() == 0) {
			b = "0";
			mValueB = 0;
		} else
			mValueB = Integer.parseInt(b);
		if (c.length() == 0) {
			c = "0";
			mValueC = 0;
		} else
			mValueC = Integer.parseInt(c);

		//Передаем числовые данные функции расчета уравнения
		solveEquation(mValueA, mValueB, mValueC);

		/*Собираем строку для вывода данных
		 * Подготовка основного уравнения
		 * a не должно равняться 0
		 */
		if (mValueA == 0)
			mResult = 1 + "x<sup>2</sup>";
		else
			mResult = a + "x<sup>2</sup>";
		if (mValueB < 0 )
			mResult += b + "x";
		else
			mResult += "+" + b + "x";
		if (mValueC < 0)
			mResult += c + " = 0";
		else
			mResult += "+" + c + "= 0";
		//Вывод уравнения расчета x1 и x2
		mResult += "x<sub>1</sub>,x<sub>2</sub> = (-(" + b + ")&#038;plusmn&radic;" + b + "<sup>2</sup>-4&times;"
		+ a + "&times;" + c + ")/2&times;" + a + " = 0";
		/*В зависимости от значения дискриминанта добавляем данные.
		 *  D < 0 - строка c сообщением
		 *  D > 0 - результаты расчета x1 и x2
		 */
		if (D < 0) {
			mResult += "Уравнение не имеет решения, так как дискриминант меньше 0";
		} else {
			mResult += "x<sub>1</sub> = -(" + b + ") + &radic;" + D + " = " + x1 + "";
			mResult += "x<sub>2</sub> = -(" + b + ") - &radic;" + D + " = " + x2 + "";
		}
	}
</code></pre>
<p>Метод в качестве входных параметров получает 3 переменные типа String. Затем проверяет не пустые ли они, если пустые устанавливаются значения по умолчанию (a = 1, b = 0, c = 0), если не пустые, то внутренним переменным метода присваиваются значения введенных чисел при помощи метода parseInt().</p>
<p>После того, как числовые данные были установлены они передаются методу solveEquation() (он очень прост и будет объяснен комментариями в коде).</p>
<p>После получения результатов начинаем готовить результаты для вывода. Я решил организовать вывод данных в виде строки, форматироваться, которая будет html разметкой. В сборке строки нам поможет оператор: +=</p>
<p>Сперва мы собираем строку самого уравнения с учетов введенных данных (при этом учитываем знаки чисел), затем собираем уравнение расчета, и в конце концов добавляем итоговый результат. Все специальные символы были выражены <a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML">при помощи html</a>.</p>
<h3>Требование 4: Вывод результата в читабельном формате</h3>
<p>После того, как данные были рассчитаны и собраны в строку и сохранены в переменной mResult, мы можем их вывести. Для этого, в методе showResult() предназначены две последние строки.</p>
<pre><code>
//Вывод данных
TextView mResultField = (TextView) findViewById(R.id.resultField);
mResultField.setText(Html.fromHtml(mResult));
</code></pre>
<p>Первая вам может показаться знакомой. Мы создаем экземпляр объекта TextView &#8211; mResultField, и даем ему ссылку на TextView с id resultField. TextView – поле для вывода символьных данных. Поэтому следуем в файл app.xml и ниже кнопки добавляем:</p>
<pre><code>
&lt;TextView
  android:id="@+id/resultField"
  android:text=""
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_below="@+id/solve"
/&gt;
</code></pre>
<p>Возвращаемся к последней строке метода showResult(). Здесь при помощи метода setText(Html.fromHtml(mResult)) мы заполняем атрибут android:text, а мы уже знаем, что текст от туда имеет свойство появлять на экране. Html.fromHtml указывает на то, что в тексте присутствуют html теги и их необходимо учитывать. Проверьте код класса App, он должен выглядеть так:</p>
<pre><code>
package ru.wert1go.equation;

import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

public class App extends Activity implements OnClickListener{

	String mResult;
	float D;
	float x1 = 0;
	float x2 = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.app);

		//Регистрируем кнопку
		View mSolveButton = findViewById(R.id.solve);
		mSolveButton.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		showResult();
	}

	private void showResult() {
		//Регистрируем поля для ввода данных
		EditText mEditA = (EditText) findViewById(R.id.a);
		EditText mEditB = (EditText) findViewById(R.id.b);
		EditText mEditC = (EditText) findViewById(R.id.c);
		//Получение введенных данных
		String mA = mEditA.getText().toString();
		String mB = mEditB.getText().toString();
		String mC = mEditC.getText().toString();
		//Получение подготовленного результата расчета
		getResult(mA, mB, mC);
		//Вывод данных
		TextView mResultField = (TextView) findViewById(R.id.resultField);
		mResultField.setText(Html.fromHtml(mResult));
	}

	private void solveEquation(int a, int b, int c) {
		//Расчет дискриминанта
		D = (float) Math.pow(b, 2) - 4 * a * c;
		//Если D < 0, то расчет не требуется
		if (D >= 0) {
			x1 = (float) ((-b + Math.sqrt(D))/2*a);
			x2 = (float) ((-b - Math.sqrt(D))/2*a);
		}
	}

	private void getResult(String a, String b, String c) {
		//Объявление переменных
		int mValueA;
		int mValueB;
		int mValueC;

		//Проверяем были ли введенны данные вообще
		if (a.length() == 0) {
			a = "1";
			mValueA = 1;
		} else
			mValueA = Integer.parseInt(a); //Достаем из строки число типа int

		if (b.length() == 0) {
			b = "0";
			mValueB = 0;
		} else
			mValueB = Integer.parseInt(b);
		if (c.length() == 0) {
			c = "0";
			mValueC = 0;
		} else
			mValueC = Integer.parseInt(c);

		//Передаем числовые данные функции расчета уравнения
		solveEquation(mValueA, mValueB, mValueC);

		/*Собираем строку для вывода данных
		 * Подготовка основного уравнения
		 * a не должно равняться 0
		 */
		if (mValueA == 0)
			mResult = 1 + "x<sup>2</sup>";
		else
			mResult = a + "x<sup>2</sup>";
		if (mValueB < 0 )
			mResult += b + "x";
		else
			mResult += "+" + b + "x";
		if (mValueC < 0)
			mResult += c + " = 0";
		else
			mResult += "+" + c + "= 0";
		//Вывод уравнения расчета x1 и x2
		mResult += "x<sub>1</sub>,x<sub>2</sub> = (-(" + b + ")&#038;plusmn&radic;" + b + "<sup>2</sup>-4&times;"
		+ a + "&times;" + c + ")/2&times;" + a + " = 0";
		/*В зависимости от значения дискриминанта добавляем данные.
		 *  D < 0 - строка c сообщением
		 *  D > 0 - результаты расчета x1 и x2
		 */
		if (D < 0) {
			mResult += "Уравнение не имеет решения, так как дискриминант меньше 0";
		} else {
			mResult += "x<sub>1</sub> = -(" + b + ") + &radic;" + D + " = " + x1 + "";
			mResult += "x<sub>2</sub> = -(" + b + ") - &radic;" + D + " = " + x2 + "";
		}
	}

}
</code></pre>
<p>Сохраняем проект и загружаем наше приложение. Оно работает!</p>
<p style="text-align: center;"><img class="size-full wp-image-819  aligncenter" title="Приложение работает: расчет квадратного уравнения" src="http://wert1go.ru/wp-content/uploads/2011/11/android_11.png" alt="Приложение работает: расчет квадратного уравнения" /></p>
<p>Скачать <a href="http://wert1go.ru/wp-content/uploads/2011/11/equation.rar" target="_blank">исходный код приложения</a> или  <a href="http://wert1go.ru/wp-content/uploads/2011/11/equation.apk" target="_blank">apk файл</a>. Если найдете ошибку в посте или баг приложения пишите в комментарии.</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/pishem-prilozhenie-dlya-android/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Hello World на Android</title>
		<link>http://wert1go.ru/hello-world-na-android</link>
		<comments>http://wert1go.ru/hello-world-na-android#comments</comments>
		<pubDate>Fri, 18 Nov 2011 14:32:20 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=773</guid>
		<description><![CDATA[Давайте сделаем Hello World приложение для Android? А давайте. Для этого нам нужно выполнить следующие 6 квестов: Квест 1: Установка Eclipse Для его работы потребуется JDK, поэтому топаем к Oracle, качаем и устанавливаем последнюю версию. Теперь скачиваем и устанавливаем Eclipse. developer.android.com советует Eclipse Classic. Квест 2: Установка SDK Скачиваем и устанавливаем SDK. Квест 3: Установка ADT [...]]]></description>
			<content:encoded><![CDATA[<p>Давайте сделаем Hello World приложение для Android? А давайте.</p>
<p>Для этого нам нужно выполнить следующие 6 квестов:</p>
<h3>Квест 1: Установка Eclipse</h3>
<p>Для его работы потребуется JDK, поэтому топаем к Oracle, <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">качаем и устанавливаем</a> последнюю версию. Теперь <a href="http://www.eclipse.org/downloads/" target="_blank">скачиваем и устанавливаем Eclipse</a>. developer.android.com советует Eclipse Classic.</p>
<h3>Квест 2: Установка SDK</h3>
<p><a href="http://developer.android.com/sdk/index.html" target="_blank">Скачиваем и устанавливаем</a> SDK.</p>
<h3>Квест 3: Установка ADT плагина</h3>
<ol>
<li>В Eclipse нажимаем <strong>Help -&gt; Install new software…</strong></li>
<li>Жмем кнопку Add(в правом верхнем углу)</li>
<li>В поле Name вводим что угодно, а в поле Location копируем следующую ссылку:<br />
<a href="https://dl-ssl.google.com/android/eclipse/">https://dl-ssl.google.com/android/eclipse/</a> и жмем ОК.</li>
<li>Через несколько секунд в поле ниже появится строчка Developer Tools, ставим там галочку и жмем Next.</li>
<li>В новом окне снова кликаем <em>Next</em>, после этого читаем лицензионное соглашение, соглашаемся с ним и нажимаем Finish.</li>
<li>Ждем конца установки и перезапускаем Eclipse.</li>
</ol>
<h3>Квест 4: Настройка ADT плагина</h3>
<p>Связываем Eclipse + ADT с Android SDK. Для этого нажимаем:</p>
<p><strong>Window -&gt; Preferences</strong></p>
<p>Слева выбираем Android и указываем путь к Android SDK, который был благополучно установлен в квесте 2 (кнопка Browse). После этого нажимаем сначала Apply, а затем OK.<span id="more-773"></span></p>
<h3>Квест 5: Создание виртуального девайса (AVD)</h3>
<p>Переходим: <strong>Window -&gt; AVD Manager</strong></p>
<p>Нажимаем New и видим следующее окошко:</p>
<p style="text-align: center;"><img class="size-full wp-image-774 aligncenter" title="Создание виртуального девайса (AVD)" src="http://wert1go.ru/wp-content/uploads/2011/11/android_0.png" alt="Создание виртуального девайса (AVD)" width="422" height="657" /></p>
<ul>
<li>Name – название виртуального девайса</li>
<li>Target – версия ОС, на которой будет работать эмулятор</li>
<li>SD Card – объем карты памяти</li>
<li>Skin – тип дисплея устройства (определяет его разрешение)</li>
<li>Hardware – железная функциональность виртуального смартфона</li>
</ul>
<p>В первый раз советую выбрать лишь версию ОС в пункте Target и ввести имя девайса.</p>
<p>Давим Create ADV.</p>
<h3>Квест 6: Создание Android-проекта</h3>
<p>Следуем по следующему пути:</p>
<p><strong>File -&gt; New -&gt; Android Project</strong></p>
<p style="text-align: center;"><img class="size-full wp-image-775  aligncenter" title="Create Android Project" src="http://wert1go.ru/wp-content/uploads/2011/11/android_1.png" alt="Create Android Project" width="538" height="589" /></p>
<p>В появившемся окне активно лишь одно поле (Project Name – Имя проекта), потому что мы создаем новый проект с нуля. Вводим в это поле название своего проекта (например: giperboloid) и жмем Next.</p>
<p style="text-align: center;"><img class="size-full wp-image-776  aligncenter" title="Select Build Target" src="http://wert1go.ru/wp-content/uploads/2011/11/android_2.png" alt="Select Build Target" width="538" height="586" /></p>
<p>Здесь нам предлагают выбрать целевую версию операционной системы, выбираем ту, которую выбрали при создании виртуального девайса. Помните, что гарантированно работает лишь обратная совместимость (приложения для старых версий ОС будут работать в новых версиях, но не наоборот). Жмем Next.</p>
<p style="text-align: center;"><img class="size-full wp-image-777  aligncenter" title="Application Info" src="http://wert1go.ru/wp-content/uploads/2011/11/android_3.png" alt="Application Info" width="538" height="585" /></p>
<p>В новом окне нужно заполнить информацию о приложении:</p>
<ul>
<li>Application Name – Имя приложения, которое появится на девайсе</li>
<li>Package Name – Имя пакета, согласно правилам ОС Android оно должно быть уникальным, поэтому рекомендуется использовать доменное имя принадлежащее вам</li>
<li>Create Activity – Activity которую создаст для вас плагин, по крайней мере в первый раз галочку не убираем (что такое activity узнаем позже)</li>
<li>Minimum SDK – Минимальная версия API, на которой запустится ваше приложение (версия API должна соответствовать выбранной ранее версии ОС или быть ниже).</li>
</ul>
<p>На этом все, жмем Finish!</p>
<p>Наш Hello World готов, можно его запускать. Для этого находим наш проект в Package Explorer (по умолчанию он открыт в левой части рабочего окна Eclipse), открываем папку src, затем пакет и в конце концов файл с расширением .java. Скорее всего, там будет что-то наподобие этого:</p>
<pre><code class="java">
package ru.wert1go.namespace;
import android.app.Activity;
import android.os.Bundle;
public class ExampleActivity extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
} </code></pre>
<p>Это и есть Hello World, хотя здесь и близко нет слов «Hello World», пропустим пока этот момент и займемся запуском программы. Мне известны два способа:</p>
<ol>
<li>По хорошему, при условии, что у вас уже создан виртуальный девайс (а мы его создавали, когда выполняли квест 5) для этого достаточно нажать <strong>Run -&gt; Run</strong>, выбрать Android Application, нажать ОК и дождаться загрузки эмулятора с последующим запуском программы.</li>
<li>У меня так не получилось (пока в поисках причины), поэтому расскажу как есть. Сперва я загружаю свой эмулятор (Помните? <strong>Window -&gt; AVD Manager</strong>) до рабочего стола ОС. После чего в Диспетчере задач Windows убиваю процесс adb.exe, жду пока консоль Eclipse досчитает до 11 и лишь затем жму заветную кнопочку Run.</li>
</ol>
<p>Представим, что тем или иным путем мы смогли запустить эмулятор, и вот оно наше первое приложение:</p>
<p style="text-align: center;"><img class="size-full wp-image-780  aligncenter" title="Hello World" src="http://wert1go.ru/wp-content/uploads/2011/11/android_4.png" alt="Hello World" width="327" height="491" /></p>
<p>Правда есть проблема &#8211; мы не знаем, как оно работает, соответственно и не можем его изменять и это очень грустно, поэтому в следующий раз мы напишем простенькую программу по расчету квадратных уравнений и разберемся, как она работает.</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/hello-world-na-android/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Годовой опыт монетизации одного сайта о сериале</title>
		<link>http://wert1go.ru/site-year-money</link>
		<comments>http://wert1go.ru/site-year-money#comments</comments>
		<pubDate>Sun, 05 Sep 2010 09:32:40 +0000</pubDate>
		<dc:creator>Wert1go</dc:creator>
				<category><![CDATA[Заработок в интернете]]></category>
		<category><![CDATA[Мое]]></category>
		<category><![CDATA[Практика]]></category>

		<guid isPermaLink="false">http://wert1go.ru/?p=767</guid>
		<description><![CDATA[Сделанный чисто из детского любопытства сайт,  оказался самым долго живущим моим проектом, приносящим небольшую, и относительно стабильную прибыль. Год сайту исполнился уже давно, но вот с момента его активной монетизации он прошел как раз в конце августа. Перед тем, как рассказывать о монетизации непосредственно хотелось сначала рассказать о жизни сайтов о сериалах. Начну с того, [...]]]></description>
			<content:encoded><![CDATA[<p>Сделанный чисто из детского любопытства сайт,  оказался самым долго живущим моим проектом, приносящим небольшую, и относительно стабильную прибыль. Год сайту исполнился уже давно, но вот с момента его активной монетизации он прошел как раз в конце августа.</p>
<p>Перед тем, как рассказывать о монетизации непосредственно хотелось сначала рассказать о жизни сайтов о сериалах.</p>
<p>Начну с того, что их жизнь это качели, которые раскачиваются в зависимости от того какое время года сейчас идет – для сериалов времени года всего три: когда сериал идет, и когда идет межсезонье, и когда сериал заканчивается.</p>
<p>Итак, наши качели поднимаются вверх, когда идет новый сезон сериала, и соответственно выходят новые серии, в это время на сайт приходит больше всего посетителей, причем значительная их часть идет с закладок. В межсезонье же посещаемость сайта падает, но не до своего нижнего порога, ведь сериал продолжится, и кто-то хочет освежить память, пересмотрев старые серии, ну, а кто-то обязательно пропустил 1 или 2 серии и теперь хочет наверстать упущенное.</p>
<p>Ну, и, в конце-концов наступает то, чего мы все так боимся – сериал заканчивается, рано или поздно это случится, и тогда поток трафика на сайт упадет до своего нижнего порога (хотя это не означает, что он будет совсем мизерным), в этот поток будут входить люди, которые сериал не видели ранее, но теперь они толь только узнали о нем, толи просто, наконец решили выделить на него свое время.</p>
<p>Каков будет трафик на сайте в эти три «времени года»? Вопрос хороший и интересный, но ответ на него будет очевидный – все зависит от сериала, если сериал пользуется популярностью, то и трафик на нем будет немалый, и наоборот. Так же отдельно стоит отметить русские сериалы – трафик на сайтах о них поднимается (хоть и не на много) во время повторов, а отечественные телеканалы любят делать это очень часто.<span id="more-767"></span></p>
<p>Теперь же давайте перейдем непосредственно к моему сайту. Мой сайт посвящен отечественному сериалу о студентах – Универ (ссылку не даю, кому интересно ищем сами, по всем ключевым запросам  сайт в топ 10 обоих ключевых ПС), первые его сезоны мне понравились на столько, что собственно и сподвигли сделать сайт, правда, последние 2 сезона я смотрел только для того, чтобы написать описание серии.</p>
<p>Свою жизнь сайт начал в мае прошлого года, если мне не изменяет память тогда аккурат заканчивался 2 сезон сериала, за несколько часов сайт был наполнен копипастными описаниями серий, и отрерайчеными статьями, после чего он благополучно был оставлен до выхода нового сезона. В этот промежуток сайт успешно проиндексировался,  и стал получать свой трафик, благодаря какой-никакой, а оптимизации текста, до выхода нового сезона трафик был в районе 100 посетителей/сутки, после его выхода (кажется конец августа) произошел самый настоящий взрыв – трафик возрос в 10 раз. Однако это было лишь началом, так как внешней оптимизацией сайта я не занимался, то сайт довольствовался только теми ссылками, которые люди ставили сами, а их, как Вы понимаете обычно много не бывает, но это только лишь в том случае, если на сайте не ничего интересного. Но в один прекрасный день я оказался в нужном месте, в нужное время и сорвал банк, опубликовав первым или вторым видео ролик и песню из сериала, которые стали популярными в мгновение ока, рраз, и трафик возрос еще в 2 раза и составил уже около 2000 человек/сутки, рраз, и сайт заметили крупные порталы и проставили на не ссылки (причем индексируемые), а когда ссылки проиндексировались трафик вырос до 3000 человек в сутки, правда был он таким совсем не долго, ибо приближалось межсезонье, которое в одночасье уменьшило трафик в 3 раза.</p>
<p>С приходом нового сезона  трафик на сайте не раз достигал своего апогея в 4000 человек/сутки, но и этой радости скоро придет конец, ибо в наступающей неделе будут показаны последние серии нового сезона, и либо наступит межсезонье (что наиболее вероятно), либо сериалу придет конец.</p>
<p>Ну, вот мы и узнали о посещаемости сайта, в разные периоды жизни сайта она была:</p>
<p>1000 ч-к/сутки</p>
<p>2000 ч-к/сутки</p>
<p>3000 ч-к/сутки</p>
<p>4000 ч-к/сутки</p>
<p>Перейдем теперь к монетизации этого трафика (по этапам роста трафика, в межсезонье доход примерно равен доходу при 1к трафика/сутки):</p>
<p><strong>Монетизация при 1к трафика</strong></p>
<p>На первых парах я использовал лишь AdSense, который при посещаемости в тысячу человек приносил мне по 20-30 центов/сутки, однако после некоторой оптимизации размещения блоков доход вырос до 50-70 центов, чуть позднее подключился BinLayer, который приносил мне около 20 рублей.</p>
<p>Итого, минимальный суточный доход:  <strong>35 р</strong></p>
<p><strong>Монетизация при 2к трафика</strong></p>
<p>Ради интереса взамен AdSense поставил тизеры от <a href="http://medianet.adlabs.ru/r/fiATaVVVWGQwOSE=/" target="_blank">AdLabs</a>, результат меня не удовлетворил, так как доход не доходил даже до 10 рублей в день, AdSense был возвращен на свое место. В то время он приносил доход  1-1,3 доллара/сутки, BinLayer же давал до 60 р / сутки.</p>
<p>Итого, минимальный суточный доход:  <strong>90 р</strong></p>
<p><strong>Монетизация при 3к трафика</strong></p>
<p>Под конец года, если кто помнит, я немного увлекся СМС партнерками, поэтому на сайте вскоре появился баннер одной из них, провисел он не долго, но успел принести доход от 3 смс, после чего был заменен на блок из 3 тизеров от AdLabs, обо совесть заела меня и с тех пор я к этим партнеркам даже не подходил.</p>
<p>Ну, а, что AdSense и BinLayer? А с ними все чудесно, доход AdSense вырос до 1-1,5 долларов/сутки, BinLayer же раскачивался до 80-90 рублей.</p>
<p>Итого, минимальный суточный доход:  <strong>120 р</strong></p>
<p><strong>Монетизация при 4к трафика</strong></p>
<p>Вот здесь начинается самая приятная для меня часть, BinLayer был снят ввиду чудовищной задержки в выплатах (деньги, заказанные 23 марта 2010 года, я надеюсь получить в начале октября, если они не сбавят темп выплат), и какое то время сайт простоял лишь с AdSense и AdLabs – AdSense приносил доход 2-2,4 доллара/сутки, AdLabs до 20 рублей.</p>
<p>В конце сентября я открыл для себя новую биржу всплывающей рекламы – <a href="http://advmaker.ru/" target="_blank">AdvMaker</a>, которая выкупает клики по Sliding баннеру, как он выглядит, смотрим на скрине:</p>
<p style="text-align: center;"><img class="size-full wp-image-768 aligncenter" title="AdvMaker" src="http://wert1go.ru/wp-content/uploads/2010/09/advmaker.jpg" alt="AdvMaker" /></p>
<p>Кнопка закрытия баннер закрывает, как и должно быть, ко всему прочему, необычное расположение (нижний правый угол экрана) не мешает посетителям. Ежедневный доход с баннера AdvMaker – 70-80 рублей.</p>
<p>Итого, минимальный суточный доход: <strong>150 р</strong></p>
<p>О продаже ссылок</p>
<p>Как видим – не фонтан, но внимательные читатели заметили, что для монетизации не использовалась продажа ссылок, которая бы могла, как минимум, удвоить доходы, и это не потому, что у сайта нулевые параметры – имеется 10 тИЦ и присутствие в DMOZ, а потому, что я не люблю связываться с временной продажей ссылок со своих сайтов. Хотя не буду скрывать, недолгое время я приторговывал ссылками в GoGetLinks (успел заработать около 200$), однако переклейка с www на обычный домен привела к тому, что больше половины страницы были выкинуты из индекса Яндекса, и возвращаются туда очень медленно, вот сейчас, например, только 443 страницы из бывших 800+</p>
<p>Что будет с сайтом, когда сериал закончится? Доход с рекламы упадет до своего минимума, и чтобы получать хоть какие-то ощутимые деньги придется либо продолжить продажу в GGL, либо благополучно забить на нее и повесить на сайт, одну из бирж ссылок.</p>
<p>На этом все, удачи.</p>
]]></content:encoded>
			<wfw:commentRss>http://wert1go.ru/site-year-money/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

