Pull to refresh
1
0
sveneld @sveneld

User

Send message

Работа с частичными моками в PHPUnit 10

Reading time8 min
Views7K

В этом году должен выйти PHPUnit 10 (релиз планировался на 2 апреля 2021 года, но был отложен). Если посмотреть на список изменений, то бросается в глаза большое количество удалений устаревшего кода. Одним из таких изменений является удаление метода MockBuilder::setMethods(), который активно использовался при работе с частичными моками. Этот метод не рекомендуется использовать с версии 8.0, но тем не менее он описан в документации без каких-либо альтернатив и упоминания о его нежелательности. Если почитать исходники PHPUnit, issues и пул-реквесты на GitHub, то станет понятно, почему так и какие есть альтернативы.

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

Читать далее
Total votes 45: ↑45 and ↓0+45
Comments0

Быстрый фильтр каталога для интернет-магазинов на основе битмапов Redis

Reading time4 min
Views62K


Не секрет, что каждый интернет-магазин должен помогать пользователям найти то, что им нужно. Особенно, если товаров у вас много (> 10). На помощь приходит каталогизация товаров, но разбить товары по категориям — полдела. Товары внутри категории нужно уметь фильтровать по их свойствам. Особенно, если товары у вас разношёрстные, например, одежда, электроника, ювелирные изделия и т.д. И тут любой разработчик, пишущий свой e-commerce продукт, сталкивается с неприятными реалиями жизни: у товаров могут быть совершенно разные свойства, у некоторых товаров они могут отсутствовать, некоторые товары по одному свойству могут попадать под разные значения (цвет платья то ли синий, то ли голубой, соответственно, неплохо бы его показать и по синему и по голубому цвету). Проще говоря, у вас EAV. Бывает ещё, что EAV вам диагностирует заказчик ближе к концу разработки, а то и просит добавить фильтр по динамическим свойствам уже после релиза.
Читать дальше →
Total votes 38: ↑35 and ↓3+32
Comments75

Как айтишнику издать свою книгу. Часть первая: куда податься

Reading time9 min
Views15K

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

Книга, опыт выпуска которой и послужил источником данного материала, в статье ранее https://habr.com/ru/post/512460/ набрала тысячи скачиваний и десятки благодарных отзывов. 

Для тех, кто хочет узнать, как работает книжное дело сейчас, выкладывать ли онлайн самому или сотрудничать с издательством, сколько получают авторы, как попасть на полки Буквоеда, Читай-города, в главные интернет-магазины, и все ли решают лайки — прошу:

Сравнить опенсорсный и проприетарный пути
Total votes 14: ↑13 and ↓1+17
Comments25

Путь в ИТ. Книга о том, как жить в ИТ профессионально и счастливо

Reading time6 min
Views20K
Путь в ИТ. Обложка книги

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

В книге собраны опыт, забавные истории, взгляды и решения: о том, как выбирать место работы, когда и с чего начать, как выстраивать отношения в жизни и на проектах. Какие типажи успешны в сфере ИТ и какие черты стоит в себе воспитать. Как стать тим-лидом и руководить, «побеждать» на собеседованиях, бороться с выгораниями, возрождаться из пепла, двигаться дальше и развиваться. Где искать вдохновение, как попасть в компанию мечты и оставаться жизнерадостным разработчиком.

Немного об авторе


Разработчик с опытом более 10 лет. Занималась медиасервисами в компании, создавшей Rutube. Работала над порталами Videomore.ru, СТС, Wifire TV Lite, video.khl.ru. Делала HTML5-плеера для КХЛ, ОТР, СТС и других крупных клиентов. Верстала под IE6 и разрабатывала SmartTV-приложения. Руководила фронтенд-отделом, собеседовала и собеседовалась за границу. Спикер митапов и конференций со скромным стажем. Сейчас фронтенд-разработчик в Яндексе.

Если интересно — внутри выдержки из советов и историй, а также ссылки на скачивание.
Читать дальше →
Total votes 18: ↑12 and ↓6+13
Comments22

Как айтишнику издать свою книгу. Часть 2 Самиздат: сколько стоит свобода

Reading time10 min
Views7.6K

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

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

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

Долго ли, дорого ли
Total votes 30: ↑30 and ↓0+30
Comments25

Изучаем PHP изнутри. Zval

Reading time10 min
Views51K
Эта статья базируется на главе Zvals книги PHP Internals Book, переводом которой на русский язык я сейчас занимаюсь [1]. Книга ориентирована в первую очередь на C-программистов, желающих писать свои расширения для PHP, но, я уверен, что она окажется полезной и для PHP-разработчиков, так как описывает внутреннюю логику работы интерпретатора. В статье я оставил только базовую теорию, которая должна быть понятна всем разработчикам (даже не знакомым с PHP или C). За более полным изложением материала обратитесь к книге.

Задачка для привлечения внимания. Каким будет результат выполнения следующего кода?
$obj1 = new StdClass();
$obj2 = new StdClass();

$obj1->value = 1;
$obj2->value = 1;

function f1($o) {
  $o = 100;
}

function f2($o) {
  $o->value = 100;
}

f1($obj1);
f2($obj2);

var_dump($obj1);
var_dump($obj2);


Ответ
object(stdClass)#1 (1) { [«value»]=> int(1) }
object(stdClass)#2 (1) { [«value»]=> int(100) }

Если вы точно определили ответ и можете объяснить почему он будет именно таким, то, наверное, вы не узнаете из этой статьи ничего нового, иначе — вам определенно стоит прочитать эту статью, чтобы углубить свои знания.
Читать дальше →
Total votes 54: ↑47 and ↓7+40
Comments37

Как устроено ранжирование

Reading time9 min
Views26K
Со временем Sphinx оброс большой кучей режимов поиска и ранжирования. Регулярно возникают вопросы про разное (от «как вытащить документ на 1е место» до «как рисовать от 1 до 5 звездочек в зависимости от степени совпадения»), которые на самом деле суть вопросы про внутреннее устройство тех режимов. В этом посте расскажу все, что вспомню: как устроены режимы поиска и режимы ранжирования, какие есть факторы ранжирования, как в точности рассчитываются факторы, как финальный вес, все такое. И, конечно, про звездочки!
Читать дальше →
Total votes 52: ↑48 and ↓4+44
Comments43

Улучшаем релевантность поиска в sphinxsearch

Reading time4 min
Views58K
Sphinxsearch является поисковым движком для быстрого fulltextsearch, может получать данные из mysql, oracle и mssql, может выступать сам хранилищем(realtime индексы). Также sphinx имеет режим работы через api и через sphinxql — аналог протокола sql(с некоторыми ограничениями), что позволяет подключить поиск через sphinx на сайте с минимальным изменением кода. Это один из немногих великих, крупных и открытых проектов разработанный в России. На моей жизни я видел как sphinx обрабатывает порядка 100-200 поисковых запросов на 2 миллиона записей из mysql и при этом сервер свободно дышал и его не тошнило, mysql начинает умирать уже на 10 запросах в секунду на аналогичном конфиге.

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

Sphinx содержит две независимые программы indexer и searchd. Первый строит индексы по данным взятым из базы данных, второй производит поиск по построенном индексу. А теперь перейдем к настройкам поиска в sphinx.

morphology

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

Пример нормализации слова стеммингом на русском.
Слова “яблоко”, “яблока”, “яблоку” будут обрезаны в “яблок” и любой поисковый запрос с вариацией слова “яблока” будет тоже нормализован и найдет записи со словами которые были описаны выше.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments17

Как готовить SphinxQL

Reading time6 min
Views45K
По заявкам трудящихся, расскажу про две новых мега-фичи в Sphinx. Предложения тем для последующих рассказов можно засылать в комментарии.

Обе фичи добавлены в версии 0.9.9-rc2, опубликованной в начале апреля 2009го. Версия традиционно (слишком) стабильная, известных серьезных багов нету, тесты проходятся, итп. Отважные люди, а также коммерческие клиенты с контрактами про поддержку, уже успешно используют в продакшне, несмотря на отличный от «release» тег.

1я мега-фича. Теперь Sphinx поддерживает сетевой протокол MySQL (внутренней версии номер 10, которую поддерживают все версии сервера и клиента, начиная с MySQL 4.1 и по MySQL 5.x включительно).

Читать дальше →
Total votes 88: ↑86 and ↓2+84
Comments80

Создание ознакомительного поискового движка на Sphinx + php

Reading time5 min
Views104K

Предыстория


Раньше для поиска по сайту мы использовали обычный fulltext поиск. Но в определенный момент он перестал нас устраивать и мы решили опробовать альтернативную технологию поиска: Sphinx. К сожалению, у сфинкса совсем нет русской документации, поэтому эта статья — аналог статьи Build a custom search engine with PHP, только на русском языке и для моего локального окружения (windows 7, mysql/php)
Статья состоит из 4 частей:
  1. Краткий рассказ про подготовку базы для поиска.
  2. Рассказ про первоначальную установку и настройку сфинкса
  3. Индексирование базы и тестовый поиск из командной строки
  4. Тестовый поиск из php

Читать дальше →
Total votes 82: ↑73 and ↓9+64
Comments59

Пример Sphinx поиска на реальном проекте — магазин автозапчастей Tecdoc

Reading time9 min
Views98K
Вкратце: статья будет полезна тем программистам, кто уже заинтересовался релевантным поиском и прочитал статьи по стартовой установке сфинкс поиска, погонял на тестовых примерах и таких же синтетических задачах. Часто эти примеры не дают ответа на вопрос, а как же ощутить реальную пользу от поискового модуля Sphinx в сравнении с другими более простыми вариантами поиска. Примеры кода в статье — на php+smarty, Sphinx 2.0.1-beta, база данных — mysql, исходники и дамп структуры базы выложены отдельным архивом в подвале. В статье описан пример использования таких особенностей сфинкса, как:
  • Создание единого конфиг файла для windows development и linux production
  • SetMatchMode(SPH_MATCH_EXTENDED2) и почему SPH_MATCH_ANY и другие не подходят для реального поиска
  • SetSortMode(SPH_SORT_RELEVANCE), SetFieldWeights — сортировка по релевантности и установка весов для полей индекса
  • SetLimits(0,20) — ограничение вывода результатов
  • AddQuery, RunQueries — построение мультизапросов
  • SetFilter, ResetFilters — добавление фильтрации в мулльтизапросе для ограничения получаемых данных
  • Wordforms — использование синонимов и преодоление ограничений для нестандартных словоформ, как «C#»

Также хочется внести свой вклад в развитие проекта и откровенно недостаточной русской документации при том, что проект создан и поддерживается русскоязычным программистом. Поэтому решено: непрекращающийся поток блокер задач идет лесом, вместо него в качестве благодарности разработчикам сфинкса в общем и пользователю Андрей Аксёнов ака shodan я пишу эту статью.
Читать дальше →
Total votes 59: ↑52 and ↓7+45
Comments47

Настройка поиска Sphinx для интернет-магазина

Reading time5 min
Views40K

Информации по Sphinx не так много, как хотелось бы. Лишняя статья не помешает.
Первые шаги в освоении Sphinx мне помогли сделать статьи Создание ознакомительного поискового движка на Sphinx + php и Пример Sphinx поиска на реальном проекте — магазин автозапчастей Tecdoc Советую начать с них.


Некоторое время на моем сайте работал поиск через LIKE по каждому слову запроса. Хотелось большего, и вот какие случаи теперь будут обрабатываться правильно:


  • Словоформы. Выдача по «винты» и «винтов» должна быть одинаковой.
  • Поиск по фрагменту слова.
  • Поиск нецелых чисел. Разделитель точка и запятая.
  • Буква Ё
  • Типичные ошибки. Например «Аммортизатор».
  • Синонимы. Регулятор и ESC.
  • Язык. mAh и мАч, В и V, AAA латиницей и кириллицей.
  • Слово из букв и цифр. 10х15х4, 6000mAh
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments8

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

Reading time3 min
Views19K

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

Пошагово и с картинками
Total votes 32: ↑30 and ↓2+41
Comments61

Детская сказка программисту на ночь

Reading time13 min
Views9K

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


Репка - медаль

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

Читать дальше →
Total votes 13: ↑12 and ↓1+13
Comments1

Настройка собственного почтового сервера

Reading time7 min
Views154K

Зачем нужен собственный почтовый сервер можно почитать в оригинальной статье. А поскольку на "habr" обретает надежду всяк сюда входящий, то далее пошаговая инструкция как сделать все настройки, чтобы почтовый сервер функционировал правильно: мог достучаться до любого адресата и сообщения не помечались как спам.

Читать далее
Total votes 24: ↑23 and ↓1+26
Comments123

Фантастика 2020 года, которую стоит почитать

Reading time6 min
Views110K


Под конец года принято подводить итоги и кажется стоит вспомнить, что же было в этом непростом году хорошего. Например, я читал много отличных книг (что еще делать дома?). Вот немного про самые примечательные из них или, по крайней мере, те, которые сильнее всего запомнились мне.
Читать дальше →
Total votes 44: ↑42 and ↓2+53
Comments112

Как должны учиться наши дети? Не так как мы

Reading time12 min
Views14K

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

Но сегодня не об этом =)

Сегодня мы поговорим про тех, кому сейчас только предстоит пойти в школу. Кому вот прямо сейчас лет 5-6. И почему большая ошибка учить их так же, как учили тебя тридцать лет назад. Почему это бесполезно, зачастую вредно и даже не похоже на учёбу в нашем понимании этого слова.

Читать далее
Total votes 22: ↑17 and ↓5+20
Comments85

Мёртвый код: найти и обезвредить

Reading time14 min
Views26K


Меня зовут Данил Мухаметзянов, я работаю бэкенд-разработчиком в Badoo уже семь лет. За это время я успел создать и изменить большое количество кода. Настолько большое, что в один прекрасный день ко мне подошёл руководитель и сказал: «Квота закончилась. Чтобы что-то добавить, нужно что-то удалить».

Ладно, это всего лишь шутка — он такого не говорил. А жаль! В Badoo за всё время существования компании накопилось больше 5,5 млн строк логического бизнес-кода без учёта пустых строк и закрывающих скобок.

Само количество не так страшно: он лежит, есть не просит. Но два-три года назад я начал замечать, что всё чаще читаю и пытаюсь разобраться в коде, который на самом деле не работает в продакшен-окружении. То есть, по сути, мёртв.

Эту тенденцию заметил не только я. В Badoo поняли: наши высокооплачиваемые инженеры постоянно тратят время на мёртвый код.
Total votes 67: ↑67 and ↓0+67
Comments28

Как облегчить себе жизнь при использовании Git (а также подборка материалов для глубокого погружения)

Reading time13 min
Views36K

Tree of Dragons II by surrealistguitarist

Для тех, кто каждый день использует Git, но чувствует себя неуверенно, команда Mail.ru Cloud Solutions перевела статью фронтенд-разработчика Шейна Хадсона. Здесь вы найдете несколько трюков и советов, которые могут немного облегчить работу с Git, а также подборку статей и мануалов более продвинутого уровня.
Читать дальше →
Total votes 42: ↑41 and ↓1+62
Comments12

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity