Поиск первого вхождение подстроки. Решение в лоб.

Поиск информации — одно из основных использований компьютера. Одна из простейших задач поиска информации — поиск точно заданной подстроки в строке. Тем не менее, эта задача чрезвычайно важна — она применяется в текстовых редакторах, СУБД, поисковых машинах…

Читать

Алгоритм Кнута-Морриса-Пратта (КМП)

Алгоритм был разработан Кнутом (Knuth) и Праттом (Pratt) и независимо от них Моррисом (Morris) в 1977 г.

Он относится к «правильным» подходам решения поставленной задачи, в отличии от тривиального подхода, рассмотренного ранее.

Данный подход хоть и считается достаточно тривиальным, описания, которые нашел я, зачастую пестрят математическими основами и доказательствами, которые сбивают с сути. Так в книге, уважаемого Никлауса Вирта, приводится описание, которое я так и не одолел.

Однако я нашел пару статей, которые достаточно информативны, они приведены в ссылках и рекомендуемы для ознакомления.

Читать

Тибетская диета

Тип диеты — низкокалорийная

Убыль веса —   3-4 кг

Продолжительность —  7 дней

Если вы хотите не только хотите похудеть, но и омолодить свой организм обязательно попробуйте тибетскую диету. Основа диеты – молоко и продукты растительного происхождения – овощи и фрукты. Мясо, птица, яйца запрещены. Исключение составляет рыба, которая присутствует в диете в незначительном количестве, да и то не каждый день.
Основные правили тибетской диеты:

— есть нужно не торопясь, в спокойной обстановке, тщательно пережевывая пищу, это способствует лучшему перевариванию и не дает откладываться жиру;

— перекусы между основными приемами пищи запрещены;

— питьевой режим не ограничен, но воду пить рекомендуется за час до еды, лучше родниковую или минеральную без газов;

— стараться не есть на ночь, последний прием пищи должен быть не позднее чем за два часа до сна;

— сочетать диету с дыхательными и физическими упражнениями на свежем воздухе, это способствует более эффективному похудению, а так же омоложению организма.

Читать

Использование try-finally

Хочу обратить внимание на маленькую особенность написания конструкции try-finally.

Возьмём для примера многопоточность, а конкретно блокировки.

Где-то (наверное, в конструкторе класса) мы создали объект блокировки:

self.locker = threading.RLock()

Затем в каком-то методе мы пытаемся использовать эту блокировку в try-finally statement. Да, я знаю что RLock поддерживает context manager protocol и может использоваться в with statement. Так будет даже лучше, но мы сейчас говорим о другом варианте использования.

try:
self.locker.acquire()
do_some_work()
finally:
self.locker.release()

В чём ошибка? .acquire() может выбросить исключение. Блокировка не будет захвачена и попытка её освободить в .release() выбросит новое (другое) исключение. Что крайне нежелательно. Особенно в python 2.x, где нет цепочек исключений. Т.е. ошибка в .acquire() будет просто скрыта, понять в чём было дело невозможно.

Правильно писать так:

self.locker.acquire()
try:
do_some_work()
finally:
self.locker.release()

Если было исключение в .acquire() — то блокировка не захвачена и освобождать её не нужно. Пусть обработка исключения разворачивается своим ходом, .release() в finally block совершенно не нужен.

Правило простое и понятное, тем не менее я сам нередко писал ошибочный код. А сегодня опять увидел это проблему при чтении чужих исходников.

Проблема усугубляется тем, что обычно .acquire() работает успешно, и лишь в редких случаях выбрасывает исключение. Которое мы видим в логах (все используют логи, верно?) и недоумеваем, что именно произошло.

Это замечание относится к любому коду, выполняемому в finally block.

Переменные, блокировки, захват ресурсов, открытие файлов и т.д. должны быть выполнены перед try.

P.S.

На открытие файлов хочу обратить особое внимание как на самый частый случай. Куда более частый чем работа с многопоточностью. Правильно писать:

f = open('filename')
try:
f.read()
finally:
f.close()

Надеюсь, последний пример запомнится хорошо и внесёт ясность в головы уважаемых молодых коллег.

Автор: Andrew Svetlov

Подвесные кашпо

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

подвесные кашпо

Но куда поставить все эти горшки? Вот тут как раз и следует сделать подвесные кашпо, где горшки можно разместить в несколько ярусов.

Читать

Аксессуары своими руками

Украшения легко и просто

Как нам хочется щеголять весной во всей красе, не уставая удивлять окружающих все новыми и новыми нарядами и аксессуарами. С наступлением весны мы все сами пробуждаемся, у нас находится куча дел. Нужно все время куда-то бежать, что-то делать и с кем-то договариваться. Когда найти время на рукоделие? А ведь на украшения хэндмэйд нередко нужно потратить немало времени, запастить терпением и усидчивостью. Так бывает часто, но не в этот раз. Сегодня мы представляем мастер класс для ленивых или очень занятых  девушек. Бижутерия легко и просто, и, самое важное, быстро представляется вашему вниманию, дорогие читательницы.

Бижутерия своими руками

Бижутерия своими руками

Читать