Search
Write a publication
Pull to refresh
1
0
Andrew @Bonch

User

Send message

Улучшенные идиомы для плагинов

Reading time6 min
Views2K
Этот пост был опубликован 12 ноября 2009 года, но я думаю он не потерял своей актуальности, потому что плагины к Rails (и не только) все так же актуальны.

Последние дни мы с Карлом работали над системой плагинов. В частности, мы прошлись по Rails Plugin Guide. Читая гайд, мы заметили много излишеств в представленных там идиомах.

Я не упрекаю автора гайда; представленные идиомы в точности повторяют те, которые использовались с самых ранних дней Rails. С другой стороны, глядя на них я вспоминал те дни, когда при виде такого кода мне казалось, что Ruby полон магических заклинаний и относительно простые вещи требуют проведения каких-то особых церемоний (вроде танца с бубном. — Прим. перев.).

Вот пример:
Copy Source | Copy HTML<br/>module Yaffle<br/>  def self.included(base)<br/>    base.send :extend, ClassMethods<br/>  end<br/> <br/>  module ClassMethods<br/>    # любой метод здесь будет применяться классом, например, Hickwall<br/>    def acts_as_something<br/>      send :include, InstanceMethods<br/>    end<br/>  end<br/> <br/>  module InstanceMethods<br/>    # любой метод тут будет применяться экземпляром, например, @hickwall<br/>  end<br/>end <br/>

Начнем с того, что send вообще не нужен. Метод acts_as_something будет вызываться в самом классе, что даст ему доступ к приватному методу include.
Читать дальше →

Использование коэффициента Танимото для поиска людей с одинаковыми предпочтениями

Reading time3 min
Views13K
Решая упражнения к книге «Программируем коллективный разум», я решил поделиться реализацией одного из алгоритмов упомянутого в этой книге (Глава 2 — Упражнение 1).

Исходные условия следующие: пусть мы имеем словарь с оценками критиков:

critics={'Lisa Rose'{'Superman Returns'3.5'You, Me and Dupree'2.5'The Night Listener'3.0}
           'Gene Seymour'
{'Superman Returns'5.0'The Night Listener'3.5'You, Me and Dupree'3.5}}

Чем выше оценка, тем больше нравится фильм.
Надо вычислить: насколько схожи интересы критиков для того, например, чтобы можно было на основе оценок одного рекомендовать фильмы другому?

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

Почему многие сайты не используют геолокацию?

Reading time1 min
Views6.3K
Сегодня многие компании не ограничиваются одним городом, а выходят на российский и даже международный уровень. Постоянно на слуху термины «глобализация», «транснациональные корпорации».
Постоянно задаю себе вопрос, почему то, что описано чуть ли не в каждой книге по дизайну/usability с таким трудом входит в реальную жизнь?
Конечно, такие компании как Google, Yandex знают, что такое геолокация и геотаргетинг – это то, что позволяет лучше зарабатывать им на хлеб.

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

Ловушка “группомыслия” и другие эффекты работы в команде

Reading time4 min
Views13K
Возможно многие сталкивались с подобным парадоксом: почему от увеличения числа участников в команде, эффективность ее работы не только не увеличивалась, но, наоборот, снижалась? Я начал изучать данный вопрос, т.к. по ходу своей управленческой деятельности сталкивался с подобной ситуацией несколько раз.

Тем, кто непосредственно связан с организацией работы в команде и использует коллективный способ принятия решения, следует знать о таком явлении как «групповые эффекты»
Читать дальше →

Система непересекающихся множеств и её применения

Reading time10 min
Views79K
Добрый день, Хабрахабр. Это еще один пост в рамках моей программы по обогащению базы данных крупнейшего IT-ресурса информацией по алгоритмам и структурам данных. Как показывает практика, этой информации многим не хватает, а необходимость встречается в самых разнообразных сферах программистской жизни.
Я продолжаю преимущественно выбирать те алгоритмы/структуры, которые легко понимаются и для которых не требуется много кода — а вот практическое значение сложно недооценить. В прошлый раз это было декартово дерево. В этот раз — система непересекающихся множеств. Она же известна под названиями disjoint set union (DSU) или Union-Find.

Условие


Поставим перед собой следующую задачу. Пускай мы оперируем элементами N видов (для простоты, здесь и далее — числами от 0 до N-1). Некоторые группы чисел объединены в множества. Также мы можем добавить в структуру новый элемент, он тем самым образует множество размера 1 из самого себя. И наконец, периодически некоторые два множества нам потребуется сливать в одно.

Формализируем задачу: создать быструю структуру, которая поддерживает следующие операции:

MakeSet(X) — внести в структуру новый элемент X, создать для него множество размера 1 из самого себя.
Find(X) — возвратить идентификатор множества, которому принадлежит элемент X. В качестве идентификатора мы будем выбирать один элемент из этого множества — представителя множества. Гарантируется, что для одного и того же множества представитель будет возвращаться один и тот же, иначе невозможно будет работать со структурой: не будет корректной даже проверка принадлежности двух элементов одному множеству if (Find(X) == Find(Y)).
Unite(X, Y) — объединить два множества, в которых лежат элементы X и Y, в одно новое.

На рисунке я продемонстрирую работу такой гипотетической структуры.


Как такое сделать и зачем оно нужно

Почтовые ящики для стандартных сервисов, ролей и функций

Reading time2 min
Views11K
Недавно столкнулся с неприятной ситуацией — почтовый сервер попал в спам-листы. Дыру быстро нашли и залатали, но компания Oracle уже занесла наш сервер в свой черный список, причем блокировали нас ещё на стадии соединения.
Возник вопрос — куда писать? На сайте была только форма для клиентов, support@oracle.com предназначался для них же.
После недолгих раздумий, появилась мысль — а нет ли стандарта, определяющего почтовые адреса по которым надо писать в таком случае? Оказалось, что есть и описан он в RFC 2142.

Самое интересное содержится в таблицах, которые приведены ниже.
Читать дальше →

HTML5 Prefetching — Предварительная загрузка документов

Reading time2 min
Views8.2K
Аж в 2003 году Mozilla представила новый механизм для оптимизации загрузки страниц. И существует большой шанс, что технология войдет в HTML5.

Суть же метода в том, что на любой странице браузеру можно указать документы (страница, файл стилей, картинка), которые в скором времени могут понадобиться пользователю. И он заранее их закэширует.
Узнать, как использовать prefetching

Впечатляющие анимационные эффекты

Reading time2 min
Views115K
С появлением jQuery, у веб-программистов появилась возможность создавать впечатляющие визуальные эффекты, не прибегая к использованию технологии flash. В данной статье представлено несколько ярких примеров того, каких потрясающих результатов можно достичь, используя стандартные средства браузера и свое воображение.
Читать дальше →

Windows Aero эффект на чистом HTML+CSS+JS

Reading time1 min
Views7.5K
Вдогонку к посту «jQuery → Впечатляющие анимационные эффекты» решил показать свою поделку, созданную скорее для развлечения, а не для реального внедрения. Я попытался сделать эффект размытия заднего фона как в Windows Aero.



Вот пример, вместе с картинками весит 200 Кб. Довольно много.

Следующий шаг — использовать одну картинку для заднего фона, а размывать с помощью SVG. Пример с SVG почему-то работает только в Опере (как написано в комментариях, в других браузерах тоже работает) и грузит процессор на 100%.

Вывод: с помощью существующих технологий этот эффект реализовать можно, но либо картинки будут много весить, либо процессор будет загружен на все сто. До реального внедрения ещё далеко, но может быть кто-то знает более изящное решение?

Выбор хостинга с упором в облака и с прицелом на развёртывание Rails 3 app

Reading time9 min
Views14K
Несмотря на наличие «Rails 3» в названии топика, и рассмотрения в теле статьи специфичных для Rails 3 аспектов, она может быть интересна всем остальным из-за освещения аспектов общего характера.

На Хабре много ответов на разные мои вопросы, но ответа на вопрос «а где же мне хостится», получить я, даже при внимательном штудировании Хабра, не смог. Я даже воспользовался q&a, пытаясь определиться: раз и два, но окончательного ответа так и не получил. Пришлось проводить самостоятельное исследование.

Я решил поделиться своими скромными изысканиями на эту тему с хабрасообществом. Они не претендуют на всеохватность. Но могут внести некоторую ясность для человека, собирающегося выбрать облачно\vds-ный хостинг, но не имеющего никакого представления о рынке.

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

Список упоминаемых хостингов: 1gb.ru, Hostingrails, RackspaceCloud, Mediatemple, Heroku, Amazon Web Services (шапочно), Engine Yard (шапочно), Altnet (привет с Хабрахабра), justhost.com (лучи поноса), Linode, Hetzner online (выделенный сервер), Server4you

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

Защита от DDOS атаки случайными аргументами при помощи Nginx

Reading time1 min
Views3.4K
Я встретился с новым типом ботнета. Если старый долбил только в главную, то новый действует иначе. Он посылает множество запросов вида
GET someurl/?t1555ss5326=5326, где someurl — найденный ботом php скрипт.
Но если атакуемый сайт поддерживает ЧПУ, то такие запросы к нему должны отсутствовать в принципе. ЧПУ сейчас является стандартом де-факто, по этому можно смело отрезать такие запросы, логируя IP ботов.
Для этого очень удобен nginx, и его переменная is_args, которая имеет значение "?", если в URI идут аргументы. Базовая конструкция выглядит так:

if ($is_args = "?") {
return 403 444;
}

Очень просто и красиво, правда?
Вот как выглядит LA после включения этой защиты:
load average: 1.50, 3.09, 6.96
Текущий ботнет из ~20000 зомби, делают 5-8k одновременных запросов.

Маленький анализ тенденций в оформлении кнопок «Add To Cart» («Положить в корзину»)

Reading time2 min
Views6.6K
В 2007 году, сайт «Get Elasic» опубликовал интересную подборку кнопок «Положить в корзину» из различных интернет-магазинов, сопроводив это некоторым анализом надписей и внешнего вида кнопок. Я решил, что будет полезным освежить эту тему. Было собрано более двухсот кнопок «Положить в корзину», в том числе с сайтов самых популярных онлайновых продавцов.
Читать дальше →

Виджеты для Народа

Reading time1 min
Views5.6K

Многие из вас знают, что главную страницу Яндекса можно настраивать, используя виджеты. Мы решили, что некоторые из них можно использовать не только при настройке главной страницы, но и при создании собственного сайта на Народе. Решили и добавили в Конструктор (визуальный интерфейс создания сайтов) возможность выбрать, настроить и разместить виджеты из каталога.



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


Для начала она добавила виджет «Слайд-шоу Фотографий», отфильтровав показ по rss-потоку «коты» из Яндекс.Фоток (некоторые десятилетние девочки уже знают, что такое rss):



Потом она добавила виджет Погоды, настроенный на город Котовск:



И, наконец, виджет «продажа животных»:



В итоге, за полчаса получился такой вот сайт: http://yacats.narod.ru.


Естественно, с помощью виджетов можно сделать не только простейшие сайты про кошачьих, но и довольно «взрослые» вещи. Так, например, сайт "Лесные Пожары" был сделан на Народе с применением виджетов — была бы идея, а виджеты для нее найдутся.


А если не найдутся, то их можно сделать самому в Кабинете разработчика Яндекс.Виджетов. Простой rss-виджет, например, легко можно сделать за пять минут. Ждать его включения в каталог в этом случае не обязательно, для вставки на сайт достаточно будет просто знать его номер (id).

.

Почему Git

Reading time8 min
Views69K
Было время, когда я ничего не знал про VCS, ни что это такое, ни тем более зачем это мне. И верхом своих достижений считал папочку с архивами версий. К моменту осознания необходимости системы контроля версий я уже набил шишек и прочувствовал необходимость такого инструмента. Но борландовский аналог CVS меня не впечатлил. У каждого файла свой номер версии. Как мне получить срез определенного релиза я так и не разобрался. А в это время SVN победоносно шла сквозь умы разработчиков. Черт, это было то, чего мне так не хватало. Прочитав доку и начав работать я просто влюбился в нее. Да, были трудности и определенные неудобства, но куда без них.
Так я и работал бы в SVN, но ничего не стоит на месте. В интернете уже потекли тонкие ручейки новостей про Git. Я не кидаюсь за каждой новой технологией, и прошло уже достаточно много времени, пока мне не прожужжали этим Git’ом все мозги. Мне стало любопытно, я вначале присматривался, примерялся, а потом плюнул и начал новый проект на Git. Мучался с ребятами 2 недели, накачал литературы, написал шпаргалку… ничего, привыкли, … а потом меня поперло.

Теперь меня регулярно просят рассказать про Git и что в нем такого. Уже надоело, поэтому этот пост для тех, кто еще сомневается.
Читать дальше →

MySQL в tmpfs

Reading time5 min
Views14K
Хотелось бы поделиться опытом по использованию MySQL с хранением данных в памяти, а не на диске. Это позволило нам сократить load average сервера, который из-за операций с диском стал сильно расти.



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

Кто же он такой, отечественный IT-лидер?

Reading time2 min
Views4.6K
Все больше и больше IT-компаний озабочены поиском руководителей, так называемых IT-лидеров, или просто — специалистов на руководящую должность (proof).
Но что именно вкладывают в понятие IT-лидера компании и почему их поиски не приносят желаемых результатов? Ответ смотрите сегодня вечером на канале ТНТ!
А если серьезно, то на лицо идет явное нарушение логики в требованиях к знаниям и умениям. И сейчас я объясню, почему.
Читать дальше →

This is my way to China (part 2)

Reading time2 min
Views1.2K
Продолжаю рассказ о моем пути в Китай. Тем, кто пропустил Part 1, рекомендую начать с нее.

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

Аргументы для отказа были разные: и наличие «более старых» клиентов в России и соответственно нежелание их потерять при заключении эксклюзивного контракта с нами, и наша неспособность выбирать у них весь ассортимент производимой продукции, и конечно, ежемесячный объем закупок. Вот здесь остановлюсь подробнее.
Читать дальше →

This is my way to China (part 1)

Reading time3 min
Views1.6K
Как и многие другие истории создания бизнеса – моя история, тоже началась, когда у меня -лопнуло терпение принимать «правила игры» от недалеких руководителей и чиновников, и слепо идти по жизни, навстречу судьбе.
Итак, на дворе — ноябрь 2005 года. Начало эры «углеводородной лихорадки». За моими плечами остались многие годы работы в структуре коммерческих отделов алкогольных компаний и ликеро-водочных заводов. А десятки выставок и командировок по городам нашей Родины — помогли накопить опыт, который в будущем — оказался для меня бесценным!
читать далее

This is my way to China (part 3)

Reading time5 min
Views1.7K
После долгого перерыва — продолжаю свой рассказ. Начало — здесь и здесь. Конечно же, решение лежало на поверхности — придумать свою торговую марку, упаковку, а изготовление продукции — разместить по методу OEM (original equipment manufacturer) на специализированных фабриках и потом продвигать ее в России. Но это в теории все выглядит легко, а на практике нам пришлось попотеть изрядно.
Читать дальше →

Десять вещей, которые вы не ожидали от HTML/Javascript

Reading time1 min
Views4.7K
Пятнадцать лет назад трудно было представить, что когда-нибудь HTTP, HTML, CSS и Javascript станут основными технологиями для доступа к информации и заменят целые классы десктопных приложений. Например, вот десять примеров того, что сложно было ожидать от веб-технологий в 2010 году, но они это делают.

1. Интерактивный рендеринг физики ткани


2. Распознавание объектов на видео в реальном времени


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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity