<?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>DimoninG.ru &#187; Программирование</title>
	<atom:link href="http://dimoning.ru/category/programmirovanie/feed" rel="self" type="application/rss+xml" />
	<link>http://dimoning.ru</link>
	<description>программирование сайтов и скриптов</description>
	<lastBuildDate>Wed, 14 Mar 2012 10:44:58 +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>Хранилище скриптов частого использования</title>
		<link>http://dimoning.ru/hranilische-skriptov-chastogo-ispolzovaniya.html</link>
		<comments>http://dimoning.ru/hranilische-skriptov-chastogo-ispolzovaniya.html#comments</comments>
		<pubDate>Sun, 30 Aug 2009 21:35:48 +0000</pubDate>
		<dc:creator>DimoninG</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://dimoning.ru/?p=1372</guid>
		<description><![CDATA[Пока курил на лестнице (заметка: не забыть написать как я круто бросил курить и какой я молодец), пришла в голову такая вот идея. Опишу коротко. У каждого сеошника, программиста или манимейкера есть скрипты, которые он часто использует. Ну например &#8211; сборка WP собственной настройки (для манимейкера), собственный движок (для программиста) или скрипт взлома платных порносайтов [...]]]></description>
			<content:encoded><![CDATA[<p>Пока курил на лестнице (заметка: <em>не забыть написать как я круто бросил курить</em> и какой я молодец), пришла в голову такая вот идея. Опишу коротко. У каждого сеошника, программиста или манимейкера есть скрипты, которые он часто использует. Ну например &#8211; сборка WP собственной настройки (для манимейкера), собственный движок (для программиста) или скрипт взлома платных порносайтов (для сеошника, конечно).</p>
<p>Обычно мы храним их на локальном компьютере. Но тут заключается следующая проблема. Например, я открываю движок, чтобы <em>скопировать</em> его в другой каталог для разработки нового сайта, но&#8230; забываю или мне становится лень и я начинаю править его <em>прямо там</em>, где открыл. Как результат &#8211; у меня вроде бы есть движок, но после правки для разных сайтов он, мягко говоря, отличается от оригинала.</p>
<p>Программисты меня поймут &#8211; если нужно было что-то поправить <strong>быстро</strong>, то код получается немного не красивым, верстка добавляется прямо в бизнес-логику и так далее. Несколько таких сайтов и всё, движка у меня нет (то есть он есть, но набит какой-то ерундой, которую нет времени удалить, т.к. все сайты как правило нужны &laquo;еще вчера&raquo;, а форматирование кода или, не дай Б-г, оптимизация &#8211; это лишнее время, заказчик не увидит разницы в генерации страниц за 0.001 сек и за 0.05 сек; а мне неприятно, да и с грязным кодом работать сложнее).</p>
<p><span id="more-1372"></span>Пришла в голову следующая (гениальная! какая еще?!<em> заметка: это самоирония, да</em>) идея. А что, если создать каталог прямо в блоге или на каком-нибудь другом своем сайте и закачивать туда <strong>только</strong> релизы скриптов (тот же движок, грабберы, парсеры, всякая муть программистская).</p>
<p>Каталог ставим под пароль и вуа-ля! Понадобился скрипт? Залез куда-нибудь вроде yoursite.ru/scripts/, ввел пароль, скачал, распаковал и начал работать.</p>
<p>Таким образом мы сами себя ограждаем от ненужных правок и всякой подобной мешающей работе ерунды. Сделал крутой двиг, залил, пусть релиз лежит. Скачал &#8211; и он новенький, аж блестит.</p>
<p>То же самое для манимейкера. Сделал какой-то новый сат, а в нем теперь куча левых плагинов. Так и разнес их по новым сателлитам &#8211; только место занимают.</p>
<p>Зачем такие сложности, спросит кто-нибудь? Отвечаю. Во-первых, это понтово и интереснее, чем хранить все на диске. Во-вторых, не все способны хранить релизы до пенсии, иногда оно случайно удаляется, форматируется, или что-нибудь в этом духе. Дальше &#8211; можно скачать релиз даже тогда, когда Вы работаете не на домашнем компьютере. А если заглянуть совсем в будущее, то это первый шаг к профи, к контролю версий, к коллективномой разработке чего-нибудь.</p>
<p><em>Постовой: <a href="http://www.job.ru/career/public/education">обучение</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://dimoning.ru/hranilische-skriptov-chastogo-ispolzovaniya.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ну и зачем нам это ООП?</title>
		<link>http://dimoning.ru/nu-i-zachem-nam-eto-oop.html</link>
		<comments>http://dimoning.ru/nu-i-zachem-nam-eto-oop.html#comments</comments>
		<pubDate>Fri, 17 Jul 2009 06:37:23 +0000</pubDate>
		<dc:creator>DimoninG</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://dimoning.ru/?p=1246</guid>
		<description><![CDATA[Постовой: Новый авторский seo блог вебмастера, подпишись и ты!
&#171;Ну и зачем нам это ООП?&#187; &#8211; думал я, изучая веб-программирование. Мне действительно непонятно (было), зачем в PHP засунули ООП (то есть классы). Оно было очень удобной штукой, когда, например, описывает злобную вражину в какой-нибудь игре. Особенно, если врагов много &#8211; массив или список объектов чертовски удобно [...]]]></description>
			<content:encoded><![CDATA[<p>Постовой: Новый авторский <a href="http://sarji.org">seo блог вебмастера</a>, подпишись и ты!</p>
<p>&laquo;Ну и зачем нам это ООП?&raquo; &#8211; думал я, изучая веб-программирование. Мне действительно непонятно (было), зачем в PHP засунули ООП (то есть классы). Оно было очень удобной штукой, когда, например, описывает злобную вражину в какой-нибудь игре. Особенно, если врагов много &#8211; массив или список объектов чертовски удобно обрабатывать (по сравнению с кучей глобальных переменных, например).</p>
<p>Но в PHP, как правило, не нужно создавать ничего такого &#8211; страница в одном экземпляре, подключение к базе одно и так далее.</p>
<p>Читая книгу по C++, я нашел там описание, которое помогло мне понять и расставить эти вопросы по полочкам. Попытаюсь объяснить это своими словами.</p>
<p><span id="more-1246"></span>Давно-давно, когда я еще не родился, язык С был структурным языком, в нем не было классов. Со временем программы становились все больше, а уследить за ними и искать в них ошибки становилось все сложнее (то есть когда программы стали действительно большие &#8211; от 100.000 строк). Поэтому крутой чувак Страуструп (читаю и ужасаюсь каждый раз &#8211; &laquo;Страус+труп&raquo;) решил язык Цэ немного подремонтировать &#8211; добавил в него классы.</p>
<p>Суть тут вот в чем. Во времена языка С на первый план выходил код, который обрабатывает какие-то данные. Под кодом я сейчас имею ввиду разные операторы, обрабатывающие переменные, а под данными сами переменные.</p>
<p>ООП же наоборот, отталкивается от того, что данные &#8211; важнее кода. Сам по себе объект (экземпляр класса) &#8211; это данные, а-ля переменная. Они ставятся во главу угла и сам код, получается, состоит из одних только данных.</p>
<p>То есть класс, если упрощенно, это переменная, которая может сама изменять свое значение по сложным алгоритмам. Круто, правда? Больше того. Класс можно составить так, что его переменные сможет обрабатывать только он (то есть из вне они будут не доступны), таким образом это почти что маленькая вселенная. Одна маленькая, но гордая &laquo;переменная&raquo; :) Интересная точка зрения, не находите?</p>
<p>Чем же это так помогло несчастным программистам 80ых? Дело в том, что когда программа состоит из таких вот &laquo;маленьких миров&raquo; (то есть множество классов, друг от друга не зависящих), уследить за тем, что происходит гораздо легче. Больше того, если что-то сломалось &#8211; сразу понятно, где искать ошибку (конечно, я сейчас не о том, что классы сами по себе тоже могут добавить ошибок при неправильном использовании).</p>
<p>Надеюсь, донес до Вас светлую мысль. И, кстати, в PHP классы &#8211; это жалкая пародия. Вот в C++ это да&#8230; Попробуй разберись во всех ньюансах.</p>
<p>UPD: Чтобы не быть голословным, попробую привести простой пример, даже не смотря на то, что я еще не проснулся.</p>
<p>MyClass *b = new MyClass;<br />
MyClass a = b;</p>
<p>Будут ли какие-то неочевидные глюки программы при вполне правильном уничтожении класса &laquo;а&raquo;, если в деструкторе освобождается какая-то занятая свойствами класса память?</p>
<p>Постовой: Новая <a href="http://partner.fabricasaitov.ru/">партнерская программа</a> от fabricasaitov.ru. Заработай уже сегодня!</p>
]]></content:encoded>
			<wfw:commentRss>http://dimoning.ru/nu-i-zachem-nam-eto-oop.html/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Метод К-средних (K-means), исходник на C++ (Builder)</title>
		<link>http://dimoning.ru/metod-k-srednih-k-means-ishodnik-na-c-builder.html</link>
		<comments>http://dimoning.ru/metod-k-srednih-k-means-ishodnik-na-c-builder.html#comments</comments>
		<pubDate>Tue, 23 Jun 2009 12:27:24 +0000</pubDate>
		<dc:creator>DimoninG</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://dimoning.ru/?p=1199</guid>
		<description><![CDATA[Народ, не хочу никого пугать, но сейчас пост будет о кластеризации методом K-средних. Помогал знакомой с заданием из универа, родилась прога. Решил поделиться. Может вам никому и не надо, а кому-то где-то точно будет нужно (я сам пока гуглил, чуть пальцы не сломал; даже описание алгоритма еле нашел).
Внимание, рассказывает профан; все объяснения даются приближенные, &#171;чтобы [...]]]></description>
			<content:encoded><![CDATA[<p>Народ, не хочу никого пугать, но сейчас пост будет о кластеризации методом K-средних. Помогал знакомой с заданием из универа, родилась прога. Решил поделиться. Может вам никому и не надо, а кому-то где-то точно будет нужно (я сам пока гуглил, чуть пальцы не сломал; даже описание алгоритма еле нашел).</p>
<p><em>Внимание, рассказывает профан; все объяснения даются приближенные, &laquo;чтобы понять&raquo;. За подробным описанием алгоритмов и точными определениями &#8211; в энциклопедию.</em> Что такое кластеризация? Грубо говоря &#8211; это деление по группам некоторого количества объектов. Например, у нас в огромной куче смешались чебурашки, велосипеды и роботы-убийцы-детей. Если производить кластеризацию по признаку, то чебурашек мы отнесем в одну группу, велосипеды &#8211; в другу, а роботов-убийц-детей в третью (ту, что рядом с детским садиком у меня под окном). Признак, по которому мы относим один предмет в одну группу, а другой в другую называется метрикой. Грубо говоря, метрика &#8211; это просто способ отделить один предмет от другого, используя какие-то точные рассчеты. Самый простой вариант &#8211; это когда метрикой является расстояние.</p>
<p>Кластеризация (деление на кластеры) может быть и немного другой. Если в первом примере с 3 кучами вещей нам сказано разделить их на четыре кластера, то наверняка велосипеды попадут в кучу с чебурашками, а для каких-то детей не найдутся их роботы-убийцы.</p>
<p>Есть метод, называется метод кластеризации К-средних, который позволяет &laquo;расфасовать&raquo; объекты как раз по второму принципу. То есть мы заранее задаем количество кластеров, а алгоритм сам разделяет объекты на это количетсво.</p>
<p>В данном случае мы будем работать с точками на плоскости. Чтобы сразу можно было наглядно все представить, выложу скриншот программы на C++ Builder (скачать можно по ссылке в конце статьи).</p>
<p><a href="http://dimoning.ru/wp-content/uploads/2009/06/kluster.jpg"><img class="aligncenter size-full wp-image-1200" title="kluster" src="http://dimoning.ru/wp-content/uploads/2009/06/kluster.jpg" alt="kluster" width="344" height="348" /></a></p>
<p>Итак. Все точки, обозначенные&#8230; точками &#8211; это&#8230; точки&#8230; те, которые на плоскости. Во сказал. Кстати, почему-то точки тут немного похожи на маленькие ромбики &#8211; в общем, это они и есть. Квадратики &#8211; это центры кластеров. Линии от точек до центров нужны просто для наглядности, чтобы сразу видеть к какому центру принадлежит точка (их можно убрать, сняв галку &laquo;линии&raquo;). Хотя они и одного цвета, а центр обведен ченым и квадратный, я решил добавить линии.</p>
<p><span id="more-1199"></span></p>
<p>Так вот. Хотя для многих студентов достаточно только программы, я расскажу как работает сам алгоритм кластеризации. Он интеративный. То есть он повторяется несколько раз, пока не &laquo;сойдется&raquo;. Сходимость в данном случае значит, что с каждоый итерацией (повторением вычислений) мы все точнее приближаемся к правильному ответу. А &laquo;сошелся&raquo; в данном случае значит, что мы нашли правильный ответ или мы очень близко к нему (то есть нашлось число с небольшой погрешностью, на которую мы плюем и топчем ногами).</p>
<p>Дано. 50 точек, расположенных случайным образом на плоскости 20 на 20 (не важно даже каких единиц). Нужно распределить эти точки по кластерам алгоритмом К-средних (или K-means). Алгоритм действует так:</p>
<p>1) Сначала случайным образом выставляем на этой же плоскости k центров кластеров. Центр кластера называется центроидом. Просто рандомом, от балды, наплевательски, кое-какерски. Без начального положения центроидов не удастся запустить алгоритм (увидите почему). Как их расставить &#8211; дело ваше, можно самостоятельно вводить координаты, можно применить еще какой-нибудь алгоритм.</p>
<p>2) Начинается вычисление кластеров в цикле. Он простой как&#8230; куча дерьма.</p>
<p>2.1) Сначала мы &laquo;привязываем&raquo; каждую точку к тому центроиду, к которому она ближе. Т.к. центроид является центром кластера, то можно сказать, что мы относим каждую точку к тому кластеру, к центру которого она ближе.</p>
<p>2.2) Когда все точки привязаны и ни одна от нас не убежала, нужно пересчитать координаты центроидов. Для этого мысленно вписываем весь кластер в прямоугольник и ставим центроид туда, где пересекутся его диагонали (в середину, короче).  На скриншоте это очень хорошо видно. Обведите, например, синий кластер прямоугольником и вы увидите, что синий центроид стоит в его середине.</p>
<p>2.3) Повторяем с шага 2.1 до тех пор, пока центроиды не перестанут менять своего положения. Если они перестали менять положение, значит алгоритм сошелся, мы крутые перцы и все надрали зад. Кстати, как правило алгоритм сходится где-то за 2-6 итераций. Но в теории возможно, что алгоритм не сойдется вообще, поэтому я на всякий случай включил в него &laquo;защиту&raquo; &#8211; сделал максимальное число итераций 30. Это гарантирует, что программа не зависнет.</p>
<p><em>Исходник потерян за давностью лет, простите. Хотя с точки зрения программирования &#8211; ничего сложного.</em></p>
<p>Постовые: <a href="http://webwalker.ru">обратные ссылки</a>, <a href="http://smopro.ru/category/blog/tweemru-servis-skryitoy-reklamyi-v-twitter/">реклама в Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dimoning.ru/metod-k-srednih-k-means-ishodnik-na-c-builder.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Задачки по программированию</title>
		<link>http://dimoning.ru/zadachki-po-programmirovaniyu.html</link>
		<comments>http://dimoning.ru/zadachki-po-programmirovaniyu.html#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:17:06 +0000</pubDate>
		<dc:creator>DimoninG</dc:creator>
				<category><![CDATA[задачи]]></category>

		<guid isPermaLink="false">http://dimoning.ru/?p=972</guid>
		<description><![CDATA[Реклама: вконтакте, металлические контейнеры, обслуживание компьютеров

Кого-нибудь интересуют логические задачи по программированию? Ну, в качестве разминки для мозгов. А-ля &#171;заданы вершины куба и точка в пространстве, напишите программу, которая узнает лежит ли эта точка внутри куба&#187;, только сложнее? Меня обычно интересуют и я подобные штуки периодически решаю. Если есть желание, отпишитесь тут, буду устраивать конкурсы :) [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Реклама: <a href="http://FMYL.RU/">вконтакте</a>, <a href="http://energoalternativa.com/">металлические контейнеры</a>, <a href="http://abonent-pc.ru/">обслуживание компьютеров</a>
</p></blockquote>
<p>Кого-нибудь интересуют логические задачи по программированию? Ну, в качестве разминки для мозгов. А-ля &laquo;заданы вершины куба и точка в пространстве, напишите программу, которая узнает лежит ли эта точка внутри куба&raquo;, только сложнее? Меня обычно интересуют и я подобные штуки периодически решаю. Если есть желание, отпишитесь тут, буду устраивать конкурсы :) </p>
<p>Например для C++ интересно было бы: &laquo;не используя функции работы со строками определите, какая из строк длиннее, разбейте самую длинную строку (по пробелам) в массив, выделив для него память с помощью malloc и выведите его содержимое на экран&raquo;. Ну что-то вроде того.</p>
<p>Почему-то я обожаю делать подобные бессмысленные и неоплачиваемые задачи. А вот реальные задачи а-ля &laquo;поиск по сайту&raquo; меня вообще не вдохновляют.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimoning.ru/zadachki-po-programmirovaniyu.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
