Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://lamp-dev.ru/feed

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>LAMP-dev</title>
  12. <atom:link href="http://lamp-dev.ru/feed" rel="self" type="application/rss+xml" />
  13. <link>http://lamp-dev.ru</link>
  14. <description>Linux Apache MySQL PHP(Python, Perl) development - Web development</description>
  15. <lastBuildDate>Wed, 01 Jun 2016 13:59:31 +0000</lastBuildDate>
  16. <language>ru-RU</language>
  17. <sy:updatePeriod>hourly</sy:updatePeriod>
  18. <sy:updateFrequency>1</sy:updateFrequency>
  19. <generator>https://wordpress.org/?v=4.5.31</generator>
  20. <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
  21. <item>
  22. <title>Определение поискового робота по User-Agent на PHP</title>
  23. <link>http://lamp-dev.ru/search-engine-robot-detect-user-agent-2209.html</link>
  24. <comments>http://lamp-dev.ru/search-engine-robot-detect-user-agent-2209.html#respond</comments>
  25. <pubDate>Sun, 03 Apr 2016 09:44:08 +0000</pubDate>
  26. <dc:creator><![CDATA[admin]]></dc:creator>
  27. <category><![CDATA[PHP]]></category>
  28. <category><![CDATA[SEO]]></category>
  29. <category><![CDATA[detect]]></category>
  30. <category><![CDATA[searchengine]]></category>
  31. <category><![CDATA[User-Agent]]></category>
  32.  
  33. <guid isPermaLink="false">http://lamp-dev.ru/?p=2209</guid>
  34. <description><![CDATA[Данный код на PHP поможет определить, кто зашёл на сайт &#8212; поисковый робот или обычный пользователь. Если передать в функцию переменную, то в неё, в случае, если это поисковый робот, запишется название поискового робота. [crayon-65d39a214050f590583754/] Вроде большинство записей, которые могут быть в User-Agent различных поисковиков, эта функция покрывает. Конечно это не 100% способ, так как [&#8230;]]]></description>
  35. <content:encoded><![CDATA[<p>Данный код на PHP поможет определить, кто зашёл на сайт &#8212; поисковый робот или обычный пользователь. Если передать в функцию переменную, то в неё, в случае, если это поисковый робот, запишется название поискового робота.</p><pre class="crayon-plain-tag">function isBot(&amp;$botname = '') {
  36. $bots = array(
  37. 'rambler','googlebot','aport','yahoo','msnbot','turtle','mail.ru','omsktele',
  38. 'yetibot','picsearch','sape.bot','sape_context','gigabot','snapbot','alexa.com',
  39. 'megadownload.net','askpeter.info','igde.ru','ask.com','qwartabot','yanga.co.uk',
  40. 'scoutjet','similarpages','oozbot','shrinktheweb.com','aboutusbot','followsite.com',
  41. 'dataparksearch','google-sitemaps','appEngine-google','feedfetcher-google',
  42. 'liveinternet.ru','xml-sitemaps.com','agama','metadatalabs.com','h1.hrn.ru',
  43. 'googlealert.com','seo-rus.com','yaDirectBot','yandeG','yandex',
  44. 'yandexSomething','Copyscape.com','AdsBot-Google','domaintools.com',
  45. 'Nigma.ru','bing.com','dotnetdotcom'
  46. );
  47. foreach ($bots as $bot) {
  48. if (stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
  49. $botname = $bot;
  50. return true;
  51. }
  52. }
  53. return false;
  54. }</pre><p>Вроде большинство записей, которые могут быть в User-Agent различных поисковиков, эта функция покрывает.<span id="more-2209"></span></p>
  55. <p>Конечно это не 100% способ, так как User-Agent можно менять. Но настоящие поисковики этим по-моему не занимаются. Разве что кто то захочет прикинуться поисковым роботом. Короче используйте этот метод в зависимости от вашего случая.</p>
  56. <p>На просторах интернета так же предлагают определять по IP, по маске адресов. Предполагается что такое то пространство IP адресов выделяется под сервера Google или какие то другие системы. Но как сами понимаете этот метод геморройный. Так как надо следить за списками, масками IP адресов.</p>
  57. <p>Ну и немного оффтоп. Мой случай, в котором я всё это применял, был следующий &#8212; хотел я организовать работу запрос &#8212; ответ, используя 304 статус &#171;Not Modified&#187;, датой модификации и всё это при работе со скриптами. В скриптах я всю эту обратботку сделал. В нужных случаях, если например новость не модифицирована, то отправлялся статус 304 и всё ок. Но!&#8230; На динамических страницах у меня присутствовали части страницы, которые менялись и выдавать 304 статус для всей страницы было бы неправильно, пользователь получал бы старые данные, или вернее в этом случае сказать что пользователь бы видел старую страницу и не получал бы новую, хотя какие то части страницы уже обновились. Вот в этом и косяк динамических страниц и 304 статуса. Короче я сделал следующий вывод &#8212; забил на этот функционал для обычных пользователей, но оставил этот функционал для поисковых систем, как раз используя для проверки эту функцию определения поискового робота. В принципе я добился своего результата, так как изначально самым главным было сделать этот функционал для поисковиков. Чтобы поисковики побыстрее индексировали сайт и не тратили время на получение контента не изменённой страницы.</p>
  58. <p>Впрочем вот это вот &#171;не тратили время на получение контента не изменённой страницы&#187; можно добиться и составляя sitemap в виде XML, который поисковик будет скачивать и смотреть дату модификации страницы. Но у меня была задача сделать это этими двумя способами. И да, это задача исходила от SEO-шников <img src="https://s.w.org/images/core/emoji/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  59. <p>Ладно, начал одним, и если не остановлюсь, наверное закончу уже совсем другим. Это наверное потому что давно в блог ничего не черкал.</p>
  60. <p>За сим откланиваюсь <img src="https://s.w.org/images/core/emoji/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  61. ]]></content:encoded>
  62. <wfw:commentRss>http://lamp-dev.ru/search-engine-robot-detect-user-agent-2209.html/feed</wfw:commentRss>
  63. <slash:comments>0</slash:comments>
  64. </item>
  65. <item>
  66. <title>Apache, htaccess и ошибка invalid command &#8216;\xef\xbb\xbf&#8217;. Небольшая заметка.</title>
  67. <link>http://lamp-dev.ru/apache-htaccess-invalid-command-xefxbbxbf-2183.html</link>
  68. <comments>http://lamp-dev.ru/apache-htaccess-invalid-command-xefxbbxbf-2183.html#respond</comments>
  69. <pubDate>Thu, 11 Dec 2014 10:52:19 +0000</pubDate>
  70. <dc:creator><![CDATA[admin]]></dc:creator>
  71. <category><![CDATA[Разное]]></category>
  72. <category><![CDATA[apache]]></category>
  73. <category><![CDATA[error]]></category>
  74. <category><![CDATA[htaccess]]></category>
  75. <category><![CDATA[utf8]]></category>
  76. <category><![CDATA[utf8 with bom]]></category>
  77.  
  78. <guid isPermaLink="false">http://lamp-dev.ru/?p=2183</guid>
  79. <description><![CDATA[Если Вы правили файл .htaccess и после сохранения увидели 500 ошибку сервера &#8212; 500 internal server error, то проверьте, всё ли правильно записали в этом конфигурационном файле. Если на 100% уверены что всё правильно, загляните в лог-файл Apache для сайта. Обычно он имеет вид типа error_log. Хотя логирование может быть отключено. И если вы там [&#8230;]]]></description>
  80. <content:encoded><![CDATA[<p>Если Вы правили файл<strong> .htaccess</strong> и после сохранения увидели 500 ошибку сервера &#8212; <strong>500 internal server error</strong>, то проверьте, всё ли правильно записали в этом конфигурационном файле. Если на 100% уверены что всё правильно, загляните в лог-файл Apache для сайта. Обычно он имеет вид типа error_log. Хотя логирование может быть отключено. И если вы там увидите ошибку с содержанием типа:</p>
  81. <p><strong><em>invalid command &#8216;\xef\xbb\xbf&#8217;</em></strong></p>
  82. <p>то эта заметка для Вас.<span id="more-2183"></span></p>
  83. <p>Всё просто, пересохраните файл с изменением кодировки. Дело в том, что возможно вы правили файл в каком то примитивном текстовом редакторе, например используя встроенный notepad в Windows. Ну или в нормальном редакторе, просто при определённых настройках кодировки. И он сохранил файл в кодировке UTF с <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2" target="_blank">BOM</a>. <strong>Сохраните файл .htaccess в UTF без BOM и всё будет в порядке</strong>. Ну или наверное можно просто сохранить в немультибайтовой кодировке. Например в простую windows 1251.</p>
  84. <p>Дело в том что apache спотыкается об эту последовательность символов BOM и не распознаёт как нормальную директиву. Самое интересное что в редакторе то эти символы, так же как и символ переноса строки, табуляции, не видны и можно потерять много времени проверяя правильно написанные директивы. Особенно когда в error логе Apache пишется что то типа <em><strong>Invalid command &#8216;\xef\xbb\xbfRewriteEngine&#8217;</strong></em>. Люди начинают пенять на то, что модуль какой то не подключён.</p>
  85. <p>На этом пожалуй всё&#8230;</p>
  86. ]]></content:encoded>
  87. <wfw:commentRss>http://lamp-dev.ru/apache-htaccess-invalid-command-xefxbbxbf-2183.html/feed</wfw:commentRss>
  88. <slash:comments>0</slash:comments>
  89. </item>
  90. <item>
  91. <title>Диспетчер задач в консоли Linux &#8212; top и htop</title>
  92. <link>http://lamp-dev.ru/task-manager-console-linux-2163.html</link>
  93. <comments>http://lamp-dev.ru/task-manager-console-linux-2163.html#respond</comments>
  94. <pubDate>Fri, 05 Dec 2014 11:01:50 +0000</pubDate>
  95. <dc:creator><![CDATA[admin]]></dc:creator>
  96. <category><![CDATA[Разное]]></category>
  97. <category><![CDATA[console]]></category>
  98. <category><![CDATA[htop]]></category>
  99. <category><![CDATA[linux]]></category>
  100. <category><![CDATA[top]]></category>
  101. <category><![CDATA[администрирование]]></category>
  102.  
  103. <guid isPermaLink="false">http://lamp-dev.ru/?p=2163</guid>
  104. <description><![CDATA[В Windows для того, чтобы посмотреть список текущих задач, процессов, мы нажимает Ctrl+Alt+Del и далее выбираем диспетчер задач. Ну или, если мне не изменяет память, просто Ctrl+Alt+Del в более старых версиях. В Linux с графической оболочкой естественно то же есть подобный диспетчер задач. Но сейчас мы поговорим именно про консоль Linux. Все дальнейшие действия выполнены в [&#8230;]]]></description>
  105. <content:encoded><![CDATA[<p><img class="right alignright wp-image-2165 size-full" src="http://lamp-dev.ru/wp-content/uploads/2014/12/post-image-console.png" alt="Linux console" width="300" height="223" />В Windows для того, чтобы посмотреть список текущих задач, процессов, мы нажимает Ctrl+Alt+Del и далее выбираем диспетчер задач. Ну или, если мне не изменяет память, просто Ctrl+Alt+Del в более старых версиях. В Linux с графической оболочкой естественно то же есть подобный диспетчер задач. Но сейчас мы поговорим именно про консоль Linux. Все дальнейшие действия выполнены в Ubuntu, но я не думаю что в других дистрибутивах Linux что то будет отличаться. В этих программах мы сможем увидеть загруженность процессора по ядрам, занятость оперативной памяти, занятость виртуальной памяти, сколько компьютер был включён по времени &#8212; uptime. Если запускать эти команды с root доступом, то можно будет управлять процессами.<span id="more-2163"></span></p>
  106. <h2>Top</h2>
  107. <p>Чтобы просмотреть состояние системы просто набираем команду top</p><pre class="crayon-plain-tag">$ top</pre><p>И увидим следующее. Команду может запустить и обычный пользователь.</p>
  108. <p><img class="alignnone wp-image-2169 size-full" src="http://lamp-dev.ru/wp-content/uploads/2014/12/console-top.png" alt="console command top" width="600" height="474" srcset="http://lamp-dev.ru/wp-content/uploads/2014/12/console-top.png 600w, http://lamp-dev.ru/wp-content/uploads/2014/12/console-top-300x237.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
  109. <p>Сколько работает сервер <em>up 1 day, 19:05</em>, средняя загрузка, количество процессов, нагрузка на процессор, занятость оперативной памяти памяти и список процессов.</p>
  110. <p>Для выхода из программы нажать <strong><em>q</em></strong></p>
  111. <p>Запустив программу, кажется, что программа носит чисто информационный характер, но нажав в программе клавишу h Вы увидите горячие клавиши прочего функционала. Более подробно о программе можно прочитать в мане, набрав</p><pre class="crayon-plain-tag">$ man top</pre><p>У кого нет этой программы в Linux Ubuntu её можно очень просто установить. При этом надо иметь root права, чтобы ваш пользователь мог выполнять команды через sudo.</p><pre class="crayon-plain-tag">$ sudo apt-get install top</pre><p></p>
  112. <h2>HTop</h2>
  113. <p>По сути это аналогичная top программка, но более удобная и функциональная.</p>
  114. <p>Устанавливается в Ubuntu аналогичным образом</p><pre class="crayon-plain-tag">$ sudo apt-get install htop</pre><p>И запускается</p><pre class="crayon-plain-tag">$ sudo htop</pre><p>Желательно всё таки запускать с root правами через sudo чтобы воспользоваться всем функционалом программы, например &#171;убить процесс&#187;<br />
  115. <img class="aligncenter wp-image-2170 size-full" src="http://lamp-dev.ru/wp-content/uploads/2014/12/console-htop.png" alt="console htop" width="600" height="474" srcset="http://lamp-dev.ru/wp-content/uploads/2014/12/console-htop.png 600w, http://lamp-dev.ru/wp-content/uploads/2014/12/console-htop-300x237.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
  116. <p>Краткая справка F1 в программе или</p><pre class="crayon-plain-tag">$ man htop</pre><p>По сравнению с <em>top</em> программа <em>htop</em> более удобная. Если незнакомый с <em>top</em> должен изучать справку, то в <em>htop</em> всё понятно, функции разбросаны по функциональным клавишам. Способы взаимодействия понятны и аналогичны другим консольным командам, например mc.</p>
  117. <p>Например</p>
  118. <p><em><strong>F1</strong></em> &#8212; краткая и понятная справка</p>
  119. <p><em><strong>F2</strong></em> &#8212; настройки программы</p>
  120. <p><em><strong>F3</strong></em> &#8212; поиск процесса, найти именно нужный процесс, выделить в списке процессов найденный процесс для дальнейших операций</p>
  121. <p><em><strong>F4</strong></em> &#8212; фильтрация списка процессов, вывести в списке только те процессы, в имени которых встречается заданное слово</p>
  122. <p><em><strong>F5</strong></em> &#8212; вывести список процессов в виде дерева Родительский процесс &#8212; дочерний процесс</p>
  123. <p><em><strong>F6</strong> </em>&#8212; сортировка списка</p>
  124. <p><em><strong>F7</strong></em> &#8212; понизить приоритет выделенное задачи</p>
  125. <p><em><strong>F8</strong></em> &#8212; повысить приоритет задачи</p>
  126. <p><em><strong>F9</strong></em> &#8212; убить выбранный процесс</p>
  127. <p><em><strong>F10</strong></em> &#8212; выход</p>
  128. <p>По списку процессов можно перемещаться клавишами &#171;вверх&#187; и &#171;вниз&#187;.</p>
  129. ]]></content:encoded>
  130. <wfw:commentRss>http://lamp-dev.ru/task-manager-console-linux-2163.html/feed</wfw:commentRss>
  131. <slash:comments>0</slash:comments>
  132. </item>
  133. <item>
  134. <title>Yii &#8212; фреймворк на PHP</title>
  135. <link>http://lamp-dev.ru/yii-framework-2126.html</link>
  136. <comments>http://lamp-dev.ru/yii-framework-2126.html#comments</comments>
  137. <pubDate>Sat, 15 Nov 2014 20:47:26 +0000</pubDate>
  138. <dc:creator><![CDATA[admin]]></dc:creator>
  139. <category><![CDATA[PHP]]></category>
  140. <category><![CDATA[framework]]></category>
  141. <category><![CDATA[Yii]]></category>
  142.  
  143. <guid isPermaLink="false">http://lamp-dev.ru/?p=2126</guid>
  144. <description><![CDATA[Какой путь обычно проходит PHP разработчик? Сначала он пишет с нуля, пробует, делает всё на примерах. Свои функции, классы, файлы, структура. Изобретает свои велосипеды. И это здорово на первых этапах. После он осознаёт что много денег так не заработаешь и надо ускорять свою работу, используя CMS. Изучает, пробует, делает. После разработчик осознаёт что в CMS [&#8230;]]]></description>
  145. <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-2130" src="http://lamp-dev.ru/wp-content/uploads/2014/11/yii-logo.png" alt="yii-logo" width="200" height="43" /></p>
  146. <p>Какой путь обычно проходит PHP разработчик? Сначала он пишет с нуля, пробует, делает всё на примерах. Свои функции, классы, файлы, структура. Изобретает свои велосипеды. И это здорово на первых этапах. После он осознаёт что много денег так не заработаешь и надо ускорять свою работу, используя CMS. Изучает, пробует, делает. После разработчик осознаёт что в CMS всё не так гибко реализовывается и пробует CMF. Хотя может он сразу изучает CMF. И вот тогда он осознаёт, что вот оно &#8212; счастье. Находит свой фреймворк и делает всё на нём. Хотя нет&#8230; Вот так &#8212; краткосрочные, простые и средней сложности проекты, без долгой последующей поддержки, делает на CMS. Ну а если проект свой или просто клиент согласен с предпочтениями разработчика, плюс к этому проект долгий, с долгой дальнейшей поддержкой и разработкой, то тут самое то &#8212; фреймворк.</p>
  147. <p>Сейчас я хочу рассказать о фреймворке Yii. Этот фреймворк написан на PHP.</p>
  148. <p><span id="more-2126"></span></p>
  149. <h3>Yii это</h3>
  150. <p>Динамично развивающийся <strong>фреймворк на PHP</strong> с хорошим сообществом, в том числе русскоязычным. Один из разработчиков &#8212; россиянин <em>Александр Макаров aka Sam Dark</em>. Он и занимается популяризацией фреймворка в России и не только.</p>
  151. <p>На данный момент есть две стабильные версии <em>1.1.* и 2.0.*</em>. Кстати, вторая версия после долгой разработки вышла совсем недавно &#8212; <em>12 октября</em>.</p>
  152. <p>Дату старта проекта указывают как <em>1 января 2008 года</em>. Дата релиза 3 декбаря 2008 года. Основатель проекта <em>Qiang Xue</em>.</p>
  153. <h3>На Yii повлияли следующие CMF и CMS:</h3>
  154. <p><em>Prado</em> &#8212; взят за основу в смысле идей. Это компонентная ориентированность и события, модульная архитектура,  общий интерфейс взаимодействия с базой данных, интернационализация, локализация  и другие фичи и паттерны.</p>
  155. <p><em>Ruby on Rails</em> &#8212; способ построения кофиграции к приложению, принцип реализации ORM.</p>
  156. <p><em>jQuery</em> &#8212; это javascript библиотека интегрирована в Yii. В том смысле, что всё же с Yii это серверное программирование, но виджеты, формы и прочие html куски сгенерированы вместе с прикреплением jQuery. В частности это делается для клиентской валидации, для ajax валидаци форм.</p>
  157. <p><em>Symfony</em> &#8212; взят принцип фильтров и архитектура расширений.</p>
  158. <p><em>Joomla</em> &#8212; взята модульная архитектура и интернационалиция.</p>
  159. <p>Всё вышесказанное имеется ввиду про идея, а не про то, что прям взято из проекта. Ну jQuery непосредственно взята и лежит в vendors.</p>
  160. <h3>Про версии</h3>
  161. <p>Версия 1.0 уже не поддерживается.</p>
  162. <p>Требования версии 1.1.* &#8212; это PHP 5.1.0. и выше.</p>
  163. <p>Требования второй версии &#8212; это PHP 5.4 и выше.</p>
  164. <p>Сайт фреймворка &#8212; <a href="http://www.yiiframework.com/" target="_blank">http://www.yiiframework.com/</a></p>
  165. <p>Русскоязычное сообщество &#8212; <a href="http://www.yiiframework.ru/" target="_blank">http://www.yiiframework.ru/</a></p>
  166. <p>Кстати, сайт Александра Макарова &#8212; <a href="http://rmcreative.ru/" target="_blank">http://rmcreative.ru/</a> Естественно он там так же пишет и о Yii.</p>
  167. <h3>Что есть в этом фреймворке, что он из себя представляет:</h3>
  168. <ol>
  169. <li>Он один из <strong>самых быстрых.</strong></li>
  170. <li><strong>Прост в изучении.</strong> Относительно прост. Тот, кто привык клепать сайты на CMS может не сразу поймёт структуру, принципы. Но если постараться, то оно того стоит.</li>
  171. <li>Структура проекта строится по <strong>паттерну MVC</strong>.</li>
  172. <li><strong>Прослойка, интерфейсы для общения с БД.</strong> Для работы с базой данных имеются наборы классов DAO и ActiveRecord. DAO &#8212; это набор классов для непосредственного задания запросов к базе данных. ActiveRecord &#8212; классы, реализующие подход ORM, где таблица представляется классом, а записи таблицы &#8212; экзеплярами класса. Всё &#8212; DAO и ActiveRecord, работает через PDO, отсюда вытекает большой список поддерживаемых баз данных: <em>SQLite, MySQL/MariaDB, PostgreSQL, SQL Server, Oracle, Firebird/Interbase 6 </em>и другие. Полный список поддерживаемых драйверов <a href="http://php.net/manual/ru/pdo.drivers.php" target="_blank">тут</a>.  Стоит заметить, что через DAO задаются непосредственно SQL запросы, синтаксис которых может всё таки различаться для разных СУБД.</li>
  173. <li>Имеется встроенная поддержка <strong>интернационализации</strong>. Кстати, к месту или нет будет сказано, но там так же есть возможность построения словоформ, как например 1 рубл<i>ь</i>, 10 рубл<em>ей</em>. Ну вы поняли.</li>
  174. <li><strong>Генерация базового кода PHP генератором Gii</strong>, который является модулем Yii, изначально встроенным. Можно сгенериовать модель, контроллер или сразу модель, контроллер и views для операций CRUD на сущностью, таблицей. В Gii есть шаблоны генерации кода, которые можно изменить, чтобы файлы генерировались в том виде, в каком вы хотите. Хотите чтобы записи выводились таблично или &#171;плиткой&#187; &#8212; делаем свой шаблон генерируем. Если проект долгий, то можно озадачиться составлением различных шаблонов конкретно для этого проекта, что очень упростит жизнь и ускорит процесс разработки.</li>
  175. <li><strong>Кеширование</strong> страниц и отдельных фрагментов.</li>
  176. <li>Поддержка <strong>тем оформления</strong></li>
  177. <li>Возможность <strong>простого подключения сторонних классов</strong>, библиотек. При чём это делается очень просто. Можно подключить стороннюю CRM, если встроенная не устраивает. В интернете много статей о том, как они &#171;скрестили&#187; что то с Yii.</li>
  178. <li>Верно так же о обратное. Можно очень <strong>легко подключить Yii к другому проекту.</strong> Подключается файл, создаётся экземпляр приложения и его можно использовать. Можно пользоваться Yii API через этот экземпляр приложения. Приложением в Yii является главный класс, который содержит в себе всю информацию, все подключённые компоненты.</li>
  179. <li><strong>Миграции базы данных</strong>.</li>
  180. <li>Поддержка <strong>REST</strong></li>
  181. <li><strong>Аутентификация и авторизация</strong>. На мой взгляд всё реализовано логично и понятно. В пару строк не объяснишь, поэтому как то кратко попробую. Разграничение доступа строится на основе ролей &#8212; RBAC. Строится иерархия Роль &#8212; Задача &#8212; Операция. Причём древовидная структура может быть большой. Роль присваивается пользователю. Пользователь может иметь несколько ролей. И по этой иерархии  можно есть ли связь между операцией, задачей и пользователем. Тем самым проверить доступность данного действия для пользователя. Фишка ещё в том что эта иерархия может сохранения как в базе, так в файле и другим образом. Авторизация выполнена в виде фильтра к контроллеру. Фильтр в Yii это код, который выполняется перед выполнением действия контроллера и решает, может ли выполниться действие контроллера при текущих условиях. В контексте авторизации может ли текущий пользователь выполнить текущую операцию. Кстати, есть ещё одна фишка &#8212; в этой иерархии можно описать дополнительные условия &#8212; бизнес-логику на допущение/не допущение при прочих равных условиях, но при текущих входных данных, условия выполнения. Например &#8212; многопользовательский блог и редактировать посты можно, но только хозяину поста.</li>
  182. <li><strong>Перехват и обработка ошибок</strong>.</li>
  183. <li><strong>Валидация входящих данных, записываемых данных</strong> &#8212; плюс к безопасности</li>
  184. <li><strong>Автоматическое тестирование</strong></li>
  185. <li>Есть <strong>большие возможности по расширению функционала</strong> &#8212; компоненты и поведения, модули и тд и тп</li>
  186. <li>Так же есть хорошие &#171;плюшки&#187; для <strong>безопасности</strong>. Есть возможности для предотвращение межсайтового скриптинга, предотвращение подделки межсайтовых запросов, предотвращение атак через cookie.</li>
  187. <li><strong>Виджеты, формы, таблицы и прочее</strong> выводимые на сайте зачастую выводятся с прикреплением, <strong>инеграцией jQuery</strong> для дополнительного функционала, клиентской валидации, ajax валидации и прочей функциональности.</li>
  188. </ol>
  189. <p>Может я ещё какие то фишки забыл написать.</p>
  190. <h3>Моё мнение</h3>
  191. <p>Делал я несколько проектов. Мне этот фреймворк понравился.</p>
  192. <p>Из того что понравилось &#8212; понравились все фишки, которые описаны выше в списке. Единственное я там не применял темы оформления, миграцию и тестирование. Миграция &#8212; как то не нужно было. А темы оформления &#8212; я так и не понял в чём их плюсы, делал просто views и несколько layout. Наверное мне просто не понадобилась темизация, оформление было одно. Тестирование то же не применял, так были средние проекты, не было там особой надобности тесты делать.</p>
  193. <p>Из того что не понравилось. Мне кажется вседозволенность расширения функционала &#8212; это модули, модули могут быть вложены в модули, в этих модулях могут быть поведения, которые может уже есть. Мне кажется надо как то жёстко задавать требования к построению модулей, проекта в целом. И/или надо как то вести реестр качественных проверенных, построенных по одним правилам расширений к <em>Yii</em>. <a href="http://www.yiiframework.com/extensions/" target="_blank">Реестр расширений есть</a>, то там такие разнообразные расширения от разных авторов с разной степенью готовности, заброшенности и тд и тп. Я один проект так делал &#8212; накидал всяких расширений. Получился какой то винигред.</p>
  194. <h3>Напутствие для новичков<em><strong>.</strong></em></h3>
  195. <p>Если сразу не получилось изучить, то попробуйте ещё раз. Комбинируйте чтение документации с выполнением каких то примеров, которые есть в интернете. Их не очень много, как например по всяким CMS, но они есть. Смотрите примеры кода проектов. Начинайте с простого.</p>
  196. <p>Вообще говоря на русскоязычном сайте(ссылка выше) очень хорошее руководство.</p>
  197. <p>Тем, кто начинает изучать <em>Yii</em> сейчас, думаю можно начать сразу со второй версии. Документация уже есть. На русский переводится. Ну или тем кто с английским не очень можно почитать русскую документацию по <em>Yii 1.1</em>, изучить всё, попробовать всё, а после просто изучить изменения, пришедшие во вторую версию. Ну а так проекты можно и наверное даже нужно делать на второй версии. Правда сейчас наверное расширений не так много, ориентированных на вторую версию.</p>
  198. ]]></content:encoded>
  199. <wfw:commentRss>http://lamp-dev.ru/yii-framework-2126.html/feed</wfw:commentRss>
  200. <slash:comments>1</slash:comments>
  201. </item>
  202. <item>
  203. <title>Ещё одна причина полюбить Chrome &#8212; индикатор вкладки с музыкой</title>
  204. <link>http://lamp-dev.ru/chrome-tab-music-icon-2089.html</link>
  205. <comments>http://lamp-dev.ru/chrome-tab-music-icon-2089.html#comments</comments>
  206. <pubDate>Mon, 27 Jan 2014 08:47:00 +0000</pubDate>
  207. <dc:creator><![CDATA[admin]]></dc:creator>
  208. <category><![CDATA[Chrome]]></category>
  209. <category><![CDATA[Usability]]></category>
  210. <category><![CDATA[вкладка с музыкой]]></category>
  211. <category><![CDATA[индикатор]]></category>
  212. <category><![CDATA[юзабилити]]></category>
  213.  
  214. <guid isPermaLink="false">http://lamp-dev.ru/?p=2089</guid>
  215. <description><![CDATA[Если честно, пользуюсь в основном Firefox. Но кажется из за множества мелочей я начинаю влюбляться в Chrome. В интернете гуляет картинка Так вот. В Chrome это не проблема. Этот браузер позволяет быстро найти вкладку, из которой доносится звук. Подобные вкладки помечаются специальной иконкой &#8212; динамиком. Очень удобно. Ещё было бы удобнее, если бы разработчики сделали [&#8230;]]]></description>
  216. <content:encoded><![CDATA[<p>Если честно, пользуюсь в основном Firefox. Но кажется из за множества мелочей я начинаю влюбляться в Chrome.</p>
  217. <p>В интернете гуляет картинка</p>
  218. <p style="text-align: center;"><img class="aligncenter size-full wp-image-2091" alt="34 открытых вкладки - откуда исходит звук?" src="http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music.jpg" width="390" height="293" srcset="http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music.jpg 390w, http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music-300x225.jpg 300w" sizes="(max-width: 390px) 100vw, 390px" /></p>
  219. <p><span id="more-2089"></span>Так вот. В Chrome это не проблема. Этот браузер позволяет быстро найти вкладку, из которой доносится звук. Подобные вкладки помечаются специальной иконкой &#8212; динамиком.</p>
  220. <p><img class="aligncenter size-full wp-image-2090" alt="Вкладки, от которой исходит музыка, помечаются иконкой" src="http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music-2.jpg" width="531" height="28" srcset="http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music-2.jpg 531w, http://lamp-dev.ru/wp-content/uploads/2014/01/tabs-and-music-2-300x15.jpg 300w" sizes="(max-width: 531px) 100vw, 531px" /></p>
  221. <p>Очень удобно. Ещё было бы удобнее, если бы разработчики сделали отключение музыки при клике на эту иконку.<br />
  222. Я не знаю с какой версии Chrome пошла эта фишка. Сам только недавно заметил. Лично для меня Chrome представляется программой с всегда последней версией, потому что он всё время фоновым процессом обновляется. И у вас наверняка то же последняя версия и эта фишка присутствует.</p>
  223. <p>Наверное это уже баян, но для меня это небольшое открытие. Пишу тем, кто пользуется другими браузерами, но может быть попробует Chrome после этой заметки.</p>
  224. ]]></content:encoded>
  225. <wfw:commentRss>http://lamp-dev.ru/chrome-tab-music-icon-2089.html/feed</wfw:commentRss>
  226. <slash:comments>1</slash:comments>
  227. </item>
  228. <item>
  229. <title>Ноутбук для разработчиков</title>
  230. <link>http://lamp-dev.ru/notebook-for-developers-2004.html</link>
  231. <comments>http://lamp-dev.ru/notebook-for-developers-2004.html#respond</comments>
  232. <pubDate>Wed, 04 Dec 2013 08:12:27 +0000</pubDate>
  233. <dc:creator><![CDATA[admin]]></dc:creator>
  234. <category><![CDATA[Разное]]></category>
  235. <category><![CDATA[development]]></category>
  236. <category><![CDATA[notebook]]></category>
  237. <category><![CDATA[requirments]]></category>
  238. <category><![CDATA[пожелания]]></category>
  239.  
  240. <guid isPermaLink="false">http://lamp-dev.ru/?p=2004</guid>
  241. <description><![CDATA[Думаю у многих есть ноутбук. Настольный компьютер это конечно хорошо, но для работы часто надо быть мобильным и иметь при себе ноутбук. Кто то, кто всё время пользуется ноутбуком, даже уже забыл, что такое настольный компьютер. Почему например я изменил desktop копьютеру и начал пользоваться ноутбуком &#8212; это мобильность и ноутбук меньше шумит, у меня [&#8230;]]]></description>
  242. <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-2063" alt="notebook-photo" src="http://lamp-dev.ru/wp-content/uploads/2013/12/notebook-photo.jpg" width="150" height="116" />Думаю у многих есть ноутбук. Настольный компьютер это конечно хорошо, но для работы часто надо быть мобильным и иметь при себе ноутбук. Кто то, кто всё время пользуется ноутбуком, даже уже забыл, что такое настольный компьютер. Почему например я изменил desktop копьютеру и начал пользоваться ноутбуком &#8212; это мобильность и ноутбук меньше шумит, у меня так вообще не шумит. В процессе использования у меня сложились некоторые требования к ноутбуку, которые я изложу в этой статье.<span id="more-2004"></span></p>
  243. <ol>
  244. <li><strong>Ноутбук должен быть как можно легче.</strong><br />
  245. Когда покупал свой ноутбук как то особо не придавал этому значение. Ну вот он, ноут с таким то весом. Поднял &#8212; вроде лёгкий. Но когда целый день мотаешься с этим ноутбуком, начинаешь проклинать его. Руки устают даже от того веса, который вначале казался лёгким и незаметным. Конечно я не призываю брать какой нибудь малогабаритный лёгкий нетбук с крошечным экраном. Нет. Просто надо выбрать золотую середину. Мой ноут например весит 2,6 кг и я был бы счастлив, если бы он весил например 1,5-2 кг. Тем более сейчас есть лёгкие ультрабуки с нормальными габаритами и экраном.</li>
  246. <li><strong>Диагональ 13-15 дюймов. </strong><br />
  247. Меньше будет не комфортно, больше &#8212; это наверное для дизайнеров.</li>
  248. <li><strong>Клавиатура без цифрового блока.</strong><br />
  249. Это те клавиши справа от основной клавиатуры с цифровыми клавишами. Мне он вообще не нужен. Я использую клавиши над буквенными клавишами. Тем более разработчику не так часто приходится вводить цифровые константы. Этот блок мне кажется удобен при числовых расчётах, например бухгалтерам. Мне этот цифровой блок даже мешает, так как из за него &#171;стрелочные&#187; клавиши смещены левее и на ощупь их сложнее найти. Часто промахиваюсь и вместо стрелок и попадаю на клавиши цифрового блока.  Тем более на некоторых клавиатурах эти стрелочные клавиши пространственно даже не отделены. А так если без цифрового блока эти клавиши с краю &#8212; всё просто. Вообще касаемо клавиатуры всё дело в привычке. Но на некоторых клавиатурах привычно долго выработать. Особенно бесит когда до нужной клавиши надо добираться через фунциональную клавишу Fn. У меня например до Insert надо так добираться.</li>
  250. <li><strong>В целом клавиатура. </strong><br />
  251. Она должна быть удобной. Будет здорово если вы например до покупки попробуете поработать на таком же ноуте, который хотите купить. Но опять же повторюсь &#8212; всё дело в привычке.</li>
  252. <li><strong>Желательно клавиатура с подсветкой. </strong><br />
  253. Ну это думаю понятно, чтобы вечером, ночью были видны клавиши.</li>
  254. <li><strong>Процессор с аппаратной виртуализацией.</strong><br />
  255. Это нужно для тех, кто захочет развернуть у себя виртуальную машину. Процессор должен поддерживать<a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" target="_blank"> аппаратную виртуализацию</a>. Иначе виртуальная машина будет использовать программную виртуализацию и будет безбожно тормозить. Вот у меня например бюджетный вариант asus k52f, купленный ещё когда то за 13тр. Там процессор Intel Pentium P6200 без поддержки виртуализации. Установил VirtualBox, развернул гостевую Ubuntu Server, запустил, а там тихий ужас, команды обрабатываются несколько секунд. Порыскал в интернете &#8212; оказалась описанная тут проблема.</li>
  256. <li><strong>Антибликовый, матовый экран.</strong><br />
  257. Тут думаю то же всё понятно. Чтобы глаза лишний раз не напрягались из за этих бликов и работать было комфортно.</li>
  258. <li><strong>Цвет корпуса &#8212; светло-серый, белый.</strong><br />
  259. Тут чисто эстетическое требование, желание. Не нравится когда видны отпечатки пальцев, жирные разводы. На тёмном корпусе они видны, на светлом не очень.</li>
  260. <li><strong>Внешний вид.</strong><br />
  261. Ну конечно когда пользуешься техникой с хорошим дизайном, то настроение поднимается. И лучше чтобы он не выглядел как кирпич. Но это так, на вкус и цвет. Не обязательно. Вообще современные модели так и так соревнуются между собой в изяществе.</li>
  262. <li><strong>Операционная система.</strong><br />
  263. Ну это программисту решать, какой ОС пользоваться. На случай если разработчик будет пользоваться Linux, то можно покупать ноутбук без установленной ОС, дешевле выйдет.</li>
  264. <li><strong>Насчёт автономной работы. </strong><br />
  265. Да, надо быть мобильным. Но в моём случае мобильность &#8212; это переехать куда нибудь и поработать на месте. Это не работа в дороге. Как правило мне всегда удавалось найти розетку для подзарядки, так что проблема автономной работы для меня не вставала. Хотя в принципе на моём не новом ноутбуке аккумулятора хватает где то на 3 часа и хватает если что в дороге посидеть. У новых моделей часов автономной работы ещё больше, тем более если заботиться о энергоёмкости, отключать ненужные программы, занимающие процессорное и аппаратное время, тем самым сажая аккумулятор.</li>
  266. <li><strong>Золотая середина.</strong><br />
  267. Если придерживаться всех предыдущих условий, то ноутбук будет очень дорогой. Надо выбирать золотую середину, где учитывать всё &#8212; производительность, габариты, вес, диагональ, вид и тд и тп. При этом учитывая, что для разработчика главное &#8212; это производительность, далее экран, далее клавиатура. И тут даже можно не рассматривать какой программист, разработчик. GameDev &#8212; они наверное больше настольные компьютеры используют с улучшенной видеокартой, хорошим процессором и большим количеством оперативной памяти. Web-dev &#8212; там то же нужна производительность. Вы не подумайте что web-dev &#8212;  это написание html страничек в блокноте. Куча открытых программ, браузеров, IDE, виртуальные машины. И тд и тп. Насчёт производительности я в этой статье специально не писал, так как через пол года, год статья устареет. А то что описано выше &#8212; останется актуальным. Насчёт хороших характеристик лучше интересоваться на момент покупки. Я бы сейчас взял ну например <em><strong>ноутбук Samsung NP530U4E-K01RU 14&#8243; (1366&#215;768)</strong></em>, серенький, с оперативной памятью 4гб и более, если есть такие коплектации.</li>
  268. </ol>
  269. <p>И ещё, всё выше сказанное это сугубо моё мнение по данному вопросу. А что думаете Вы? Черканите в комментариях.</p>
  270. ]]></content:encoded>
  271. <wfw:commentRss>http://lamp-dev.ru/notebook-for-developers-2004.html/feed</wfw:commentRss>
  272. <slash:comments>0</slash:comments>
  273. </item>
  274. <item>
  275. <title>Firefox и Chrome блокируют сайт php.net</title>
  276. <link>http://lamp-dev.ru/php-dot-net-access-denied-1988.html</link>
  277. <comments>http://lamp-dev.ru/php-dot-net-access-denied-1988.html#respond</comments>
  278. <pubDate>Thu, 24 Oct 2013 08:53:49 +0000</pubDate>
  279. <dc:creator><![CDATA[admin]]></dc:creator>
  280. <category><![CDATA[Разное]]></category>
  281. <category><![CDATA[Chrome]]></category>
  282. <category><![CDATA[denied]]></category>
  283. <category><![CDATA[Firefox]]></category>
  284. <category><![CDATA[Google]]></category>
  285. <category><![CDATA[PHP]]></category>
  286.  
  287. <guid isPermaLink="false">http://lamp-dev.ru/?p=1988</guid>
  288. <description><![CDATA[Сегодня обнаружил, что браузеры Firefox и Chrome предостерегают от посещения сайта php.net Как пишут в в сводной информации http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=Firefox&#38;hl=ru&#38;site=http://php.net/ через этот сайт была установка вредоносного ПО. Но думаю что скоро на сайте php.net разберутся или уже разобрались и этот сайт вычеркнут из списка плохих. От себя скажу, что надо бы тренировать получше свои мозги и не [&#8230;]]]></description>
  289. <content:encoded><![CDATA[<p>Сегодня обнаружил, что браузеры Firefox и Chrome предостерегают от посещения сайта php.net</p>
  290. <p style="text-align: center;"><img class="aligncenter size-full wp-image-1989" style="margin: 10px 10px 10px 0;" alt="Предостережение php.net" src="http://lamp-dev.ru/wp-content/uploads/2013/10/php_site_access_denied.jpg" width="600" height="431" srcset="http://lamp-dev.ru/wp-content/uploads/2013/10/php_site_access_denied.jpg 600w, http://lamp-dev.ru/wp-content/uploads/2013/10/php_site_access_denied-300x215.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
  291. <p><span id="more-1988"></span><br />
  292. Как пишут в в сводной информации <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=Firefox&amp;hl=ru&amp;site=http://php.net/" target="_blank">http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=Firefox&amp;hl=ru&amp;site=http://php.net/</a> через этот сайт была установка вредоносного ПО.</p>
  293. <p>Но думаю что скоро на сайте php.net разберутся или уже разобрались и этот сайт вычеркнут из списка плохих.</p>
  294. <p>От себя скажу, что надо бы тренировать получше свои мозги и не бояться их грузить <img src="https://s.w.org/images/core/emoji/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Как это связано с новостью? Да просто не запоминаются элементарные вещи. Зашёл посмотреть на этот сайт, а тут бац. Хотя всё запомнить невозможно и если всё держать в голове можно наверное с ума сойти. Но всё же.  Думаю всем известно что мозг человека работает далеко не на все 100%. А с приходом информационных технологий и этот процент задействования мозга снижается.</p>
  295. <p>Собственно сайт то доступен, работает, если проигнорировать это предупреждение, но я всё таки доверяю этим предостережениям.</p>
  296. ]]></content:encoded>
  297. <wfw:commentRss>http://lamp-dev.ru/php-dot-net-access-denied-1988.html/feed</wfw:commentRss>
  298. <slash:comments>0</slash:comments>
  299. </item>
  300. </channel>
  301. </rss>
  302.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//lamp-dev.ru/feed

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda