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

<channel>
	<title>the log &#187; web dev.</title>
	<atom:link href="http://yentsun.com/log/category/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://yentsun.com/log</link>
	<description>журнал Максима Коринца</description>
	<lastBuildDate>Mon, 09 Apr 2012 17:29:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Этапы создания сайта</title>
		<link>http://yentsun.com/log/2010/07/16/etapy-sozdaniya-saita/</link>
		<comments>http://yentsun.com/log/2010/07/16/etapy-sozdaniya-saita/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:39:27 +0000</pubDate>
		<dc:creator>yentsun</dc:creator>
				<category><![CDATA[web dev.]]></category>

		<guid isPermaLink="false">http://yentsun.com/log/?p=145</guid>
		<description><![CDATA[Пишу эту статью больше для себя как обобщение опыта и памятку. Такой своеобразный план действий чтобы ничего не забыть. В квадратных скобках даю программы, которыми наиболее удобно, по моему мнению, пользоваться на данном этапе. Составление технического задания (далее ТЗ) либо готовое задание от заказчика либо интервью с ним + пометки и самостоятельное  составление ТЗ [лист [...]]]></description>
			<content:encoded><![CDATA[<p>Пишу эту статью больше для себя как обобщение опыта и памятку. Такой своеобразный план действий чтобы ничего не забыть. В квадратных скобках даю программы, которыми наиболее удобно, по моему мнению, пользоваться на данном этапе. <span id="more-145"></span></p>
<ol>
<li>Составление технического задания (далее ТЗ)
<ul>
<li>либо готовое задание от заказчика</li>
<li>либо интервью с ним + пометки и самостоятельное  составление ТЗ <span style="color: #888888;">[лист бумаги, карандаш]</span></li>
</ul>
</li>
<li>Анализ сайтов конкурентов и с похожей тематикой
<ol>
<li>просмотреть 5-6 сайтов, зафиксировать полностью их функционал <span style="color: #888888;"><span style="color: #888888;">[</span><a href="http://www.xmind.net/"><span style="color: #888888;">Xmind</span></a><span style="color: #888888;">]</span></span></li>
<li>определить, что важно и интересно, зафиксировать <span style="color: #888888;">[бумага+карандаш или просто память]</span></li>
</ol>
</li>
<li>Сделать прототип сайта (мокап, вайрфрейм и т. д.), для заказчика я употребляю термин &laquo;чертеж&raquo; <span style="color: #888888;">[</span><a href="http://www.balsamiq.com/products/mockups"><span style="color: #888888;">Balsamiq Mockup</span></a><span style="color: #888888;">, </span><a href="http://gomockingbird.com/"><span style="color: #888888;">Mockingbird</span></a><span style="color: #888888;"> - в ней прототип можно связать ссылками и отправить заказчику почти как рабочий сайт]</span>
<ol>
<li>можно начать с ключевой страницы сайта (главная, страница товара и т. д.)</li>
<li>создать, не ленясь, прототипы <strong>всех</strong> страниц, всплывающих блоков без исключения</li>
</ol>
</li>
<li>Перевести прототип в html+css и <em>аккуратно показать заказчику*</em> (иногда это куда эффектнее и эффективнее, чем первым показывать макет из фотошопа) <span style="color: #888888;"><span style="color: #888888;">[текстовый редактор+</span><a href="http://getfirebug.com/"><span style="color: #888888;">Firebug</span></a><span style="color: #888888;">]</span></span></li>
</ol>
<p>Продолжение следует&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://yentsun.com/log/2010/07/16/etapy-sozdaniya-saita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Раз и навсегда об MVC</title>
		<link>http://yentsun.com/log/2010/05/11/the-mvc/</link>
		<comments>http://yentsun.com/log/2010/05/11/the-mvc/#comments</comments>
		<pubDate>Tue, 11 May 2010 15:06:19 +0000</pubDate>
		<dc:creator>yentsun</dc:creator>
				<category><![CDATA[web dev.]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://yentsun.com/log/?p=62</guid>
		<description><![CDATA[Знаете ли вы что такое Model-View-Contriller? Если знаете &#8211; умеете ли правильно понимать и применять эту модель на практике? Нет ли ощущения недосказанности и неловкости насчет нее? В этом посте я пытаюсь расставить все на свои места. Столкнувшись впервые с MVC-моделью в разработке веб-приложений (Ruby On Rails), я не сразу понял идею. Вроде &#171;что-то где-то [...]]]></description>
			<content:encoded><![CDATA[<p><em>Знаете ли вы что такое Model-View-Contriller? Если знаете &#8211; умеете ли правильно понимать и применять эту модель на практике? Нет ли ощущения недосказанности и неловкости насчет нее? В этом посте я пытаюсь расставить все на свои места.<span id="more-62"></span></em></p>
<p>Столкнувшись впервые с MVC-моделью в разработке веб-приложений (<strong>Ruby On Rails</strong>), я не сразу понял идею. Вроде &laquo;что-то где-то отделено от другого и это лучше чем все в кучу&raquo;. Поняв тогда, что не смогу осилить этот фреймворк &#8211; снова вернулся к MODx и PHP . Спустя пару лет услышал о <strong>symfony </strong>и твердо решил изучить ее, раз уж среда с моделью MVC существует и для родного бюджетного PHP.</p>
<p><a href="http://ru.wikipedia.org/wiki/Model-View-Controller">Определение из Википедии</a>:</p>
<blockquote><p><strong>Model-view-controller</strong> (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты.</p></blockquote>
<p>Итак, я стал понимать что <strong>модель</strong> &#8211; вроде как &laquo;модель данных&raquo; для БД, <strong>вид</strong> &#8211; просто HTML-шаблон с указанием мест вывода данных, а <strong>контроллер</strong> &#8211; связующее между ними звено. То есть:</p>
<ol>
<li>Пользователь запрашивает некий url</li>
<li>Вид, соответствующий этому url, обращается к контроллеру</li>
<li>Контроллер обрабатывает запрос и получает данные из модели (?) и, возможно, обрабатывает уже полученные данные</li>
<li>Контроллер отсылает данные в вид</li>
<li>Пользователь видит шаблон с данными</li>
</ol>
<p style="text-align: center;">Вроде как, все понятно &#8211; можно изобразить работу этой модели следующей схемой:</p>
<p><a href="http://yentsun.com/log/wp-content/uploads/2010/05/mvc.gif"><img class="size-full wp-image-68   aligncenter" title="mvc" src="http://yentsun.com/log/wp-content/uploads/2010/05/mvc.gif" alt="" width="192" height="267" /></a></p>
<p>Схема, иллюстрирующая модель в Википедии выглядит же вот как:</p>
<p><img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/ModelViewControllerDiagram2.svg/350px-ModelViewControllerDiagram2.svg.png" alt="" width="350" height="160" /></p>
<p style="text-align: left;">Если прочитать оттуда же следующее утверждение:</p>
<blockquote>
<p style="text-align: left;">Важно отметить, что как представление, так и поведение зависят от  модели. Однако модель не зависит ни от представления, ни от поведения.  Это одно из ключевых достоинств подобного разделения.</p>
</blockquote>
<p style="text-align: left;">то, например, у меня происходит легкий диссонанс. Вроде как, &laquo;модель не зависит ни от вида, ни от контроллера &laquo;. На схеме от Википедии видны &laquo;прямая связь&raquo; и направление от вида к модели, то есть вид напрямую влияет (а может передает данные) модели? То ли я неправильно читаю схему, то ли в определении от Википедии закралась ошибка, то ли <em>неизвестный третий фактор</em>.</p>
<p style="text-align: left;">Не смотря на все это, я все-таки начал работу и построил небольшое приложение на symfony. Я усиленно пользовался видео-уроками и читал блоги на эту тему. Сейчас я не помню на 100%, но, вроде бы, вся бизнес-логика (обработка данных, перекрестный сбор их и прочее) там содержалась в контроллерах. &laquo;Модель&raquo; была просто структурой данных в БД (по сути конфиг-файл). С этими знаниями я перешел к разработке в <strong>CodeIgniter</strong>.</p>
<p style="text-align: left;">В этом фреймворке, славящимся своей быстротой и гибкостью, бизнес-логика может содержаться как в модели так и в контроллере. Это слегка сбило меня с толку. В процессе работы вышло само-собой, что модель (по аналогии с опытом symfony) у меня лишь содержала сбор данных из БД, а основным рабочим блоком были контроллеры. А иной раз выходило, что часть бызнес-логики попадала в модель&#8230; Вобщем, намечался небольшой бардак.</p>
<p style="text-align: left;">И вот, совсем недавно, подписавшись на новостную рассылку от <em>thinkvitamin.com</em>,  я получил в качестве подарка 44 страницы резюме докладов <strong>Райана Сингера</strong>, ведущего дизайнера интерфейсов из <strong>37signals</strong>. Скажу сразу, для меня интерфейсы приложений от этой студии (basecamp и др.) являются эталоном и объектом поклонения. И как же хорошо, что он и слушатели подняли тему MVC! Все сразу стало на свои места.</p>
<blockquote>
<p style="text-align: left;">Think of the model like this:<br />
What are the things our app needs to<br />
keep track of, and how do they relate to<br />
each other?</p>
</blockquote>
<p style="text-align: left;">и еще &#8211; модель в словах:</p>
<blockquote>
<p style="text-align: left;">There are <span style="color: #ff6600;">projects</span> and each <span style="color: #ff6600;">project</span> has<br />
<span style="color: #ff6600;">messages</span>, <span style="color: #ff6600;">to-do lists</span>, and <span style="color: #ff6600;">milestones</span>.”<br />
“<span style="color: #ff6600;">Messages</span> can have <span style="color: #ff6600;">comments</span>.”<br />
“<span style="color: #ff6600;">To-do lists</span> are made up of <span style="color: #ff6600;">to-do items</span>.</p>
</blockquote>
<p style="text-align: left;">Довольно грязный дословный перевод:  модель &#8211; это все те вещи, которые ваше приложение должно отслеживать/обрабатывать и как эти вещи соотносятся друг с другом. Теперь, собрав мысли в новое определение, получаем:</p>
<ul>
<li><strong>модель</strong> содержит всю бизнес-логику приложения &#8211; никаких лишних шестеренок в контроллере или виде.</li>
<li><strong>контроллер</strong> &#8211; просто как драйвер между устройством и компьютером &#8211; выполняет в основном &laquo;спинно-мозговые&raquo; и транспортные операции (upd: если представить, что ваше приложение будет работать не для веб-браузера, а для десктопа &#8211; по идее, вы просто должны заменить контроллер)</li>
<li><strong>вид</strong> &#8211; (x)html-шаблон, с которым в большей степени работает уже дизайнер-верстальщик, чем меньше там программного кода вообще, тем лучше</li>
</ul>
<p>Я лично следующий свой проект буду начинать с бóльшим воодушевлением, чем раньше. Одним бардаком меньше.</p>
]]></content:encoded>
			<wfw:commentRss>http://yentsun.com/log/2010/05/11/the-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WYSIWYG от сноба для блондинки</title>
		<link>http://yentsun.com/log/2010/05/07/wysiwyg-for-blondes/</link>
		<comments>http://yentsun.com/log/2010/05/07/wysiwyg-for-blondes/#comments</comments>
		<pubDate>Fri, 07 May 2010 18:12:15 +0000</pubDate>
		<dc:creator>yentsun</dc:creator>
				<category><![CDATA[web dev.]]></category>
		<category><![CDATA[WYMeditor]]></category>
		<category><![CDATA[обзор]]></category>
		<category><![CDATA[хвалы]]></category>

		<guid isPermaLink="false">http://yentsun.com/log/?p=51</guid>
		<description><![CDATA[Их развелось слишком много. Помню времена когда был tinyMCE и FCKeditor (и HTMLArea) и ломать голову, что прикрутить к системе управления сайтом не приходилось. Сейчас возникла необходимость выбрать пуленепробиваемый редактор, чтоб с защитой от дурака и без сохранения мусорного кода при вставке. Перечислю четко критерии моего выбора: прежде всего, популярность среди разработчиков (необязательно всеобщая) легкий [...]]]></description>
			<content:encoded><![CDATA[<p>Их развелось слишком много. Помню времена когда был <strong>tinyMCE</strong> и <strong>FCKeditor</strong> (и <strong>HTMLArea</strong>) и ломать голову, что прикрутить к системе управления сайтом не приходилось. Сейчас возникла необходимость выбрать пуленепробиваемый редактор, чтоб с защитой от дурака и без сохранения мусорного кода при вставке.<span id="more-51"></span></p>
<p>Перечислю четко критерии моего выбора:</p>
<ol>
<li><span style="color: #993300;">прежде всего, популярность среди разработчиков (необязательно всеобщая)</span></li>
<li><span style="color: #993300;">легкий вес</span></li>
<li><span style="color: #993300;">вставка из Ворда или скопированного текста с сайта должна исключать мусорный код (однако сохранять параграфы) на выходе</span></li>
<li><span style="color: #993300;">необходимый минимум функций и возможность дополнения</span></li>
<li><span style="color: #993300;">редактор должен быть именно wysiwyg (для блондинок), но не язык разметки <em>markup</em> или <em>textile</em></span></li>
<li><span style="color: #993300;">желательно базирование на jQuery</span></li>
</ol>
<p>Не стану описывать в деталях все пересмотренные варианты, и почему они не подошли. Я потратил почти день и так и не смог найти нужного редактора.  Большинство отметались из-за сохранения на выходе мусора &laquo;предыдущей разметки&raquo;, несмотря на  специальные функции &laquo;Вставка из Ворда&raquo; и прочее. Отмечу, что встретились достойные разработки нашего российского и даже китайского производства.</p>
<p>Лишь на следующий день, на утро после чашки кофе, как снег на голову упал &laquo;мой&raquo; редактор &#8211; <a href="http://www.wymeditor.org/">WYMeditor</a>. Достаточно невзрачный по нынешним меркам сайт сначала отпугнул. Однако, я уже был в отчаянии, поэтому решил установить и попробовать. Итак, докладываю:</p>
<ul>
<li><span style="color: #008000;">WYMeditor &#8211; <em>единственный из протестированных </em></span><span style="color: #008000;">(за  исключением <a href="http://markitup.jaysalvat.com/home/">markItUp!</a>)</span><span style="color: #008000;"><em>, который &laquo;очищает&raquo; вставляемый код</em> и красиво разбивает текстовые блоки &#8211; параграфы, цитаты, списки</span></li>
<li><span style="color: #008000;">он весьма легкий и, как мне показалось, на 100% настраиваемый. Я могу легко добавить свою панель кнопок, переместить их, легко могу контролировать &laquo;статусную строку&raquo; под зоной редактирования.</span></li>
<li><span style="color: #008000;">в нем есть &laquo;темы&raquo;, применив одну из них (самую аскетичную), у меня получилось неожиданно органично визуально интегрировать редактор в дизайн системы</span></li>
<li><span style="color: #008000;">стабильный! за все время работы не возникало неожиданностей &#8211; кредит доверия возрос</span></li>
</ul>
<p><a href="http://yentsun.com/log/wp-content/uploads/2010/05/wym.png"><img class="alignnone size-full wp-image-52" title="wym" src="http://yentsun.com/log/wp-content/uploads/2010/05/wym.png" alt="" width="600" height="333" /></a></p>
<p>И вот, я, будучи дотошным занудным снобом могу сдать систему с этим редактором в эксплуатацию самой легкомысленной блондинке! И надеяться на чистый, &laquo;валидный&raquo; код текстов, производимый ею на сайте&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://yentsun.com/log/2010/05/07/wysiwyg-for-blondes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Краткое руководство по Panoramio API</title>
		<link>http://yentsun.com/log/2010/05/06/panoramio-api/</link>
		<comments>http://yentsun.com/log/2010/05/06/panoramio-api/#comments</comments>
		<pubDate>Thu, 06 May 2010 16:32:10 +0000</pubDate>
		<dc:creator>yentsun</dc:creator>
				<category><![CDATA[web dev.]]></category>
		<category><![CDATA[Panoramio API]]></category>
		<category><![CDATA[руководство]]></category>
		<category><![CDATA[фото]]></category>

		<guid isPermaLink="false">http://yentsun.com/log/?p=37</guid>
		<description><![CDATA[В процессе работы над одним туристическим сайтом столкнулся  с необходимостью оформлять страну или курорт с помощью фотографий. Понятное дело &#8211; придумал механизм загрузки фото и готово.  Где нам взять много красивых картинок какого-нибудь живописного места? Из интернета же &#8211; можно найти по тегу во Фликре, например, можно в Пикасе. Найдем, скачаем себе и загрузим на [...]]]></description>
			<content:encoded><![CDATA[<p>В процессе работы над одним туристическим сайтом столкнулся  с необходимостью оформлять страну или курорт с помощью фотографий. Понятное дело &#8211; придумал механизм загрузки фото и готово.  Где нам взять много красивых картинок какого-нибудь живописного места? Из интернета же &#8211; можно найти по тегу во Фликре, например, можно в Пикасе. Найдем, скачаем себе и загрузим на наш тур-сайт. Непыльно и достаточно интересно.</p>
<p>Но что если у вас есть тяга все автоматизировать? <span id="more-37"></span>Что если вы хотите исключить из цепочки действий (выше) поиск, скачку и загрузку на сайт фотографий? Скажем, зададим страну или курорт на карте Google и пусть фотографии волшебным образом появятся на сайте сами. Хорошие новости &#8211; это вполне себе возможно, даже очень просто с помощью сервиса <a href="http://www.panoramio.com/">Panoramio</a>.</p>
<p><img src="http://www.panoramio.com/img/header-logo.png" alt="logo" /></p>
<p>Этот сервис позволяет выдать набор фотографий по заданному географическому &laquo;квадрату&raquo; (или даже прямоугольнику &#8211; не разбирался в этом глубоко). Если у вас на сайте географические локации хранятся в формате Google Maps (как и у меня), то достаточно &laquo;нарастить&raquo; квадрат от точки-центра, задав нужный размер квадрата. У меня он разный для стран и курортов.</p>
<p><a href="http://yentsun.com/log/wp-content/uploads/2010/05/kuba.jpg"><img class="alignnone size-full wp-image-47" title="kuba" src="http://yentsun.com/log/wp-content/uploads/2010/05/kuba.jpg" alt="" width="709" height="182" /></a></p>
<p><strong>Пример.</strong> Куба задана в базе следующими координатами <strong>21.637005211106306, -77.76123046875</strong> (просто произвольная точка на ее территории). Нарастим квадрат в один градус широты и долготы (примерно 100 км от центра, так как земля не шар а эллипс &#8211; точные вычисления достаточно сложны) и получим:</p>
<ul>
<li>maxX: -76.76123046875</li>
<li>maxY: 22.637005211106306</li>
<li>minX: -78.76123046875</li>
<li>minY: 20.637005211106306</li>
</ul>
<p>Теперь достаточно создать <a href="http://msdn.microsoft.com/ru-ru/magazine/dd315413.aspx#id0070003">REST</a>-запрос к сервису Panoramio: <code>http://www.panoramio.com/map/get_panoramas.php?order=popularity&amp;set=public&amp;from=0&amp;to=27&amp;minx=-78.76123046875&amp;miny=20.637005211106306&amp;maxx=-76.76123046875&amp;maxy=22.637005211106306&amp;size=square&amp;callback=?</code></p>
<p>В ответ мы получим JSON-данные о фотографиях, типа:</p>
<pre><code> {
      "count": 773840,"photos": [
        {
          "photo_id": 532693,
          "photo_title": "Wheatfield in afternoon light",
          "photo_url": "http://www.panoramio.com/photo/532693",
          "photo_file_url": "http://static2.bareka.com/photos/medium/532693.jpg",
          "longitude": 11.280727,
          "latitude": 59.643198,
          "width": 500,
          "height": 333,
          "upload_date": "22 January 2007",
          "owner_id": 39160,
          "owner_name": "Snemann",
          "owner_url": "http://www.panoramio.com/user/39160",
        },
        {
          "photo_id": 505229,
          "photo_title": "Etangs près de Dijon",
          "photo_url": "http://www.panoramio.com/photo/505229",
          "photo_file_url": "http://static2.bareka.com/photos/medium/505229.jpg",
          "longitude": 5.168552,
          "latitude": 47.312642,
          "width": 350,
          "height": 500,
          "upload_date": "20 January 2007",
          "owner_id": 78506,
          "owner_name": "Philippe Stoop",
          "owner_url": "http://www.panoramio.com/user/78506"
        }, ...
      ]
    }
</code></pre>
<p>С помощью несложной функции (jQuery) можно налету сформировать галерею:</p>
<pre><code>$.getJSON(url,function(data) {
  if (data.photos.length&gt;0) {
  $(data.photos).each(function() {
     $(target).append('&lt;a id="'+this.photo_id+'" title="'+this.photo_title+'" rel="pano" href="http://mw2.google.com/mw-panoramio/photos/medium/'+this.photo_id+'.jpg"&gt;&lt;img src="'+this.photo_file_url +'" alt="'+this.photo_title+'" width="60" height="60" /&gt;&lt;/a&gt;');
  });}
});</code></pre>
<p><em>url &#8211; как раз наш REST-запрос</em></p>
<p>Самое главное &#8211; не забыть указать, что фото отображены с помощью сервиса Panoramio и их полные версии должны иметь ссылку на оригинальное фото.</p>
<p>Подробнее на <a href="http://www.panoramio.com/api/">официальном сайте</a></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">Однако, будем откровенны, г</div>
]]></content:encoded>
			<wfw:commentRss>http://yentsun.com/log/2010/05/06/panoramio-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Common data types (MySQL) / Рекомендуемые типы данных MySQL</title>
		<link>http://yentsun.com/log/2010/01/05/mysql-common-data-types/</link>
		<comments>http://yentsun.com/log/2010/01/05/mysql-common-data-types/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 01:43:05 +0000</pubDate>
		<dc:creator>yentsun</dc:creator>
				<category><![CDATA[web dev.]]></category>
		<category><![CDATA[bilingual]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[типы данных]]></category>

		<guid isPermaLink="false">http://yentsun.com/log/?p=1</guid>
		<description><![CDATA[Довольно часто при проектировании очередной базы данных, мне приходится заново &#8216;придумывать&#8217; какого типа должен быть тот или иной столбец. Например, идентификатор ряда (primary key) &#8211; какой тип, INTEGER или INT(8)? А, кого типа задать столбец для записи пути файла? Я не нашел сводных таблиц в Гугле или Яндексе (за исключением вопроса на stackoverflow.com), поэтому решил [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #808080;">Довольно часто при проектировании очередной базы данных, мне приходится заново &#8216;придумывать&#8217; какого типа должен быть тот или иной столбец. Например, идентификатор ряда (primary key) &#8211; какой тип, INTEGER или INT(8)? А, кого типа задать столбец для записи пути файла? Я не нашел сводных таблиц в Гугле или Яндексе (за исключением <a href="http://stackoverflow.com/questions/354763/1972154">вопроса на stackoverflow.com</a>), поэтому решил составить свою. Надеюсь она будет полезна не только мне.</span><span id="more-1"></span></p>
<p><span style="color: #008000;"><em>Inspired by a <a href="http://stackoverflow.com/questions/354763/1972154">stackoverflow.com question</a>. any comments or additions are more than welcome. / Любые комментарии и дополнения по этой теме приветствуются.</em></span></p>
<table>
<tbody>
<tr>
<th>Column / Столбец</th>
<th>Data type / Тип данных</th>
<th>Comment / Комментарий</th>
</tr>
<tr>
<td><strong>id</strong> / <span style="color: #808080;">идентификатор</span></td>
<td>INTEGER</td>
<td>AUTO_INCREMENT, UNSIGNED</td>
</tr>
<tr>
<td><strong>title</strong> / <span style="color: #808080;">заголовок</span></td>
<td>VARCHAR(255)</td>
<td></td>
</tr>
<tr>
<td><strong>description</strong> / <span style="color: #808080;">описание</span></td>
<td>TINYTEXT</td>
<td>often may not be enough, use TEXT instead <span style="color: #888888;">/ часто недостаточен из-за ограничений, можно использовать TEXT<br />
</span></td>
</tr>
<tr>
<td><strong>post body</strong> / <span style="color: #808080;">текст поста</span></td>
<td>TEXT</td>
<td></td>
</tr>
<tr>
<td><strong>email</strong></td>
<td>VARCHAR(320)</td>
<td></td>
</tr>
<tr>
<td><strong>salt </strong><span style="color: #888888;">(x &#8211; you decide)</span><strong><br />
</strong></td>
<td>CHAR(X)</td>
<td>randomly generated string, usually of fixed length / <span style="color: #888888;">строка случайных символов, как правило фиксированной длины</span></td>
</tr>
<tr>
<td><strong>digest (md5)</strong></td>
<td>CHAR(32)</td>
<td></td>
</tr>
<tr>
<td><strong>phone</strong> / <span style="color: #808080;">телефон</span></td>
<td>VARCHAR(20)</td>
<td></td>
</tr>
<tr>
<td><strong>file path</strong> / <span style="color: #808080;">файл (путь)</span></td>
<td>VARCHAR(255)</td>
<td></td>
</tr>
<tr>
<td><strong>5-star rating</strong> / <span style="color: #808080;">рейтинг</span></td>
<td>DECIMAL(3,2)</td>
<td>UNSIGNED</td>
</tr>
<tr>
<td><strong>price</strong> / <span style="color: #888888;">цена</span></td>
<td>DECIMAL(7,2)</td>
<td>UNSIGNED</td>
</tr>
<tr>
<td><strong>date (creation)</strong> / <span style="color: #808080;">дата (создания)</span></td>
<td>DATE/DATETIME</td>
<td>usually displayed as initial date of a post/<span style="color: #888888;">как правило выводится как дата создания поста/новости (фронтенд)<br />
</span></td>
</tr>
<tr>
<td><strong>date (tracking)</strong> / <span style="color: #808080;">дата (отслеживание изменений)</span></td>
<td>TIMESTAMP</td>
<td>can be used for tracking changes in a post/<span style="color: #888888;">может использоваться для отслеживания редакций поста (бэкенд)<br />
</span></td>
</tr>
<tr>
<td><strong>tags, categories</strong> / <span style="color: #808080;">теги, категории</span></td>
<td>TINYTEXT</td>
<td>comma separated values / <span style="color: #888888;">запись в строку с разделителем <span style="color: #ff9900;">*</span><br />
</span></td>
</tr>
<tr>
<td><strong>status</strong> / <span style="color: #808080;">статус</span></td>
<td>BOOL / TINYINT(1)</td>
<td>1 &#8211; published, 0 &#8211; unpublished, &#8230;</td>
</tr>
</tbody>
</table>
<p><span style="color: #0000ff;">UPD:</span> INT(11) in <strong>id</strong> is changed into INTEGER because ZEROFILL is not used. /<span style="color: #808080;"> Я изменил INT(11) в поле id на INTEGER, так как не использую ZEROFILL</span></p>
<p><span style="color: #808080;"><span style="color: #0000ff;">UPD2</span>: <span style="color: #ff9900;">*</span> по мнению одного моего товарища (@RuSHA), вместо записи в строку лучше пользоваться отдельной таблицей &#8211; выборка через LIKE может оказаться куда прожорливей чем грамотно построенный JOIN.</span></p>
<p><span style="color: #0000ff;">UPD3</span>:  <span style="color: #808080;">поля <strong>varchar</strong>(n) можно заменить на аналогичные <strong>char</strong>(n) &#8211; это займет больше места, однако, из-за фиксированной длины char скорость выдачи данных увеличится.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://yentsun.com/log/2010/01/05/mysql-common-data-types/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

