Режим Vim в NetBeans

NetBeans — чудесная бесплатная IDE с поддержкой PHP. А вот чего мне не хватало в ней, так это режима Vim в редакторе. В большинстве современных IDE и редакторов такой режим доступен после установки соответствующего плагина, а разработчики JetBrains вообще считают, что это их киллер-фича. В NetBeans такой плагин тоже есть — jVi, но он на первый взгляд нерабочий. А суть в том, что нужно установить последовательно два плагина.

Сначала установить jVi for NB-7.0 Update Center. После чего нажать кнопку Проверить обновления. В результате станет доступен для установки сам плагин jVi for NetBeans. Vim-раскладка начнет работать после его установки и перезагрузки IDE.

Конвертация строки в объект datetime

Бывает так, что при импорте данных необходимо извлечь дату из текстового поля и преобразовать ее в формат datetime для последующей вставки в базу данных через ORM Django. В общем случае дата может быть в произвольном строковом формате.

Примеры:

Jun 3 2014 5:23PM 
Aug 28 1999 12:00AM

Для такой типовой задачи ожидаемо существует решение в стандартной библиотеке Python — метод strptime модуля datetime. В свою очередь вызов datetime.strptime(date_string, format) является эквивалентом вызова datetime(*(time.strptime(date_string, format)[0:6])).

В итоге задача решается так:

from datetime import datetime
date = datetime.strptime("Jun 3 2014 5:23PM", '%b %d %Y %I:%M%p')

Маска форматирования даты задается аналогично методу strftime(), который реализует обратную по смыслу функциональность.

Django: генерация SECRET_KEY

Частенько при настройке и запуске Django возникает подобная ошибка:

The SECRET_KEY setting must not be empty.

Это механизм проверки конфигурации Джанги ругается, что вы забыли указать SECRET_KEY в локальных настройках. А где взять это значение? Можно натарабанить по клаве самому, можно скопировать из базового модуля настроек, созданного в самом начале при startproject. Но правильно сгенерировать уникальное для данной инсталяции значение так, как это делается в startproject.

from django.utils.crypto import get_random_string

chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
get_random_string(50, chars)

И следите, чтобы SECRET_KEY ваших активных инсталяций не утекал в публичные репозитории или листинги.

AngularJS и History API в Chrome приложениях

History API имеет ограниченную поддержку в приложениях Chrome. Однако, AngularJS пытается обратиться к методу history.pushState во время инициализации приложения. Это неминуемо приводит к ошибке: history.pushState is not available in packaged apps.

Лечится так:

angular
    .module('app', [], function($provide) {
        // Prevent Angular from sniffing for the history API
        // since it's not supported in packaged apps.
        $provide.decorator('$window', function($delegate) {
            $delegate.history = null;
            return $delegate;
        });
    });

Источник: github.com

Django: как получить значение по-умолчанию поля модели

Допустим, в Django приложение существует следующая модель:

class MyModel(models.Model):
    my_field = models.IntegerField(u"My field", default=0)

Тогда сослаться на значение по-умолчанию поля my_field можно так:

my_field_default_value = MyModel._meta.get_field('my_field').get_default()

UPD: Начиная с версии Django 1.8, устоявшаяся практика использования _meta стала абсолютно легальной. Теперь есть документированное API.

Vim: управление настройками при запуске из командной строки на примере выбора цветовой схемы

Если запустить Vim с опцией --cmd 'let ...', то такая директива выполнится до загрузки директив из vimrc. На этой фиче можно построить, например, выбор цветовой схемы редактора при запуске.

Я в светлое время суток предпочитаю работать в светлой Солярке (чаще), а ночью в Монокае (редко).

Для этого в vimrc пишем что-то типа:

" Default color scheme - Solarized (light)
colorscheme solarized
set background=light

" Setting colorscheme from command line
if exists("theme")
    if theme == "dark" 
        colorscheme monokai
    endif
    if theme == "solarizedlight" 
        colorscheme solarized
        set background=light
    endif
    if theme == "solarizeddark" 
        colorscheme solarized
        set background=dark
    endif
endif

Тогда выбрать тему можно так:

gvim . --cmd 'let theme="dark"'
gvim . --cmd 'let theme="solarizeddark"'

А по умолчанию будет светлая солярка.

Django: автодополнение manage.py и django-admin.py

Случайно открыл, что репозиторий Django помимо самого фреймворка содержит директорию extra со вспомогательными скриптами. В последних стабильных релизах там находится только скрипт автодополнения команд manage.py и django-admin.py. Чтобы воспользоваться этим скриптом, нужно сохранить его куда-нибудь в укромное место в домашней директории и добавить в свой .bashrc строку:

. ~/укромное/место/django_bash_completion

И та-дам! Не нужно больше каждый раз вбивать в консоли ./manage.py makemigrations или что еще похлеще.

Python LiveReload: автоматическая перезагрузка страницы

Python LiveReload — это вспомогательная утилита для веб-разработчиков. Запускается как сервер в директории проекта и отслеживает изменения файлов. Работает в паре с LiveReload расширением вашего браузера. Это позволяет избавиться от утомительного нажатия F5 или Ctrl+R в браузере после каждой правки кода.

Установка сервера

pip install livereload

Установка расширения для Chrome

https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei

Запуск

cd ~/my/project/path
livereload

Сервер по умолчанию слушает порт 35729. То есть, чтобы все завелось, нужно открыть ссылку http://localhost:35729/ в браузере.

Дополнительно

livereload --help

Документация: http://livereload.readthedocs.org/en/latest/

Страница проекта: https://github.com/lepture/python-livereload

Автор проекта: Hsiaoming Yang

Vim: режим Netrw

NERDTree не нужен. Схожую функциональность полностью обеспечивает встроенный в Vim режим Netrw.

Вход в режим:

:e .

Или сразу запустить Vim из консоли в режиме Netrw:

vim .

Древовидное отображение листинга директории:

let g:netrw_liststyle = 3

Игнорирование файлов и директорий (паттерны регулярок через запятую):

let g:netrw_list_hide = '.*\.swp$,.*\.pyc$,^\.git/$,^tags$,^\.vagrant/$'

Циклическое переключение между режимами отображения игнорируемых файлов — <a>.

Vim: совместное использование YouCompleteMe и Virtualenv

Способ 1

Запускать Vim из терминала с уже активированным окружением Virtualenv.

Способ 2

В Vim после активации виртуального окружения с помощью vim-virtualenv:

:VirtualEnvActivate myenv

перезапустить серверную часть YouCompleteMe:

:YcmRestartServer