<?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; Программирование</title>
	<atom:link href="http://grigorkin.ru/category/programmirovanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://grigorkin.ru</link>
	<description>Блог Григорькина, записи о программировании, саморазвитии, бизнесе, IT, интернете, стартапах и блоггинге.</description>
	<lastBuildDate>Fri, 20 Aug 2010 18:01:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Недоволен Wordpress-ом</title>
		<link>http://grigorkin.ru/2010/06/nedovolen-wordpress-om/</link>
		<comments>http://grigorkin.ru/2010/06/nedovolen-wordpress-om/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 14:06:17 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=977</guid>
		<description><![CDATA[
			
				
			
		
Несмотря на всю популярность движка для блогов Wordpress ряд его недостатков просто выбивает из меня здравый смысл и вместо него появляется нездравое желание написать свой блог, как это сделал Тормоз.
Перегруженность, неряшливость кода, повышенная потенциальная уязвимость за счет открытого кода, плохое отношение поисковых систем с блогам на Wordpress и еще с десяток минусов делают эту платформу [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F06%2Fnedovolen-wordpress-om%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F06%2Fnedovolen-wordpress-om%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Несмотря на всю популярность движка для блогов Wordpress ряд его недостатков просто выбивает из меня здравый смысл и вместо него появляется нездравое желание написать свой блог, как это сделал <a href="http://brokenbrake.biz/">Тормоз</a>.</p>
<p>Перегруженность, неряшливость кода, повышенная потенциальная уязвимость за счет открытого кода, плохое отношение поисковых систем с блогам на Wordpress и еще с десяток минусов делают эту платформу все менее и менее привлекательной для ведения блога, но тем не менее тысячи блогов работают на WordPress и не жалуются, оптимизируют, упрощают, улучшают видимость для поисковиков и т.д. Именно тот факт, что многие крупные блоггеры работают на WP останавливает меня написать свой велосипед&#8230; А так хочется. Остается оптимизировать и затачивать этот полуфабрикат под себя, чем и собираюсь заняться в ближайшее время.</p>
<p><em>Скриншот на злобу дня:</em></p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter" style="width: 530px;">
<dt class="wp-caption-dt"><em><a href="http://twipic.me/nlLAYd"><img class=" " style="border: 1px solid black;" title="Приехали. Всем известный http://twite.ru предлагает пользователям услугу покупки фолловеров. Более тупой и наглой услуги тяжело придумать. Долой эту студенческую поделку из твиттера!" src="http://twipic.s3.amazonaws.com/15763418/2_b8f06fcc60.jpg" alt="Приехали. Всем известный http://twite.ru предлагает пользователям услугу покупки фолловеров. Более тупой и наглой услуги тяжело придумать. Долой эту студенческую поделку из твиттера!" width="520" height="257" /></a></em></dt>
</dl>
</div>
<dd class="wp-caption-dd" style="text-align: center;"><em>Твайт обнаглел напроч. Теперь предлагает услугу покупки фолловеров.</em></dd>
<p><em> </em></p>
<dd class="wp-caption-dd"> </dd>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2010/06/nedovolen-wordpress-om/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Пробуем Elastic Compute Cloud (Amazon EC2)</title>
		<link>http://grigorkin.ru/2010/03/probuem-elastic-compute-cloud-ec2/</link>
		<comments>http://grigorkin.ru/2010/03/probuem-elastic-compute-cloud-ec2/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 07:06:10 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Облачные вычисления]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[Хостинг]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=492</guid>
		<description><![CDATA[
			
				
			
		
Что такое облачные вычисления? Не можете точно сформулировать? Возьмем материал из википедии:
Облачные (рассеяные) вычисления (англ. cloud computing, также используется термин Облачная (рассеянная) обработка данных) — технология обработки данных, в которой компьютерные ресурсы и мощности предоставляется пользователю как Интернет-сервис. Пользователь имеет доступ к собственным данным, но не может управлять и не должен заботиться об инфраструктуре, операционной системе [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fprobuem-elastic-compute-cloud-ec2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fprobuem-elastic-compute-cloud-ec2%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Что такое <strong>облачные вычисления</strong>? Не можете точно сформулировать? Возьмем материал из википедии:</p>
<blockquote><p><strong>Облачные (рассеяные) вычисления</strong> (англ. <em><span lang="en" xml:lang="en">cloud computing</span></em>, также используется термин <strong>Облачная (рассеянная) обработка данных</strong>) — технология обработки данных, в которой компьютерные ресурсы и мощности предоставляется пользователю как Интернет-сервис. Пользователь имеет доступ к собственным данным, но не может управлять и не должен заботиться об инфраструктуре, операционной системе и собственно программном обеспечении, с которым он работает. Термин «Облако» используется как метафора основанная на изображении Интернета на диаграмме компьютерной сети и как абстракцию сложной инфраструктуры, за который скрываются все технические детали. Согласно документу IEEE опубликованному в 2008 году «Облачная обработка данных — это парадигма, в рамках которой информация постоянно хранится на серверах в сети Интернет и временно кэшируется на клиентской стороне, например на персональных компьютерах, игровых приставках, ноутбуках, смартфонах и т. д.»</p></blockquote>
<p>До относительно недавнего времени считалось, что облачные вычисления являются чем то настолько абстрактным и недоступным для обывающего юзера, что слово &#8220;облачные&#8221; в названии можно интерпретировать как &#8220;заоблачные&#8221;. На самом деле в настоящее время реализация данной технологии доступна каждому вебмастеру, благодаря тому, что на рынке рынке облачных вычислений присутствует достаточно много крупных игроков, один из которых &#8211; Amazon.</p>
<p><span id="more-492"></span> Причем тут западный интернет-магазин? Сейчас объясню. В какой то момент Амазон приобрел настолько широкие масштабы и начал обрабатывать настолько крупные массивы данных, что люди, работающие в нём начали всерьез задумываться о создании собственного датацентра, который будет способен утолить их жажду мощности. Придумали архитектуру и сделали. Сделали один датацентр в США, потом пришли к выводу, что они без проблем и их архитектурой облачных вычислений могли бы обслуживать не только себя, а еще и продавать свои услуги и построили еще два датацентра: один в США и второй в Европе. Так и образовался Amazon Elastic Clouds.</p>
<p>В данной статье я хочу кратко рассмотреть один из сервисов &#8211; Amazon EC2.</p>
<h3>Elastic Compute Cloud (Amazon EC2)</h3>
<p>Опишу сервис в нескольких словах: Amazon предоставляет возможность в любой момент времени за несколько минут поднять свою виртуальную машину и дать к ней полный root-доступ.</p>
<p>Амазон выделяет несколько типов машин, которые доступны пользователю:</p>
<table style="border: 1px solid #3f3b3b; margin: 10px; height: 318px;" border="1" cellspacing="0" cellpadding="5" width="545">
<tbody>
<tr>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Тип виртуальной машины</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;" title="Количество виртуальных ядер">ВЯ*</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">RAM</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">HDD</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;" title="Платформа виртуальной машины">Платф</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Стоимость 1 час**</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Стоимость 1 года***</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Стоимость 3 лет***</td>
</tr>
<tr>
<td style="text-align: center;">Small Instance</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.7GB</td>
<td style="text-align: center;">160GB</td>
<td style="text-align: center;">32-bit</td>
<td style="text-align: center;">$0.095</td>
<td style="text-align: center;">$227.50</td>
<td style="text-align: center;">$350</td>
</tr>
<tr>
<td style="text-align: center;">Large Instance</td>
<td style="text-align: center;">4</td>
<td style="text-align: center;">7.5GB</td>
<td style="text-align: center;">850GB</td>
<td style="text-align: center;">64-bit</td>
<td style="text-align: center;">$0.38</td>
<td style="text-align: center;">$910</td>
<td style="text-align: center;">$1400</td>
</tr>
<tr>
<td style="text-align: center;">Extra Large Instance</td>
<td style="text-align: center;">8</td>
<td style="text-align: center;">7.5GB</td>
<td style="text-align: center;">1690GB</td>
<td style="text-align: center;">64-bit</td>
<td style="text-align: center;">$0.76</td>
<td style="text-align: center;">$1820</td>
<td style="text-align: center;">$2800</td>
</tr>
<tr>
<td style="text-align: center;">High-Memory Double Extra Large Instance</td>
<td style="text-align: center;">13</td>
<td style="text-align: center;">34.2GB</td>
<td style="text-align: center;">850GB</td>
<td style="text-align: center;">64-bit</td>
<td style="text-align: center;">$1.34</td>
<td style="text-align: center;">$3185</td>
<td style="text-align: center;">$4900</td>
</tr>
<tr>
<td style="text-align: center;">High-Memory Quadruple Extra Large Instance</td>
<td style="text-align: center;">26</td>
<td style="text-align: center;">68.4GB</td>
<td style="text-align: center;">1690GB</td>
<td style="text-align: center;">64-bit</td>
<td style="text-align: center;">$2.68</td>
<td style="text-align: center;">$6370</td>
<td style="text-align: center;">$9800</td>
</tr>
<tr>
<td style="text-align: center;">High-CPU Medium Instance</td>
<td style="text-align: center;">5</td>
<td style="text-align: center;">1.7GB</td>
<td style="text-align: center;">350GB</td>
<td style="text-align: center;">32-bit</td>
<td style="text-align: center;">$0.19</td>
<td style="text-align: center;">$455</td>
<td style="text-align: center;">$700</td>
</tr>
<tr>
<td style="text-align: center;">High-CPU Extra Large Instance</td>
<td style="text-align: center;">20</td>
<td style="text-align: center;">68.4GB</td>
<td style="text-align: center;">1690GB</td>
<td style="text-align: center;">64-bit</td>
<td style="text-align: center;">$0.76</td>
<td style="text-align: center;">$1820</td>
<td style="text-align: center;">$2800</td>
</tr>
</tbody>
</table>
<p>* Одно виртуальное ядро(ВЯ) эквивалентно 1.7 2006 Xeon или 1.0-1.2 GHz 2007 Opteron.</p>
<p>** Цена одного часа использования машины в режиме on-demand instance (подключаемой по требованию).</p>
<p>*** Цена одного и трёх лет соответственно аренды машины в режиме reserved instance (зарезервированной на длительный срок).</p>
<p>Все цены за аренду машин приведены для ОС на базе Linux. Почасовая стоимость с ОС Windows примерно на $0.2 в час больше.</p>
<p>Как уже понятно, Амазон разделяет свои мощности на подключаемые по требованию, когда, например, у вас внезапно возросла нагрузка на сервер и срочно нужно масштабировать систему, дабы избежать краха, тогда, для краткосрочной аренды нет ничего лучше, чем машины, подключаемые по требованию. Второй тип &#8211; резервированные на длительный срок машины. По сути, это старый добрый хостинг, но выгодно отличающийся по цене, если арендовать машину на три года.</p>
<p>Ради интереса я провел пинг-тест. Я пинговал со своего провайдера различные сайты и данные вывел в таблицу. Интернет-провайдер — Ростелеком.</p>
<table style="border: 1px solid #3f3b3b; margin: 10px; height: 143px;" border="1" cellspacing="0" cellpadding="5" width="290">
<tbody>
<tr>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Хост</td>
<td style="background-color: #afafaf; font-weight: bold; text-align: center;">Ping</td>
</tr>
<tr>
<td style="text-align: center;">litra.ru</td>
<td style="text-align: center;">94 ms</td>
</tr>
<tr>
<td style="text-align: center;">zachet.me</td>
<td style="text-align: center;">37 ms</td>
</tr>
<tr>
<td style="text-align: center;">vkontakte.ru</td>
<td style="text-align: center;">32 ms</td>
</tr>
<tr>
<td style="text-align: center;">yandex.ru</td>
<td style="text-align: center;">33 ms</td>
</tr>
<tr>
<td style="text-align: center;">amazon EC2 US</td>
<td style="text-align: center;">179 ms</td>
</tr>
<tr>
<td style="text-align: center;">amazon EC2 EU</td>
<td style="text-align: center;">100 ms</td>
</tr>
</tbody>
</table>
<p>Из таблицы видно, что, пинг до европейского дата-центра Amazon EC2, не говоря уже об американском, значительно превышает пинг до веб-сайтов рунета, сервера которых расположены на территории России.</p>
<p>Прочитав все это, невольно всплывает мысль, а какой смысл покупать совершенно обычный хостинг у забугорного амазона, самостоятельно обслуживать, да еще и довольствоваться большим пингом? Если нет опыта в администрировании простейшего LAMP &#8211; то смысла нет, проще арендовать VPS и постоянно дергать саппорт для решения всплывающих проблем. В противном случае &#8211; аренда серверных мощностей у Амазона будет идеальным вариантом за счет быстрого подключения дополнительных юнитов, в случае резко возросшей нагрузки, удобства обслуживания(ребут системы) и прочих приятных мелочей.</p>
<p>Сервис оплачивается кредитными картами, и, даже со стандартной пластиковой картой Visa Classic от Сбербанка никаких проблем в оплате не возникало. Счет к оплате формируется в конце месяца, после чего деньги автоматически списываются со счета карты.</p>
<p>В следующей статье я затрону тему использования другого, широко распространенного сервиса от Amazon Simple Storage Service(S3), который я уже неоднократно применял в своих проектах, например на <a href="http://zachet.me">Зачете</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2010/03/probuem-elastic-compute-cloud-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вычисление расстояния между двумя геокоординатами на PHP</title>
		<link>http://grigorkin.ru/2010/03/vychislenie-rasstoyanie-mezhdu-dvumya-geokoordinatami-na-ph/</link>
		<comments>http://grigorkin.ru/2010/03/vychislenie-rasstoyanie-mezhdu-dvumya-geokoordinatami-na-ph/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 09:31:40 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Геолокация]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[долгота]]></category>
		<category><![CDATA[расстояние]]></category>
		<category><![CDATA[широта]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=698</guid>
		<description><![CDATA[
			
				
			
		
Как определить прямолинейное расстояние(без учета дорог и перепадов высот) между двумя геокоординатами? Очень просто, функция, реализованная на PHP приводится ниже.
Передаем в функцию пару координат, она нам возвращает дистанцию между точками в метрах.

function calcDistance&#40;$lat1, $lon1, $lat2, $lon2&#41;
&#123;
   if &#40;$lat1 == $lat2 &#38;amp;&#38;amp; $lon1 == $lon2&#41; &#123;
      return 1;
  [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fvychislenie-rasstoyanie-mezhdu-dvumya-geokoordinatami-na-ph%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fvychislenie-rasstoyanie-mezhdu-dvumya-geokoordinatami-na-ph%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://grigorkin.ru/wp-content/uploads/globus2.png"><img class="size-medium wp-image-717 alignleft" style="border: 0pt none; margin: 10px;" title="globus" src="http://grigorkin.ru/wp-content/uploads/globus2-300x182.png" alt="" width="300" height="182" /></a><strong>Как определить прямолинейное расстояние(без учета дорог и перепадов высот) между двумя геокоординатами?</strong> Очень просто, функция, реализованная на PHP приводится ниже.</p>
<p>Передаем в функцию пару координат, она нам возвращает дистанцию между точками в метрах.<span id="more-698"></span></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> calcDistance<span style="color: #009900;">&#40;</span><span style="color: #000088;">$lat1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$lon1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$lat2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$lon2</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$lat1</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$lat2</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #000088;">$lon1</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$lon2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">// Параметры эллипсоида:</span>
   <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color:#800080;">6378245.0</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">/</span> <span style="color:#800080;">298.3</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$b</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$EPS</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.5E-30</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$PI</span> <span style="color: #339933;">=</span> M_PI<span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">//Пересчет значений координат в радианы</span>
   <span style="color: #000088;">$lon1</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lon1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$PI</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">180</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$lat1</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lat1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$PI</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">180</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$lon2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lon2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$PI</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">180</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$lat2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lat2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$PI</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">180</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$TanU1</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">tan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lat1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$TanU2</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">tan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lat2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$U1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">atan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TanU1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$U2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">atan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TanU2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$SinU1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$U1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$CosU1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$U1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$SinU2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$U2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$U2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$OMEGA</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lon2</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$lon1</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$lambda</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$OMEGA</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">do</span> <span style="color: #666666; font-style: italic;">//Начало цикла итерации</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$LambdaPrev</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lambda</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$SinL</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lambda</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$CosL</span> <span style="color: #339933;">=</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lambda</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000088;">$SinSQSigma</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinL</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinL</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
                    <span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinU2</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$SinU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosL</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span>
                    <span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinU2</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$SinU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000088;">$CosSigma</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$SinU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinU2</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$CosU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosL</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000088;">$TanSigma</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sqrt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinSQSigma</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$CosSigma</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$TanSigma</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$Sigma</span> <span style="color: #339933;">=</span> <span style="color: #990000;">atan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TanSigma</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$Sigma</span> <span style="color: #339933;">=</span> <span style="color: #990000;">atan</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TanSigma</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$PI</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinSQSigma</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$SinAlpha</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$SinAlpha</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$CosU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosU2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinL</span> <span style="color: #339933;">/</span> <span style="color: #990000;">sqrt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinSQSigma</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$CosSigma</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinU1</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinU2</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #000088;">$CPARAM</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span>
                <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$f</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000088;">$lambda</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$OMEGA</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$CPARAM</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$f</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinAlpha</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">acos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosSigma</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
                <span style="color: #000088;">$CPARAM</span> <span style="color: #339933;">*</span> <span style="color: #990000;">sin</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">acos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosSigma</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$CPARAM</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$CosSigma</span> <span style="color: #339933;">*</span>
                <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">abs</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lambda</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$LambdaPrev</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #000088;">$EPS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Конец цикла итерации</span>
&nbsp;
   <span style="color: #000088;">$USQR</span> <span style="color: #339933;">=</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #990000;">cos</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">asin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinAlpha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span>
           <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$APARAM</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$USQR</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">16384</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4096</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$USQR</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">768</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$USQR</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">320</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">175</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$USQR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$BPARAM</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$USQR</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">256</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$USQR</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">128</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$USQR</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">74</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">47</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$USQR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$DSigma</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$BPARAM</span> <span style="color: #339933;">*</span> <span style="color: #990000;">sqrt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$SinSQSigma</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$BPARAM</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">4</span> <span style="color: #339933;">*</span>
             <span style="color: #009900;">&#40;</span><span style="color: #000088;">$CosSigma</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$BPARAM</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">6</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">*</span>
             <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">3</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$SinSQSigma</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">3</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$Cos2SigmaM</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">return</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$APARAM</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$Sigma</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$DSigma</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2010/03/vychislenie-rasstoyanie-mezhdu-dvumya-geokoordinatami-na-ph/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Определение местоположения с помощью браузера</title>
		<link>http://grigorkin.ru/2010/03/opredelenie-mestopolozheniya-s-pomoshhyu-brauzera/</link>
		<comments>http://grigorkin.ru/2010/03/opredelenie-mestopolozheniya-s-pomoshhyu-brauzera/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:06:48 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Геолокация]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[гео]]></category>
		<category><![CDATA[местоположение]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=648</guid>
		<description><![CDATA[
			
				
			
		
Как я неоднократно писал, я считаю, что будущее интернета будет тесно сотрудничать с составляющей по имени &#8220;Гео&#8221;, геопозиционирование, геопривязка, геопоиск, геокритерий &#8211; это несколько ключевых слов, которые будут в скором времени фигурировать в сети намного чаще. Почему я так в этом уверен? -Потому что в мире всё больше наблюдается данный тренд: выпускается всё больше устройств [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fopredelenie-mestopolozheniya-s-pomoshhyu-brauzera%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F03%2Fopredelenie-mestopolozheniya-s-pomoshhyu-brauzera%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: left;">Как я неоднократно писал, я считаю, что будущее интернета будет тесно сотрудничать с составляющей по имени &#8220;Гео&#8221;, геопозиционирование, геопривязка, геопоиск, геокритерий &#8211; это несколько ключевых слов, которые будут в скором времени фигурировать в сети намного чаще. Почему я так в этом уверен? -Потому что в мире всё больше наблюдается данный тренд: выпускается всё больше устройств с поддержкой GPS и <a href="http://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%BE%D0%BD%D0%B0%D1%81%D1%81">ГЛОНАСС</a>, на орбиту одним за другим доставляются спутники ГЛОНАСС-системы, Яндекс вводит критерий геопозиции клиента при поисковой выдачи, в <a href="picasaweb.google.com">Picassa</a> уже давно можно привязать конкретные снимки к месту на карте, даже есть в продаже фотоаппараты со встроенным GPS-приемником(<a href="http://yandex.ru/yandsearch?text=COOLPIX+P6000">COOLPIX P6000</a>).</p>
<p id="title_heading" style="text-align: left;">Причем местоположение человека можно узнать не обязательно с помощью GPS или ГЛОНАСС, эту информацию может нам любезно предоставить браузер клиента, посетившего наш сайт. <span id="more-648"></span>Желающие могут сразу взглянуть на <a href="http://dev.w3.org/geo/api/spec-source.html">спецификацию</a>, всем остальным объясню на пальцах. Geolocation API Specification предполагает, что с помощью JavaScript-кода можно получить у браузера текущее местоположение пользователя. Браузер сам решает откуда возьмется данная информация, либо из подключенного GPS или ГЛОНАСС-приемника, либо от сотового оператора, либо по сигналам Wi-Fi точек доступа, либо, банально по Ip-адресу. Да, рассчитывать на метровую погрешность координат при использовании этого метода не приходится, но это лучше, чем ничего, верно?</p>
<p style="text-align: left;">Приведу пример кода, который сможет показать широту и долготу нашего местоположения:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	navigator.<span style="color: #660066;">geolocation</span>.<span style="color: #660066;">getCurrentPosition</span><span style="color: #009900;">&#40;</span>foundLocation<span style="color: #339933;">,</span> noLocation<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">function</span> foundLocation<span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> lat <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">latitude</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> lon <span style="color: #339933;">=</span> position.<span style="color: #660066;">coords</span>.<span style="color: #660066;">longitude</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Our location: '</span> <span style="color: #339933;">+</span> lat <span style="color: #339933;">+</span> <span style="color: #3366CC;">', '</span> <span style="color: #339933;">+</span> lon<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #003366; font-weight: bold;">function</span> noLocation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Find location failure'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: left;">Вот, собственно и все. Легко, верно? Сразу скажу, что данная спецификация худо-бедно реализована только в следующих браузерах:</p>
<ul style="text-align: left;">
<li> Firefox 3.1 и выше</li>
<li>Safari for iPhone 3G и старше.</li>
<li>Для браузеров Safari и Chrome &#8211; для поддержки GeolocationAPI требуется установить дополнительные модули.</li>
</ul>
<p style="text-align: left;">Думаю, все же данная функция в ближайшем будущем будет реализована в остальных популярных браузерах, что приведет к буму приставки &#8220;ГЕО&#8221; в сети.</p>
<h2>Демо</h2>
<p><script src="/wp-content/uploads/mapTest.js" type="text/javascript"></script></p>
<p style="text-align: left;">Работу данной спецификации в действии можно посмотреть, кликнув на кнопку ниже.</p>
<p style="text-align: center;"><button onclick="getLocation();">Определить моё местоположение</button></p>
<p id="yMapRes" style="display: none; text-align: center;">По информации, предоставленной вашим браузером, вы находитесь здесь:<br /><img id="yMap" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2010/03/opredelenie-mestopolozheniya-s-pomoshhyu-brauzera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поиск лиц на фото с помощью OpenCV в PHP</title>
		<link>http://grigorkin.ru/2010/02/poisk-lic-na-foto-s-pomoshhyu-opencv-v-php/</link>
		<comments>http://grigorkin.ru/2010/02/poisk-lic-na-foto-s-pomoshhyu-opencv-v-php/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 12:12:34 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=597</guid>
		<description><![CDATA[
			
				
			
		
Зачастую в проектах возникает необходимость нахождения графических образов на загружаемых пользователями фотографий. Для джедаев программирования можно посоветовать реализовать алгоритм поиска нужного образа на родном языке, для всех остальных подойдет библиотека по имени OpenCV. Данная библиотека обладает довольно таки широким функционалом, вплоть до поиска лиц в видеопотоке, но мы рассмотрим поиск лиц на фотографии на PHP. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F02%2Fpoisk-lic-na-foto-s-pomoshhyu-opencv-v-php%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2010%2F02%2Fpoisk-lic-na-foto-s-pomoshhyu-opencv-v-php%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Зачастую в проектах возникает необходимость нахождения графических образов на загружаемых пользователями фотографий. Для джедаев программирования можно посоветовать реализовать алгоритм поиска нужного образа на родном языке, для всех остальных подойдет библиотека по имени <a href="http://ru.wikipedia.org/wiki/OpenCV">OpenCV</a>. Данная библиотека обладает довольно таки широким функционалом, вплоть до поиска лиц в видеопотоке, но мы рассмотрим поиск лиц на фотографии на PHP. <span id="more-597"></span>Сама OpenCV написана на C/C++, что позволяет думать о её шикарной производительности, но в PHP мы её напрямую не сможем использовать, для этого возьмем экстеншн для PHP под названием <a href="http://www.xarg.org/download/facedetect-1.0.0.tar.gz">PHP Facedetect</a>.</p>
<h3>1. Удостоверяемся, что у нас стоят все зависимости</h3>
<p>Для корректной работы всей системы нам понадобятся:</p>
<ul>
<li>pkgconfig</li>
<li>libpng</li>
<li>zlib</li>
<li>libjpeg</li>
<li>libtiff</li>
<li>python</li>
</ul>
<h3>2. Ставим OpenCV</h3>
<p>Либо через pecl, либо через apt-get в Debian, либо из <a href="http://sourceforge.net/projects/opencvlibrary/">исходников</a>.</p>
<h3>3. Собираем и устанавливаем PHP Facedetect Extension</h3>
<p>Качаем исходник <a href="http://www.xarg.org/download/facedetect-1.0.0.tar.gz">отсюда</a>, компилируем по инструкции в архиве и добавляем в PHP командой &#8220;phpize &amp;&amp; ./configure &amp;&amp; make &amp;&amp; make install&#8221;.</p>
<h3>4. Проверяем работу OpenCV в PHP</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span>face_count<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'party.jpeg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cascade.xml'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span>face_detect<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'party.jpeg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cascade.xml'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Функции нам возвращают количество лиц на фото их координаты. А больше-то и не надо для нашей задачи:)</p>
<p>Вот что у нас получается в итоге:</p>
<p style="text-align: center;"><a href="http://grigorkin.ru/wp-content/uploads/faceTest1.png"><img class="aligncenter size-full wp-image-606" title="Поиск лиц на фото с помощью OpenCV в PHP" src="http://grigorkin.ru/wp-content/uploads/faceTest1.png" alt="Поиск лиц на фото с помощью OpenCV в PHP" width="560" height="420" /></a></p>
<p style="text-align: center;"><a href="http://grigorkin.ru/wp-content/uploads/testFace3.png"><img class="aligncenter size-full wp-image-607" title="Поиск лиц на фото с помощью OpenCV в PHP" src="http://grigorkin.ru/wp-content/uploads/testFace3.png" alt="Поиск лиц на фото с помощью OpenCV в PHP" width="560" height="420" /></a></p>
<p style="text-align: center;"><a href="http://grigorkin.ru/wp-content/uploads/testFace2.png"><img class="aligncenter size-full wp-image-608" title="Поиск лиц на фото с помощью OpenCV в PHP" src="http://grigorkin.ru/wp-content/uploads/testFace2.png" alt="Поиск лиц на фото с помощью OpenCV в PHP" width="560" height="420" /></a></p>
<p style="text-align: left;">Вот так, нет ничего проще. Трудно будет обладателям не VPS-хостингов, которым доступ к конфигурации ОС и PHP ограничен.</p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2010/02/poisk-lic-na-foto-s-pomoshhyu-opencv-v-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Первые результаты SEO на www.zachet.me</title>
		<link>http://grigorkin.ru/2009/12/pervye-rezultaty-seo-na-www-zachet-me/</link>
		<comments>http://grigorkin.ru/2009/12/pervye-rezultaty-seo-na-www-zachet-me/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 11:47:09 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Интернет-коммерция]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[СЕО - опыт]]></category>
		<category><![CDATA[Стартапы]]></category>
		<category><![CDATA[зачет]]></category>
		<category><![CDATA[отчет]]></category>
		<category><![CDATA[продвижение]]></category>
		<category><![CDATA[сео]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=576</guid>
		<description><![CDATA[
			
				
			
		
Итак, проекту www.zachet.me всего два месяца с запуска, и есть первая пташка успеха на SEO-горизонте: +10 ТИЦ, немного, но другого ожидать не приходится от столь молодого проекта.
Что делал:

ЧПУ. Как оказалось, поисковые системы, по крайней мере Yandex уделяет очень большое внимание словам в URL, так что, никогда не пренебрегайте этим фактором. Если ссылка указывает на рефераты, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F12%2Fpervye-rezultaty-seo-na-www-zachet-me%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F12%2Fpervye-rezultaty-seo-na-www-zachet-me%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Итак, проекту <a href="http://www.zachet.me">www.zachet.me</a> всего два месяца с запуска, и есть первая пташка успеха на SEO-горизонте: +10 ТИЦ, немного, но другого ожидать не приходится от столь молодого проекта.<span id="more-576"></span></p>
<p>Что делал:</p>
<ul>
<li>ЧПУ. Как оказалось, поисковые системы, по крайней мере Yandex уделяет очень большое внимание словам в URL, так что, никогда не пренебрегайте этим фактором. Если ссылка указывает на рефераты, то сделайте её вида www.zachet.me/referat/ , а не www.zachet.me/cat.php?id=777.</li>
<li>Обмен ссылками с сайтами похожих тематик. Только тематический обмен имеет право на жизнь, за этим будущее, господа. Пользователь будет в недоумении, если увидит ссылку на ваш сайт рефератов на каком нить варезнике. Глупо, не правда ли? Точно так же рассуждают и поисковые системы. За тематическим обменом &#8211; будущее.</li>
<li>Оптимизация тегов meta description. Хоть и говорят, что гугл не обращает внимание на этот тег в выдаче, но косвенно он будет влиять на реакцию пользователей при обнаружении вас в списке выдачи. Дело в том, что гугл использует значение этого тега для построения сниппетов, а следовательно, если в сниппете будет то, что заинтересует клиента &#8211; он обязательно кликнет. А чтобы там было что то интересное &#8211; это задача СЕОшника:)</li>
</ul>
<p>Подводя итоги скажу, что будущее за трастовыми сайтами, WEB1.0 (нет, я не ошибся, я считаю, что следующее веяние интернета будет заключаться в возврату к WEB1.0 с некоторыми видоизменениями), постоянными ссылками.</p>
<p>Будьте счастливы, всех с Наступающим Новым Годом!</p>
<p><a href="http://grigorkin.ru/wp-content/uploads/0_202ed_d9748a4b_XL.jpg"><img class="aligncenter size-full wp-image-579" title="0_202ed_d9748a4b_XL" src="http://grigorkin.ru/wp-content/uploads/0_202ed_d9748a4b_XL.jpg" alt="0_202ed_d9748a4b_XL" width="555" height="416" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2009/12/pervye-rezultaty-seo-na-www-zachet-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Впечатления от скрещивания терминалов QIWI и интернет-магазина. Часть первая.</title>
		<link>http://grigorkin.ru/2009/11/vpechatleniya-ot-skreshhivaniya-terminalov-qiwi-i-internet-magazina-chast-pervaya/</link>
		<comments>http://grigorkin.ru/2009/11/vpechatleniya-ot-skreshhivaniya-terminalov-qiwi-i-internet-magazina-chast-pervaya/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 13:22:25 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Интернет-коммерция]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Проекты]]></category>
		<category><![CDATA[Электронные деньги]]></category>
		<category><![CDATA[qiwi]]></category>
		<category><![CDATA[интернет-магазин]]></category>
		<category><![CDATA[плат]]></category>
		<category><![CDATA[платежи]]></category>
		<category><![CDATA[проблемы]]></category>
		<category><![CDATA[разгильдяйство]]></category>
		<category><![CDATA[терминалы оплат]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=352</guid>
		<description><![CDATA[
			
				
			
		
Некоторое время назад я писал о системе приёма платежей на базе терминалов QIWI. На момент написания статьи я проводил поверхностное исследование этой системы и не вдавался в техническое подробности её использования. И вот, некоторое время спустя я добрался до пункта из списка задач под названием &#8220;Прикручивание приёма оплаты через QIWI&#8221; в своём блокноте, и честно [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F11%2Fvpechatleniya-ot-skreshhivaniya-terminalov-qiwi-i-internet-magazina-chast-pervaya%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F11%2Fvpechatleniya-ot-skreshhivaniya-terminalov-qiwi-i-internet-magazina-chast-pervaya%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Некоторое время назад я писал о системе приёма платежей на базе <a href="http://grigorkin.ru/2009/10/priyom-platezhej-cherez-terminaly-qiwi/">терминалов QIWI</a>. На момент написания статьи я проводил поверхностное исследование этой системы и не вдавался в техническое подробности её использования. И вот, некоторое время спустя я добрался до пункта из списка задач под названием &#8220;Прикручивание приёма оплаты через QIWI&#8221; в своём блокноте, и честно говоря, я был настолько поражён абсолютным, извините меня, разгильдяйством, которое творится в стане разработчиков данной системы&#8230;<span id="more-352"></span></p>
<p><strong>- Во-первых, совершенно непонятно по какому принципу разработчики разделили возможности методов взаимодействия с системой.</strong> Я имею ввиду таблицу ниже.</p>
<p><a href="http://grigorkin.ru/wp-content/uploads/connection.JPG"><img class="size-full wp-image-115 aligncenter" title="connection" src="http://grigorkin.ru/wp-content/uploads/connection.JPG" alt="connection" width="555" height="511" /></a></p>
<p>Когда я писал предыдущую статью я не понимал всю тяжесть ситуации. Почему при использовании HTTP-GET и XML типов взаимодействия система не может оповестить интернет-магазин об изменении состояния платежа? Я как программист не вижу никаких проблем в этом, включая проблемы security-policy характера. Получается, если вы по каким то причинам(а их, увы, немало) не можете использовать SOAP-взаимодействие, то придется ставить себе на интернет-магазин демон, опрашивающий статусы платежей. Или, скажем, система приёма платежей не сможет оповестить СМСкой успешность проведения платежа клиента, если вы используете HTTP-GET запрос. Где логика, спрашивается?</p>
<p><strong>- Во-вторых, почему-то совсем непонятно куда отправлять SOAP-запрос.</strong> В wsdl-файле (описатель методов работы с системой через SOAP) указан один адрес, не рабочий. В документе &#8211; описании протокола указан совершенно другой, и снова неработающий, адрес.</p>
<p><strong>- В-третьих, абсолютная неразбериха в панели управления магазином.</strong></p>
<p style="text-align: left;">Сразу после регистрации я обратил на странную пустоту в графе привязанного ко мне менеджера, но не придал этому значения, сославшись на временный глюк системы.</p>
<p style="text-align: center;"><a href="http://grigorkin.ru/wp-content/uploads/qiwiRightBlock.png"><img class="size-full wp-image-361 aligncenter" title="qiwiRightBlock" src="http://grigorkin.ru/wp-content/uploads/qiwiRightBlock.png" alt="qiwiRightBlock" width="295" height="256" /></a></p>
<p style="text-align: left;">Плюнув на SOAP-протокол я решил всё таки реализовать приём платежей посредством XML. И снова меня постигло лёгкое недоумение: постоянно приходила ошибка #150 в запросе на выставление счёта. Что эта ошибка значит по версии одного из документов: Ошибка авторизации (неверный логин/пароль). Порыскав по форумам люди указали на зависимость между этой ошибкой и отсутствием курирующих меня менеджеров, подсказали, что так же наталкивались на грабли. Решение этой проблемы заключается в том, что нужно написать саппорту и слёзно попросить их назначит мне какого-нибудь менеджера. Написал &#8211; жду.</p>
<p>В принципе, я понимаю что происходит в компании, разрабатывающей данное ПО. Примерно два года назад у меня уже был опыт взаимодействия с подобной фирмой, более узкой специализации, промышлявшей в моём родном городе примерно тем, чем и рассматриваемая система. Директор, и, возможно, он же менеджер слабо разбирается в IT, процесс разработки не поставлен, разработчики отнекиваются от задач, нет нормальной службы поддержки, исправление ошибок происходит со скоростью сонной черепахи, порождая всё новые и новые ошибки. Позор.</p>
<p>QIWI монополист на рынке приёма платежей через терминалы, поэтому делать ничего не остаётся, лишь подстраиваться под них и надеяться, что когда &#8211; нибудь нормальный менеджер или директор возьмет эту конторку в руку и вылепит то, с чем будет приятно работать, как, например с <a href="http://a1agregator.ru">а1 агрегатором смс-траффика</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2009/11/vpechatleniya-ot-skreshhivaniya-terminalov-qiwi-i-internet-magazina-chast-pervaya/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Что я вынес из последнего проекта на Action Script (Flex, Flash)</title>
		<link>http://grigorkin.ru/2009/10/chto-ya-vynes-iz-poslednego-proekta-na-action-script-flex-flash/</link>
		<comments>http://grigorkin.ru/2009/10/chto-ya-vynes-iz-poslednego-proekta-na-action-script-flex-flash/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 21:48:32 +0000</pubDate>
		<dc:creator>alexypnz</dc:creator>
				<category><![CDATA[Action Script (Flex, Flash)]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Проекты]]></category>

		<guid isPermaLink="false">http://grigorkin.ru/?p=235</guid>
		<description><![CDATA[
			
				
			
		
Итак, крайний проект, в котором я принимал непосредственное участие &#8211; это нарезалка mp3 для мобильника.
Лично мой вклад в рождение данного сервиса заключался в реализации веб-морды, то бишь флешки, в которой всё варится.

Нужно сделать красивую и сложную заливку?
Используйте класс BitmapData. Именно с его помощью реализована заливка градиентом выделенной области рингтонмейкера.
Пример
Определяем пиксельную карту:

fillProgressBarMap = new BitmapData&#40;1, 28, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F10%2Fchto-ya-vynes-iz-poslednego-proekta-na-action-script-flex-flash%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrigorkin.ru%2F2009%2F10%2Fchto-ya-vynes-iz-poslednego-proekta-na-action-script-flex-flash%2F&amp;source=grigorkin&amp;style=normal&amp;service=bit.ly&amp;service_api=R_afb3f311e34d0f5d967124d9942b29a3" height="61" width="50" /><br />
			</a>
		</div>
<p>Итак, крайний проект, в котором я принимал непосредственное участие &#8211; это <a href="http://www.ringtonemaker.ru/">нарезалка mp3 для мобильника</a>.</p>
<p>Лично мой вклад в рождение данного сервиса заключался в реализации веб-морды, то бишь флешки, в которой всё варится.</p>
<p><span id="more-235"></span></p>
<h3><strong>Нужно сделать красивую и сложную заливку?</strong></h3>
<p><strong><img class="alignleft size-full wp-image-240" title="gradient" src="http://grigorkin.ru/wp-content/uploads/gradient.png" alt="gradient" width="41" height="45" /></strong>Используйте класс BitmapData. Именно с его помощью реализована заливка градиентом выделенной области рингтонмейкера.</p>
<p><strong>Пример</strong><br />
Определяем пиксельную карту:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">fillProgressBarMap = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">BitmapData</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">28</span>, <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span>;
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">0</span>, 0x4ab0ff<span style="color: #000000;">&#41;</span>;
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">1</span>, 0x4ab0ff<span style="color: #000000;">&#41;</span>;
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">2</span>, 0x4ab0ff<span style="color: #000000;">&#41;</span>;
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">3</span>, 0x4ab0ff<span style="color: #000000;">&#41;</span>;
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">4</span>, 0xd1eafc<span style="color: #000000;">&#41;</span>;
...
fillProgressBarMap.<span style="color: #004993;">setPixel</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">27</span>, 0x29d2f7<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Собственно, рисуем:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">sliderValue.<span style="color: #004993;">graphics</span>.<span style="color: #004993;">beginBitmapFill</span><span style="color: #000000;">&#40;</span>fillProgressBarMap, <span style="color: #0033ff; font-weight: bold;">null</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span>;
sliderValue.<span style="color: #004993;">graphics</span>.<span style="color: #004993;">drawRect</span><span style="color: #000000;">&#40;</span>getLeftSliderX<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, <span style="color: #000000; font-weight:bold;">0</span>, getRightSliderX<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">-</span> getLeftSliderX<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">1</span>, sliderValue.<span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p></p>
<h3>Вызывать методы из родителя напрямую &#8211; зло, за которое нужно бить по рукам!</h3>
<p>Данная аксиома вертелась у меня в уме уже давно, но каждый раз я пытаюсь ею пренебречь. Думаю: ну надо &#8211; то всего один метод вызвать, зачем забор городить со всякими events? Но, в итоге снова возвращаюсь к этой к этой аксиоме и пользуюсь Event`ами. Евенты, они же события &#8211; сильнейшая сторона ActionScript.</p>
<p><strong>Пример</strong><br />
Говорим всем, что наш компонент может сгенерировать вот такой event:</p>

<div class="wp_syntax"><div class="code"><pre class="mxml" style="font-family:monospace;"><span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Metadata</span><span style="color: #7400FF;">&gt;</span></span>
    [Event(name=&quot;playFromMsec&quot;, type=&quot;com.view.MySlider.SliderEvent&quot;)]
<span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Metadata</span><span style="color: #7400FF;">&gt;</span></span></pre></div></div>

<p>Вешаемся на этот тип события в родителе:</p>

<div class="wp_syntax"><div class="code"><pre class="mxml" style="font-family:monospace;"><span style="color: #000000;"><span style="color: #7400FF;">&lt;view:MySlider</span> playFromMsec=<span style="color: #ff0000;">&quot;{ onSliderPlayFromMsec(event) }&quot;</span> <span style="color: #7400FF;">/&gt;</span></span></pre></div></div>

<p>Генерируем событие в дочернем компоненте:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> playFromPosEvent<span style="color: #000000; font-weight: bold;">:</span>SliderEvent = <span style="color: #0033ff; font-weight: bold;">new</span> SliderEvent<span style="color: #000000;">&#40;</span>SliderEvent.EVENT_PLAY_FROM_POS<span style="color: #000000;">&#41;</span>;
playFromPosEvent.pos = leftSliderMsecPos;
<span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span>playFromPosEvent<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p></p>
<h3>Используйте stopImmediatePropagation() и preventDefault() для отмены события</h3>
<p>Встала задача &#8211; показать по клику на кнопку &#8220;Help&#8221; поверх всего окно с помощью, потом по клику в любой области, даже по кнопке &#8211; закрыть его. Кстати говоря, впервые за свою скромную практику использования AS3 использовал stopImmediatePropagation и preventDefault. Задача была решена с использованием этих двух методов. Задача этих методов &#8211; остановить дальнейшее выполнение текущего эвента, очень полезная вещь, как ни крути.</p>
<p></p>
<h3>Не всегда для динамических элементов необходимы картинки состояний</h3>
<p><img class="alignleft size-full wp-image-271" title="button" src="http://grigorkin.ru/wp-content/uploads/button.png" alt="button" width="134" height="62" /> Большинство кнопок, если на них нет замысловатого градиента или фактуры можно реализовать с помощью пары VBox`ов, Label`ов и шаманства со стилями <img src='http://grigorkin.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p></p>
<h3>Не подбирайте значения стилей &#8220;на глаз&#8221;. Используйте Flex3 Style Explorer</h3>
<p><a href="http://grigorkin.ru/wp-content/uploads/Flex3StyleExplorer.swf"><img class="aligncenter size-full wp-image-286" title="Flex3StyleExplorer" src="http://grigorkin.ru/wp-content/uploads/flexStyleExplorer.png" alt="Flex3StyleExplorer" width="542" height="250" /></a></p>
<p></p>
<h3>Убираем размытие под Alert`ом</h3>
<p><a href="http://grigorkin.ru/wp-content/uploads/antiBlur1.png"><img class="aligncenter size-full wp-image-299" title="antiBlur" src="http://grigorkin.ru/wp-content/uploads/antiBlur1.png" alt="antiBlur" width="564" height="122" /></a></p>

<div class="wp_syntax"><div class="code"><pre class="mxml" style="font-family:monospace;"><span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Style</span><span style="color: #7400FF;">&gt;</span></span>
    Alert
    {
        modalTransparencyBlur: 0;
        modalTransparency: 0;
        modalTransparencyColor: #FFFFFF;
        modalTransparencyDuration: 10;
    }
<span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Style</span><span style="color: #7400FF;">&gt;</span></span></pre></div></div>

<p>Вот это, собственно всё, чем я хотел поделиться <img src='http://grigorkin.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://grigorkin.ru/2009/10/chto-ya-vynes-iz-poslednego-proekta-na-action-script-flex-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
