Час назад
Попытка подружить web2py DAL и Flask
В процессе написания движка для одного сайта я по ряду причин выбрал Flask + DAL (из web2py) для доступа к БД (подкупила поддержка Google App Engine). Всё было прекрасно до первой сохраненной в базе данных записи на русском языке. Запись сохранилась успешно, но вот на выходе из БД и передаче данных в шаблон я уже который день любуюсь ошибкой:
UnicodeDecodeError: ’ascii’ codec can’t decode byte 0xd0 in position 0: ordinal not in range(128)
Беда тут в том, что dal отдаёт данные в обычных строках, а flask с шаблонами работает через jinja2, который параметры из кода принимает только в юникоде. Вот и встретились два одиночества.
Создатель web2py заявил, что в ближайшее время web2py вряд ли полноценно подружится с python3 (и dal с юникодом в частности) из-за обратной совместимости.
Что имеем в итоге? Да собственно ничего. Кто-то должен стоять меж dal и flask и служить переводчиком.Т. е. нужен серьёзный костыль во всех местах программы, где данные из БД передаются в шаблон. В остатке: либо отказываться от DAL и соответственно потерять GAE, либо искать другой шаблонизатор, но это потеря совместимости с flask и переписывание почти всего кода.
UnicodeDecodeError: ’ascii’ codec can’t decode byte 0xd0 in position 0: ordinal not in range(128)
Беда тут в том, что dal отдаёт данные в обычных строках, а flask с шаблонами работает через jinja2, который параметры из кода принимает только в юникоде. Вот и встретились два одиночества.
Создатель web2py заявил, что в ближайшее время web2py вряд ли полноценно подружится с python3 (и dal с юникодом в частности) из-за обратной совместимости.
Что имеем в итоге? Да собственно ничего. Кто-то должен стоять меж dal и flask и служить переводчиком.
нет комментариев
17 мая, 22:49
MacBook Pro 2011 и 16Gb памяти
Сегодня довелось задаться вопросом, будет ли МакБук 2011 года поддерживать 16Гб памяти при условии, что на момент выпуска ноута такой памяти не было в продаже, поэтому Apple официально заявлила поддержку максимум 8Гб. Поиск по интернетам указывал на неоднозначность в данном вопросе. Постоянно проскакивала информация, что далеко не вся память совместима. Но однозначно заявлялось, что все макбуки до 2011 года не поддерживают более 8Гб, а начиная с 2011 — поддерживают, но опять же — не любую память. В общем никакой однозначности.
В итоге пришлось рискнуть и купить память Team SO-DIMM DDR3 2x8Gb:


Вобщем всем кто присматривает эту память для своего яблочного друга, сообщаю — работает на ура:

В итоге пришлось рискнуть и купить память Team SO-DIMM DDR3 2x8Gb:


Вобщем всем кто присматривает эту память для своего яблочного друга, сообщаю — работает на ура:

12 марта, 3:18
Улучшение курсора ввода текста
Меня тут осенило как можно улучшить обычный курсор ввода текста. Бывает банально неудобно глазами отрываться от текста и перемещать взгляд в угол чтобы поглядеть в каком режиме работает в данный момент клавиатура: русский, английский, Caps Lock и т. п. .. В связи с этим пришла идея использовать такой вот стиль курсора для ввода текста:

и вот так

или если кому-то кажется расточительством столько места тратить на флаг, то можно более аскетично:

Идея состоит в том, что текущая включённая раскладка должна быть видна возле курсора,т. е. в том месте, где у меня 99% времени находятся глаза во время ввода текста — т. е. в поле ввода. Это должно съэкономить какое-то количество времени, которое мы обычно тратим на то, чтобы перестать писать текст, переместить взгляд, вернуть взгляд, продолжить писать. Это очень актуально для тех у кого большие мониторы.
В среднем это занимает около 1-1,5 секунд. За год вполне может набежать приличный час времени. Хотя это зависит от того кто как использует компьютер. Обычный пользователь вряд ли часто переключается с языка на язык, а вот программист постоянно должен переключатся меж языками: код на английском, а разные документы, тексты, общение с коллегами и прочее общение обычно происходит на родном языке. Программисту это улучшение явно пришлось бы по душе.
Интересно, на сколько удобна такая идея в жизни? Да и вопрос реализации интересен. Современные операционные системы не предоставляют возможности хоть как-то изменить курсор в поле ввода, так что для этого потребуется серьёзный обход штатных средств.

и вот так

или если кому-то кажется расточительством столько места тратить на флаг, то можно более аскетично:

Идея состоит в том, что текущая включённая раскладка должна быть видна возле курсора,
В среднем это занимает около 1-1,5 секунд. За год вполне может набежать приличный час времени. Хотя это зависит от того кто как использует компьютер. Обычный пользователь вряд ли часто переключается с языка на язык, а вот программист постоянно должен переключатся меж языками: код на английском, а разные документы, тексты, общение с коллегами и прочее общение обычно происходит на родном языке. Программисту это улучшение явно пришлось бы по душе.
Интересно, на сколько удобна такая идея в жизни? Да и вопрос реализации интересен. Современные операционные системы не предоставляют возможности хоть как-то изменить курсор в поле ввода, так что для этого потребуется серьёзный обход штатных средств.
29 февраля, 15:51
yuvit: мой небольшой проект с открытым кодом
Примерно в 2005-2006 году я работал над различными проектами связанными со сжатием видео и на фоне этого я написал утилиту которая позволяет конвертировать из картинок любого формата в формат yuv. Тогда она называлась any2yuv, содержала некоторое количество багов, да и вообще я её собрал просто как, заархивировал с исходниками и положил на sourceforge и более не вносил в неё каких-либо изменений.
Прошло время и я получил несколько запросов добавить функционал и просьбы исправить ошибки. В итоге я её переписал с нуля на C++, отказался от умершей библиотеки Corona и заменил её на FreeImage. Всё это счастье я выложил на github вот здесь и назвал её yuvit.
Утилита распространяется под LGPL и доступна для Linux, MacOS и Windows.
Happy using! =)
Прошло время и я получил несколько запросов добавить функционал и просьбы исправить ошибки. В итоге я её переписал с нуля на C++, отказался от умершей библиотеки Corona и заменил её на FreeImage. Всё это счастье я выложил на github вот здесь и назвал её yuvit.
Утилита распространяется под LGPL и доступна для Linux, MacOS и Windows.
Happy using! =)
26 февраля, 3:36
Ubuntu samba shares — проблемы и их решения
Забавно через раз писать то о Ubuntu, то о Mac OS... =) Но жизнь заставит и не с таким разнообразием столкнёшься. Вобщем проблема с которой я столкнулся:
— Сервер Ubuntu 11.10
— На сервере около 10-15 пользователей
— Каждому пользователю должна быть предоставлена личная папка в общем доступе.
— Права на папку: сам пользователь может и читать и писать в неё, а все остальные только читать.
Проблема номер раз
Оказалось, что открыть доступ к любой папке из-под юзера, который был первым в системе — не проблема. Всё отлично работает из десктопной оболочки Nautilus. Проблема — это зайти под любым другим пользователем и сделать то же самое.Т. е. я не в состоянии создать папку любым другим пользователем отличным от пользователя созданного при установке системы. При этом постоянно выскакивает ошибка:
Потратил 2 дня, читал askubunu, ubuntuforums, но ничего вменяемого не нашёл. Были предложения открывать из-под root — но это не работало в итоге,т. к. никто не мог потом зайти на этот ресурс под своим логином/паролем поскольку такой ресурс был создан с разрешениями root и все остальные шли в сад. Решение конечно было найдено, оно логичное, но не логично то, почему нет штатных средств для решения этого вопроса? В общем чтобы любой пользователь мог открыть доступ к своим папкам надо добавить этого пользователя в группу sambashare:
Можно это и через GUI сделать, но для этого надо установить gnome-system-tools. Затем открыть «Users and Groups» и добавить нужных пользователей в группу sambashare. По не ясной для меня причине начиная с Ubuntu 11.04 эту возможность убрали из стандартной поставки и дополнительные утилиты надо ставить вручную.
Проблема номер два
Теперь надо лично зайти под именем каждого пользователя и расшарить папку. Неудобно, долго, нудно. Можно воспользоваться полезной командой «net» запущенной от имени нужного нам пользователя:
Предлагаю понять, что делает эта команда по частям.

1. Выполняем от имени нужного нам пользователя.
2. Команда создания общего ресурса.
3. Имя ресурса как оно будет видно в сети.
4. Путь к папке, которую мы делаем доступной по сети.
5. Коментарий. Синтаксис команды требует чтобы перед списком прав доступа к ресурсу был коментарий, поэтому я поставил пустой коментарий. Можно описать что это за общий ресурс.
6. Права доступа. Разделяются запятыми. Например «Everyone:R» означает, что любой пользователь может открыть ресурс в режиме «только чтение» (Read оnly отсюда и R). А вот «$(hostname)\\USER_NAME:F» означает, что пользьзователь USER_NAME имеет «полный доступ» (Full отсюда и F). Поскольку Samba изначально проектировалась для Windows сетей, то нам требуется указать домен или рабочую группу. Поскольку ни того ни другого у нас щас нет, то мы просто используем имя нашего хоста указав перед именем пользователя «$(hostname)\\».
После этого всё заработало.
Happy using! =)
— Сервер Ubuntu 11.10
— На сервере около 10-15 пользователей
— Каждому пользователю должна быть предоставлена личная папка в общем доступе.
— Права на папку: сам пользователь может и читать и писать в неё, а все остальные только читать.
Проблема номер раз
Оказалось, что открыть доступ к любой папке из-под юзера, который был первым в системе — не проблема. Всё отлично работает из десктопной оболочки Nautilus. Проблема — это зайти под любым другим пользователем и сделать то же самое.
'net usershare' returned error 255: net usershare: cannot open usershare directory /var/lib/samba/usershares.
Потратил 2 дня, читал askubunu, ubuntuforums, но ничего вменяемого не нашёл. Были предложения открывать из-под root — но это не работало в итоге,
sudo usermod -aG sambashare USER_NAME
Можно это и через GUI сделать, но для этого надо установить gnome-system-tools. Затем открыть «Users and Groups» и добавить нужных пользователей в группу sambashare. По не ясной для меня причине начиная с Ubuntu 11.04 эту возможность убрали из стандартной поставки и дополнительные утилиты надо ставить вручную.
Проблема номер два
Теперь надо лично зайти под именем каждого пользователя и расшарить папку. Неудобно, долго, нудно. Можно воспользоваться полезной командой «net» запущенной от имени нужного нам пользователя:
sudo -u USER_NAME net usershare add SHARE_NAME /path/to/share " " Everyone:R,$(hostname)\\USER_NAME:F
Предлагаю понять, что делает эта команда по частям.

1. Выполняем от имени нужного нам пользователя.
2. Команда создания общего ресурса.
3. Имя ресурса как оно будет видно в сети.
4. Путь к папке, которую мы делаем доступной по сети.
5. Коментарий. Синтаксис команды требует чтобы перед списком прав доступа к ресурсу был коментарий, поэтому я поставил пустой коментарий. Можно описать что это за общий ресурс.
6. Права доступа. Разделяются запятыми. Например «Everyone:R» означает, что любой пользователь может открыть ресурс в режиме «только чтение» (Read оnly отсюда и R). А вот «$(hostname)\\USER_NAME:F» означает, что пользьзователь USER_NAME имеет «полный доступ» (Full отсюда и F). Поскольку Samba изначально проектировалась для Windows сетей, то нам требуется указать домен или рабочую группу. Поскольку ни того ни другого у нас щас нет, то мы просто используем имя нашего хоста указав перед именем пользователя «$(hostname)\\».
После этого всё заработало.
Happy using! =)