четверг, 21 июня 2012 г.

Скрипт на Python Script для Notepad++

Для редактора Notepad++ есть плагин Python Script. Я решил попробовать написать пару скриптов.

Первый скрипт простой - создается новый файл формата HTML с уже заполненным  содержимым. Для вызова этого скрипта создал кнопку на панели инструментов.
# -*- coding: utf8 -*-
notepad.new()
editor.addText('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n')
editor.addText('<html>\n')
editor.addText('<head>\n')
editor.addText('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n')
editor.addText('<meta name="author" content="tkachenkosi@gmail.com">\n')
editor.addText('<link href="css/style.css" type="text/css" rel="stylesheet">\n')
editor.addText('<title>Документ</title>\n')
editor.addText('</head>\n')
editor.addText('<body>\n')
editor.addText('\n')
editor.addText('</body>\n')
editor.addText('</html>\n')
notepad.save()


Второй скрипт добавляет строчные комментарии, которые различаются в зависимости от типа файла (py, html, js, css). Скрипт вызывается по комбинации Ctrl+\ как в IDE Delphi. Повторный вызов скрипта удаляет комментарий в текущей строки. Скрипт получился не совершенным но я привык и пользуюсь регулярно.
# -*- coding: utf8 -*-
import os

text = editor.getCurLine()
pos = editor.getCurrentPos()
num = editor.lineFromPosition(pos)

text = text.rstrip()

x=os.path.basename(notepad.getCurrentFilename()).split('.')[1]

if x=='css':
    if text.find('/*')>-1:
        text = text.replace('/*','')
        text = text.replace('*/','')
    else:
        text = '/*' + text + ' */'
       
elif x=='py':
    if text.find('# ',0,4)>-1:
        text = text.replace('# ','',1)
    elif text.find('#',0,4)>-1:
        text = text.replace('#','',1)
    else:
        text = '# ' + text
   
    # if text[0]=='#':
        # text = text[1:]

elif x=='js':
    if text.find('//',0,8)>-1:
        text = text.replace('//','',1)
    else:
        text = '//' + text
       
elif x=='html':
    if text.find('<!--')>-1:
        text = text.replace('<!--','')
        text = text.replace('-->','')
    else:
        text = '<!--' + text + ' -->'
       
text = text.rstrip()
  
# editor.replaceLine(num,text)
editor.replaceWholeLine(num,text+'\n')
editor.gotoPos(pos)

вторник, 8 мая 2012 г.

Установка django 1.4 на ubuntu 12.04

Установил django 1.4 на ubuntu 12.04 (VirtualBox) из официального релиза следующими командами:

Новые возможности и описание изменений django 1.4 здесь:
Как это установить и настраивать - есть много ссылок, а так же документация. Пример одной из ссылок:

Установил необходимые пакеты.
apt-get install libapache2-mod-wsgi python-mysqldb phpmyadmin
Скачал и установил последнию версию django
wget "http://www.djangoproject.com/download/1.4/tarball/" -O Django-1.4.tar.gz
tar xzvf Django-1.4.tar.gz
cd Django-1.4
sudo python setup.py install

Проверка установки, запускаем python ... :

import django
>>> django.VERSION
(1, 1, 0, 'alpha', 0)
Выбрал место где будут создаваться проекты:
/home/djcode/
Создал проект "mysite"
django-admin.py startproject mysite
Получилось:
/home/djcode/mysite/

Структура проекта в версии 1.4 отличается от предыдущих версий. Управляющий файл manage.py теперь находится на на внешнем уровне по отношению файлов настроек. И второе отличие - это поддержка режима wsgi по умолчанию. Файл настроек уже создан и находится в моем случае: 
/home/djcode/mysite/mysite/wsgi.py 

Создал новое тестовое приложение "books"
python manage.py startapp books

Настроил apache и создал виртуальный хост. Это мои конфигурационные фалы:
/etc/apache2/httpd.conf
Last login: Thu May 10 13:47:21 2012
WSGIScriptAlias / /home/djcode/mysite/mysite/wsgi.py
WSGIPythonPath /home/djcode/mysite

<Directory /home/djcode/mysite/mysite>
<Files wsgi.py>
    Order deny,allow
    Allow from all
</Files>
</Directory>

MaxRequestsPerChild 1


/etc/apache2/site-available/mysite
<VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName mysite.local

    <Directory /home/djcode/mysite/>
            Order allow,deny
            allow from all
    </Directory>

    WSGIScriptAlias / /home/djcode/mysite/mysite/wsgi.py
    <Directory /home/djcode/mysite/mysite>
             Order allow,deny
             allow from all
    </Directory>

    ErrorLog /home/djcode/mysite/apache/error.log

    LogLevel warn

    CustomLog /home/djcode/mysite/apache/access.log combined

    Alias /media/ "/home/djcode/mysite/media/"
    <Directory "/home/djcode/mysite/media/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>

</VirtualHost>

Выполнил команду создания виртуального хоста:
a2ensite mysite

*** 

Это нужно обязательно на тестовом сервере, чтобы изменения в django были видны сразу.
MaxRequestsPerChild 1 
В Windows настроил в файле host адрес и для моего сайта mysite.local
Проверил в браузере и получил стандартный ответ - все  работает.

It worked!
Congratulations on your first Django-powered page
Чтобы изолировать код проекта от остальной системы создаю нового пользователя.
создается системная группа
addgroup --quiet --system dw
создается системный пользователь
adduser --quiet --system --ingroup dw --no-vreate-home --no-create-home dw
новый владелец проекта
chown dw:www-data -R /home/djcode/mysite
права доступа
chmod u=rwx, g=rwx, o= -R /home/djcode/mysite
Еще от себя добавил пользователя "sa" в вторичную группу "www-data" (если команда без опции -a то просто поменяли первичную группу у пользователя), для того чтобы можно было подключатся к серверу по ftp и редактировать файлы (имитация удаленной работы).
usermod -a -G www-data sa

вторник, 23 августа 2011 г.

Подключении к базе MSSQL2008 from Delphi

После сутановки SQL 2008 EXPRESS понадобилось в программе на Delphi сделать подключение и для старого сервера SQL 2000 и для нового SQL 2008.

Вот кусок программы. К sql2008 я подключился через новый драйвер, а к sql2000 по старому варианту ADO. При старом варианте (АDO) важно - для параметра "имя сервера",  указать: имя сервера и через запятую номер порта. Теперь можно работать и с новым сервером sql2008 как с его новым драйвером, так и старым, через ADO. Большой разнице между ними я не увидел, а практике мне больше направится старый вариант, меньше проблем с полями datetime.

  if typeServer='2008' then begin
    // для нативного клиента 10.0 от Microsoft
    Connection1.Provider:='SQLNCLI10.1';
    Connection1.ConnectionString:='Provider=SQLNCLI10.1;Password=123;Persist Security Info=False;User ID=sa;Initial   
                   Catalog=nameBase;Data Source=nameServer;Initial File Name="";Server SPN=""';
  end else begin
    Connection1.Provider:='SQLOLEDB.1';
     Connection1.ConnectionString:='Provider=SQLOLEDB.1;Password=123;Persist Security Info=False;User 
      ID=sa;Initial Catalog=nameBase;Data Source=nameServer,1433;Packet Size=4096;Use Encryption for 
     Data=False;Use Procedure for Prepare=1;Auto Translate=True;'
  end;

Еще был момент связан с настройкой доступа к серверу по TCP. Для этого нужно включить в конфигурации SQL сами протоколы. И самое главное нужно запустить сервис "Браузер SQL Server". Вот выдержка из документации:

Если служба «SQL Server, браузер» не запущена, то возможность соединения с SQL Server остается только при указании верного номера порта или именованного канала. Например, к экземпляру SQL Server по умолчанию можно подключиться по порту TCP/IP, если он прослушивает порт 1433.

вторник, 29 июня 2010 г.

Django - новое приложение

python manage.p startapp books
python manage.py validate
python manage.py syncdb

среда, 23 июня 2010 г.

Приложения в подкаталоге

Добавляем в начало settings.py:
import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) at_project_root = lambda name: os.path.join(PROJECT_ROOT, name)
sys.path.insert(1, PROJECT_ROOT)
for app_lookup_path in ('apps', 'externals',):
    sys.path.insert(1, at_project_root(app_lookup_path))

Совет при использовании VirtualBox

Прочитал статью о настройки сети в VirtualBox - это краткое суть настройки. Тип соединения, в виртуальной машине, надо указать: «Сеть», тип подключения – «Виртуальный адаптер хоста», имя – «VirtualBox Host-Only Enthernet Adapter». Раскройте секцию «дополнительно» и проверить свойства адаптера.

Общие настройки сети для VB - меню «Файл» -> «Настройки».

В появившемся окне выберите строку «Сеть», и нажмите кнопку с изображением отвертки - там указан адрес виртуального адаптера который установлен в системе VirtualBox Host-Only Ethernet Adapter. Этот адрес должен быть указан шлюзом и ДНС в настройках ubuntu. Здесь также можно настроить DHCP.

Для получения с будущих ВК-ов доступа к сети Интернет необходимо произвести дополнительную настройку уже существующего соединения с Интернет основного компьютера.

После установки VirtualBox, в вашей системе появился новый «Виртуальный» сетевой адаптер «VirtualBox Host-Only Enthernet Adapter». Взаимодействие между ним, и существующим сейчас соединением мы и настроим

Откроем «свойства» текущего соединения к Интернет, а затем вкладку «доступ».

на закладки свойства должен быть отмечен флажок «VirtualBox Bridget Networking Driver», выберите вкладку «Доступ»:

В открывшимся окне отметьте флажок «Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера», а в списке «Подключение домашней сети» выберите «VirtualBox Host-Only Network»:

Затем нажмем «Ок». Появится предупреждение, что адаптеру «VirtualBox Host-Only Network» будет присвоен адрес например - 192.168.137.1:

Запомним этот адрес, и ответим «Да». Закроем окно состояния «Подключение по локальной сети 2».

Откроем свойства сети «VirtualBox Host-Only Network». Нам надо установить флажок «VirtualBox Bridget Networking Driver» и для этого сетевого адаптера:


Также надо установить дополнение для гостевой системы - это возможность менять разрешение и удобная работа с мышью и буфером обмена.
sudo /media/cdrom/VBoxLinuxAdditions-x86.run
после этого надо перегрузиться.

Создадим точку монтирования для расшаренной папки:
sudo mkdir /media/share
Разрешим записывать в папку всем пользователям виртуальной ОС (тут, опять же, решайте сами, кому в вашем случае требуются такие права):
sudo chmod 777 /media/share
И теперь, собственно, монтируем:
sudo mount -t vboxsf VirtualBoxShare /media/share
Готово. Можете отправляться в примонтированную директорию (cd /media/share) и убедиться, что всё её содержимое, доступное из реальной ОС, теперь имеется и в гостевой (ls -al /media/share).

Не совсем удобно каждый раз после запуска виртуальной машины монтировать в ней общую папку. На постоянной основе проблема решается добавлением записи в /etc/fstab:
sudo echo VirtualBoxShare /media/share vboxsf defaults 0 0 >> /etc/fstab

Создание пользователя для проекта django

Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:
# создается системная группа
addgroup --quiet --system dw

# создается системный пользователь
adduser --quiet --system --ingroup dw --no-create-home --no-create-home dw

# новый владелец для проекта
chown dw:www-data -R /home/django-projects/debianworld_ru

# права доступа на проект. Право на чтение для www-data необходимо
# для корректной отдачи статики
chmod u=rwx,g=rx,o= -R /home/django-projects/debianworld_ru


Использование самба

Еще один способ расшарить файлы проекта в локальной сети с помощью самба. Это нужно только для разработки с использованием продвинутых инструментов программирования.
Делаем в /etc/samba/smb.conf необходимые настройки.

В секции [global] изменяем строчки workgroup = INTERWOOD #(вы ставьте свою группу в локальной сети) server string = eeddiitt #(тут можно любую строку) security = share #(по умолчанию она была ниже, закомментированной и равна "user")

Затем, в самый конец файла, добавляем: [django-projects] #(под этим именем папка будет видна в сети)
path = /home/evg/django-projects
available = yes
browsable = yes
public = yes
writable = yes
guest ok = yes
guest only = yes
create mask = 0777
directory mask = 0777

Так как безопасность нам не нужна, то делаем следующее:
$ cd ~ $ sudo chmod 0777 django-projects/