Как стать автором
Обновить
56
0
Дмитрий @corax

Пользователь

Отправить сообщение

Мир лицензий: разбираемся с GNU GPL

Время на прочтение6 мин
Количество просмотров154K

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

UPD: опубликован перевод небольшого куска официального GPL FAQ habrahabr.ru/blogs/Dura_Lex/45878
UPD2: скорректирован и переформулирован список совместимых лицензий

Читать дальше →
Всего голосов 164: ↑156 и ↓8+148
Комментарии170

Юнит-тесты переоценены

Время на прочтение36 мин
Количество просмотров32K
Предлагаем вам перевод поста «Unit Testing is Overrated» от Alex Golub, чтобы подискутировать на тему юнит-тестов. Действительно ли они переоценены, как считает автор, или же являются отличным подспорьем в работе? Опрос — в конце поста


Результаты использования юнит-тестов: отчаяние, мучения, гнев

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

В процессе развития отрасли разработки ПО совершенствовались и методики тестирования. Они постепенно сдвигались в сторону автоматизации и повлияли на саму структуру ПО, порождая такие «мантры», как «разработка через тестирование» (test-driven development), делая упор на такие паттерны, как инверсия зависимостей (dependency inversion), и популяризируя построенные на их основе высокоуровневые архитектуры.

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

Однако, несмотря на существование различных подходов, современные «best practices» в основном подталкивают разработчиков к использованию конкретно юнит-тестирования. Тесты, область контроля которых находится в пирамиде Майка Кона выше, или пишутся как часть более масштабного проекта (часто совершенно другими людьми), или полностью игнорируются.

Преимущество такого подхода часть поддерживается следующим аргументом: юнит-тесты обеспечивают в процессе разработки наибольшую полезность, потому что способны быстро отслеживать ошибки и помогают применять упрощающие модульность паттерны разработки.
Читать дальше →
Всего голосов 63: ↑56 и ↓7+49
Комментарии302

LRU, метод вытеснения из кэша

Время на прочтение3 мин
Количество просмотров114K
К сожалению, в очередной раз заметил, что почти все мои коллеги не знают, что такое LRU, и как реализовать кэш определенного размера. Поэтому я решил написать небольшую статью, где расскажу как быстро реализовать метод LRU, и не вынуждать коллег вручную сбрасывать кэш там, где не требуется.

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

То есть сохраняются результаты вычислений, которые скорее всего запросят заново.
Как определять эти «популярные» запросы? Наиболее известным способом является LRU, о котором я и расскажу в этой статье.
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии9

Безумие дотфайлов

Время на прочтение4 мин
Количество просмотров55K
Мы больше не контролируем свои домашние каталоги.

В моём собственном 25 обычных файлов и 144 скрытых. В дотфайлах хранятся данные, которые не принадлежат мне: они принадлежат программистам, чьи программы решили захватить моё пространство, предназначенное для хранения моих личных файлов.

Я не могу убрать эти файлы в другое место. Если я попытаюсь их удалить, они появятся снова. Всё, что я могу сделать — это сидеть и знать, что в темноте, за кулисами, они есть. Ожидание в тишине. Некоторые из этих программистов решили дополнительно разместить здесь несколько обычных файлов и каталогов. Они хорошо видны каждый раз, когда я выполняю ls. Понятия не имею, как в мою личную папку попали каталог node_modules, файлы package-lock.json, yarn.lock (я никогда сознательно даже не ставил yarn!), какие-то два странных лог-файла от какой-то Java-программы, явно использующей СУБД H2, и папка Desktop. Последнюю создал Steam, что довольно неудачно, поскольку на моей машине просто нет рабочего стола или какого-то десктопа. Боюсь того дня, когда услышу громкий стук в дверь — и один из этих программистов ворвётся и сообщит, что собирается хранить часть своей мебели посреди моей гостиной, если я не возражаю.
Читать дальше →
Всего голосов 186: ↑178 и ↓8+170
Комментарии339

Многопроцессовые демоны на PHP

Время на прочтение3 мин
Количество просмотров43K
Зачем может понадобиться писать демоны на PHP?
  • Выполнение трудоемких фоновых задач;
  • выполнение задач, которые длятся больше, чем время ожидания при HTTP-запросе (30 секунд);
  • выполнение задач на более высоком уровне доступа, чем серверный процесс (читай — под рутом).

Читать дальше →
Всего голосов 111: ↑97 и ↓14+83
Комментарии117

Написание программ на PHP с использованием fork()

Время на прочтение5 мин
Количество просмотров37K

Параллельные программы на PHP


Раньше заголовок темы был «Написание многопоточных программ на PHP». В PHP есть ровно один «нормальный» способ писать приложения, которые используют несколько ядер/процессоров — это fork(). О прикладном использовании системного вызова fork() в языке PHP и расширения pcntl я и расскажу. В качестве примера мы напишем достаточно быструю параллельную реализацию grep (со скоростью работы, аналогичной find . -type f -print0 | xargs -0 -P $NUM_PROCS grep $EXPR).
Читать дальше →
Всего голосов 111: ↑89 и ↓22+67
Комментарии62

Как выбрать тот самый PHP-фреймворк. Сравнительное тестирование

Время на прочтение9 мин
Количество просмотров51K


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

Для этого нужно учесть достаточно большое количество характеристик, от «как быстро всё будет работать» до «а необходима ли нам эта фича?». И так каждый раз. Именно в моменты мозгового штурма команда сравнивает удобство фреймворка, скорость, набор фич, которые реализованы в нем или в совместимых с ним модулях.

Но какой же всё-таки лучше, быстрее и производительнее?

Разработчики постоянно проводят сравнение фреймворков, чтобы прояснить для себя этот вопрос. Например, в статье Lukasz Kujawa приведено сравнение PHP фреймворков. Одно «но» — статья за 2013 год. А ведь время идёт… Поэтому мы решили провести своё, актуальное сравнение фреймворков.

Для оценки производительности был использован PHP Framework Benchmark. Он предлагает для сравнения множество фреймворков (не только указанных выше), но автор не спешит добавлять в репозиторий новые версии проектов, что, конечно же, печально, хотя и не смертельно. При желании добавить новую версию не сложно. 


Одной из основных целей данной статьи также является попытка практическим путем определить улучшения в производительности и эффективности новых версий PHP. Поэтому тестирование было проведено на РНР 5.6/7.0/7.1
Читать дальше →
Всего голосов 34: ↑22 и ↓12+10
Комментарии55

Почему 1С это плохо и почему так не любят 1С программистов

Время на прочтение14 мин
Количество просмотров524K
Мы продолжаем то, что мы уже много наделали.

Черномырдин В.С.

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

Конечно, в данном конкретном случае я постарался решить все проблемы в самые короткие сроки, и, в результате, работа офиса вернулась в привычное русло. Но даже в такой ситуации я получил массу негатива со стороны клиента. И тогда я задумался о том, почему с программными продуктами 1С постоянно возникает такое количество проблем, почему от клиентов идет столько негатива, а самих 1С-программистов часто недолюбливают, в том числе, и другие программисты?
Читать дальше →
Всего голосов 187: ↑171 и ↓16+155
Комментарии300

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

Время на прочтение33 мин
Количество просмотров351K

Доброго времени суток. Это статья — перевод заинтересовавшего меня поста в блоге аспиранта Университета штата Нью-Йорк в Стоуни-Брук. Статья в доступной форме описывает основные концепции функционального программирования, их преимущества и недостатки. Думаю она будет полезна широкому кругу читателей, которые сомневаются, нужно ли им углубляться в мир функционального программирования или нет. Пожелания, предложения и замечания по переводу и терминологии принимаются по личной почте.

Мнение переводчика может иногда не совпадать с мнением автора, но переводить статью было крайне занимательно.

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Всего голосов 188: ↑181 и ↓7+174
Комментарии151

Горизонтальное масштабирование. Что, зачем, когда и как?

Время на прочтение17 мин
Количество просмотров118K
Александр Макаров

Александр Макаров ( SamDark )


Здравствуйте! Я Александр Макаров, и вы можете меня знать по фреймворку «Yii» — я один из его разработчиков. У меня также есть full-time работа — и это уже не стартап — Stay.com, который занимается путешествиями.

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

Что такое масштабирование, вообще? Это возможность увеличить производительность проекта за минимальное время путем добавления ресурсов.

Обычно масштабирование подразумевает не переписывание кода, а либо добавление серверов, либо наращивание ресурсов существующего. По этому типу выделяют вертикальное и горизонтальное масштабирование.
Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии17

От Jquery UI до Ext.js: обзор библиотек виджетов для построения интерфейса на JS. Часть 2

Время на прочтение7 мин
Количество просмотров22K
В то время как веб развивается и отхватывает все большую часть пирога, когда-то доставшуюся десктопу, производители программного обеспечения, ориентированного на корпоративный сегмент, не могут оставаться без дела. Если когда-то рулили приложения с использованием Windows Forms, то сейчас все больше контор задумываются, стоит ли вообще использовать Windows.

image

Естественно, разработчики подобного ПО стараются адаптироваться под новые условия и выпускают свои UI библиотеки, только уже для Web.

Правда, есть какая-то странная тенденция: вместо конкуренции с внешним миром производители конкурируют как бы между собой. Большинство продуктов имеют одинаковый набор виджетов, которые внешне и структурно выглядят похожими друг на друга, выпускаются с инсталлятором для Windows и имеют широкую поддержку .NET.

В общем, живут в Enterprise мирке со своей атмосферой. И все же я попробую разобраться и найти какие-то уникальные очертания у той или иной библиотеки. А кроются они немного за пределами веб интерфейса, поэтому я попробую залезть чуть дальше банального html + js.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии36

Идеальный программист. Часть 1

Время на прочтение9 мин
Количество просмотров91K
Статья-конспект по книге Роберта Мартина «Идеальный программист». После прочтения книги у меня поменялось отношение к программистической жизни. В книге рассматривается процесс написания кода, сам код, отношение к задачам, TDD и много других полезностей. Читать нужно разработчикам и менеджерам проектов. Частично применимо к дизайнерам.


Читать дальше →
Всего голосов 77: ↑61 и ↓16+45
Комментарии201

Идеальный программист. Часть 2

Время на прочтение10 мин
Количество просмотров41K


Это вторая часть статьи по книге Роберта Мартина «Идеальный программист». В первой части статьи мы начали изучать, чем идеальный программист отличается от не идеального. Рассмотрели ответственность, научились говорить «нет» нереальным задачам и говорить «да» так, чтобы заказчик был, уверен, что всё будет готово вовремя. Мы определились, как писать код, принимать помощь и помогать другим. Продолжим.
Читать дальше →
Всего голосов 50: ↑37 и ↓13+24
Комментарии19

Подробно об объектах и классах в PHP

Время на прочтение25 мин
Количество просмотров94K
Сегодня объекты используются очень активно, хотя это трудно было предположить после выхода PHP 5 в 2005 году. Тогда я ещё мало что знал о возможностях этого языка. Пятую версию PHP сравнивали с предыдущей, четвёртой, и главным преимуществом нового релиза стала новая, очень мощная объектная модель. И сегодня, десять лет спустя, около 90% всего PHP-кода содержит объекты, не изменившиеся со времени PHP 5.0. Это убедительно говорит о том, какую роль сыграло внедрение объектной модели, неоднократно улучшавшейся на протяжении последующих лет. В этом посте я хотел бы рассказать о том, как всё устроено «под капотом». Чтобы люди понимали суть процессов — почему сделано так, а не иначе — и лучше, полнее использовали возможности языка. Также я затрону тему использования памяти объектами, в том числе в сравнении с эквивалентными массивами (когда это возможно).

Я буду рассказывать на примере версии PHP 5.4, и описываемые мной вещи справедливы для 5.5 и 5.6, потому что устройство объектной модели там почти не претерпело изменений. Обратите внимание, что в версии 5.3 всё не так хорошо с точки зрения возможностей и общей производительности.

В PHP 7, который пока ещё активно разрабатывается, объектная модель переработана не сильно, были внесены лишь незначительные изменения. Просто потому что всё и так хорошо работает, а лучшее — враг хорошего. Были добавлены возможности, не затрагивающие ядро, но здесь об этом речи не пойдёт.
Читать дальше →
Всего голосов 58: ↑54 и ↓4+50
Комментарии15

Эффективная обработка фотографий в Photoshop

Время на прочтение6 мин
Количество просмотров146K
Эффективная обработка фотографий в Photoshop

Читая статьи о Photoshop, я часто удивляюсь тому, насколько многие авторы усложняют решение по сути простых задач по обработке. Этим страдают и многие «монументальные» писатели, например Дэн Маргулис. Но ему это простительно – его задача написать о всех тонкостях и нюансах процесса обработки, рассмотреть его со всех ракурсов и сторон. Хотя именно эта особенность подачи материала в его книгах отталкивает многих читателей.

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

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

Читать дальше →
Всего голосов 288: ↑244 и ↓44+200
Комментарии117

Scene #20: история программ создания музыки на PC

Время на прочтение1 мин
Количество просмотров2.6K
Новый подкаст из серии Scene. Хотя, этот подкаст уже вполне можно назвать телепередачей. Тема выпуска — история музыкальных трекеров (программ для создания музыки на PC).

image

Скачать mov-файл (730 мб)
Смотреть в он-лайне на страничке подкаста

Рассказывает Lyzzard/cornercut
Монтаж Manwe/SandS

Прочие аудио и видео-подкасты о демосцене можно найти здесь: http://scene.rpod.ru/
Всего голосов 66: ↑58 и ↓8+50
Комментарии56

Podcast9 #30 — какая средняя зарплата у российского программиста?

Время на прочтение1 мин
Количество просмотров1.2K
В тридцатом юбилейном выпуске Podcast9 Петр Диденко и Михаил Черномордиков обсуждают прошедшую конференцию ReMIX, последние новости в сфере мобильной платформы Windows Phone 7, браузера Internet Explorer 9, социальных приложений и медиатехнологий, а также состояние индустрии в целом.

Ссылки:
Читать дальше →
Всего голосов 87: ↑48 и ↓39+9
Комментарии28

Программный разгон CPU в Apple iPhone и iPod

Время на прочтение1 мин
Количество просмотров44K
Если вы не знали — Apple искусственно ограничивает производительность процессоров для своих мобильных устройств. Номинальной частотой процессора для 3G является 600Мгц, а для 3G(s) 833Мгц.
По факту же процессоры работают на частотах 412 и 600 Мгц, соответственно. Т.е. в полтора раза ниже.

Есть простой способ программно снять данное ограничение.

Читать дальше →
Всего голосов 102: ↑81 и ↓21+60
Комментарии71

Видеоматериалы по iOS разработке

Время на прочтение2 мин
Количество просмотров6.8K
Привет, хабраюзеры!
Может быть, вы видели наш анонс на хабре про бесплатные курсы iOS разработке. Хотим поделиться радостной новостью: мы запустили эти курсы и уже провели четыре занятия! Успели пройти основы языка Objective-C, особенности IDE Xcode, а так же применение концепции MVC в iOS. Но сейчас не об этом.
В анонсе многие спрашивали нас, будем ли мы организовывать видеозапись лекций для тех, кто живет не в Москве. К сожалению, записывать сами мы не смогли. Но зато мы выкладываем на наш блог все материалы с лекций: презентацию, скринкаст практических заданий, а так же файлы проектов. Поэтому, если вы не имеете возможность посещать наши курсы, но все же хотите быстро и эффективно разобраться с разработкой на iOS — welcome!
Читать дальше →
Всего голосов 13: ↑8 и ↓5+3
Комментарии23

Обработка Excel файлов с использованием Python

Время на прочтение4 мин
Количество просмотров205K
image
По работе пришлось столкнуться с задачей обработки xls файлов средствами python. Немного по гуглив, я натолкнулся на несколько библиотек, с помощью которых можно работать с файлами excel.
Читать дальше
Всего голосов 59: ↑52 и ↓7+45
Комментарии57
1

Информация

В рейтинге
Не участвует
Откуда
Воронеж, Воронежская обл., Россия
Дата рождения
Зарегистрирован
Активность