Pull to refresh
0
0
Oleg Subbotin @SubW

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

Send message

Работа с памятью (и всё же она есть)

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

Читать дальше →
Total votes 235: ↑224 and ↓11+213
Comments90

Локальная база знаний организации на движке Wiki

Reading time5 min
Views59K
Введение

Полтора года назад я пришел работать в техническую поддержку филиала одной крупной общероссийской компании. До этого технической поддержкой я не занимался, мог, конечно, переустановить, настроить ОС или настроить простейшую сеть, но сильно не вникал. По мере накопления знаний, возникла необходимость их систематизировать и сохранить. Сначала у меня была специальная папочка, куда я складывал обычные документы Word и Excel. Со временем в папке накопилось много документов, поиск нужной информации стал занимать довольно значительное время. Работал я не один, поэтому некоторые файлы необходимо было держать в открытом доступе, например, список пользователей, периодически приходилось искать информацию, нужную другим сотрудникам. При заведении нового пользователя администраторами, я заносил его в таблицу, где также содержались реквизиты для удаленного доступа на его компьютер (не все же время ходить на рабочие места, когда пользователей больше 300 человек). Актуальный файл всегда был только в одном экземпляре, у других сотрудников технической поддержки были копии, которые могли не совпадать, если один из сотрудников подключал человека или менял сетевые реквизиты, а потом забывал об этом сообщить.
Со временем появилась мысль о том, что надо все это объединить и сохранить в одно место, чтобы у всех сотрудников технической поддержки был доступ к информации, возможности ее редактирования и добавления.

Идея создания своей маленькой Википедии, посвященной только моей работе, пришла не сразу, да и потребовала долгой реализации, т.к. она делалась на работе, а времени на ее наполнение оставалось не так уж и много. Интересно было то, что по должностной инструкции должна была существовать база знаний, в которой мы должны были искать ответы на вопросы пользователей, на деле же ее не существовало.
Читать дальше →
Total votes 71: ↑50 and ↓21+29
Comments69

Семь принципов успешного социального продукта, которые вам надо знать

Reading time6 min
Views5.2K
Социальные продукты — это весьма интересная птица. Даже для самого опытного продакт-менеджера, социальные продукты остаются неуловимыми. И хотя есть много очевидных истин про них, существует масса способов продумать их неправильно. Особенно если вы глубоко в текущем моменте, принимаете решения на уровне пикселей, стараетесь помнить что же именно важно, — и общая картина размывается.

Есть единственная магия, которую я обнаружила в дизайне привлекательных социальных продуктов, которые отлично прорываются через шум и овладевают временем и деньгами людей. Это тотальное следование следующим ключевым принципам дизайна, архитектуры продукта.
Читать дальше →
Total votes 65: ↑49 and ↓16+33
Comments51

Плагин Netbeans, для работы с git

Reading time1 min
Views2K
Многие разработчики любят прекрасную IDE Netbeans. Все в ней хорошо, только в стандартной поставке нет поддержки не менее любимого и прекрасного git'а.

Но мир не без добрых людей! Благодаря alex.coles и jonas.fonseca , выпустившим плагин nbgit в Netbeans появляется поддержка git!

Установка и пара картинок работы плагина
Total votes 21: ↑19 and ↓2+17
Comments14

50 цитат о программировании всех времён

Reading time6 min
Views159K
Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

50. Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает.
— Rick Cook

49. Lisp — это не язык, а строительный материал.
— Alan Kay

48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
Читать дальше →
Total votes 344: ↑336 and ↓8+328
Comments136

Конкурентный доступ к реляционным базам данных

Reading time13 min
Views59K
СхемаВопросы параллелизма в компьютерных вычислениях очень сложны! Причинами большой сложности являются огромное количество деталей, которые нужно учитывать при разработке параллельных программ. В программирование и без того существует большое количество деталей, которые создают почву для ошибок, параллелизм же, добавляет ещё.

Вопросы конкурентного доступа к реляционным базам данных встают практически перед любыми разработчиками прикладного программного обеспечения и не только перед ними. Результатом такой востребованности этой области является наличие большого количества созданных архитектурных паттернов. Это позволяет успешно справляться с большой сложностью разработки таких программ. Ниже пойдёт речь о таких рецептах, а также механизмах на которых базируется их реализация. Повествование будет иллюстрироваться примерами кода на Java, но большинство материала не привязано к языку. Цель статьи — описать проблемы конкурентного доступа к реляционным базам данных, в качестве введения в предмет, а не полноценного охвата темы.
Читать дальше →
Total votes 60: ↑58 and ↓2+56
Comments23

Создание модуля для Magento — часть 1

Reading time16 min
Views32K
Популярность Magento постоянно растет. Появляется множество новых интеренет-магазинов, написанных на этом замечательном движке.
К сожалению, информации для разработчиков маловато, поэтому, будем исправлять ситуацию :)
В мои планы входит написание нескольких статей о том, как создать модуль для Magento, на примере модуля блога.
Оригинал данной статьи находится на моем блоге.
Читать дальше →
Total votes 58: ↑41 and ↓17+24
Comments30

12 навыков создания защищенных веб-приложений

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

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

Итак, поехали.

Читать дальше →
Total votes 246: ↑203 and ↓43+160
Comments194

Набор инструментов для построения графиков, блок-схем и диаграмм

Reading time3 min
Views172K


Есть много разных сервисов, облегчающих жизнь веб-разработчику или дизайнеру, в том числе создающих разные графики, диаграммы, блок-схемы и т.д. Ниже представлена небольшая подборка.
(Осторожно, много изображений)
Читать дальше →
Total votes 151: ↑144 and ↓7+137
Comments40

JavaScript 1.8

Reading time5 min
Views9.3K
JavaScript 1.8 предоставляет огромное количество вкусного синтаксического сахара, в основном любителями функциональщины. Но очень мало разработчиков знает об этой красоте. Конечно, к сожалению, все эти вкусности не поддерживает даже Chrome (что уж говорить об IE?), а только Firefox 3+, но JavaScript-разработчик просто обязан знать обо всех этих новинках.

Наиболее полную информацию можно найти в статьях на MDN:

А я перевела небольшую, но интересную статью Джона Ресига (автора jQuery), который раскрывает в ней некоторые из новых фич: Expression Closures, Generator Expressions, __iterator__, Array Reduce и кое-что ещё:

// Останавливаем выполнение события по-умолчанию
document.addEventListener("click", function() false, true);
// Выводим три сообщения
for ( let i in 3 ) alert( i );
// Создаем массив из 100 элементов, заполненный нулями
[ 0 for ( i in 100 ) ];
// Создаем единичную матрицу 10*10
[[ i == j ? 1 : 0 for ( i in 10 ) ] for ( j in 10 )];

Читать дальше →
Total votes 82: ↑71 and ↓11+60
Comments34

Сборник советов и фактов по оптимизации PHP-скриптов

Reading time9 min
Views44K
image Эту статью давно стоило переписать (слишком много «экономии на спичках»), но руки не доходят. Пускай весит и напоминает о том, как мы глупы в молодости.
Одним из основных критериев успешности любого интернет-ресурса является скорость его работы и с каждым годом пользователи становятся всё более и более требовательными по этому критерию. Оптимизация работы php-скиптов — это один из методов обеспечения скорости работы системы.
В этой статье я бы хотел представить на суд общественности свой сборник советов и фактов по оптимизации скриптов. Сборник собирался мною достаточно долго, основан на нескольких источниках и личных экспериментах.
Читать дальше →
Total votes 237: ↑134 and ↓103+31
Comments215

Вторая нормальная форма в примерах

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

Что же такое вторая нормальная форма или 2NF? Так чтоб трехлетний ребенок понял…
Для начала разберемся в целях, которые преследует нормализация. Под катом немного терминов из дискретки.
Читать дальше →
Total votes 66: ↑39 and ↓27+12
Comments12

Вторая нормальная форма (в терминологии SQL)

Reading time4 min
Views13K
Поскольку первый пост уже сорвал крышу нескольким хабражителям вообще и пошатнул карму мне в частности, решил написать перевод статьи в терминах языка SQL. Будет полезно мне и, возможно, не только мне. Вообще с детских лет я стремлюсь приземлять теорию к практике с помощью различных средств, среди которых был и алкоголь, и, мне кажется бесполезно тратить время на изучение чегото, к чему нельзя придумать пример из реальной жизни.

Забавно лишь, что вся эта белиберда под катом родилась в уме Кодда еще до возникновения SQL как языка, а теперь вот в терминах SQL все подавай…


Что же такое вторая нормальная форма или 2NF? Так чтоб трехлетний ребенок действительно понял…
Для начала разберемся в целях, которые преследует нормализация. Под катом нету терминов дискретки…
Читать дальше →
Total votes 80: ↑52 and ↓28+24
Comments74

Инструменты для дизайнеров и разработчиков

Reading time2 min
Views4.8K


Предлагаю ознакомиться с небольшим набором инструментов для веб-разработки, которые могут сделать вашу жизнь проще. Все сервисы бесплатны и просты в использовании, но (как обычно) есть и минус – они все на английском, хотя когда и кого это останавливало?)

Смотрим
Total votes 155: ↑131 and ↓24+107
Comments41

MemcacheDB против Kyoto Tycoon — экспресс тестирование

Reading time4 min
Views3.4K
Недавно, чисто случайно, попался на глаза продукт от FAL LabsKyoto Tycoon, легкий сервер данных. В основе данного продукта — QDBM (Quick Database Manager) — хранилище данных типа ключ-значение. Зацепило меня то, что с этим «Магнатом из Киото» можно общаться по memcached-like протоколу.
Поскольку уже некоторое время использую MemcacheDB, захотелось сравнить их характеристики (протокол общения один, и там и там NoSQL-хранилище ключ-значение). Недавно подвернулся удобный случай — экспортировал некоторый объем данных из одного самопального хранилища в MemcacheDB. Для тестирования осталось только развернуть на том-же сервере Kyoto Tycoon.
Вот что у меня получилось:
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments24

HTML5 Canvas — создание аркады-скроллера по шагам

Reading time8 min
Views5.6K
image

Предисловие

Это инструкция по созданию игры, которую я накодил за пару вечеров. Целью было не столько создание достойного представителя жанра, сколько проверка возможностей Canvas и ООП в JavaScript. Чтобы было интереснее, я поставил условие — никаких внешних файлов со спрайтами, вся графика рисуется встроенными методами. Также, не используется никаких фреймворков и библиотек. Просто потому, что в такой небольшой игре их использование ИМХО не оправдано.

В целом, Canvas молодая платформа, и может вызывать интерес перенесением на нее классических игровых концепций.

Задача

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

Исполнение

Сразу предупреждаю, статья довольно длинная, т.к. постарался описать каждый аспект игры. Ссылка на рабочий пример в конце.
Читать дальше →
Total votes 55: ↑49 and ↓6+43
Comments54

Программирование в PHP для командной строки

Reading time9 min
Views42K
Предисловие

Ubuntu предоставляет в комплекте с пакетом apache2 утилиты для включения\выключения виртуальных хостов и модулей. Однако, создание конфигов для виртуальных хостов отнимают дополнительное время. Поэтому, мне захотелось исправить этот недостаток. Можно было, конечно, сделать автоматические поддомены для апача, но я решил написать скрипт, который создает файлы конфигурации виртуальных хостов для апача, а так же, при необходимости, добавляет имя хоста в файл /etc/hosts. Я не очень хорошо пишу скрипты в bash'e, поэтому решил использовать PHP для моей довольно простой задачи, который я, к тому же, знаю довольно неплохо.
Итак, в этой статье мы сделаем сразу две полезных вещи: ознакомимся с операциями ввода\вывода командной строки в PHP и напишем скрипт, который совсем немного упростит нам жизнь.
Читать дальше →
Total votes 76: ↑51 and ↓25+26
Comments171

Автоматизированная проверка PHP кода при комитах

Reading time6 min
Views33K
В свое время работая в узком кругу программистов, отдельными задачами и даже проектам, мы не задумывались о проблемах связанными с текучкой кадров. Точнее думать — думали, но ни каких мер не применяли, да и в целом коллектив был сплоченный никто не уходил и никого «не уходили». С ростом внутренних проектов и корпоративных клиентов, штат начал разрастаться и казалось, что все отлично — нас больше, значит будем больше успевать и делать, но не тут то было. Мы начали тратить кучу времени на “бесполезные” обсуждения, проверки, излишние проектирование и т.д, больше всего раздражает — это проверка кода. И тут я начал думать, что “мудрые и древние” наверняка решали эти проблемы с сотнями, тысячами программистов, неужели мы не справимся? Я решил провести эксперимент, под названием “автоматизированная проверка стиля кода при комитах”. Для большинства из Вас это не новость и наверняка вы этим пользуетесь, но поделиться опытом внедрения думаю, не будет лишним.
Читать дальше →
Total votes 84: ↑74 and ↓10+64
Comments48

Ревью кода в mercurial

Reading time3 min
Views4.6K

hg review — полезная плюшка для mercurial'а


У git'а есть GitHub, а у Mercurial'а есть hg review. На самом деле я сравнил козу с бояном.
image
Ревью кода.

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

И вот появился проект, который дает нам инструмент, а как его использовать — решать нам.
Читать дальше →
Total votes 59: ↑52 and ↓7+45
Comments21

Как не дать программисту написать плохой код

Reading time3 min
Views6.4K
image
Как-то раз в одной неглупой статье один неглупый хабраюзер рассказал одну неглупую идею. Суть её была в том, что в его компании настроена система, контролирующая написанный программистами код в момент попытки добавления его в репозиторий и отклоняющая код, не проходящий по некоторым критериям. Мне идея понравилась. Я (и еще 3 человека) попросили автора развить мысль и написать статью об этом, но она так и не появилась. И я решил разобраться сам.
Читать дальше →
Total votes 159: ↑141 and ↓18+123
Comments111

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity