Pull to refresh
1
0
Dimonji @dimonji

Engineer

Send message

Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

Reading time6 min
Views446K

На Хабре множество раз обсуждалась тема декораторов, однако, на мой взгляд, данная статья (выросшая из одного вопроса на stackoverflow) описывает данную тему наиболее понятно и, что немаловажно, является «пошаговым руководством» по использованию декораторов, позволяющим новичку овладеть этой техникой сразу на достойном уровне.

Итак, что же такое «декоратор»?


Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
 
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
 
@makebold
@makeitalic
def hello():
    return "hello habr"
 
print hello() ## выведет <b><i>hello habr</i></b>

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

Веб-разработка с ChicagoBoss framework

Reading time18 min
Views9.6K
Chicago Boss
«Chicago Boss — бескомпромиссный веб-фреймворк, любимый дизайнерами, инженерами и этим парнем с пейджером.» — © chicagoboss.org

«Erlang — язык для создания отказоустойчивых распределенных приложений. Это — один из немногих функциональных языков, который давно и успешно применяется на практике. Например — в телекомах (Ericsson AXD-301 switch), банковских системах, системах автоматизации, высоконагруженных веб-приложениях (Facebook Chat). При этом Erlang — продукт с открытым исходным кодом и распространяется бесплатно.» — говорит нам сайт русскоязычного сообщества Erlang.

Данный пост предназначен для расширения аудитории Erlang программистов. Если до этого вы считали что функциональное программирование не может быть использовано для бытовых целей, то пора расширить ваш кругозор. Этот пост писался при поддержке моего товарища, лично знакомого с создателем данного фреймворка (Эван Миллер) и последнее время фанатеющего от данного языка.

По заверению обоих разработка веб-приложений на базе этого фреймворка ничуть не медленнее разработки на тех же рельсах (Ruby on Rails). А в чем-то даже быстрее. Я с функциональным программированием до этого особо знаком не был, но под давлением товарища решил попробовать. Хочу сказать, что опыт был весьма удачным и у меня получилось создать мой первый веб-сайт быстрее, чем год назад с тем же Ruby on Rails.

Добро пожаловать под кат

JavaScript в диаграммах (Часть 1)

Reading time5 min
Views2K
Одним из секретов эффективного JavaScript-разработчика является глубокое понимание семантики языка. В этой статье я объясню основные элементарные части языка, используя максимально простые и понятные диаграммы.
Читать дальше →

Создание оконного интерфейса при помощи jQuery UI. Часть 1

Reading time4 min
Views32K
Статья рассчитана на пользователей только начинающих работать с jQuery UI и желающих на практике познакомиться с этой библиотекой.
Данный оконный интерфейс предполагает такие основные свойства как — наличие окон, возможность их перетаскивания, возможность изменения размера окон, их свертывания/развертывания и т.д. Вот что должно получиться в итоге.
Итак, имеем желание создать пример интерактивного оконного веб-интерфейса и возможности использовать для этой цели jQuery UI – тогда, добро пожаловать под кат.
Читать дальше →

Django Admin Actions — действия с промежуточной страницей

Reading time2 min
Views16K
Привет. Полезная штука экшены в админке! Хочу поделиться как можно сделать экшен который после выбора элементов будет отправлять пользователя на промежуточную страницу чтобы с этими элементами можно было сделать что то особенное. Пример? Например у вас есть интернет магазин, таблица товаров. Вы хотите перенести часть товаров из одного раздела (книги) в другой (книги технические). Выбираем нужные книги, выбираем действие «Перенести в другой раздел», жмем применить, переходим на промежуточную страницу, выбираем нужный раздел и жмем сохранить. Здорово? Давайте попробуем.
Читать дальше →

Чуть-чуть «извращений» над моделями django

Reading time3 min
Views7K

Лень двигатель прогресса


Иногда, создавая модели в django, я себя начинаю чувствовать мартышкой. Постоянно создаю атрибут enable, который принимает по умолчанию то значение True, то False. Меняю менеджер objects на свой простой EnableManager. А хочется иметь механизм, который эти монотонные операции делал за меня. Раз хочется, то можно сделать.

Читать дальше →

Emacs для начинающих: введение

Reading time4 min
Views25K

Ist das Emacs? Sehr gut!



Начну с небольшой истории. Лет так 15 назад ездил я на подработку сисадмином программистом в славный городе Mannheim, West Germany. Когда я приехал на работу и развернул своё рабочее окружение, большинство дойчей вообще не сильно поняли в чём я работаю, а вот директор конторы сразу мне сказал: «Ist das Emacs? Sehr gut!», добавив также что никто кто из текущих программистов не смог его освоить. А по честному, не такой уж я особенный — мне просто повезло: готовый конфиг мне дал один добрый человек, и помог мне разобраться с редактором на первых шагах. Я, в свою очередь хочу поделиться своим опытом с остальными, и решил сделать серию статей для начинающих и не очень, с рассмотрением разных полезных фич emacs.

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

Интеграция Python и C++

Reading time3 min
Views57K
Всем доброго времени суток!

Недавно при прототипировании одной из частей разрабатываемого нами продукта возникла одна интересная задача: нужно было проверить склейку Python и C++. Связано это было с тем, что основной код был написан на плюсах, и необходимо было подключить внешнюю библиотеку Websockets, написанную на Python (на тот момент не было соответствующей библиотеки на C++). Схема взаимодействия при такой задаче достаточно простая. Из C++ вызывается функция подключения к серверу (на python), в качестве параметра передается его адрес. Соответственно, при получении сообщния Python передавает его обратно в метод C++.
Читать дальше →

Подсветка синтаксиса в VIM: полное погружение

Reading time6 min
Views48K
VIM примечателен тем, как просто и гибко его можно настраивать. В этой статье я подробно опишу, как легко и просто можно создавать собственные правила подсветки синтаксиса на различных примерах.

Да, на хабре об этом уже была cтатья, однако в ней тема была рассмотрена очень уж поверхностно, а я постараюсь разобраться в этом подробно. Будут рассмотрены от самых простых примеров, включая улучшения подсветки html для подсветки тэгов хабраразметки, до создания подсветки для полноценных языков программирования, с «контекстно-зависимой» подсветкой синтаксиса.
Кого заинтересвало, прошу читать далее

Trafaret — библиотека для проверки и преобразования данных

Reading time5 min
Views5.7K
Исходные данные — вы строите некий сервис, и узнаете, что будете получать данные из вне в определенном формате.
Предположим что это будет JSON, структуру его определяете не вы, и вообще вот она:
Читать дальше →

Список команд чата Skype

Reading time6 min
Views693K
...Skype — это дьявольски хитрая программа, написанная бесспорно талантливыми людьми...Крис Касперски

Доброго времени суток!

Skype сейчас я встречаю чаще на компьютерах чем другие IM клиенты, мне он практически заменил icq, вся рабочая переписка ведется в skype, но речь пойдет не о том, что лучше или популярней. Часто бывает так, что участвуешь сразу в нескольких чатах где количество участников превышает 10, что собственно и приводит к тому, что на рабочем столе и в трее постоянно обновляется количество новых сообщений, а также уведомления в виде всплывающих сообщений, а теперь представьте что у вас 3 окна чата с друзьями, 1 с вашим боссом, другой с девушкой — все это в сумме начинает запутывать, отвлекать и порой раздражать. Хотелось бы расставить приоритеты…

Раньше я чаще всего настраивал «политику» уведомлений только через глобальные настройки программы
Случилось так, что я узнал, что в каждом окне чата skype возможно использование команд, например /alertsoff отключит уведомления для конкретного окна чата, соответственно /alertson включит их обратно.
Поискав немного я наткнулся на некое how-to, оказывается у skype чата довольно много текстовых команд, подобие IRC команд. Далее я постарался попробовать все возможные из них на двух имеющихся у меня платформах, как оказалось не все и не везде работает… Прошу под кат.

Читать дальше →

Memoization в Python

Reading time1 min
Views17K
Memoization – свойство функций сохранять (кешировать) результаты вычислений, дабы не вычислять в последствии повторно.

Эта технология оптимизации позволят достичь прироста скорости работы за счет потерь в свободной памяти.

Допустим, у нас есть некая функция bigfunc, результат которой зависят только от переданных в нее аргументов, а сложность вычислений достаточно большая. Естественно нам не хотелось бы производить вычисления при каждом вызове bigfunc если она уже вызывалась ранее с теми же параметрами. Тут то нам на помощь и приходит memoization.

Для python декоратор для функции будет выглядеть следующим образом:

import cPickle
def memoized(func):
    memory = {}
    def memo(*args,**kwargs):
       hash = cPickle.dumps((args, sorted(kwargs.iteritems())))
       if hash not in memory:
           memory[hash] = func(*args,**kwargs)
       return memory[hash]
    return memo

Далее, нам достаточно объявить bigfunc как

@memoized
def bigfunc(…):
…

Или переопределить, если она уже объявлена:

bigfunc = memoized(bigfunc)

Декоратор, объявленный в начале статьи, работает только с пиклезуемыми объектами. Если ваша функция работает с непиклезуемыми объектами – вы можете заменить

hash = cPickle.dumps((args, sorted(kwargs.iteritems())))

на

hash = (tuple(args), frozenset(kwargs.items())

но вы потеряете возможность работы с mutable объектами.

Декоратор можно легко модифицировать, для ограничения количества закешированных элементов.

Функциональное программирование для землян — функции

Reading time5 min
Views9.2K


В статье про Python пользователь Xronos попросил рассказать о функциональном программировании (ФП). Поскольку я одно время довольно плотно занимался с Lisp, я хотел бы немножко рассказать об этом. Сразу хочу сказать, что о чистом ФП речь не идет. Я расскажу о более простых и более применимых приемах на примере языка Python.

Читать дальше →

Функциональное программирование для землян — списки

Reading time6 min
Views10K
Продолжаю свое небольшое введение в функциональное программирование. На этот раз речь пойдет о списках и методах их обработки в функциональном стиле.

Читать дальше →

Вопросы Леонардо да Винчи

Reading time3 min
Views15K
Здравствуйте!

Это вторая из трех статей о техниках анализа проблем и принятия решений (первая здесь).

Сегодня речь пойдет о технике, которая называется «Вопросы Леонардо да Винчи» и является скорее способом мозгового штурма.
Откуда такое название? По непроверенной информации метод этот появился после расшифровки и анализа дневников гения, в которых и было найдено описание, а также следы неоднократного применения данного метода.

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

Примеров в этой статье не будет по двум причинам.
1. Пример в первой статье оказался крайне неудачным
2. Текст получился бы слишком громоздким, если бы я использовал хотя бы один пример (сейчас поймете почему)

Всех заинтересовавшихся прошу под кат.

Читать дальше →

Пользовательские атрибуты в Python

Reading time11 min
Views190K
Вы когда нибудь задумывались о том, что происходит, когда вы ставите точку в python? Что скрывает за собой символ str(“\u002E”)? Какие тайны он хранит? Если без мистики, вы знаете как происходит поиск и установка значений пользовательских атрибутов в python? Хотели бы узнать? Тогда… добро пожаловать!
Читать дальше →

Учимся использовать Glade

Reading time3 min
Views44K
В прошлый раз я обещал, что напишу про программу Glade.

Glade — это приложение для визуального создания графических интерфейсов на GTK+. Оно имеет открытый исходный код и распространяется совершенно бесплатно.

Помните, как мы пытались нарисовать окошко через код? Прочитав этот топик вы сможете создавать хоть тысячи таких окошек просто перемещая виджеты из палитры.


Читать дальше →

Повышаем производительность программирования (ментальная карта)

Reading time3 min
Views20K
часы

Хочу поделиться с вами своими долголетними наблюдениями о том, как улучшить производительность труда программиста. Вот ментальная карта в виде картинки, вот — в виде mm файла, а ниже — она же в виде вложенных списков.
Читать дальше →

To-do лист Леонардо да Винчи

Reading time2 min
Views10K
Леонардо да Винчи известен тем, что за свою жизнь успел сделать много важных открытий, создать много важных изобретений и внести свой незабываемый вклад в развитие человечества. Как ему это удалось? Может быть, он был гениален и все открытия-изобретения давались ему без труда. Может быть, он мало спал, не больше 4 часов в день, а остальное время работал не покладая рук. Может быть еще десяток других версий и их совокупность. Но историк Тоби Лестер (Toby Lester) перевел на английский язык (со своими пояснениями в скобках) To-Do лист конца 15 века (примерно 1490-е года) из блокнота Леонардо да Винчи.
Картинка (большая) под катом.
Читать дальше →

Information

Rating
Does not participate
Location
Кривой Рог, Днепропетровская обл., Украина
Date of birth
Registered
Activity