<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2683752278563559419</id><updated>2012-02-16T16:13:08.457+07:00</updated><category term='inotify'/><category term='linux'/><category term='incrontab'/><category term='mysql'/><category term='en'/><category term='nginx'/><category term='incron'/><category term='drupal'/><category term='kompas'/><category term='Asterisk'/><category term='wine'/><category term='2GIS'/><category term='django'/><category term='omsk'/><category term='backup'/><category term='pylons'/><category term='RuPyRu'/><title type='text'>Stan Kondrat</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.antazy.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default'/><link rel='alternate' type='text/html' href='http://www.antazy.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-451513676575525684</id><published>2012-02-07T01:48:00.006+07:00</published><updated>2012-02-07T02:08:11.946+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2GIS'/><category scheme='http://www.blogger.com/atom/ns#' term='Asterisk'/><title type='text'>Asterisk название фирмы (CallerID name) из API ДубльГИС используя AGI</title><content type='html'>Знакомство с использованием AGI интерфейса Asterisk. На примере &lt;br /&gt;получения названия фирмы по номеру входящего звонка из API справочника &lt;br /&gt;ДубльГИС.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RmZ4UIzHXkE/TzAg7Jlt0uI/AAAAAAAAAPw/JhaM7jR-Qr8/s1600/1e48c269d1da99ff93faaa9354886e92.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-RmZ4UIzHXkE/TzAg7Jlt0uI/AAAAAAAAAPw/JhaM7jR-Qr8/s400/1e48c269d1da99ff93faaa9354886e92.jpg" width="315" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В базе ДубльГИС более 850 000 компаний, совсем недавно появилась возможность поиска фирмы по номеру телефона.&lt;br /&gt;&lt;br /&gt;Требования к рабочему окружению:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;запущенный asterisk;&lt;/li&gt;&lt;li&gt;ключ доступа API 2gis.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Получаем данные из API ДубльГИС&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;С помощью простого GET запроса, мы получаем данные о фирме в JSON формате, живой пример — &lt;a href="http://demo.api.2gis.ru/apiClient/firmsList"&gt;http://demo.api.2gis.ru/apiClient/firmsList&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Для того чтобы получить название фирмы по номеру телефона из API, используем python скрипт:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;import urllib&lt;br /&gt;import simplejson&lt;br /&gt;&lt;br /&gt;number = u'308877'&lt;br /&gt;query_url = ("http://catalog.api.2gis.ru/search?what={0}&amp;amp;version=1.3"\&lt;br /&gt;"&amp;amp;where=омск&amp;amp;pagesize=5&amp;amp;key=1&amp;amp;lang=ru").format(number)&lt;br /&gt;result = simplejson.load(urllib.urlopen(query_url))&lt;br /&gt;print result['result'][0]['name']&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Город и &lt;a href="http://partner.api.2gis.ru/"&gt;ключ доступа&lt;/a&gt; укажите свои.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Указываем CallerID name используя AGI&lt;/h4&gt;&lt;br /&gt;Шлюзовый интерфейс ASTERISK (AGI) позволяет управлять диалпланом &lt;br /&gt;сторонним приложением. Обмен данными осуществляется по каналам STDIN, &lt;br /&gt;STDOUT и STDERR. По STDIN передаются переменный окружения, сценарий &lt;br /&gt;возвращает команды по STDOUT.&lt;br /&gt;&lt;br /&gt;Для работы с agi существуют разные библиотеки (pyst,py-Asterisk,pyastre), мой выбор пал случайно на pyagi &lt;a href="https://github.com/rdegges/pyagi/tree/develop"&gt;github.com/rdegges/pyagi/tree/develop&lt;/a&gt; (в стадии разработки!).&lt;br /&gt;&lt;br /&gt;Создадим скрипт &lt;i&gt;/tmp/2gis/callerid.py&lt;/i&gt;, который читает переменную &lt;b&gt;agi_callerid&lt;/b&gt; из Asterisk и возвращает переменную &lt;b&gt;calleridname&lt;/b&gt; с тестовым названием фирмы.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;from pyagi.pyagi import AGI&lt;br /&gt;&lt;br /&gt;agi = AGI()&lt;br /&gt;number = agi.env["agi_callerid"] &lt;br /&gt;agi.set_variable('calleridname', 'testname')&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Для вызов из диалплана нашего AGI сценария &lt;i&gt;/tmp/2gis/callerid.py&lt;/i&gt;, следует добавить функцию &lt;i&gt;AGI(/tmp/2gis/callerid.py)&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;[sip-dialin] &lt;br /&gt;exten =&amp;gt; s,1,AGI(/tmp/2gis/callerid.py) &lt;br /&gt;exten =&amp;gt; s,n,Set(CALLERID(name)=${calleridname}) &lt;br /&gt;exten =&amp;gt; s,n,Dial(SIP/phone1) &lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;После вызова CALLERID(name) меняется на 'testname'.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Заключение&lt;/h5&gt;&lt;br /&gt;Теперь остается заменить строку 'testname' на название фирмы полученное из API 2GIS. Итоговый вариант &lt;b&gt;callerid.py&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#!/usr/bin/python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import urllib&lt;br /&gt;import simplejson&lt;br /&gt;from pyagi.pyagi import AGI&lt;br /&gt;&lt;br /&gt;agi = AGI()&lt;br /&gt;number = agi.env["agi_callerid"]&lt;br /&gt;query_url = ("http://catalog.api.2gis.ru/search?what={0}&amp;amp;version=1.3"\&lt;br /&gt;"&amp;amp;where=омск&amp;amp;pagesize=5&amp;amp;key=1&amp;amp;lang=ru").format(number)&lt;br /&gt;result = simplejson.load(urllib.urlopen(query_url))&lt;br /&gt;agi.set_variable('calleridname', result['result'][0]['name'].encode('utf8'))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Внимание, disclaimer&lt;/h4&gt;&lt;br /&gt;Данная статья всего лишь вводный обзор возможностей API ДубльГИС и AGI интерфейса Asterisk.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;лицензионные соглашение использования API ДубльГИС не рассмотрено;&lt;/li&gt;&lt;li&gt;нет обработки неизвестных номеров.&lt;/li&gt;&lt;/ul&gt;Я никакого отношения к ДубльГИС не имею.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Что дальше&lt;/h4&gt;&lt;br /&gt;API ДубльГИС — &lt;a href="http://api.2gis.ru/"&gt;http://api.2gis.ru/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Меггелен Дж., Мадсен Л., Смит Дж. — &lt;a href="http://www.google.ru/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=Asterisk.+%D0%B1%D1%83%D0%B4%D1%83%D1%89%D0%B5%D0%B5+%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B8%D0%B8"&gt;Asterisk. будущее телефонии&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Asterisk AGI — &lt;a href="http://www.voip-info.org/wiki/view/Asterisk+AGI"&gt;voip-info.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-451513676575525684?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/451513676575525684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2012/02/asterisk-callerid-name-api-agi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/451513676575525684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/451513676575525684'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2012/02/asterisk-callerid-name-api-agi.html' title='Asterisk название фирмы (CallerID name) из API ДубльГИС используя AGI'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RmZ4UIzHXkE/TzAg7Jlt0uI/AAAAAAAAAPw/JhaM7jR-Qr8/s72-c/1e48c269d1da99ff93faaa9354886e92.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-7061283488223135001</id><published>2011-06-06T03:26:00.000+07:00</published><updated>2011-06-06T03:26:28.836+07:00</updated><title type='text'>Drupal 7 sqlite Nginx</title><content type='html'>Drupal 7 SQLite .ht in the name will tell Apache to prevent the database from being downloaded. &lt;br /&gt;For nginx should be config line like this:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;location = /sites/default/files/.ht.sqlite {deny all;}&lt;/code&gt;&lt;/pre&gt;Now &lt;i&gt;http://www.yoursite.ru&lt;b&gt;/sites/default/files/.ht.sqlite&lt;/b&gt;&lt;/i&gt; will return 403 Forbidden page&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-7061283488223135001?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/7061283488223135001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2011/06/drupal-7-sqlite-nginx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/7061283488223135001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/7061283488223135001'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2011/06/drupal-7-sqlite-nginx.html' title='Drupal 7 sqlite Nginx'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-6703002580799688643</id><published>2011-04-04T12:07:00.010+07:00</published><updated>2011-04-04T19:41:31.090+07:00</updated><title type='text'>CKEditor QR-Codes Plug-in</title><content type='html'>Fork &lt;a href="https://github.com/cakemail/QR-Codes-CKeditor-Plugin"&gt;cakemail&lt;/a&gt; QR CKeditor Plug-in with additional params and live preview - &lt;a href="https://github.com/stan-kondrat/QR-Codes-CKeditor-Plugin"&gt;QR-Codes-CKeditor-Plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-j9YB8dAXT34/TZlRDqJyKyI/AAAAAAAAANs/W_CGOqb3Sk4/s1600/QR-Codes-CKeditor-Plugin.png" /&gt;&lt;/div&gt;&lt;br /&gt;This plugin add QR codes to your CKEditor, you write an URL or text data and it will automatically generate an image and insert it in your editor.&lt;br /&gt;&lt;br /&gt;Installation Instruction:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Upload &lt;a href="https://github.com/stan-kondrat/QR-Codes-CKeditor-Plugin"&gt;qrcodes&lt;/a&gt; folder to&amp;nbsp; ckeditor/plugins/&lt;/li&gt;&lt;li&gt;Open ckeditor/config.js, Add to config.toolbar the value 'qrcodes' &lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;code class="javascript"&gt;config.toolbar = [[ 'Source', '-', 'Bold', 'Italic', 'qrcodes' ]];&lt;br /&gt;config.extraPlugins='qrcodes';&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Plug-in using the Google QR Code API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-6703002580799688643?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/6703002580799688643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2011/04/ckeditor-qr-codes-plug-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/6703002580799688643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/6703002580799688643'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2011/04/ckeditor-qr-codes-plug-in.html' title='CKEditor QR-Codes Plug-in'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-j9YB8dAXT34/TZlRDqJyKyI/AAAAAAAAANs/W_CGOqb3Sk4/s72-c/QR-Codes-CKeditor-Plugin.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-12445838415686538</id><published>2011-01-27T22:03:00.005+06:00</published><updated>2011-01-30T12:50:57.679+06:00</updated><title type='text'>VKontakte python api</title><content type='html'>Сравнение python библиотек для &lt;a href="http://vkontakte.ru/page-1_2372591"&gt;защищенного взаимодействия приложения с API&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Библиотека для работы с API Вконакта серверной части приложения - это всего лишь хелпер, использующий urllib (или что-нибудь другое) и парсер xml/json. Изобретать свои велосипед не хочется, возьмем уже написанный код. Вот что сходу нагуглилось:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://bitbucket.org/kmike/vkontakte/"&gt;vkontakte&lt;/a&gt; 0.9.5&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/apivk-py/"&gt;apivk-py&lt;/a&gt; r8&lt;/li&gt;&lt;li&gt;&lt;s&gt;&lt;a href="http://code.google.com/p/vpython/"&gt;vpython&lt;/a&gt; r26&lt;/s&gt;&lt;b&gt;*&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: smaller;"&gt;&lt;b&gt;*&lt;/b&gt; - django модуль, который напрямую авторизируется логином/паролем пользователя, нам не подходит, но пример можно посмотреть ниже.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;vkontakte&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&gt;&gt;&gt; import vkontakte&lt;br /&gt;&gt;&gt;&gt; vk = vkontakte.API('my_api_id', 'my_api_secret')&lt;br /&gt;&gt;&gt;&gt; print vk.getServerTime()&lt;br /&gt;1282689362&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; profiles = vk.getProfiles(uids='1,2', fields='education')&lt;br /&gt;&gt;&gt;&gt; pavel = profiles[0]&lt;br /&gt;&gt;&gt;&gt; print pavel['last_name'], pavel['university_name']&lt;br /&gt;Дуров СПбГУ&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; # alternative syntax&lt;br /&gt;&gt;&gt;&gt; profiles = vk.get('getProfiles', uids='1,2', fields='education')&lt;br /&gt;&gt;&gt;&gt; pavel = profiles[0]&lt;br /&gt;&gt;&gt;&gt; print pavel['last_name'], pavel['university_name']&lt;br /&gt;Дуров СПбГУ&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; # custom timeout example (default timeout = 1s)&lt;br /&gt;&gt;&gt;&gt; vk = vkontakte.API('my_api_id', 'my_api_secret', timeout=5)&lt;br /&gt;&gt;&gt;&gt; print vk.getServerTime()&lt;br /&gt;1282689362&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; # syntax sugar for 'secure.*' methods&lt;br /&gt;&gt;&gt;&gt; print vk.secure.getSMSHistory()&lt;br /&gt;None&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;apivk-py&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;import apivk_secure as secure&lt;br /&gt;from apivk import *&lt;br /&gt;&lt;br /&gt;def on_success(obj):&lt;br /&gt;    print 'on_success ', obj&lt;br /&gt;&lt;br /&gt;def on_error(error_code, error_msg, request_params):&lt;br /&gt;    print 'error  ', error_code, ': ', error_msg&lt;br /&gt;&lt;br /&gt;q = VKQueue('1', 'apisecuresecret', 5, 1)&lt;br /&gt;#async request&lt;br /&gt;q.add(secure.saveAppStatus(uid='1', status='Hi, Pavel!'), on_success, on_error)&lt;br /&gt;&lt;br /&gt;#sync request&lt;br /&gt;event = q.add(secure.saveAppStatus(uid='1', status='Hello world!'))&lt;br /&gt;try:&lt;br /&gt;    response = event.wait()&lt;br /&gt;    print 'response:', response&lt;br /&gt;except VKError, e:&lt;br /&gt;    print 'VKError %s: %s'%(e.code, e.msg)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;vpython&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;def index(request):    &lt;br /&gt;    leecher = VkontakteLeecher("ad3002@gmail.com", "toteato", "d:/vk/")&lt;br /&gt;    pdata = leecher.person_dict&lt;br /&gt;    news = leecher.news()     &lt;br /&gt;    context = { 'page_title' : 'Мой вконтакте',&lt;br /&gt;                'fullname' : str(pdata['name'] + " " + pdata['surname']),&lt;br /&gt;                'nickname' : pdata['nickname'],&lt;br /&gt;                'idnum' : news[1][3],&lt;br /&gt;            }    &lt;br /&gt;    return render_to_response('index.html',context_instance=\&lt;br /&gt;                                        RequestContext(request,context))&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Сразу хочется сказать, что библиотеки не сложные, даже судя по количеству кода, оба не превышают 300 строк. Оба передают данные с помощью json.&lt;br /&gt;&lt;b&gt;Apivk-py&lt;/b&gt; побольше, т.к. содержит вариант асинхронных запросов. Использует urllib2 и threading, так же есть тесты. &lt;br /&gt;Преимущество &lt;b&gt;vkontakte&lt;/b&gt; (urllib) - это то что его пакет есть на &lt;a href="http://pypi.python.org/pypi/vkontakte"&gt;PyPI&lt;/a&gt;, что удобно для установки, хотя оба проекта содержат всего по два файла.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-12445838415686538?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/12445838415686538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2011/01/vkontakte-python-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/12445838415686538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/12445838415686538'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2011/01/vkontakte-python-api.html' title='VKontakte python api'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-5273869283839811966</id><published>2010-11-14T22:09:00.010+06:00</published><updated>2010-11-14T22:22:06.242+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><title type='text'>Nginx Pylons subdomains</title><content type='html'>Setup automatic sub-domains in pylons with nginx is very easy.&lt;br /&gt;&lt;br /&gt;First, add A record in your DNS manager: '&lt;b&gt;*&lt;/b&gt;' (without quotes) to your IP Address.&lt;br /&gt;Or, if you using bind9 server, at the end of &lt;i&gt;/etc/bind/db.local&lt;/i&gt; file add a new line:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;* IN A 127.0.0.1&lt;/code&gt;&lt;/pre&gt;Second, change server name at nginx site configuration file to:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;server_name example.com &lt;b&gt;*&lt;/b&gt;.example.com;&lt;/code&gt;&lt;/pre&gt;&lt;i&gt;(example.com replace with your domain name)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Thats all. Now, you can use &lt;b&gt;sub_domain&lt;/b&gt; key in the &lt;a href="http://pylonsbook.com/en/1.1/urls-routing-and-dispatch.html#conditions"&gt;conditions argument&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-5273869283839811966?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/5273869283839811966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2010/11/pylons-nginx-subdomains.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5273869283839811966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5273869283839811966'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2010/11/pylons-nginx-subdomains.html' title='Nginx Pylons subdomains'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-8690332042821257171</id><published>2010-11-12T17:13:00.013+06:00</published><updated>2010-11-14T16:19:46.186+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><title type='text'>Ubuntu nginx Recompile/Repack .deb with Optional modules</title><content type='html'>There are not included in standard ubuntu deb many useful &lt;a href="http://wiki.nginx.org/NginxModules#Optional_HTTP_modules"&gt;Optional&lt;/a&gt; Nginx modules, like:  &lt;br /&gt;&lt;i&gt;--with-http_gzip_static_module&lt;/i&gt; for serve precompressed versions of static files, &lt;br /&gt;&lt;i&gt;--with-http_flv_module&lt;/i&gt; for flash streaming video or &lt;br /&gt;&lt;i&gt;--with-http_geoip_module&lt;/i&gt;  for country and city variables from the IP-address and &lt;a href="http://wiki.nginx.org/NginxModules#Optional_HTTP_modules"&gt;etc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Standard way is uninstall nginx (&lt;i&gt;apt-get uninstall nginx&lt;/i&gt;) and Building Nginx From Source with the required flags.&lt;br /&gt;&lt;br /&gt;Other easier way recompile deb package.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Setup the dependencies to repack the package:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="bash"&gt;apt-get build-dep nginx&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Get source code for the package to &lt;i&gt;tmp&lt;/i&gt; folder:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="bash"&gt;cd /tmp &amp;&amp; apt-get source nginx&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Change compile options:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="bash"&gt;nano nginx-*/auto/options&lt;/pre&gt;&lt;/code&gt;Foe example, to enable GeoIP module need change line &lt;i&gt;HTTP_GEOIP=NO&lt;/i&gt; to &lt;i&gt;HTTP_GEOIP=YES&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Compile the package:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="bash"&gt;cd /tmp/nginx-* &amp;&amp; dpkg-buildpackage -uc -b&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;And install recompiled .deb file:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="bash"&gt;dpkg -i /tmp/nginx_*.deb&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Аfter you upgrade to a new version nginx, this recompiled package will be overwritten. You will have to do this process again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-8690332042821257171?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/8690332042821257171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2010/11/ubuntu-nginx-recompilerepack-deb-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/8690332042821257171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/8690332042821257171'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2010/11/ubuntu-nginx-recompilerepack-deb-with.html' title='Ubuntu nginx Recompile/Repack .deb with Optional modules'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-5612868323032026571</id><published>2010-07-18T21:50:00.011+07:00</published><updated>2010-07-19T00:58:18.558+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='incrontab'/><category scheme='http://www.blogger.com/atom/ns#' term='inotify'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='incron'/><title type='text'>Проблема с incron (inotify cron system)</title><content type='html'>Полчаса бился с этими ошибками, когда ждал выполнения команды, после создания файла &lt;span style="font-style:italic;"&gt;/tmp/1&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;incrond: access denied on /tmp/1 - events will be discarded silently&lt;br /&gt;incrond: cannot create watch for user root: (2) Device or resource busy&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Проблема оказалась в невнимательном чтении манов, путь указывается не на файл который создаётся, а на папку в которой будет этот файл:&lt;br /&gt;&lt;blockquote&gt;IN_CREATE — Файл/директория создан(а) &lt;span style="font-weight:bold;"&gt;в отслеживаемой директории&lt;/span&gt;&lt;br /&gt;IN_DELETE — Файл/директория удален(а) &lt;span style="font-weight:bold;"&gt;в отслеживаемой директории&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;В итоге для проверки создания и удаления  конкретного файла, использовал вот такой &lt;span style="font-weight:bold;"&gt;incrontab&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;путь&gt; &lt;событие&gt; &lt;команда&gt;&lt;br /&gt;/tmp IN_CREATE [ -f /tmp/1 ] &amp;&amp; logger "Create /tmp/1"&lt;br /&gt;/tmp IN_DELETE [ -f /tmp/1 ] || logger "Delete /tmp/1"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Где &lt;span style="font-weight:bold;"&gt;[ -f /tmp/1 ]&lt;/span&gt; проверка файла. Подробнее про &lt;span style="font-weight:bold;"&gt;incron&lt;/span&gt; на русском можно посмотреть &lt;a href="http://habrahabr.ru/blogs/linux/66569/"&gt;здесь&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-5612868323032026571?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/5612868323032026571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2010/07/incron-inotify-cron-system.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5612868323032026571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5612868323032026571'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2010/07/incron-inotify-cron-system.html' title='Проблема с incron (inotify cron system)'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-3207958839398708217</id><published>2009-06-12T17:06:00.015+07:00</published><updated>2009-09-28T17:14:23.412+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Django Form Choices: select options из БД</title><content type='html'>На одном сайте на Django весит форма регистрации на закрытые вечеринки, в общем обычный contact form, но только периодически меняется название этих вечеринок.&lt;br /&gt;&lt;br /&gt;Так выглядит обычный ChoiceField (froms.py):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;from django import forms&lt;br /&gt;PARTY_CHOICES = (&lt;br /&gt;    (1, u'Вечеринка 1'),&lt;br /&gt;    (2, u'Вечеринка 2'),&lt;br /&gt;)&lt;br /&gt;class ContactForm(forms.Form):&lt;br /&gt;    name = forms.CharField(required=True)&lt;br /&gt;    phone = forms.CharField(required=True)&lt;br /&gt;    party = forms.ChoiceField(choices=PARTY_CHOICES)&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Для того чтобы хранить данные в БД создал модель (models.py):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class Party(models.Model):    &lt;br /&gt;    name = models.CharField('Название', max_length=200)            &lt;br /&gt;    def __unicode__(self):&lt;br /&gt;        return u'%s' % (self.name)&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;И заменил в форме PARTY_CHOICES на:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;from django import forms&lt;br /&gt;from models import Party&lt;br /&gt;PARTY_CHOICES = [&lt;br /&gt;    (party.id, party.name) for party in Party.objects.all()&lt;br /&gt;]&lt;br /&gt;class ContactForm(forms.Form):&lt;br /&gt;    name = forms.CharField(required=True)&lt;br /&gt;    phone = forms.CharField(required=True)&lt;br /&gt;    party = forms.ChoiceField(choices=PARTY_CHOICES)&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Дальше в admin.py добавил admin.site.register(Party), и всё работает. Ура!&lt;br /&gt;&lt;br /&gt;Но как бы не так, PARTY_CHOICES кэшируется в forms.py, то есть при добавление/изменении вечеринок в базе, форма меняется только после рестарта Джанги. &lt;br /&gt;&lt;br /&gt;Решение оказалось ещё проще - использование forms.ModelChoiceField (forms.py):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;...&lt;br /&gt;party = forms.ModelChoiceField(queryset=Party.objects.all())&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Теперь с ModelChoiceField всё работает как надо, форма меняется сразу после изменении в админке, но вот только остался вопрос с кэшированием в forms.py &amp;#133&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-3207958839398708217?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/3207958839398708217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2009/06/django-form-choices-select-options.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/3207958839398708217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/3207958839398708217'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2009/06/django-form-choices-select-options.html' title='Django Form Choices: select options из БД'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-1962344815260580286</id><published>2009-05-16T00:13:00.007+07:00</published><updated>2010-11-14T16:13:52.169+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RuPyRu'/><category scheme='http://www.blogger.com/atom/ns#' term='omsk'/><title type='text'>Футболка для RuPyRu 2009</title><content type='html'>В Омске 6 июня пройдет очередная &lt;a href="http://www.rupy.ru/"&gt;конференция по Ruby и Python&lt;/a&gt;&lt;br /&gt;Решил в &lt;a href="http://palemo.ru"&gt;palemo.ru&lt;/a&gt; сделать себе прикольную футболку =)&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 195px; height: 79px;" src="http://www.antazy.com/uploaded_images/antazy-rupyru-2009-1-775889.jpg" border="0" alt="" /&gt;&lt;br /&gt;Вот, что получилось: &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.antazy.com/uploaded_images/antazy-rupyru-2009-3-725129.jpg" target="_blank"&gt;img_1.jpg&lt;/a&gt;, &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.antazy.com/uploaded_images/antazy-rupyru-2009-2-775945.jpg" target="_blank"&gt;img_2.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPD:&lt;/span&gt;&lt;br /&gt;Будете делать себе, можете взять &lt;a href="http://kossnocorp.deviantart.com/art/RuPyRu-Logotype-122262680"&gt;deviantart.com/RuPyRu-Logotype...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-1962344815260580286?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/1962344815260580286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2009/05/rupyru-2009.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/1962344815260580286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/1962344815260580286'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2009/05/rupyru-2009.html' title='Футболка для RuPyRu 2009'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-5292968137632915741</id><published>2009-04-02T00:18:00.008+07:00</published><updated>2010-11-14T16:19:19.907+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kompas'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><title type='text'>Wine KOMPAS-3D LT V10 (linux, ubuntu)</title><content type='html'>При установки KOMPAS-3D LT V10 на Ubuntu через Wine (1.1.18) возникают ошибки:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;\\ASCON\\KOMPAS-3D LT V10\\Bin\\klApp.DLL") not found&lt;br /&gt;err:module:import_dll Library kCBU.DLL (which is needed by L"C:\\Program Files\\ASCON\\KOMPAS-3D LT V10\\Bin\\klApp.DLL") not found&lt;br /&gt;err:module:import_dll Library klApp.DLL (which is needed by L"C:\\Program Files\\ASCON\\KOMPAS-3D LT V10\\Bin\\KOMPASLT.Exe") not found&lt;br /&gt;err:module:import_dll Library MFC42u.DLL (which is needed by L"C:\\Program Files\\ASCON\\KOMPAS-3D LT V10\\Bin\\KOMPASLT.Exe") not found&lt;br /&gt;err:module:import_dll Library kCBU.DLL (which is needed by L"C:\\Program Files\\ASCON\\KOMPAS-3D LT V10\\Bin\\KOMPASLT.Exe") not found&lt;br /&gt;err:module:LdrInitializeThunk Main exe initialization for L"C:\\Program Files\\ASCON\\KOMPAS-3D LT V10\\Bin\\KOMPASLT.Exe" failed, status c0000135&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Решение проблемы:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ wget http://www.kegel.com/wine/winetricks&lt;br /&gt;$ sh ./winetricks vcrun6&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В настройках $winecfg для библиотеки &lt;span style="font-weight:bold;"&gt;msvcrt&lt;/span&gt; выбрать "сторонняя,встроенная" как на рисунке:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz9q5LJw_I/AAAAAAAAALM/f6mhkU57uO0/s1600/ubuntu-wine-kompas-3d-v10-small.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 352px; height: 400px;" src="http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz9q5LJw_I/AAAAAAAAALM/f6mhkU57uO0/s400/ubuntu-wine-kompas-3d-v10-small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5538580555102798834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;По мотивам &lt;a href="http://winehq.org"&gt;winehq.org&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-5292968137632915741?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/5292968137632915741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2009/04/wine-kompas-3d-lt-v10-linux-ubuntu.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5292968137632915741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5292968137632915741'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2009/04/wine-kompas-3d-lt-v10-linux-ubuntu.html' title='Wine KOMPAS-3D LT V10 (linux, ubuntu)'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz9q5LJw_I/AAAAAAAAALM/f6mhkU57uO0/s72-c/ubuntu-wine-kompas-3d-v10-small.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-5442333040902420325</id><published>2009-03-08T22:43:00.010+06:00</published><updated>2010-11-14T16:16:32.015+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><title type='text'>Бэкап mysql и восстановление из файла</title><content type='html'>Чтобы сделать бэкап mysql:&lt;br /&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;mysqldump --all --add-drop-table --all-databases --force -c \&lt;br /&gt;--password=pass --user=name | gzip -9 &gt; mysql_backup_file&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Восстановление бэкапа из файла:&lt;br /&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;mysql &lt; mysql_backup_file&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-5442333040902420325?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/5442333040902420325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2009/03/mysql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5442333040902420325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/5442333040902420325'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2009/03/mysql.html' title='Бэкап mysql и восстановление из файла'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-7701380899369312271</id><published>2008-07-22T15:00:00.004+07:00</published><updated>2010-11-14T16:14:46.950+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RuPyRu'/><category scheme='http://www.blogger.com/atom/ns#' term='omsk'/><title type='text'>RuPyRu 2008 Омск</title><content type='html'>В Омске 21 июня 2008 года побывал на конференции &lt;a href="http://www.rupy.ru/" target="_blank"&gt;RuPyRu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz7YlrmDtI/AAAAAAAAALE/Uxnd96yjXHM/s1600/rupyru-2008_antazy.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz7YlrmDtI/AAAAAAAAALE/Uxnd96yjXHM/s400/rupyru-2008_antazy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538578041609260754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Случайно на хабре увидел пост про конференцию и решил не отстовать)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-7701380899369312271?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rupy.ru/' title='RuPyRu 2008 Омск'/><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/7701380899369312271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2008/07/rupyru-2008.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/7701380899369312271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/7701380899369312271'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2008/07/rupyru-2008.html' title='RuPyRu 2008 Омск'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TNz7YlrmDtI/AAAAAAAAALE/Uxnd96yjXHM/s72-c/rupyru-2008_antazy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-9187071472602186163</id><published>2008-05-12T15:00:00.012+07:00</published><updated>2012-02-07T01:54:24.252+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2GIS'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><title type='text'>Linux ДубльГИС 3.0 | 2gis 3.0 Ubuntu 8.04</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZTOrMN4_-zo/TNz60pShnKI/AAAAAAAAAK8/jicwTzY4JU8/s1600/linux_2gis_3.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 188px;" src="http://2.bp.blogspot.com/_ZTOrMN4_-zo/TNz60pShnKI/AAAAAAAAAK8/jicwTzY4JU8/s400/linux_2gis_3.0.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5538577424102562978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Установка ДубльГИС 3.0 в линуксе (Ubuntu 8.04) (wine).&lt;br /&gt;&lt;br /&gt;Скачиваем с сайта www.2gis.ru&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Оболочку программы&lt;strong&gt; 2GISShell-3.*.msi&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Данные справочника и карты&lt;strong&gt; 2GISData_*-*.msi&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Необходимы &lt;strong&gt;wine&lt;/strong&gt; и &lt;strong&gt;p7zip&lt;/strong&gt; .  Для убунты нужно выполнить команду:&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install p7zip-full&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;Установка  оболочки 2gis 3.0&lt;/strong&gt;&lt;br /&gt;&lt;blockquote&gt;msiexec /i 2GISShell-3.*.msi&lt;br /&gt;&lt;/blockquote&gt;&lt;strong&gt;Установка справочника и карты ДубульГИС&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Разархивируем:&lt;br /&gt;&lt;blockquote&gt;7z x 2GISData_*-*.msi&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Опять распаковываем:&lt;br /&gt;&lt;blockquote&gt;7z x Sample.cab&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Находим файл &lt;strong&gt;*_DGDAT&lt;/strong&gt; , &lt;em&gt;например для Омска — &lt;strong&gt;Omsk_DGDAT&lt;/strong&gt; &lt;/em&gt; .&lt;br /&gt;Переименовываем в &lt;em&gt;&lt;strong&gt;Omsk.dgdat&lt;/strong&gt; &lt;/em&gt; , где вместо Omsk ваш город.&lt;br /&gt;Копируем в папку где установлена оболочка программы, у меня &lt;em&gt;/home/antazy/.wine/drive_c/Program Files/2gis/3.0/&lt;strong&gt;Omsk.dgdat&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;На сайте 2gis.ru  рекомедуют запускать &lt;strong&gt;grum.exe&lt;/strong&gt; с ключем &lt;strong&gt;-nomta&lt;/strong&gt; .&lt;br /&gt;&lt;br /&gt;&lt;em&gt;По мотивам http://www.e1.ru/talk/forum/&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-9187071472602186163?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/9187071472602186163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2008/05/linux-30-2gis-30-ubuntu-804.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/9187071472602186163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/9187071472602186163'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2008/05/linux-30-2gis-30-ubuntu-804.html' title='Linux ДубльГИС 3.0 | 2gis 3.0 Ubuntu 8.04'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZTOrMN4_-zo/TNz60pShnKI/AAAAAAAAAK8/jicwTzY4JU8/s72-c/linux_2gis_3.0.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683752278563559419.post-3994355205583094997</id><published>2008-03-20T15:00:00.008+06:00</published><updated>2010-11-14T16:17:20.376+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>Тема для Drupal 6 “p3d”</title><content type='html'>&lt;p&gt;Нарезал тему для Drupal 6.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZTOrMN4_-zo/TNz5ytVLyvI/AAAAAAAAAK0/zGsf0Eed1AE/s1600/themething-drupal6-packer3d_antazy.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 282px" src="http://4.bp.blogspot.com/_ZTOrMN4_-zo/TNz5ytVLyvI/AAAAAAAAAK0/zGsf0Eed1AE/s400/themething-drupal6-packer3d_antazy.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5538576291316091634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В теме реализовано png alpha, использованы модули imagemenu и nice_menus.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;.. конечно кроссбраузерность и валидация.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683752278563559419-3994355205583094997?l=www.antazy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.antazy.com/feeds/3994355205583094997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.antazy.com/2008/03/drupal-6-p3d.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/3994355205583094997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683752278563559419/posts/default/3994355205583094997'/><link rel='alternate' type='text/html' href='http://www.antazy.com/2008/03/drupal-6-p3d.html' title='Тема для Drupal 6 “p3d”'/><author><name>antazy</name><uri>http://www.blogger.com/profile/03781045408812663997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZTOrMN4_-zo/TTDhfyAtq9I/AAAAAAAAAMc/35Qriq0Nx2I/S220/DSC_0005-2__100x100_white.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZTOrMN4_-zo/TNz5ytVLyvI/AAAAAAAAAK0/zGsf0Eed1AE/s72-c/themething-drupal6-packer3d_antazy.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
