Search
Write a publication
Pull to refresh
0
Be3 @Be3read⁠-⁠only

User

Send message

Задача нахождения максимума на отрезках фиксированной длины

Reading time3 min
Views39K

Постановка задачи


Пусть дан массив A длины N, и дано число K ≤ N. Требуется найти максимум (минимум, сумма ...) в подотрезках длины K данного массива. Это частный случай задачи RMQ (Range Minimum Query — минимум на отрезке), но с дополнительными ограничениями — постоянная длина отрезка поиска. В данном решении задача не предполагает возможность изменения элементов массива.
Читать дальше →

Универсальная шаблонизация для Kohana 3.1

Reading time5 min
Views4.7K
Здравствуйте, уважаемые жители Хабра.

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

Копаясь в таких монструозных штуках, как Drupal или Joomla, я понимал, что да, обилие развитого API и наличие большого количества модулей делает такие движки незаменимыми при создании сайтов практически любой сложности, однако, переходя на более простые вещи, вроде MVC фреймворков CodeIgniter или Kohana (последний, по существу, следует концепциям HMVC), приходило понимание, что колоть орехи ракетами земля-земля не всегда удобно, и легкость не только в обращении с кодом, но и в работе самого сайта, что называется, «решает».

В настоящий момент я работаю на MVC (или HMVC, если быть точным) фреймворке Kohana, в частности, на ветках версий 3.0 и 3.1, и, попытавшись найти наиболее полное и элегантное решение для адекватной шаблонизации сайта, я с удивлением обнаружил, что либо мои навыки гугления морально устарели, либо действительно результаты подвели, но однозначно объективного лидера для моей задачи нет.

Собрав некоторые из своих мыслей и наработок, я решил объединить их в удобную и интуитивную систему шаблонизации.
Читать дальше →

Нагрузочное тестирование: Node.JS vs phpDaemon

Reading time3 min
Views22K
При работе над одним из проектов перед нами встала задача реализации переписки между зарегистрированными пользователями. По своей сути – это должен быть чат, но одновременно общаться в нём можно только с одним собеседником.

Потенциальная нагрузка, которую должен выдерживать такой чат — около 10000 одновременных keep-alive соединений. Каждое новое сообщение должно записываться в основную базу данных, а так же в «быструю», задача которой хранить в себе лишь актуальную часть переписок между пользователями, то есть служить своеобразным «временным» хранилищем, из которого сообщения будут сразу доставляться адресату.
Читать дальше →

Как выбрать VPS хостинг

Reading time4 min
Views24K
Неприятности начались с того момента, когда мой любимый американский хостер вдруг перенес мой многолетний аккаунт на новый сервер и установил хитрый лимит на память php для всего аккаунта. И вроде бы memory_limit 90M на первый взгляд достаточно для любого сайта, но этот лимит действует на весь аккаунт в целом. Т.е. сайты, расположенные на одном аккаунте, начинают «душить» друг друга. Начались проблемы с форумом phpbb посещаемостью всего 2000 уников в сутки. При превышении лимита памяти сервер отдавал 500 ошибку.

Опытные люди, не читая далее, сразу скажут, что предложила мне техподдержка: конечно же переход на их VPS. Для отечественного хостинга это обычное дело, но от буржуев я такое услышал впервые. Выход в таком случае один — переход на другой хостинг, ибо с «террористами переговоров не ведут» да и 15$ за их 300Mb VPS мне показалось несколько дороговато.

Выбрал Open VZ VPS в России 768Mb за ~500 рублей. Все поставил, вроде работает. Но тут черт меня дернул перед сменой DNS проверить нагрузку с помощью loadimpact.com и меня накрыл тихий ужас: при одновременном доступе к сайту 50 посетителей страницы грузились по 60 секунд.
Читать дальше →

О том, как я заставлял Ubuntu работать 10 часов от батареи

Reading time11 min
Views195K
imageЯ являюсь рядовым линукс-пользователем и поэтому не стоит от этой статьи ожидать очень умных ходов или нестандартных программистских решений. Все по мануалам. Но раз результат достигнут, значит кому-то кроме меня это может оказаться полезным.

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

Устанавливал я Ubuntu 10.10 на ноутбук Acer Aspire Timeline 5810TG. Эта машина обладает экраном в почти 16 дюймов и относительно производительным железом, зато батарея достаточно емкая, чтобы ставить с ней личные рекорды.
Читать дальше →

Распознавание некоторых современных CAPTCHA

Reading time15 min
Views79K
Именно так называлась работа, представленная мной на Балтийском научно-инженерном конкурсе, и принёсшая мне очаровательную бумажку с римской единичкой, а также новенький ноутбук.

Работа заключалась в распознавании CAPTCHA, используемых крупными операторами сотовой связи в формах отправки SMS, и демонстрации недостаточной эффективности применяемого ими подхода. Чтобы не задевать ничью гордость, будем называть этих операторов иносказательно: красный, жёлтый, зелёный и синий.

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

Атака на отказ в обслуживании методом slow HTTP POST

Reading time5 min
Views42K
Доброго времени суток, уважаемые хабровчане!
Я хочу рассказать вам об относительно новом и интересном, на мой взгляд, механизме атаки на отказ в обслуживании — Slow HTTP POST.
Поиск показал отсутствие на хабре информации по теме, что несколько удивило меня, и я решил восполнить это досадное упущение. Тема не нова, но, как показали мои небольшие исследования, более чем актуальна. Забегая вперед, скажу, что полученные мной результаты позволяют говорить о существовании широко доступной технологии, позволяющей с одного компьютера с небольшим каналом «укладывать» небольшие и средние сайты, а при использовании нескольких машин с повсеместно распространенным сейчас скоростным доступом в Интернет причинить немало проблем и более серьезным проектам. Всех заинтересовавшихся покорнейше прошу пожаловать под хабракат.
Читать дальше →

Как хороший договор спасает нервы и монетку

Reading time14 min
Views62K
Договоры, отчеты, акты — кому охота заниматься этой скукотой, когда вокруг бьет ключом и фонтанирует идеями креативная жизнь? Особенно, если заказчик снисходительно хлопает творческого подрядчика по плечу: «Да ладно, зачем какие-то договоры. Мое слово — закон!» Остается только радостно согласиться и приступить к работе.

На заре существования нашего агентства мы вообще не стремились формализовать отношения с дорогими клиентами. Типовой договор умещался на двух машинописных листах. Содержал он минимум информации: предмет договора, сроки, цена. Если заказчиков немного, и все они — старые знакомые, то в известной степени можно положиться на их добропорядочность. Но когда клиентская база активно растет, то и проблемы множатся: задерживают выплаты, не выполняют обязательства, злоупотребляют лояльностью исполнителя. Столкнувшись с ними в полном объеме, мы собрались, подумали и составили новый типовой договор.
Читать дальше →

ICQ баг-информер на PHP + ActiveMQ

Reading time9 min
Views9.9K
Я являюсь разработчиком и смотрителем довольно крупной системы он-лайн бронирования одного из московских туроператоров. Поскольку к этой системе предъявляются весьма высокие требования в плане надежности и безопасности, мне приходится отслеживать все возникающие в ней ошибки, однако постоянно заходить и просматривать, нет ли новых отчетов, не очень удобно и поэтому возникла необходимость в неком средстве мгновенного оповещения, причем оно должно поддерживать возможность отправки сообщений как из веб-части, так и из десктопных приложений.

В этой статье я хочу рассказать о своем опыте написания скрипта для мгновенного оповещения о возникающих в системе ошибках посредством ICQ сообщений. В качестве промежуточного звена и накопителя репортов используется брокер сообщений ActiveMQ, я расскажу как его установить и настроить для работы с MySQL. Главная часть — это ICQ-бот, написанный на PHP, в его обязанности входит прослушивание определенного канала в брокере и пересылка сообщений на указанные номера ICQ. Также я расскажу как запустить этот PHP скрипт в качестве службы Windows.
Читать дальше →

Работа с Google Fusion Tables — JS и PHP

Reading time7 min
Views14K
Summary: Возникла задача — создать высоконагруженное веб-приложение при крайне ограниченных ресурсах сервера.
В качестве хранилища данных был выбран Fusion Tables от Google.
Что описано в статье: работа с Fusion Tables из
а) Javascript — только выборка данных;
б) PHP (Zend Framework) — выборка, добавление и обновление;
в) пользовательский интерфейс от Google — создание таблиц и представлений.
Чего нет в статье:
а) нагрузочного тестирования;
б) подробного описания приложения — упор делается именно на использование Fusion Tables в своих PHP+Js проектах.

У компании Google есть большое количество различных продуктов. — без банальностей.
Только ленивый веб-программист не использовал в своих проектах карты от Google. Просто вставляется, красиво выглядит, не грузит собственный сервер, удобный, хорошо документированный (по крайней мере для v.2) API, высокая по крайней мере, не низкая скорость работы — плюсы есть. «Возможно, FT тоже будет приятным» — подумал я. Правда, не проверял. И вот результат.
Читать дальше →

Как создать свой сайт с нуля с помощью Orchard CMS. Часть 1. Введение в Orchard CMS

Reading time7 min
Views15K

О проекте


Проект Orchard CMS был анонсирован в марте 2010 года с выпуском первой бета-версии проекта. Создатели Orchard CMS поставили перед собой цель построить систему управления контентом на новом успешном фреймворке ASP.NET MVC, которая соответствовала бы следующим требованиям:
  • открытый бесплатный и свободный проект, зависящий от запросов сообщества;
  • быстрый движок с модульной архитектурой и всеми необходимыми средствами CMS;
  • общедоступная онлайн-галерея модулей, тем и других компонентов расширения от сообщества;
  • высокое качество типографики, внимание к компоновке и разметке страниц;
  • упор на создание удобной и функциональной панели администрирования;
  • быстрое развертывание системы на рабочем месте и легкая публикация на сервер.
Система управления контентом Orchard является проектом с открытым исходным кодом, который написан на ASP.NET MVC. Orchard является частью галереи ASP.NET-проектов с открытым исходным кодом некоммерческого фонда Outercurve Foundation.

clip_image002

Рис.1.1. Внешний вид Orchard CMS по умолчанию

Первоначально Orchard и его исходные коды лицензировались на основе свободной лицензии MS-PL, но недавно, с выходом первой публичной версии, проект сменил лицензию на более простую и распространенную New BSD License.

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

Руководитель проекта: три шага команды к совершенному коду

Reading time4 min
Views5.3K

Преамбула


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

И вот, вы, принимая пост, знакомитесь с командой: вроде бы есть потенциально сильные разработчики с опытом, есть несколько подающих надежды юниоров. Но что-то сразу бросается в глаза. И чем дольше вы вглядываетесь в эти занятые работой умные лица, тем более понимаете, что перед вами не команда, а «группа разработчиков». А то, что они пишут… Вы и не думали, что программисты могут так писать код. Вы смотрите на пластилиновую архитектуру, на классы в 6000 строк кода, на методы, занимающие десять страниц машинописного текста, на кейсы, ветвящиеся как головы Лернейской гидры. И у вас появляется невольный вопрос: а можно ли что-то с такой командой сделать вообще?

И мой ответ — можно. И нужно!
Читать дальше →

Ускоряем логин через SSH в Ubuntu в 100 раз

Reading time2 min
Views42K
Долгое время я мучился ужасно медленным удаленным логином на свои Ubuntu сервера (все 2 ). Ужасно медленно в данном случае — 2-3 секунды. Не то чтобы это было совсем фатально, но когда логин через ключ — хочется чтобы все работало мгновенно — в конце концов, у нас не 486SX.

Длительное гугление приводило только к стандартным решениям:
  1. UseDNS no в /etc/ssh/sshd_config — ускоряет логин в случае тормозного DNS. В моём случае стоял локальный кеширующий DNS, потому и так все было быстро.
  2. Принудительное указание IPv4 в SSH клиенте — особо не помогло, видимо не у всех тормозит
И на askubuntu.com вопрос c bounty уныло провисел долгие недели без ответа…

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

Слои в мобильных Яндекс.Картах

Reading time1 min
Views9.8K
Мы хотим показать новую технологию в мобильных Яндекс.Картах. Она нужна тем, кто хочет использовать мобильные Карты для отображения своей геоинформации. Например, у вас есть сеть цветочных магазинов «Японский спатифиллум». Вы можете сделать слой с сетью этих магазинов и он будет отображаться в мобильных Яндекс.Картах.

Документацию по созданию слоев можно прочитать здесь.

Возможности слоя:
Читать дальше →

Регулярные выражения, пособие для новичков. Часть 1

Reading time14 min
Views920K
Регулярные выражения (РВ) это, по существу, крошечный язык программирования, встроенный в Python и доступный при помощи модуля re. Используя его, вы указывается правила для множества возможных строк, которые вы хотите проверить; это множество может содержать английские фразы, или адреса электронной почты, или TeX команды, или все что угодно. С помощью РВ вы можете задавать вопросы, такие как «Соответствует ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с этой строкой?». Вы можете также использовать регулярные выражения, чтобы изменить строку или разбить ее на части различными способами.
Читать дальше →

Регулярные выражения, пособие для новичков. Часть 2

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

Обзор сервиса Виртуальных Визиток — IdentyMe

Reading time5 min
Views1.1K
Create Your Own Virtual Business Card at IdentyMe.com
Создайте Вашу виртуальную визитную карточку на IdentyMe.com.

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

Семь аспектов, как Github изменил мир Open Source

Reading time2 min
Views6.8K
Как известно, мир Open Source быстро меняется. Мы постоянно отслеживаем всё новое, пытаемся не отстать. Я уверен, что проект Github оказал сильное влияние и сделал Open Source более понятным и общедоступным. Каким образом?
Читать дальше →

Веб-кластер — опыт реального применения

Reading time9 min
Views20K
Приветствую, уважаемые сообщники!

Эта статья — о том, как мы реализовали веб-кластер для новостного портала (с пиком посещений в 130 тысяч уникальных посетителей в день — это 7Тб траффика за 3 дня — выборы и 2 последующих. Сейчас в среднем кластер раздаёт 35-40 Тб траффика в месяц), о том, как по-разному понимают одинаковые задачи программисты и журналисты, о том, как можно достичь одной и той же цели, идя разными путями.

Она будет интересна тем, кто хочет построить легко масштабируемый географически распределённый веб-кластер, не вкладывая астрономических сумм в оборудование (а по меркам телевидения — будут вообще смешные суммы).

Я больше чем уверен, что маркетологи, толкающие убер-решения свежевыпущенных продуктов, имеющих в своём названии слова «масштабируемый веб-кластер» или «horizontal infinite scalable web cluster», меня возненавидят.

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

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

Как подружить PHP с консолью Google Chrome

Reading time2 min
Views21K

Внимание

Статья содержит информацию об устаревшей версии PHP Console.

О новой версии PHP Console 3.0 читайте тут.


PHP Console 1.0





Речь пойдёт об одном чудном расширении для Google Chrome, которое позволяет проксировать вывод ошибок и дебаг сообщений из PHP в консоль Google Chrome, а также отображать их в виде всплывающих popup-уведомлений.
Читать дальше →

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity