Pull to refresh
38
Антон @Tonikread⁠-⁠only

User

Send message

Максимальный поток минимальной стоимости

Reading time15 min
Views84K
Транспортная задача (классическая) — задача об оптимальном плане перевозок товара со складов в пункты потребления на транспортных средствах.

Для классической транспортной задачи выделяют два типа задач: критерий стоимости (достижение минимума затрат на перевозку) или расстояний и критерий времени (затрачивается минимум времени на перевозку).

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

Путешествие в тысячу миль начинается с первого шага
Total votes 173: ↑165 and ↓8+157
Comments76

Разработка web-приложений на C++

Reading time2 min
Views56K

Прочитав недавний топик про использование C++ и fastcgi, я наконец-то решился опубликовать свои наработки на тему Web и C++.

Существующие решения, с моей точки зрения, реализуют простые вещи сложным образом. Моей целью было устранить это досадное недоразумение, написав библиотеку, которая позволит писать эффективные кросс-платформенные веб-приложения на С++ так же легко и быстро, как и на PHP, Python, Java, и т.д.
Читать дальше →
Total votes 130: ↑122 and ↓8+114
Comments174

Как стать Zend PHP 5 Certified Engineer

Reading time3 min
Views27K
Свершилось, ура! Теперь я имею почетный статус ZCE :)

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

Читать дальше →
Total votes 117: ↑104 and ↓13+91
Comments93

Хитрости с логированием в однопоточных неблокирующих серверах.

Reading time6 min
Views2.7K
Хочу рассказать об очередном результате моих изысканий в области оптимизации производительности Web-серверов.
На этот раз речь пойдет об оптимизации сложного логирования в однопоточном неблокирующем вэб-сервере.
Читать дальше →
Total votes 69: ↑61 and ↓8+53
Comments105

Как определить стоимость своей работы

Reading time3 min
Views37K
Одно из самых трудных решений фрилансера — назначение цены за свои услуги. Если ошибетесь в цене, расплачиваться придется очень долго. Неправильная цена, в конечном счете может привести ваш бизнес к провалу.

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

В общем стоимость услуг фрилансера должна быть основана на трех факторах:
  1. Собственные потребности
  2. Стоимость услуг конкурентов
  3. Потребности рынка
Читать дальше
Total votes 45: ↑23 and ↓22+1
Comments92

О разбитых окнах.

Reading time2 min
Views2.1K
Ученые установили, что за ограду с табличкой «Не входить! Велосипеды не пристегивать!» все равно входят 27% желающих срезать путь, но если рядом пристегнуть велосипед, число вырастет до 82%.

Что же это, доктор?

Читать дальше →
Total votes 128: ↑122 and ↓6+116
Comments55

Серия 50+ советов по оптимизации PHP кода. «За» и «против» такой оптимизации. Первые 10 советов.

Reading time6 min
Views21K
Это перевод первых 10-ти советов статьи по оптимизации PHP кода. На хабре есть перевод более старой версии статьи — 40 советов по оптимизации вашего PHP-кода

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

Пишу по частям, иначе получится очень много материала сразу.

Это моя первая статья на хабре, надеюсь она получилась интересной.

Читать дальше →
Total votes 98: ↑71 and ↓27+44
Comments142

Реально работающие ресурсы, доступные софтверным предпринимателям в России

Reading time4 min
Views953
Часто приходится слышать, что, мол, если предпринимателю нужна поддержка, это значит, что он плохой предприниматель.
Работая в российском Майкрософт и занимаясь проектами по поддержке технологического предпринимательства, я общаюсь со многими предпринимателями, в том числе с теми, кто многого добился и получил всеобщее признание. И четко вижу, что их отличает в первую очередь то, что они никогда не упускают ни единого шанса получить все, что может помочь их бизнесу.
Поэтому я решил опубликовать топик, посвященный тому, какие ресурсы/программы, имеющиеся сейчас на российском рынке, могут _реально_ облегчить жизнь софтверному стартапу. Опишу те, что известны мне (как предоставляемые Майкрософт и нашими партнерами, так и не имеющие отношения к Майкрософт). А сообщество, надеюсь, дополнит.
Читать дальше →
Total votes 51: ↑39 and ↓12+27
Comments18

Правила составления Software requirements specification

Reading time5 min
Views178K
Все мы прекрасно знаем о том, как разрабатывается ПО. Подумали 10 минут и сразу пошли кодить. Цикл создания программного обеспечения состоит из многих ключевых моментов. Это такие моменты как планирование, создания архитектуры, создание SRS, создание дизайна и тд и тп.

В данной статье я бы хотел остановиться на том, как правильно нужно писать SRS.
Total votes 58: ↑56 and ↓2+54
Comments30

Прогрессивные технологии, как способ выжать из сервера максимум

Reading time5 min
Views12K

Вступление


Просто красивый rrdtool =)
Забавно, но когда программист разрабатывает какой-либо продукт, он редко задумывается над вопросом могут ли на одну кнопку в один момент времени нажать одновременно 2000 человек. А зря. Оказывается могут. Как ни странно но большинство движков, написанных такими программистами, очень плохо ведут себя под большими нагрузками. Кто бы подумал, а всего один лишний INSERT, не проставленный index, или кривая рекурсивная функция могут поднять load averages чуть ли не на порядок.

В этой статье я опишу как мы, разработчики проекта, сумели выжать из одного сервера с Pentium 4 HT / 512Mb RAM, максимум, держа одновременно 700+ пользователей на форуме и 120,000 на трекере. Да, проект этот — торрент трекер. Предлагаю сразу оставить в стороне разговоры о копирайтах и правах, мне это не интересно, что действительно интересно — это HighLoad.
читать дальше
Total votes 318: ↑314 and ↓4+310
Comments184

Социальные аспекты руководства, или как же всё таки «пинать» сотрудников. 2 года спустя.

Reading time6 min
Views6.7K
Статья про «пинание», «закручивание гаек» и контроль задач, разные стили общения и руководства, про сложности делегирования, самомотивацию сотрудников.

Вопрос: Прочитал вашу статью «Социальные аспекты разработки» и был ошеломлен! До этого момента я считал, что такие идеи лишь из области утопий и невозможны к реализации.

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

99.77 КБ

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

Симптомы: падение дисциплины, низкая скорость разработки, потеря энтузиазма.
Свой же стиль руководства я бы теперь назвал «попустительским».

И вот, как только мое терпение кончилось, и я собрался на следующий день «закрутить как можно туже гайки», я натыкаюсь на вашу статью. Это было как бальзам на больное сердце. Я сразу с великим облегчением отказался от идеи пинания, но понимаю, что делать все равно что-то надо, а с чего начать не знаю? Хотелось бы вашего совета.

Ответ: В 2 словах это,
— Вносите элементарную организованность в процесс. Это не «пинание» — это ваша работа.
— Разный стиль. С крутыми – искренне, с молодежью – дружелюбно, с «примадоннами» – сухо
— Используйте эмоции для «поджигания» людей. Прочитайте Возьмите эмоции с собой
— Используйте 4 модели руководства исходя из задачи и человека. Это вопросы — Может? Возьмет?
— Готовьтесь к тому, что у вас будут проблемы с Директивным стилем и Делегированием.
— Стремитесь к тому, чтобы у вас в команде были только люди с сильной самомотивацией, для которых ваша работа это хобби, страсть, любимое дело. Помогите разобраться в себе другим людям.
— Сплачивайте команду: cобирайте в одной комнате, проводите общие собрания, ставьте общие достойные цели.

Читать дальше →
Total votes 94: ↑87 and ↓7+80
Comments22

Удаленная работа: тим-лиду и программистам

Reading time4 min
Views26K
Достоинства удаленной работы очевидны — меньше ограничений в поиске специалистов с нужной квалификацией, возможность нанимать людей за пределами МКАД, меньше расходов на ведение бизнеса. С другой стороны, есть и проблемы: наиболее значительные — со стороны организации работы. Последние 4 года я работаю тим лидом распределенной группы программистов (3-15 человек в разное время) для зарубежного заказчика, и хочу поделиться с хабрадевелоперами опытом такой работы :-)

Здесь и далее имеется ввиду следующая организация труда:
  1. Заказчик (+on-site команда опционально) в офисе где-нибуть в Европе/США.
  2. Тим лид распределенной команды — где-то на бескрайних просторах exUSSR.
  3. Члены распределенной команды — также где-то на бескрайних просторах exUSSR.
Подразумевается, что при желании заказчик может общаться со всеми членами команды. Оплата работы — почасовая.

Читать дальше
Total votes 80: ↑74 and ↓6+68
Comments127

Хотите умереть быстро?.. Станьте ПМ-ом!

Reading time6 min
Views15K
За 5 лет работы в компании сменилось огромное количество менеджеров проектов.
ПМ-ы мрут как мухи. Как пехота штрафбата, брошенная в бессмысленную лобовую атаку.

Мрут сами (уходят), их убивают (увольняют), устраивают ксеноцид (их увольняют вместе с командой). Бегущие без винтовок, сзади вас товарищи, заменят вас. И проживут свои 2 минуты.

56.51 КБ
Читать дальше →
Total votes 327: ↑248 and ↓79+169
Comments113

континуации и stateful веб-программирование (Updated!)

Reading time5 min
Views2.6K
Идея совсем не нова. Идея древна.
Однако большинство наблюдаемых вокруг веб-фреймворков упорно игнорируют эту идею.

Она заключается в том, чтобы использовать континуации (continuations) для магического превращения RESTful (stateless) веб-приложений в более удобный и привычный stateful формат.
Читать дальше →
Total votes 44: ↑37 and ↓7+30
Comments95

Компилятор выражений

Reading time12 min
Views19K
Недавно у меня возникла необходимость в вычислении выражений. Выражение представлено в виде строки и может содержать имена переменных, целые числа, строковые константы и любые операции над ними.

Пример:
   выражение: «x + 10 == 5 * y / (1 + z*2)»;
   требуется уметь вычислять это выражение для любых значений x, y и z.

И конечно при этом надо учитывать приоритеты операторов.

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

Решение на Java, но может быть легко переведено на другие языки.

Подробнее...
Total votes 55: ↑44 and ↓11+33
Comments66

Как подготовиться к сертификации по Zend Framework?

Reading time2 min
Views2.1K

Когда люди спрашивают меня как подготовиться к сертификации по Zend Framework(ZF), я обычно говорю следующее:
  • Вы должны уже иметь реальный опыт работы с ZF, или хотя бы с некоторыми его компонентами. Это — даст вам представление о работе фрейворка в целом, и вы сможете изучать те части фрейворка с которыми вы ещё не знакомы.(Те из вас кто ещё не начал работать с ZF, почитайте «быстрый старт», или может быть стоит поити на курсы?)
  • Скачайте руководство по сертификации. Это — небольшой обзор, по-этому не стоит ожидать от него полного объяснения всех аспектов работы с ZF, Прочитав его, можно получить представление о темах и вопросах которые будут на экзамене, и соответственно можно будет посмотреть документацию по интересующим вас вопросам. Работа каждого компонента рассмотренна в «Справочнике программиста по Zend Framework». Справочник — очень удобен, позволяет легко найти документацию по интересующему компоненту(Например Zend_Acl, Zend_Auth, Zend_form) и кроме того он содержит описание ZF стандарта по кодированию и рекомендации по производительности ZF.
  • Если я чего-то не понимаю, я довольно часто смотрю в исходный код Zend Framework. В некоторых случаях читая исходный код, представление о работе компонента можно получить быстрее чем по документации, кроме этого вы поймёте как разработчики ZF организовывают свой код и получите более полное представление о том как можно использовать архитектуру ZF в ваших проектах.

В дополнение ко всему Zend предлагает пройти обучение по программе «Подготовка к сертификации по Zend Framework», так что, если вы привыкли учится по более формальной методологии, это может вам помочь. В моём случае я стал понимать как работать с незнакомыми мне компонентами, углубил свои знания по уже знакомым, и я стал горазо более уверенно использовать компоненты ZF.

Всем удачи.

P.S. Данная заметка перевод,
автор статьи успешно сдал экзамен по ZF(пруфлинк)

перевёл как ответ на статью Zend Framework Certification
Поскольку на мой взгляд в статье не только рассказывается как сдавать экзамен, но и показывается правильная позиция по отношению к сертификации.
Total votes 21: ↑17 and ↓4+13
Comments19

UPD. Демон конвертации видео в FLV.

Reading time1 min
Views2.2K
Это продолжение, а точнее развитие, статьи написанной ранее.

В результате небольшого рефакторинга, получилось повысить производительность, и упростить код. Результатом стало изменение перечня используемого софта.
Читать дальше →
Total votes 30: ↑28 and ↓2+26
Comments53

Работа с буфером обмена в Linux: теория и практика

Reading time5 min
Views112K

Совсем немного теории


Copy and PasteИсторически сложилось так, что в X Window System (X11, — оконная система для Linux, UNIX) существует два буфера обмена.

Один из них (clipboard) похож на буфер обмена в Windows — при нажатии на Ctrl+Insert или Ctrl+C выделенный фрагмент (текст, картинка, файл) копируется в буфер обмена, а при нажатии на Shift+Insert (или Ctrl+V) — вставляется из него. Следует заметить, что во многих программах эти сочетания зарезервированы для иных целей и приходится пользоваться другими — например, в терминале сочетание Ctrl+C используется для завершения процесса, а для работы с буфером обмена используются сочетания Ctrl+Shift+C для копирования и Ctrl+Shift+V для вставки.

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

Перейти к практике...
Total votes 100: ↑94 and ↓6+88
Comments99

10 трюков в командной строке, о которых вы не знали. Честное слово.

Reading time5 min
Views21K

1. Простой способ перехватить вывод и ошибки


Хотите направить stdout и stderr в один файл?
command &> file
Может вы разбираетесь в некой программе при помощи strace, и желали бы видеть системные вызовы вместе с ошибками программы?
strace badapp &> errors_and_output

Плюсы: легко запоминается, и проще чем
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments24

Иерархические структуры данных и производительность

Reading time14 min
Views22K

Введение



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

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

Читать дальше →
Total votes 123: ↑120 and ↓3+117
Comments27

Information

Rating
Does not participate
Location
Паттая, Чон Бури, Таиланд
Date of birth
Registered
Activity