Чему стоит научиться у МакДональдса?

Что нужно сделать, чтобы компания могла зарабатывать больше денег прямо сейчас? Берём пример с МакДональдса!

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

Оказалось, что половина клиентов брала картошку фри в дополнение к гамбургеру. Цена этого эксперимента для сети — примерно 10 секунд времени работника на кассе на каждого покупателя. Сейчас, каждый день, сеть МакДональдс продает порядка 5000 тон картошки в день. Я не смог найти точное число денег, которое удалось заработать благодаря этому решению, но счёт идёт на миллиарды долларов. Теперь, в каждой сети фаст фуда вам предложат взять картошку, соус, пирожок или колу к вашей покупке, в зависимости от размера вашего чека и состава заказа.

Как-то раз, подруга-разработчица рассказала, что она покупает в одном месте кофе каждый день. Я обычно варю кофе сам, но тут решил попробовать капучино в ближайшей ко мне пекарне. Сходив несколько раз, я нашёл определенную прелесть в этом подходе. Но помимо этого я заметил, что при каждой покупке мне предлагали взять хлеба или тортик. В последнее время на кассе в пятёрочке постоянно предлагают взять какие-то товары. В салонах, женщинам, часто к простому маникюру предлагают ещё кучу вариантов дополнить услугу. На сайте GoDesigner.ru при составлении заказа можно выбрать большое количество дополнительных опций.

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

  1. Входящий поток клиентов
  2. Размер среднего чека
  3. Количество повторных покупок

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

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

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

Про PiterJS 13

Делюсь с вами впечатлениями и знаниями с piterjs 13!

Я сходил на PiterJS 13, который прошел в Селектеле, ниже информация, которую я почерпнул от докладчиков.

Re-imagining Webpack

Оказалось, что в Хельсинки одновременно с PiterJS проходил митап про react, и доклад Юхо Вепсалайнена мы слушали через скайп. Юхо рассказал про путь появления вебпака из не принятого пулл реквеста (#меняневзяли), про того, каких успехов добилася проект и показал красивые экспоненциальные графики роста скачиваний. Вот несколько интересных фактов и идей, которые я запомнил из его рассказа:

  • Вебпак хотят децентрализовать, отделить разработку ядра от разработки различных лоадеров. Для них есть отдельное сообщество, где ссылки на все репозитории есть в одном месте, очень удобно;
  • Вебпак принимает пожертвования через платформу Open Collective, вы можете видит все траты на проект и отправить деньги в помощь, в идеале, автор хочет работать над вебпаков фул-тайм и это вполне возможно с помощью этого механизма;
  • Можно голосовать за фичи, которые будут у разработчиков в приоритете на специальной странице;
  • Юхо написал книжку про вебпак (и ещё одну про реакт), её можно бесплатно прочитать тут или купить через leanpub.

Документация кода в JS

Вадим Горбачёв рассказал про то, как писать комментарии так, чтобы они были понятными. В целом, советы применимы к любому языку, самое важное:

  • Старайтесь, чтобы названия переменных и методов объясняли, что они делают;
  • Обязательно комментируйте код, в котором есть высокий уровень сложности, какие-то хаки и сюрпризы;
  • Автоматизируйте процессы — используйте автогенерацию и линтеры;
  • Указывайте в комментариях используемые единицы измерения и допустимые диапазоне;
  • Прочитайте книги «Code Complete» и «Clean Code».

А видео можно посмотреть по этой ссылке.

Нужен ли мне TypeScript?

Александр Баумгертнер попытался разобраться, нужна ли типизация и можно ли без неё обойтись. В качестве альтернативы TypeScript’у и Flow, Александр предлагает использовать очевидные названия переменных и функций, а для удобства работы в редакторах использовать простые JSDoc аннотации.

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

  • Без использования внешних инструментов, требуется, что все участники разработки обладали достаточной дисциплиной для написания кода в «правильном» стиле, а это сложно, особенно когда разработчики разного уровня;
  • Необходимость писать аннотации типов для абсолютно всех вещей в коде, даже тех, которые никто не увидит. Это требует колоссальных усилий, а качество комментариев понижается из-за чисто технический записей;
  • Иногда бывает сложно придумать очевидное название для функции, или в некоторых случаях, как например с переменной, которая содержит дату, тип этой переменной может быть непонятен и можно с ней совершить неправильно операцию. В случае с типизацией, код не скомпилируется, а без проверок — упадёт в рантайме;
  • Падение в яму провала — поддерживая руками типы вместо использования автоматических инструментов, вы увеличиваете вероятность появления ошибки, которая рано или поздно произойдёт и приведёт к проблемам.

Дискуссия интересная, поэтому я советую посмотреть видео тут.

Про #pitercss 11

Делюсь с вами впечатлениями и знаниями с pitercss 11!

Про «Semrush»

21 марта в питерском офисе компании Семраш прошёл митап про вёрстку и дизайн. Отдельно хочется отметить Семраш, не так много компаний с российскими корнями хорошо известны на западе, например, недавно Ноа Кэйган, маркетолог и бизнесмен упомянул продукт в своем блоге (Ноа сам по себе интересный человек и активно делиться своими знаниями, советую подписаться). Такие компании всегда ищут людей и это хороший вариант для работы. Лично я люблю больше компании, которые разрабатывают свой собственный продукт, а компаний такого размера, которые не были бы аутсорсерами в СПб можно пересчитать по пальцам руки. Поэтому вот ссылочка на вакансии, если вы в раздумьях о своём будущем — посмотрите позиции,  уверен, что что-то вас заинтересует.

Относительный CSS

Первым выступил Валерий Любимов  рассказал про относительные величины в CSS — rem, vw, vh, vmax, vmin и currentColor. Лично для меня это были новые вещи, потому что за CSS я не особо слежу, хотя про rem слышал.

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

Аналогичную экономию труда предлагает rem — единица измерения, которая вычисляется относительно корня html, а не от текущего размера шрифта, как у простого em. В сложном коде бывает непросто понять, от какого именно размера считается em, в случае с rem вы всегда знаете число и для изменения размеров под разные вьюпорты с помощью медиа-выражений достаточно в одном месте задать разные варианты размера font-size для тега html, чтобы получить адаптивность для всего проекта. Из минусов rem-ов можно отметить сложность создания изолированных компонентов, так как появляется жесткая внешняя зависимость от размера тега html, возможные проблемы с браузерным зумом и сложность конвертации абсолютных величин из макета дизайнера в относительные величины от размера шрифта, не уверен, что тут можно получить пиксель-пёрфект верстку.

vw, vh, vmax и vmin — позволяют задавать размер в процентах от вьюпорта, что супер полезно, когда вы хотите разместить блок на весь экран, например для лайтбоксов или промостраниц, можно заменить javascript код на простой изящный CSS. Правда, тут есть свои особенности, связанные с подсчётом ширины скроллбаров и адресной строки, которая исчезает в браузерах.

Презентация доклада: https://pitercss.ru/11/pres/relative-css/

Учите дизайнеров верстать

Дизайнер Вадим Матвеев рассказал зачем он научился верстать. Оказалось, что знания верстки даёт кучу преимуществ всей команде.

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

Презентация доклада: https://pitercss.ru/11/pres/design-code.pdf

Дизайн-системы. В поисках «идеального компонента»

Роман Ганин рассказал про дизайн системы и показал, как очень легко можно превратить обычный параграф текста в интерактивный и информационный веб-документ минимальными средствами без кучи фреймворков. Посмотрите презентацию: https://pitercss.ru/11/pres/ideal-component/

Фронтендер + Дизайнер = ♥

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

Обзор книги «Женщина. Руководство для мужчин»

Моё мнение о книге «Женщина руководство для мужчин». Рассказываю про что она, и будет ли для вас полезна.

Неделю назад я прочитал книгу под интригующим названием «Женщина. Руководство для мужчин». Я бы хотел взять эту книгу и отправить себе в прошлое лет на 10 назад, тогда её польза было бы несомненно максимальной.

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

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

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

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

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

Есть и любопытные примеры из истории, например, про первый брак Альберта Эйнштейна. Его первой женой была женщина по имени Милева Марич (есть теория, согласно которой, именно она внесла основной вклад в теории своего мужа). Спустя десяток лет после их свадьбы, брак стал трещать по швам. Эйнштейн завёл тайную любовную переписку со своей двоюродной сестрой по имени Эльза Лёвенталь, (в итоге, она станет новой женой физика) и принял решение переехать в Берлин. Милеву проживание в немецкой столице не очень радовало, происходили ссоры и вскоре Альберт составил список правил для своей жены:

А. Ты обязана следить за тем, чтобы:

  1. моя одежда и бельё содержались в порядке;
  2. трижды в день мне приносили еду в кабинет;
  3. мои спальня и кабинет содержались в чистоте, а главное, чтобы никто не трогал мой письменный стол.

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

  1. пребывания рядом со мной дома;
  2. совместных прогулок и путешествий.

С. В наших отношениях ты подчиняешься следующим условиям:

  1. не ждёшь от меня никаких проявлений интимности и не высказываешь никаких жалоб и попреков;
  2. замолкаешь, если я этого требую;
  3. немедленно и без всяких возражений выходишь из моей спальни и кабинете, когда я этого требую.

D. Никаким образом не унижаешь меня в глазах детей ни словами, ни поведением.

Почему-то Милева не оценила эти правила и они разошлись. О жизни учёного есть книга «Эйнштейн. Его жизнь и Вселенная»  (Einstein: His Life and Universe) Уолтера Айзексона. Вообще, многие известные физики были довольно странными людьми, книги про них интересные.

Это книга позиционируется как научно-популярная книжка, все заключения базируются на каком-нибудь исследовании; в конце книги есть большой перечень источников. Читать источники я конечно же не стал, но думаю, там можно найти немало интересных фактов.

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

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

Всегда была интересно, как проводят такие социальные исследование, где требуется многолетние наблюдение. Как я понимаю, часто информацию собирают путём опросов, но как отделяют ложь или домысел от правде?. Невольно задумываешься, а насколько точны такие исследования? Ведь даже чтобы просто их повторить — необходимо непросто использовать такую же методологию и соразмерные группы, но и ждать много лет!

Возможно, если бы все мужчины прочитали книгу вроде этой и несколько других, не было бы постоянных скандалов в компаниях Долины. Сейчас, есть две крайности, одна, когда женщины в целом находятся в худшем положении по основным параметрам — зарплата, возможности для продвижения и домогательства начальства. С другой стороны, культ агрессивных феминисток, которые создали себе врага — мужчин. Отдельно упомяну странные ситуации,  когда до женщины случайно дотрагиваются и это является поводом для суда. Компании пытаются решить это с помощью «разнообразия» (diversity), когда стараются так составлять коллективы, чтобы были представлены мужчины, женщины, гетеро и гомосексуалы, белые, черные, жёлтые, краснокожие, молодые и старые и так далее. Проблема в том, разнообразие становится самоцелью для HR, и вместо того, чтобы собирать лучших специалистов, получается что-то вроде системы квот, где нужно обязательно иметь столько-то мужчин и столько-то женщин, получаются трагикомичные ситуации вроде этой:

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

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

Изображение книги взято с сайта издательства mann-ivanov-ferber.ru
Так как в издательстве МИФ работают люди, которым наплевать на своих клиентов, ссылки на книгу я убрал. Её довольно легко найти в гугле или можно купить английский оригинал на Амазоне, если купить несколько книг сразу, выйдет примерно столько же, сколько в России

Обучение программированию

Как научиться программировать? А как стать асом email-маркетинга? Ответ на оба вопроса лежит в система обучения, об этом я хочу поделиться в этом посте.

Звоночки

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

Несколько недель назад на работе решили запустить небольшую кампанию в Adwords, главной целью было понять стоимость привлечения клиента через этот канал. Помимо довольно запутанного процесса настройки, интерфейс оказался настолько непонятным, что я не был уверен, что рекламу вообще удалось запустить. Там конечно написано, что объявление показывается, но я ожидал, что статистика будет показываться в реальном времени или хотя бы +/- пять минут, но оказалось, что всё происходит с отставанием в несколько часов. Пообщавшись несколько дней с чудесным интерфейсом Эдвордс, я понял, что ничего не понимаю в том, как следует настраивать объявления и это стало первым звоночком.

Вторым звонком стала подача заявки в акселератор ФРИИ. Я принял решение, что нужно попробовать отправки заявку, потому что я вижу определенную ценность. Однако заявка — это не совсем точное выражение. Мне понадобилось больше недели, чтобы заполнить её! Оказалось, что на огромное количество вопросов, я не могу ответить и даже не знаю, что надо сделать, чтобы получить ответ. Например, вопрос про рынок проекта — как его посчитать?  Если начать считать, то понимаешь, что ты начинаешь считать гипотетический процент от другой гипотетический цифры. Или вопрос про экономику проекта — моё представление об этом оказалось намного более простым, чем требуется в реальном мире. Когда я понял, что я ни черта не знаю, в моей голове прозвенел второй звоночек.

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

Как изучить JavaScript

Вернёмся к Джаваcкрипту — люди часто хотят выучить какой-нибудь язык программирования, но совершенно не понимают, зачем. Просто так учить его совершенно нет смысла! Это огромное вложение времени, и не начиная процесс, сложно реально оценить масштаб. Но давайте представим, что вы прочитал мой пост про топ 10 языков языков, которые стоит изучить и сделали выбор. Вы провели исследование, посмотрели вакансии, отметили для себя компании, где хотели бы работать или придумали свой продукт и теперь перед вами возникает вопрос: «как изучить javascript?»

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

  1. Сколько часов в день вы готовы потратить на внимательное, фокусированное обучение? Если у вас есть много времени, вы можете пользоваться инструментами, которые требуют пристального внимания и усидчивости, а если нет, ваш вариант — уроки небольшого размера.
  2. Сколько времени у вас есть на обучение? Полгода, месяц, неделя? От этого зависит общее количество разных инструментов, которые вы можете попробовать, например, за три месяца можно прочитать несколько книг по теме и пройти практический курс.
  3. Сколько вы готовы потратить денег на выше обучение. Чем больше вы готовы потратить денег, тем больше времени с менторами вы сможете купить. Если у вас малый бюджет, то придется ограничиться книгами или бесплатными интернет ресурсами.

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

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

Чтобы вы не выбрали, обязательно выберите как минимум два источника, лучше разных типов, например книга + практические курсы, или видеоуроки + курс по электронной почте. Есть большая вероятность того, что знания будут пересекаться лишь на 30-50%. Если вы полагаетесь только на один вариант, вы упускаете очень много информации. Например, в книге может быть описаны кратко описаны все методы объектов, а ментор расскажет только про самые нужные, опишет разные варианты использования  на практике и все подводные камни, с которыми он встретился в ходе работы. Книжка и живой ментор в данном примере дополняют друг друга, вы получаете представление о том, какие методы в принципе существуют и при этом знаете, какие пригодятся вам больше всего.

Вы наверняка слышали про то, что наша вселенная расширятся. Считается, что наш мир появился на свет в результате большого взрыва, когда из бесконечно маленькой точки возникло пространство, время и материя. Границы космоса и спустя миллионы лет продолжают расширятся, разводя друг от друга целые галактики. Точно так же расширяются и знания в айти области — выходят новые версии языков, меняются и обновляются фреймворки и библиотеки, количество знаний постоянно увеличивается. За этим поспеть невозможно, прочитав один справочник, вы покоряете планету, в то время как космос вокруг становится всё больше и больше. Вы никогда не сможете знать всё.

Есть такой известное правило 80/20. В случае с обучением, вам нужно знать 20% вещей, которые позволяют делать 80% работы, и чтобы получить понимание, что же это за 20%, вам нужны разные инструменты обучения. Точки их пересечения — это и есть те самые 20%, которые нужно знать. Нет никакого смысла зубрить справочник по языку программирования, если большую часть этих знаний вы будете использовать раз в год.

Есть хороший метод проверки актуальности знаний — личный проект. Выберите простую и актуальную для вас идею и попробуйте её реализовать. Допустим, вы хотите сделать todo лист. У вас по ходу разработки будет возникать ряд вопросов:

  1. Как мне что-то отобразить на экране
  2. Как мне отобразить нужную структуру списка
  3. Как мне добавить или удалить пункты
  4. Как мне сделать редактирование статуса, текста и порядка пунктов
  5. Как мне сделать красиво
  6. Как мне сделать драг эн дроп
  7. Как мне сделать сохранение моего списка задач так, чтобы я на другом компьютере мог посмотреть
  8. Как мне сделать так, чтобы разные пользователи могли сохранять свои результаты
  9. Что-то ещё…

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

Смежные области знаний

Есть ещё одна существенная причина, по которой полагаться на один источник просто невозможно и почему вы не может что-то выучить на 100%. Это смежные знания. Например, проект сверху невозможно реализовать без применения ряда технологий, не являющихся Джаваскриптом:

  1. Владение редактором, понимание как вести разработку;
  2. HTML для вывода содержимого;
  3. CSS для красивой стилизации;
  4. Cookie для авторизации;
  5. База данных для хранения данных;
  6. Серверный код для связи с базой данных и авторизации;
  7. Знания для настройки и запуска сервера.

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

Приведу пример, допустим, вы хотите прокачать тело в спортзале. Если вы просто пойдёте в зал и будете что-то пытаться сделать, у вас ничего не получится, более того, вы можете получить травму. Вместо этого надо создать план обучения:

  1. Выбрать тренера, изучив его заслуги (возможно даже познакомиться с его клиентами);
  2. Подготовить дополнительные материалы, чтобы контролировать и понимать, что с вами делает тренер. Например, посмотрев планы от именитых мировых тренеров;
  3. Проанализировать в меру своих текущий возможностей смежные области. Это может быть довольно очевидные вещи, вроде формирования спортивной диеты, может быть менее очевидная, вроде двух пар спортивной обуви — простые кроссовки и обувь с плоской подошвой.

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

Давайте подведем черту и попробуем составить алгоритм наших действий:

  1. Первым делом надо понять, что и для чего мы хотим учить. Есть ли цель? Не бросим ли мы на половину пути наше обучения без должной мотивации?
  2. Дальше мы должны ограничить себя рамками, чтобы выбрать самый эффективный инструмент для нас;
  3. После этого нам следует провести исследование или поговорить с экспертами, чтобы понять, какие смежные области нам понадобится освоить;
  4. Выбрать наилучшие инструменты для обучения исходя из наших бюджетов;
  5. Приступить к обучению, обязательно совмещая теорию с практикой, лучше всего, если практикой будет является та деятельность, которой вы планируете заниматься после обучения.

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

Бабло любой ценой?

Череда конфликтов между компаниями на прошлой неделе привела к появлению ряда вопросов в моей голове: должна ли компания отказываться от действий, которые приносят прибыль, но является сомнительными с точки зрения морали или этики? Применима ли мораль для коммерческих компаний? Размышляем вместе на конкретных примерах.

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

Подписка на «Дождь»

Я уже писал ранее, как дейтинг компании легко могут обмануть своих пользователей, но так получилось, что ряд новостей на прошедшей неделе снова навели меня на размышления об этике современных компаний. Недавно я узнал, что телеканал «Дождь» прямо перед дебатами Лебедева и Навального отменил триал и помесячный план, потому что они хотят попробовать новую модель с более длительным сроком подписки. Лично я не уверен, что это на 100% правдивое объяснение, потому что насколько я помню, они отменяли триал перед дебатами Навального и Познера. На мой взгляд, телеканал «Дождь» такими действиями признаются в том, что кроме этих дебатов смотреть ни их канале просто нечего. Не секрет, что информационная подача этого канала однобока, необъективна, это такой «Первый канал» наоборот, как новостной канал «Дождь» — это полный провал. Eсли эти слова вызывают у вас негодование, то либо вы оплатили подписку и испытываете искажение в восприятии сделанного выбора, либо просто не знаете, каким должен быть хороший новостной ресурс. Если имеет место второе, то выход есть, слушайте NPR. Конечно, право канала перед единственной передачей в году, которая привлечет много людей, внезапно изменить тарифы и попробовать выжать максимум, но выглядит это странно и некрасиво.

Маркетплейсы против Поставщиков

Другая новость, которая подлила масла в огонь — Anywayanyday хочет, чтобы Яндекс.Браузер перестал показывать свою релевантную рекламу, которую Яндекс вставляет в виде баннера поверх страниц. Тут сложно понять, кто прав, кто виноват, потому что с одной стороны, на Яндекс.Маркете или на других ресурсах Яндекса можно найти более дешевые предложения (но дешевле, не всегда лучше!), с другой стороны, это похоже на злоупотребление мощностями маркетплейса, легко можно представить, что если бы пользователей брендированного браузера от Яндекса было много, некоторые компании могли бы прекратить своё существование, что в итоге могло бы привести к росту цен. Единственное, что я не понял — будет ли показываться советник на тех сайтах, которые уже интегрированы в Яндекс.Маркет? Если более низкие цены показываются, это наплевательское отношение партнёрам маркетплейса, а если не показывается — то нечестно по отношению к клиентам, которые не получают лучшую цену, если текущий магазин уже отдаёт долю прибыли Яндексу.

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

Ютюб и подписки

Недавно Ютюб изменили поведение главной страницы и теперь он определяет какие видео вы хотите смотреть, а какие нет. Если кратко, то система базируется на соотношении просмотренных видео к непросмотренным, а подробное объяснение есть вот тут:

Мы видим тренд, что все социальные сети начинают применять эту систему, при котором ваши подписки фактически обесценивается. Например, я не смотрю каждое видео канала, на который я подписан. Я определяю по названию хочу ли я смотреть или нет. Но с «алгоритмической» главной страницей, многие видео с каналов, где я мало смотрю видео просто не будут показываться! Ютюб считает, что я не в состоянии понять в большом списке моих подписок, какие видео мне интересны и формирует главную самостоятельно на основе своих алгоритмов. Чтобы посмотреть все нужные мне видео, мне теперь приходится открывать таб с подписками. Абсурдность ситуации дошла до того, что многие создатели видео стал просить не просто на них подписаться, но и включить пуш-уведомления о новых видео! На мой взгляд, такая система — большая головная боль как для создателей контента, так и для потребителей.

Facebook и лента

Фейсбук уже довольно давно стал сайтом, которым невозможно пользоваться. Сложно представить более неудобный интерфейс, чем у самой популярной социальной сети в мире. Это не шутка, попробуйте с главной страницы фейсбука в один клик перейти к списку друзей! Если вы знаете, как это сделать, напиши мне в комментарии внизу. Но конечно, главный ад — это идиотская лента. Совершенно непонятно, по какому принципу она формируется и как это настроить так, чтобы она показывала нужную информацию в хронологическом порядке. Сейчас можно открыть главную, подождать пять секунд, обновить, и содержимое ленты будет иным. Если подождать ещё пять секунд, то после обновления, содержимое снова изменится! Это какой-то абсурд, я вынужден по сто раз смотреть одни и те же сообщения в разном порядке! Почему нельзя управлять лентой простой прокруткой? Вероятно причина всё в деньгах на рекламных постах, частоте показов и позиции рекламы в ленте относительно верха страницы. Впрочем, я ещё помню проблемы с рекламой фейсбука пару лет назад — многие рекламодатели считали, что сеть из обманывает, не показывая рекламу пользователям согласно фильтрам, но это отдельная история, вот видео с объяснением проблемы:

Apple, зарядки и переходники

Зарядки от Apple известны тем, что они очень легко перегибаются, ломаются и в целом весьма быстро приходят в негодность даже при аккуратном использовании. При этом стоят они весьма много, относительно стоимости самих устройств, например адаптер почти 6500 рублей! Последняя модель макбука примечательна тем, что в нём нет привычных портов, и чтобы нормально работать, необходимо пользоваться большим количеством переходников. По счастливой случайности, есть раздел с большим количеством нужных переходников от Apple, со соответствующим ценником. Иногда мне кажется, что Apple намеренно делает это, чтобы зарабатывать на аксессуарах.

Банки и кредиты

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

Что делать?

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

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

Когда сомневаешься, стоит обратиться к мудрости предков! Один из мировых лидеров Ганди сформулировал список из семи ошибок, анти-заповедей, одна из них звучит так:

Commerce without morality

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

Какой язык программирования учить в 2017

Наступил 2017 год, а значит, следует задуматься над тем, какие языки программирования выучить в этом новом году! Я решил создать свой собственный топ-10 самых актуальных языков, базируясь исключительно на своём мнении.

Вступление

Наступил 2017 год, а значит, следует задуматься над тем, какие языки программирования выучить в этом новом году!  Я решил создать свой собственный топ-10 самых актуальных языков, базируясь исключительно на своём мнении. Должен сказать, что учить язык программирования, чтобы просто его знать — дурацкая затея и так делать не следует. Лучше сначала придумать, зачем вы его хотите выучить. Вторая оговорка — в большинстве случаев, знание языка ничего не даёт. Гораздо важнее разбираться в инструментах и фреймворках этого языка. Каждый язык вы сможете изучить на достаточном уровне за месяц, а то и меньше, а вот, чтобы разобраться во всех важных библиотеках и фреймворках, может уйти очень много времени и практики. Также в целом я опираюсь на российские реалии, где экономика и образование формирует рынок труда иногда весьма специфичным образом.

10. Scala

Скала прекрасный функциональный (и не только!) язык, отлично подходящий для создания риалтайм программ и работы с параллельными вычислениями. Среди всех функциональных языков именно этот завоевал наибольшую популярность в России. Этот язык базируется на платформе Java Virtual Machine, а значит может взаимодействовать с обычным Java кодом и использовать его пакеты. Из-за этого факта, а так же потому, что многие команды мигрируют с Джавы на Скалу, часто можно видеть в вакансиях сочетание Scala/Java. В целом, Scala не самый простой язык, но при этом парадоксально, именно новичкам, не знакомым с другими языкми осваивать его будет легко. Единственный нюанс — вакансий без знаний Джавы мало.

В первый раз я услышал об этом языке, когда узнал, что твиттер перевёл на Скалу бэкэнд с Ruby on Rails.

9. Ruby

Говорим Ruby, подразумеваем веб-фреймворк Ruby on Rails. Такова реальность и основная проблема этого языка. Простота и изящность Руби, хайп и монополизация веб-фреймворков Рельсами привела к вырождению других инструментов на руби — зачем что-то делать, если в Рельсах уже всё есть? Однако, сейчас Рельсы уже не так популярны, большинство вакансий — поддержка старых, а на запуск новых проектов. Хорошие рельсовики стоят дорого, а в 2017 Рельсы не обладают преимуществом над другими серьёзными веб-фреймворками. Тем не менее, огромное количество компаний по-прежнему поддерживают и развивают руби проекты, а новые версии языка и фреймворка радуют интересными возможностями.

Благодаря этому языку, я узнал, в что такое перегрузка операторов!

8. С++

Да, старый С++ по-прежнему востребован у большого количество работодателей. Не самый простой язык, в основном, из-за управления памяти, но пока что единственный достаточно быстрый язык для современного игростроя. Например, в движке Unreal Engine активно используется С++. Я советую изучать этот язык именно с прицелом на игры, потому что в обычных приложения гораздо привлекательнее выглядят другие языки. Правда, в России игр не делают, но есть много хороших аутсорсеров, где работает много талантов. В соседней Беларуси я бы обратил внимание на Танки http://wargaming.com/ru/careers/. В какой-то мере, этот язык — идеальное отражение баланса денежной компенсации и требований от программиста. Для любителей бросить себе вызов!

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

7. Go

Перспективный язык активно завоёвывает в России нишу  обработки запросов в условиях высокой нагрузки. Главная особенность языка — незагугливоемое название, следует использовать golang в поисковых запросах. Go умеет единовременно обрабатывать много запросов используя железо по максимуму, и активно используется в обработчиках реклам, и везде, где нужно взаимодействие в реальном времени. Также на момент написания этой заметки, я увидел две любопытные вакансии, первая по переводу OneTwoTrip на Гоу, вторая — перевод почты Mail.ru на Гоу (https://spb.hh.ru/vacancy/19110972https://spb.hh.ru/vacancy/19110972). Не берусь говорить, тренд ли это, но уверен, что на несколько лет Гоу будет часто встречаться в вакансиях. Но самое главное — специалистов по Гоу сейчас мало, и можно успеть сесть на хайп-трейн.

Многие компании готовы подождать, пока вы изучите Go, если вы конечно знаете какой-то другой подходящий им язык.

6. PHP

Звезды так сложились, что PHP сейчас переживает ренессанс. Седьмая версия языка помимо возможности использовать более строгую типизацию внезапно стало значительно быстрее. Инфраструктура языка серьёзно повзрослела — появились стандарты кодирования, нормальный менеджер пакетов, несколько серьёзных конкурирующих фреймворков и большая библиотека пакетов. Если вам что-то требуется — скорее всего, кто-то это уже написал. Доминирование язык в вебе позволяет не опасаться за внезапное снижение популярности, языком пользуются как маленькие веб-студии, так и гиганты вроде Фейсбука и ВК. PHP является отличным способом войти в веб-разработку, с перспективой роста как в знаниях, так и в деньгах.

Оказалось, что я пользуюсь PHP уже 8 лет!

5. Swift

Долгое время для Андроида надо было писать приложения на Джаве, а для iOS — на странном языке Objective C. Многие разработчики испытывали сложности с этим языком, поэтому Apple решили сделать новый язык попроще. Сейчас, на Свифте можно писать приложения для продуктов Эппл. Нативные приложения высоко ценятся среди компаний и многие мобильные разработчики имеют целые отделы, посвященные этой платформе. В изучении Свифт есть подводный камень — вполне вероятно, вам придется изучить и Objective C, чтобы получить работу. Может иметься старый код, какие-то библиотеки, написанные на Objective-C и одним Свифтом может не обойтись.

Я попробовал и мне понравилось!

4. Java

Хорошие специалисты по Джаве всегда будут в цене — слишком много кода написано, слишком много языков используют платформу JVM и очень много документации и примеров есть в интернете.  Работа есть совершенно разная — от скучных офисных приложений до приложений на Андроиде. Качество кода, с которым придется работать тоже будет очень сильно отличаться. Тем не менее, это хороший язык, который открывает хорошие возможности развития как в рамках самого языка, так в рамках языков на платформе JVM.

Язык стоит внимания, когда в нём есть свой ад.

3. Python

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

Когда я начинаю работать в консоли с анакондой, я сразу вспоминаю рэп-исполнительницу Никки Минаж.

2. C#

Как Джава, только лучше. На мой взгляд, язык развивается быстрее, чем Джава, а с новым подходом Майкрософт к опенсорсу и другим платформам весьма перспективен. Сейчас СиШарп можно использовать везде — в офисных приложениях, в веб-приложениях, в играх на движке Unity, в кроссплатформенной мобильной разработке с помощью Xamarin. Среда разработки Microsoft Visual Studio на мой вкус гораздо приятнее и быстрее, а обучающих материалов по языку и платформе в целом очень много. Сами возможности языка очень интересные и позволяют писать весьма изящный и простой код.

Представители Microsoft! Если вы пришли на этот сайт через поиск, то знайте, что я открыт вашему спонсированию этого блага! Я буду продолжать вас искренне хвалить, но буду это делать гораздо чаще за вознаграждение!

1. JavaScript

Каждый веб-разработчик обязан знать этот язык. Но сейчас, когда этот язык повзрослел и вышел за пределы браузера следует сказать, что он пригодится уже не только веб-разработчикам. React Native и NativeScript, мощные инструменты по созданию нативных мобильных приложений на Джаваскрипте выглядит очень перспективно, Electron позволяет портировать веб-приложение на десктоп, платформы NodeJs и Meteor позволяются вам владеть полным стэком для веб-разработки на едином языке. С установлением ES2015 как стандарта и возможности его использования прямо сейчас, стало реальным писать хороший масштабируемый и поддерживаемый JavaScript код высокого качества.

Моё первое знакомство с веб-разработкой случилось, когда я пытался понять, как работают снежинки на странице под новый год…

Послесловие

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

Субботний переполох

Вчера я сидел, попивал кофе и смотрел забавные видеоролики на ютюбе. Вдруг мне приходит смс от сервиса мониторинга, оказалось, что GoDesigner не отзывается…

Прекрасный субботний день

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

А они точно сохраняются?

Тут я решил проверить, как там поживают бэкапы, и к своему шоку обнаружил, что файлов не хватает. Бэкапы файлов (а это в нашем случае огромное количество картинок) не полностью соответствуют тому количеству, которое должно присутствовать. Я запустил процесс бэкапа с выводом информации и понял, что процесс зависает при копировании случайного файла! Вот такой неприятный сюрприз.

Копирование производилось с помощью программы rsync вот такой командой:

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

Решение

Я решил убрать из команды все опции, связанные с установкой владельца, прав и времени и команда выше превратилась в

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

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

Стоит дополнить чеклисты двумя пунктами:
1) Убедится, что бэкап завершается правильно и все файлы копируются;
2) Убедится, что можно восстановить файлы обратно/

Rsync hangs up/stop working

English TL;DR:

If your rsync hangs up/stop working in a middle of uploading on seemingly random file, make sure you enable verbose mode with -v option and run it again. If there are lot of «permission denied» errors, you should try run rsync without trying to preserve all access file rights, owner and time. If you are using -a options, replace it with -rlD whis is -a without options that deal with file metadata. It helped my backup, and may help yours. See above example bash script for reference. It very well maybe that you have totally another problem. You may use strace utility, which writes all activity of other command in log file. Analyzing this log file, may help figure out why process stops. Use following commands to do this:

 

Настройка сервера

Краткий гайд про то, как можно настраивать nginx, php-fpm и mysql для оптимального потребления ресурсов сервера.

В прошлом году я рассказал про антипаттерн, который приводит к плохому быстродействию сайтов и является одной из самых частых проблем быстродействия проектов. Второй такой причиной является отсутствие настройки целиком или плохие настройки программного обеспечения. Многие программы по-умолчанию настроены так, чтобы работать на очень слабых по современным меркам серверах, и не могут использовать все доступные мощности. Если максимально использовать ядра процессора и свободную оперативную память, сервер может выдерживать очень серьёзные нагрузки. Этот пост о том, как можно настроить nginx, php-fpm и mysql-совместимую базу данных, чтобы выжать максимум из железа.

Настройка Nginx

Веб-сервер Nginx обладает огромным количеством настроек и с нуля во всех разобраться довольно сложно. Я советую вам взять за основу структуру конфига с уже заданными неплохими значениями от проекта H5BP.

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

Если вы хостите php сайты, то вам необходимо добавить примерно такой кусочек, который можно назвать php.conf:

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

Для современных CMS и фреймворков, которые используют паттерн FrontController, вам нужно направлять все запросы на файл index.php. Ниже вариант конфига для WordPress и пара вариантов для фреймворков:

Вот два сайта, которые служат хорошим источником информации про nginx:
http://nginx.org/en/docs/
https://www.nginx.com/resources/wiki/

Настройка PHP-FPM

Настройка php-fpm — самая простая вещь. Задача заключается в том, чтобы посчитать, какое максимальное количество процессов запустить на вашем сервере. Математика следующая:

pm.max_children = (Общее количество свободной RAM — Резерв для системы) / Размер памяти для одного процесса.

Важный нюанс! Под общим количеством свободной памяти имеется в виду не физическая память, а то, сколько осталось памяти после того, как вы вычли память для базы, redis, memcache и прочего. Учитывайте, что на эти системы может уйти гигабайты памяти в зависимости от настроек. Тут следует подумать, что важнее — больше память для хранения и быстрого извлечения данных или же большое количество php процессов наготове.

Узнать средний размер потребления памяти для php процесса можно так:

500 мегабайт мы оставляем в резерв системе, тоже довольно гибкая цифра, её можно увеличить, если кажется, что 500 мегабайт недостаточно для нормальной работы.

Чаще всего я встречал использование динамического процесс менеджера, как наиболее гибкий вариант. Ниже я привожу пример конфигурации для сервера с 16 ГБ памяти. С учетом базы данных и прочего софта, у нас остаётся 6 ГБ свободной памяти, а команда показала, что в среднем наш процесс потребляет 90 мегабайт.

Новые настройки войду в силу после перезагрузки сервиса.

Настройка MySql

Настройки mysql-совместимой базы содержатся в файле my.cnf. Ниже опции, которые имеет смысл отредактировать:

Как узнать, сколько наш диск может операций в секунду:

В таблице результатов нас интересует среднее между read iops и write iops, значение в конфигурации для базы не должно превышать цифры в результатах.

После любых изменений, следует промониторить потребление процессоров и память, быстродействие. Иногда, приходится корректировать цифры, потому что расчётные значения могут не соответствовать реальным цифрам. Также не забывайте, что проверять следует на реальной нагрузке, цифры при спящем трафике могут разительно отличаться от полноценной дневной нагрузки. Самый просто способ — команда top, более продвинутые и удобные способы мониторинга — сервисы вроде NewRelic или Nginx Amplify

Надеюсь, это информация поможет вам при настройке вашего сервера.

Я был в шоке, когда понял, от чего возник баг

Иногда баги могут возникать на пустом месте. Я даю совет, как можно избежать ряда неожиданного и неправильно поведения в программе.

Непонятный код

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

Двойные отрицания в коде

Проснувшись утром, выпив чашку кофе, я вернулся к этому чудо-коду, расставив брейкпоинты, я стал исполнять код по шагам. И вскоре я нашёл ошибку в логике. Проблема была в следующем коде:

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

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