Мелочь

Дожидаемся завершения процесса и выключаем компьютер:

#!/bin/bash
pid=$1
while kill -0 $pid 2> /dev/null >/dev/null
do
  sleep 1
done
shutdown -h now
Мар 18

Kinamania.com

Не так давно Павел Гринёв (aka Kinaman) запустил таки сайт о страшных, но ностальгичных 90х.

Тем кто провел детство в эту ужасную эпоху — крайне рекомендуется посетить ресурс:
kinamania.com

А еще можно посмотреть его замечательный фильм «Проклятие серого слонёнка»

Фев 13

Windows, COM, 1C и Python

Пролог

Потребовалось сделать выгрузку из 1С в куда-то еще. 1С версии 8.2, но подобным же образом можно получить данные из 7.7, 8.0, 8.1 и думается 8.3 — только названия документов другие.
Данные будем получать через COM — на сколько я знаю, у 1Сников это довольно распростаненный способ, и документации довольно много.
Для работы с COM на питоне потребуется модуль win32com — установка ничем необычным не отличается.

Для напримера, из стандартной конфигурации 1C Бухгалтерия 2.0 забирать список выставленных счетов и отправлять на некий сайт.
Continue reading

Фев 09

Ускоряем Django: View на С

Иногда требуются ресурсоемкие вычисления, и узким местом становится именно питон. Тогда на помощь приходит код написанный на C/С++
К счастью питон-модули пишутся довольно просто, и документация с примерами есть на официальном сайте. Никакой америки я сейчас не открою, и если вы когда-нибудь сталкивались с написанием модуля для питона — далее можно не читать — все довольно примитивно.

Continue reading

Фев 06

Django: POST

Тут все предельно просто, параметры POST-запроса парсятся и услужливо складываются в словарь POST объекта request, который всегда передается первым параметром в любой view.
Пример.
Форма

<form method="POST" action="/hello">
<label>Name:</label><input type="text" name="name" />
<input type="submit" /> 
</form>

view обрабатывающий URL /hello:

@csrf_exempt # глушилка защиты CSRF, об этом ниже
def hello(request):
text = ""
 if "name" in request.POST: 
  text = u"Параметр POST передан: привет %s" % request.POST['name']
 else:
  text = u"Параметр POST не передан"
 return HttpResponse(text)

Continue reading

Янв 26

Триколор HD и GS-8306

Плюсов (кроме HD, которое все же работает) нет.
Недостатки в огромных количествах:

  • Реклама при переключении между каналами, отключить нельзя. Страшная, стыдно перед телевизором, за то, что заставляю его показывать это. Про себя молчу.
  • Светодиод в режиме ожидания ночью освещает комнату лучше, чем солнце днем. Можно было бы книжки читать, если бы он при этом еще не мерцал.
  • Смотреть можно только триколор, ручного поиска каналов нет. А еще «ресивером» называют.
  • Зависает. Помогает только выключить-подождать-включить из розетки.
  • Тормозит. Регулировка громкости не сразу отзывается. Про остальное молчу
  • Функционал на нуле. Даже каналы по собственым предпочтениям выстроить нельзя. («Избранное» после обновления списка каналов обнуляется)
  • И самое главное: через месяц редкого использования отгорел HDMI. Теперь и HD нет. Причем не только у меня.

За 10к можно было бы купить приличный ресивер, Dr.hd f15 с DRE модулем, например.
Это самая глупая трата денег в моей жизни. Даже когда кошелек (с порядком большей суммой) потерял — сожалел много меньше.

Янв 26

Django. Передача GET-параметров

В продолжении Личное: Django. От простого

Научим приложение main здороваться с конкретным человеком. Для этого нужно в представление сообщить имя этого человека: модифицируем наше представление:

def hello(Response, name='World'):
 return HttpResponse("Hello %s!" %name)

Теперь функция представления принимает один необязательный аргумент name
Добавим привязку в urls.py

url(r'^(\w+)$', 'main.views.hello'),

Подробнее с регулярными выражениями можно познакомиться в документации на Python http://docs.python.org/2/library/re.html

В случае совпадения URL с данным регулярным выражением, Django вытащит группу указанную в скобках \w+ в качестве второго параметра функции представления: например запрос

http://127.0.0.1:8000/User
приведет к вызову

hello(Request,"User")

И страничка поздоровается c User:

Hello User!

Янв 26

Django. От простого

В продолжении Django. Структура проекта.

Итак проект создан — и уже работает, можно запустить development сервер и посмотреть, что получилось:

$ ./manage.py runserver
Validating models...

0 errors found
Django version 1.4.3, using settings 'first.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Здесь видно что сервер запустился на loopback интерфейсе на порту 8000. Использование loopback-интерфейса по-умолчанию кроет в себе некий смысл:
development-сервер можно (и нужно) использовать только для разработки проекта.
Continue reading