• Настройка инструментов стандартной библиотеки Golang для production

      Привет, Хабр, меня зовут Богданов Илья, я работаю ведущим инженером в команде веб-разработки. Сегодня я вам расскажу, как настроить стандартную библиотеку Golang так, чтобы избежать неожиданных ошибок в production.

      Моя статья ориентирована в основном на начинающих разработчиков, но ветераны Go тоже, вероятно, смогут узнать что-то новое. Коротко о чем будет статья:

      о том, как не ловить ошибки соединения с базой данных на production;
      http.Client и что не так с клиентом по умолчанию;
      http.Server и его подводные камни;
      и, наконец, рассмотрим пару занятных проблем, не связанных напрямую с настройкой стандартной библиотеки.

      Читать далее
    • Чиним проблемы нагрузок в Go с помощью настройки пула HTTP-соединений

        - Ребята, кажется, вы таймаутите. Вот трейс, на котором видно, что мы не дождались от вас ответа за 2 секунды. 

        - Ничего подобного, у нас все норм — мы за 200 миллисекунд отвечаем в 99% запросов. А вот вы по какой-то причине часто преждевременно обрываете соединение. 

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

        Так что же там было?
      • Квантовый процессор Google осознает себя? Почему квантмех и свобода воли (не) связаны, и почему это неочевидно

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

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

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

          Читать далее
        • Как писать кодогенераторы в Go

            Однообразный код писать неинтересно, нудно, но приходится. Испокон веков изворотливые программисты ищут Святой Грааль формализма, позволяющего переложить рутинные задачи на машину, писать только раз и переиспользовать код. Так появились структурное программирование, потом объектно-ориентированное, полиморфизм с параметризованными типами, кодогенерация на основе формальных грамматик, препроцессоры макроязыка и прочее…​ Под катом рассмотрим, как обстоят дела именно в Go.

            Читать далее
          • Дженерики в языке Go

              func Map[F, T any](s []F, f func(F) T) []T {
                  r := make([]T, len(s))
                  for i, v := range s {
                      r[i] = f(v)
                  }
                  return r
              }

              Как вы уже наверняка знаете, proposal по дженерикам в Golang принят (официально это называется type parameters) и будет имплементирован в go 1.18. Бета будет доступна уже в конце этого года. А это значит, что пора разобраться, на чём в итоге остановились разработчики языка — ведь черновик type parameters постоянно менялся в течение последних лет.


              Технология новая, на практике толком никто не использовал. Поэтому если увидите какую-то неточность в статье, не стесняйтесь указать это в комментариях.


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


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

              Читать дальше →
            • Детерминизм vs. квантовая механика, или можно ли предсказывать будущее

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

              Читать далее
            • Энтропия? Это просто!

                Этот пост является вольным переводом ответа, который Mark Eichenlaub дал на вопрос What's an intuitive way to understand entropy?, заданный на сайте Quora

                Энтропия. Пожалуй, это одно из самых сложных для понимания понятий, с которым вы можете встретиться в курсе физики, по крайней мере если говорить о физике классической. Мало кто из выпускников физических факультетов может объяснить, что это такое. Большинство проблем с пониманием энтропии, однако, можно снять, если понять одну вещь. Энтропия качественно отличается от других термодинамических величин: таких как давление, объём или внутренняя энергия, потому что является свойством не системы, а того, как мы эту систему рассматриваем. К сожалению в курсе термодинамики её обычно рассматривают наравне с другими термодинамическими функциями, что усугубляет непонимание.
                энтропия
                Так что же такое энтропия?
              • Честное онлайн-голосование: миф или реальность?

                  Привет, Хабр! Меня зовут Иван, я разрабатываю сервис онлайн-голосований WE.Vote на основе блокчейн-платформы Waves Enterprise. Сама идея голосований в онлайне уже давным-давно реализована разными компаниями, но в любых кейсах «повышенной ответственности» все равно прибегают к старой доброй бумаге. Давайте посмотрим, как электронное голосование сможет посостязаться с ней в максимально строгих условиях.

                  Читать далее
                • [Личный опыт] «Пхукет — не деревня»: зачем столичный разработчик переехал в Таиланд

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


                    Мы поговорили с Павлом, разработчиком, который устроился в Авиасейлс и переехал туда вместе с женой 4 года назад. Сейчас они уже обжились, ждут ребенка и планируют воспитывать его на Пхукете. Павел расскажет, как тут живется, как относятся к детям и какие есть перспективы для профессионального развития IT-инженера.




                    Читать дальше →
                  • Разукрашиваем вывод в консоли: теория и практика


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

                      Читать дальше →
                    • Владельца Bitcoin Fog выдал анализ блокчейна от 2011 года



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

                        Bitcoin Fog — один из ведущих миксеров. Он работал десять лет. И всё-таки в конце концов предположительного админа сервиса идентифицировали и задержали.

                        Это история показывает, насколько сложно сохранить анонимность в онлайне. И способ деанонимизации в данном случае особенно показателен.
                        Читать дальше →
                      • А что если гравитация и ускоренное расширение Вселенной — это следствие энтропии?

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

                          Читать далее
                        • Безусловный базовый доход ближе, чем кажется


                            Гарантированный базовый доход, он же ББД (безусловный базовый доход) или UBI (Universal Basic Income) — горячая тема, набирающая популярность не только на Хабре и в гиковских кругах, но и по всему миру среди экономистов, руководителей городов и даже кандидатов в президенты США.

                            В 2021 тема ББД актуальна как никогда: эмпирические данные в пользу гарантированного базового дохода растут по экспоненте, новые эксперименты запускаются буквально на глазах: в апреле о запуске собственных пилотных программ объявили Лос-Анджелес и Сан-Франциско, следующий вероятный кандидат на очереди — Нью-Йорк. О том, что говорят ББД на практике забытый канадский эксперимент 1970-х, калифорнийский эксперимент 2020-х, политическая программа лидирующего кандидата на выборах мэра Нью-Йорка 2021 года и современная пенсионная система, существующая с 1889 года — в этой статье.
                            Читать дальше →
                          • Не лезьте в геймдев, он вас сожрёт (но вам понравится)

                              Не зря говорят, что геймдев безжалостен (и особенно к новичкам).

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

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

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

                              Читать далее
                            • Генерация кода в Go

                              • Translation
                              Перевод статьи Роба Пайка из официального блога Go о автоматической кодогенерации с помощью go generate. Статья немного устарела (была написана перед выходом Go 1.4, в котором и появился go generate), но хорошо объясняет суть работы go generate.
                              Читать дальше →
                            • Кодогенерация в Go на примере создания клиента к БД

                              В данной статье хотелось бы рассмотреть вопросы кодогенерации в Golang. Заметил, что часто в комментариях к статьям по Go упоминают кодогенерацию и рефлексию, что вызывает бурные споры. При этом на хабре статей по кодогенерации мало, хотя она применяется довольно много где в проектах на Go. В статье попытаюсь рассказать, что из себя представляет кодогенерация, описать сферы применения с примерами кода. Также не обойду стороной и рефлексию.
                              Читать дальше →
                              • +10
                              • 5.7k
                              • 1
                            • HTTPWTF. Необычное в обычном протоколе

                              • Translation

                              Прим. перев.: эту статью написал автор Open Source-утилиты HTTP Toolkit, предназначенной для исследования и модификации HTTP(S)-трафика для нужд отладки и тестирования. В материале собраны примечательные особенности стандарта HTTP, которые долгие годы живут вместе с нами, однако не каждый догадывается об их существовании.

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

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

                              Читать далее
                              • +111
                              • 15.7k
                              • 2
                            • Сборники рецептов jq

                              • Tutorial

                              Мы все иногда сталкиваемся с необходимостью вытащить нужную информацию из JSON или YAML файлов. Многие уже познакомились с мощью утилиты jq. Судя по публикациям на Хабре, напр. https://habr.com/ru/post/525808/, и вопросам в qna, тема до сих пор актуальна.

                              Мне в очередной раз пришлось вспомнить специфический DSL jq чтобы восстановить накопленные за долгое время закладки в Хроме, не сохранённые при апгрейде. Точнее, файл Bookmarks в формате .json сохранился, но ни в какую не хотел импортироваться в новый Хром. Хочу поделиться рецептом решения этой проблемы, заодно упорядочить собранные в разных местах миниатюрные скрипты для решения похожих проблем.

                              JQ в действительности полноценный язык программирования со всеми атрибутами - переменными, типами данных, арифметикой, циклами и условными переходами, массой встроенных функций и возможностью добавления новых. Удивительно, всё это в программке размером 30KB, страницей "man jq" такого же размера и библиотекой libjq размером 300KB.

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

                              ... $ jq '[paths|join(".")]' Bookmarks|head -n 16 [ "checksum", "roots", "roots.bookmark_bar", "roots.bookmark_bar.children", "roots.bookmark_bar.children.0", "roots.bookmark_bar.children.0.children", "roots.bookmark_bar.children.0.children.0", "roots.bookmark_bar.children.0.children.0.children", "roots.bookmark_bar.children.0.children.0.children.0", "roots.bookmark_bar.children.0.children.0.children.0.date_added", "roots.bookmark_bar.children.0.children.0.children.0.guid", "roots.bookmark_bar.children.0.children.0.children.0.id", "roots.bookmark_bar.children.0.children.0.children.0.name", "roots.bookmark_bar.children.0.children.0.children.0.type", "roots.bookmark_bar.children.0.children.0.children.0.url",

                              Читать далее
                            • Дата-центр возле Амстердама называют «выгребной ямой интернета», но он продолжает работу


                                Дата-центр Ecatel в Северной Голландии, источник

                                Это история защищённого хостинга Ecatel с дата-центром в городке Вормер (13 км в северо-западу от Амстердама). Хостер специализируется на конфиденциальности, то есть принципиально не проверяет благонадёжность клиентов, не реагирует на запросы американских правообладателей по закону DMCA и не сотрудничает с правоохранителями. Его называют «выгребной ямой» интернета.

                                Ecatel много лет находится под следствием в связи с DDoS-атаками, распространением вредоносных программ, спама и детской порнографии (CP). Но голландским властям ничего не удаётся сделать, потому что по голландским законам хостер рассматривается просто как поставщик технического сервиса (например, как провайдер электричества), поэтому не обязан проверять своих клиентов.
                                Читать дальше →
                              • [Личный опыт] Удалёнка и жизнь на Пхукете: вечное лето и европейский сервис по азиатским ценам

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




                                  Источник
                                  Читать дальше →