Как стать автором
Обновить
30
0
Виталий Чирков @clslrns

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

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

Как мы в 2 раза увеличили скорость формирования ленты в UGC-приложении

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

Несколько лет назад мы добавили в мобильное приложение iFunny социальные механики: подписку и фид с мемами, которые запостили друзья. В этом материале обсудим вызовы времени и ответы на них в виде нескольких подходов в технической реализации на бэкенде.

Ежедневно наши пользователи загружают десятки тысяч единиц контента. На таком объёме данных приходится применять ухищрения, чтобы сохранить приемлемое время ответа. Под катом расскажу, что именно мы делали, а в конце статьи поделюсь кодом на GitHub для ознакомления.

Читать далее
Всего голосов 47: ↑46 и ↓1+45
Комментарии6

FunCorp словарь

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


Команда разработки FunCorp в новом составе работает уже почти год (кстати, ровно столько же мы достаточно активно ведём свой блог), и за это время ребята успели не только привыкнуть друг к другу, сработаться, выстроить процессы, но и обзавестись собственным профессиональным сленгом. В обиходе есть как общепринятые термины, понятные IT-комьюнити, так и чисто фанкорповские. В преддверии Нового года мы решили чуть заморочиться и собрать все термины и выражения воедино. В итоге получился небольшой словарь неДаля.
Читать дальше →
Всего голосов 29: ↑24 и ↓5+19
Комментарии6

Переход с Redshift на ClickHouse

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


Долгое время в iFunny использовался Redshift в качестве базы данных для событий, которые происходят в сервисах бэкенда и мобильных приложениях. Его выбрали потому, что на момент внедрения, по большому счёту, не было альтернатив, сравнимых по стоимости и удобству.

Однако всё изменилось после публичного релиза ClickHouse. Мы долго его изучали, сравнивали стоимость, прикидывали примерную архитектуру и вот, наконец, этим летом решились посмотреть, насколько он нам полезен. Из этой статьи вы узнаете о том, какую проблему нам помогал решить Redshift, и как мы перенесли это решение на ClickHouse.
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии11

Санаторий для мозга: как не заставлять пользователя напрягаться

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

© The Awkward Yeti

Говорят, лень — двигатель прогресса. Это неправда. Лень ничего не двигает, потому что ей лень.
На самом деле, двигатель прогресса — это стремление к комфорту и к тому, чтобы для достижения результата приходилось совершать как можно меньше действий. А уже дальше можно либо быть ленивым, либо тратить освободившееся время на великие свершения, для которых мы все и рождены.

Думая о комфорте, мы представляем себе мягкую кровать, тёплую погоду, приятные звуки и прочие осязаемые телесные радости. Однако нельзя забывать, что наш мозг тоже нуждается в подобных приятностях (стоит заметить, что эту мысль мне подсказал как раз-таки мозг, так что, возможно, он просто хитрит).
Этот замечательный орган и сам стремится к тому, чтобы не заниматься рутинными делами, поэтому мы чистим зубы, вставляем ключи в замки и встаём с кресла не очень-то задумываясь об этих действиях. И важно помнить, что одна из главных задач дизайнеров и продуктологов состоит именно в том, чтобы обеспечить мозгу пользователя подобный комфорт, или, говоря поэтично, снизить когнитивную нагрузку.

Давайте разбираться, как этого достичь.

Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии1

Iterators & Generators

Время на прочтение12 мин
Количество просмотров19K
Обработка элементов коллекции/массива обычная и частая операция. В JavaScript есть несколько способов обхода коллекции начиная с простого for(;;) и for a in b

var divs = document.querySelectorAll('div');
for (var i = 0, c = divs.length; i < c; i++) {
    console.log(divs[i].innerHTML);
}

var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
    console.log(i, obj[i]);
}

У объекта Array есть методы обхода всех элементов map(), filter()
var numbers = [1, 2, 3, 4, 5];
var doubled = numbers.map(function (item) {
    return item * 2;
});
console.log(doubled);

В Firefox есть "заполнитель массива" (Array comprehensions)
var numbers = [1, 2, 3, 4];
var doubled = [i * 2 for each (i in numbers)];
console.log(doubled); // [2, 4, 6, 8]

Итераторы и Генераторы появились в JavaScript 1.7 (по версии Mozilla) они есть пока в Firefox 2+ (в статье будет упомянут способ как их можно «эмулировать» почти во всех браузерах с костылем) Итераторы и Генераторы вносят механизм, позволяющий управлять поведением for in и инкапсулировать процесс получения следующего элемента в списке объектов.

Часто для обхода и обработки элементов массива мы пишем большие конструкции, часто копипастим их части. Задача Генераторов и Итераторов усовершенствовать этот процесс, добавив синтаксический сахар.
Читать дальше →
Всего голосов 89: ↑86 и ↓3+83
Комментарии16

Юнит-тестирование в PHP

Время на прочтение13 мин
Количество просмотров186K
Язык PHP очень легок для изучения. Это, а так же обилие литературы «Освой _что_угодно_ за 24 часа» породило большое количество, мягко говоря, некачественного кода. Как следствие, рано или поздно любой программист, который выходит за рамки создания гостевой книги или сайта-визитки сталкивается с вопросом: «а если я здесь немножко добавлю, все остальное не ляжет?» Дать ответ на этот вопрос и на многие другие может юнит-тестирование.

В самом начале хочется оговориться — здесь речь не будет идти о TDD и методологиях разработки ПО. В данной статье я попробую показать начинающему PHP-разработчику основы использования модульного тестирования на базе фреймворка PHPUnit
Начнем?..
Всего голосов 97: ↑90 и ↓7+83
Комментарии90

Понимание ООП в JavaScript [Часть 1]

Время на прочтение16 мин
Количество просмотров337K
— Прототипное наследование — это прекрасно
JavaScript — это объектно-ориентированный (ОО) язык, уходящий корнями в язык Self, несмотря на то, что внешне он выглядит как Java. Это обстоятельство делает язык действительно мощным благодаря некоторым приятным особенностям.

Одна из таких особенностей — это реализация прототипного наследования. Этот простой концепт является гибким и мощным. Он позволяет сделать наследование и поведение сущностями первого класса, также как и функции являются объектами первого класса в функциональных языках (включая JavaScript).

К счастью, в ECMAScript 5 появилось множество вещей, которые позволили поставить язык на правильный путь (некоторые из них раскрыты в этой статье). Также будет рассказано о недостатках дизайна JavaScript и будет произведено небольшое сравнение с классической моделью прототипного ОО (включая его достоинства и недостатки).
Читать дальше →
Всего голосов 129: ↑119 и ↓10+109
Комментарии71

Информация

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