Русский
Русский
English
Статистика
Реклама

Блог компании всеинструменты.ру

Перевод Трехступенчатый фреймворк для решения проблем

26.06.2020 18:17:05 | Автор: admin


От автора перевода

В компании ВсеИнструменты.ру каждое бизнес-подразделение инициирует проекты, направленные на развитие компании, и те из них, для реализации которых необходимы изменения в IT-системах, приоретизируются и согласовываются совместно с IT. В ходе очередной сессии обсуждения проектов, планируемых на следующий квартал, пришло понимание простой истины: количество проектов всегда кратно больше, чем ресурсов в IT. И из этого следуют два не менее простых вывода.
  1. Мы никогда не сможем взять в работу все проекты, которые хотелось бы.
  2. Нужно научиться правильно их выбирать.



Уверен, что с аналогичными проблемами сталкивается абсолютное большинство продуктовых компаний. В качестве рабочего инструмента для решения этих проблем полезным представляется подход, описанный в статье Ленни Рачитски, product lead Airbnb.

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

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


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

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



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

  • Шаг 1. Кристаллизация проблемы
  • Шаг 2. Согласование проблемы с командой и стейкхолдерами
  • Шаг 3. Постоянный возврат к проблеме



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

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



Шаг 1. Кристаллизация проблемы


Начните с ответа на эти вопросы о своем проекте.

  • Описание: что это за проект?
  • Проблема: какую проблему он решает?
  • Почему: как мы поняли, что это реальная проблема и ее нужно решать?
  • Успех: как мы узнаем, что проблема решена?
  • Аудитория: для кого мы делаем это?
  • Что это: как будет выглядеть реализация в продукте?

Описание: что это за проект?


Это краткое описание идеи. Люди, читающие его, смогут быстро понять суть. Будьте кратки.

Проблема: какую проблему он решает?


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

Назовем ключевые характеристики правильной постановки проблемы.

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

Хорошие примеры постановки проблемы

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

Плохие примеры постановки проблемы

  • Количество пользователей растет медленно. [Что не так: проблема слишком широка. О стратегии приближения большой картины можно прочитать здесь и здесь. К тому же не учитываются потребности пользователя.]
  • Создать программу лояльности. [Что не так: это решение. Какую проблему мы хотим решить?]
  • Пользователи не доходят до конца регистрации. [Что не так: недостаточная фокусировка, упущена предполагаемая причина. Нужно опуститься на один уровень ниже.]

Почему: как мы поняли, что это реальная проблема и ее нужно решать?


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

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

Несколько советов для этого шага.

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

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

Успех: как мы узнаем, что проблема решена?


Вы достигли того, что планировали достичь? Как вы узнаете? Ответьте на этот вопрос и запишите ответ.



Этот критерий становится невероятно важен на протяжении всего проекта, так как он помогает принимать решения и расставлять приоритеты. Фича X увеличивает шансы достичь поставленной цели? Если нет, не делаем ее.

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

Несколько советов для определения критериев успеха.

  • Постарайтесь получить конкретное число, например: 10% прирост показателя X; 50% уменьшение показателя Y.
  • Цель должна быть достижима, но амбициозна. Достижение какой цели приведет вашу команду и руководителей в восторг?
  • Если вы не смогли придумать метрику для своей цели (думать нужно долго и напряженно), опишите, как будет выглядеть мир в случае успеха проекта. Сделайте это критерием успеха.

Аудитория: для кого мы делаем это?


Тут все довольно очевидно. Мы редко делаем что-то сразу для всех. Это для новых или вернувшихся пользователей? Это для случайных или постоянных пользователей? Это для пользователей сайта или мобильного приложения? И тому подобное.

Что: как будет выглядеть реализация в продукте?


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

Шаг 2. Согласование проблемы с командой и стейкхолдерами


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



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

Я обычно подхожу к этому шагу так.

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

Шаг 3. Постоянный возврат к проблеме


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

image

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

Я помню, как несколько лет назад работал над проектом по созданию админки для хозяев жилья в Airbnb. Изначально мы решали проблему уменьшения времени ответа от хозяина, а именно сокращения времени ответа хозяина на сообщение гостя. Наша гипотеза заключалась в следующем: хозяева отвечали бы быстрее, если бы непрочитанные сообщения им были более заметны. Вдобавок мы напоминали бы им о том, что скорость ответа на сообщения влияет на их поисковый рейтинг. В итоге мы оказались правы. Но на протяжении проекта с ростом его масштаба и сложности я постоянно находил себя напоминающим команде, какую проблему мы должны решить. (Профессиональный совет: админки классическая проблема буррито в фольге.) От размывания фокуса проекта ничто не помогает лучше, чем постоянное возвращение к первоначальной постановке задачи и критериям успеха. Вы можете решить множество проблем множеством способов, но можете также создать прекрасный продукт, который не решает никаких проблем.

Избежать этой ловушки помогут полезные привычки.

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

И в заключение


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

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

Марк Менсон. Тонкое искусство пофигизма

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

Очень рекомендую прочитать следующие 5 книг.



  1. Deep Work (Кэл Ньюпорт. В работу с головой. Паттерны успеха от IT-специалиста)
  2. The Subtle Art of Not Giving a F*ck (Марк Менсон. Тонкое искусство пофигизма)
  3. Good Strategy, Bad Strategy (Ричард Румельт. Хорошая стратегия, плохая стратегия. В чем отличие и почему это важно)
  4. Measure What Matters (Джон Дорр: Измеряйте самое важное. Как Google, Intel и другие компании добиваются роста с помощью OKR)
  5. Lean Analytics (На момент написания статьи не переведена на русский)

От автора перевода

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




Взял фреймворк себе на вооружение. Для удобства использования разработал форму для кристаллизации проблем.

Выражаю благодарность нашему журналисту Анисимовой Татьяне и арт-директору Забегалову Алексею за помощь в редактировании и оформлении статьи.
Подробнее..

Переход на микросервисную архитектуру

19.09.2020 00:21:00 | Автор: admin


Вместо введения


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

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

Основное внимание в статье будет уделено тем глобальным проблемам, с которыми сталкивалась наша команда на протяжении всего проекта.

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

С чего все начиналось


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

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



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

В качестве стратегии перехода на микросервисы было выбрано сразу два пути:

  1. выносим в микросервисы то, что (как мы думали) вынести проще всего;
  2. выносим в микросервисы то, чей перевод на микросервисы решает больше всего проблем как для бизнеса, так и для ИТ.

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

Команда находилась в начале пути. Это было счастливое время: будущее виделось светлым и безоблачным, и нам казалось, что у нас есть план.

Первые трудности


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



Лучше всего архитектуру наших отдельных систем иллюстрирует вот эта картинка, взятая из статьи Стефана Тилкова Dont start with a monolith. Как мы видим, функциональные блоки в монолите крайне сильно связаны друг с другом. Это является серьезным препятствием для процесса выноса отдельного функционала в микросервис.

Для справки: возраст наших монолитов около 13 лет, а размер кодовой базы среднего монолита примерно 1,2 млн строк.

Другими словами, команда раз за разом сталкивалась со следующими проблемами:

  • крайне трудоемкий процесс аналитики существующего функционала;
  • часто недостаточное понимание того, что именно мы выносим в микросервис;
  • сложности интеграции монолита с новым микросервисом.

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

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

Первые успехи и новые трудности




Несмотря на первые трудности команда получила и новый опыт, и первые результаты. Но возникли некоторые неучтенные риски, мешающие запуску микросервисов.

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

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

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

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

Что ж

Карантин, трудовые подвиги и наконец успех


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

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

Изменения коснулись и планов по микросервисам. Из-за перераспределения ресурсов интеграция микросервисов с монолитами, а следовательно, и релиз самих микросервисов снова откладывались.

Здесь, наконец, нужно более подробно остановиться на том, что происходило в команде и как команда себя чувствовала.



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


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

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

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

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

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

Как итог


Вместо заключения хотелось бы остановиться на выводах, которые мы для себя сделали

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

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

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

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

Golang-дайджест 1 (14 31 января 2021)

11.02.2021 10:09:47 | Автор: admin

Свежая подборка новостей и материалов со ссылками

Интересное в этом выпуске

  • Поддержка ARM

  • Движок Diablo 2

  • Расшифровка паролей из браузеров

  • Сборщик js аналог webpack

Приятного чтения!

Новости события

  • Исправлена проблема, связанная с поиском PATH в ненадежных каталогах https://blog.golang.org/path-security

  • Выпущен релиз-кандидат 1 Go 1.16!

    • ARM в Go 1.16 добавлена поддержка 64-битной ARM-архитектуры на MacOS М1

    • go get-insecure флаг является устаревшим и будет удален в версии будущего

    • go get example.com/mod@patch теперь хочет, чтобы какая-то версия example.com/mod уже требовалась для основного модуля (тем не менее go get -u=patch продолжает исправлять даже недавно добавленные зависимости)

    • GOVCS новая переменная среды, ограничивающая инструменты управления версиями, которые go-команда может использовать для загрузки исходного кода

    • Добавлен пакет FS определяет основные интерфейсы файловой системы. Файловая система может быть предоставлена операционной системой хоста и другими пакетами

Предложения по улучшению языка

https://github.com/golang/go/issues/44022 Добавить оператор соответствия

func preprocess(example Example) *string    return match (example.Value, example.Name) {        0, "C" => {             return "Zero"        }        -100 .. 0, "C" => {           return "Ice"       }        0 .. 100, "C" =>           return "Hell";       }       _, _ => {            return "Unknown state";       }    }

https://github.com/golang/go/issues/44006 - syscall/js: Удалить тип Wrapper, чтобы избежать чрезмерного выделенияпамятии улучшить производительность

type BadWrapper struct {    Value js.Value}var escapeRoute *BadWrapper// Implements js.Wrapperfunc (this *BadWrapper) JSValue() js.Value {    escapeRoute = this // escape to heap    return this.Value}

https://github.com/golang/go/issues/43823 Поддержка времени с десятичной запятой для дробных секунд, пример: 02/12/2019 15:45:48,746

https://github.com/golang/go/issues/43774 Потоковый интерфейс AEAD

https://github.com/golang/go/issues/43659 Объявление параметров типа иразделениеэкземпляров

https://github.com/golang/go/issues/43557 Значения функций как итераторы

Материалы для обучения

Уроки для изучения GolangВведение в программирование на Go

Go в примерах

Маленькая книга о Go

50 оттенков Go: ловушки, подводные камни и распространенные ошибки новичков

Алан А.А. Донован, Брайан У. Керниган Язык программирования Go

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

Статьи

Инструменты

  • Приложение для просмотра, организации и обмена вашей коллекцией фотографий https://github.com/photoprism/photoprism

  • Игровой движок ARPG в том же духе, что и игры 2000-х годов и поддерживает игру в Diablo 2 https://github.com/OpenDiablo2/OpenDiablo2

  • Сервер Matrix второго поколения, написанный на Go.Призван предоставитьэффективную,надежнуюимасштабируемуюальтернативу Synapse https://github.com/matrix-org/dendrite

  • Сборщик JS в 100 раз быстрее webpackhttps://github.com/evanw/esbuild

  • Модульная, мощная, высокопроизводительная среда разработки приложений корпоративного класса от Golanghttps://github.com/gogf/gf

  • Официальная реализация протокола Ethereum на Golanghttps://github.com/ethereum/go-ethereum

  • Инструмент с открытым исходным кодом, который может помочь вам расшифровать данные из браузера: пароли, закладки, файлы cookie, историю https://github.com/moonD4rk/HackBrowserData

  • Slack API библиотека rest, websocket https://github.com/slack-go/slack

  • Веб-фаззинг, предназначенный для обнаружения элементов и контента в веб-приложениях или веб-серверах https://github.com/ffuf/ffuf

  • Инструменты для сканирования международных телефонных номеров с использованием только бесплатных ресурсов.Это позволяет сначала собрать стандартную информацию, такую как страна, область, оператор и тип линии, на любом международном телефонном номере.Затем поискать следы в поисковых системах, чтобы попытаться найти провайдера VoIP или определить владельца https://github.com/sundowndev/PhoneInfoga

Видео

Небольшая серия Пишем веб-приложение на Go,автор Сергей Гаврук

Серия из 26 видео на тему Погружение в Google Go,автор Роман Левищенко

Серия из 17 уроков на тему Уроки для начинающих, автор Лёша Маршал

Подкасты

Go Time: Англоязычные подкасты о GO

Live Shows: Предложения Go Language, о которых вы никогда не слышали (часть вторая)

GolangShow: Русскоязычный подкаст о Go

Сообщества

Форум в группах Google

Группа Golang RU в Telegram

Вопросы по языку на русскоязычном StackOverflow

Информация о митапах

Подробнее..

Golang-дайджест 2(1 28 февраля 2021)

01.03.2021 08:19:52 | Автор: admin

Свежая подборка новостей и материалов

Интересное в этом выпуске

  • Веб-браузер

  • Мониторинг почтовых служб

  • Сканер уязвимостей

  • Зашифрованная файловая система

Приятного чтения!

Материалы для обучения

Новости, события

  • Модули включены по умолчанию в Go 1.16 теперь go-команда по умолчанию создает пакеты в режиме с поддержкой модулей

  • Профилирование блоков в Go контролирует долю событий блокировки горутин

  • Generic предложение добавить дженерики принято

  • Embed новый пакет embed обеспечивает доступ к файлам, встроенным в программу во время компиляции, с помощью новой директивы //go:embed

  • Unicode пакет unicode и связанная с ним поддержка во всей системе были обновлены с Unicode 12.0.0 до Unicode 13.0.0, что добавляет 5930 новых символов, включая 4 новых скрипта и 55 новых эмодзи

Предложения по улучшению языка

  • https://github.com/golang/go/issues/44221 - encoding/csv: Добавить возможность получения номера строки записи

    Предложение предлагает новый метод:

    func (r *Reader) Line() int
    
  • https://github.com/golang/go/issues/44253 Предложение добавить в дженерики тип и размер массива

    type Array8[T any] interface {type [8]T}type ArraysOfSomeSizes[T any] interface {type [2]T, [4]T, [8]T, [16]T}
    

    предложение предлагает следующий синтаксис для выражения этой идеи:

    type Array[T any] interface {type []T}
    
  • https://github.com/golang/go/issues/36460 - cmd/go: Отложенная загрузка модуля

  • https://github.com/golang/go/issues/44551 Предложение добавить поддержку тестирования фаззинга

    func FuzzMarshalFoo(f *testing.F) {    // Seed the initial corpus f.Add("cat", big.NewInt(1341)) f.Add("!mouse", big.NewInt(0)) // Run the fuzz test   f.Fuzz(func(t *testing.T, a string, num *big.Int) {     t.Parallel() // seed corpus tests can run in parallel   if num.Sign() <= 0 {     t.Skip() // only test positive numbers  }  val, err := MarshalFoo(a, num)  if err != nil {      t.Skip()    }  if val == nil {      t.Fatal("MarshalFoo: val == nil, err == nil")   }  a2, num2, err := UnmarshalFoo(val)  if err != nil {      t.Fatalf("failed to unmarshal valid Foo: %v", err)  }  if a2 == nil || num2 == nil {    t.Error("UnmarshalFoo: a==nil, num==nil, err==nil")     }  if a2 != a || !num2.Equal(num) {     t.Error("UnmarshalFoo does not match the provided input")   }  })}
    
  • https://github.com/golang/go/issues/44412 Предложение добавить Time.UnixMilli и Time.UnixMicro

    // UnixMilli returns the local Time corresponding to the given Unix time,// msec milliseconds since January 1, 1970 UTC.func UnixMilli(msec int64) Time {if msec%1e3 < 0 {return unixTime(msec/1e3-1, int32((msec%1e3)1e6)+1e9)}return unixTime(msec/1e3, int32((msec%1e3)1e6))}// UnixMicro returns the local Time corresponding to the given Unix time,// usec milliseconds since January 1, 1970 UTC.func UnixMicro(usec int64) Time {if usec%1e6 < 0 {return unixTime(usec/1e6-1, int32((usec%1e6)1e3)+1e9)}return unixTime(usec/1e6, int32((usec%1e6)1e3))}
    

Статьи

Инструменты

  • Пример реализации чистой архитектуры в проектах Go (Golang)

  • Инструмент непрерывной доставки GitOps для Kubernetes Argo CD

  • Сканирование для различных протоколов TCP, DNS, HTTP, File на основе шаблонов Nuclei сканер уязвимостей

  • Плагин для Terraform, который позволяет управлять полным жизненным циклом ресурсов AWS. Этот провайдер поддерживается внутри группы HashiCorp AWS Provider Terraform

  • Высокопроизводительная библиотека по работе с json Замена "encoding / json"

  • Инструмент обнаружения поддоменов. Обнаруживает поддомены для веб-сайтов с помощью пассивных онлайн-источников. Он имеет простую модульную архитектуру и оптимизирован по скорости Subfinder

  • Кросс-платформенное прокси сервер/клиент с шифрованием Brook

  • Настраиваемый механизм подсказок для любой оболочки, который может изменять строку подсказки с помощью функции или переменной Oh-my-posh

  • Горизонтально масштабируемая и распределенная база данных GraphQL с бэкендом графа Dgraph

  • Инструмент для изучения шахматных дебютов Chess-explorer-go

  • Небольшой и простой компилятор Go Babygo

  • Cli инструмент для выполнения sql запросов: поддержка sql, csv, ltsv, json, tbln Trdsql

  • Инструмент для работы с типом файлов MP4 Go-mp4

  • Платформа для создания приложений блокчейна на Golang Cosmos-SDK

  • Мониторинг почтовых служб, получение писем, проверка аккаунтов Сheck-mail

  • Высокопроизводительный, неблокирующий tcp фреймворк Nbio

  • Быстрый и гибкий DNS-сервер CoreDns

  • Веб-браузер умеет управлять cookie, историей, созданием вкладок, подменой юзер-агента Surf

  • Зашифрованная файловая система GoCryptfs

  • Консольное приложение для отслеживания и мониторинга статистики криптовалют в режиме реального времени Cointop

  • Интерфейс командной строки git Bit

  • Сервис собирает забавные сообщения о коммитах из Github Commits.lol

  • Структура файловой системы, обеспечивающая простой, унифицированный и универсальный API Afero

  • Реализация FrodoKEM, практическая инкапсуляция ключей с квантовой безопасностью FrodoKEM

  • Симулятор движения мыши Busy

Видео

Подкасты

Сообщества

Подробнее..

Golang-дайджест 3 (1 31 марта 2021)

01.04.2021 08:15:50 | Автор: admin

Свежая подборка новостей и материалов

Интересное в этом выпуске

  • Монитор горутин в терминале

  • Пикселизатор изображений

  • Проверка безопасности Go-кода

  • Dropbox load balancing

Приятного чтения!

Новости, события

  • Выпущен релиз 1.16.2

    • Archive/zip CVE-2021-27919 Reader.OpenAPI при работе с ZIP issues

    • encoding/xml CVE-2021-27918 бесконечный цикл при использовании xml.NewTokenDecoder issues

    • syscall & x/sys/windows переполнение буфера issues

    • time/tzdata использует неправильную зону issues

    • Посмотреть все фиксы можно тут

Предложения по улучшению языка

Материалы для обучения

Статьи

Инструменты

  • Framework для тестирования GoMock

  • Клиент redis Redigo

  • IPFS (межпланетная файловая система) это одноранговый протокол и сеть для организации распределенной файловой системы IPFS

  • Быстрый и точный счетчик кода scc

  • Квери билдер для Монги greenleaf

  • Монитор горутин в терминале roumon

  • Сравнение различных объектов. Используется для тестов go-testdeep

  • Инструмент для смены цвета текста в терминале gchalk

  • Автономный инструмент миграции для PostgreSQL tern

  • Dropbox свой L4 лоад балансер kglb

  • Пакет Go, который обеспечивает низкоуровневый доступ к Linux rtnetlink API rtnetlink-xdp

  • Инструмент проверки безопасности кода Go gosec

  • Облачный туннель inlets

  • Инструмент генерирует типобезопасный код из SQL sqlc

  • Инструменты для работы с данными в стиле мультиинструмента (например, xsv для CSV или jq для JSON) sq.io

  • Встраиваемая база данных, совместимая с MongoDB, и набор инструментов для Go LungoDB

  • Высокопроизводительный сервер приложений roadrunner.dev

  • Реализация размытия по Гауссу с линейным временем song2

  • Эффективный пикселизатор изображений pixelizer

  • Компилятор Go, предназначенный для использования в небольших местах, таких как микроконтроллеры, WebAssembly (Wasm) и инструменты командной строки tinygo

  • Сервер аутентификации и авторизации SSO authelia

  • Поиск в вашей файловой системе с помощью SQL-запросов fsql

  • Генератор прокси gRPC в JSON в соответствии со спецификацией HTTP grpc-gateway

  • Библиотека, предоставляющая набор функций, которые позволяют записывать и читать файлы XLSX / XLSM / XLTM excelize

  • Клиент GitHub API v3 go-github

  • Microservice Framework micro v3.2.0

Видео

Подкасты

Сообщества

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru