PostgreSQL
coub
css
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
python
task1
ubuntu
vim
virtualbox
анекдот
игры
интересно
музыка
стихи
цитаты
jquery
links
python
Немного почитать о нем можно так :h ctrl-q
vim
python
task1
linux
Пишем качественный код на jQuery
February 08, 2014
Решил открыть тег ссылки, потому что перетягивать все на свете устанешь (да и вообще как-то не комильфо без необходимости по-моему), в закладках браузера потеряется а тут хоть как-то.. в общем это лирика.
Статья "Пишем качественный код на jQuery" освещает очевидно-понятно какие вопросы. К прочтению не то что обязательно, но может быть очень полезно.
Статья "Пишем качественный код на jQuery" освещает очевидно-понятно какие вопросы. К прочтению не то что обязательно, но может быть очень полезно.
Качественный код – это прежде всего быстрые приложения и сайты без лишнего мусора. В конце концов, быстрая отрисовка страниц и улучшенное реагирование принесут вашим пользователям более позитивный опыт взаимодействия.© frontender.info
Хочу учить Python Что почитать?
December 19, 2013
Очередной справочник с интересными (и не очень) ссылками.
- codeacademy - курс для начинающих на знаменитой академии с уклоном в веб-технологии как я понимаю.
- checkio.org сногсшибательная обучающая "игра". Нужно понимать английский, но оно того стоит. Очень здорово сделано.
- Learn Python The Hard Way, 3rd Edition книга или даже гайд по обучению. Английский язык. За сравнительно небольшие деньги можно выкупить видеоверсию и книгу в .pdf
- Пост на хабре (и ещё один, прямо вчерашний) специально посвященный этой же теме, там тоже тонна ссылок + неплохой вступительный текст, спасибо авторам
- Let's Learn Python - Basics небольшой вводный видеокурс на английском
- Python Django tutorial видеокурс по Django, относительно свежий, начало в январе 2013
- Официальный tutorial Гвидо ван Россума
- Useful python functions интересная заметка
Vim: как редактировать несколько строк одновременно
December 19, 2013
А теперь по порядку что тут такое происходит
- Печатаем какую-то строку в режиме insert (i)
- Переходим в режим normal (Esc) устанавливаем курсор на нашу строку и делаем так yy7p. То есть просто дублируем строку 7 раз.
- Входим в режим визуальный блок Ctrl+q и тянем курсор вниз на все наши строчки. Теперь есть вариант: выбрать ввод после символа под курсором (нажать A), или перед символом (нажать I)
- Вводим собственно то, что должно быть напечатано во всех выбранных строках.
- Нажимаем Esc
Немного почитать о нем можно так :h ctrl-q
Django + Gunicorn + virtualenv + nginx #2
November 29, 2013
Напишу ещё раз на всякий случай.
Я не настоящий сварщик! То есть не проф. python программист. Я только учусь!
Итого успехи у меня не большие к этому моменту. Я поиграл с flask-ом и поленившись всерьез добраться до SQLAlchemy взял Django как фреймворк пока. Пока это не было важно. Я хотел разобраться как устроена боевая серверная часть хотя бы на базовом уровне и кажется у меня получилось.
Суть примерно такая:
Теперь чуть больше порядка.
Я не настоящий сварщик! То есть не проф. python программист. Я только учусь!
Итого успехи у меня не большие к этому моменту. Я поиграл с flask-ом и поленившись всерьез добраться до SQLAlchemy взял Django как фреймворк пока. Пока это не было важно. Я хотел разобраться как устроена боевая серверная часть хотя бы на базовом уровне и кажется у меня получилось.
Суть примерно такая:
- Впереди стоит nginx который форвардит соединения для хоста на порт приложения
- За nginx стоит Gunicorn (Python WSGI HTTP Server)
- За Gunicorn уже само приложение на Django
- Все python компоненты, необходимые для работы приложения, собираются при помощи virtualenv + pip
Теперь чуть больше порядка.
- pip - это инструмент для установки и управления python-компонентами. То есть эта штука позволяет нам грубо говоря ставить/удалять/искать/создавать разные пакеты с указанной версией. Эдакий питоний apt-get или npm для node.js. Как он устанавливается и работает можно почитать на офсайте.
-
virtualenv - инструмент для создания "виртуальной среды" для выбранного приложения. По-простому говоря у вас на одном сервере живет несколько приложений которые требуют разные версии одного и того же python-компонента. Обязательно разные версии. Как быть, ведь глобально можно установить ровно одну версию. Тут как раз придет на помощь virtualenv. В общем тоже что и в node.js есть компоненты установленные глобально, а есть установленные специально под приложение и все это барахло можно контролировать. В разных доках и туториалах по python разработке умные дядьки настоятельно рекомендуют использовать virtualenv и я тут могу только с ними согласиться. Смысл очевиден. Ставится просто:
sudo pip install virtualenv
Базовое использование совсем не сложно# переходим в папку нашего проекта cd ~/project-folder # инициализируем вирт. среду (название среды может быть любым, у меня это ENV) virtualenv ENV # теперь внутри папки с нашим проектом будет создана папка ENV # с инициализированной виртуальной средой внутри # теперь активируем эту вирт. среду source ./ENV/bin/activate # обратите внимание строка приглашения bash будет дополнена названием среды # у меня в примере она выглядит вот так: (ENV)luke@tatuin:~/project-folder$ # теперь ставим в эту вирт среду нужные компоненты pip install Django pip install gunicorn pip install mysql-python # и так далее.. все что установлено можно посмотреть вот так pip list # для выхода из виртуальной среды нужно просто вызвать deactivate
В общем суть в том что virtualenv в активированном состоянии подменяет переменные в env (наберите в консоли env чтобы посмотреть текущие переменные окружения), отвечающие за размещение пакетов и бинарников, после деактивации все возвращается обратно, как было. - Как сделать болванку приложения на Django можно почитать на офсайте. Про это я сейчас писать ничего не буду, тут нет ничего необычного, все как в мануале. Будем считать что приложение у меня есть.
-
Сейчас у нас есть приложение и настроенная среда для приложения. Папка с приложением у меня сейчас выглядит вот так:
domain ENV manage.py manage.pyc requirements.txt run-dev.sh run-prod.sh static templates test1
ENV - папка с вирт. средой, domain - приложение проекта test1 (примерно так выглядит обычная структура django-приложения). Соответственно, чтобы запустить отладочную версию проекта достаточно запустить (при активированном virtualenv)python manage.py runserver
Ну и чтобы запустить боевую версию на gunicorn-e (при активированном virtualenv) делаем такgunicorn test1.wsgi:application -b 127.0.0.1:8800 --env FOO=VAL
Здесь мы биндим наше приложение на IP и порт. Через --env передаем переменную окружения (см. мануал по gunicorn) чтобы сообщить что-то приложению, что мы боевая версия например или номер генератора на котором будем работать, да что угодно в общем. Вообще запуск gunicorn можно отдельно конфигурировать в файл и читать все оттуда, это все есть на офсайте. В данном случае, для Django, запуск выглядит не совсем тривиально, с простыми приложениями это немного иначе выглядит. -
Ну и в конце nginx, через который мы завернем хост на наше приложение
server { listen 80; server_name lest1.loc; proxy_set_header Host $http_host; location / { proxy_pass http://127.0.0.1:8800; } }
На этом месте данных должно быть достаточно чтобы запустить приложение в боевом режиме. У Django ещё куча доп. внутренних настроек для отладки, но это уже другая история. -
Что осталось. Осталось понять как сохранять состояние среды окружения и как его восстанавливать обратно. Сохранить состояние можно в текстовый файл вот так
pip freeze > requirements.txt
Название файла может быть любым, по сути главное там формат. Загляните внутрь. Внутри будет содержимое видаDjango==1.6 MySQL-python==1.2.4 argparse==1.2.1 gunicorn==18.0 wsgiref==0.1.2
Теперь коммитим это в нашу систему контроля версий и когда нужно будет восстановить состояние проекта - создаем вирт. среду через virtualenv, активируем её и выполняем установку пакетов из сохраненного файла состояния вирт. среды. Все вместе будет выглядеть вот так:cd proj-folder virtualenv ENV source ./ENV/bin/activate pip install -r requirements.txt
Pip считает данные о зависимостях из текстовика и установит в вирт.среду все что нужно. Если будет нужно что-то скачать, то он конечно попробует скачать сам. Ну, тут уже все понятно. Пока это все. Надеюсь следующая пауза не будет длиннее.
sudo apt-get install python-dev sudo apt-get install libmysqlclient-dev
Linux: как быстро создать структуру папок
November 19, 2013
Врядли это для кого-то открытие конечно, но тем не менее.
У mkdir (man mkdir) есть ключик -p который позволяет создавать довольно интересные структуры подпапок одним движением. Например
Можно сделать несколько интереснее
У mkdir (man mkdir) есть ключик -p который позволяет создавать довольно интересные структуры подпапок одним движением. Например
mkdir -p ./one/two/threeсоздаст три вложенных друг в друга папки внутри текущей директории.
Можно сделать несколько интереснее
mkdir -p ./one/{two1,two2,two3}/threeчто даст нам такую структуру (допустим что мы запускали это все из домашней папки)
~/one/two1/three ~/one/two2/three ~/one/two3/threeНу и ещё раз если вдруг кто не понял что происходит
mkdir -p ./one/{two1,two2,two3}/{th1,th2,th3}Создает такую структуру
~/one/two1/th1 ~/one/two1/th2 ~/one/two1/th3 ~/one/two2/th1 ~/one/two2/th2 ~/one/two2/th3 ~/one/two3/th1 ~/one/two3/th2 ~/one/two3/th3Ну и понятное дело фигурные скобки можно использовать не только с mkdir, в этом примере мы чистим папки с кешем и логами для трех типовых проектов лежащих в текущей папке
#!/bin/bash rm -rf {proj1,proj2,proj3}/{logs,cache}/*