27 декабря 2009 г.

GWT. Взаимодействие с Django

Вся работа в GWT имеет подробную документацию. В ней все понятно и прозрачно. Но наше дело тормозится тем, что в качестве бекенда у нас выступает Django. То есть стандартный GWT RPC нам не подходит. Встает вопрос о том, как обмениваться данными между GWT и Django.

Я долго раздумывал, какой интерфейс взаимодействия выбрать. Технология-то одна - ajax, а вот какой инструмент более удобен? Можно попробовать использовать RequestBuilder, но этот метод не совсем удобен и не совсем универсален. Поэтому я выбрал json-rpc. Для него уже все создано, как на стороне django, так и на стороне GWT.

Json-rpc, это легкий протокол удаленного вызова процедур, использующий для своего функционирования формат Json.
Пример запроса и ответа:
  1. --> { "method""echo""params": ["Hello JSON-RPC"], "id": 1}  
  2.   
  3. <-- { "result""Hello JSON-RPC""error"null"id": 1}  

Начнем с django. Добавляем поддержку json-rpc в наш проект.

Импортируем django-json-rpc и добавляем точку входа в urls.py.
  1.    
  2.   
  3. from jsonrpc import jsonrpc_site  
  4.   
  5. import myproj.myapp.views # подключаем файл, в котором буду храниться rpc функции  
  6.   
  7.   
  8.   
  9. urlpatterns += patterns('',   
  10.   
  11.    url(r'^json/', jsonrpc_site.dispatch, name="jsonrpc_mountpoint"),  
  12.   
  13. )  

Возьмем пример с readme:
  1.    
  2.   
  3. from jsonrpc import jsonrpc_method  
  4.  
  5.  
  6.  
  7. @jsonrpc_method('myapp.sayHello')  
  8.   
  9. def whats_the_time(request, name='Lester'):  
  10.   
  11.   return "Hello %s" % name  

Запускаем сервер, запускаем шел django
  1. ./manage.py runserver 8080  
  2.   
  3. ./manage.py shell  

И тестируем:
  1.    
  2.   
  3. >>> from jsonrpc.proxy import ServiceProxy  
  4.   
  5. >>> s = ServiceProxy('http://localhost:8080/json/')  
  6.   
  7. >>> s.myapp.sayHello('Sam')  
  8.   
  9. {u'error'None, u'id': u'jsonrpc', u'result': u'Hello Sam'}  

В общем, в документе все написано. Также в приложении есть своей браузер, зайти на него можно по адресу http://localhost:8080/json/browse/ , добавив в urls.py, например так:
  1.    
  2.   
  3. if settings.DEBUG:  
  4.   
  5.     urlpatterns += patterns('',  
  6.   
  7.               url(r'^json/browse/''jsonrpc.views.browse', name="jsonrpc_browser"), # for the graphical browser/web console only, omissible  
  8.   
  9.     )  
  10.   
  11.   
  12.   
  13. urlpatterns += patterns('',   
  14.   
  15.    url(r'^json/', jsonrpc_site.dispatch, name="jsonrpc_mountpoint"),  
  16.   
  17. )  


Я нашел несколько неточностей в документации, так, там name="jsonrpc_browser" без буквы "r" на конце, плюс url браузера
идет после r'^json/', который перекрывает его вызов.

Итак, rpc в django у нас теперь есть. Переходим к клиентской части rpc в gwt.

Проделываем все операции, указанные в readme и... у меня не заработало.
  1.    
  2.   
  3. 09:36:42.942 [ERROR] [myapp] Errors in 'jar:file:/lovely.gwt.jsonrpc-0.7.jar!/lovely/gwt/jsonrpc/client/JSONServiceBase.java'  
  4.   
  5. 09:36:42.957 [ERROR] [myapp] Line 29: The type JSONServiceBase must implement the inherited abstract method ServiceDefTarget.setRpcRequestBuilder(RpcRequestBuilder)  


Судя по всему, в GWT 2.0 изменились какие-то механизмы в сервисах JSON. Наверное класс JSONServiceBase раньше не требовал реализации метода ServiceDefTarget.setRpcRequestBuilder.
Что ж, давайте взглянем на исходники.
Действительно, функции setRpcRequestBuilder нет.

Проект не обновляется, разбираться времени нет, так что пробуем еще один вариант gwt-json-rpc.
По инструкции подключаем библиотеку. В инструкции написано что библиотека использует свой JSON кодер/декодер, поэтому можно использовать простые типы java: String, int, boolean, Array, HashMap, ArrayList, Vector, вместо классов GWT. В общем, она даже проще, чем lovely-gwt-jsonrpc.
У меня получился следующий код.

  1.    
  2.   
  3. //Create a new JsonRpc instance  
  4.   
  5. JsonRpc jsonRpc = new JsonRpc();  
  6.   
  7.   
  8.   
  9. //Create a callback handler  
  10.   
  11. AsyncCallback<object> callback = new AsyncCallback<object>() {  
  12.   
  13.   
  14.   
  15.           public void onFailure(Throwable caught) {  
  16.   
  17.               SC.say(caught.toString());  
  18.   
  19.           };  
  20.   
  21.   
  22.   
  23.           public void onSuccess(Object result) {  
  24.   
  25.               SC.say(result.toString());  
  26.   
  27.           };  
  28.   
  29.         };  
  30.   
  31. jsonRpc.request(  
  32.   
  33.           "http://localhost:8080/json/",  
  34.   
  35.           "myapp.sayHello",   
  36.   
  37.           null,  
  38.   
  39.           callback);  
  40.   
  41.   
  42.   
  43. Что такое SC смотрим <a href="http://vermus.blogspot.com/2009/12/google-web-toolkit-2-eclipse-smartgwt.html">здесь</a>.  
  44.   
  45.   
  46.   
  47. После запуска мы обнаруживаем, что все результаты попыток вызова функции попадают в onFailure. Обусловлено это скорее всего тем, что сервер Django и сервер gwt находятся на разных портах, а это противоречит <a href="http://en.wikipedia.org/wiki/Same_origin_policy">Same Origin Policy</a>.  
  48.   
  49. Далее, я скомпилировал проект, чтобы скопировать его в статический путь в проекте Django, и запустить под сервером Django, чтобы не нарушать SOP. И обнаружил, что CsrfMiddleware не дает скомпилированному gwt приложению делать POST запросы. Но мы знаем, что фрейморки, вроде jQuery позволяли это с легкостью делать. А все потому, что gwt-json-rpc при создании RequestBuilder не создает заголовок вида "X-Requested-With: XMLHttpRequest", поэтому django (точнее middleware) считает, что запрос сделан с другого домена, и возвращает ошибку 403. Значит надо сообщить ему об этом. AJAX запросы <a href="http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax">считаются безопасными</a> и не нуждаются в проверке, так как современные браузеры придерживаются SOP. Придется добавить данный заголовок в код библиотеки и пересобрать ее. Разработчику проблему описал. Может быть на момент прочтения статьи в ней будет прописан данный заголовок (функция JsonRpc.request):  
  50.   
  51. <pre name="code" class="java">  
  52. builder.setHeader("X-Requested-With""XMLHttpRequest");  
  53.   
  54. </pre>  
  55.   
  56. Я его добавил сам и сделал новый jar. Компилируем проект, копируем в путь для статики в django, и проверяем - все должно работать.   
  57.   
  58. Остался один ньюанс - работа в дебаг режиме и ajax запросы. Не будем же мы каждый раз компилировать проект, тем более терять все прелести дебага. Воспользуемся <a href="http://www.servletsuite.com/servlets/httpproxy.htm">HTTP proxy servlet</a>.  
  59.   
  60. Качаем сервлет, копируем в папку WEB-INF/lib, правим web.xml, у меня примерно следующее:  
  61.   
  62. <pre name="code" class="xml">  
  63. <servlet>  
  64.   
  65.   <servlet-name>HttpProxy</servlet-name>  
  66.   
  67.   <servlet-class>com.jsos.httpproxy.HttpProxyServlet</servlet-class>  
  68.   
  69. <init-param>  
  70.   
  71.   <param-name>host</param-name>  
  72.   
  73.   <param-value>http://localhost:8080/json/</param-value>  
  74.   
  75. </init-param>  
  76.   
  77. </servlet>  
  78.   
  79.   
  80.   
  81.  <servlet-mapping>  
  82.   
  83.   <servlet-name>HttpProxy</servlet-name>  
  84.   
  85.   <url-pattern>/json/</url-pattern>  
  86.   
  87. </servlet-mapping>   
  88.   
  89. </pre>  
  90.   
  91. Меняем путь запроса:  
  92.   
  93. <pre name="code" class="java">  
  94. jsonRpc.request(  
  95.   
  96.         "/json/",  
  97.   
  98.         "myapp.sayHello",   
  99.   
  100.         null,  
  101.   
  102.          callback);  
  103.   
  104. </pre>  
  105.   
  106.   
  107.   
  108. и проверяем работу в дебаг режиме.  
  109.   
  110.   
  111.   
  112. Вот и все. Удачной разработки.  
  113. <div style="clear: both;"></div>  
  114.   
  115. <div class="post-footer">  
  116. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  117. Автор:  
  118. <span class="fn">Vermus</span>  
  119. </span>  
  120. <span class="post-timestamp">  
  121. время  
  122. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/12/gwt-django.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-12-27T08:00:00+03:00">8:00:00 AM</abbr></a>  
  123. </span>  
  124. <span class="post-comment-link">  
  125. <a class="comment-link" href="http://vermus.blogspot.com/2009/12/gwt-django.html#comment-form" onclick="">0  
  126. коммент.</a>  
  127. </span>  
  128. <span class="post-icons">  
  129. </span>  
  130. <span class="post-backlinks post-comment-link">  
  131. </span>  
  132. </div>  
  133. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  134. Ярлыки:  
  135. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  136. <a href="http://vermus.blogspot.com/search/label/django-json-rpc" rel="tag">django-json-rpc</a>,  
  137. <a href="http://vermus.blogspot.com/search/label/Eclipse" rel="tag">Eclipse</a>,  
  138. <a href="http://vermus.blogspot.com/search/label/Google%20Web%20Toolkit" rel="tag">Google Web Toolkit</a>,  
  139. <a href="http://vermus.blogspot.com/search/label/gwt-json-rpc" rel="tag">gwt-json-rpc</a>  
  140. </span>  
  141. </div>  
  142. <div class="post-footer-line post-footer-line-3"></div>  
  143. </div>  
  144.   
  145.   
  146. <div class="inline-ad">  
  147. <script type="text/javascript"><!--  
  148. google_ad_client="pub-9773417036288474";  
  149. google_ad_host="pub-1556223355139109";  
  150. google_ad_width=300;  
  151. google_ad_height=250;  
  152. google_ad_format="300x250_as";  
  153. google_ad_type="text_image";  
  154. google_ad_host_channel="0001+S0009+L0007";  
  155. google_color_border="FFFFFF";  
  156. google_color_bg="FFFFFF";  
  157. google_color_link="474B4E";  
  158. google_color_url="C4663B";  
  159. google_color_text="7B8186";  
  160. //--></script>  
  161. <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">  
  162. </script>  
  163. </div>  
  164.   
  165.             
  166.           
  167.   
  168.           <div class="date-outer">  
  169.           
  170. <h2 class="date-header"><span>22 декабря 2009 г.</span></h2>  
  171.   
  172.           <div class="date-posts">  
  173.           
  174. <div class="post-outer">  
  175. <div class="post hentry">  
  176. <a name="416215981792668434"></a>  
  177. <h3 class="post-title entry-title">  
  178. <a href="http://vermus.blogspot.com/2009/12/gwt-entrypoint.html">GWT. Передача параметров в GWT</a>  
  179. </h3>  
  180. <div class="post-header-line-1"></div>  
  181. <div class="post-body entry-content">  
  182. Этой серией буду учиться вместе с вами, как работать с GWT в виде фронтенда и Django в виде бекенда. Пишу простым языком, так как сам разбираюсь в процессе.  
  183.   
  184. Для начала надо научиться передавать параметры в GWT. Первая и основная причина - идеология django - нельзя жестко использовать url адреса. Django для этого предоставляет множество средств, как то и специальный тег url в шаблонах, и специальную функцию <a href="http://docs.djangoproject.com/en/dev/topics/http/urls/#topics-http-reversing-url-namespaces">reverse</a> для использования в коде. То есть смысл определяется тем, что нельзя использовать url напрямую где бы-то ни было, кроме определения его в файле url.py. Любое изменение конфигурации url'ов в url.py не должно приводить к поломке приложения. В общем, для запуска GWT фронтенда нам необходим набор url-ов определенных в бекенде для ajax запросов.   
  185.   
  186. На стороне Django мы используем тег {% url %}, и выводим url'ы ajax запросов с помощью него, с этим все понятно. Но как их передать в GWT?  
  187.   
  188. Так как GWT и находится в клиентском окружении javascript окна, то мы можем <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/i18n/client/Dictionary.html">передать параметры</a> в темплейте Django как словарь javascript:  
  189. <pre name="code" class="js">  
  190. <script>   
  191. var ajaxsUrls = {  
  192. ajaxUrl1: "{% url ajaxNmaeView1 %}",  
  193. ajaxUrl2: "{% url ajaxNmaeView2 %}"  
  194. }   
  195. </script>   
  196. </pre>  
  197. И получить эти url'ы в GWT:  
  198.   
  199. <pre name="code" class="java">  
  200. public void useURLsDictionary() {  
  201.   Dictionary URLsDict = Dictionary.getDictionary("ajaxsUrls");  
  202.   
  203.   String ajaxUrl1 = URLsDict.get("ajaxUrl1");  
  204.   String ajaxUrl2 = URLsDict.get("ajaxUrl2");  
  205.   
  206. }  
  207. </pre>  
  208. <div style="clear: both;"></div>  
  209. </div>  
  210. <div class="post-footer">  
  211. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  212. Автор:  
  213. <span class="fn">Vermus</span>  
  214. </span>  
  215. <span class="post-timestamp">  
  216. время  
  217. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/12/gwt-entrypoint.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-12-22T13:15:00+03:00">1:15:00 PM</abbr></a>  
  218. </span>  
  219. <span class="post-comment-link">  
  220. <a class="comment-link" href="http://vermus.blogspot.com/2009/12/gwt-entrypoint.html#comment-form" onclick="">0  
  221. коммент.</a>  
  222. </span>  
  223. <span class="post-icons">  
  224. </span>  
  225. <span class="post-backlinks post-comment-link">  
  226. </span>  
  227. </div>  
  228. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  229. Ярлыки:  
  230. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  231. <a href="http://vermus.blogspot.com/search/label/Google%20Web%20Toolkit" rel="tag">Google Web Toolkit</a>  
  232. </span>  
  233. </div>  
  234. <div class="post-footer-line post-footer-line-3"></div>  
  235. </div>  
  236. </div>  
  237. </div>  
  238.   
  239.           </div></div>  
  240.           
  241.   
  242.           <div class="date-outer">  
  243.           
  244. <h2 class="date-header"><span>16 декабря 2009 г.</span></h2>  
  245.   
  246.           <div class="date-posts">  
  247.           
  248. <div class="post-outer">  
  249. <div class="post hentry">  
  250. <a name="6536201870689731513"></a>  
  251. <h3 class="post-title entry-title">  
  252. <a href="http://vermus.blogspot.com/2009/12/google-web-toolkit-2-eclipse-smartgwt.html">Google Web Toolkit 2, Eclipse, SmartGWT</a>  
  253. </h3>  
  254. <div class="post-header-line-1"></div>  
  255. <div class="post-body entry-content">  
  256. <a href="http://code.google.com/intl/ru-RU/webtoolkit/overview.html">Google Web Toolkit</a> - В Google Web Toolkit (GWT) интерфейс AJAX пишется на языке программирования Java, а затем GWT кросс-компилирует его в оптимизированный JavaScript, автоматически работающий во всех основных браузерах. При разработке можно быстро проходить по привычному для разработчиков JavaScript циклу "изменить – обновить – посмотреть", а также отлаживать код Java построчно.  
  257.   
  258. <a href="http://ru.wikipedia.org/wiki/Eclipse_(среда_разработки)">Eclipse </a>(/iˈklɪps/, от англ. затмение[1]) — свободный фреймворк для разработки модульных кроссплатформенных приложений. Разрабатывается и поддерживается Eclipse Foundation.  
  259. Наиболее известные приложения на основе Eclipse Platform — различные «Eclipse IDE» для разработки ПО на множестве языков (например, наиболее популярный «Java IDE», поддерживавшийся изначально, не полагается на какие-либо закрытые расширения, использует стандартный открытый API для доступа к Eclipse Platform).  
  260.   
  261. <a href="http://allgwt.ru/?post/2009/SmartGWT">SmartGWT </a> - Полная библиотека виджетов, основана на JS библиотеке SmartClient. Главная особенность- позволяет связывать пользовательские виджеты с серверными компонентами. Что позволяет делать управление данными на стороне сервера. Серьезный конкурент библиотеке Ext GWT. Распространяется как по платной так и бесплатной лицензиям. В платной лицензии есть возможность использования Enterprise объектов и визуального редактора виджетов.  
  262.   
  263. Смысл ясен. Надо соединить все это вместе.  
  264.   
  265. 1. Скачиваем eclipse для java.   
  266. <a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>  
  267.   
  268. 2.  Ставим поверх Web Tools Platform (WTP) Project.  
  269. <a href="http://www.eclipse.org/webtools/">http://www.eclipse.org/webtools/</a>  
  270.   
  271. 3. Ставим GWT plugin для eclipse.  
  272. <a href="http://code.google.com/intl/ru/eclipse/docs/getting_started.html">http://code.google.com/intl/ru/eclipse/docs/getting_started.html</a>  
  273.   
  274. 4. Создаем проект Web Application Project.  
  275. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hRjbDjAJ0IGwelnuJ-DQCHkCDC1qA_6ZRD8Wo1Xom9PKLR0QvBX8MLdIlB4kYjJBLjrtHLabSrVLZ_aS9XGuO9DSlqVNsmFUND79BJfDLQC25emZHi0APJ9eyO4NWvulvW9Gxlga/s1600-h/NewWebProject.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5415811620678979522" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hRjbDjAJ0IGwelnuJ-DQCHkCDC1qA_6ZRD8Wo1Xom9PKLR0QvBX8MLdIlB4kYjJBLjrtHLabSrVLZ_aS9XGuO9DSlqVNsmFUND79BJfDLQC25emZHi0APJ9eyO4NWvulvW9Gxlga/s400/NewWebProject.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 355px; height: 400px;"></a>  
  276.   
  277. 5. Скачиваем SmartGWT.  
  278. <a href="http://code.google.com/p/smartgwt/">http://code.google.com/p/smartgwt/</a>  
  279.   
  280. 6. Заходим в свойства проекта, добавляем в Java Build Path -> Libraries - Add External JARs библиотеки:  
  281. smartgwt.jar  
  282. smartgwt-skins.jar (если вы планируете изменить скин, в обратном случае, скин по умолчанию находится в основной библиотеке)  
  283.   
  284. 7. Заходим в директорию war, добавляем в главном html файле <span style="font-weight:bold;">перед</span> основным подключенным js файлом следующее (для указания пути статики SmartGWT):  
  285. <pre name="code" class="xml">  
  286. <script type="text/javascript" language="javascript">  
  287. var isomorphicDir = "[ModuleName]/sc/";  
  288. </script>  
  289. </pre>  
  290. 8. Добавляем в ModuleName.gwt.xml:  
  291. <pre name="code" class="xml">  
  292. <inherits name="com.smartgwt.SmartGwt">  
  293. </inherits></pre>  
  294. 9. В классе EntryPoint (точка входа нашего приложения) ищем функцию onModuleLoad();  
  295. Пробуем SmartGMT, дописывая следующее:  
  296. <pre name="code" class="java">  
  297. SC.say("Привет, мир!");  
  298. </pre>  
  299. Плюс импорт в начало:  
  300. <pre name="code" class="java">  
  301. import com.smartgwt.client.util.SC;  
  302. </pre>  
  303. 10. Жмем Debug, переходим по адресу, который отображает консоль Develompment Mode, устанавливаем плагин для Вашего браузера.  
  304. Видим примерно следующее:  
  305. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjesQ1LPMw3wZM8TSjVRq89RSLTQbJU0fIEOh8EkeHMTXWjSePFidx4yIFTpeQxfxTVji0PI19UDR6m85tTDrL20ae1qS1R-Q7CKcSmeRPcbiYS4eKdZpfLpWU6mWOQluUehjr_z1i9/s1600-h/SmartGwt.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5415808031990355218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjesQ1LPMw3wZM8TSjVRq89RSLTQbJU0fIEOh8EkeHMTXWjSePFidx4yIFTpeQxfxTVji0PI19UDR6m85tTDrL20ae1qS1R-Q7CKcSmeRPcbiYS4eKdZpfLpWU6mWOQluUehjr_z1i9/s400/SmartGwt.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 366px; height: 400px;"></a>  
  306. Далее работает в обычном режиме - точки останова, дебаггинг и прочее.  
  307.   
  308. 11. Компиляция для опубликования.   
  309. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHY19nwtVgzRBXGDGHAYzhVdIGjXBEQFZfjJppoz5AGR-MLvjjIU33fRjGyyi0GbFzrSBpSu4UK6OnLLjk6Qh2uUdv_qyRmynv9cEMZ-0UZz3mVgzeiLWNg5xmXCD4S-CMd3DdJ2lM/s1600-h/GWTCompile.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5415809758616598018" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHY19nwtVgzRBXGDGHAYzhVdIGjXBEQFZfjJppoz5AGR-MLvjjIU33fRjGyyi0GbFzrSBpSu4UK6OnLLjk6Qh2uUdv_qyRmynv9cEMZ-0UZz3mVgzeiLWNg5xmXCD4S-CMd3DdJ2lM/s400/GWTCompile.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 289px; height: 400px;"></a>  
  310.   
  311. 12. Ну и пощупать SmartGWT online можно <a href="http://www.smartclient.com/smartgwt/showcase">здесь</a>, а gwt - <a href="http://gwt.google.com/samples/Showcase/Showcase.html">здесь</a>.  
  312.   
  313. ps. К сожалению плагина для Google Chrome под linux нет. <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4325">Выражены некоторые надежды</a> на появлении его в пятой версии браузера.  
  314. К счастью разработку это не затормозит, так как есть версия плагина для Firefox.  
  315. <div style="clear: both;"></div>  
  316. </div>  
  317. <div class="post-footer">  
  318. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  319. Автор:  
  320. <span class="fn">Vermus</span>  
  321. </span>  
  322. <span class="post-timestamp">  
  323. время  
  324. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/12/google-web-toolkit-2-eclipse-smartgwt.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-12-16T14:46:00+03:00">2:46:00 PM</abbr></a>  
  325. </span>  
  326. <span class="post-comment-link">  
  327. <a class="comment-link" href="http://vermus.blogspot.com/2009/12/google-web-toolkit-2-eclipse-smartgwt.html#comment-form" onclick="">5  
  328. коммент.</a>  
  329. </span>  
  330. <span class="post-icons">  
  331. </span>  
  332. <span class="post-backlinks post-comment-link">  
  333. </span>  
  334. </div>  
  335. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  336. Ярлыки:  
  337. <a href="http://vermus.blogspot.com/search/label/Eclipse" rel="tag">Eclipse</a>,  
  338. <a href="http://vermus.blogspot.com/search/label/Google%20Web%20Toolkit%202" rel="tag">Google Web Toolkit 2</a>,  
  339. <a href="http://vermus.blogspot.com/search/label/java" rel="tag">java</a>,  
  340. <a href="http://vermus.blogspot.com/search/label/javascript" rel="tag">javascript</a>,  
  341. <a href="http://vermus.blogspot.com/search/label/SmartGWT" rel="tag">SmartGWT</a>  
  342. </span>  
  343. </div>  
  344. <div class="post-footer-line post-footer-line-3"></div>  
  345. </div>  
  346. </div>  
  347. </div>  
  348.   
  349.           </div></div>  
  350.           
  351.   
  352.           <div class="date-outer">  
  353.           
  354. <h2 class="date-header"><span>8 декабря 2009 г.</span></h2>  
  355.   
  356.           <div class="date-posts">  
  357.           
  358. <div class="post-outer">  
  359. <div class="post hentry">  
  360. <a name="4359701721000040950"></a>  
  361. <h3 class="post-title entry-title">  
  362. <a href="http://vermus.blogspot.com/2009/12/cppcms-c-web-framework.html">CppCMS — C++ Web Framework</a>  
  363. </h3>  
  364. <div class="post-header-line-1"></div>  
  365. <div class="post-body entry-content">  
  366. Нашел довольно интересный проект. Называется <a href="http://cppcms.sourceforge.net/">CppCMS</a>. Несмотря на название - это не CMS - это фреймворк. Многие идеи взяты из <a href="http://vermus.blogspot.com/search/label/django">django</a>, как ни странно. Как я понял, разрабатывает его один человек.   
  367.   
  368. Что может:  
  369. - Разные API веб серверов – FastCGI, SCGI, CGI  
  370. - Разные рабочие модели: single thread, thread pool, prefork.  
  371. - URL маппинг.  
  372. - Система шаблонов.  
  373. - Кешировние (в памяти, в расширяемой памяти и распределенном режиме)  
  374. - Простая обработка HTML форм и верификация данных с них.  
  375. - Интернационализация, включая поддержку языков RTL (справа налево).  
  376. - Библиотека простого доступа к SQL.  
  377. - Простое конфигурирование.  
  378. - Прозрачное управление сессиями, используя различные механизмы: зашифрованные куки, кэш, базу данных, распределенные по сети и их различные комбинации.  
  379.   
  380. Довольно-таки неплохой наборчик.  
  381.   
  382. А что будет в версии 1 (выйдет через месяца три, как я понял)?  
  383. А вот что:  
  384. - Стабильное и обратно совместимое API и ABI между минор релизами.  
  385. - Полная документация на Doxygen.  
  386. - Сокращение зависимостей от сторонних библиотек.  
  387. - JSON - теперь формат внутреннего представления данных и управления конфигурацией.  
  388. - Поддержка событий  
  389. - Поддержка технологии Comet/Server Push.  
  390. - Поддержка синхронного и асинхронного JSON-RPC, как главного формата коммуникации между приложениями фреймворка.  
  391. - Поддержка Win32 через Mingw.  
  392. - Внутренний Веб сервер для разработки или запуска через http-прокси.  
  393. <div style="clear: both;"></div>  
  394. </div>  
  395. <div class="post-footer">  
  396. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  397. Автор:  
  398. <span class="fn">Vermus</span>  
  399. </span>  
  400. <span class="post-timestamp">  
  401. время  
  402. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/12/cppcms-c-web-framework.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-12-08T13:44:00+03:00">1:44:00 PM</abbr></a>  
  403. </span>  
  404. <span class="post-comment-link">  
  405. <a class="comment-link" href="http://vermus.blogspot.com/2009/12/cppcms-c-web-framework.html#comment-form" onclick="">2  
  406. коммент.</a>  
  407. </span>  
  408. <span class="post-icons">  
  409. </span>  
  410. <span class="post-backlinks post-comment-link">  
  411. </span>  
  412. </div>  
  413. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  414. Ярлыки:  
  415. <a href="http://vermus.blogspot.com/search/label/C%2B%2B" rel="tag">C++</a>,  
  416. <a href="http://vermus.blogspot.com/search/label/CppCMS" rel="tag">CppCMS</a>,  
  417. <a href="http://vermus.blogspot.com/search/label/Framework" rel="tag">Framework</a>,  
  418. <a href="http://vermus.blogspot.com/search/label/Web" rel="tag">Web</a>  
  419. </span>  
  420. </div>  
  421. <div class="post-footer-line post-footer-line-3"></div>  
  422. </div>  
  423. </div>  
  424. </div>  
  425.   
  426.           </div></div>  
  427.           
  428.   
  429.           <div class="date-outer">  
  430.           
  431. <h2 class="date-header"><span>3 декабря 2009 г.</span></h2>  
  432.   
  433.           <div class="date-posts">  
  434.           
  435. <div class="post-outer">  
  436. <div class="post hentry">  
  437. <a name="8816794851604191376"></a>  
  438. <h3 class="post-title entry-title">  
  439. <a href="http://vermus.blogspot.com/2009/12/google-dns.html">Google открыл публичные DNS серверы</a>  
  440. </h3>  
  441. <div class="post-header-line-1"></div>  
  442. <div class="post-body entry-content">  
  443. Раньше как-то пользовался OpenDNS (провайдер не мог добиться стабильной работы своих DNS серверов). Но он кое чем меня не устраивал.  
  444.   
  445. Теперь <a href="http://googlecode.blogspot.com/2009/12/introducing-google-public-dns-new-dns.html">google открыл</a> свои публичные DNS сервера. Их адреса:  
  446.   
  447. 8.8.8.8  
  448. 8.8.4.4  
  449.   
  450. Ну и статья <a href="http://code.google.com/intl/ru-RU/speed/public-dns/docs/using.html">как их использовать</a>.  
  451. <div style="clear: both;"></div>  
  452. </div>  
  453. <div class="post-footer">  
  454. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  455. Автор:  
  456. <span class="fn">Vermus</span>  
  457. </span>  
  458. <span class="post-timestamp">  
  459. время  
  460. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/12/google-dns.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-12-03T23:03:00+03:00">11:03:00 PM</abbr></a>  
  461. </span>  
  462. <span class="post-comment-link">  
  463. <a class="comment-link" href="http://vermus.blogspot.com/2009/12/google-dns.html#comment-form" onclick="">0  
  464. коммент.</a>  
  465. </span>  
  466. <span class="post-icons">  
  467. </span>  
  468. <span class="post-backlinks post-comment-link">  
  469. </span>  
  470. </div>  
  471. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  472. Ярлыки:  
  473. <a href="http://vermus.blogspot.com/search/label/dns" rel="tag">dns</a>,  
  474. <a href="http://vermus.blogspot.com/search/label/Google%20Chorme" rel="tag">Google Chorme</a>,  
  475. <a href="http://vermus.blogspot.com/search/label/OpenDNS" rel="tag">OpenDNS</a>  
  476. </span>  
  477. </div>  
  478. <div class="post-footer-line post-footer-line-3"></div>  
  479. </div>  
  480. </div>  
  481. </div>  
  482.   
  483.           </div></div>  
  484.           
  485.   
  486.           <div class="date-outer">  
  487.           
  488. <h2 class="date-header"><span>27 октября 2009 г.</span></h2>  
  489.   
  490.           <div class="date-posts">  
  491.           
  492. <div class="post-outer">  
  493. <div class="post hentry">  
  494. <a name="7745800776247548255"></a>  
  495. <h3 class="post-title entry-title">  
  496. <a href="http://vermus.blogspot.com/2009/10/django-eclipse-c-pydev.html">Дебагинг django в eclipse c помощью PyDev</a>  
  497. </h3>  
  498. <div class="post-header-line-1"></div>  
  499. <div class="post-body entry-content">  
  500. Pydev в сентябре <a href="http://pydev.org/index.html">переехал</a>. <a href="http://pydev.blogspot.com/2009/09/pydev-150-pydev-extensions-open-sourced.html#comments">Да еще его расширения стали Open Source</a>:  
  501. <blockquote>Pydev Extensions is now merged with Pydev, and its once closed source code has become open source. Thus, there is no more Pydev Extensions, only the open source Pydev, with all the capabilities of Pydev Extensions incorporated.</blockquote>  
  502.   
  503. Изменился и сайт апдейта для eclipse - http://pydev.org/updates .  
  504.   
  505. А что нам это дает? А это нам дает бесплатную штуку под названием "Debug 'server' for remote debugging", с помощью которой можно дебажить django очень удобным способом.  
  506.   
  507. Для начала выполняем условия, как написано <a href="http://pydev.org/manual_adv_remote_debugger.html">здесь</a>, в том числе заносим в PYTHONPATH в настройках Eclipse путь примерно следующего содержания   
  508. "eclipse\plugins\org.python.pydev.debug_1.5.0.1251989166\pysrc\" (найдете у себя подобный) и запускаем сервер (из перспективы debug):  
  509.   
  510. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pydev.org/images/debugger/remotedebugger1.png"><img alt="" border="0" src="http://pydev.org/images/debugger/remotedebugger1.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 183px;"></a>  
  511.   
  512. Добавляем <a href="http://bear330.wordpress.com/2007/10/30/how-to-debug-django-web-application-with-autoreload/">следующий код</a> в manage.py (после if __name__ == "__main__":) проекта, что дает нам возможность обернуть PyDev брейкпоинты в pydevd.settrace(), который пересылает трейс Debug Remote серверу (для теста рекомендую сначала использовать --noreload и pydevd.settrace(),  и убедиться, что трейс возникает именно на Debug Remote server, так же можно попробовать запускать проект не в режиме дебага, а в режиме run, трейс должен отправляться в любом режиме):  
  513.   
  514. <pre name="code" class="py">  
  515. import sys  
  516.   
  517. if len(sys.argv) > 1:  
  518.     command = sys.argv[1]  
  519. if settings.DEBUG and (command == "runserver" or command == "testserver"):  
  520.     # Make pydev debugger works for auto reload.  
  521.     try:  
  522.         import pydevd  
  523.     except ImportError:  
  524.         sys.stderr.write("Error: " +  
  525.             "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")  
  526.         sys.exit(1)  
  527.   
  528.     from django.utils import autoreload  
  529.     m = autoreload.main  
  530.     def main(main_func, args=None, kwargs=None):  
  531.         import os  
  532.         if os.environ.get("RUN_MAIN") == "true":  
  533.             def pydevdDecorator(func):  
  534.                 def wrap(*args, **kws):  
  535.                     pydevd.settrace(suspend=False)  
  536.                     return func(*args, **kws)  
  537.                 return wrap  
  538.             main_func = pydevdDecorator(main_func)  
  539.   
  540.         return m(main_func, args, kwargs)  
  541.   
  542.      autoreload.main = main  
  543. </pre>  
  544.   
  545. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pydev.org/images/debugger/remotedebugger3.png"><img alt="" border="0" src="http://pydev.org/images/debugger/remotedebugger3.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 534px;"></a>  
  546.   
  547. А для чего мы это, собственно говоря, делали? А чтобы запускать runserver без --noreload. Чтобы и изменение кода и брейкпоинты обрабатывались "онлайн".  
  548. Примерно вот такая картина:  
  549. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpcT0GbxO9r_cEE3MUwQgUXgnYQ4WTpgR9BsfTxJSzzXFogeXhpfRi372qxU1hujD7-6UIwEjnkyXX-6ZjazH_OzKcpr2sJ4YvGBTUAi8hh6D_OYdh-liK_0XgJGnH1AkHCLZbUJ4J/s1600-h/debug+django.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397631078009502162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpcT0GbxO9r_cEE3MUwQgUXgnYQ4WTpgR9BsfTxJSzzXFogeXhpfRi372qxU1hujD7-6UIwEjnkyXX-6ZjazH_OzKcpr2sJ4YvGBTUAi8hh6D_OYdh-liK_0XgJGnH1AkHCLZbUJ4J/s400/debug+django.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 347px;"></a>  
  550. <div style="clear: both;"></div>  
  551. </div>  
  552. <div class="post-footer">  
  553. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  554. Автор:  
  555. <span class="fn">Vermus</span>  
  556. </span>  
  557. <span class="post-timestamp">  
  558. время  
  559. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/10/django-eclipse-c-pydev.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-10-27T15:14:00+03:00">3:14:00 PM</abbr></a>  
  560. </span>  
  561. <span class="post-comment-link">  
  562. <a class="comment-link" href="http://vermus.blogspot.com/2009/10/django-eclipse-c-pydev.html#comment-form" onclick="">11  
  563. коммент.</a>  
  564. </span>  
  565. <span class="post-icons">  
  566. </span>  
  567. <span class="post-backlinks post-comment-link">  
  568. </span>  
  569. </div>  
  570. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  571. Ярлыки:  
  572. <a href="http://vermus.blogspot.com/search/label/debug" rel="tag">debug</a>,  
  573. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  574. <a href="http://vermus.blogspot.com/search/label/Eclipse" rel="tag">Eclipse</a>,  
  575. <a href="http://vermus.blogspot.com/search/label/PyDev" rel="tag">PyDev</a>  
  576. </span>  
  577. </div>  
  578. <div class="post-footer-line post-footer-line-3"></div>  
  579. </div>  
  580. </div>  
  581. </div>  
  582.   
  583.           </div></div>  
  584.           
  585.   
  586.           <div class="date-outer">  
  587.           
  588. <h2 class="date-header"><span>24 октября 2009 г.</span></h2>  
  589.   
  590.           <div class="date-posts">  
  591.           
  592. <div class="post-outer">  
  593. <div class="post hentry">  
  594. <a name="1188681564448663716"></a>  
  595. <h3 class="post-title entry-title">  
  596. <a href="http://vermus.blogspot.com/2009/10/google-chorme-debian.html">Google Chorme в Debian</a>  
  597. </h3>  
  598. <div class="post-header-line-1"></div>  
  599. <div class="post-body entry-content">  
  600. Debian в качестве ОС для нетбука asus eeepc 1000 меня полностью устраивал. Во всем, кроме браузеров. Идущий в комплекте Iceweasel ничем не отличился от обычного firefox, который я установил, после Iceweasel.  И тот и другой потребляли неимоверное количество памяти и процессора, веб разработка на коленке казалась просто невозможной. Flash плеер, который идет в дебиане (не помню его название) - это просто тихий ужас. Он был заменен официальным с сайта adobe. После этого флеш заработал как надо, но потребляет очень много процессорного времени.   
  601. Так как в общем, такая скорость меня не устраивала, решил попробовать Google Chrome. Стабильного релиза под линукс до сих пор нет, официальный сайт google предлагает нам оставить e-mail для оповещения о выходе релиза браузера. Но, как известно, есть не стабильная ветка, deb пакет которой можно взять отсюда: http://dev.chromium.org/getting-involved/dev-channel  
  602. Я скачал dev пакет, установил.  
  603. Все очень приятно удивляло.   
  604. 1. Пакет устанавливает дополнительный репозиторий, с которого, по-видимому, он планирует обновляться.  
  605. 2. Первый запуск - предложение импортировать настройки браузера с firefox.  
  606. 3. Русский интерфейс (правда не весь, новые функции наверное не успевают переводить).  
  607. 4. БОльшая полезная площадь страниц (что особенно актуально в нетбуках).  
  608. 5. Ну конечно скорость! Намного шустрее.  
  609. 6. Поедание памяти (без флеша  -1-3% на 10 вкладках, в то время как мозила - до 20%).  
  610.   
  611. С флешом таже беда, флеш на torrents.ru занимает 50% процессора сразу. Но это проблема флеша, попробую найти ее решение позже.  
  612.   
  613. Далее, мне нужен был firebug или аналог.   
  614. В самом Crome есть <a href="http://blog.chromium.org/2009/06/developer-tools-for-google-chrome.html">DeveloperTools</a> - который, в принципе, может заменить и firebug - он уже сейчас предоставляет много функций, хотя  может быть не привычно для любителей firebug'а.  
  615. Также, хромисты пошли дальше, выпустили в августе так называемый <a href="http://blog.chromium.org/2009/08/google-chrome-developer-tools-for.html">CrhomeDevtools</a>, который <a href="http://code.google.com/p/chromedevtools/">позволяет использовать eclipse</a> для дебага яваскрипта в eclipse.  
  616.   
  617. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chromedevtools.googlecode.com/svn/wiki/RemoteOptions.png"><img alt="" border="0" src="http://chromedevtools.googlecode.com/svn/wiki/RemoteOptions.0.1.2.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 574px; height: 481px;"></a>  
  618.   
  619. Еще есть приложение диспетчер задач. Он показывает нагрузку на процессор и скорость закачки страниц, как для всего браузера, так и для каждой вкладки (у меня скорость показывал для каждой вкладки, а процессор - нет, только общий, наверное не сделано еще).  
  620.   
  621. В общем, первые впечатления самые наиположительнейшие, дерзайте.  
  622. <div style="clear: both;"></div>  
  623. </div>  
  624. <div class="post-footer">  
  625. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  626. Автор:  
  627. <span class="fn">Vermus</span>  
  628. </span>  
  629. <span class="post-timestamp">  
  630. время  
  631. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/10/google-chorme-debian.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-10-24T18:52:00+04:00">6:52:00 PM</abbr></a>  
  632. </span>  
  633. <span class="post-comment-link">  
  634. <a class="comment-link" href="http://vermus.blogspot.com/2009/10/google-chorme-debian.html#comment-form" onclick="">0  
  635. коммент.</a>  
  636. </span>  
  637. <span class="post-icons">  
  638. </span>  
  639. <span class="post-backlinks post-comment-link">  
  640. </span>  
  641. </div>  
  642. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  643. Ярлыки:  
  644. <a href="http://vermus.blogspot.com/search/label/chromebug" rel="tag">chromebug</a>,  
  645. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  646. <a href="http://vermus.blogspot.com/search/label/firebug" rel="tag">firebug</a>,  
  647. <a href="http://vermus.blogspot.com/search/label/Google%20Chorme" rel="tag">Google Chorme</a>  
  648. </span>  
  649. </div>  
  650. <div class="post-footer-line post-footer-line-3"></div>  
  651. </div>  
  652. </div>  
  653. </div>  
  654.   
  655.           </div></div>  
  656.           
  657.   
  658.           <div class="date-outer">  
  659.           
  660. <h2 class="date-header"><span>3 сентября 2009 г.</span></h2>  
  661.   
  662.           <div class="date-posts">  
  663.           
  664. <div class="post-outer">  
  665. <div class="post hentry">  
  666. <a name="6417295447550564749"></a>  
  667. <h3 class="post-title entry-title">  
  668. <a href="http://vermus.blogspot.com/2009/09/load-visual-studio-200b.html">Отмена обработки события load дизайнером форм Visual Studio 2005</a>  
  669. </h3>  
  670. <div class="post-header-line-1"></div>  
  671. <div class="post-body entry-content">  
  672. Иногда при конструировании сложных форм в Visual Studio, особенно при наследовании Дизайнер студии не справляется с загрузкой сторонних компонентов из солюшена (например, не может динамически прилинковать class assembly другого проекта солюшена).  
  673. Дизайнер обрабатывает конструктор и событие Load формы\контрола.  
  674. Решается это довольно просто, вот таким способом мы определяем, что загрузка функции идет от дизайнера и прекращаем обработку события (или конструктора).  
  675.   
  676. <pre name="code" class="CSharp">  
  677. private void MyUserControl_Load(object sender, EventArgs e)  
  678. {  
  679.   if (this.DesignMode) return;  
  680.   
  681.   ... а здесь наш код ...  
  682. }   
  683. </pre>  
  684. <div style="clear: both;"></div>  
  685. </div>  
  686. <div class="post-footer">  
  687. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  688. Автор:  
  689. <span class="fn">Vermus</span>  
  690. </span>  
  691. <span class="post-timestamp">  
  692. время  
  693. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/09/load-visual-studio-200b.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-09-03T10:30:00+04:00">10:30:00 AM</abbr></a>  
  694. </span>  
  695. <span class="post-comment-link">  
  696. <a class="comment-link" href="http://vermus.blogspot.com/2009/09/load-visual-studio-200b.html#comment-form" onclick="">1 коммент.</a>  
  697. </span>  
  698. <span class="post-icons">  
  699. </span>  
  700. <span class="post-backlinks post-comment-link">  
  701. </span>  
  702. </div>  
  703. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  704. Ярлыки:  
  705. <a href="http://vermus.blogspot.com/search/label/.NET" rel="tag">.NET</a>,  
  706. <a href="http://vermus.blogspot.com/search/label/C%23" rel="tag">C#</a>,  
  707. <a href="http://vermus.blogspot.com/search/label/Visual%20Studio%202005" rel="tag">Visual Studio 2005</a>  
  708. </span>  
  709. </div>  
  710. <div class="post-footer-line post-footer-line-3"></div>  
  711. </div>  
  712. </div>  
  713. </div>  
  714.   
  715.           </div></div>  
  716.           
  717.   
  718.           <div class="date-outer">  
  719.           
  720. <h2 class="date-header"><span>1 сентября 2009 г.</span></h2>  
  721.   
  722.           <div class="date-posts">  
  723.           
  724. <div class="post-outer">  
  725. <div class="post hentry">  
  726. <a name="258765527052793489"></a>  
  727. <h3 class="post-title entry-title">  
  728. <a href="http://vermus.blogspot.com/2009/09/nhibernate-net.html">Nhibernate в .NET</a>  
  729. </h3>  
  730. <div class="post-header-line-1"></div>  
  731. <div class="post-body entry-content">  
  732. Надоел мне, так называемый raw SQL на работе, и воодушевившийся django я подумал, а нет ли ORM для C# .NET 2.0 (тем более, что в NET 3.5 и студии 2008 уже заложена пооддержка ORM в виде LINQ (хотя, как я понял - это не совсем ORM, а скорее аналог HQL). Оказалось есть и  не одна.  
  733.   
  734. Так как я приверженец os, поэтому неудивительно, что мой выбор пал на NHibernate.  
  735.   
  736. <blockquote>NHibernate — ORM-решение для платформы Microsoft .NET портированное с Java. Это бесплатная библиотека с открытым кодом, распространяется под лицензией GNU Lesser General Public License.  
  737.   
  738. NHibernate позволяет отображать объекты бизнес-логики на реляционную базу данных. По заданному XML-описанию сущностей и связей NHibernate автоматически создает SQL-запросы для загрузки и сохранения объектов.  
  739.   
  740. NHibernate является портом на .NET популярной на платформе Java библиотеки Hibernate. Версия 1.0 покрывает набор возможностей Hibernate 2.1, а также часть возможностей Hibernate 3. NHibernate 1.2.1, выпущенная в ноябре 2007 года, предоставляет ещё больше возможностей из Hibernate 3, поддерживает .NET 2.0, хранимые процедуры, generics и nullable типы. NHibernate 2.0.1, выпущенная в конце сентября 2008 года предоставляет бо́льшую часть возможностей Hibernate 3.  
  741. Поддерживаемые СУБД  
  742.   
  743.     * Microsoft SQL Server  
  744.     * Oracle  
  745.     * Microsoft Access  
  746.     * Firebird  
  747.     * PostgreSQL  
  748.     * DB2 UDB  
  749.     * MySQL  
  750.     * SQLite  
  751. </blockquote>  
  752.   
  753. http://ru.wikipedia.org/wiki/NHibernate  
  754.   
  755. Чтобы быстро начать с ним работать, рекомендую просмотреть следущие скринкасты:  
  756. <a href="http://www.summerofnhibernate.com/">Summer of nhibernate</a>  
  757.   
  758. Через день вы сможете уже писать приложения, используя NHibernate, что в дальнейшем сэкономит вам уйму времени (написать один класс для таблицы и все - использовать эти классы в любой программе).  
  759. В общем, рекомендую посмотреть, а потом решить, подходить ли данное решение для Вас.  
  760.   
  761. ps. приверженцы Djanjo оценят, я уверен =)  
  762. pps. Да, с Днем Знаний всех! Помните, учиться никогда не поздно! ;)  
  763.   
  764. <small><a href="http://knigka.info/" target="_blank">укапывп</a></small>  
  765. <div style="clear: both;"></div>  
  766. </div>  
  767. <div class="post-footer">  
  768. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  769. Автор:  
  770. <span class="fn">Vermus</span>  
  771. </span>  
  772. <span class="post-timestamp">  
  773. время  
  774. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/09/nhibernate-net.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-09-01T05:49:00+04:00">5:49:00 AM</abbr></a>  
  775. </span>  
  776. <span class="post-comment-link">  
  777. <a class="comment-link" href="http://vermus.blogspot.com/2009/09/nhibernate-net.html#comment-form" onclick="">2  
  778. коммент.</a>  
  779. </span>  
  780. <span class="post-icons">  
  781. </span>  
  782. <span class="post-backlinks post-comment-link">  
  783. </span>  
  784. </div>  
  785. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  786. Ярлыки:  
  787. <a href="http://vermus.blogspot.com/search/label/.NET%20C%23" rel="tag">.NET C#</a>,  
  788. <a href="http://vermus.blogspot.com/search/label/Nhibernate" rel="tag">Nhibernate</a>,  
  789. <a href="http://vermus.blogspot.com/search/label/ORM" rel="tag">ORM</a>,  
  790. <a href="http://vermus.blogspot.com/search/label/SQL" rel="tag">SQL</a>  
  791. </span>  
  792. </div>  
  793. <div class="post-footer-line post-footer-line-3"></div>  
  794. </div>  
  795. </div>  
  796. </div>  
  797.   
  798.           </div></div>  
  799.           
  800.   
  801.           <div class="date-outer">  
  802.           
  803. <h2 class="date-header"><span>31 августа 2009 г.</span></h2>  
  804.   
  805.           <div class="date-posts">  
  806.           
  807. <div class="post-outer">  
  808. <div class="post hentry">  
  809. <a name="835110725554998802"></a>  
  810. <h3 class="post-title entry-title">  
  811. <a href="http://vermus.blogspot.com/2009/08/gitextensions.html">Используем gitextensions</a>  
  812. </h3>  
  813. <div class="post-header-line-1"></div>  
  814. <div class="post-body entry-content">  
  815. Я сначала даже писать не хотел, все так ясно и прозрачно. Но так как на русском ничего нет, то решил все-таки кое-чего написать.  
  816.   
  817. Для начала возможности <a href="http://code.google.com/p/gitextensions/">gitextensions</a>  
  818.   
  819.     * интеграция Git в Windows Explorer  
  820.     * Плагин в Visual Studio (2005/2008) для Git  
  821.     * Богатый пользовательский интерфейс Git  
  822.     * Один инсталлер для Git, GitExtensions и утилиты слияния KDiff3  
  823.     * поддержка 32bit и 64bit!   
  824.   
  825. Ну собственно, <a href="http://code.google.com/p/gitextensions/downloads/list">качаем</a>, устанавливаем.  
  826.   
  827. Вот так выглядит плагин для студии:  
  828.   
  829. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://gitextensions.googlecode.com/files/VisualStudio2008_2.jpg"><img alt="" border="0" src="http://gitextensions.googlecode.com/files/VisualStudio2008_2.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 412px; height: 386px;"></a>  
  830.   
  831. Для push'а в нашу установку <a href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html">установки GIT сервера</a>, прописываем путь примерно так:  
  832.   
  833. gituser@SERVER:project.git  
  834.   
  835. в поле url на следующем скрине:  
  836.   
  837. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://gitextensions.googlecode.com/files/RemoteSSH.jpg"><img alt="" border="0" src="http://gitextensions.googlecode.com/files/RemoteSSH.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 540px; height: 406px;"></a>  
  838.   
  839. На странице проекта <a href="http://code.google.com/p/gitextensions/">много скринов</a> примеров использования.  
  840.   
  841. Больших сложностей в использовании я не вижу, удачи! ;)  
  842. <div style="clear: both;"></div>  
  843. </div>  
  844. <div class="post-footer">  
  845. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  846. Автор:  
  847. <span class="fn">Vermus</span>  
  848. </span>  
  849. <span class="post-timestamp">  
  850. время  
  851. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/08/gitextensions.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-08-31T08:33:00+04:00">8:33:00 AM</abbr></a>  
  852. </span>  
  853. <span class="post-comment-link">  
  854. <a class="comment-link" href="http://vermus.blogspot.com/2009/08/gitextensions.html#comment-form" onclick="">0  
  855. коммент.</a>  
  856. </span>  
  857. <span class="post-icons">  
  858. </span>  
  859. <span class="post-backlinks post-comment-link">  
  860. </span>  
  861. </div>  
  862. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  863. Ярлыки:  
  864. <a href="http://vermus.blogspot.com/search/label/git" rel="tag">git</a>,  
  865. <a href="http://vermus.blogspot.com/search/label/gitextensions" rel="tag">gitextensions</a>,  
  866. <a href="http://vermus.blogspot.com/search/label/KDiff3" rel="tag">KDiff3</a>,  
  867. <a href="http://vermus.blogspot.com/search/label/Visual%20Studio" rel="tag">Visual Studio</a>  
  868. </span>  
  869. </div>  
  870. <div class="post-footer-line post-footer-line-3"></div>  
  871. </div>  
  872. </div>  
  873. </div>  
  874.   
  875.           </div></div>  
  876.           
  877.   
  878.           <div class="date-outer">  
  879.           
  880. <h2 class="date-header"><span>25 августа 2009 г.</span></h2>  
  881.   
  882.           <div class="date-posts">  
  883.           
  884. <div class="post-outer">  
  885. <div class="post hentry">  
  886. <a name="5754253041763922297"></a>  
  887. <h3 class="post-title entry-title">  
  888. <a href="http://vermus.blogspot.com/2009/08/django-izmenimsyaru.html">Первый сайт на Django. izmenimsya.ru</a>  
  889. </h3>  
  890. <div class="post-header-line-1"></div>  
  891. <div class="post-body entry-content">  
  892. Ну как бы больше для развлечения. :)  
  893.   
  894. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://izmenimsya.ru/"><img alt="" border="0" src="http://izmenimsya.ru/static/i/system/logo.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 225px; height: 200px;"></a>  
  895.   
  896. <blockquote><span style="font-weight:bold;">Что такое izmenimsya.ru?</span>  
  897.   
  898. Вы знаете, иногда мы хотим стать лучше, но все время это лучшее оттягиваем на потом.  
  899.   
  900. Бросить курить, бросить выпивать, бросить наркотики, не изменять, жертвовать, не врать, делать добро, выучить физику.  
  901.   
  902. Подумав, мы решили, что под пристальным взглядом общественности, когда за твоим "изменением" следят тысячи, сорваться (избавляясь от чего-то) гораздо сложнее, а делать больше - гораздо проще.  
  903. <a href="http://izmenimsya.ru/changes/info/">читать дальше...</a>  
  904. </blockquote>  
  905. Вот такие штуки можно добавлять в подпись на форумах или в блоги:  
  906.   
  907. <a href="http://izmenimsya.ru/changes/3/" title="Мы изменимся!"><img border="0" src="http://izmenimsya.ru/changes/3/imgs/350x40.png"></a>  
  908. <a href="http://izmenimsya.ru/changes/3/" title="Мы изменимся!"><img border="0" src="http://izmenimsya.ru/changes/3/imgs/350x19.png"></a>  
  909.    
  910. ps. Кстати, лого нарисован в <a href="http://vermus.blogspot.com/2009/06/blender.html">blender</a> :)  
  911. <div style="clear: both;"></div>  
  912. </div>  
  913. <div class="post-footer">  
  914. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  915. Автор:  
  916. <span class="fn">Vermus</span>  
  917. </span>  
  918. <span class="post-timestamp">  
  919. время  
  920. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/08/django-izmenimsyaru.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-08-25T08:31:00+04:00">8:31:00 AM</abbr></a>  
  921. </span>  
  922. <span class="post-comment-link">  
  923. <a class="comment-link" href="http://vermus.blogspot.com/2009/08/django-izmenimsyaru.html#comment-form" onclick="">0  
  924. коммент.</a>  
  925. </span>  
  926. <span class="post-icons">  
  927. </span>  
  928. <span class="post-backlinks post-comment-link">  
  929. </span>  
  930. </div>  
  931. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  932. Ярлыки:  
  933. <a href="http://vermus.blogspot.com/search/label/%D1%81%D0%B0%D0%B9%D1%82" rel="tag">сайт</a>,  
  934. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  935. <a href="http://vermus.blogspot.com/search/label/izmenimsya.ru" rel="tag">izmenimsya.ru</a>  
  936. </span>  
  937. </div>  
  938. <div class="post-footer-line post-footer-line-3"></div>  
  939. </div>  
  940. </div>  
  941. </div>  
  942.   
  943.           </div></div>  
  944.           
  945.   
  946.           <div class="date-outer">  
  947.           
  948. <h2 class="date-header"><span>24 июня 2009 г.</span></h2>  
  949.   
  950.           <div class="date-posts">  
  951.           
  952. <div class="post-outer">  
  953. <div class="post hentry">  
  954. <a name="6550644970267647367"></a>  
  955. <h3 class="post-title entry-title">  
  956. <a href="http://vermus.blogspot.com/2009/06/lpad-django.html">Ldap авторизация в Django</a>  
  957. </h3>  
  958. <div class="post-header-line-1"></div>  
  959. <div class="post-body entry-content">  
  960. Вопрос ldap авторизации в Python довольно хорошо рассмотрен. Теперь разберем, как привязать эту авторизацию к Django.   
  961. Первый вариант в рамках компании будет регистрация на сайте с django путем авторизации в ldap.   
  962. Другой вариант - полная интеграция авторизации ldap в джанго, но тогда все преимущества групп и контроля доступа теряются, если только не получать эту дополнительную информацию от ldap или других источников.  
  963. Третий, наиболее гибкий вариант. Отсутствие регистрации. Логиним пользователя - ищем его профиль в auth у Django - если его нет, создаем, если есть - то используем найденный профиль (если пароль в Django не совпадает с ldap паролем - обновляем его).  
  964.   
  965. Давайте пойдем по третьему пути.  
  966.   
  967. Для начала подготавливаем Django. У нас будет <a href="http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/">расширенный стандартный Django User</a>, так как после авторизации пользователя в ldap мы еще получим его данные с корпоративной базы mssql.  
  968.   
  969. Устанавливаем <a href="http://www.python-ldap.org/">python-ldap</a>:  
  970. <pre name="code" class="xml">  
  971. $ sudo apt-get install python-ldap  
  972. </pre>  
  973. Прописываем в settings.py:  
  974. <pre name="code" class="py">  
  975. LDAP_DOMAIN='mydomain.com'    
  976. LDAP_SERVER='ldaps://%s' % LDAP_DOMAIN #SSL connection  
  977. </pre>  
  978. Правим файл auth.py:  
  979. <pre name="code" class="py">  
  980. # -*- coding: utf-8 -*-  
  981.   
  982. from django.conf import settings  
  983. from django.contrib.auth.backends import ModelBackend  
  984. from django.core.exceptions import ImproperlyConfigured  
  985. from django.db.models import get_model  
  986. from social.models import CustomUser   
  987.   
  988. class CustomUserModelBackend(ModelBackend):  
  989.       
  990.     def get_local_user(self, email, password=None):  
  991.               
  992.         try:  
  993.             user = self.user_class.objects.get(email=email.lower())  
  994.             if user.check_password(password):  
  995.                 return user  
  996.             else:  
  997.                 self.exist_user=user#save user for refresh local data  
  998.         except self.user_class.DoesNotExist:  
  999.             return None  
  1000.   
  1001.     def get_ldap_refresh_create_user(self, username=None, password=None):  
  1002.         import ldap, sys  
  1003.           
  1004.         #create new local user  
  1005.         if '@' in username:  
  1006.             #user@domain  
  1007.             LDAP_USERNAME=username  
  1008.             username=username.split('@')[0]  
  1009.         else:  
  1010.             #user  
  1011.             LDAP_USERNAME='%s@%s' % (username, settings.LDAP_DOMAIN)  
  1012.           
  1013.         LDAP_PASSWORD=password  
  1014.   
  1015.         try:    
  1016.              # build a client    
  1017.              ldap_client = ldap.initialize(settings.LDAP_SERVER)    
  1018.              # perform a synchronous bind    
  1019.              ldap_client.simple_bind_s(LDAP_USERNAME, LDAP_PASSWORD)  
  1020.         except ldap.INVALID_CREDENTIALS, e:    
  1021.              return False  
  1022.         except ldap.SERVER_DOWN, e:    
  1023.              return False#@todo raise Validation error  
  1024.           
  1025.         #lpad auth succes:  
  1026.           
  1027.         #try to get local user  
  1028.         user=self.get_local_user(LDAP_USERNAME, password)  
  1029.           
  1030.         if user:#if we check user in localbase  
  1031.             return user  
  1032.         else:#else create new or refresh old pass   
  1033.             if hasattr(self, 'exist_user'):  
  1034.                 #refresh local auth data from ldap in case of change pass  
  1035.                 self.exist_user.set_password(password)  
  1036.                 self.exist_user.save()#write new pass  
  1037.                 user=self.exist_user  
  1038.             else:  
  1039.                 user=CustomUser.objects.create_user(username,LDAP_USERNAME,password)  
  1040.                   
  1041.             return user  
  1042.       
  1043.     def updape_user_info(self, user):  
  1044.         pass  
  1045.            
  1046.     def authenticate(self, username=None, password=None):  
  1047.         #try to auth with ldap  
  1048.         #and refresh user data in success or create new one if user does not exist  
  1049.         user=self.get_ldap_refresh_create_user(username, password)  
  1050.         if user:  
  1051.             self.updape_user_info(user)#get data from mssql  
  1052.             return user  
  1053.         else:  
  1054.           return None# error ldap auth  
  1055.           
  1056.     def get_user(self, user_id):  
  1057.         try:  
  1058.             return self.user_class.objects.get(pk=user_id)  
  1059.         except self.user_class.DoesNotExist:  
  1060.             return None  
  1061.   
  1062.     @property  
  1063.     def user_class(self):  
  1064.         if not hasattr(self, '_user_class'):  
  1065.             #self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.'3))  
  1066.             self._user_class = CustomUser  
  1067.             if not self._user_class:  
  1068.                 raise ImproperlyConfigured('Could not get custom user model')  
  1069.         return self._user_class  
  1070. </pre>  
  1071.   
  1072. Функция updape_user_info на самостоятельное написание, она должна дописывать необходимую расширенную информацию.  
  1073.   
  1074. ps. прозрачная авторизация в принципе возможна, но только с IE, можете попробовать.  
  1075. <div style="clear: both;"></div>  
  1076. </div>  
  1077. <div class="post-footer">  
  1078. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1079. Автор:  
  1080. <span class="fn">Vermus</span>  
  1081. </span>  
  1082. <span class="post-timestamp">  
  1083. время  
  1084. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/06/lpad-django.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-06-24T09:45:00+04:00">9:45:00 AM</abbr></a>  
  1085. </span>  
  1086. <span class="post-comment-link">  
  1087. <a class="comment-link" href="http://vermus.blogspot.com/2009/06/lpad-django.html#comment-form" onclick="">0  
  1088. коммент.</a>  
  1089. </span>  
  1090. <span class="post-icons">  
  1091. </span>  
  1092. <span class="post-backlinks post-comment-link">  
  1093. </span>  
  1094. </div>  
  1095. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1096. Ярлыки:  
  1097. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  1098. <a href="http://vermus.blogspot.com/search/label/ldap" rel="tag">ldap</a>,  
  1099. <a href="http://vermus.blogspot.com/search/label/python" rel="tag">python</a>,  
  1100. <a href="http://vermus.blogspot.com/search/label/python-mssql" rel="tag">python-mssql</a>  
  1101. </span>  
  1102. </div>  
  1103. <div class="post-footer-line post-footer-line-3"></div>  
  1104. </div>  
  1105. </div>  
  1106. </div>  
  1107. <div class="post-outer">  
  1108. <div class="post hentry">  
  1109. <a name="5915329065305058328"></a>  
  1110. <h3 class="post-title entry-title">  
  1111. <a href="http://vermus.blogspot.com/2009/06/blender.html">blender - быстрый старт</a>  
  1112. </h3>  
  1113. <div class="post-header-line-1"></div>  
  1114. <div class="post-body entry-content">  
  1115. Если вам уж очень хочется нарисовать что-то в 3D, сделать рендер или анимацию и бесплатно, то вам - прямая дорога к <a href="http://www.blender.org/">blender</a>. Но при первом знакомстве Вы обнаружите, что интерфейс программы не дружественен к пользователю.   
  1116.   
  1117. Здесь хотел было рассказать о базовых функциях, но позже нашёл все то, о чем я хотел рассказать:  
  1118. <a href="http://blender-empire.ru/?p=213">  
  1119. Blender QuickStart или Blender шпаргалка</a>  
  1120.   
  1121. Добавлю, что выделение всех элементов меша в режиме редактирования - кнопочка - A.  
  1122.   
  1123. Со временем, думаю буду добавлять полезные кнопки управления, ибо если не работать с blenderом профессионально или хотя бы регулярно, то все это очень быстро забывается.   
  1124.   
  1125. А шпаргалка действительно отличнейшая, спасибо автору.  
  1126. <div style="clear: both;"></div>  
  1127. </div>  
  1128. <div class="post-footer">  
  1129. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1130. Автор:  
  1131. <span class="fn">Vermus</span>  
  1132. </span>  
  1133. <span class="post-timestamp">  
  1134. время  
  1135. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/06/blender.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-06-24T07:31:00+04:00">7:31:00 AM</abbr></a>  
  1136. </span>  
  1137. <span class="post-comment-link">  
  1138. <a class="comment-link" href="http://vermus.blogspot.com/2009/06/blender.html#comment-form" onclick="">0  
  1139. коммент.</a>  
  1140. </span>  
  1141. <span class="post-icons">  
  1142. </span>  
  1143. <span class="post-backlinks post-comment-link">  
  1144. </span>  
  1145. </div>  
  1146. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1147. Ярлыки:  
  1148. <a href="http://vermus.blogspot.com/search/label/3d" rel="tag">3d</a>,  
  1149. <a href="http://vermus.blogspot.com/search/label/blender" rel="tag">blender</a>,  
  1150. <a href="http://vermus.blogspot.com/search/label/quickstart" rel="tag">quickstart</a>,  
  1151. <a href="http://vermus.blogspot.com/search/label/render" rel="tag">render</a>  
  1152. </span>  
  1153. </div>  
  1154. <div class="post-footer-line post-footer-line-3"></div>  
  1155. </div>  
  1156. </div>  
  1157. </div>  
  1158.   
  1159.           </div></div>  
  1160.           
  1161.   
  1162.           <div class="date-outer">  
  1163.           
  1164. <h2 class="date-header"><span>3 июня 2009 г.</span></h2>  
  1165.   
  1166.           <div class="date-posts">  
  1167.           
  1168. <div class="post-outer">  
  1169. <div class="post hentry">  
  1170. <a name="749294733574279349"></a>  
  1171. <h3 class="post-title entry-title">  
  1172. <a href="http://vermus.blogspot.com/2009/06/redmine-freebsd-72-apache-postgres-sql.html">Установка Redmine на FreeBSD 7.2, используя apache, mod_rails и postgres sql</a>  
  1173. </h3>  
  1174. <div class="post-header-line-1"></div>  
  1175. <div class="post-body entry-content">  
  1176. Разобравшись с git сервером и GUI клиентами в <a href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html">прошлой статье</a>, я обещал рассмотреть установку <a href="http://trac-hacks.org/wiki/GitPlugin">GitPlugin</a> для <a href="http://trac.edgewall.org/">Trac</a> (пользуюсь давно, все устраивало, когда был SVN). Но сейчас меня смутили несколько вещей:  
  1177. 1. Trac не поддерживает git из коробки (реализован в виде плагина, что не есть уже хорошо).  
  1178. 2. Trac хорош для одного крупного проекта (для запуска дополнительного надо много телодвижений), а мы хотим построить СКВ для многих проектов.  
  1179. 3. В trac нет русификации, а она желательна (возможен доступ пользователей программ для создания задач или сообщений о багах).  
  1180. 4. В trac нет удобной системы распределения прав (есть конечно дополнительные пакеты, но если все это сложить, получается уж очень громоздко).  
  1181.   
  1182. Поэтому я решил поискать систему, которая бы меня устраивала.  
  1183. И я ее нашел, <a href="http://www.redmine.org/projects/redmine">redmine</a>. Он написан на <a href="http://ruby-lang.org/">Ruby</a>, поддерживает кучу баз данных, есть русский язык, лишен всех недостатков перечисленных выше, самое главное, поддерживает git "из коробки"!  
  1184.   
  1185. Краткий обзор возможностей <a href="http://romanvbabenko.blogspot.com/2008/06/redmine.html">отсюда</a>:  
  1186.   
  1187. <blockquote>* Поддержка нескольких проектов в одной базе данных;  
  1188. * Гибкая система настройки пользовательских прав доступа;  
  1189. * Гибкая система тикетов и заданий;  
  1190. * Поддержка календаря и графиков Гантта  
  1191. * Поддержка файлового архива, документация и новостных лент по проекту  
  1192. * Сквозное логирование событий в системе и поддержка отсылки на еmail  
  1193. * Встроенная система Wiki по проекту  
  1194. * Встроенная система форумов по проекту  
  1195. * Простая система учета времени  
  1196. * Возможность добавлять произвольные пользовательские поля к проектам, заданиям и пользователям  
  1197. * Интеграция с системами контроля версий (SVN, CVS, Mercurial, Bazaar and Darcs)  
  1198. * Поддержка LDAP авторизации  
  1199. * Поддержка регистрации пользователей  
  1200. * Мультиязычность (Русский и Украинский присутствуют)  
  1201. * Поддержка различных баз данных</blockquote>  
  1202.   
  1203. Дополню, что git тоже поддерживается.  
  1204.   
  1205. <span style="font-weight:bold;">Начнем.</span>  
  1206.   
  1207. Системе 3 года, но уже информации по ней много, все хвалят, соответственно в поиске можно найти много мануалов по установке прямо под вашу систему.  
  1208. Но мы пройдем этот путь заново :)  
  1209. Считаем, что apache2 и postgres 8.3 уже установлен.  
  1210.   
  1211. Следуем <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">официальному руководству по установке</a>:  
  1212.   
  1213. 1. Проверяем и устанавливаем необходимые пакеты:  
  1214. <pre name="code" class="xml">  
  1215. #ruby --version  
  1216. ruby 1.8.7 (2007-03-13 patchlevel 0) [i386-freebsd7]  
  1217. #cd /usr/ports/www/rubygem-rails  
  1218. #make clean install  
  1219. </pre>  
  1220. Этот пакет содержит все компоненты, которые необходимы для запуска Ruby On Rails (собственно, на котором и написан redmine).  
  1221. Таблицу с необходимыми версиями смотрим <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">здесь</a>.  
  1222.   
  1223. У меня с портами REALEASE-7.2 встала версия 2.3.2  
  1224. <pre name="code" class="xml">  
  1225. #cd /usr/ports/converters/ruby-iconv  
  1226. #make clean install  
  1227. </pre>  
  1228. 2. Скачиваем стабильную ветку:  
  1229. <pre name="code" class="xml">  
  1230. #wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz  
  1231. #tar -zxvf redmine-0.8.4.tar.gz  
  1232. </pre>  
  1233. 3. Конфигурируем базу данных.   
  1234. Добавляем пользователя redmine в базу данных postgres:  
  1235. <pre name="code" class="xml">  
  1236. #su pgsql  
  1237. $createuser redmine -–no-superuser -–no-createdb -–no-createrole -–login –-pwprompt -–encrypted  
  1238. $createdb --owner=redmine --encoding=utf-8 redmine  
  1239. $exit  
  1240. </pre>  
  1241. Редактируем pg_hba.conf при необходимости.  
  1242.   
  1243. Копируем ~/redmine-0.8.4/config/database.yml.example в ~/redmine-0.8.4/config/database.yml и редактируем:  
  1244. <pre name="code" class="xml">  
  1245. production:  
  1246.   adapter: postgresql  
  1247.   database: redmine  
  1248.   host: localhost  
  1249.   username: redmine  
  1250.   password: password  
  1251.   encoding: utf8  
  1252. </pre>  
  1253. Заполняем базу данных схемой Redmine, выполнив команду в директории redmine-0.8.4:  
  1254. <pre name="code" class="xml">  
  1255. #rake db:migrate RAILS_ENV="production"  
  1256. </pre>  
  1257. Загружаем первоначальную конфигурацию Redmine:  
  1258. <pre name="code" class="xml">  
  1259. #rake redmine:load_default_data RAILS_ENV="production"  
  1260. </pre>  
  1261. 4. Устанавливаем права.  
  1262. Пользователь www должен иметь право писать в директории files, log, tmp.  
  1263. <pre name="code" class="xml">  
  1264. #cd redmine-0.8.4  
  1265. #chown -R www:www files log tmp public/plugin_assets  
  1266. #chmod -R 755 files log tmp public/plugin_assets  
  1267. </pre>  
  1268. 5. Пробный запуск.  
  1269. <pre name="code" class="xml">  
  1270. #sudo -u www ruby script/server webrick -e production  
  1271. </pre>  
  1272. Переходим по адресу http://SERVER:3000/, все должно работать.  
  1273. Можно залогиниться от admin, пароль admin.  
  1274.   
  1275. Примеры настройки smtp сервера <a href="http://www.redmine.org/wiki/redmine/Email_Configuration">здесь</a>.  
  1276.   
  1277. 6. Связываем apache и Redmine.  
  1278. Есть <a href="http://www.redmine.org/wiki/redmine/HowTo_configure_Apache_to_run_Redmine">официальное how to</a>.  
  1279.   
  1280. Мне оно не понравилось, использует CGI, в общем все кисло :)  
  1281. Гораздо более интересно решение "<a href="http://valera.ws/2009.04.24~redmine-debian-postgres-https/">Настройка Redmine на работу через apache and mongrel_cluster по HTTPS</a>", изначально подсмотренное <a href="http://www.drinkingbird.net/blog/articles/2008/02/27/setting-up-a-redmine-site-on-ubuntu">здесь</a>.  
  1282. Предлагается использовать mongrel в качестве бэкенда к серверу apache.   
  1283. Mongrel является HTTP-сервером и библиотекой на Ruby, которая предназначена для хостинга разнообразных веб-приложений написанных на языке программирования Ruby, используя HTTP протокол, а не FastCGI или SCGI.  
  1284. Вот это уже гораздо интересней. Тем более https.  
  1285.   
  1286. Но я решил пойти немного другим путем, установкой <a href="http://www.modrails.com/">Phusion Passenger</a> (aka mod_rails).   
  1287. <pre name="code" class="xml">  
  1288. # cd /usr/ports/www/rubygem-passenger  
  1289. # make clean install  
  1290. </pre>  
  1291. <span style="font-weight:bold;">Настраиваем апач:</span>  
  1292.   
  1293. Доступные настройки mod_rails:  
  1294. * RailsEnv - задает среду выполнения приложения. Значение по умолчанию: production.  
  1295. * RailsBaseURI - задает директорию, в которую размещается приложение. По этому адресу должна находиться директория public приложения.   
  1296. * RailsRuby - задает интерпретатор, который будет использован для выполнения приложения. Имеет смысл, если у Вас установлено несколько интерпретаторов Руби.   
  1297. * RailsMaxPoolSize - максимальное количество запущенных экземпляров приложения. Оптимально значение зависит от конфигурации системы. Значение по умолчанию: 20.   
  1298. * RailsPoolIdleTime - максимальное время бездействия экземпляра приложения в секундах. По истечении этого времени экземпляр приложения будет остановлен для экономии памяти. Разработчики рекомендуют в качестве оптимального значения 2*x, где x - время, которое пользователь тратит на просмотр страницы. Значение по умолчанию: 120.   
  1299.   
  1300. Настроен апач примерно <a href="http://www.securitylab.ru/analytics/216405.php">так</a>.  
  1301. Создаем <a href="http://www.freebsddiary.org/openssl-client-authentication.php">сертификаты</a>.  
  1302.   
  1303. А потом настраиваем секьюрный хост:  
  1304. <pre name="code" class="xml">  
  1305. SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM  
  1306. SSLMutex file:/usr/local/etc/apache22/logs/ssl_mutex  
  1307. SSLSessionCache shm:/usr/local/etc/apache22/logs/ssl_cache_shm  
  1308. SSLSessionCacheTimeout 600  
  1309.   
  1310. <ifmodule mime.c="">  
  1311.     AddType application/x-x509-ca-cert      .crt  
  1312.     AddType application/x-pkcs7-crl         .crl  
  1313. </ifmodule>  
  1314.   
  1315. SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0  
  1316.   
  1317. NameVirtualHost *:80  
  1318.   
  1319. LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so  
  1320. PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2  
  1321. PassengerRuby /usr/local/bin/ruby18  
  1322.   
  1323. PassengerDefaultUser www  
  1324. PassengerMaxPoolSize 1  
  1325. PassengerUseGlobalQueue on  
  1326. PassengerMaxInstancesPerApp 1  
  1327.   
  1328. <virtualhost *:80="">  
  1329.     ServerName SERVER  
  1330.       
  1331.     ErrorLog etc/apache22/logs/httpd-redmine.log  
  1332.   
  1333.     RewriteEngine On  
  1334.     Options +FollowSymlinks  
  1335.     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]  
  1336. </virtualhost>  
  1337.         
  1338. <virtualhost *:443="">  
  1339. RailsEnv production  
  1340. ServerName SERVER  
  1341.   
  1342. SSLEngine on  
  1343. SSLVerifyClient none  
  1344. SSLCertificateFile etc/apache22/keys/new.crt  
  1345. SSLCertificateKeyFile etc/apache22/keys/new.key  
  1346. SSLCACertificateFile etc/apache22/keys/cacert.pem  
  1347. SSLProtocol all -SSLv2  
  1348. DocumentRoot /tank/redmine/redmine-0.8.4/public  
  1349. ErrorLog etc/apache22/logs/httpsd-redmine.log  
  1350.   
  1351. <directory tank="" redmine="" redmine-0.8.4="" public="">  
  1352.     Options FollowSymLinks  
  1353.     AllowOverride None  
  1354.     SSLOptions +StdEnvVars  
  1355.     Order allow,deny  
  1356.     Allow from all  
  1357. </directory>  
  1358. </virtualhost>  
  1359. </pre>  
  1360. Проверяем конфигурацию apache:  
  1361. <pre name="code" class="xml">  
  1362. #/usr/local/etc/rc.d/apache22 configtest  
  1363. </pre>  
  1364. Стартуем и может быть получаем ошибку  
  1365. <pre name="code" class="xml">  
  1366. Error message:  
  1367.     No such file or directory - /nonexistent  
  1368. Exception class:  
  1369.     Errno::ENOENT  
  1370. </pre>  
  1371. если у нашего пользователя www нет домашней директории. Решается <a href="http://blog.alec-c4.com/?p=322">это так</a>:  
  1372.   
  1373. <blockquote>Покопавшись немного обнаружил, что проблема вызвана конфликтом Passenger и gem и исправляется внесением изменений в файл rubygems.rb в метод self.set_paths.  
  1374. Необходимо заменить код  
  1375.   
  1376. # only create by matching user  
  1377.   next if Etc.getpwuid.uid != File::Stat.new(Gem.user_home).uid  
  1378.   
  1379. на:  
  1380.   
  1381. # only create by matching user  
  1382.   home_folder_uid = File::Stat.new(Gem.user_home).uid rescue nil  
  1383.   next if Etc.getpwuid.uid != home_folder_uid</blockquote>  
  1384. Файл находится здесь /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb .  
  1385.   
  1386. Перезапускаем апач, http://SERVER (должен выполниться редирект на https://SERVER).  
  1387.   
  1388. Настройка самого redmine через веб-интерфейс интуитивно понятна, удачи!  
  1389.   
  1390. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiq-1UASW4V3kWB11Gm4EwgmAV4gbXJr4HxEttFJxVQMbjh1l8o6lGy5IAZeTGUIGEuEv3BaoXNo0trHN9fuySqS-IdwIlZ_uHGUE9iy5ewvM0GEpaGr9qCHP5ckKYojrt6j4LHKfN/s1600-h/redmine.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5343074207082133474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiq-1UASW4V3kWB11Gm4EwgmAV4gbXJr4HxEttFJxVQMbjh1l8o6lGy5IAZeTGUIGEuEv3BaoXNo0trHN9fuySqS-IdwIlZ_uHGUE9iy5ewvM0GEpaGr9qCHP5ckKYojrt6j4LHKfN/s400/redmine.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 124px;"></a>  
  1391.   
  1392. PS. Кстати, напоследок линк: <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git User's Manual</a>  
  1393. <div style="clear: both;"></div>  
  1394. </div>  
  1395. <div class="post-footer">  
  1396. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1397. Автор:  
  1398. <span class="fn">Vermus</span>  
  1399. </span>  
  1400. <span class="post-timestamp">  
  1401. время  
  1402. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/06/redmine-freebsd-72-apache-postgres-sql.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-06-03T16:00:00+04:00">4:00:00 PM</abbr></a>  
  1403. </span>  
  1404. <span class="post-comment-link">  
  1405. <a class="comment-link" href="http://vermus.blogspot.com/2009/06/redmine-freebsd-72-apache-postgres-sql.html#comment-form" onclick="">6  
  1406. коммент.</a>  
  1407. </span>  
  1408. <span class="post-icons">  
  1409. </span>  
  1410. <span class="post-backlinks post-comment-link">  
  1411. </span>  
  1412. </div>  
  1413. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1414. Ярлыки:  
  1415. <a href="http://vermus.blogspot.com/search/label/apache2" rel="tag">apache2</a>,  
  1416. <a href="http://vermus.blogspot.com/search/label/freebsd" rel="tag">freebsd</a>,  
  1417. <a href="http://vermus.blogspot.com/search/label/mod_rails" rel="tag">mod_rails</a>,  
  1418. <a href="http://vermus.blogspot.com/search/label/Phusion%20Passenger" rel="tag">Phusion Passenger</a>,  
  1419. <a href="http://vermus.blogspot.com/search/label/postgresql" rel="tag">postgresql</a>,  
  1420. <a href="http://vermus.blogspot.com/search/label/Redmine" rel="tag">Redmine</a>,  
  1421. <a href="http://vermus.blogspot.com/search/label/trac" rel="tag">trac</a>  
  1422. </span>  
  1423. </div>  
  1424. <div class="post-footer-line post-footer-line-3"></div>  
  1425. </div>  
  1426. </div>  
  1427. </div>  
  1428.   
  1429.           </div></div>  
  1430.           
  1431.   
  1432.           <div class="date-outer">  
  1433.           
  1434. <h2 class="date-header"><span>1 июня 2009 г.</span></h2>  
  1435.   
  1436.           <div class="date-posts">  
  1437.           
  1438. <div class="post-outer">  
  1439. <div class="post hentry">  
  1440. <a name="638174645156864547"></a>  
  1441. <h3 class="post-title entry-title">  
  1442. <a href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html">Установка git сервера на Freebsd 7.2 c клиентами EGit на Eclipse под Windows</a>  
  1443. </h3>  
  1444. <div class="post-header-line-1"></div>  
  1445. <div class="post-body entry-content">  
  1446. <span style="font-weight:bold;"><a href="http://ru.wikipedia.org/wiki/Git">Введение в git</a>.</span>  
  1447. <blockquote>  
  1448. Система спроектирована как набор программ, специально разработанных с учётом их использования в скриптах. Это позволяет удобно создавать специализированные системы контроля версий на базе Git или пользовательские интерфейсы. Например, Cogito является именно таким примером фронтенда к репозиториям Git. А StGit использует Git для управления коллекцией патчей.  
  1449.   
  1450. Git поддерживает быстрое разделение и слияние версий, включает инструменты для визуализации и навигации по нелинейной истории разработки. Как и Darcs, BitKeeper, Mercurial, SVK, Bazaar и Monotone, Git предоставляет каждому разработчику локальную копию всей истории разработки, изменения копируются из одного репозитория в другой.  
  1451.   
  1452. Удалённый доступ к репозиториям Git обеспечивается git-daemon, SSH, или HTTP сервером. TCP-сервис git-daemon входит в дистрибутив Git и является наряду с SSH наиболее распространённым и надёжным методом доступа. HTTP метод доступа, несмотря на ряд ограничений, очень популярен в контролируемых сетях, потому что позволяет использование существующих конфигураций сетевых фильтров.</blockquote>  
  1453.   
  1454. <span style="font-weight:bold;">Установка.</span>  
  1455. <pre name="code" class="xml">  
  1456. cd /usr/ports/devel/git  
  1457. make && make install  
  1458. </pre>  
  1459. Для публичного доступа к репозиторию можно воспользоваться git-daemon.  
  1460. Также возможен доступ через <a href="http://habrahabr.ru/blogs/Git/43806/">http (апач+dav+gitweb)</a>.  
  1461. Я же выбрал более простой и надёжный путь - ssh.  
  1462.   
  1463. Для начала определимся с сервером.  
  1464. Создаем пользователя, который будет работать с репозиториями, а так же являться администратором gitosis: gituser (создаем без пароля).  
  1465. <pre name="code" class="xml">  
  1466. $sudo adduser gituser  
  1467. </pre>  
  1468. При создании, в качестве домашней указываем корневую директорию с репозиториями.  
  1469.   
  1470. <span style="font-weight:bold;">Для начала мы сосредоточимся на авторизации пользователя через ssh</span>.  
  1471. Для этого, проверим настройки sshd, <a href="http://linux-sxs.org/networking/openssh.putty.html">примерно как здесь</a>.  
  1472.   
  1473. Устанавливаем <a href="http://eagain.net/gitweb/?p=gitosis.git;a=blob;f=README.rst">gitosis</a>, набор скриптов, которые выполняются при открытии ssh-сессии, позволяют использовать ssh ключи для авторизации  в репозиториях, а также освобождают от необходимости создавать много пользователей в системе для доступа к репозиториям.  
  1474. <pre name="code" class="xml">  
  1475. $git clone git://eagain.net/gitosis.git  
  1476. $cd gitosis  
  1477. $sudo python setup.py install  
  1478. </pre>  
  1479. Далее надо создать gitosis-хостинг с авторизацией только по ключам:  
  1480. То есть проинициализировать репозиторий самого gitosis в указанной нами директории.  
  1481. Я решил управление gitosis оставить на сервере.   
  1482. <pre name="code" class="xml">  
  1483. $ssh-keygen -t rsa  
  1484. </pre>  
  1485. Эта команда создает в домашней директории пользователя gituser пару id_rsa и id_rsa.pub. Первый файл - секретный, должен быть закрыт от любого пользователя на системе, а так же не передаваться по сети.  
  1486. Второй ключ публичный, мы его должны передать в gitosis при инициализации gitosis. Его рекомендуют скопировать в директорию, доступную всем для чтения, например /tmp . Далее инициализируем gitosis и его репозиторий.  
  1487. (Первые две команды, в случае, если у вас не установлен sudo.)  
  1488. <pre name="code" class="xml">  
  1489. #cd /usr/ports/security/sudo ; make install clean  
  1490. #rehash  
  1491. #sudo -H -u gituser gitosis-init < /tmp/id_rsa.pub  
  1492. Initialized empty Git repository in /tank/gitrepos/repositories/gitosis-admin.git/  
  1493. Reinitialized existing Git repository in /tank/gitrepos/repositories/gitosis-admin.git/  
  1494. </pre>  
  1495. ключ -H обязателен, иначе команда sudo будет выполняться в домашнюю директорию предыдущего пользователя (например /root).  
  1496.   
  1497. Теперь у нас есть несколько директорий в домашней директории gituser. Папка repositories предназначена для хранения репозиториев, там уже находится репозиторий настроек gitosis (gitosis-admin).  
  1498.   
  1499. Если у вас старый setuptools, рекомендуют прописать следующие права:  
  1500. <pre name="code" class="xml">  
  1501. sudo chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update  
  1502. </pre>  
  1503. Далее, заходим под пользователем gituser и забираем репозиторий администрирования gitosis:  
  1504. <pre name="code" class="xml">  
  1505. $git clone gituser@YOUR_SERVER_HOSTNAME:gitosis-admin.git  
  1506. $cd gitosis-admin  
  1507. </pre>  
  1508. Это удаленно, а у так как у нас админ на этом же хосте, то локально:  
  1509. <pre name="code" class="xml">  
  1510. #su gituser  
  1511. $cd ~/tmp  
  1512. $git clone ~/repositories/gitosis-admin.git gitosis-admin  
  1513. $cd gitosis-admin  
  1514. </pre>  
  1515. <span style="font-weight:bold;">Создание "репозиториев" в gitosis. </span>  
  1516. Редактируем файл gitosis.conf:  
  1517. <pre name="code" class="xml">  
  1518. [group projectteam]  
  1519. members = vasya  
  1520. writable = project  
  1521. </pre>  
  1522. где project - название будущего репозитория.  
  1523.   
  1524. Создаем публичный ключ в клиенте windows.  
  1525. Для этого используем пакет <a href="http://code.google.com/p/msysgit/downloads/list">msysGit</a>. Я выбрал portable версию, ибо нам из пакета нужен только генератор ssh ключей (PortableGit\bin\ssh-keygen.exe).  
  1526. <pre name="code" class="xml">  
  1527. >ssh-keygen -C “vasya” -t rsa  
  1528. </pre>  
  1529. Обычно пара сохраняется в папку c:\\Documents and Settings\\Username\\.ssh на XP или c:\\Users\\Username\\.ssh на Vista. Заливаем публичный ключ (vasya.pub) в директорию gitosis-admin/keydir, место куда мы извлекли репозиторий настроек gitosis.  
  1530.   
  1531. "Пушим" настройки в репозиторий gitosis.  
  1532. <pre name="code" class="xml">  
  1533. git add keydir/vasya.pub  
  1534. git commit -a -m "Allow vasya write access to project"  
  1535. git push  
  1536. </pre>  
  1537. После этого проверить, что файл конфигурации изменился (есть ссылка в домашней директории gituser), а также скопировались ключи в ~/repositories/gitosis-admin.git/gitosis-export/keydir. При загрузке в репозиторий gitosis сам извлекает изменившееся файлы в директорию gitosis-admin.  
  1538.   
  1539. Создаем репозиторий на сервере под юзером gituser:  
  1540. <pre name="code" class="xml">  
  1541. $mkdir ~/repositories/project.git  
  1542. $cd project.git  
  1543. $git --bare init  
  1544. </pre>  
  1545. --bare обозначает, что у нас нет намерения хранить файлы самого проекта на сервере, только diff и файлы, которые генерирует сам git (проще говоря, структура git репозитория). Что кстати, совершенно достаточно даже для <a href="http://trac-hacks.org/wiki/GitPlugin">Git Plugin for Trac</a>, который мы намереваемся установить.  
  1546.   
  1547. Теперь нам необходимо создать ветку (branch), иначе EGit будет ругаться на отсутствие оных. Выполнить push на полностью пустом репозитории нельзя.  
  1548. Для первого коммита автоматически создается бранч с именем master, в него же по умолчанию попадают следующие коммиты  
  1549. <pre name="code" class="xml">  
  1550. #su gituser  
  1551. $cd ~/tmp  
  1552. $git clone ~/repositories/project.git project  
  1553. $cd project  
  1554. $echo "test" > test  
  1555. $git add test  
  1556. $git commit -a -m "initial branch"  
  1557. $git push origin master  
  1558. </pre>  
  1559. <span style="font-weight:bold;">Попробуем получить проект через ssh с помощью плагина <a href="http://git.or.cz/gitwiki/EclipsePlugin">EGit</a></span>.   
  1560. Установка eclipse и <a href="http://github.com/guides/using-the-egit-eclipse-plugin-with-github">самого плагина</a> очень проста.  
  1561. В меню eclipse выбираем File-Import, Git Repository. Выбираем протокол git+ssh:// , указываем путь:  
  1562.   
  1563. git+ssh://gituser@SERVER/project.git  
  1564.   
  1565. <span style="font-weight:bold;">Самое главное!</span> eclipse прописывает путь к ssh, как $HOME/ssh. Его необходимо поправить на $HOME/.ssh в меню:   
  1566. Window-Preferences - General - Network Connection - SSH2. Там же можно управлять ключами и просматривать их. Если eclipse не найдет ключи ничего забираться не будет.  
  1567. Дальнейшие действия по <a href="http://github.com/guides/using-the-egit-eclipse-plugin-with-github">добавлению проекта интуитивно понятны</a>.  
  1568.   
  1569. Единственное, в новой версии появилась галочка Import projects after clone, которую надо снять, ибо она у меня привела к пустому списку проектов, попробуйте, может у вас получится. Это не страшно, по вышеприведенному примеру указано как просто сделать share project с извлеченного проекта на диске (плюс показано ниже).  
  1570.   
  1571. Можно также забрать проект через консоль:  
  1572.   
  1573. Запускаем PortableGit\git-cmd.bat и выполняем:  
  1574. <pre name="code" class="xml">  
  1575. >git clone gituser@SERVER:project.git  
  1576. </pre>  
  1577. Далее, создаем проект в eclipse, добавляем в него наш извлеченный проект (Import-File System), жмем на проекте Team-Share (Git) и все, наш проект теперь помечен, как гит репозиторий. Пробуем менять файлы, коммитить и пушить.  
  1578.   
  1579. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8S_u0oJgxTyTOYOJf6riYx7E_pVaBa0BpOBH_MhzUTIQDQPEk02Bc5L4VDbjCLUzSkxQBIyshIwUvGiUhZL42s31Os1v-vjJRliW56WL7A2zpKmbfciAk4RMh5hJFqsfiW5KYbMqm/s1600-h/00000007.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5342587734150559842" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8S_u0oJgxTyTOYOJf6riYx7E_pVaBa0BpOBH_MhzUTIQDQPEk02Bc5L4VDbjCLUzSkxQBIyshIwUvGiUhZL42s31Os1v-vjJRliW56WL7A2zpKmbfciAk4RMh5hJFqsfiW5KYbMqm/s400/00000007.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 155px; height: 174px;"></a>  
  1580.   
  1581. Если возникают какие-либо проблемы, то смотрим /var/log/auth.log .  
  1582. А также в eclipse ( Help - About Eclipse - Configuration Details - View Error Log).  
  1583. Также можно добавить после строчки [gitosis] в gitosis.conf:  
  1584. <pre name="code" class="xml">  
  1585. loglevel=DEBUG  
  1586. </pre>  
  1587. При задании которого при обращении к gitosis (через консольный клиент) будут выведена дополнительная информация при ошибках.  
  1588.   
  1589. Об установке багтрекера <a href="http://trac-hacks.org/wiki/GitPlugin">Trac </a>для git, а также использовании git в Visual Studio в следующий раз.  
  1590. <div style="clear: both;"></div>  
  1591. </div>  
  1592. <div class="post-footer">  
  1593. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1594. Автор:  
  1595. <span class="fn">Vermus</span>  
  1596. </span>  
  1597. <span class="post-timestamp">  
  1598. время  
  1599. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-06-01T17:00:00+04:00">5:00:00 PM</abbr></a>  
  1600. </span>  
  1601. <span class="post-comment-link">  
  1602. <a class="comment-link" href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html#comment-form" onclick="">12  
  1603. коммент.</a>  
  1604. </span>  
  1605. <span class="post-icons">  
  1606. </span>  
  1607. <span class="post-backlinks post-comment-link">  
  1608. </span>  
  1609. </div>  
  1610. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1611. Ярлыки:  
  1612. <a href="http://vermus.blogspot.com/search/label/Eclipse" rel="tag">Eclipse</a>,  
  1613. <a href="http://vermus.blogspot.com/search/label/EGit" rel="tag">EGit</a>,  
  1614. <a href="http://vermus.blogspot.com/search/label/freebsd" rel="tag">freebsd</a>,  
  1615. <a href="http://vermus.blogspot.com/search/label/git" rel="tag">git</a>,  
  1616. <a href="http://vermus.blogspot.com/search/label/gitosis" rel="tag">gitosis</a>,  
  1617. <a href="http://vermus.blogspot.com/search/label/windows" rel="tag">windows</a>  
  1618. </span>  
  1619. </div>  
  1620. <div class="post-footer-line post-footer-line-3"></div>  
  1621. </div>  
  1622. </div>  
  1623. </div>  
  1624.   
  1625.           </div></div>  
  1626.           
  1627.   
  1628.           <div class="date-outer">  
  1629.           
  1630. <h2 class="date-header"><span>29 мая 2009 г.</span></h2>  
  1631.   
  1632.           <div class="date-posts">  
  1633.           
  1634. <div class="post-outer">  
  1635. <div class="post hentry">  
  1636. <a name="1968221196441286379"></a>  
  1637. <h3 class="post-title entry-title">  
  1638. <a href="http://vermus.blogspot.com/2009/05/blog-post.html">Россия в мире сейчас, объективный взгляд</a>  
  1639. </h3>  
  1640. <div class="post-header-line-1"></div>  
  1641. <div class="post-body entry-content">  
  1642. Перейдем от интернационального мира ПО к реальному миру. Даже администратору\программисту необходимо знать, что происходит за экраном монитора. Приступим к чтению мировой прессы.  
  1643. "United Press International" в пятницу <a href="http://inosmi.ru/translation/249503.html">пишет</a>:  
  1644. <blockquote>  
  1645. Демократы же, хотя и не с таким бешеным энтузиазмом верят, будто электронное супероружие сводит к нулю потребность в огромных массах войск с более примитивным оружием, все же полагают, что эпоха массовых противостояний наземных армий ушла в прошлое.  
  1646. В это же верят и все большие страны Европейского Союза, а в особенности - руководство Еврокомиссии в Брюсселе.</blockquote>  
  1647. Демократы тут - демократическая партия США. Осознаем данный тезис.  
  1648. Абзац говорит о победе США над мыслящими людьми в Европе. Нормальному же человеку понятно, что США ни в коем случае не сокращает огромные массы войск, тем более расширяя НАТО в Европе. Эти несопоставимые тезисы сразу нас убеждают в полном вранье журналиста.  
  1649. Далее, та же статья, в той же газете.  
  1650.   
  1651. <blockquote>Единственная проблема состоит в том, что руководство целого ряда мировых держав в это не верит - и строит свои планы в соответствии с совершенно другими принципами.</blockquote>  
  1652. И что же, вы думаете, что в мире все такие тупоголовые, как ваш народ?  
  1653.   
  1654. Далее.  
  1655.   
  1656. <blockquote>Россия продолжает энергично укомплектовывать свою армию новейшими танками Т-90С, ударными вертолетами тактической поддержки Ка-50, боевыми машинами пехоты БМП-90, реактивными системами залпового огня и прочим.</blockquote>  
  1657. И что ж? Есть пословицы в России - "в своем глазу бревно не вижу, в чужом соломинку замечу".  
  1658.   
  1659. <blockquote>Кроме того, недавно Совет безопасности России, возглавляемый суровым союзником премьер-министра Владимира Путина Николаем Патрушевым, объявил о новой доктрине национальной безопасности, в которой подчеркивается необходимость накопления как обычных, так и ядерных вооружений стратегического назначения с целью отражения предполагаемого противника, в особенности США и Организации Североатлантического альянса (НАТО).</blockquote>  
  1660. Это очень опасно конечно для страны, которая ни на кого не нападала, и вообще не вела войн практически век (издевка).  
  1661.   
  1662. В то же время, <a href="http://inosmi.ru/translation/249500.html">Франция пришет</a>:  
  1663. <blockquote>  
  1664. В четверг стало ясно, что уже не двусмысленная. Москва действительно сильно смягчила свою позицию. Пока Совет безопасности готовится к принятию резолюции, Кремль высказывается против 'языка санкций' и призывает к сдержанности и терпению. Таким образом, вероятность того, что по отношению к Ким Чен Иру будут применены санкции, очень невелика.</blockquote>  
  1665.   
  1666. Почему же мы в Европе кажемся более чем добрыми, а в США определено плохими? Хотя название статьи газеты TF-1 без определения смысла уже принуждает читателя к отрицательному отношению к политике России ("Позиция России по отношению к Ким Чен Иру не такая уж и жесткая").  
  1667.   
  1668. Jamestown Foundation на полном серьезе <a href="http://inosmi.ru/translation/249495.html">печатает</a> статью репортера Александр Меликишвили под названием "Грузинский парламентарий: неудачный путч финансировал олигарх, живущий в России".  
  1669.   
  1670. <blockquote>В частности, Таргамадзе утверждал, что неудачный мятеж на военной базе Мухровани 5 мая спонсировал Александр Ебралидзе (Alexander Ebralidze), олигарх грузинского происхождения, уже тридцать лет живущий в России. Известно также, что он находится в личном контакте с российским премьер-министром Владимиром Путиным.  
  1671. </blockquote>  
  1672. В такую чушь в матушке России поверит не всякая блондинка, как такое<span style="font-weight:bold;"></span> может подаваться западному обывателю - непонятно. Феерический бред, не заслуживающий внимания даже прапора ФСБ.  
  1673.   
  1674. <blockquote>Столь же впечатляет и криминальное прошлое Ебралидзе. Он был дважды осужден: первый раз за разбойное нападение и незаконное хранение оружия, второй - за хулиганство и сопротивление властям.  
  1675. </blockquote>  
  1676. Смешно, ей-богу. Но что же мы хотим в итоге? Читаем.  
  1677.   
  1678. <blockquote>В резолюции, принятой на вышеупомянутой учредительной конференции, по сути, повторяются требования Кремля к Тбилиси: 'Грузия должна стать нейтральным, внеблоковым государством, развивающим отношения со своими соседями и со всеми государствами мира. С территории нашей родины не должна исходить военная угроза для кого бы то ни было. Грузия в свою очередь должна получить международные гарантии невмешательства в ее внутренние дела. Важнейшим приоритетом Грузии должно стать восстановление и развитие добрососедских, равноправных отношений с РФ'.</blockquote>  
  1679. Какое слово здесь может задеть американца?!  
  1680.   
  1681. <blockquote>По словам Таргамадзе, организаторами этих встреч были известные криминальные авторитеты грузинского происхождения, активно действующие в России - Тариэль Ониани (Tariel Oniani) и Бондо Шаликиани (Bondo Shalikiani). Следует отметить, что 18 мая президент Саакашвили упомянул Шаликиани в качестве одного из 'активных спонсоров' проходящих в Грузии демонстраций оппозиции, а в марте министр внутренних дел страны Вано Мерабишвили (Vano Merabishvili) назвал Тариэля Ониани в числе подстрекателей к беспорядкам.</blockquote>  
  1682. Даже если это правда. почему это Англия может держать политических беженцев, а мы нет? Великобритания отвечает за их действия? а почему мы должны?  
  1683.   
  1684. <blockquote>Пожалуй, удачнее всего побудительные мотивы кремлевских менеджеров 'проекта Ебралидзе' подытожил корреспондент 'Комсомольской правды' Владимир Ворсобин: 'А в Москве, похоже, поняли: чтобы восстановить российское влияние России, придется повозиться с тбилисским политическим террариумом. Пока разочарование грузин политикой США велико, пока тбилисская власть неустойчива, Москва получила шанс отвоевать у США хотя бы маленький плацдарм для пророссийских политиков. В Сочи, например, 'агентов влияния' появилось сразу двое - для национального большинства и меньшинства. Пусть неуклюже, пусть топорно, но подготовка политического 'десанта', похоже, началась'.  
  1685. </blockquote>  
  1686. Ну что сказать, газета - попса, и журналист сволочь (если такой существует вообще).  
  1687.   
  1688. ps. Хостинг блоггера в Америке, пишу на русском, встречал случаи удаления акков. (Надо бы кросс пост делать)  
  1689. <div style="clear: both;"></div>  
  1690. </div>  
  1691. <div class="post-footer">  
  1692. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1693. Автор:  
  1694. <span class="fn">Vermus</span>  
  1695. </span>  
  1696. <span class="post-timestamp">  
  1697. время  
  1698. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/05/blog-post.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-05-29T23:39:00+04:00">11:39:00 PM</abbr></a>  
  1699. </span>  
  1700. <span class="post-comment-link">  
  1701. <a class="comment-link" href="http://vermus.blogspot.com/2009/05/blog-post.html#comment-form" onclick="">1 коммент.</a>  
  1702. </span>  
  1703. <span class="post-icons">  
  1704. </span>  
  1705. <span class="post-backlinks post-comment-link">  
  1706. </span>  
  1707. </div>  
  1708. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1709. Ярлыки:  
  1710. <a href="http://vermus.blogspot.com/search/label/%D0%BF%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0" rel="tag">политика</a>  
  1711. </span>  
  1712. </div>  
  1713. <div class="post-footer-line post-footer-line-3"></div>  
  1714. </div>  
  1715. </div>  
  1716. </div>  
  1717.   
  1718.           </div></div>  
  1719.           
  1720.   
  1721.           <div class="date-outer">  
  1722.           
  1723. <h2 class="date-header"><span>27 мая 2009 г.</span></h2>  
  1724.   
  1725.           <div class="date-posts">  
  1726.           
  1727. <div class="post-outer">  
  1728. <div class="post hentry">  
  1729. <a name="4126655631603281175"></a>  
  1730. <h3 class="post-title entry-title">  
  1731. <a href="http://vermus.blogspot.com/2009/05/gui-wicd-debian.html">GUI Менеджер сетевых соединений wicd в debian</a>  
  1732. </h3>  
  1733. <div class="post-header-line-1"></div>  
  1734. <div class="post-body entry-content">  
  1735. Все-таки я вернулся к <a href="http://wicd.sourceforge.net/">wicd</a>.   
  1736.   
  1737. То есть, поставил на asus eee pc debian lenny, тут же выкинув NetworkManager ибо он <span style="font-weight:bold;">сразу</span> не заработал.  
  1738. По-быстрому настроил wifi через interfaces и wpasupplicant:  
  1739.   
  1740. #wpa_passphrase your_ssid your_psk  
  1741.   
  1742. Так я создал хеш ключа для сети (your_ssid - имя wifi сети, your_psk - pre shared key - ключ, то есть).  
  1743.   
  1744. wpa_supplicant.conf я создавать не стал, просто прописал что-то вроде  
  1745. <pre name="code" class="xml">  
  1746. auto ath0  
  1747. iface ath0 inet dhcp  
  1748. wpa-driver wext  
  1749. wpa-ssid имя сети  
  1750. wpa-ap-scan 1  
  1751. wpa-proto WPA  
  1752. wpa-pairwise TKIP  
  1753. wpa-group TKIP  
  1754. wpa-key-mgmt WPA-PSK  
  1755. wpa-psk паскей (созданный выше хеш)  
  1756. </pre>  
  1757.   
  1758. Все тут же завелось и забегало.  
  1759. В этом же процессе пытался  поставить GUI-шные менеджеры: wifi-radar, тот же network manager (из пакетов), а так же wicd (поставил почему-то с репы убунты, потыкал, что-то не понравилось, тут же снес, надеясь что будущем найду что-то получше).  
  1760. Несколько дней меня это устраивало, пока я не дошел до работы. Настройки wifi другие, да и dhcp по проводам хочется (а дома еще не подключал, но традиционно статика), покумекав, я все-таки понял, что на ноуте должен стоят GUI-шный менеджер сетевых интерфейсов, это обязательное условие для оперативного изменения сетевых подключений. Хотя лукавлю, можно конечно написать скрипт, но хочется же лучшего и сразу (статуса сети в трее например, переключение сетей мышкой и т.п.).  
  1761. Так как NetworkManager из коробки никаких признаков о сетях не подавал, решил поставить версию из <a href="http://ftp.gnome.org/pub/gnome/sources/NetworkManager/0.7/">сырцов</a>, надеясь на лучшее.   
  1762. Процесс установки протекал очень напряженно. Я не буду рассказывать про все dev пакеты которые пришлось поставить, размер их был не меньше 50 мб. Но я твердо решил испробовать новую версию.  
  1763. Ну вот вроде бы и скомпилировалось и поставилось. Поставиться-то поставилось, но запускаться не хотело. То есть сам Менеджер. Пару часов ковыряний порядком поднадоели, конфиги уже были раскиданы по местам (их много, особенно которые относятся к dbbus) из диры с сырцами, когда я сообразил, что конфиги-то проинсталлированы только не в ту диру. /usr/local/etc вместо /etc. Может я ключик при конфигурировании не указал, а может под а-ля bsd систему конфигуратор, разбираться не стал, так как менеджер вроде запущен и работает.  
  1764. На заметку, посмотреть, что происходит с менеджером, если он у вас не запускается как демон, можно так:  
  1765.   
  1766. #NetworkManager --no-daemon  
  1767.   
  1768. Я наивно полагал, что nm-applet входит в состав NetworkManager (как в пакете), а вот и не так. Его, оказывается, надо <a href="http://ftp.gnome.org/pub/GNOME/sources/network-manager-applet/0.7/">ставить отдельно</a>. Его еще и не сразу найдешь, так как NetworkManager <a href="http://ftp.gnome.org/pub/GNOME/sources/">находится далеко</a> в списке на ftp от апплета.  
  1769.   
  1770. Ладно, решил, так решил. Ооо, установка апплета - это нечто монстроидальное. Столько зависимостей наверное сложно придумать (казалось бы - апплетик, иконка с меню, ну может она и разруливает там брелоки какие-нибудь). Пришлось еще влить около 100 мб всякой всячины. Я уж был хотел передумать, но упорство взяло верх.  
  1771.   
  1772. Установил таки, работает! Правда все приходится запускать вручную. И менеджер и апплет.   
  1773. Работает не сеть конечно, работает пока только этот менеджер. В документации сказано - чтобы все правильно работало, очистите файл /etc/interfaces , оставив в нем только лупбек. Ну что ж, открываю интерфейсы - вот же, менеджер "любезно" удалил <span style="font-weight:bold;">все</span>, включая закомменченые настройки. Вот спасибо! Теперь дома мне тоже не видать связи, подумал я. Хотя, я ему это простил, надеясь на то, что раз он такой умный, то он мне и сеть поднимет любую.   
  1774. Начали с dhcp+wifi. И сразу наткнулись на баг, который обмусолен на всяческих забугорных убунтовых форумах - по логам - dchp клиент получает ответ от dhcp сервера, но Менеджер его не принимает (или не понимает) и говорит нам о тайм ауте ответа от dhcp сервера. Сразу говорю - я эту проблему так и не решил. Говорят дело в dhcp3 , но мне так не кажется.  
  1775. Решил отложить эту проблему в строну и заняться автозагрузкой апплета и менеджера.  
  1776. Для начала я прописал статику в проводной интерфейс и только так сеть завелась с Менеджером.  
  1777. Сам Менеджер беспроблемно прописался в update-rc.d, а вот с апплетом начались чудеса.   
  1778. Используем nm-applet.desktop файл из сырцов - закидываем его в /etc/xdg/autostart .  
  1779. Перезагружаем бук, и - о, чудо, значек апплета и соединения сети. Но! Упал апплет микшера и раскладки. Я сначала подумал совпадение. Попробовал разные варианты - апплет (с ключем --sm, все как полагается - оно же в desktop прописывается) виноват. Мало того, так приложения не запускаются из гномовского меню! В чем была причина, я так и не понял. Было время идти домой.  
  1780. Дома, в отличии от работы, wifi с wpa , решил попробовать подключиться. О, чудо, схватил dhcp от моего роутера да еще и с WPA. Вот это странность. В общем, такая нестабильность меня не устраивала, тем более что приложения так и не запускались, посему я, в расстроенных чувствах, решил прибить все, что связано с NetworkManager, до сих пор удивляюсь - как такой сырой софт может стоят дефолтом во многих дистрибах, ужас просто.  
  1781. Покумекав, чем же все-таки мне заменить NM вспомнил о галопах по <a href="http://wicd.sourceforge.net/">wicd</a>, подумал, надо бы уделить побольше времени, вдруг, что из этого выйдет.  
  1782. Начав изучение, обнаружил, что зря ставил с репы убунты его в прошлый раз, видно попалась не та страница, оказывается его можно ставить <a href="http://wicd.sourceforge.net/download.php">с репы дебиана</a>:  
  1783.   
  1784. deb http://apt.wicd.net lenny extras  
  1785.   
  1786. получаем ключ:  
  1787. wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -  
  1788. обновляем репу и ставим wicd.  
  1789. Вот так все просто и все свежее! (установка 5 минут против полдня на NM)  
  1790. А дальше что? Да ничего, перезагружаемся - у нас и апплет и все интерфейсы и все работает.  
  1791. (только также надо предварительно все закомментить в interfaces кроме lo).  
  1792. wifi с WPA, проводной ethernet - все без проблем. Впечатления - отменные!   
  1793. Надеюсь, что и дальше такие же будет от использования wicd, чего и вам желаю!  
  1794.   
  1795. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-XaJ6wRG88UbgHoMxVjPLB-1-LOoNaqyxKHWY8BGwMOMPO4RtlEEA7BxBmA3YQyy3mEAGsapoDvH-zFHPH4ghQ3cUfxi0yVsUJJyQ25J-ClPHXlapDn-sN8Z3j_14wsq7VgQ8-xsC/s1600-h/gui.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5340573045685690210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-XaJ6wRG88UbgHoMxVjPLB-1-LOoNaqyxKHWY8BGwMOMPO4RtlEEA7BxBmA3YQyy3mEAGsapoDvH-zFHPH4ghQ3cUfxi0yVsUJJyQ25J-ClPHXlapDn-sN8Z3j_14wsq7VgQ8-xsC/s400/gui.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 395px;"></a>  
  1796. <div style="clear: both;"></div>  
  1797. </div>  
  1798. <div class="post-footer">  
  1799. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1800. Автор:  
  1801. <span class="fn">Vermus</span>  
  1802. </span>  
  1803. <span class="post-timestamp">  
  1804. время  
  1805. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/05/gui-wicd-debian.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-05-27T20:22:00+04:00">8:22:00 PM</abbr></a>  
  1806. </span>  
  1807. <span class="post-comment-link">  
  1808. <a class="comment-link" href="http://vermus.blogspot.com/2009/05/gui-wicd-debian.html#comment-form" onclick="">3  
  1809. коммент.</a>  
  1810. </span>  
  1811. <span class="post-icons">  
  1812. </span>  
  1813. <span class="post-backlinks post-comment-link">  
  1814. </span>  
  1815. </div>  
  1816. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1817. Ярлыки:  
  1818. <a href="http://vermus.blogspot.com/search/label/asus%20eee%20pc" rel="tag">asus eee pc</a>,  
  1819. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  1820. <a href="http://vermus.blogspot.com/search/label/gui" rel="tag">gui</a>,  
  1821. <a href="http://vermus.blogspot.com/search/label/network%20manager" rel="tag">network manager</a>,  
  1822. <a href="http://vermus.blogspot.com/search/label/wicd" rel="tag">wicd</a>  
  1823. </span>  
  1824. </div>  
  1825. <div class="post-footer-line post-footer-line-3"></div>  
  1826. </div>  
  1827. </div>  
  1828. </div>  
  1829.   
  1830.           </div></div>  
  1831.           
  1832.   
  1833.           <div class="date-outer">  
  1834.           
  1835. <h2 class="date-header"><span>19 мая 2009 г.</span></h2>  
  1836.   
  1837.           <div class="date-posts">  
  1838.           
  1839. <div class="post-outer">  
  1840. <div class="post hentry">  
  1841. <a name="7806300638179203782"></a>  
  1842. <h3 class="post-title entry-title">  
  1843. <a href="http://vermus.blogspot.com/2009/05/linux.html">Файловые менеджеры linux</a>  
  1844. </h3>  
  1845. <div class="post-header-line-1"></div>  
  1846. <div class="post-body entry-content">  
  1847. Просто ссылки, выбираем на вкус и цвет.  
  1848. 1. Nautilus, <a href="http://live.gnome.org/Nautilus">http://live.gnome.org/Nautilus</a> (desktop)  
  1849. 2. Dolphin, <a href="http://dolphin.kde.org/">http://dolphin.kde.org/</a> (desktop)  
  1850. 3. Konqueror, <a href="http://www.konqueror.org/">http://www.konqueror.org/</a> (desktop)  
  1851. 4. Thunar, <a href="http://thunar.xfce.org/index.html">http://thunar.xfce.org/index.html</a> (desktop)  
  1852. 5. PCManFM, <a href="http://pcmanfm.sourceforge.net/">http://pcmanfm.sourceforge.net/</a> (desktop)  
  1853. 6. Krusader, <a href="http://www.krusader.org/">http://www.krusader.org/</a> (GUI)  
  1854. 7. Xfe, <a href="http://roland65.free.fr/xfe/">http://roland65.free.fr/xfe/</a> (GUI)  
  1855. 8. ROX-Filer, <a href="http://roscidus.com/desktop/ROX-Filer">http://roscidus.com/desktop/ROX-Filer</a> (desktop)  
  1856. 9. Midnight Commander, <a href="http://www.midnight-commander.org/">http://www.midnight-commander.org/</a> (console)  
  1857. 10. Vifm, <a href="http://vifm.sourceforge.net/">http://vifm.sourceforge.net/</a> (GUI)  
  1858. 11. GNOME Commander, <a href="http://www.nongnu.org/gcmd/">http://www.nongnu.org/gcmd/</a> (GUI)  
  1859. 12. emelFM2, <a href="http://emelfm2.net/">http://emelfm2.net/</a> (GUI)  
  1860. 13. Tuxcommander, <a href="http://tuxcmd.sourceforge.net/">http://tuxcmd.sourceforge.net/</a> (GUI)  
  1861. 14. Double Commander, <a href="http://doublecmd.sourceforge.net/">http://doublecmd.sourceforge.net/</a> (GUI)  
  1862. 15. FlyBird, <a href="http://fly-bird.org/">http://fly-bird.org/</a> (GUI)  
  1863. 16. gentoo, <a href="http://obsession.se/gentoo/">http://obsession.se/gentoo/</a> (GUI)  
  1864. 17. Worker, <a href="http://www.boomerangsworld.de/worker/">http://www.boomerangsworld.de/worker/</a> (GUI)  
  1865. 18. lfm - Last File Manager, <a href="http://www.terra.es/personal7/inigoserna/lfm/">http://www.terra.es/personal7/inigoserna/lfm/  
  1866. </a> (console)  
  1867. 19. Filerunner, <a href="http://linux.maruhn.com/sec/filerunner.html">http://linux.maruhn.com/sec/filerunner.html</a> (GUI)  
  1868. 20. BeeSoft Commander, <a href="http://www.beesoft.org/">http://www.beesoft.org/</a> (GUI)  
  1869. 21. Necromancer's DOS Navigator, <a href="http://ndn.muxe.com/">http://ndn.muxe.com/</a> (console)  
  1870. 22. FileCommander, <a href="http://silk.apana.org.au/fc2development.html">http://silk.apana.org.au/fc2development.html</a> (console)  
  1871. 23. FDclone, <a href="http://hp.vector.co.jp/authors/VA012337/soft/fd/">http://hp.vector.co.jp/authors/VA012337/soft/fd/</a> (console)  
  1872. 24. FileRunner, <a href="http://www.cd.chalmers.se/~hch/filerunner.html">http://www.cd.chalmers.se/~hch/filerunner.html</a> (GUI)  
  1873. 25. Desktop File Manager, <a href="http://www.kaisersite.de/dfm/">http://www.kaisersite.de/dfm/</a> (desktop)  
  1874. 26. TKDesk, <a href="http://tkdesk.sourceforge.net/">http://tkdesk.sourceforge.net/</a> (desktop)  
  1875. 27. muCommander, <a href="http://www.mucommander.com/">http://www.mucommander.com/</a> (GUI)  
  1876. 28. XNC - X Northern Captain, <a href="http://www.xnc.dubna.su/">http://www.xnc.dubna.su/</a> (GUI) (похоже, разработка прекращена)  
  1877.   
  1878. Из двух-панельных я использовал mc (ставлю всегда), krusader (в KDE), gnome commander (в Gnome).  
  1879.   
  1880. Кто знает еще какие?  
  1881. <div style="clear: both;"></div>  
  1882. </div>  
  1883. <div class="post-footer">  
  1884. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1885. Автор:  
  1886. <span class="fn">Vermus</span>  
  1887. </span>  
  1888. <span class="post-timestamp">  
  1889. время  
  1890. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/05/linux.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-05-19T12:25:00+04:00">12:25:00 PM</abbr></a>  
  1891. </span>  
  1892. <span class="post-comment-link">  
  1893. <a class="comment-link" href="http://vermus.blogspot.com/2009/05/linux.html#comment-form" onclick="">3  
  1894. коммент.</a>  
  1895. </span>  
  1896. <span class="post-icons">  
  1897. </span>  
  1898. <span class="post-backlinks post-comment-link">  
  1899. </span>  
  1900. </div>  
  1901. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1902. Ярлыки:  
  1903. <a href="http://vermus.blogspot.com/search/label/%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80%D1%8B" rel="tag">файловые менеджеры</a>,  
  1904. <a href="http://vermus.blogspot.com/search/label/file%20manager" rel="tag">file manager</a>,  
  1905. <a href="http://vermus.blogspot.com/search/label/linux" rel="tag">linux</a>  
  1906. </span>  
  1907. </div>  
  1908. <div class="post-footer-line post-footer-line-3"></div>  
  1909. </div>  
  1910. </div>  
  1911. </div>  
  1912. <div class="post-outer">  
  1913. <div class="post hentry">  
  1914. <a name="8643312722536400788"></a>  
  1915. <h3 class="post-title entry-title">  
  1916. <a href="http://vermus.blogspot.com/2009/05/2.html">Управление модулями апача 2 в дебиане</a>  
  1917. </h3>  
  1918. <div class="post-header-line-1"></div>  
  1919. <div class="post-body entry-content">  
  1920. Постоянно забываю утилиты для управления модулями apache2 в дебиане (ибо редко я его настраиваю). Сделаю заметку.  
  1921.   
  1922. a2enmod: включить модуль апача (ничего особенного он не делает, создает  ссылки на модуль .load и .conf файлы в папке mods-enabled).   
  1923.   
  1924. Например, включить модуль rewrite:  
  1925. #a2enmod rewrite  
  1926.   
  1927. a2dismod: делает вещи обратные a2enmod   
  1928. Например для отключения модуля:   
  1929. #a2dismod rewrite  
  1930.   
  1931. Эти утилиты без параметров выдают список модулей, которые можно активировать в случае a2enmod и список модулей, которые можно деактивировать в случае a2dismod.  
  1932. <div style="clear: both;"></div>  
  1933. </div>  
  1934. <div class="post-footer">  
  1935. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1936. Автор:  
  1937. <span class="fn">Vermus</span>  
  1938. </span>  
  1939. <span class="post-timestamp">  
  1940. время  
  1941. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/05/2.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-05-19T08:36:00+04:00">8:36:00 AM</abbr></a>  
  1942. </span>  
  1943. <span class="post-comment-link">  
  1944. <a class="comment-link" href="http://vermus.blogspot.com/2009/05/2.html#comment-form" onclick="">2  
  1945. коммент.</a>  
  1946. </span>  
  1947. <span class="post-icons">  
  1948. </span>  
  1949. <span class="post-backlinks post-comment-link">  
  1950. </span>  
  1951. </div>  
  1952. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  1953. Ярлыки:  
  1954. <a href="http://vermus.blogspot.com/search/label/apache2" rel="tag">apache2</a>,  
  1955. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  1956. <a href="http://vermus.blogspot.com/search/label/modules" rel="tag">modules</a>  
  1957. </span>  
  1958. </div>  
  1959. <div class="post-footer-line post-footer-line-3"></div>  
  1960. </div>  
  1961. </div>  
  1962. </div>  
  1963.   
  1964.           </div></div>  
  1965.           
  1966.   
  1967.           <div class="date-outer">  
  1968.           
  1969. <h2 class="date-header"><span>17 мая 2009 г.</span></h2>  
  1970.   
  1971.           <div class="date-posts">  
  1972.           
  1973. <div class="post-outer">  
  1974. <div class="post hentry">  
  1975. <a name="2814413975074649521"></a>  
  1976. <h3 class="post-title entry-title">  
  1977. <a href="http://vermus.blogspot.com/2009/05/img-windows.html">Создание загрузочной флешки из img образа в windows</a>  
  1978. </h3>  
  1979. <div class="post-header-line-1"></div>  
  1980. <div class="post-body entry-content">  
  1981. Утилитка, которая корректно залила образ *.img linux на флешку из под windows:  
  1982. <a href="http://unetbootin.sourceforge.net/unetbootin-windows-latest.exe">UNetbootin</a>.  
  1983. Рекомендую.  
  1984. <div style="clear: both;"></div>  
  1985. </div>  
  1986. <div class="post-footer">  
  1987. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  1988. Автор:  
  1989. <span class="fn">Vermus</span>  
  1990. </span>  
  1991. <span class="post-timestamp">  
  1992. время  
  1993. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/05/img-windows.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-05-17T20:42:00+04:00">8:42:00 PM</abbr></a>  
  1994. </span>  
  1995. <span class="post-comment-link">  
  1996. <a class="comment-link" href="http://vermus.blogspot.com/2009/05/img-windows.html#comment-form" onclick="">5  
  1997. коммент.</a>  
  1998. </span>  
  1999. <span class="post-icons">  
  2000. </span>  
  2001. <span class="post-backlinks post-comment-link">  
  2002. </span>  
  2003. </div>  
  2004. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2005. Ярлыки:  
  2006. <a href="http://vermus.blogspot.com/search/label/flash" rel="tag">flash</a>,  
  2007. <a href="http://vermus.blogspot.com/search/label/img" rel="tag">img</a>,  
  2008. <a href="http://vermus.blogspot.com/search/label/linux" rel="tag">linux</a>,  
  2009. <a href="http://vermus.blogspot.com/search/label/UNetbootin" rel="tag">UNetbootin</a>  
  2010. </span>  
  2011. </div>  
  2012. <div class="post-footer-line post-footer-line-3"></div>  
  2013. </div>  
  2014. </div>  
  2015. </div>  
  2016.   
  2017.           </div></div>  
  2018.           
  2019.   
  2020.           <div class="date-outer">  
  2021.           
  2022. <h2 class="date-header"><span>1 апреля 2009 г.</span></h2>  
  2023.   
  2024.           <div class="date-posts">  
  2025.           
  2026. <div class="post-outer">  
  2027. <div class="post hentry">  
  2028. <a name="927591606491187925"></a>  
  2029. <h3 class="post-title entry-title">  
  2030. <a href="http://vermus.blogspot.com/2009/04/blog-post.html">Байка</a>  
  2031. </h3>  
  2032. <div class="post-header-line-1"></div>  
  2033. <div class="post-body entry-content">  
  2034. Задались мы тут семейством вопросом слова "байка". Мне казалось, что это сказка,  полностью лишенная реальной подосновы. Начали спорить.   
  2035. В итоге - <a href="http://ru.wikipedia.org/wiki/Байка">википедия</a> говорит, что <blockquote>Байка — юмористический рассказ, как правило, основанный на реальных событиях. Достоверность байки несколько выше, чем анекдота, но это не исключает литературных приёмов, с помощью которых рассказчик подаёт байку в желаемом виде.</blockquote>, а вот <a href="http://slovarozhegova.ru/word.php?wordid=942">словарь Ожегова</a>, что <blockquote>БАЙКА2, -и, ас. (разг.) Побасенка, выдумка, басня (во 2 знач.).Охотничьи байки. Что-то не похожа эта б. на правду. </blockquote>  
  2036. Я верю Ожегову. А вы?  
  2037. <div style="clear: both;"></div>  
  2038. </div>  
  2039. <div class="post-footer">  
  2040. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2041. Автор:  
  2042. <span class="fn">Vermus</span>  
  2043. </span>  
  2044. <span class="post-timestamp">  
  2045. время  
  2046. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/04/blog-post.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-04-01T21:11:00+04:00">9:11:00 PM</abbr></a>  
  2047. </span>  
  2048. <span class="post-comment-link">  
  2049. <a class="comment-link" href="http://vermus.blogspot.com/2009/04/blog-post.html#comment-form" onclick="">3  
  2050. коммент.</a>  
  2051. </span>  
  2052. <span class="post-icons">  
  2053. </span>  
  2054. <span class="post-backlinks post-comment-link">  
  2055. </span>  
  2056. </div>  
  2057. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2058. Ярлыки:  
  2059. <a href="http://vermus.blogspot.com/search/label/%D0%BD%D0%B5%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%BD%D0%BA%D0%B8" rel="tag">непонятнки</a>,  
  2060. <a href="http://vermus.blogspot.com/search/label/%D1%82%D0%BE%D0%BB%D0%BA%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" rel="tag">толкования</a>  
  2061. </span>  
  2062. </div>  
  2063. <div class="post-footer-line post-footer-line-3"></div>  
  2064. </div>  
  2065. </div>  
  2066. </div>  
  2067.   
  2068.           </div></div>  
  2069.           
  2070.   
  2071.           <div class="date-outer">  
  2072.           
  2073. <h2 class="date-header"><span>15 марта 2009 г.</span></h2>  
  2074.   
  2075.           <div class="date-posts">  
  2076.           
  2077. <div class="post-outer">  
  2078. <div class="post hentry">  
  2079. <a name="798901194332168947"></a>  
  2080. <h3 class="post-title entry-title">  
  2081. <a href="http://vermus.blogspot.com/2009/03/debian-linux.html">Архивирование системы или бекап в debian linux</a>  
  2082. </h3>  
  2083. <div class="post-header-line-1"></div>  
  2084. <div class="post-body entry-content">  
  2085. Сделаю заметочку на будущее, чтобы в очередной раз не вспоминать скрипты :)  
  2086. <pre name="code" class="xml">  
  2087. dmpfile=backup.tar.bz2  
  2088. srcdir=/  
  2089. trgdir=/share  
  2090. cd $trgdir && tar -cfj $dmpfile --exclude-from=/exclude_back $srcdir  
  2091. </pre>  
  2092. Скрипт переходит в директорию куда надо сохранить архив, и выполняет tar.  
  2093.   
  2094. --exclude-from - берем список исключений из файла в корне (сам скрипт тоже в корне)  
  2095. <pre name="code" class="xml">  
  2096. # cat exclude_back  
  2097. /proc  
  2098. /mnt  
  2099. /var/run  
  2100. /dev  
  2101. /sys  
  2102. /home/repo  
  2103. /share  
  2104. </pre>  
  2105. Последние две - мои директории.  
  2106. <div style="clear: both;"></div>  
  2107. </div>  
  2108. <div class="post-footer">  
  2109. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2110. Автор:  
  2111. <span class="fn">Vermus</span>  
  2112. </span>  
  2113. <span class="post-timestamp">  
  2114. время  
  2115. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/03/debian-linux.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-03-15T18:41:00+03:00">6:41:00 PM</abbr></a>  
  2116. </span>  
  2117. <span class="post-comment-link">  
  2118. <a class="comment-link" href="http://vermus.blogspot.com/2009/03/debian-linux.html#comment-form" onclick="">0  
  2119. коммент.</a>  
  2120. </span>  
  2121. <span class="post-icons">  
  2122. </span>  
  2123. <span class="post-backlinks post-comment-link">  
  2124. </span>  
  2125. </div>  
  2126. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2127. Ярлыки:  
  2128. <a href="http://vermus.blogspot.com/search/label/%D0%B0%D1%80%D1%85%D0%B8%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" rel="tag">архивирование</a>,  
  2129. <a href="http://vermus.blogspot.com/search/label/%D0%B1%D0%B5%D0%BA%D0%B0%D0%BF" rel="tag">бекап</a>,  
  2130. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  2131. <a href="http://vermus.blogspot.com/search/label/linux" rel="tag">linux</a>,  
  2132. <a href="http://vermus.blogspot.com/search/label/tar" rel="tag">tar</a>  
  2133. </span>  
  2134. </div>  
  2135. <div class="post-footer-line post-footer-line-3"></div>  
  2136. </div>  
  2137. </div>  
  2138. </div>  
  2139.   
  2140.           </div></div>  
  2141.           
  2142.   
  2143.           <div class="date-outer">  
  2144.           
  2145. <h2 class="date-header"><span>11 марта 2009 г.</span></h2>  
  2146.   
  2147.           <div class="date-posts">  
  2148.           
  2149. <div class="post-outer">  
  2150. <div class="post hentry">  
  2151. <a name="9195826052274787273"></a>  
  2152. <h3 class="post-title entry-title">  
  2153. <a href="http://vermus.blogspot.com/2009/03/django_11.html">Контекстные процессоры Django</a>  
  2154. </h3>  
  2155. <div class="post-header-line-1"></div>  
  2156. <div class="post-body entry-content">  
  2157. Как пишет <a href="http://cargo.caml.ru/djangobook/ch10s02.html">django book </a>  
  2158.   
  2159. <blockquote>Для обработки шаблона вам необходим контекст. Обычно это экземпляр django.template.Context, но в поставку Django также входит специальный подкласс — django.template.RequestContext, который работает немного иначе. Класс RequestContext по умолчанию добавляет группу переменных в контекст шаблона - такие как объект HttpRequest или информацию о текущем пользователе. </blockquote>  
  2160.   
  2161. <blockquote>Класс RequestContext и контекстные процессоры были созданы для решения этой задачи. Контекстные процессоры позволяют вам указывать ряд переменных, которые будут устанавливаться автоматически для каждого контекста, без необходимости их указания в каждом вызове render_to_response(). Надо лишь использовать RequestContext вместо Context при обработке шаблона. </blockquote>  
  2162.   
  2163. То есть, собственно говоря, для чего на нужны контекстные процессоры?  
  2164. Контекстный процессор принимает объект HttpRequest и возвращает словарь переменных для его последующего использования в контексте шаблона.  
  2165. То есть, для поставленной перед собой задачи - вывод дополнительной информации в любых шаблонах он справляется.  
  2166.   
  2167. В <a href="http://cargo.caml.ru/djangobook/ch10s02.html#djangobook.chap10.processors.howto">django книге описано</a>, как создавать свои глобальные процессоры.  
  2168.   
  2169. Есть еще варианты - <a href="http://softwaremaniacs.org/forum/django/1439/">http://softwaremaniacs.org/forum/django/1439/</a>  
  2170. <div style="clear: both;"></div>  
  2171. </div>  
  2172. <div class="post-footer">  
  2173. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2174. Автор:  
  2175. <span class="fn">Vermus</span>  
  2176. </span>  
  2177. <span class="post-timestamp">  
  2178. время  
  2179. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/03/django_11.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-03-11T12:27:00+03:00">12:27:00 PM</abbr></a>  
  2180. </span>  
  2181. <span class="post-comment-link">  
  2182. <a class="comment-link" href="http://vermus.blogspot.com/2009/03/django_11.html#comment-form" onclick="">0  
  2183. коммент.</a>  
  2184. </span>  
  2185. <span class="post-icons">  
  2186. </span>  
  2187. <span class="post-backlinks post-comment-link">  
  2188. </span>  
  2189. </div>  
  2190. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2191. Ярлыки:  
  2192. <a href="http://vermus.blogspot.com/search/label/Context" rel="tag">Context</a>,  
  2193. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  2194. <a href="http://vermus.blogspot.com/search/label/RequestContext" rel="tag">RequestContext</a>  
  2195. </span>  
  2196. </div>  
  2197. <div class="post-footer-line post-footer-line-3"></div>  
  2198. </div>  
  2199. </div>  
  2200. </div>  
  2201.   
  2202.           </div></div>  
  2203.           
  2204.   
  2205.           <div class="date-outer">  
  2206.           
  2207. <h2 class="date-header"><span>3 марта 2009 г.</span></h2>  
  2208.   
  2209.           <div class="date-posts">  
  2210.           
  2211. <div class="post-outer">  
  2212. <div class="post hentry">  
  2213. <a name="917804534915490554"></a>  
  2214. <h3 class="post-title entry-title">  
  2215. <a href="http://vermus.blogspot.com/2009/03/django.html">Django. Валидация формсетов. Часть вторая</a>  
  2216. </h3>  
  2217. <div class="post-header-line-1"></div>  
  2218. <div class="post-body entry-content">  
  2219. При <a href="http://vermus.blogspot.com/2008/12/formset.html">использовании двух формсетов в одном виде</a> возникает следующая проблема валидации:  
  2220. 1. Валидация формсета проходит следующим образом:  
  2221. а)Валидируются все формы, входящие в рамки:  
  2222. self._total_form_count = self.management_form.cleaned_data[TOTAL_FORM_COUNT]  
  2223. б)экстра-формы, в которых нет вообще никаких данных игнорируются.  
  2224. 2. В связи с синхронным использованием двух формсетов может возникнуть следующая проблема:  
  2225.   
  2226. У одного формсета валидируются, например, 1,2 и 5 форма, а у другого только 1,2, в связи с тем что у второго формсета 5 форма пустая.  
  2227.   
  2228. Вот эту проблему и попытаемся сегодня решить.  
  2229.   
  2230. <a href="http://code.djangoproject.com/browser/django/trunk/django/forms/forms.py#L208">Начало функции</a>, отвечающей за валидацию вормы (валидация формсетов - это просто валидация каждой формы в формсете)  
  2231. <pre name="code" class="py">  
  2232. 208      def full_clean(self):  
  2233. 209          """  
  2234. 210          Cleans all of self.data and populates self._errors and  
  2235. 211          self.cleaned_data.  
  2236. 212          """  
  2237. 213          self._errors = ErrorDict()  
  2238. 214          if not self.is_bound: # Stop further processing.  
  2239. 215              return  
  2240. 216          self.cleaned_data = {}  
  2241. 217          # If the form is permitted to be empty, and none of the form data has  
  2242. 218          # changed from the initial data, short circuit any validation.  
  2243. 219          if self.empty_permitted and not self.has_changed():  
  2244. 220              return  
  2245. </pre>  
  2246. Как написано в комментариях в коде - если форме разрешено быть пустой, прекращаем всякую валидацию. Значит, наша задача, привести свойство empty_permitted или метод has_changed() для каждой формы в каждом формсете к единому синхронному виду.  
  2247.   
  2248. Переопределяем функцию has_changed(), в обоих классах, в котором мы описываем формы, использующиеся в формсетах:  
  2249. <pre name="code" class="py">  
  2250.     def has_changed(self):  
  2251.            """  
  2252.            Returns True if data differs from initial.  
  2253.            """  
  2254.            if hasattr(self, 'is_change'):#проверяем, если наш динамический атрибут is_change  
  2255.                return True   
  2256.            else:  
  2257.                return bool(self.changed_data)  
  2258. </pre>  
  2259.   
  2260. Дальше ясно - создаем динамический новый атрибут для объекта формы в случае, если в формсетах две синхронные формы имеют разные зачения has_changed(), в итоге, они станут иметь одинаковые. Ес-но, это надо проделать до валидации формсетов.  
  2261. <div style="clear: both;"></div>  
  2262. </div>  
  2263. <div class="post-footer">  
  2264. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2265. Автор:  
  2266. <span class="fn">Vermus</span>  
  2267. </span>  
  2268. <span class="post-timestamp">  
  2269. время  
  2270. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/03/django.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-03-03T09:40:00+03:00">9:40:00 AM</abbr></a>  
  2271. </span>  
  2272. <span class="post-comment-link">  
  2273. <a class="comment-link" href="http://vermus.blogspot.com/2009/03/django.html#comment-form" onclick="">0  
  2274. коммент.</a>  
  2275. </span>  
  2276. <span class="post-icons">  
  2277. </span>  
  2278. <span class="post-backlinks post-comment-link">  
  2279. </span>  
  2280. </div>  
  2281. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2282. Ярлыки:  
  2283. <a href="http://vermus.blogspot.com/search/label/django" rel="tag">django</a>,  
  2284. <a href="http://vermus.blogspot.com/search/label/formset" rel="tag">formset</a>,  
  2285. <a href="http://vermus.blogspot.com/search/label/validation" rel="tag">validation</a>  
  2286. </span>  
  2287. </div>  
  2288. <div class="post-footer-line post-footer-line-3"></div>  
  2289. </div>  
  2290. </div>  
  2291. </div>  
  2292.   
  2293.           </div></div>  
  2294.           
  2295.   
  2296.           <div class="date-outer">  
  2297.           
  2298. <h2 class="date-header"><span>23 февраля 2009 г.</span></h2>  
  2299.   
  2300.           <div class="date-posts">  
  2301.           
  2302. <div class="post-outer">  
  2303. <div class="post hentry">  
  2304. <a name="2335669530575123922"></a>  
  2305. <h3 class="post-title entry-title">  
  2306. <a href="http://vermus.blogspot.com/2009/02/googlefightcom.html">googlefight.com</a>  
  2307. </h3>  
  2308. <div class="post-header-line-1"></div>  
  2309. <div class="post-body entry-content">  
  2310. Набрел на забавный сервис h<a href="http://www.googlefight.com/">ttp://www.googlefight.com/</a>, подсчитывает количество страниц результатов по данному запросу в гугле и выявляет победителя, например:  
  2311. <a href="http://www.googlefight.com/index.php?lang=en_GB&word1=linux&word2=windows">http://www.googlefight.com/index.php?lang=en_GB&word1=linux&word2=windows</a>  
  2312. <a href="http://www.googlefight.com/index.php?lang=en_GB&word1=linux&word2=freebsd">http://www.googlefight.com/index.php?lang=en_GB&word1=linux&word2=freebsd</a>  
  2313. <a href="http://www.googlefight.com/index.php?lang=en_GB&word1=jazz&word2=pop">http://www.googlefight.com/index.php?lang=en_GB&word1=jazz&word2=pop</a>  
  2314. <div style="clear: both;"></div>  
  2315. </div>  
  2316. <div class="post-footer">  
  2317. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2318. Автор:  
  2319. <span class="fn">Vermus</span>  
  2320. </span>  
  2321. <span class="post-timestamp">  
  2322. время  
  2323. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/googlefightcom.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-23T10:14:00+03:00">10:14:00 AM</abbr></a>  
  2324. </span>  
  2325. <span class="post-comment-link">  
  2326. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/googlefightcom.html#comment-form" onclick="">1 коммент.</a>  
  2327. </span>  
  2328. <span class="post-icons">  
  2329. </span>  
  2330. <span class="post-backlinks post-comment-link">  
  2331. </span>  
  2332. </div>  
  2333. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2334. Ярлыки:  
  2335. <a href="http://vermus.blogspot.com/search/label/googlefight.com" rel="tag">googlefight.com</a>  
  2336. </span>  
  2337. </div>  
  2338. <div class="post-footer-line post-footer-line-3"></div>  
  2339. </div>  
  2340. </div>  
  2341. </div>  
  2342.   
  2343.           </div></div>  
  2344.           
  2345.   
  2346.           <div class="date-outer">  
  2347.           
  2348. <h2 class="date-header"><span>22 февраля 2009 г.</span></h2>  
  2349.   
  2350.           <div class="date-posts">  
  2351.           
  2352. <div class="post-outer">  
  2353. <div class="post hentry">  
  2354. <a name="8935432640327418532"></a>  
  2355. <h3 class="post-title entry-title">  
  2356. <a href="http://vermus.blogspot.com/2009/02/bash-freebsd-62.html">bash во freebsd 6.2</a>  
  2357. </h3>  
  2358. <div class="post-header-line-1"></div>  
  2359. <div class="post-body entry-content">  
  2360. При установке серверов в freebsd скрипты запуска обычно копируются в /usr/local/etc/rc.d/ . Установив по необходимости систему именно freebsd и парочку серверов был озадачен тем, что скрипты-то не запускаются. То есть, ни ошибок, не предупреждений - ничего. Очень давнишний опыт настройки сервера помог мне вспомнить, что в freebsd по умолчанию стоит не bash, а как выяснилось csh.   
  2361.   
  2362. Посему, устанавливаем bash из портов, меняем редактор по умолчанию с vi на ee (лично мне он удобнее):  
  2363.   
  2364. <pre name="code" class="xml">  
  2365. # cd ~  
  2366. # ee .cshrc  
  2367. </pre>  
  2368. Изменяем setenv  EDITOR ee  
  2369.   
  2370. Перелогинились.  
  2371. <pre name="code" class="xml">  
  2372. # cd ~  
  2373. # ee .profile  
  2374. </pre>  
  2375. Добавляем  
  2376. export EDITOR=ee  
  2377.   
  2378. <pre name="code" class="xml">  
  2379. # chpass  
  2380. </pre>  
  2381. Меняем shell на /usr/local/bin/bash.  
  2382.   
  2383. Перезагружаемся.  
  2384.   
  2385. Кстати, я так и не понял, на чем скрипты. Но на bash у они таки заработали.  
  2386. <div style="clear: both;"></div>  
  2387. </div>  
  2388. <div class="post-footer">  
  2389. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2390. Автор:  
  2391. <span class="fn">Vermus</span>  
  2392. </span>  
  2393. <span class="post-timestamp">  
  2394. время  
  2395. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/bash-freebsd-62.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-22T22:45:00+03:00">10:45:00 PM</abbr></a>  
  2396. </span>  
  2397. <span class="post-comment-link">  
  2398. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/bash-freebsd-62.html#comment-form" onclick="">1 коммент.</a>  
  2399. </span>  
  2400. <span class="post-icons">  
  2401. </span>  
  2402. <span class="post-backlinks post-comment-link">  
  2403. </span>  
  2404. </div>  
  2405. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2406. Ярлыки:  
  2407. <a href="http://vermus.blogspot.com/search/label/bash" rel="tag">bash</a>,  
  2408. <a href="http://vermus.blogspot.com/search/label/csh" rel="tag">csh</a>,  
  2409. <a href="http://vermus.blogspot.com/search/label/freebsd" rel="tag">freebsd</a>  
  2410. </span>  
  2411. </div>  
  2412. <div class="post-footer-line post-footer-line-3"></div>  
  2413. </div>  
  2414. </div>  
  2415. </div>  
  2416.   
  2417.           </div></div>  
  2418.           
  2419.   
  2420.           <div class="date-outer">  
  2421.           
  2422. <h2 class="date-header"><span>14 февраля 2009 г.</span></h2>  
  2423.   
  2424.           <div class="date-posts">  
  2425.           
  2426. <div class="post-outer">  
  2427. <div class="post hentry">  
  2428. <a name="1483359326857965134"></a>  
  2429. <h3 class="post-title entry-title">  
  2430. <a href="http://vermus.blogspot.com/2009/02/subversion-debian-lenny.html">Запуск (установка и быстрая настройка) сервера subversion в debian lenny</a>  
  2431. </h3>  
  2432. <div class="post-header-line-1"></div>  
  2433. <div class="post-body entry-content">  
  2434. <a href="http://eightpence.com/a-subversion-initd-script-for-ubuntu-linux/">Устанавливаем сервер и создаем репозиторий</a>:  
  2435. <pre name="code" class="xml">  
  2436. # apt-get install subversion  
  2437. # svnadmin create /path/to/svnrepo/  
  2438. # groupadd subversion  
  2439. # chown -R root:subversion /path/to/svnrepo/  
  2440. # chmod -R ug+rw /path/to/svnrepo/  
  2441. </pre>  
  2442. Создаем файл:  
  2443. <pre name="code" class="xml">  
  2444. /etc/init.d# cat svnserver  
  2445. svnserve -d -r /path/to/svnrepo/  
  2446. /etc/init.d# chmod 755 svnserver  
  2447. </pre>  
  2448. Регистрируем в init.d для автозагрузки:  
  2449. <pre name="code" class="xml">  
  2450. # update-rc.d svnserver defaults  
  2451. </pre>  
  2452. Можно пользоваться:  
  2453. <pre name="code" class="xml">  
  2454. # svn co svn://localhost/path/to/svnrepo/  
  2455. </pre>  
  2456.   
  2457. ps. Помните, серверу svnserve не обязательно указывать существующий репозиторий. Путь, указанный в аргументе - только лишь указание серверу с какого места начинать просмотр директорий. Поэтому, путь может быть таким:  
  2458. <pre name="code" class="xml">  
  2459. /path/to/svnrepos  
  2460. </pre>  
  2461. в поддиректориях которого могут располагаться несколько репозиториев:  
  2462. <pre name="code" class="xml">  
  2463. /path/to/svnrepos/repo1  
  2464. /path/to/svnrepos/repo2  
  2465. ..  
  2466. /path/to/svnrepos/repoN  
  2467. </pre>  
  2468. <div style="clear: both;"></div>  
  2469. </div>  
  2470. <div class="post-footer">  
  2471. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2472. Автор:  
  2473. <span class="fn">Vermus</span>  
  2474. </span>  
  2475. <span class="post-timestamp">  
  2476. время  
  2477. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/subversion-debian-lenny.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-14T13:41:00+03:00">1:41:00 PM</abbr></a>  
  2478. </span>  
  2479. <span class="post-comment-link">  
  2480. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/subversion-debian-lenny.html#comment-form" onclick="">3  
  2481. коммент.</a>  
  2482. </span>  
  2483. <span class="post-icons">  
  2484. </span>  
  2485. <span class="post-backlinks post-comment-link">  
  2486. </span>  
  2487. </div>  
  2488. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2489. Ярлыки:  
  2490. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  2491. <a href="http://vermus.blogspot.com/search/label/subversion" rel="tag">subversion</a>,  
  2492. <a href="http://vermus.blogspot.com/search/label/svn" rel="tag">svn</a>  
  2493. </span>  
  2494. </div>  
  2495. <div class="post-footer-line post-footer-line-3"></div>  
  2496. </div>  
  2497. </div>  
  2498. </div>  
  2499.   
  2500.           </div></div>  
  2501.           
  2502.   
  2503.           <div class="date-outer">  
  2504.           
  2505. <h2 class="date-header"><span>12 февраля 2009 г.</span></h2>  
  2506.   
  2507.           <div class="date-posts">  
  2508.           
  2509. <div class="post-outer">  
  2510. <div class="post hentry">  
  2511. <a name="2720998434553902951"></a>  
  2512. <h3 class="post-title entry-title">  
  2513. <a href="http://vermus.blogspot.com/2009/02/trac-debian-lenny-postgresql.html">Моя установка (перемещение с windows) trac на debian lenny с базой postgresql</a>  
  2514. </h3>  
  2515. <div class="post-header-line-1"></div>  
  2516. <div class="post-body entry-content">  
  2517. <a href="http://www.debianhelp.co.uk/postgresql.htm">Устанавливаем базу postgresql</a> и дополнительные нужные пакеты:  
  2518. <pre name="code" class="xml">  
  2519. # apt-get install postgresql postgresql-client postgresql-contrib-8.3  
  2520. </pre>  
  2521. Считаем, что python уже стоит:  
  2522. <pre name="code" class="xml">  
  2523. # apt-get install python-psycopg2  
  2524. # apt-get install postgresql-plpython-8.3  
  2525. # apt-get install python-svn python-subversion  
  2526. </pre>  
  2527. Первый пакет предоставляет доступ к базе из python.  
  2528. Второй пакет устанавливает возможность <a href="http://blog.oxnull.net/2009/01/postgresql-i-plpythonu/#more-56">писать хранимые процедуры в БД на языке python</a>, которые используются в trac.  
  2529. Третий позволяет работать с svn репозиториями из python.  
  2530.   
  2531. Создаем базу данных для trac и пользователя (роль) для базы данных:  
  2532. <pre name="code" class="xml">  
  2533. # su postgres  
  2534. $ createuser tracuser -P  
  2535. Enter password for new role:  
  2536. Введите снова:  
  2537. Shall the new role be a superuser? (y/n) y  
  2538. </pre>  
  2539. Тут дописываем: /etc/postgresql/8.3/main/pg_hba.conf .  
  2540. <pre name="code" class="xml">  
  2541. local    trac        tracuser     md5  
  2542. </pre>  
  2543. Это надо для того, чтобы мы могли соединяться к базе через локальный сокет с помощью нашей роли в базе, а не через tcp/ip . По умолчанию все соединения через local идут для роли безопасности в конфигурационном файле indent sameuser - вкратце, необходимо наличия такого же системного пользователя.  
  2544.   
  2545. После изменения -  "$/etc/init.d/postgresql-8.3 restart" .  
  2546.   
  2547. Создаем базу данных:  
  2548. <pre name="code" class="xml">  
  2549. $ createdb -T template0 -h localhost -U tracuser -W trac  
  2550. </pre>  
  2551. Устанавливаем trac и создаем проект:  
  2552. <pre name="code" class="xml">  
  2553. # wget ftp://ftp.edgewall.com/pub/trac/Trac-0.11.2.1.tar.gz  
  2554. # tar zxfv Trac-0.11.2.1.tar.gz  
  2555. # cd Trac-0.11.2.1  
  2556. # python ./setup.py install  
  2557. # trac-admin /path/to/myproject initenv  
  2558. </pre>  
  2559. Это для создания нового проекта, для перемещения старого (в моем случае) копируем папку окружения, изменяем конфиг. Делаем <a href="http://www.postgresql.org/docs/8.1/static/backup.html">бекап базы</a> данных.  
  2560.   
  2561. Например с windows:  
  2562. <pre name="code" class="xml">  
  2563. c:\Program Files\PostgreSQL\8.3\bin>pg_dump -U admin trac > tracplain.dump  
  2564. </pre>  
  2565. Восстанавливаем на lenny созданную базу (createlang plpythonu pg_dump сам предусмотрительно прописывает, для этого мы сделали пользователя суперюзером):  
  2566. <pre name="code" class="shell">  
  2567. # psql -U tracuser -W -f trac.plain trac  
  2568. </pre>  
  2569. Устанавливаем trac через <a href="http://code.google.com/p/modwsgi/">mod_wsgi</a>  
  2570. <pre name="code" class="xml">  
  2571. # apt-get install libapache2-mod-wsgi  
  2572. </pre>  
  2573. Прописываем в конфиге apache2  
  2574. <pre name="code" class="php">  
  2575. WSGIScriptAlias /trac /path/to/trac/mysite.wsgi  
  2576. <directory "="" path="" to="" trac="">  
  2577.  WSGIApplicationGroup %{GLOBAL}  
  2578.  AuthType Basic  
  2579.  AuthName "Trac"  
  2580.  AuthUserFile /homr/svn/passwd  
  2581.  Require valid-user  
  2582.  Order deny,allow  
  2583.  Allow from all  
  2584. </directory>  
  2585. </pre>  
  2586. Файл с пользователями создаем с помощью passwd.  
  2587.   
  2588. Содержание <a href="http://trac.edgewall.org/wiki/TracModWSGI">файла /path/to/trac/mysite.wsgi</a>:  
  2589. <pre name="code" class="xml">  
  2590. # cat mysite.wsgi  
  2591. import os  
  2592.   
  2593. os.environ['TRAC_ENV'] = '/path/to/trac/'  
  2594. os.environ['PYTHON_EGG_CACHE'] = '/path/to/trac/eggs'  
  2595.   
  2596. import trac.web.main  
  2597. application = trac.web.main.dispatch_request  
  2598.   
  2599. import site  
  2600. site.addsitedir('/usr/lib/python2.5/site-packages')  
  2601. </pre>  
  2602. Ресинхронизируем окружение:  
  2603. <pre name="code" class="xml">  
  2604. # trac-admin /path/to/trac/ resync  
  2605. </pre>  
  2606. Осталось настроить права для каталога окружения проекта и все должно работать.  
  2607. Также можно урезать права пользователю tracuser с помощью <a href="http://www.postgresql.org/docs/8.1/interactive/sql-alterrole.html">ALTER ROLE</a>  
  2608.   
  2609. И напоследок, <a href="http://linuxwave.blogspot.com/2007/10/postgresql-quickstart.html">Postgresql quickstart</a>:  
  2610.   
  2611. 1. To start postgres  
  2612. # /etc/init.d/postgresql start  
  2613. 2. To stop postgres  
  2614. # /etc/init.d/postgresql stop  
  2615. 3. To start using postgres, change to user postgres  
  2616. $ su - postgres  
  2617. 4. To create new database  
  2618. $ createdb dbname  
  2619. 5. To delete database  
  2620. $ dropdb dbname  
  2621. 6. To access database  
  2622. $ psql dbname  
  2623. 7. To dump database (backup)  
  2624. $ pg_dump dbname > backup.out  
  2625. 8. Reload db from file  
  2626. $ psql -d dbname -f db.out  
  2627. 9. To dump all database to file  
  2628. $ pg_dumpall > dumpall.sql  
  2629. 10. Reload all from file  
  2630. $ psql -f dumpall.sql  
  2631. 11. List database  
  2632. $ psql -l  
  2633. 12. Clean all database  
  2634. $ vacuumdb --quiet --all  
  2635.   
  2636. Commands inside psql (PostgreSQL interactive terminal)  
  2637.   
  2638. 1. Access psql  
  2639. # psql  
  2640. 2. Get help about commands  
  2641. # \h  
  2642. 3. Quit psql  
  2643. # \q  
  2644. 4. Import from file  
  2645. # \i input.sql  
  2646. 5. Show databases  
  2647. # \l  
  2648. 6. Show tables  
  2649. # \dt  
  2650. 7. Show users  
  2651. # \du  
  2652. 8. Connect to database  
  2653. # \c dbname  
  2654. 9. Change user password  
  2655. # \c template1  
  2656. # ALTER USER postgres with password 'new_password';  
  2657. 10. Clean database  
  2658. # VACUUM FULL;  
  2659. 11. Help on syntax command  
  2660. # \h SYNTAXNAME  
  2661. <div style="clear: both;"></div>  
  2662. </div>  
  2663. <div class="post-footer">  
  2664. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2665. Автор:  
  2666. <span class="fn">Vermus</span>  
  2667. </span>  
  2668. <span class="post-timestamp">  
  2669. время  
  2670. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/trac-debian-lenny-postgresql.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-12T17:21:00+03:00">5:21:00 PM</abbr></a>  
  2671. </span>  
  2672. <span class="post-comment-link">  
  2673. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/trac-debian-lenny-postgresql.html#comment-form" onclick="">0  
  2674. коммент.</a>  
  2675. </span>  
  2676. <span class="post-icons">  
  2677. </span>  
  2678. <span class="post-backlinks post-comment-link">  
  2679. </span>  
  2680. </div>  
  2681. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2682. Ярлыки:  
  2683. <a href="http://vermus.blogspot.com/search/label/apache2" rel="tag">apache2</a>,  
  2684. <a href="http://vermus.blogspot.com/search/label/debian" rel="tag">debian</a>,  
  2685. <a href="http://vermus.blogspot.com/search/label/lenny" rel="tag">lenny</a>,  
  2686. <a href="http://vermus.blogspot.com/search/label/postgresql" rel="tag">postgresql</a>,  
  2687. <a href="http://vermus.blogspot.com/search/label/python" rel="tag">python</a>,  
  2688. <a href="http://vermus.blogspot.com/search/label/svn" rel="tag">svn</a>,  
  2689. <a href="http://vermus.blogspot.com/search/label/trac" rel="tag">trac</a>,  
  2690. <a href="http://vermus.blogspot.com/search/label/wsgi" rel="tag">wsgi</a>  
  2691. </span>  
  2692. </div>  
  2693. <div class="post-footer-line post-footer-line-3"></div>  
  2694. </div>  
  2695. </div>  
  2696. </div>  
  2697.   
  2698.           </div></div>  
  2699.           
  2700.   
  2701.           <div class="date-outer">  
  2702.           
  2703. <h2 class="date-header"><span>9 февраля 2009 г.</span></h2>  
  2704.   
  2705.           <div class="date-posts">  
  2706.           
  2707. <div class="post-outer">  
  2708. <div class="post hentry">  
  2709. <a name="1519362192640706987"></a>  
  2710. <h3 class="post-title entry-title">  
  2711. <a href="http://vermus.blogspot.com/2009/02/blog-post_09.html">Александр Блок</a>  
  2712. </h3>  
  2713. <div class="post-header-line-1"></div>  
  2714. <div class="post-body entry-content">  
  2715. <span style="font-weight:bold;">Александр Блок</span>  
  2716.   
  2717. Ночь, улица, фонарь, аптека,  
  2718. Бессмысленный и тусклый свет.  
  2719. Живи еще хоть четверть века -  
  2720. Все будет так. Исхода нет.  
  2721.    
  2722. Умрешь - начнешь опять сначала,  
  2723. И повторится все, как встарь,  
  2724. Ночь, ледяная рябь канала,  
  2725. Аптека, улица, фонарь.  
  2726. <div style="clear: both;"></div>  
  2727. </div>  
  2728. <div class="post-footer">  
  2729. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2730. Автор:  
  2731. <span class="fn">Vermus</span>  
  2732. </span>  
  2733. <span class="post-timestamp">  
  2734. время  
  2735. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/blog-post_09.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-09T01:22:00+03:00">1:22:00 AM</abbr></a>  
  2736. </span>  
  2737. <span class="post-comment-link">  
  2738. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/blog-post_09.html#comment-form" onclick="">0  
  2739. коммент.</a>  
  2740. </span>  
  2741. <span class="post-icons">  
  2742. </span>  
  2743. <span class="post-backlinks post-comment-link">  
  2744. </span>  
  2745. </div>  
  2746. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2747. Ярлыки:  
  2748. <a href="http://vermus.blogspot.com/search/label/%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D0%BA%D0%B0" rel="tag">классика</a>,  
  2749. <a href="http://vermus.blogspot.com/search/label/%D0%BF%D1%80%D0%BE%D0%B7%D0%B0" rel="tag">проза</a>,  
  2750. <a href="http://vermus.blogspot.com/search/label/%D1%81%D0%BC%D1%8B%D1%81%D0%BB%20%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8" rel="tag">смысл жизни</a>  
  2751. </span>  
  2752. </div>  
  2753. <div class="post-footer-line post-footer-line-3"></div>  
  2754. </div>  
  2755. </div>  
  2756. </div>  
  2757.   
  2758.           </div></div>  
  2759.           
  2760.   
  2761.           <div class="date-outer">  
  2762.           
  2763. <h2 class="date-header"><span>1 февраля 2009 г.</span></h2>  
  2764.   
  2765.           <div class="date-posts">  
  2766.           
  2767. <div class="post-outer">  
  2768. <div class="post hentry">  
  2769. <a name="1788700385446529907"></a>  
  2770. <h3 class="post-title entry-title">  
  2771. <a href="http://vermus.blogspot.com/2009/02/blog-post.html">"Серверная" на балконе</a>  
  2772. </h3>  
  2773. <div class="post-header-line-1"></div>  
  2774. <div class="post-body entry-content">  
  2775. Решил я обезопасить и сделать более комфортным свое жилище. Обезопасить - это потому, что у меня инет канал обычно не пустует, зачем ему зря пропадать, как говориться, а меня иногда не бывает дома - а комп работает - я случаев таких не знаю, но есть вероятность воспламенения компьютера. Более комфортным - это понятно - нет ночного гула.  
  2776.   
  2777. Начнем с железной части.  
  2778.   
  2779. Так как дело происходит зимой, то главный вопрос, который возникает - а выдержит ли холода система.  
  2780. На одном форуме доказывал человек о стойкости железа к морозам, приводя в пример системы моментальных платежей, аргументируя это тем, что в них находятся обычные комплектующие.   
  2781. Я решил проверить это. Сначала я поставил системник (pentium 1200 с 512 Mb DIMM) просто голым, проведя предварительно питание и сеть, больше ничего не надо. Проработал ночь при 0 градусов на улице (балког застеклен, не не утеплен), с утра отвалился, пинги не шли, но все крутилось. Думал - холодно ему, надо сделать ящик, да и от внешнего воздействия не помешает. Сделали ящик, попутно устанавливая софт, все это заняло около недели.  
  2782.   
  2783. О софте.  
  2784.   
  2785. Поставлен debian etch - единственный дистрибутив, который у меня был 32 битным. Иксы ставить не стал, ибо незачем =). Настроил sshd, samba (подключен сетевой диск с шарой к винде), для закачек поставлен дополнительный винт 160 Гб, который отформатирован в файловую систему reiser fs; apache, установлен rtorrent, последний из svn, как написано <a href="http://www.wtorrent-project.org/trac/wiki/DebianInstall">тут</a>, но wtorrent ставить не стал - точнее поставил, но отказался, нашел более интересную веб морду - называется <a href="http://wl500g.info/showthread.php?t=14256">ruTorrent</a>, практически аналог utorrenta, но в вебе, почти все на яваскрипте, ниже скрин.  
  2786.   
  2787. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQlTQWxCnCAaPAoCNwTK13_6Azd6Wdl5Ja1WGn42te5QYXVLplFWcKm9rwBZVEhgOM1qwdovqJXvlhU9KDcZU38vblKRkvegJ8QCM7JY4zIm2k43WCeSroziwGauq79hUc3y0ol_V8/s1600-h/rtorrent.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5297871420964895010" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQlTQWxCnCAaPAoCNwTK13_6Azd6Wdl5Ja1WGn42te5QYXVLplFWcKm9rwBZVEhgOM1qwdovqJXvlhU9KDcZU38vblKRkvegJ8QCM7JY4zIm2k43WCeSroziwGauq79hUc3y0ol_V8/s320/rtorrent.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 226px;"></a>  
  2788.   
  2789. Текущая версия ruTorrent - 1.6, на скрине 0.1. Единственный момент - пришлось скачать по ссылке файлик settings.txt и поместить его в папку settings.  
  2790. Веб мордочка очень понравилась. Единственный минус, правда это минус самого rtorrent - нет очереди закачки. Но есть приоритеты и ограничения глобальных слотов скачки. В принципе, это тоже самое.  
  2791.   
  2792. Вернемся к железной части. Когда все было готово, ящик покрашен и высушен, пришла пора проверить его в деле. Вот он собственно сам:  
  2793.   
  2794. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibPAzAC0a0cP-oXFcLkxBYY-T0k8aTHoF2swM7AtT8meFaYE0b9cGRM8aD1iezNWo2AiGXZ5L3qoX2gjMPd6par_uLCLjKopRCsOmvVfOauokvHiLBCYBbAkiTwQDFOy08x3TFtLOF/s1600-h/1.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5297873814681895490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibPAzAC0a0cP-oXFcLkxBYY-T0k8aTHoF2swM7AtT8meFaYE0b9cGRM8aD1iezNWo2AiGXZ5L3qoX2gjMPd6par_uLCLjKopRCsOmvVfOauokvHiLBCYBbAkiTwQDFOy08x3TFtLOF/s400/1.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;"></a>  
  2795.   
  2796. А вот как устроена связь:  
  2797.   
  2798. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtNDq_1iUsru4iKPl_uCLDAeW8oaPRIRDc4w0kVZeIanIEKd2oHFZEhZkoOzAlTy2As73cWCAwMk6jtXPbN9ejWchWGYPgGhbUc_vuLjsDIR7D-QIh8IdCfuxa_kscMqwiptZvIK_f/s1600-h/2.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5297874669233225362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtNDq_1iUsru4iKPl_uCLDAeW8oaPRIRDc4w0kVZeIanIEKd2oHFZEhZkoOzAlTy2As73cWCAwMk6jtXPbN9ejWchWGYPgGhbUc_vuLjsDIR7D-QIh8IdCfuxa_kscMqwiptZvIK_f/s400/2.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;"></a>  
  2799.   
  2800. Процесс размещения системы в стойке =) Естественно, комп был прогрет дома и запущен сразу.  
  2801.   
  2802. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKZVJDngkzFgiG78Yhjd7zlbH1M_sZkRldOTQ5bajxB4e7gNPksN51G_Ry_2bTWtHCeUVWiKGh9XYZSCRKkZsf9r4oV_foDVi50I2Vpt7q3JtPpE3Viz-7_MfAH-d0PLASIBAsZ-yu/s1600-h/3.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5297875600745719698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKZVJDngkzFgiG78Yhjd7zlbH1M_sZkRldOTQ5bajxB4e7gNPksN51G_Ry_2bTWtHCeUVWiKGh9XYZSCRKkZsf9r4oV_foDVi50I2Vpt7q3JtPpE3Viz-7_MfAH-d0PLASIBAsZ-yu/s400/3.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;"></a>  
  2803.   
  2804. А вот так он выглядит в боевом состоянии:  
  2805.   
  2806. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAavCz4i8tnORY9kSPM05CC2BfM8Cw3SAfPBvBXmeBjPLGg7PGUIrz8JRDm6DRNgMVIxnrmLw82c2NFZbLuhY9W3mp4RvSzmPPZgac1yU2sKAB1uvCCRhuIiatGHFgb2ZzSD-t7hX3/s1600-h/5.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5297876057490977218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAavCz4i8tnORY9kSPM05CC2BfM8Cw3SAfPBvBXmeBjPLGg7PGUIrz8JRDm6DRNgMVIxnrmLw82c2NFZbLuhY9W3mp4RvSzmPPZgac1yU2sKAB1uvCCRhuIiatGHFgb2ZzSD-t7hX3/s400/5.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;"></a>  
  2807.   
  2808. Так вот, первый заход оказался неудачным - те же симптомы, что и при первой пробе, но быстрее, ибо температура на улице минус 10 градусов - пинг пропадает, хотя по звуку все крутится.  Проработал полчаса, вот температура, снятая сенсорами каждые 5-10 минут:  
  2809.   
  2810. M/B Temp:    +17°C  (high =  +105°C, hyst =    +0°C)  
  2811. CPU Temp:  +36.0°C  (high =  +100°C, hyst =   +92°C)  
  2812.   
  2813. M/B Temp:    +14°C  (high =  +105°C, hyst =    +0°C)  
  2814. CPU Temp:  +29.0°C  (high =  +100°C, hyst =   +92°C)  
  2815.   
  2816. M/B Temp:    +13°C  (high =  +105°C, hyst =    +0°C)  
  2817. CPU Temp:  +28.0°C  (high =  +100°C, hyst =   +92°C)  
  2818.   
  2819. M/B Temp:    +13°C  (high =  +105°C, hyst =    +0°C)  
  2820. CPU Temp:  +27.0°C  (high =  +100°C, hyst =   +92°C)  
  2821.   
  2822. Дальше он не отвечал на запросы.  
  2823. Вернул системник назад - открыл - потрогал руками самые холодные места - сетевая была самой холодной. Это было какая-то сетевушка под названием complex, очевидно качество не очень. Решил заменить, нашел acorp с чипом realtek. Провел ту же процедуру помещения в стойку =). Вечером похолодало до -12 градусов. ПРоцесс снятия температуры:   
  2824.   
  2825. M/B Temp:    +14°C  (high =  +105°C, hyst =    +0°C)  
  2826. CPU Temp:  +34.0°C  (high =  +100°C, hyst =   +92°C)  
  2827.   
  2828. M/B Temp:    +13°C  (high =  +105°C, hyst =    +0°C)  
  2829. CPU Temp:  +27.0°C  (high =  +100°C, hyst =   +92°C)  
  2830.   
  2831. M/B Temp:    +12°C  (high =  +105°C, hyst =    +0°C)  
  2832. CPU Temp:  +26.0°C  (high =  +100°C, hyst =   +92°C)  
  2833.   
  2834. M/B Temp:    +11°C  (high =  +105°C, hyst =    +0°C)  
  2835. CPU Temp:  +25.0°C  (high =  +100°C, hyst =   +92°C)  
  2836.   
  2837. M/B Temp:    +11°C  (high =  +105°C, hyst =    +0°C)  
  2838. CPU Temp:  +26.0°C  (high =  +100°C, hyst =   +92°C)  
  2839.   
  2840. M/B Temp:    +11°C  (high =  +105°C, hyst =    +0°C)  
  2841. CPU Temp:  +25.0°C  (high =  +100°C, hyst =   +92°C)  
  2842.   
  2843. M/B Temp:    +10°C  (high =  +105°C, hyst =    +0°C)  
  2844. CPU Temp:  +25.0°C  (high =  +100°C, hyst =   +92°C)  
  2845.   
  2846. M/B Temp:    +10°C  (high =  +105°C, hyst =    +0°C)  
  2847. CPU Temp:  +27.0°C  (high =  +100°C, hyst =   +92°C)  
  2848.   
  2849. M/B Temp:    +10°C  (high =  +105°C, hyst =    +0°C)  
  2850. CPU Temp:  +23.0°C  (high =  +100°C, hyst =   +92°C)  
  2851.   
  2852. Как видно, гораздо более низкие температуры и все в порядке, процессор еще остывает, но на материнке установилась стабильная температура.  
  2853. Клиент торрента работает, посмотрим, как проживет система ночь (довольно холодную, так как половина января температура была не больше -5 градусов), но то, что слабым местом в предыдущей конфигурации стала сетевая карта (кстати в теплых условиях работающая стабильно), это мы выяснили, то есть, для низких температур не всякое железо подойдет.  
  2854. <div style="clear: both;"></div>  
  2855. </div>  
  2856. <div class="post-footer">  
  2857. <div class="post-footer-line post-footer-line-1"><span class="post-author vcard">  
  2858. Автор:  
  2859. <span class="fn">Vermus</span>  
  2860. </span>  
  2861. <span class="post-timestamp">  
  2862. время  
  2863. <a class="timestamp-link" href="http://vermus.blogspot.com/2009/02/blog-post.html" rel="bookmark" title="permanent link"><abbr class="published" title="2009-02-01T19:03:00+03:00">7:03:00 PM</abbr></a>  
  2864. </span>  
  2865. <span class="post-comment-link">  
  2866. <a class="comment-link" href="http://vermus.blogspot.com/2009/02/blog-post.html#comment-form" onclick="">3  
  2867. коммент.</a>  
  2868. </span>  
  2869. <span class="post-icons">  
  2870. </span>  
  2871. <span class="post-backlinks post-comment-link">  
  2872. </span>  
  2873. </div>  
  2874. <div class="post-footer-line post-footer-line-2"><span class="post-labels">  
  2875. Ярлыки:  
  2876. <a href="http://vermus.blogspot.com/search/label/%D0%B3%D0%B8%D0%BA%D1%81%D1%82%D0%B2%D0%BE" rel="tag">гикство</a>,  
  2877. <a href="http://vermus.blogspot.com/search/label/%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D1%8B" rel="tag">компьютеры</a>,  
  2878. <a href="http://vermus.blogspot.com/search/label/%D0%BE%D1%87%D1%83%D0%BC%D0%B5%D0%BB%D1%8B%D0%B5%20%D1%80%D1%83%D1%87%D0%BA%D0%B8" rel="tag">очумелые ручки</a>,  
  2879. <a href="http://vermus.blogspot.com/search/label/rtorrent" rel="tag">rtorrent</a>,  
  2880. <a href="http://vermus.blogspot.com/search/label/rutorrent" rel="tag">rutorrent</a>  
  2881. </span>  
  2882. </div>  
  2883. <div class="post-footer-line post-footer-line-3"></div>  
  2884. </div>  
  2885. </div>  
  2886. </div>  
  2887.   
  2888.         </div></div>  
  2889.         
  2890.   
  2891. <div class="blog-pager" id="blog-pager">  
  2892. <span id="blog-pager-newer-link">  
  2893. <a class="blog-pager-newer-link" href="http://vermus.blogspot.com/search?updated-max=2010-02-15T15:02:00%2B03:00&max-results=7&reverse-paginate=true" id="Blog1_blog-pager-newer-link" title="Следующие">Следующие</a>  
  2894. </span>  
  2895. <span id="blog-pager-older-link">  
  2896. <a class="blog-pager-older-link" href="http://vermus.blogspot.com/search?updated-max=2009-02-01T19:03:00%2B03:00&max-results=7" id="Blog1_blog-pager-older-link" title="Предыдущие">Предыдущие</a>  
  2897. </span>  
  2898. <a class="home-link" href="http://vermus.blogspot.com/">Главная страница</a>  
  2899. </div>  
  2900. <div class="clear"></div>  
  2901. <div class="blog-feeds">  
  2902. <div class="feed-links">  
  2903. Подписаться на:  
  2904. <a class="feed-link" href="http://vermus.blogspot.com/feeds/posts/default" target="_blank" type="application/atom+xml">Сообщения (Atom)</a>  
  2905. </div>  
  2906. </div>  
  2907.   
  2908.   
  2909. <div id="sidebar-wrapper">  
  2910. <div class="sidebar section" id="sidebar"><div class="widget HTML" data-version="1" id="HTML7">  
  2911. <div class="widget-content">  
  2912. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>  
  2913. <script type="text/javascript" charset="utf-8" src="http://dl.dropboxusercontent.com/s/gnhdeg1bt5gih4v/date.to_relative_time.jquery.js"></script>  
  2914. <script type="text/javascript" charset="utf-8" src="http://dl.dropboxusercontent.com/s/g87i4ss1odc8jeh/date.extensions.js"></script>  
  2915.    
  2916. <script>  
  2917. $(function(){  
  2918.   
  2919.          
  2920.   
  2921.    $.get("https://dl.dropboxusercontent.com/sh/abo4xjbtappf8fp/2lHB9SZoe2/out.html", function(data) {  
  2922.       $("#nowPlayingInfo").html(data);  
  2923.   
  2924.  var now = new Date(); //"now"  
  2925.         var play_Time = new Date(play_Time_str); // Date/Time formatting with %stamps as per AMIP functions and variables. (more info on their website)  
  2926.         var diff = Math.abs(now-play_Time); //difference between the current time and the time the song was changed or started playing.  
  2927.         var diff_minutes = Math.round(diff / (1000*60)); //difference in minutes.  
  2928.   
  2929.         $("#now_playing_txt").text(new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes() - diff_minutes).toString());  
  2930.          $("span.rel_").toRelativeTime();  
  2931.   
  2932.    });  
  2933. });  
  2934. </script>  
  2935.   
  2936. <div class="box">  
  2937. <p>♫ <span id="nowPlayingInfo"></span><span style="font-size:80%;"><span class="rel_" id="now_playing_txt"></span></span></p>  
  2938. </div>  
  2939. </div>  
  2940. <div class="clear"></div>  
  2941. </div><div class="widget AdSense" data-version="1" id="AdSense2">  
  2942. <div class="widget-content">  
  2943. <script type="text/javascript"><!--  
  2944. google_ad_client="pub-9773417036288474";  
  2945. google_ad_host="pub-1556223355139109";  
  2946. google_alternate_ad_url="http://img2.blogblog.com/img/blogger_ad.html";  
  2947. google_ad_width=300;  
  2948. google_ad_height=250;  
  2949. google_ad_format="300x250_as";  
  2950. google_ad_type="text_image";  
  2951. google_ad_host_channel="0001+S0009+L0001";  
  2952. google_color_border="FFFFFF";  
  2953. google_color_bg="FFFFFF";  
  2954. google_color_link="474B4E";  
  2955. google_color_url="C4663B";  
  2956. google_color_text="7B8186";  
  2957. //--></script>  
  2958. <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">  
  2959. </script>  
  2960. <div class="clear"></div>  
  2961. </div>  
  2962. </div><div class="widget HTML" data-version="1" id="HTML4">  
  2963. <div class="widget-content">  
  2964. <div align="center">  
  2965. <div align="left" style="border:1px solid #CCC; width:220px; background-color:#F4F9FC; padding-top: 3px;"><a href="http://rufact.org/" target="blank"><img src="http://rufact.org/media/static/i/logo.gif" width="220px" alt="Факты о России" border="0"></a><script language="Javascript" src="http://rufact.org/informer/jsinform/"></script></div></div>  
  2966. </div>  
  2967. <div class="clear"></div>  
  2968. </div><div class="widget Followers" data-version="1" id="Followers1">  
  2969. <h2 class="title">Постоянные читатели</h2>  
  2970. <div class="widget-content">  
  2971. <div id="Followers1-wrapper">  
  2972. <div style="margin-right:2px;">  
  2973. <div><script type="text/javascript" src="https://apis.google.com/js/platform.js"></script>  
  2974. <div id="followers-iframe-container"></div>  
  2975. <script type="text/javascript">  
  2976.     window.followersIframe = null;  
  2977.     function followersIframeOpen(url) {  
  2978.       gapi.load("gapi.iframes", function() {  
  2979.         if (gapi.iframes && gapi.iframes.getContext) {  
  2980.           window.followersIframe = gapi.iframes.getContext().openChild({  
  2981.             url: url,  
  2982.             where: document.getElementById("followers-iframe-container"),  
  2983.             messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,  
  2984.             messageHandlers: {  
  2985.               '_ready': function(obj) {  
  2986.                 window.followersIframe.getIframeEl().height = obj.height;  
  2987.               },  
  2988.               'reset': function() {  
  2989.                 window.followersIframe.close();  
  2990.                 followersIframeOpen("https://www.blogger.com/followers/frame/4797167376881538347?colors\x3dCgt0cmFuc3BhcmVudBILdHJhbnNwYXJlbnQaByM0NzRCNEUiByNERDY1OTkqByNGRkZGRkYyByNDNDY2M0I6ByM0NzRCNEVCByNERDY1OTlKByMwMDAwMDBSByNERDY1OTlaC3RyYW5zcGFyZW50\x26pageSize\x3d21\x26hl\x3dru\x26origin\x3dhttp://vermus.blogspot.com");  
  2991.               },  
  2992.               'open': function(url) {  
  2993.                 window.followersIframe.close();  
  2994.                 followersIframeOpen(url);  
  2995.               }  
  2996.             }  
  2997.           });  
  2998.         }  
  2999.       });  
  3000.     }  
  3001.     followersIframeOpen("https://www.blogger.com/followers/frame/4797167376881538347?colors\x3dCgt0cmFuc3BhcmVudBILdHJhbnNwYXJlbnQaByM0NzRCNEUiByNERDY1OTkqByNGRkZGRkYyByNDNDY2M0I6ByM0NzRCNEVCByNERDY1OTlKByMwMDAwMDBSByNERDY1OTlaC3RyYW5zcGFyZW50\x26pageSize\x3d21\x26hl\x3dru\x26origin\x3dhttp://vermus.blogspot.com");  
  3002.   </script></div>  
  3003. </div>  
  3004. </div>  
  3005. <div class="clear"></div>  
  3006. </div>  
  3007. </div><div class="widget HTML" data-version="1" id="HTML5">  
  3008. <h2 class="title">RSS подписка</h2>  
  3009. <div class="widget-content">  
  3010. <p><a href="http://feeds.feedburner.com/blogspot/vermus"><img width="88" style="border:0" alt="" src="http://feeds.feedburner.com/~fc/blogspot/vermus?bg=99CCFF&fg=444444&anim=0" height="26"></a></p>  
  3011. </div>  
  3012. <div class="clear"></div>  
  3013. </div><div class="widget LinkList" data-version="1" id="LinkList1">  
  3014. <h2>Ссылки</h2>  
  3015. <div class="widget-content">  
  3016. <ul>  
  3017. <li><a href="http://rufact.org">Факты о России</a></li>  
  3018. <li><a href="http://vermusic.ru/">Верная музыка!</a></li>  
  3019. </ul>  
  3020. <div class="clear"></div>  
  3021. </div>  
  3022. </div><div class="widget HTML" data-version="1" id="HTML3">  
  3023. <h2 class="title">Последние комментарии</h2>  
  3024. <div class="widget-content">  
  3025. <script type="text/javascript">  
  3026. //<![CDATA[  
  3027. // Recent Comments Settings  
  3028.  var    
  3029.  numComments = 10,  
  3030. showAvatar       = true,  
  3031. avatarSize           = 27,  
  3032.  roundAvatar     = false,  
  3033. characters          = 100,  
  3034. showMorelink  = true,  
  3035. moreLinktext    = "Дальше »",  
  3036. defaultAvatar   = "http://www.gravatar.com/avatar/?d=mm",           
  3037. hideCredits        = true;//]]></script><style type="text/css">    ul.bdlab_recent_comments{list-style:none;margin:0;padding:0}.bdlab_recent_comments li{background:none !important;margin:0 0 2px !important;padding:0 0 3px 0 !important;display:block;clear:both;overflow:hidden;list-style:none}.bdlab_recent_comments li .avatarImage{-webkit-box-shadow:0 1px 1px #000;-moz-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc;float:left;margin:0 6px 0 0;position:relative;overflow:hidden}.avatarRound{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.bdlab_recent_comments li img{padding:1px;position:relative;overflow:hidden;display:block}.bdlab_recent_comments li span{margin-top:4px;color:#534D4E;display:block;font-size:12px;font-style:italic;line-height:1.4}</style> <script type="text/javascript">  
  3038. var _0xd2d1=["\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x72\x61\x76\x61\x74\x61\x72\x2E\x63\x6F\x6D\x2F\x61\x76\x61\x74\x61\x72\x2F\x3F\x64\x3D\x6D\x6D","\x20\x4D\x6F\x72\x65\x20\x26\x72\x61\x71\x75\x6F\x3B","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x3C\x75\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x62\x64\x6C\x61\x62\x5F\x72\x65\x63\x65\x6E\x74\x5F\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x22\x3E","\x6C\x65\x6E\x67\x74\x68","\x65\x6E\x74\x72\x79","\x66\x65\x65\x64","\x3C\x6C\x69\x3E","\x6C\x69\x6E\x6B","\x72\x65\x6C","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65","\x68\x72\x65\x66","\x24\x74","\x6E\x61\x6D\x65","\x61\x75\x74\x68\x6F\x72","\x73\x72\x63","\x67\x64\x24\x69\x6D\x61\x67\x65","\x2F\x73\x31\x36\x30\x30\x2F","\x69\x6E\x64\x65\x78\x4F\x66","\x2F\x73","\x2D\x63\x2F","\x72\x65\x70\x6C\x61\x63\x65","\x2F\x73\x32\x32\x30\x2F","\x2F\x73\x35\x31\x32\x2D\x63\x2F","\x68\x74\x74\x70\x3A","\x62\x6C\x6F\x67\x62\x6C\x6F\x67\x2E\x63\x6F\x6D\x2F\x69\x6D\x67\x2F\x62\x31\x36\x2D\x72\x6F\x75\x6E\x64\x65\x64\x2E\x67\x69\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x32\x2E\x62\x70\x2E\x62\x6C\x6F\x67\x73\x70\x6F\x74\x2E\x63\x6F\x6D\x2F\x2D\x5F\x4F\x4B\x48\x44\x7A\x57\x72\x75\x36\x49\x2F\x55\x62\x59\x72\x39\x6A\x53\x76\x52\x6F\x49\x2F\x41\x41\x41\x41\x41\x41\x41\x41\x42\x44\x45\x2F\x48\x63\x52\x50\x4A\x57\x41\x61\x41\x54\x34\x2F\x73","\x2F\x32\x34\x77\x6F\x72\x6B\x5F\x62\x6C\x6F\x67\x67\x65\x72\x5F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x6C\x6F\x67\x62\x6C\x6F\x67\x2E\x63\x6F\x6D\x2F\x69\x6D\x67\x2F\x6F\x70\x65\x6E\x69\x64\x31\x36\x2D\x72\x6F\x75\x6E\x64\x65\x64\x2E\x67\x69\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x31\x2E\x62\x70\x2E\x62\x6C\x6F\x67\x73\x70\x6F\x74\x2E\x63\x6F\x6D\x2F\x2D\x44\x37\x70\x4E\x66\x52\x35\x65\x4E\x6C\x38\x2F\x55\x62\x59\x73\x5A\x74\x34\x47\x37\x48\x49\x2F\x41\x41\x41\x41\x41\x41\x41\x41\x42\x44\x4D\x2F\x49\x41\x31\x7A\x50\x2D\x75\x35\x73\x53\x49\x2F\x73","\x2F\x32\x34\x77\x6F\x72\x6B\x5F\x6F\x70\x65\x6E\x69\x64\x5F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x6C\x6F\x67\x62\x6C\x6F\x67\x2E\x63\x6F\x6D\x2F\x69\x6D\x67\x2F\x62\x6C\x61\x6E\x6B\x2E\x67\x69\x66","\x67\x72\x61\x76\x61\x74\x61\x72\x2E\x63\x6F\x6D","\x26\x73\x3D","\x61\x76\x61\x74\x61\x72\x52\x6F\x75\x6E\x64","","\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x61\x76\x61\x74\x61\x72\x49\x6D\x61\x67\x65\x20","\x22\x3E\x3C\x69\x6D\x67\x20\x63\x6C\x61\x73\x73\x3D\x22","\x22\x20\x73\x72\x63\x3D\x22","\x22\x20\x61\x6C\x74\x3D\x22","\x22\x20\x77\x69\x64\x74\x68\x3D\x22","\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22","\x22\x2F\x3E\x3C\x2F\x64\x69\x76\x3E","\x3C\x61\x20\x68\x72\x65\x66\x3D\x22","\x22\x3E","\x3C\x2F\x61\x3E","\x63\x6F\x6E\x74\x65\x6E\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x26\x68\x65\x6C\x6C\x69\x70\x3B","\x3C\x73\x70\x61\x6E\x3E","\x3C\x2F\x73\x70\x61\x6E\x3E","\x3C\x2F\x6C\x69\x3E","\x3C\x2F\x75\x6C\x3E","\x64\x69\x73\x70\x6C\x61\x79\x3A\x6E\x6F\x6E\x65\x3B","\x77\x72\x69\x74\x65","\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x32\x34\x77\x6F\x72\x6B\x2E\x62\x6C\x6F\x67\x73\x70\x6F\x74\x2E\x63\x6F\x6D\x2F\x22\x20\x72\x65\x6C\x3D\x22\x64\x6F\x66\x6F\x6C\x6C\x6F\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x5F\x62\x6C\x61\x6E\x6B\x22\x20\x74\x69\x74\x6C\x65\x3D\x22\x42\x6C\x6F\x67\x67\x65\x72\x20\x54\x69\x70\x73\x20\x61\x6E\x64\x20\x54\x72\x69\x63\x6B\x73\x22\x3E\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x62\x69\x74\x6C\x79\x2E\x63\x6F\x6D\x2F\x32\x34\x77\x6F\x72\x6B\x70\x6E\x67\x31\x22\x20\x61\x6C\x74\x3D\x22\x42\x6C\x6F\x67\x67\x65\x72\x20\x54\x69\x70\x73\x20\x61\x6E\x64\x20\x54\x72\x69\x63\x6B\x73\x22\x20\x62\x6F\x72\x64\x65\x72\x3D\x22\x30\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x62\x6F\x74\x74\x6F\x6D\x3A\x20\x31\x30\x25\x3B\x20\x72\x69\x67\x68\x74\x3A\x20\x30\x25\x3B\x20\x74\x6F\x70\x3A\x20\x30\x70\x78\x3B\x22\x20\x2F\x3E\x3C\x2F\x61\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x32\x34\x77\x6F\x72\x6B\x2E\x62\x6C\x6F\x67\x73\x70\x6F\x74\x2E\x63\x6F\x6D\x2F\x22\x20\x72\x65\x6C\x3D\x22\x64\x6F\x66\x6F\x6C\x6C\x6F\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x5F\x62\x6C\x61\x6E\x6B\x22\x20\x74\x69\x74\x6C\x65\x3D\x22\x4C\x61\x74\x65\x73\x74\x20\x54\x69\x70\x73\x20\x61\x6E\x64\x20\x54\x72\x69\x63\x6B\x73\x22\x3E\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x62\x69\x74\x6C\x79\x2E\x63\x6F\x6D\x2F\x32\x34\x77\x6F\x72\x6B\x70\x6E\x67\x31\x22\x20\x61\x6C\x74\x3D\x22\x4C\x61\x74\x65\x73\x74\x20\x54\x69\x70\x73\x20\x61\x6E\x64\x20\x54\x72\x69\x63\x6B\x73\x22\x20\x62\x6F\x72\x64\x65\x72\x3D\x22\x30\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x62\x6F\x74\x74\x6F\x6D\x3A\x20\x31\x30\x25\x3B\x20\x72\x69\x67\x68\x74\x3A\x20\x30\x25\x3B\x22\x20\x2F\x3E\x3C\x2F\x61\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x32\x34\x77\x6F\x72\x6B\x2E\x62\x6C\x6F\x67\x73\x70\x6F\x74\x2E\x63\x6F\x6D\x2F\x22\x20\x72\x65\x6C\x3D\x22\x64\x6F\x66\x6F\x6C\x6C\x6F\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x5F\x62\x6C\x61\x6E\x6B\x22\x20\x74\x69\x74\x6C\x65\x3D\x22\x42\x6C\x6F\x67\x67\x65\x72\x20\x54\x72\x69\x63\x6B\x73\x22\x3E\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x62\x69\x74\x6C\x79\x2E\x63\x6F\x6D\x2F\x32\x34\x77\x6F\x72\x6B\x70\x6E\x67\x31\x22\x20\x61\x6C\x74\x3D\x22\x42\x6C\x6F\x67\x67\x65\x72\x20\x54\x72\x69\x63\x6B\x73\x22\x20\x62\x6F\x72\x64\x65\x72\x3D\x22\x30\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x62\x6F\x74\x74\x6F\x6D\x3A\x20\x31\x30\x25\x3B\x20\x6C\x65\x66\x74\x3A\x20\x30\x25\x3B\x22\x20\x2F\x3E\x3C\x2F\x61\x3E"];var numComments=numComments||5,avatarSize=avatarSize||60,characters=characters||40,defaultAvatar=defaultAvatar||_0xd2d1[0],moreLinktext=moreLinktext||_0xd2d1[1],showAvatar=( typeof showAvatar===_0xd2d1[2])?true:showAvatar,showMorelink=( typeof showMorelink===_0xd2d1[2])?false:showMorelink,roundAvatar=( typeof roundAvatar===_0xd2d1[2])?true:roundAvatar,hideCredits=( typeof hideCredits===_0xd2d1[2])?false:hideCredits;function bdlab_recent_comments(_0xae5axb){var _0xae5axc;_0xae5axc=_0xd2d1[3];for(var _0xae5axd=0;_0xae5axd<numComments;_0xae5axd++){var _0xae5axe,_0xae5axf,_0xae5ax10,_0xae5ax11;if(_0xae5axd==_0xae5axb[_0xd2d1[6]][_0xd2d1[5]][_0xd2d1[4]]){break ;} ;_0xae5axc+=_0xd2d1[7];var _0xae5ax12=_0xae5axb[_0xd2d1[6]][_0xd2d1[5]][_0xae5axd];for(var _0xae5ax13=0;_0xae5ax13<_0xae5ax12[_0xd2d1[8]][_0xd2d1[4]];_0xae5ax13++){if(_0xae5ax12[_0xd2d1[8]][_0xae5ax13][_0xd2d1[9]]==_0xd2d1[10]){_0xae5axe=_0xae5ax12[_0xd2d1[8]][_0xae5ax13][_0xd2d1[11]];break ;} ;} ;_0xae5axf=_0xae5ax12[_0xd2d1[14]][0][_0xd2d1[13]][_0xd2d1[12]];_0xae5ax10=_0xae5ax12[_0xd2d1[14]][0][_0xd2d1[16]][_0xd2d1[15]];if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[17])!=-1){_0xae5ax10=_0xae5ax10[_0xd2d1[21]](_0xd2d1[17],_0xd2d1[19]+avatarSize+_0xd2d1[20]);} else {if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[22])!=-1){_0xae5ax10=_0xae5ax10[_0xd2d1[21]](_0xd2d1[22],_0xd2d1[19]+avatarSize+_0xd2d1[20]);} else {if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[23])!=-1&&_0xae5ax10[_0xd2d1[18]](_0xd2d1[24])!==0){_0xae5ax10=_0xd2d1[24]+_0xae5ax10[_0xd2d1[21]](_0xd2d1[23],_0xd2d1[19]+avatarSize+_0xd2d1[20]);} else {if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[25])!=-1){_0xae5ax10=_0xd2d1[26]+avatarSize+_0xd2d1[27];} else {if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[28])!=-1){_0xae5ax10=_0xd2d1[29]+avatarSize+_0xd2d1[30];} else {if(_0xae5ax10[_0xd2d1[18]](_0xd2d1[31])!=-1){if(defaultAvatar[_0xd2d1[18]](_0xd2d1[32])!=-1){_0xae5ax10=defaultAvatar+_0xd2d1[33]+avatarSize;} else {_0xae5ax10=defaultAvatar;} ;} else {_0xae5ax10=_0xae5ax10;} ;} ;} ;} ;} ;} ;if(showAvatar===true){if(roundAvatar===true){_0xae5ax11=_0xd2d1[34];} else {_0xae5ax11=_0xd2d1[35];} ;_0xae5axc+=_0xd2d1[36]+_0xae5ax11+_0xd2d1[37]+_0xae5ax11+_0xd2d1[38]+_0xae5ax10+_0xd2d1[39]+_0xae5axf+_0xd2d1[40]+avatarSize+_0xd2d1[41]+avatarSize+_0xd2d1[42];} ;_0xae5axc+=_0xd2d1[43]+_0xae5axe+_0xd2d1[44]+_0xae5axf+_0xd2d1[45];var _0xae5ax14=_0xae5ax12[_0xd2d1[46]][_0xd2d1[12]];var _0xae5ax15=_0xae5ax14[_0xd2d1[21]](/(<([^>]+)>)/ig,_0xd2d1[35]);if(_0xae5ax15!==_0xd2d1[35]&&_0xae5ax15[_0xd2d1[4]]>characters){_0xae5ax15=_0xae5ax15[_0xd2d1[47]](0,characters);_0xae5ax15+=_0xd2d1[48];if(showMorelink===true){_0xae5ax15+=_0xd2d1[43]+_0xae5axe+_0xd2d1[44]+moreLinktext+_0xd2d1[45];} ;} else {_0xae5ax15=_0xae5ax15;} ;_0xae5axc+=_0xd2d1[49]+_0xae5ax15+_0xd2d1[50];_0xae5axc+=_0xd2d1[51];} ;_0xae5axc+=_0xd2d1[52];var _0xae5ax16=_0xd2d1[35];if(hideCredits===true){_0xae5ax16=_0xd2d1[53];} ;_0xae5axc+=_0xd2d1[35];document[_0xd2d1[54]](_0xae5axc);} ;document[_0xd2d1[54]](_0xd2d1[55]);  
  3039. </script><a href="http://24work.blogspot.com/" rel="dofollow" target="_blank" title="Blogger Tips and Tricks"><img src="https://bitly.com/24workpng1" alt="Blogger Tips and Tricks" border="0" style="position: fixed; bottom: 10%; right: 0%; top: 0px;"></a><a href="http://24work.blogspot.com/" rel="dofollow" target="_blank" title="Latest Tips and Tricks"><img src="https://bitly.com/24workpng1" alt="Latest Tips and Tricks" border="0" style="position: fixed; bottom: 10%; right: 0%;"></a><a href="http://24work.blogspot.com/" rel="dofollow" target="_blank" title="Blogger Tricks"><img src="https://bitly.com/24workpng1" alt="Blogger Tricks" border="0" style="position: fixed; bottom: 10%; left: 0%;"></a><script type="text/javascript" src="http://vermus.blogspot.com/feeds/comments/default?alt=json&callback=bdlab_recent_comments&max-results=10"></script><ul class="bdlab_recent_comments"><li><div class="avatarImage "><img class="" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpXa_pmfqDJlVAvklczgdi4lZHUCKLJbgoGqBNLxxwt8gYGO-zrC-i7BO7ZDW4tbprOsKWaenYjDAjTKagcQJEtYLIY-XZ_NMPvVmM4fFDt5x7b-sKNTk2A5-RnaHtYQ/s27-c/1132344966d63af014.gif" alt="Vermus" width="27" height="27"></div><a href="http://vermus.blogspot.com/2013/12/debian-cubietruck-cubieboard-3-nand.html?showComment=1458277317709#c5719843439242459374">Vermus</a><span>Ну инструкция могла слегка устареть, не спорю :)</span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="B" width="27" height="27"></div><a href="http://vermus.blogspot.com/2013/12/debian-cubietruck-cubieboard-3-nand.html?showComment=1458247229892#c34580090144388494">B</a><span>Проьовал по это инструкции, загрузка останавливалась на строчке systemd-journald[80]: Recieved reque…<a href="http://vermus.blogspot.com/2013/12/debian-cubietruck-cubieboard-3-nand.html?showComment=1458247229892#c34580090144388494">Дальше »</a></span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="B" width="27" height="27"></div><a href="http://vermus.blogspot.com/2013/12/debian-cubietruck-cubieboard-3.html?showComment=1458246911260#c5793217783180977996">B</a><span>Тоже были проблемы сначала с карточкой. Потом в nand установил lubuntu server 1.02 и вроде нормально…<a href="http://vermus.blogspot.com/2013/12/debian-cubietruck-cubieboard-3.html?showComment=1458246911260#c5793217783180977996">Дальше »</a></span></li><li><div class="avatarImage "><img class="" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpXa_pmfqDJlVAvklczgdi4lZHUCKLJbgoGqBNLxxwt8gYGO-zrC-i7BO7ZDW4tbprOsKWaenYjDAjTKagcQJEtYLIY-XZ_NMPvVmM4fFDt5x7b-sKNTk2A5-RnaHtYQ/s27-c/1132344966d63af014.gif" alt="Vermus" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1434986660417#c7717029374091724394">Vermus</a><span>Ааа, наверное это летнее (или зимнее) время, неплохо бы наверное систему обновить, чтобы была Москва…<a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1434986660417#c7717029374091724394">Дальше »</a></span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="Anonymous" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1434986035676#c1571149819547365749">Anonymous</a><span>Вопрос решился вот как: устанавливаем временную зону как в Москве (я живу в ней), но не московскую. </span></li><li><div class="avatarImage "><img class="" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpXa_pmfqDJlVAvklczgdi4lZHUCKLJbgoGqBNLxxwt8gYGO-zrC-i7BO7ZDW4tbprOsKWaenYjDAjTKagcQJEtYLIY-XZ_NMPvVmM4fFDt5x7b-sKNTk2A5-RnaHtYQ/s27-c/1132344966d63af014.gif" alt="Vermus" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1433790143130#c1633322582514184016">Vermus</a><span>пока да :(Если вопрос простой, то может и смогу чем-нибудь помочь.</span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="Acid_Reptile" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1433771324395#c5088778904768250674">Acid_Reptile</a><span>Приветствую!А сеть 1-wire тоже "забросили"?</span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="Anonymous" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1431800253767#c4127454742248426063">Anonymous</a><span>Спасибо!... но графики теперь не знаю почему, без моего участия ушли от гринвича и пришли ... на час…<a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1431800253767#c4127454742248426063">Дальше »</a></span></li><li><div class="avatarImage "><img class="" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpXa_pmfqDJlVAvklczgdi4lZHUCKLJbgoGqBNLxxwt8gYGO-zrC-i7BO7ZDW4tbprOsKWaenYjDAjTKagcQJEtYLIY-XZ_NMPvVmM4fFDt5x7b-sKNTk2A5-RnaHtYQ/s27-c/1132344966d63af014.gif" alt="Vermus" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1431756599011#c2406523827847584840">Vermus</a><span>попробуйте сделать файл:timetest.javapublic class TimeTest{  public static void main(String[] args) …<a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1431756599011#c2406523827847584840">Дальше »</a></span></li><li><div class="avatarImage "><img class="" src="http://2.bp.blogspot.com/-_OKHDzWru6I/UbYr9jSvRoI/AAAAAAAABDE/HcRPJWAaAT4/s27/24work_blogger_logo.png" alt="Anonymous" width="27" height="27"></div><a href="http://vermus.blogspot.com/2014/01/openhab_16.html?showComment=1431744791024#c8494512402487384905">Anonymous</a><span>А в системе все нормально со временем :-(</span></li></ul>  
  3040. </div>  
  3041. <div class="clear"></div>  
  3042. </div><div class="widget BlogArchive" data-version="1" id="BlogArchive1">  
  3043. <h2>Архив блога</h2>  
  3044. <div class="widget-content">  
  3045. <div id="ArchiveList">  
  3046. <div id="BlogArchive1_ArchiveList">  
  3047. <ul class="hierarchy">  
  3048. <li class="archivedate collapsed">  
  3049. <a class="toggle" href="javascript:void(0)">  
  3050. <span class="zippy">  
  3051.   
  3052.         ►   
  3053.         
  3054. </span>  
  3055. </a>  
  3056. <a class="post-count-link" href="http://vermus.blogspot.com/2020/">  
  3057. 2020  
  3058. </a>  
  3059. <span class="post-count" dir="ltr">(4)</span>  
  3060. <ul class="hierarchy">  
  3061. <li class="archivedate collapsed">  
  3062. <a class="toggle" href="javascript:void(0)">  
  3063. <span class="zippy">  
  3064.   
  3065.         ►   
  3066.         
  3067. </span>  
  3068. </a>  
  3069. <a class="post-count-link" href="http://vermus.blogspot.com/2020/10/">  
  3070. октября  
  3071. </a>  
  3072. <span class="post-count" dir="ltr">(1)</span>  
  3073. </li>  
  3074. </ul>  
  3075. <ul class="hierarchy">  
  3076. <li class="archivedate collapsed">  
  3077. <a class="toggle" href="javascript:void(0)">  
  3078. <span class="zippy">  
  3079.   
  3080.         ►   
  3081.         
  3082. </span>  
  3083. </a>  
  3084. <a class="post-count-link" href="http://vermus.blogspot.com/2020/03/">  
  3085. марта  
  3086. </a>  
  3087. <span class="post-count" dir="ltr">(3)</span>  
  3088. </li>  
  3089. </ul>  
  3090. </li>  
  3091. </ul>  
  3092. <ul class="hierarchy">  
  3093. <li class="archivedate collapsed">  
  3094. <a class="toggle" href="javascript:void(0)">  
  3095. <span class="zippy">  
  3096.   
  3097.         ►   
  3098.         
  3099. </span>  
  3100. </a>  
  3101. <a class="post-count-link" href="http://vermus.blogspot.com/2014/">  
  3102. 2014  
  3103. </a>  
  3104. <span class="post-count" dir="ltr">(14)</span>  
  3105. <ul class="hierarchy">  
  3106. <li class="archivedate collapsed">  
  3107. <a class="toggle" href="javascript:void(0)">  
  3108. <span class="zippy">  
  3109.   
  3110.         ►   
  3111.         
  3112. </span>  
  3113. </a>  
  3114. <a class="post-count-link" href="http://vermus.blogspot.com/2014/05/">  
  3115. мая  
  3116. </a>  
  3117. <span class="post-count" dir="ltr">(1)</span>  
  3118. </li>  
  3119. </ul>  
  3120. <ul class="hierarchy">  
  3121. <li class="archivedate collapsed">  
  3122. <a class="toggle" href="javascript:void(0)">  
  3123. <span class="zippy">  
  3124.   
  3125.         ►   
  3126.         
  3127. </span>  
  3128. </a>  
  3129. <a class="post-count-link" href="http://vermus.blogspot.com/2014/02/">  
  3130. февраля  
  3131. </a>  
  3132. <span class="post-count" dir="ltr">(3)</span>  
  3133. </li>  
  3134. </ul>  
  3135. <ul class="hierarchy">  
  3136. <li class="archivedate collapsed">  
  3137. <a class="toggle" href="javascript:void(0)">  
  3138. <span class="zippy">  
  3139.   
  3140.         ►   
  3141.         
  3142. </span>  
  3143. </a>  
  3144. <a class="post-count-link" href="http://vermus.blogspot.com/2014/01/">  
  3145. января  
  3146. </a>  
  3147. <span class="post-count" dir="ltr">(10)</span>  
  3148. </li>  
  3149. </ul>  
  3150. </li>  
  3151. </ul>  
  3152. <ul class="hierarchy">  
  3153. <li class="archivedate collapsed">  
  3154. <a class="toggle" href="javascript:void(0)">  
  3155. <span class="zippy">  
  3156.   
  3157.         ►   
  3158.         
  3159. </span>  
  3160. </a>  
  3161. <a class="post-count-link" href="http://vermus.blogspot.com/2013/">  
  3162. 2013  
  3163. </a>  
  3164. <span class="post-count" dir="ltr">(3)</span>  
  3165. <ul class="hierarchy">  
  3166. <li class="archivedate collapsed">  
  3167. <a class="toggle" href="javascript:void(0)">  
  3168. <span class="zippy">  
  3169.   
  3170.         ►   
  3171.         
  3172. </span>  
  3173. </a>  
  3174. <a class="post-count-link" href="http://vermus.blogspot.com/2013/12/">  
  3175. декабря  
  3176. </a>  
  3177. <span class="post-count" dir="ltr">(3)</span>  
  3178. </li>  
  3179. </ul>  
  3180. </li>  
  3181. </ul>  
  3182. <ul class="hierarchy">  
  3183. <li class="archivedate collapsed">  
  3184. <a class="toggle" href="javascript:void(0)">  
  3185. <span class="zippy">  
  3186.   
  3187.         ►   
  3188.         
  3189. </span>  
  3190. </a>  
  3191. <a class="post-count-link" href="http://vermus.blogspot.com/2011/">  
  3192. 2011  
  3193. </a>  
  3194. <span class="post-count" dir="ltr">(1)</span>  
  3195. <ul class="hierarchy">  
  3196. <li class="archivedate collapsed">  
  3197. <a class="toggle" href="javascript:void(0)">  
  3198. <span class="zippy">  
  3199.   
  3200.         ►   
  3201.         
  3202. </span>  
  3203. </a>  
  3204. <a class="post-count-link" href="http://vermus.blogspot.com/2011/12/">  
  3205. декабря  
  3206. </a>  
  3207. <span class="post-count" dir="ltr">(1)</span>  
  3208. </li>  
  3209. </ul>  
  3210. </li>  
  3211. </ul>  
  3212. <ul class="hierarchy">  
  3213. <li class="archivedate collapsed">  
  3214. <a class="toggle" href="javascript:void(0)">  
  3215. <span class="zippy">  
  3216.   
  3217.         ►   
  3218.         
  3219. </span>  
  3220. </a>  
  3221. <a class="post-count-link" href="http://vermus.blogspot.com/2010/">  
  3222. 2010  
  3223. </a>  
  3224. <span class="post-count" dir="ltr">(26)</span>  
  3225. <ul class="hierarchy">  
  3226. <li class="archivedate collapsed">  
  3227. <a class="toggle" href="javascript:void(0)">  
  3228. <span class="zippy">  
  3229.   
  3230.         ►   
  3231.         
  3232. </span>  
  3233. </a>  
  3234. <a class="post-count-link" href="http://vermus.blogspot.com/2010/11/">  
  3235. ноября  
  3236. </a>  
  3237. <span class="post-count" dir="ltr">(1)</span>  
  3238. </li>  
  3239. </ul>  
  3240. <ul class="hierarchy">  
  3241. <li class="archivedate collapsed">  
  3242. <a class="toggle" href="javascript:void(0)">  
  3243. <span class="zippy">  
  3244.   
  3245.         ►   
  3246.         
  3247. </span>  
  3248. </a>  
  3249. <a class="post-count-link" href="http://vermus.blogspot.com/2010/09/">  
  3250. сентября  
  3251. </a>  
  3252. <span class="post-count" dir="ltr">(1)</span>  
  3253. </li>  
  3254. </ul>  
  3255. <ul class="hierarchy">  
  3256. <li class="archivedate collapsed">  
  3257. <a class="toggle" href="javascript:void(0)">  
  3258. <span class="zippy">  
  3259.   
  3260.         ►   
  3261.         
  3262. </span>  
  3263. </a>  
  3264. <a class="post-count-link" href="http://vermus.blogspot.com/2010/08/">  
  3265. августа  
  3266. </a>  
  3267. <span class="post-count" dir="ltr">(2)</span>  
  3268. </li>  
  3269. </ul>  
  3270. <ul class="hierarchy">  
  3271. <li class="archivedate collapsed">  
  3272. <a class="toggle" href="javascript:void(0)">  
  3273. <span class="zippy">  
  3274.   
  3275.         ►   
  3276.         
  3277. </span>  
  3278. </a>  
  3279. <a class="post-count-link" href="http://vermus.blogspot.com/2010/07/">  
  3280. июля  
  3281. </a>  
  3282. <span class="post-count" dir="ltr">(4)</span>  
  3283. </li>  
  3284. </ul>  
  3285. <ul class="hierarchy">  
  3286. <li class="archivedate collapsed">  
  3287. <a class="toggle" href="javascript:void(0)">  
  3288. <span class="zippy">  
  3289.   
  3290.         ►   
  3291.         
  3292. </span>  
  3293. </a>  
  3294. <a class="post-count-link" href="http://vermus.blogspot.com/2010/06/">  
  3295. июня  
  3296. </a>  
  3297. <span class="post-count" dir="ltr">(7)</span>  
  3298. </li>  
  3299. </ul>  
  3300. <ul class="hierarchy">  
  3301. <li class="archivedate collapsed">  
  3302. <a class="toggle" href="javascript:void(0)">  
  3303. <span class="zippy">  
  3304.   
  3305.         ►   
  3306.         
  3307. </span>  
  3308. </a>  
  3309. <a class="post-count-link" href="http://vermus.blogspot.com/2010/05/">  
  3310. мая  
  3311. </a>  
  3312. <span class="post-count" dir="ltr">(1)</span>  
  3313. </li>  
  3314. </ul>  
  3315. <ul class="hierarchy">  
  3316. <li class="archivedate collapsed">  
  3317. <a class="toggle" href="javascript:void(0)">  
  3318. <span class="zippy">  
  3319.   
  3320.         ►   
  3321.         
  3322. </span>  
  3323. </a>  
  3324. <a class="post-count-link" href="http://vermus.blogspot.com/2010/04/">  
  3325. апреля  
  3326. </a>  
  3327. <span class="post-count" dir="ltr">(1)</span>  
  3328. </li>  
  3329. </ul>  
  3330. <ul class="hierarchy">  
  3331. <li class="archivedate collapsed">  
  3332. <a class="toggle" href="javascript:void(0)">  
  3333. <span class="zippy">  
  3334.   
  3335.         ►   
  3336.         
  3337. </span>  
  3338. </a>  
  3339. <a class="post-count-link" href="http://vermus.blogspot.com/2010/03/">  
  3340. марта  
  3341. </a>  
  3342. <span class="post-count" dir="ltr">(1)</span>  
  3343. </li>  
  3344. </ul>  
  3345. <ul class="hierarchy">  
  3346. <li class="archivedate collapsed">  
  3347. <a class="toggle" href="javascript:void(0)">  
  3348. <span class="zippy">  
  3349.   
  3350.         ►   
  3351.         
  3352. </span>  
  3353. </a>  
  3354. <a class="post-count-link" href="http://vermus.blogspot.com/2010/02/">  
  3355. февраля  
  3356. </a>  
  3357. <span class="post-count" dir="ltr">(4)</span>  
  3358. </li>  
  3359. </ul>  
  3360. <ul class="hierarchy">  
  3361. <li class="archivedate collapsed">  
  3362. <a class="toggle" href="javascript:void(0)">  
  3363. <span class="zippy">  
  3364.   
  3365.         ►   
  3366.         
  3367. </span>  
  3368. </a>  
  3369. <a class="post-count-link" href="http://vermus.blogspot.com/2010/01/">  
  3370. января  
  3371. </a>  
  3372. <span class="post-count" dir="ltr">(4)</span>  
  3373. </li>  
  3374. </ul>  
  3375. </li>  
  3376. </ul>  
  3377. <ul class="hierarchy">  
  3378. <li class="archivedate expanded">  
  3379. <a class="toggle" href="javascript:void(0)">  
  3380. <span class="zippy toggle-open">  
  3381.   
  3382.         ▼   
  3383.         
  3384. </span>  
  3385. </a>  
  3386. <a class="post-count-link" href="http://vermus.blogspot.com/2009/">  
  3387. 2009  
  3388. </a>  
  3389. <span class="post-count" dir="ltr">(32)</span>  
  3390. <ul class="hierarchy">  
  3391. <li class="archivedate expanded">  
  3392. <a class="toggle" href="javascript:void(0)">  
  3393. <span class="zippy toggle-open">  
  3394.   
  3395.         ▼   
  3396.         
  3397. </span>  
  3398. </a>  
  3399. <a class="post-count-link" href="http://vermus.blogspot.com/2009/12/">  
  3400. декабря  
  3401. </a>  
  3402. <span class="post-count" dir="ltr">(5)</span>  
  3403. <ul class="posts">  
  3404. <li><a href="http://vermus.blogspot.com/2009/12/gwt-django.html">GWT. Взаимодействие с Django</a></li>  
  3405. <li><a href="http://vermus.blogspot.com/2009/12/gwt-entrypoint.html">GWT. Передача параметров в GWT</a></li>  
  3406. <li><a href="http://vermus.blogspot.com/2009/12/google-web-toolkit-2-eclipse-smartgwt.html">Google Web Toolkit 2, Eclipse, SmartGWT</a></li>  
  3407. <li><a href="http://vermus.blogspot.com/2009/12/cppcms-c-web-framework.html">CppCMS — C++ Web Framework</a></li>  
  3408. <li><a href="http://vermus.blogspot.com/2009/12/google-dns.html">Google открыл публичные DNS серверы</a></li>  
  3409. </ul>  
  3410. </li>  
  3411. </ul>  
  3412. <ul class="hierarchy">  
  3413. <li class="archivedate collapsed">  
  3414. <a class="toggle" href="javascript:void(0)">  
  3415. <span class="zippy">  
  3416.   
  3417.         ►   
  3418.         
  3419. </span>  
  3420. </a>  
  3421. <a class="post-count-link" href="http://vermus.blogspot.com/2009/10/">  
  3422. октября  
  3423. </a>  
  3424. <span class="post-count" dir="ltr">(2)</span>  
  3425. <ul class="posts">  
  3426. <li><a href="http://vermus.blogspot.com/2009/10/django-eclipse-c-pydev.html">Дебагинг django в eclipse c помощью PyDev</a></li>  
  3427. <li><a href="http://vermus.blogspot.com/2009/10/google-chorme-debian.html">Google Chorme в Debian</a></li>  
  3428. </ul>  
  3429. </li>  
  3430. </ul>  
  3431. <ul class="hierarchy">  
  3432. <li class="archivedate collapsed">  
  3433. <a class="toggle" href="javascript:void(0)">  
  3434. <span class="zippy">  
  3435.   
  3436.         ►   
  3437.         
  3438. </span>  
  3439. </a>  
  3440. <a class="post-count-link" href="http://vermus.blogspot.com/2009/09/">  
  3441. сентября  
  3442. </a>  
  3443. <span class="post-count" dir="ltr">(2)</span>  
  3444. <ul class="posts">  
  3445. <li><a href="http://vermus.blogspot.com/2009/09/load-visual-studio-200b.html">Отмена обработки события load дизайнером форм Visu...</a></li>  
  3446. <li><a href="http://vermus.blogspot.com/2009/09/nhibernate-net.html">Nhibernate в .NET</a></li>  
  3447. </ul>  
  3448. </li>  
  3449. </ul>  
  3450. <ul class="hierarchy">  
  3451. <li class="archivedate collapsed">  
  3452. <a class="toggle" href="javascript:void(0)">  
  3453. <span class="zippy">  
  3454.   
  3455.         ►   
  3456.         
  3457. </span>  
  3458. </a>  
  3459. <a class="post-count-link" href="http://vermus.blogspot.com/2009/08/">  
  3460. августа  
  3461. </a>  
  3462. <span class="post-count" dir="ltr">(2)</span>  
  3463. <ul class="posts">  
  3464. <li><a href="http://vermus.blogspot.com/2009/08/gitextensions.html">Используем gitextensions</a></li>  
  3465. <li><a href="http://vermus.blogspot.com/2009/08/django-izmenimsyaru.html">Первый сайт на Django. izmenimsya.ru</a></li>  
  3466. </ul>  
  3467. </li>  
  3468. </ul>  
  3469. <ul class="hierarchy">  
  3470. <li class="archivedate collapsed">  
  3471. <a class="toggle" href="javascript:void(0)">  
  3472. <span class="zippy">  
  3473.   
  3474.         ►   
  3475.         
  3476. </span>  
  3477. </a>  
  3478. <a class="post-count-link" href="http://vermus.blogspot.com/2009/06/">  
  3479. июня  
  3480. </a>  
  3481. <span class="post-count" dir="ltr">(4)</span>  
  3482. <ul class="posts">  
  3483. <li><a href="http://vermus.blogspot.com/2009/06/lpad-django.html">Ldap авторизация в Django</a></li>  
  3484. <li><a href="http://vermus.blogspot.com/2009/06/blender.html">blender - быстрый старт</a></li>  
  3485. <li><a href="http://vermus.blogspot.com/2009/06/redmine-freebsd-72-apache-postgres-sql.html">Установка Redmine на FreeBSD 7.2, используя apache...</a></li>  
  3486. <li><a href="http://vermus.blogspot.com/2009/06/git-freebsd-72-c-egit-eclipse-windows.html">Установка git сервера на Freebsd 7.2 c клиентами E...</a></li>  
  3487. </ul>  
  3488. </li>  
  3489. </ul>  
  3490. <ul class="hierarchy">  
  3491. <li class="archivedate collapsed">  
  3492. <a class="toggle" href="javascript:void(0)">  
  3493. <span class="zippy">  
  3494.   
  3495.         ►   
  3496.         
  3497. </span>  
  3498. </a>  
  3499. <a class="post-count-link" href="http://vermus.blogspot.com/2009/05/">  
  3500. мая  
  3501. </a>  
  3502. <span class="post-count" dir="ltr">(5)</span>  
  3503. <ul class="posts">  
  3504. <li><a href="http://vermus.blogspot.com/2009/05/blog-post.html">Россия в мире сейчас, объективный взгляд</a></li>  
  3505. <li><a href="http://vermus.blogspot.com/2009/05/gui-wicd-debian.html">GUI Менеджер сетевых соединений wicd в debian</a></li>  
  3506. <li><a href="http://vermus.blogspot.com/2009/05/linux.html">Файловые менеджеры linux</a></li>  
  3507. <li><a href="http://vermus.blogspot.com/2009/05/2.html">Управление модулями апача 2 в дебиане</a></li>  
  3508. <li><a href="http://vermus.blogspot.com/2009/05/img-windows.html">Создание загрузочной флешки из img образа в windows</a></li>  
  3509. </ul>  
  3510. </li>  
  3511. </ul>  
  3512. <ul class="hierarchy">  
  3513. <li class="archivedate collapsed">  
  3514. <a class="toggle" href="javascript:void(0)">  
  3515. <span class="zippy">  
  3516.   
  3517.         ►   
  3518.         
  3519. </span>  
  3520. </a>  
  3521. <a class="post-count-link" href="http://vermus.blogspot.com/2009/04/">  
  3522. апреля  
  3523. </a>  
  3524. <span class="post-count" dir="ltr">(1)</span>  
  3525. <ul class="posts">  
  3526. <li><a href="http://vermus.blogspot.com/2009/04/blog-post.html">Байка</a></li>  
  3527. </ul>  
  3528. </li>  
  3529. </ul>  
  3530. <ul class="hierarchy">  
  3531. <li class="archivedate collapsed">  
  3532. <a class="toggle" href="javascript:void(0)">  
  3533. <span class="zippy">  
  3534.   
  3535.         ►   
  3536.         
  3537. </span>  
  3538. </a>  
  3539. <a class="post-count-link" href="http://vermus.blogspot.com/2009/03/">  
  3540. марта  
  3541. </a>  
  3542. <span class="post-count" dir="ltr">(3)</span>  
  3543. <ul class="posts">  
  3544. <li><a href="http://vermus.blogspot.com/2009/03/debian-linux.html">Архивирование системы или бекап в debian linux</a></li>  
  3545. <li><a href="http://vermus.blogspot.com/2009/03/django_11.html">Контекстные процессоры Django</a></li>  
  3546. <li><a href="http://vermus.blogspot.com/2009/03/django.html">Django. Валидация формсетов. Часть вторая</a></li>  
  3547. </ul>  
  3548. </li>  
  3549. </ul>  
  3550. <ul class="hierarchy">  
  3551. <li class="archivedate collapsed">  
  3552. <a class="toggle" href="javascript:void(0)">  
  3553. <span class="zippy">  
  3554.   
  3555.         ►   
  3556.         
  3557. </span>  
  3558. </a>  
  3559. <a class="post-count-link" href="http://vermus.blogspot.com/2009/02/">  
  3560. февраля  
  3561. </a>  
  3562. <span class="post-count" dir="ltr">(6)</span>  
  3563. <ul class="posts">  
  3564. <li><a href="http://vermus.blogspot.com/2009/02/googlefightcom.html">googlefight.com</a></li>  
  3565. <li><a href="http://vermus.blogspot.com/2009/02/bash-freebsd-62.html">bash во freebsd 6.2</a></li>  
  3566. <li><a href="http://vermus.blogspot.com/2009/02/subversion-debian-lenny.html">Запуск (установка и быстрая настройка) сервера sub...</a></li>  
  3567. <li><a href="http://vermus.blogspot.com/2009/02/trac-debian-lenny-postgresql.html">Моя установка (перемещение с windows) trac на debi...</a></li>  
  3568. <li><a href="http://vermus.blogspot.com/2009/02/blog-post_09.html">Александр Блок</a></li>  
  3569. <li><a href="http://vermus.blogspot.com/2009/02/blog-post.html">"Серверная" на балконе</a></li>  
  3570. </ul>  
  3571. </li>  
  3572. </ul>  
  3573. <ul class="hierarchy">  
  3574. <li class="archivedate collapsed">  
  3575. <a class="toggle" href="javascript:void(0)">  
  3576. <span class="zippy">  
  3577.   
  3578.         ►   
  3579.         
  3580. </span>  
  3581. </a>  
  3582. <a class="post-count-link" href="http://vermus.blogspot.com/2009/01/">  
  3583. января  
  3584. </a>  
  3585. <span class="post-count" dir="ltr">(2)</span>  
  3586. </li>  
  3587. </ul>  
  3588. </li>  
  3589. </ul>  
  3590. <ul class="hierarchy">  
  3591. <li class="archivedate collapsed">  
  3592. <a class="toggle" href="javascript:void(0)">  
  3593. <span class="zippy">  
  3594.   
  3595.         ►   
  3596.         
  3597. </span>  
  3598. </a>  
  3599. <a class="post-count-link" href="http://vermus.blogspot.com/2008/">  
  3600. 2008  
  3601. </a>  
  3602. <span class="post-count" dir="ltr">(20)</span>  
  3603. <ul class="hierarchy">  
  3604. <li class="archivedate collapsed">  
  3605. <a class="toggle" href="javascript:void(0)">  
  3606. <span class="zippy">  
  3607.   
  3608.         ►   
  3609.         
  3610. </span>  
  3611. </a>  
  3612. <a class="post-count-link" href="http://vermus.blogspot.com/2008/12/">  
  3613. декабря  
  3614. </a>  
  3615. <span class="post-count" dir="ltr">(16)</span>  
  3616. </li>  
  3617. </ul>  
  3618. <ul class="hierarchy">  
  3619. <li class="archivedate collapsed">  
  3620. <a class="toggle" href="javascript:void(0)">  
  3621. <span class="zippy">  
  3622.   
  3623.         ►   
  3624.         
  3625. </span>  
  3626. </a>  
  3627. <a class="post-count-link" href="http://vermus.blogspot.com/2008/11/">  
  3628. ноября  
  3629. </a>  
  3630. <span class="post-count" dir="ltr">(2)</span>  
  3631. </li>  
  3632. </ul>  
  3633. <ul class="hierarchy">  
  3634. <li class="archivedate collapsed">  
  3635. <a class="toggle" href="javascript:void(0)">  
  3636. <span class="zippy">  
  3637.   
  3638.         ►   
  3639.         
  3640. </span>  
  3641. </a>  
  3642. <a class="post-count-link" href="http://vermus.blogspot.com/2008/08/">  
  3643. августа  
  3644. </a>  
  3645. <span class="post-count" dir="ltr">(1)</span>  
  3646. </li>  
  3647. </ul>  
  3648. <ul class="hierarchy">  
  3649. <li class="archivedate collapsed">  
  3650. <a class="toggle" href="javascript:void(0)">  
  3651. <span class="zippy">  
  3652.   
  3653.         ►   
  3654.         
  3655. </span>  
  3656. </a>  
  3657. <a class="post-count-link" href="http://vermus.blogspot.com/2008/04/">  
  3658. апреля  
  3659. </a>  
  3660. <span class="post-count" dir="ltr">(1)</span>  
  3661. </li>  
  3662. </ul>  
  3663. </li>  
  3664. </ul>  
  3665. <ul class="hierarchy">  
  3666. <li class="archivedate collapsed">  
  3667. <a class="toggle" href="javascript:void(0)">  
  3668. <span class="zippy">  
  3669.   
  3670.         ►   
  3671.         
  3672. </span>  
  3673. </a>  
  3674. <a class="post-count-link" href="http://vermus.blogspot.com/2007/">  
  3675. 2007  
  3676. </a>  
  3677. <span class="post-count" dir="ltr">(4)</span>  
  3678. <ul class="hierarchy">  
  3679. <li class="archivedate collapsed">  
  3680. <a class="toggle" href="javascript:void(0)">  
  3681. <span class="zippy">  
  3682.   
  3683.         ►   
  3684.         
  3685. </span>  
  3686. </a>  
  3687. <a class="post-count-link" href="http://vermus.blogspot.com/2007/11/">  
  3688. ноября  
  3689. </a>  
  3690. <span class="post-count" dir="ltr">(4)</span>  
  3691. </li>  
  3692. </ul>  
  3693. </li>  
  3694. </ul>  
  3695. </div>  
  3696. </div>  
  3697. <div class="clear"></div>  
  3698. </div>  
  3699. </div><div class="widget Label" data-version="1" id="Label1">  
  3700. <h2>Ярлыки</h2>  
  3701. <div class="widget-content cloud-label-widget-content">  
  3702. <span class="label-size label-size-5">  
  3703. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django">django</a>  
  3704. <span class="label-count" dir="ltr">(27)</span>  
  3705. </span>  
  3706. <span class="label-size label-size-4">  
  3707. <a dir="ltr" href="http://vermus.blogspot.com/search/label/debian">debian</a>  
  3708. <span class="label-count" dir="ltr">(14)</span>  
  3709. </span>  
  3710. <span class="label-size label-size-4">  
  3711. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Eclipse">Eclipse</a>  
  3712. <span class="label-count" dir="ltr">(10)</span>  
  3713. </span>  
  3714. <span class="label-size label-size-4">  
  3715. <a dir="ltr" href="http://vermus.blogspot.com/search/label/musicmans.ru">musicmans.ru</a>  
  3716. <span class="label-count" dir="ltr">(10)</span>  
  3717. </span>  
  3718. <span class="label-size label-size-4">  
  3719. <a dir="ltr" href="http://vermus.blogspot.com/search/label/OpenHAB">OpenHAB</a>  
  3720. <span class="label-count" dir="ltr">(9)</span>  
  3721. </span>  
  3722. <span class="label-size label-size-4">  
  3723. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%83%D0%BC%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BC">умный дом</a>  
  3724. <span class="label-count" dir="ltr">(9)</span>  
  3725. </span>  
  3726. <span class="label-size label-size-4">  
  3727. <a dir="ltr" href="http://vermus.blogspot.com/search/label/1-wire">1-wire</a>  
  3728. <span class="label-count" dir="ltr">(8)</span>  
  3729. </span>  
  3730. <span class="label-size label-size-4">  
  3731. <a dir="ltr" href="http://vermus.blogspot.com/search/label/linux">linux</a>  
  3732. <span class="label-count" dir="ltr">(8)</span>  
  3733. </span>  
  3734. <span class="label-size label-size-3">  
  3735. <a dir="ltr" href="http://vermus.blogspot.com/search/label/cubietruck">cubietruck</a>  
  3736. <span class="label-count" dir="ltr">(5)</span>  
  3737. </span>  
  3738. <span class="label-size label-size-3">  
  3739. <a dir="ltr" href="http://vermus.blogspot.com/search/label/owfs">owfs</a>  
  3740. <span class="label-count" dir="ltr">(5)</span>  
  3741. </span>  
  3742. <span class="label-size label-size-3">  
  3743. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Redmine">Redmine</a>  
  3744. <span class="label-count" dir="ltr">(4)</span>  
  3745. </span>  
  3746. <span class="label-size label-size-3">  
  3747. <a dir="ltr" href="http://vermus.blogspot.com/search/label/SmartGWT">SmartGWT</a>  
  3748. <span class="label-count" dir="ltr">(4)</span>  
  3749. </span>  
  3750. <span class="label-size label-size-3">  
  3751. <a dir="ltr" href="http://vermus.blogspot.com/search/label/python">python</a>  
  3752. <span class="label-count" dir="ltr">(4)</span>  
  3753. </span>  
  3754. <span class="label-size label-size-3">  
  3755. <a dir="ltr" href="http://vermus.blogspot.com/search/label/subversion">subversion</a>  
  3756. <span class="label-count" dir="ltr">(4)</span>  
  3757. </span>  
  3758. <span class="label-size label-size-3">  
  3759. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%84%D0%B8%D0%BB%D0%BE%D1%81%D0%BE%D1%84%D0%B8%D1%8F">философия</a>  
  3760. <span class="label-count" dir="ltr">(4)</span>  
  3761. </span>  
  3762. <span class="label-size label-size-2">  
  3763. <a dir="ltr" href="http://vermus.blogspot.com/search/label/apache2">apache2</a>  
  3764. <span class="label-count" dir="ltr">(3)</span>  
  3765. </span>  
  3766. <span class="label-size label-size-2">  
  3767. <a dir="ltr" href="http://vermus.blogspot.com/search/label/form">form</a>  
  3768. <span class="label-count" dir="ltr">(3)</span>  
  3769. </span>  
  3770. <span class="label-size label-size-2">  
  3771. <a dir="ltr" href="http://vermus.blogspot.com/search/label/freebsd">freebsd</a>  
  3772. <span class="label-count" dir="ltr">(3)</span>  
  3773. </span>  
  3774. <span class="label-size label-size-2">  
  3775. <a dir="ltr" href="http://vermus.blogspot.com/search/label/openremote">openremote</a>  
  3776. <span class="label-count" dir="ltr">(3)</span>  
  3777. </span>  
  3778. <span class="label-size label-size-2">  
  3779. <a dir="ltr" href="http://vermus.blogspot.com/search/label/owserver">owserver</a>  
  3780. <span class="label-count" dir="ltr">(3)</span>  
  3781. </span>  
  3782. <span class="label-size label-size-2">  
  3783. <a dir="ltr" href="http://vermus.blogspot.com/search/label/.NET">.NET</a>  
  3784. <span class="label-count" dir="ltr">(2)</span>  
  3785. </span>  
  3786. <span class="label-size label-size-2">  
  3787. <a dir="ltr" href="http://vermus.blogspot.com/search/label/ARM">ARM</a>  
  3788. <span class="label-count" dir="ltr">(2)</span>  
  3789. </span>  
  3790. <span class="label-size label-size-2">  
  3791. <a dir="ltr" href="http://vermus.blogspot.com/search/label/DS18B20">DS18B20</a>  
  3792. <span class="label-count" dir="ltr">(2)</span>  
  3793. </span>  
  3794. <span class="label-size label-size-2">  
  3795. <a dir="ltr" href="http://vermus.blogspot.com/search/label/DS9490R">DS9490R</a>  
  3796. <span class="label-count" dir="ltr">(2)</span>  
  3797. </span>  
  3798. <span class="label-size label-size-2">  
  3799. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Google%20Chorme">Google Chorme</a>  
  3800. <span class="label-count" dir="ltr">(2)</span>  
  3801. </span>  
  3802. <span class="label-size label-size-2">  
  3803. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Google%20Web%20Toolkit">Google Web Toolkit</a>  
  3804. <span class="label-count" dir="ltr">(2)</span>  
  3805. </span>  
  3806. <span class="label-size label-size-2">  
  3807. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Home%20Assistant">Home Assistant</a>  
  3808. <span class="label-count" dir="ltr">(2)</span>  
  3809. </span>  
  3810. <span class="label-size label-size-2">  
  3811. <a dir="ltr" href="http://vermus.blogspot.com/search/label/cubieboard">cubieboard</a>  
  3812. <span class="label-count" dir="ltr">(2)</span>  
  3813. </span>  
  3814. <span class="label-size label-size-2">  
  3815. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-piston">django-piston</a>  
  3816. <span class="label-count" dir="ltr">(2)</span>  
  3817. </span>  
  3818. <span class="label-size label-size-2">  
  3819. <a dir="ltr" href="http://vermus.blogspot.com/search/label/forms">forms</a>  
  3820. <span class="label-count" dir="ltr">(2)</span>  
  3821. </span>  
  3822. <span class="label-size label-size-2">  
  3823. <a dir="ltr" href="http://vermus.blogspot.com/search/label/formset">formset</a>  
  3824. <span class="label-count" dir="ltr">(2)</span>  
  3825. </span>  
  3826. <span class="label-size label-size-2">  
  3827. <a dir="ltr" href="http://vermus.blogspot.com/search/label/git">git</a>  
  3828. <span class="label-count" dir="ltr">(2)</span>  
  3829. </span>  
  3830. <span class="label-size label-size-2">  
  3831. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gwt">gwt</a>  
  3832. <span class="label-count" dir="ltr">(2)</span>  
  3833. </span>  
  3834. <span class="label-size label-size-2">  
  3835. <a dir="ltr" href="http://vermus.blogspot.com/search/label/java">java</a>  
  3836. <span class="label-count" dir="ltr">(2)</span>  
  3837. </span>  
  3838. <span class="label-size label-size-2">  
  3839. <a dir="ltr" href="http://vermus.blogspot.com/search/label/javascript">javascript</a>  
  3840. <span class="label-count" dir="ltr">(2)</span>  
  3841. </span>  
  3842. <span class="label-size label-size-2">  
  3843. <a dir="ltr" href="http://vermus.blogspot.com/search/label/kvm">kvm</a>  
  3844. <span class="label-count" dir="ltr">(2)</span>  
  3845. </span>  
  3846. <span class="label-size label-size-2">  
  3847. <a dir="ltr" href="http://vermus.blogspot.com/search/label/pip">pip</a>  
  3848. <span class="label-count" dir="ltr">(2)</span>  
  3849. </span>  
  3850. <span class="label-size label-size-2">  
  3851. <a dir="ltr" href="http://vermus.blogspot.com/search/label/postgresql">postgresql</a>  
  3852. <span class="label-count" dir="ltr">(2)</span>  
  3853. </span>  
  3854. <span class="label-size label-size-2">  
  3855. <a dir="ltr" href="http://vermus.blogspot.com/search/label/rtorrent">rtorrent</a>  
  3856. <span class="label-count" dir="ltr">(2)</span>  
  3857. </span>  
  3858. <span class="label-size label-size-2">  
  3859. <a dir="ltr" href="http://vermus.blogspot.com/search/label/svn">svn</a>  
  3860. <span class="label-count" dir="ltr">(2)</span>  
  3861. </span>  
  3862. <span class="label-size label-size-2">  
  3863. <a dir="ltr" href="http://vermus.blogspot.com/search/label/trac">trac</a>  
  3864. <span class="label-count" dir="ltr">(2)</span>  
  3865. </span>  
  3866. <span class="label-size label-size-2">  
  3867. <a dir="ltr" href="http://vermus.blogspot.com/search/label/validation">validation</a>  
  3868. <span class="label-count" dir="ltr">(2)</span>  
  3869. </span>  
  3870. <span class="label-size label-size-2">  
  3871. <a dir="ltr" href="http://vermus.blogspot.com/search/label/windows">windows</a>  
  3872. <span class="label-count" dir="ltr">(2)</span>  
  3873. </span>  
  3874. <span class="label-size label-size-2">  
  3875. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%91%D0%B5%D1%80%D0%B4%D1%8F%D0%B5%D0%B2">Бердяев</a>  
  3876. <span class="label-count" dir="ltr">(2)</span>  
  3877. </span>  
  3878. <span class="label-size label-size-2">  
  3879. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B6%D0%B8%D0%B7%D0%BD%D1%8C">жизнь</a>  
  3880. <span class="label-count" dir="ltr">(2)</span>  
  3881. </span>  
  3882. <span class="label-size label-size-2">  
  3883. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BB%D1%8E%D0%B1%D0%BE%D0%B2%D1%8C">любовь</a>  
  3884. <span class="label-count" dir="ltr">(2)</span>  
  3885. </span>  
  3886. <span class="label-size label-size-2">  
  3887. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BF%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0">политика</a>  
  3888. <span class="label-count" dir="ltr">(2)</span>  
  3889. </span>  
  3890. <span class="label-size label-size-2">  
  3891. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BF%D1%80%D0%BE%D0%B7%D0%B0">проза</a>  
  3892. <span class="label-count" dir="ltr">(2)</span>  
  3893. </span>  
  3894. <span class="label-size label-size-2">  
  3895. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0">работа</a>  
  3896. <span class="label-count" dir="ltr">(2)</span>  
  3897. </span>  
  3898. <span class="label-size label-size-2">  
  3899. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D0%B0%D0%B9%D1%82">сайт</a>  
  3900. <span class="label-count" dir="ltr">(2)</span>  
  3901. </span>  
  3902. <span class="label-size label-size-2">  
  3903. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8">ссылки</a>  
  3904. <span class="label-count" dir="ltr">(2)</span>  
  3905. </span>  
  3906. <span class="label-size label-size-1">  
  3907. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%23">#</a>  
  3908. <span class="label-count" dir="ltr">(1)</span>  
  3909. </span>  
  3910. <span class="label-size label-size-1">  
  3911. <a dir="ltr" href="http://vermus.blogspot.com/search/label/.NET%20C%23">.NET C#</a>  
  3912. <span class="label-count" dir="ltr">(1)</span>  
  3913. </span>  
  3914. <span class="label-size label-size-1">  
  3915. <a dir="ltr" href="http://vermus.blogspot.com/search/label/3d">3d</a>  
  3916. <span class="label-count" dir="ltr">(1)</span>  
  3917. </span>  
  3918. <span class="label-size label-size-1">  
  3919. <a dir="ltr" href="http://vermus.blogspot.com/search/label/AVerTV">AVerTV</a>  
  3920. <span class="label-count" dir="ltr">(1)</span>  
  3921. </span>  
  3922. <span class="label-size label-size-1">  
  3923. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Asterisk">Asterisk</a>  
  3924. <span class="label-count" dir="ltr">(1)</span>  
  3925. </span>  
  3926. <span class="label-size label-size-1">  
  3927. <a dir="ltr" href="http://vermus.blogspot.com/search/label/C%23">C#</a>  
  3928. <span class="label-count" dir="ltr">(1)</span>  
  3929. </span>  
  3930. <span class="label-size label-size-1">  
  3931. <a dir="ltr" href="http://vermus.blogspot.com/search/label/C%2B%2B">C++</a>  
  3932. <span class="label-count" dir="ltr">(1)</span>  
  3933. </span>  
  3934. <span class="label-size label-size-1">  
  3935. <a dir="ltr" href="http://vermus.blogspot.com/search/label/CPU">CPU</a>  
  3936. <span class="label-count" dir="ltr">(1)</span>  
  3937. </span>  
  3938. <span class="label-size label-size-1">  
  3939. <a dir="ltr" href="http://vermus.blogspot.com/search/label/CentOS">CentOS</a>  
  3940. <span class="label-count" dir="ltr">(1)</span>  
  3941. </span>  
  3942. <span class="label-size label-size-1">  
  3943. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Context">Context</a>  
  3944. <span class="label-count" dir="ltr">(1)</span>  
  3945. </span>  
  3946. <span class="label-size label-size-1">  
  3947. <a dir="ltr" href="http://vermus.blogspot.com/search/label/CppCMS">CppCMS</a>  
  3948. <span class="label-count" dir="ltr">(1)</span>  
  3949. </span>  
  3950. <span class="label-size label-size-1">  
  3951. <a dir="ltr" href="http://vermus.blogspot.com/search/label/D-Link%20DCS-950G">D-Link DCS-950G</a>  
  3952. <span class="label-count" dir="ltr">(1)</span>  
  3953. </span>  
  3954. <span class="label-size label-size-1">  
  3955. <a dir="ltr" href="http://vermus.blogspot.com/search/label/DS2406P">DS2406P</a>  
  3956. <span class="label-count" dir="ltr">(1)</span>  
  3957. </span>  
  3958. <span class="label-size label-size-1">  
  3959. <a dir="ltr" href="http://vermus.blogspot.com/search/label/EGit">EGit</a>  
  3960. <span class="label-count" dir="ltr">(1)</span>  
  3961. </span>  
  3962. <span class="label-size label-size-1">  
  3963. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Eclipse%20Marketplace">Eclipse Marketplace</a>  
  3964. <span class="label-count" dir="ltr">(1)</span>  
  3965. </span>  
  3966. <span class="label-size label-size-1">  
  3967. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Elastix">Elastix</a>  
  3968. <span class="label-count" dir="ltr">(1)</span>  
  3969. </span>  
  3970. <span class="label-size label-size-1">  
  3971. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Framework">Framework</a>  
  3972. <span class="label-count" dir="ltr">(1)</span>  
  3973. </span>  
  3974. <span class="label-size label-size-1">  
  3975. <a dir="ltr" href="http://vermus.blogspot.com/search/label/GWT%20Designer">GWT Designer</a>  
  3976. <span class="label-count" dir="ltr">(1)</span>  
  3977. </span>  
  3978. <span class="label-size label-size-1">  
  3979. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Google%20Code">Google Code</a>  
  3980. <span class="label-count" dir="ltr">(1)</span>  
  3981. </span>  
  3982. <span class="label-size label-size-1">  
  3983. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Google%20Web%20Toolkit%202">Google Web Toolkit 2</a>  
  3984. <span class="label-count" dir="ltr">(1)</span>  
  3985. </span>  
  3986. <span class="label-size label-size-1">  
  3987. <a dir="ltr" href="http://vermus.blogspot.com/search/label/HABDroid">HABDroid</a>  
  3988. <span class="label-count" dir="ltr">(1)</span>  
  3989. </span>  
  3990. <span class="label-size label-size-1">  
  3991. <a dir="ltr" href="http://vermus.blogspot.com/search/label/KDiff3">KDiff3</a>  
  3992. <span class="label-count" dir="ltr">(1)</span>  
  3993. </span>  
  3994. <span class="label-size label-size-1">  
  3995. <a dir="ltr" href="http://vermus.blogspot.com/search/label/LockHunter">LockHunter</a>  
  3996. <span class="label-count" dir="ltr">(1)</span>  
  3997. </span>  
  3998. <span class="label-size label-size-1">  
  3999. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Nhibernate">Nhibernate</a>  
  4000. <span class="label-count" dir="ltr">(1)</span>  
  4001. </span>  
  4002. <span class="label-size label-size-1">  
  4003. <a dir="ltr" href="http://vermus.blogspot.com/search/label/ORM">ORM</a>  
  4004. <span class="label-count" dir="ltr">(1)</span>  
  4005. </span>  
  4006. <span class="label-size label-size-1">  
  4007. <a dir="ltr" href="http://vermus.blogspot.com/search/label/OpenDNS">OpenDNS</a>  
  4008. <span class="label-count" dir="ltr">(1)</span>  
  4009. </span>  
  4010. <span class="label-size label-size-1">  
  4011. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Phusion%20Passenger">Phusion Passenger</a>  
  4012. <span class="label-count" dir="ltr">(1)</span>  
  4013. </span>  
  4014. <span class="label-size label-size-1">  
  4015. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Process%20Explorer">Process Explorer</a>  
  4016. <span class="label-count" dir="ltr">(1)</span>  
  4017. </span>  
  4018. <span class="label-size label-size-1">  
  4019. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Puma.NET">Puma.NET</a>  
  4020. <span class="label-count" dir="ltr">(1)</span>  
  4021. </span>  
  4022. <span class="label-size label-size-1">  
  4023. <a dir="ltr" href="http://vermus.blogspot.com/search/label/PyDev">PyDev</a>  
  4024. <span class="label-count" dir="ltr">(1)</span>  
  4025. </span>  
  4026. <span class="label-size label-size-1">  
  4027. <a dir="ltr" href="http://vermus.blogspot.com/search/label/REST">REST</a>  
  4028. <span class="label-count" dir="ltr">(1)</span>  
  4029. </span>  
  4030. <span class="label-size label-size-1">  
  4031. <a dir="ltr" href="http://vermus.blogspot.com/search/label/RequestContext">RequestContext</a>  
  4032. <span class="label-count" dir="ltr">(1)</span>  
  4033. </span>  
  4034. <span class="label-size label-size-1">  
  4035. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Restlet%20Framework">Restlet Framework</a>  
  4036. <span class="label-count" dir="ltr">(1)</span>  
  4037. </span>  
  4038. <span class="label-size label-size-1">  
  4039. <a dir="ltr" href="http://vermus.blogspot.com/search/label/SQL">SQL</a>  
  4040. <span class="label-count" dir="ltr">(1)</span>  
  4041. </span>  
  4042. <span class="label-size label-size-1">  
  4043. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Sonoff">Sonoff</a>  
  4044. <span class="label-count" dir="ltr">(1)</span>  
  4045. </span>  
  4046. <span class="label-size label-size-1">  
  4047. <a dir="ltr" href="http://vermus.blogspot.com/search/label/South">South</a>  
  4048. <span class="label-count" dir="ltr">(1)</span>  
  4049. </span>  
  4050. <span class="label-size label-size-1">  
  4051. <a dir="ltr" href="http://vermus.blogspot.com/search/label/UNetbootin">UNetbootin</a>  
  4052. <span class="label-count" dir="ltr">(1)</span>  
  4053. </span>  
  4054. <span class="label-size label-size-1">  
  4055. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Vinagre">Vinagre</a>  
  4056. <span class="label-count" dir="ltr">(1)</span>  
  4057. </span>  
  4058. <span class="label-size label-size-1">  
  4059. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Visual%20Studio">Visual Studio</a>  
  4060. <span class="label-count" dir="ltr">(1)</span>  
  4061. </span>  
  4062. <span class="label-size label-size-1">  
  4063. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Visual%20Studio%202005">Visual Studio 2005</a>  
  4064. <span class="label-count" dir="ltr">(1)</span>  
  4065. </span>  
  4066. <span class="label-size label-size-1">  
  4067. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Web">Web</a>  
  4068. <span class="label-count" dir="ltr">(1)</span>  
  4069. </span>  
  4070. <span class="label-size label-size-1">  
  4071. <a dir="ltr" href="http://vermus.blogspot.com/search/label/Xiaomi%20Gateway">Xiaomi Gateway</a>  
  4072. <span class="label-count" dir="ltr">(1)</span>  
  4073. </span>  
  4074. <span class="label-size label-size-1">  
  4075. <a dir="ltr" href="http://vermus.blogspot.com/search/label/amd64">amd64</a>  
  4076. <span class="label-count" dir="ltr">(1)</span>  
  4077. </span>  
  4078. <span class="label-size label-size-1">  
  4079. <a dir="ltr" href="http://vermus.blogspot.com/search/label/apcupsd">apcupsd</a>  
  4080. <span class="label-count" dir="ltr">(1)</span>  
  4081. </span>  
  4082. <span class="label-size label-size-1">  
  4083. <a dir="ltr" href="http://vermus.blogspot.com/search/label/asus%20eee%20pc">asus eee pc</a>  
  4084. <span class="label-count" dir="ltr">(1)</span>  
  4085. </span>  
  4086. <span class="label-size label-size-1">  
  4087. <a dir="ltr" href="http://vermus.blogspot.com/search/label/attrs">attrs</a>  
  4088. <span class="label-count" dir="ltr">(1)</span>  
  4089. </span>  
  4090. <span class="label-size label-size-1">  
  4091. <a dir="ltr" href="http://vermus.blogspot.com/search/label/backup">backup</a>  
  4092. <span class="label-count" dir="ltr">(1)</span>  
  4093. </span>  
  4094. <span class="label-size label-size-1">  
  4095. <a dir="ltr" href="http://vermus.blogspot.com/search/label/bash">bash</a>  
  4096. <span class="label-count" dir="ltr">(1)</span>  
  4097. </span>  
  4098. <span class="label-size label-size-1">  
  4099. <a dir="ltr" href="http://vermus.blogspot.com/search/label/blender">blender</a>  
  4100. <span class="label-count" dir="ltr">(1)</span>  
  4101. </span>  
  4102. <span class="label-size label-size-1">  
  4103. <a dir="ltr" href="http://vermus.blogspot.com/search/label/chromebug">chromebug</a>  
  4104. <span class="label-count" dir="ltr">(1)</span>  
  4105. </span>  
  4106. <span class="label-size label-size-1">  
  4107. <a dir="ltr" href="http://vermus.blogspot.com/search/label/csh">csh</a>  
  4108. <span class="label-count" dir="ltr">(1)</span>  
  4109. </span>  
  4110. <span class="label-size label-size-1">  
  4111. <a dir="ltr" href="http://vermus.blogspot.com/search/label/debug">debug</a>  
  4112. <span class="label-count" dir="ltr">(1)</span>  
  4113. </span>  
  4114. <span class="label-size label-size-1">  
  4115. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-annoying">django-annoying</a>  
  4116. <span class="label-count" dir="ltr">(1)</span>  
  4117. </span>  
  4118. <span class="label-size label-size-1">  
  4119. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-compressor">django-compressor</a>  
  4120. <span class="label-count" dir="ltr">(1)</span>  
  4121. </span>  
  4122. <span class="label-size label-size-1">  
  4123. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-json-rpc">django-json-rpc</a>  
  4124. <span class="label-count" dir="ltr">(1)</span>  
  4125. </span>  
  4126. <span class="label-size label-size-1">  
  4127. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-maintenancemode">django-maintenancemode</a>  
  4128. <span class="label-count" dir="ltr">(1)</span>  
  4129. </span>  
  4130. <span class="label-size label-size-1">  
  4131. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-messages">django-messages</a>  
  4132. <span class="label-count" dir="ltr">(1)</span>  
  4133. </span>  
  4134. <span class="label-size label-size-1">  
  4135. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-notification">django-notification</a>  
  4136. <span class="label-count" dir="ltr">(1)</span>  
  4137. </span>  
  4138. <span class="label-size label-size-1">  
  4139. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-publicauth">django-publicauth</a>  
  4140. <span class="label-count" dir="ltr">(1)</span>  
  4141. </span>  
  4142. <span class="label-size label-size-1">  
  4143. <a dir="ltr" href="http://vermus.blogspot.com/search/label/django-registration">django-registration</a>  
  4144. <span class="label-count" dir="ltr">(1)</span>  
  4145. </span>  
  4146. <span class="label-size label-size-1">  
  4147. <a dir="ltr" href="http://vermus.blogspot.com/search/label/dns">dns</a>  
  4148. <span class="label-count" dir="ltr">(1)</span>  
  4149. </span>  
  4150. <span class="label-size label-size-1">  
  4151. <a dir="ltr" href="http://vermus.blogspot.com/search/label/epel">epel</a>  
  4152. <span class="label-count" dir="ltr">(1)</span>  
  4153. </span>  
  4154. <span class="label-size label-size-1">  
  4155. <a dir="ltr" href="http://vermus.blogspot.com/search/label/etch">etch</a>  
  4156. <span class="label-count" dir="ltr">(1)</span>  
  4157. </span>  
  4158. <span class="label-size label-size-1">  
  4159. <a dir="ltr" href="http://vermus.blogspot.com/search/label/fabric">fabric</a>  
  4160. <span class="label-count" dir="ltr">(1)</span>  
  4161. </span>  
  4162. <span class="label-size label-size-1">  
  4163. <a dir="ltr" href="http://vermus.blogspot.com/search/label/field">field</a>  
  4164. <span class="label-count" dir="ltr">(1)</span>  
  4165. </span>  
  4166. <span class="label-size label-size-1">  
  4167. <a dir="ltr" href="http://vermus.blogspot.com/search/label/file%20manager">file manager</a>  
  4168. <span class="label-count" dir="ltr">(1)</span>  
  4169. </span>  
  4170. <span class="label-size label-size-1">  
  4171. <a dir="ltr" href="http://vermus.blogspot.com/search/label/firebug">firebug</a>  
  4172. <span class="label-count" dir="ltr">(1)</span>  
  4173. </span>  
  4174. <span class="label-size label-size-1">  
  4175. <a dir="ltr" href="http://vermus.blogspot.com/search/label/flash">flash</a>  
  4176. <span class="label-count" dir="ltr">(1)</span>  
  4177. </span>  
  4178. <span class="label-size label-size-1">  
  4179. <a dir="ltr" href="http://vermus.blogspot.com/search/label/foobar2000">foobar2000</a>  
  4180. <span class="label-count" dir="ltr">(1)</span>  
  4181. </span>  
  4182. <span class="label-size label-size-1">  
  4183. <a dir="ltr" href="http://vermus.blogspot.com/search/label/formsets">formsets</a>  
  4184. <span class="label-count" dir="ltr">(1)</span>  
  4185. </span>  
  4186. <span class="label-size label-size-1">  
  4187. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gitextensions">gitextensions</a>  
  4188. <span class="label-count" dir="ltr">(1)</span>  
  4189. </span>  
  4190. <span class="label-size label-size-1">  
  4191. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gitosis">gitosis</a>  
  4192. <span class="label-count" dir="ltr">(1)</span>  
  4193. </span>  
  4194. <span class="label-size label-size-1">  
  4195. <a dir="ltr" href="http://vermus.blogspot.com/search/label/googlefight.com">googlefight.com</a>  
  4196. <span class="label-count" dir="ltr">(1)</span>  
  4197. </span>  
  4198. <span class="label-size label-size-1">  
  4199. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gpg">gpg</a>  
  4200. <span class="label-count" dir="ltr">(1)</span>  
  4201. </span>  
  4202. <span class="label-size label-size-1">  
  4203. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gui">gui</a>  
  4204. <span class="label-count" dir="ltr">(1)</span>  
  4205. </span>  
  4206. <span class="label-size label-size-1">  
  4207. <a dir="ltr" href="http://vermus.blogspot.com/search/label/gwt-json-rpc">gwt-json-rpc</a>  
  4208. <span class="label-count" dir="ltr">(1)</span>  
  4209. </span>  
  4210. <span class="label-size label-size-1">  
  4211. <a dir="ltr" href="http://vermus.blogspot.com/search/label/img">img</a>  
  4212. <span class="label-count" dir="ltr">(1)</span>  
  4213. </span>  
  4214. <span class="label-size label-size-1">  
  4215. <a dir="ltr" href="http://vermus.blogspot.com/search/label/inclusion_tag">inclusion_tag</a>  
  4216. <span class="label-count" dir="ltr">(1)</span>  
  4217. </span>  
  4218. <span class="label-size label-size-1">  
  4219. <a dir="ltr" href="http://vermus.blogspot.com/search/label/ip-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B8%D1%8F">ip-телефония</a>  
  4220. <span class="label-count" dir="ltr">(1)</span>  
  4221. </span>  
  4222. <span class="label-size label-size-1">  
  4223. <a dir="ltr" href="http://vermus.blogspot.com/search/label/izmenimsya.ru">izmenimsya.ru</a>  
  4224. <span class="label-count" dir="ltr">(1)</span>  
  4225. </span>  
  4226. <span class="label-size label-size-1">  
  4227. <a dir="ltr" href="http://vermus.blogspot.com/search/label/jabber">jabber</a>  
  4228. <span class="label-count" dir="ltr">(1)</span>  
  4229. </span>  
  4230. <span class="label-size label-size-1">  
  4231. <a dir="ltr" href="http://vermus.blogspot.com/search/label/kubuntu">kubuntu</a>  
  4232. <span class="label-count" dir="ltr">(1)</span>  
  4233. </span>  
  4234. <span class="label-size label-size-1">  
  4235. <a dir="ltr" href="http://vermus.blogspot.com/search/label/ldap">ldap</a>  
  4236. <span class="label-count" dir="ltr">(1)</span>  
  4237. </span>  
  4238. <span class="label-size label-size-1">  
  4239. <a dir="ltr" href="http://vermus.blogspot.com/search/label/lenny">lenny</a>  
  4240. <span class="label-count" dir="ltr">(1)</span>  
  4241. </span>  
  4242. <span class="label-size label-size-1">  
  4243. <a dir="ltr" href="http://vermus.blogspot.com/search/label/lighttpd">lighttpd</a>  
  4244. <span class="label-count" dir="ltr">(1)</span>  
  4245. </span>  
  4246. <span class="label-size label-size-1">  
  4247. <a dir="ltr" href="http://vermus.blogspot.com/search/label/mi%20home">mi home</a>  
  4248. <span class="label-count" dir="ltr">(1)</span>  
  4249. </span>  
  4250. <span class="label-size label-size-1">  
  4251. <a dir="ltr" href="http://vermus.blogspot.com/search/label/mod_rails">mod_rails</a>  
  4252. <span class="label-count" dir="ltr">(1)</span>  
  4253. </span>  
  4254. <span class="label-size label-size-1">  
  4255. <a dir="ltr" href="http://vermus.blogspot.com/search/label/modelform">modelform</a>  
  4256. <span class="label-count" dir="ltr">(1)</span>  
  4257. </span>  
  4258. <span class="label-size label-size-1">  
  4259. <a dir="ltr" href="http://vermus.blogspot.com/search/label/modelforms">modelforms</a>  
  4260. <span class="label-count" dir="ltr">(1)</span>  
  4261. </span>  
  4262. <span class="label-size label-size-1">  
  4263. <a dir="ltr" href="http://vermus.blogspot.com/search/label/modules">modules</a>  
  4264. <span class="label-count" dir="ltr">(1)</span>  
  4265. </span>  
  4266. <span class="label-size label-size-1">  
  4267. <a dir="ltr" href="http://vermus.blogspot.com/search/label/mprime">mprime</a>  
  4268. <span class="label-count" dir="ltr">(1)</span>  
  4269. </span>  
  4270. <span class="label-size label-size-1">  
  4271. <a dir="ltr" href="http://vermus.blogspot.com/search/label/mylyn">mylyn</a>  
  4272. <span class="label-count" dir="ltr">(1)</span>  
  4273. </span>  
  4274. <span class="label-size label-size-1">  
  4275. <a dir="ltr" href="http://vermus.blogspot.com/search/label/mysql">mysql</a>  
  4276. <span class="label-count" dir="ltr">(1)</span>  
  4277. </span>  
  4278. <span class="label-size label-size-1">  
  4279. <a dir="ltr" href="http://vermus.blogspot.com/search/label/n800">n800</a>  
  4280. <span class="label-count" dir="ltr">(1)</span>  
  4281. </span>  
  4282. <span class="label-size label-size-1">  
  4283. <a dir="ltr" href="http://vermus.blogspot.com/search/label/network%20manager">network manager</a>  
  4284. <span class="label-count" dir="ltr">(1)</span>  
  4285. </span>  
  4286. <span class="label-size label-size-1">  
  4287. <a dir="ltr" href="http://vermus.blogspot.com/search/label/now%20playing">now playing</a>  
  4288. <span class="label-count" dir="ltr">(1)</span>  
  4289. </span>  
  4290. <span class="label-size label-size-1">  
  4291. <a dir="ltr" href="http://vermus.blogspot.com/search/label/patterns">patterns</a>  
  4292. <span class="label-count" dir="ltr">(1)</span>  
  4293. </span>  
  4294. <span class="label-size label-size-1">  
  4295. <a dir="ltr" href="http://vermus.blogspot.com/search/label/pidgin">pidgin</a>  
  4296. <span class="label-count" dir="ltr">(1)</span>  
  4297. </span>  
  4298. <span class="label-size label-size-1">  
  4299. <a dir="ltr" href="http://vermus.blogspot.com/search/label/pidgin-musictracker">pidgin-musictracker</a>  
  4300. <span class="label-count" dir="ltr">(1)</span>  
  4301. </span>  
  4302. <span class="label-size label-size-1">  
  4303. <a dir="ltr" href="http://vermus.blogspot.com/search/label/python-mssql">python-mssql</a>  
  4304. <span class="label-count" dir="ltr">(1)</span>  
  4305. </span>  
  4306. <span class="label-size label-size-1">  
  4307. <a dir="ltr" href="http://vermus.blogspot.com/search/label/queryset">queryset</a>  
  4308. <span class="label-count" dir="ltr">(1)</span>  
  4309. </span>  
  4310. <span class="label-size label-size-1">  
  4311. <a dir="ltr" href="http://vermus.blogspot.com/search/label/quickstart">quickstart</a>  
  4312. <span class="label-count" dir="ltr">(1)</span>  
  4313. </span>  
  4314. <span class="label-size label-size-1">  
  4315. <a dir="ltr" href="http://vermus.blogspot.com/search/label/re">re</a>  
  4316. <span class="label-count" dir="ltr">(1)</span>  
  4317. </span>  
  4318. <span class="label-size label-size-1">  
  4319. <a dir="ltr" href="http://vermus.blogspot.com/search/label/regex">regex</a>  
  4320. <span class="label-count" dir="ltr">(1)</span>  
  4321. </span>  
  4322. <span class="label-size label-size-1">  
  4323. <a dir="ltr" href="http://vermus.blogspot.com/search/label/render">render</a>  
  4324. <span class="label-count" dir="ltr">(1)</span>  
  4325. </span>  
  4326. <span class="label-size label-size-1">  
  4327. <a dir="ltr" href="http://vermus.blogspot.com/search/label/rutorrent">rutorrent</a>  
  4328. <span class="label-count" dir="ltr">(1)</span>  
  4329. </span>  
  4330. <span class="label-size label-size-1">  
  4331. <a dir="ltr" href="http://vermus.blogspot.com/search/label/scrolling%20position">scrolling position</a>  
  4332. <span class="label-count" dir="ltr">(1)</span>  
  4333. </span>  
  4334. <span class="label-size label-size-1">  
  4335. <a dir="ltr" href="http://vermus.blogspot.com/search/label/skydrive">skydrive</a>  
  4336. <span class="label-count" dir="ltr">(1)</span>  
  4337. </span>  
  4338. <span class="label-size label-size-1">  
  4339. <a dir="ltr" href="http://vermus.blogspot.com/search/label/squeeze">squeeze</a>  
  4340. <span class="label-count" dir="ltr">(1)</span>  
  4341. </span>  
  4342. <span class="label-size label-size-1">  
  4343. <a dir="ltr" href="http://vermus.blogspot.com/search/label/sysbench">sysbench</a>  
  4344. <span class="label-count" dir="ltr">(1)</span>  
  4345. </span>  
  4346. <span class="label-size label-size-1">  
  4347. <a dir="ltr" href="http://vermus.blogspot.com/search/label/tar">tar</a>  
  4348. <span class="label-count" dir="ltr">(1)</span>  
  4349. </span>  
  4350. <span class="label-size label-size-1">  
  4351. <a dir="ltr" href="http://vermus.blogspot.com/search/label/template">template</a>  
  4352. <span class="label-count" dir="ltr">(1)</span>  
  4353. </span>  
  4354. <span class="label-size label-size-1">  
  4355. <a dir="ltr" href="http://vermus.blogspot.com/search/label/traceback">traceback</a>  
  4356. <span class="label-count" dir="ltr">(1)</span>  
  4357. </span>  
  4358. <span class="label-size label-size-1">  
  4359. <a dir="ltr" href="http://vermus.blogspot.com/search/label/udf">udf</a>  
  4360. <span class="label-count" dir="ltr">(1)</span>  
  4361. </span>  
  4362. <span class="label-size label-size-1">  
  4363. <a dir="ltr" href="http://vermus.blogspot.com/search/label/udftools">udftools</a>  
  4364. <span class="label-count" dir="ltr">(1)</span>  
  4365. </span>  
  4366. <span class="label-size label-size-1">  
  4367. <a dir="ltr" href="http://vermus.blogspot.com/search/label/unlock">unlock</a>  
  4368. <span class="label-count" dir="ltr">(1)</span>  
  4369. </span>  
  4370. <span class="label-size label-size-1">  
  4371. <a dir="ltr" href="http://vermus.blogspot.com/search/label/utils">utils</a>  
  4372. <span class="label-count" dir="ltr">(1)</span>  
  4373. </span>  
  4374. <span class="label-size label-size-1">  
  4375. <a dir="ltr" href="http://vermus.blogspot.com/search/label/view">view</a>  
  4376. <span class="label-count" dir="ltr">(1)</span>  
  4377. </span>  
  4378. <span class="label-size label-size-1">  
  4379. <a dir="ltr" href="http://vermus.blogspot.com/search/label/virtual%20server">virtual server</a>  
  4380. <span class="label-count" dir="ltr">(1)</span>  
  4381. </span>  
  4382. <span class="label-size label-size-1">  
  4383. <a dir="ltr" href="http://vermus.blogspot.com/search/label/vnc">vnc</a>  
  4384. <span class="label-count" dir="ltr">(1)</span>  
  4385. </span>  
  4386. <span class="label-size label-size-1">  
  4387. <a dir="ltr" href="http://vermus.blogspot.com/search/label/who%20lock%20me">who lock me</a>  
  4388. <span class="label-count" dir="ltr">(1)</span>  
  4389. </span>  
  4390. <span class="label-size label-size-1">  
  4391. <a dir="ltr" href="http://vermus.blogspot.com/search/label/wicd">wicd</a>  
  4392. <span class="label-count" dir="ltr">(1)</span>  
  4393. </span>  
  4394. <span class="label-size label-size-1">  
  4395. <a dir="ltr" href="http://vermus.blogspot.com/search/label/widget">widget</a>  
  4396. <span class="label-count" dir="ltr">(1)</span>  
  4397. </span>  
  4398. <span class="label-size label-size-1">  
  4399. <a dir="ltr" href="http://vermus.blogspot.com/search/label/wsgi">wsgi</a>  
  4400. <span class="label-count" dir="ltr">(1)</span>  
  4401. </span>  
  4402. <span class="label-size label-size-1">  
  4403. <a dir="ltr" href="http://vermus.blogspot.com/search/label/yandex-disk">yandex-disk</a>  
  4404. <span class="label-count" dir="ltr">(1)</span>  
  4405. </span>  
  4406. <span class="label-size label-size-1">  
  4407. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%D0%BD%D0%B0%D0%B1%D0%BB%D1%8E%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5">Видеонаблюдение</a>  
  4408. <span class="label-count" dir="ltr">(1)</span>  
  4409. </span>  
  4410. <span class="label-size label-size-1">  
  4411. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%9B%D0%A3%D0%A2">ЛУТ</a>  
  4412. <span class="label-count" dir="ltr">(1)</span>  
  4413. </span>  
  4414. <span class="label-size label-size-1">  
  4415. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B0%D1%80%D1%85%D0%B8%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">архивирование</a>  
  4416. <span class="label-count" dir="ltr">(1)</span>  
  4417. </span>  
  4418. <span class="label-size label-size-1">  
  4419. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C">безопасность</a>  
  4420. <span class="label-count" dir="ltr">(1)</span>  
  4421. </span>  
  4422. <span class="label-size label-size-1">  
  4423. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B1%D0%B5%D0%BA%D0%B0%D0%BF">бекап</a>  
  4424. <span class="label-count" dir="ltr">(1)</span>  
  4425. </span>  
  4426. <span class="label-size label-size-1">  
  4427. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B1%D0%BB%D0%BE%D0%B3%D0%B8">блоги</a>  
  4428. <span class="label-count" dir="ltr">(1)</span>  
  4429. </span>  
  4430. <span class="label-size label-size-1">  
  4431. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B1%D0%BE%D0%BB%D1%8C">боль</a>  
  4432. <span class="label-count" dir="ltr">(1)</span>  
  4433. </span>  
  4434. <span class="label-size label-size-1">  
  4435. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%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">виртуализация</a>  
  4436. <span class="label-count" dir="ltr">(1)</span>  
  4437. </span>  
  4438. <span class="label-size label-size-1">  
  4439. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B3%D0%B8%D0%BA%D1%81%D1%82%D0%B2%D0%BE">гикство</a>  
  4440. <span class="label-count" dir="ltr">(1)</span>  
  4441. </span>  
  4442. <span class="label-size label-size-1">  
  4443. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B7%D0%B0%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BE%D0%BA">заработок</a>  
  4444. <span class="label-count" dir="ltr">(1)</span>  
  4445. </span>  
  4446. <span class="label-size label-size-1">  
  4447. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D0%BD%D0%B5%D1%82">интеренет</a>  
  4448. <span class="label-count" dir="ltr">(1)</span>  
  4449. </span>  
  4450. <span class="label-size label-size-1">  
  4451. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D0%BE%D0%B5">интересное</a>  
  4452. <span class="label-count" dir="ltr">(1)</span>  
  4453. </span>  
  4454. <span class="label-size label-size-1">  
  4455. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82">интернет</a>  
  4456. <span class="label-count" dir="ltr">(1)</span>  
  4457. </span>  
  4458. <span class="label-size label-size-1">  
  4459. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%B8%D1%81%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B5%20%D0%B6%D0%B5%D0%BD%D1%89%D0%B8%D0%BD%D1%8B">истеричные женщины</a>  
  4460. <span class="label-count" dir="ltr">(1)</span>  
  4461. </span>  
  4462. <span class="label-size label-size-1">  
  4463. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D0%BA%D0%B0">классика</a>  
  4464. <span class="label-count" dir="ltr">(1)</span>  
  4465. </span>  
  4466. <span class="label-size label-size-1">  
  4467. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D1%8B">компьютеры</a>  
  4468. <span class="label-count" dir="ltr">(1)</span>  
  4469. </span>  
  4470. <span class="label-size label-size-1">  
  4471. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BC%D0%B8%D1%80%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2">мир объектов</a>  
  4472. <span class="label-count" dir="ltr">(1)</span>  
  4473. </span>  
  4474. <span class="label-size label-size-1">  
  4475. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0">музыка</a>  
  4476. <span class="label-count" dir="ltr">(1)</span>  
  4477. </span>  
  4478. <span class="label-size label-size-1">  
  4479. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B6%D0%B0%D0%BD%D1%80%D1%8B%20%D0%B8%20%D1%81%D1%82%D0%B8%D0%BB%D0%B8">музыкальные жанры и стили</a>  
  4480. <span class="label-count" dir="ltr">(1)</span>  
  4481. </span>  
  4482. <span class="label-size label-size-1">  
  4483. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BC%D1%8B%D1%81%D0%BB%D0%B8">мысли</a>  
  4484. <span class="label-count" dir="ltr">(1)</span>  
  4485. </span>  
  4486. <span class="label-size label-size-1">  
  4487. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BD%D0%B0%D1%86%D0%B8%D0%B7%D0%BC">нацизм</a>  
  4488. <span class="label-count" dir="ltr">(1)</span>  
  4489. </span>  
  4490. <span class="label-size label-size-1">  
  4491. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BD%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC">национализм</a>  
  4492. <span class="label-count" dir="ltr">(1)</span>  
  4493. </span>  
  4494. <span class="label-size label-size-1">  
  4495. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BD%D0%B5%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%BD%D0%BA%D0%B8">непонятнки</a>  
  4496. <span class="label-count" dir="ltr">(1)</span>  
  4497. </span>  
  4498. <span class="label-size label-size-1">  
  4499. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5">объявление</a>  
  4500. <span class="label-count" dir="ltr">(1)</span>  
  4501. </span>  
  4502. <span class="label-size label-size-1">  
  4503. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BE%D1%81%D0%B5%D0%BD%D1%8C">осень</a>  
  4504. <span class="label-count" dir="ltr">(1)</span>  
  4505. </span>  
  4506. <span class="label-size label-size-1">  
  4507. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BE%D1%84%D1%84%D1%82%D0%BE%D0%BF%D0%B8%D0%BA">оффтопик</a>  
  4508. <span class="label-count" dir="ltr">(1)</span>  
  4509. </span>  
  4510. <span class="label-size label-size-1">  
  4511. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BE%D1%87%D1%83%D0%BC%D0%B5%D0%BB%D1%8B%D0%B5%20%D1%80%D1%83%D1%87%D0%BA%D0%B8">очумелые ручки</a>  
  4512. <span class="label-count" dir="ltr">(1)</span>  
  4513. </span>  
  4514. <span class="label-size label-size-1">  
  4515. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE">полезно</a>  
  4516. <span class="label-count" dir="ltr">(1)</span>  
  4517. </span>  
  4518. <span class="label-size label-size-1">  
  4519. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">программирование</a>  
  4520. <span class="label-count" dir="ltr">(1)</span>  
  4521. </span>  
  4522. <span class="label-size label-size-1">  
  4523. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D0%B5%D0%BE">сео</a>  
  4524. <span class="label-count" dir="ltr">(1)</span>  
  4525. </span>  
  4526. <span class="label-size label-size-1">  
  4527. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C">скачать</a>  
  4528. <span class="label-count" dir="ltr">(1)</span>  
  4529. </span>  
  4530. <span class="label-size label-size-1">  
  4531. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D0%BC%D1%8B%D1%81%D0%BB%20%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8">смысл жизни</a>  
  4532. <span class="label-count" dir="ltr">(1)</span>  
  4533. </span>  
  4534. <span class="label-size label-size-1">  
  4535. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%81%D0%BE%D1%84%D1%82">софт</a>  
  4536. <span class="label-count" dir="ltr">(1)</span>  
  4537. </span>  
  4538. <span class="label-size label-size-1">  
  4539. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%82%D0%BE%D0%BB%D0%BA%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F">толкования</a>  
  4540. <span class="label-count" dir="ltr">(1)</span>  
  4541. </span>  
  4542. <span class="label-size label-size-1">  
  4543. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0">файловая система</a>  
  4544. <span class="label-count" dir="ltr">(1)</span>  
  4545. </span>  
  4546. <span class="label-size label-size-1">  
  4547. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80%D1%8B">файловые менеджеры</a>  
  4548. <span class="label-count" dir="ltr">(1)</span>  
  4549. </span>  
  4550. <span class="label-size label-size-1">  
  4551. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5">хранилище</a>  
  4552. <span class="label-count" dir="ltr">(1)</span>  
  4553. </span>  
  4554. <span class="label-size label-size-1">  
  4555. <a dir="ltr" href="http://vermus.blogspot.com/search/label/%D1%86%D0%B8%D1%82%D0%B0%D1%82%D1%8B">цитаты</a>  
  4556. <span class="label-count" dir="ltr">(1)</span>  
  4557. </span>  
  4558. <div class="clear"></div>  
  4559. </div>  
  4560. </div><div class="widget HTML" data-version="1" id="HTML1">  
  4561. <div class="widget-content">  
  4562. <style>  
  4563. .dp-highlighter { font-family: "Consolas""Courier New", Courier, mono, serif; font-size: 12px; background-color: #E7E5DC; width: 99%; overflow: auto; margin: 18px 0 18px 0 !important; padding: 1px 0 0 0 !important; }  
  4564. .dp-highlighter ol, .dp-highlighter ol li, .dp-highlighter ol li span { margin: 0; padding: 0; border: none; }  
  4565. .dp-highlighter a, .dp-highlighter a:hover { background: none; border: none; padding: 0; margin: 0; }  
  4566. .dp-highlighter .bar { padding: 0 0 0 45px; }  
  4567. .dp-highlighter.collapsed .bar, .dp-highlighter.nogutter .bar { padding-left: 0px; }  
  4568. .dp-highlighter ol { list-style: decimal; background-color: #fff; margin: 0px 0px 1px 45px !important; padding: 0px;color: #5C5C5C; }  
  4569. .dp-highlighter.nogutter ol, .dp-highlighter.nogutter ol li { list-style: none !important; margin-left: 0px !important; }  
  4570. .dp-highlighter ol li, .dp-highlighter .columns div { background: none; list-style: decimal-leading-zero; list-style-position: outside !important; border-left: 3px solid #6CE26C; background-color: #F8F8F8; color: #5C5C5C; padding: 0 3px 0 10px !important; margin: 0 !important; line-height: 14px; }  
  4571. .dp-highlighter.nogutter ol li, .dp-highlighter.nogutter .columns div { border: 0; }  
  4572. .dp-highlighter .columns { background-color: #F8F8F8; color: gray; overflow: hidden; width: 100%; }  
  4573. .dp-highlighter .columns div { padding-bottom: 5px; }  
  4574. .dp-highlighter ol li.alt { background-color: #FFF; color: inherit; }  
  4575. .dp-highlighter ol li span { color: black; background-color: inherit; }  
  4576. .dp-highlighter.collapsed ol { margin: 0px; }  
  4577. .dp-highlighter.collapsed ol li { display: none; }  
  4578. .dp-highlighter.printing { border: none; }  
  4579. .dp-highlighter.printing .tools { display: none !important; }  
  4580. .dp-highlighter.printing li { display: list-item !important; }  
  4581. .dp-highlighter .tools { padding: 3px 8px 3px 10px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; padding-bottom: 10px; border-left: 3px solid #6CE26C; }  
  4582. .dp-highlighter.nogutter .tools { border-left: 0; }  
  4583. .dp-highlighter.collapsed .tools { border-bottom: 0; }  
  4584. .dp-highlighter .tools a { font-size: 9px; color: #a0a0a0; background-color: inherit; text-decoration: none; margin-right: 10px; }  
  4585. .dp-highlighter .tools a:hover { color: red; background-color: inherit; text-decoration: underline; }  
  4586. .dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; }  
  4587. .dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; }  
  4588. .dp-about td { padding: 10px; vertical-align: top; }  
  4589. .dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; }  
  4590. .dp-about .title { color: red; background-color: inherit; font-weight: bold; }  
  4591. .dp-about .para { margin: 0 0 4px 0; }  
  4592. .dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; }  
  4593. .dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; }  
  4594. .dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; }  
  4595. .dp-highlighter .string { color: blue; background-color: inherit; }  
  4596. .dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; }  
  4597. .dp-highlighter .preprocessor { color: gray; background-color: inherit; }  
  4598. </style>  
  4599. <script type="text/javascript"><!--  
  4600. // 1.5.1  
  4601. var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{AboutDialog:'<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/syntaxhighlighter</a></p>©2004-2007 Alex Gorbatchev.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'},ClipboardSwf:null,Version:'1.5.1'}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:'+ expand source',check:function(highlighter){return highlighter.collapse;},func:function(sender,highlighter)  
  4602. {sender.parentNode.removeChild(sender);highlighter.div.className=highlighter.div.className.replace('collapsed','');}},ViewSource:{label:'view plain',func:function(sender,highlighter)  
  4603. {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<');var wnd=window.open('','_blank','width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0');wnd.document.write('<textarea style="width:99%;height:99%">'+code+'</textarea>');wnd.document.close();}},CopyToClipboard:{label:'copy to clipboard',check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null;},func:function(sender,highlighter)  
  4604. {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');if(window.clipboardData)  
  4605. {window.clipboardData.setData('text',code);}  
  4606. else if(dp.sh.ClipboardSwf!=null)  
  4607. {var flashcopier=highlighter.flashCopier;if(flashcopier==null)  
  4608. {flashcopier=document.createElement('div');highlighter.flashCopier=flashcopier;highlighter.div.appendChild(flashcopier);}  
  4609. flashcopier.innerHTML='<embed src="'+dp.sh.ClipboardSwf+'" FlashVars="clipboard='+encodeURIComponent(code)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';}  
  4610. alert('The code is in your clipboard now');}},PrintSource:{label:'print',func:function(sender,highlighter)  
  4611. {var iframe=document.createElement('IFRAME');var doc=null;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write('<div class="'+highlighter.div.className.replace('collapsed','')+' printing">'+highlighter.div.innerHTML+'</div>');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();alert('Printing...');document.body.removeChild(iframe);}},About:{label:'?',func:function(highlighter)  
  4612. {var wnd=window.open('','_blank','dialog,width=300,height=150,scrollbars=0');var doc=wnd.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));doc.close();wnd.focus();}}};dp.sh.Toolbar.Create=function(highlighter)  
  4613. {var div=document.createElement('DIV');div.className='tools';for(var name in dp.sh.Toolbar.Commands)  
  4614. {var cmd=dp.sh.Toolbar.Commands[name];if(cmd.check!=null&&!cmd.check(highlighter))  
  4615. continue;div.innerHTML+='<a href="#" onclick="dp.sh.Toolbar.Command(\''+name+'\',this);return false;">'+cmd.label+'</a>';}  
  4616. return div;}  
  4617. dp.sh.Toolbar.Command=function(name,sender)  
  4618. {var n=sender;while(n!=null&&n.className.indexOf('dp-highlighter')==-1)  
  4619. n=n.parentNode;if(n!=null)  
  4620. dp.sh.Toolbar.Commands[name].func(sender,n.highlighter);}  
  4621. dp.sh.Utils.CopyStyles=function(destDoc,sourceDoc)  
  4622. {var links=sourceDoc.getElementsByTagName('link');for(var i=0;i<links.length;i++)  
  4623. if(links[i].rel.toLowerCase()=='stylesheet')  
  4624. destDoc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');}  
  4625. dp.sh.Utils.FixForBlogger=function(str)  
  4626. {return(dp.sh.isBloggerMode==true)?str.replace(/<br\s*\/?>|<br\s*\/?>/gi,'\n'):str;}  
  4627. dp.sh.RegexLib={MultiLineCComments:new RegExp('/\\*[\\s\\S]*?\\*/','gm'),SingleLineCComments:new RegExp('//.*$','gm'),SingleLinePerlComments:new RegExp('#.*$','gm'),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'",'g')};dp.sh.Match=function(value,index,css)  
  4628. {this.value=value;this.index=index;this.length=value.length;this.css=css;}  
  4629. dp.sh.Highlighter=function()  
  4630. {this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;}  
  4631. dp.sh.Highlighter.SortCallback=function(m1,m2)  
  4632. {if(m1.index<m2.index)  
  4633. return-1;else if(m1.index>m2.index)  
  4634. return 1;else  
  4635. {if(m1.length<m2.length)  
  4636. return-1;else if(m1.length>m2.length)  
  4637. return 1;}  
  4638. return 0;}  
  4639. dp.sh.Highlighter.prototype.CreateElement=function(name)  
  4640. {var result=document.createElement(name);result.highlighter=this;return result;}  
  4641. dp.sh.Highlighter.prototype.GetMatches=function(regex,css)  
  4642. {var index=0;var match=null;while((match=regex.exec(this.code))!=null)  
  4643. this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);}  
  4644. dp.sh.Highlighter.prototype.AddBit=function(str,css)  
  4645. {if(str==null||str.length==0)  
  4646. return;var span=this.CreateElement('SPAN');str=str.replace(/ /g,' ');str=str.replace(/</g,'<');str=str.replace(/\n/gm,'   
  4647. ');if(css!=null)  
  4648. {if((/br/gi).test(str))  
  4649. {var lines=str.split('   
  4650. ');for(var i=0;i<lines.length;i++)  
  4651. {span=this.CreateElement('SPAN');span.className=css;span.innerHTML=lines[i];this.div.appendChild(span);if(i+1<lines.length)  
  4652. this.div.appendChild(this.CreateElement('BR'));}}  
  4653. else  
  4654. {span.className=css;span.innerHTML=str;this.div.appendChild(span);}}  
  4655. else  
  4656. {span.innerHTML=str;this.div.appendChild(span);}}  
  4657. dp.sh.Highlighter.prototype.IsInside=function(match)  
  4658. {if(match==null||match.length==0)  
  4659. return false;for(var i=0;i<this.matches.length;i++)  
  4660. {var c=this.matches[i];if(c==null)  
  4661. continue;if((match.index>c.index)&&(match.index<c.index+c.length))  
  4662. return true;}  
  4663. return false;}  
  4664. dp.sh.Highlighter.prototype.ProcessRegexList=function()  
  4665. {for(var i=0;i<this.regexList.length;i++)  
  4666. this.GetMatches(this.regexList[i].regex,this.regexList[i].css);}  
  4667. dp.sh.Highlighter.prototype.ProcessSmartTabs=function(code)  
  4668. {var lines=code.split('\n');var result='';var tabSize=4;var tab='\t';function InsertSpaces(line,pos,count)  
  4669. {var left=line.substr(0,pos);var right=line.substr(pos+1,line.length);var spaces='';for(var i=0;i<count;i++)  
  4670. spaces+=' ';return left+spaces+right;}  
  4671. function ProcessLine(line,tabSize)  
  4672. {if(line.indexOf(tab)==-1)  
  4673. return line;var pos=0;while((pos=line.indexOf(tab))!=-1)  
  4674. {var spaces=tabSize-pos%tabSize;line=InsertSpaces(line,pos,spaces);}  
  4675. return line;}  
  4676. for(var i=0;i<lines.length;i++)  
  4677. result+=ProcessLine(lines[i],tabSize)+'\n';return result;}  
  4678. dp.sh.Highlighter.prototype.SwitchToList=function()  
  4679. {var html=this.div.innerHTML.replace(/<(br)\/?>/gi,'\n');var lines=html.split('\n');if(this.addControls==true)  
  4680. this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns)  
  4681. {var div=this.CreateElement('div');var columns=this.CreateElement('div');var showEvery=10;var i=1;while(i<=150)  
  4682. {if(i%showEvery==0)  
  4683. {div.innerHTML+=i;i+=(i+'').length;}  
  4684. else  
  4685. {div.innerHTML+='·';i++;}}  
  4686. columns.className='columns';columns.appendChild(div);this.bar.appendChild(columns);}  
  4687. for(var i=0,lineIndex=this.firstLine;i<lines.length-1;i++,lineIndex++)  
  4688. {var li=this.CreateElement('LI');var span=this.CreateElement('SPAN');li.className=(i%2==0)?'alt':'';span.innerHTML=lines[i]+' ';li.appendChild(span);this.ol.appendChild(li);}  
  4689. this.div.innerHTML='';}  
  4690. dp.sh.Highlighter.prototype.Highlight=function(code)  
  4691. {function Trim(str)  
  4692. {return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');}  
  4693. function Chop(str)  
  4694. {return str.replace(/\n*$/,'').replace(/^\n*/,'');}  
  4695. function Unindent(str)  
  4696. {var lines=dp.sh.Utils.FixForBlogger(str).split('\n');var indents=new Array();var regex=new RegExp('^\\s*','g');var min=1000;for(var i=0;i<lines.length&&min>0;i++)  
  4697. {if(Trim(lines[i]).length==0)  
  4698. continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0)  
  4699. min=Math.min(matches[0].length,min);}  
  4700. if(min>0)  
  4701. for(var i=0;i<lines.length;i++)  
  4702. lines[i]=lines[i].substr(min);return lines.join('\n');}  
  4703. function Copy(string,pos1,pos2)  
  4704. {return string.substr(pos1,pos2-pos1);}  
  4705. var pos=0;if(code==null)  
  4706. code='';this.originalCode=code;this.code=Chop(Unindent(code));this.div=this.CreateElement('DIV');this.bar=this.CreateElement('DIV');this.ol=this.CreateElement('OL');this.matches=new Array();this.div.className='dp-highlighter';this.div.highlighter=this;this.bar.className='bar';this.ol.start=this.firstLine;if(this.CssClass!=null)  
  4707. this.ol.className=this.CssClass;if(this.collapse)  
  4708. this.div.className+=' collapsed';if(this.noGutter)  
  4709. this.div.className+=' nogutter';if(this.tabsToSpaces==true)  
  4710. this.code=this.ProcessSmartTabs(this.code);this.ProcessRegexList();if(this.matches.length==0)  
  4711. {this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);return;}  
  4712. this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var i=0;i<this.matches.length;i++)  
  4713. if(this.IsInside(this.matches[i]))  
  4714. this.matches[i]=null;for(var i=0;i<this.matches.length;i++)  
  4715. {var match=this.matches[i];if(match==null||match.length==0)  
  4716. continue;this.AddBit(Copy(this.code,pos,match.index),null);this.AddBit(match.value,match.css);pos=match.index+match.length;}  
  4717. this.AddBit(this.code.substr(pos),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);}  
  4718. dp.sh.Highlighter.prototype.GetKeywords=function(str)  
  4719. {return'\\b'+str.replace(/ /g,'\\b|\\b')+'\\b';}  
  4720. dp.sh.BloggerMode=function()  
  4721. {dp.sh.isBloggerMode=true;}  
  4722. dp.sh.HighlightAll=function(name,showGutter,showControls,collapseAll,firstLine,showColumns)  
  4723. {function FindValue()  
  4724. {var a=arguments;for(var i=0;i<a.length;i++)  
  4725. {if(a[i]==null)  
  4726. continue;if(typeof(a[i])=='string'&&a[i]!='')  
  4727. return a[i]+'';if(typeof(a[i])=='object'&&a[i].value!='')  
  4728. return a[i].value+'';}  
  4729. return null;}  
  4730. function IsOptionSet(value,list)  
  4731. {for(var i=0;i<list.length;i++)  
  4732. if(list[i]==value)  
  4733. return true;return false;}  
  4734. function GetOptionValue(name,list,defaultValue)  
  4735. {var regex=new RegExp('^'+name+'\\[(\\w+)\\]$','gi');var matches=null;for(var i=0;i<list.length;i++)  
  4736. if((matches=regex.exec(list[i]))!=null)  
  4737. return matches[1];return defaultValue;}  
  4738. function FindTagsByName(list,name,tagName)  
  4739. {var tags=document.getElementsByTagName(tagName);for(var i=0;i<tags.length;i++)  
  4740. if(tags[i].getAttribute('name')==name)  
  4741. list.push(tags[i]);}  
  4742. var elements=[];var highlighter=null;var registered={};var propertyName='innerHTML';FindTagsByName(elements,name,'pre');FindTagsByName(elements,name,'textarea');if(elements.length==0)  
  4743. return;for(var brush in dp.sh.Brushes)  
  4744. {var aliases=dp.sh.Brushes[brush].Aliases;if(aliases==null)  
  4745. continue;for(var i=0;i<aliases.length;i++)  
  4746. registered[aliases[i]]=brush;}  
  4747. for(var i=0;i<elements.length;i++)  
  4748. {var element=elements[i];var options=FindValue(element.attributes['class'],element.className,element.attributes['language'],element.language);var language='';if(options==null)  
  4749. continue;options=options.split(':');language=options[0].toLowerCase();if(registered[language]==null)  
  4750. continue;highlighter=new dp.sh.Brushes[registered[language]]();element.style.display='none';highlighter.noGutter=(showGutter==null)?IsOptionSet('nogutter',options):!showGutter;highlighter.addControls=(showControls==null)?!IsOptionSet('nocontrols',options):showControls;highlighter.collapse=(collapseAll==null)?IsOptionSet('collapse',options):collapseAll;highlighter.showColumns=(showColumns==null)?IsOptionSet('showcolumns',options):showColumns;var headNode=document.getElementsByTagName('head')[0];if(highlighter.Style&&headNode)  
  4751. {var styleNode=document.createElement('style');styleNode.setAttribute('type','text/css');if(styleNode.styleSheet)  
  4752. {styleNode.styleSheet.cssText=highlighter.Style;}  
  4753. else  
  4754. {var textNode=document.createTextNode(highlighter.Style);styleNode.appendChild(textNode);}  
  4755. headNode.appendChild(styleNode);}  
  4756. highlighter.firstLine=(firstLine==null)?parseInt(GetOptionValue('firstline',options,1)):firstLine;highlighter.Highlight(element[propertyName]);highlighter.source=element;element.parentNode.insertBefore(highlighter.div,element);}}  
  4757. dp.sh.Brushes.CSharp=function()  
  4758. {var keywords='abstract as base bool break byte case catch char checked class const '+'continue decimal default delegate do double else enum event explicit '+'extern false finally fixed float for foreach get goto if implicit in int '+'interface internal is lock long namespace new null object operator out '+'override params private protected public readonly ref return sbyte sealed set '+'short sizeof stackalloc static string struct switch this throw true try '+'typeof uint ulong unchecked unsafe ushort using virtual void while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';this.Style='.dp-c .vars { color: #d00; }';}  
  4759. dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=['c#','c-sharp','csharp'];  
  4760. dp.sh.Brushes.Vb=function()  
  4761. {var keywords='AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto '+'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate '+'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType '+'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each '+'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend '+'Function Get GetType GoSub GoTo Handles If Implements Imports In '+'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module '+'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing '+'NotInheritable NotOverridable Object On Option Optional Or OrElse '+'Overloads Overridable Overrides ParamArray Preserve Private Property '+'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume '+'Return Select Set Shadows Shared Short Single Static Step Stop String '+'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until '+'Variant When While With WithEvents WriteOnly Xor';this.regexList=[{regex:new RegExp('\'.*$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-vb';}  
  4762. dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=['vb','vb.net'];  
  4763. dp.sh.Brushes.Java=function()  
  4764. {var keywords='abstract assert boolean break byte case catch char class const '+'continue default do double else enum extends '+'false final finally float for goto if implements import '+'instanceof int interface long native new null '+'package private protected public return '+'short static strictfp super switch synchronized this throw throws true '+'transient try void volatile while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b','gi'),css:'number'},{regex:new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b','g'),css:'annotation'},{regex:new RegExp('\\@interface\\b','g'),css:'keyword'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-j';this.Style='.dp-j .annotation { color: #646464; }'+'.dp-j .number { color: #C00000; }';}  
  4765. dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=['java'];  
  4766. dp.sh.Brushes.Cpp=function()  
  4767. {var datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR '+'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH '+'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP '+'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY '+'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT '+'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE '+'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF '+'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR '+'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR '+'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT '+'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 '+'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR '+'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 '+'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT '+'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG '+'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '+'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t '+'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS '+'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t '+'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t '+'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler '+'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function '+'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf '+'va_list wchar_t wctrans_t wctype_t wint_t signed';var keywords='break case catch class const __finally __exception __try '+'const_cast continue private public protected __declspec '+'default delete deprecated dllexport dllimport do dynamic_cast '+'else enum explicit extern if for friend goto inline '+'mutable naked namespace new noinline noreturn nothrow '+'register reinterpret_cast return selectany '+'sizeof static static_cast struct switch template this '+'thread throw true false try typedef typeid typename union '+'using uuid virtual void volatile whcar_t while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^ *#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(datatypes),'gm'),css:'datatypes'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-cpp';this.Style='.dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }';}  
  4768. dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=['cpp','c','c++'];  
  4769. dp.sh.Brushes.CSS=function()  
  4770. {var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'value'},{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'},{regex:new RegExp('!important','g'),css:'important'},{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetValuesCSS(values),'g'),css:'value'},{regex:new RegExp(this.GetValuesCSS(fonts),'g'),css:'value'}];this.CssClass='dp-css';this.Style='.dp-css .value { color: black; }'+'.dp-css .important { color: red; }';}  
  4771. dp.sh.Highlighter.prototype.GetKeywordsCSS=function(str)  
  4772. {return'\\b([a-z_]|)'+str.replace(/ /g,'(?=:)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';}  
  4773. dp.sh.Highlighter.prototype.GetValuesCSS=function(str)  
  4774. {return'\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';}  
  4775. dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];  
  4776. dp.sh.Brushes.Delphi=function()  
  4777. {var keywords='abs addr and ansichar ansistring array as asm begin boolean byte cardinal '+'case char class comp const constructor currency destructor div do double '+'downto else end except exports extended false file finalization finally '+'for function goto if implementation in inherited int64 initialization '+'integer interface is label library longint longword mod nil not object '+'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended '+'pint64 pointer private procedure program property pshortstring pstring '+'pvariant pwidechar pwidestring protected public published raise real real48 '+'record repeat set shl shortint shortstring shr single smallint string then '+'threadvar to true try type unit until uses val var varirnt while widechar '+'widestring with word write writeln xor';this.regexList=[{regex:new RegExp('\\(\\*[\\s\\S]*?\\*\\)','gm'),css:'comment'},{regex:new RegExp('{(?!\\$)[\\s\\S]*?}','gm'),css:'comment'},{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\{\\$[a-zA-Z]+ .+\\}','g'),css:'directive'},{regex:new RegExp('\\b[\\d\\.]+\\b','g'),css:'number'},{regex:new RegExp('\\$[a-zA-Z0-9]+\\b','g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-delphi';this.Style='.dp-delphi .number { color: blue; }'+'.dp-delphi .directive { color: #008284; }'+'.dp-delphi .vars { color: #000; }';}  
  4778. dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=['delphi','pascal'];  
  4779. dp.sh.Brushes.Python=function()  
  4780. {var keywords='and assert break class continue def del elif else '+'except exec finally for from global if import in is '+'lambda not or pass print raise return try yield while';var special='None True False self cls class_'  
  4781. this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:new RegExp("^\\s*@\\w+",'gm'),css:'decorator'},{regex:new RegExp("(['\"]{3})([^\\1])*?\\1",'gm'),css:'comment'},{regex:new RegExp('"(?!")(?:\\.|\\\\\\"|[^\\""\\n\\r])*"','gm'),css:'string'},{regex:new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'",'gm'),css:'string'},{regex:new RegExp("\\b\\d+\\.?\\w*",'g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(special),'gm'),css:'special'}];this.CssClass='dp-py';this.Style='.dp-py .builtins { color: #ff1493; }'+'.dp-py .magicmethods { color: #808080; }'+'.dp-py .exceptions { color: brown; }'+'.dp-py .types { color: brown; font-style: italic; }'+'.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }';}  
  4782. dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=['py','python'];  
  4783. dp.sh.Brushes.Php=function()  
  4784. {var funcs='abs acos acosh addcslashes addslashes '+'array_change_key_case array_chunk array_combine array_count_values array_diff '+'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+'array_push array_rand array_reduce array_reverse array_search array_shift '+'array_slice array_splice array_sum array_udiff array_udiff_assoc '+'array_udiff_uassoc array_uintersect array_uintersect_assoc '+'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+'strtoupper strtr strval substr substr_compare';var keywords='and or xor __FILE__ __LINE__ array as break case '+'cfunction class const continue declare default die do else '+'elseif empty enddeclare endfor endforeach endif endswitch endwhile '+'extends for foreach function include include_once global if '+'new old_function return static switch use require require_once '+'var while __FUNCTION__ __CLASS__ '+'__METHOD__ abstract interface public implements extends private protected throw';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\$\\w+','g'),css:'vars'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}  
  4785. dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=['php'];  
  4786. dp.sh.Brushes.Sql=function()  
  4787. {var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output partial password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:new RegExp('--(.*)$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(operators),'gmi'),css:'op'},{regex:new RegExp(this.GetKeywords(keywords),'gmi'),css:'keyword'}];this.CssClass='dp-sql';this.Style='.dp-sql .func { color: #ff1493; }'+'.dp-sql .op { color: #808080; }';}  
  4788. dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=['sql'];  
  4789. dp.sh.Brushes.Xml=function()  
  4790. {this.CssClass='dp-xml';this.Style='.dp-xml .cdata { color: #ff1493; }'+'.dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }'+'.dp-xml .attribute { color: red; }'+'.dp-xml .attribute-value { color: blue; }';}  
  4791. dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function()  
  4792. {function push(array,value)  
  4793. {array[array.length]=value;}  
  4794. var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('(\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\>|>)','gm'),'cdata');this.GetMatches(new RegExp('(\<|<)!--\\s*.*?\\s*--(\>|>)','gm'),'comments');regex=new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*|(\\w+)','gm');while((match=regex.exec(this.code))!=null)  
  4795. {if(match[1]==null)  
  4796. {continue;}  
  4797. push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined)  
  4798. {push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));}}  
  4799. this.GetMatches(new RegExp('(\<|<)/*\\?*(?!\\!)|/*\\?*(\>|>)','gm'),'tag');regex=new RegExp('(?:\<|<)/*\\?*\\s*([:\\w-\.]+)','gm');while((match=regex.exec(this.code))!=null)  
  4800. {push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));}}  
  4801. dp.sh.Brushes.JScript=function()  
  4802. {var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}  
  4803. dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript'];  
  4804. dp.sh.Brushes.Ruby=function()  
  4805. {var keywords='alias and BEGIN begin break case class def define_method defined do each else elsif '+'END end ensure false for if in module new next nil not or raise redo rescue retry return '+'self super then throw true undef unless until when while yield';var builtins='Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload '+'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol '+'ThreadGroup Thread Time TrueClass'  
  4806. this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(':[a-z][A-Za-z0-9_]*','g'),css:'symbol'},{regex:new RegExp('(\\$|@@|@)\\w+','g'),css:'variable'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtin'}];this.CssClass='dp-rb';this.Style='.dp-rb .symbol { color: #a70; }'+'.dp-rb .variable { color: #a70; font-weight: bold; }';}  
  4807. dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=['ruby','rails','ror'];  
  4808. dp.SyntaxHighlighter.BloggerMode();  
  4809. dp.SyntaxHighlighter.HighlightAll('code');  
  4810. --></script></div></div></div></div></object></object>