Рубрика «Go» - 38

Внимание: Код представленный в статье немного отличается от оригинальных EncodeVarint и DecodeVarint и даёт другие результаты. Будьте внимательны.

В multiformats/unsigned-varint обсуждении правильной записи числа в varint было замечено что многие числа в оригинальном varint могут быть записаны в последовательности разной длинны. Это даст разные блоки и их хеши при идентичных значениях кодированных в протобуфер.

Оригинальный varint

Оригинальный varint просто делит число на кусочки по 7 бит. И записывает их в порядке от младшего к старшему добавляя к каждому кусочку старший 8ой бит. Значение этого бита зависит от того последний это кусочек (0) или нет (1).

Таким образом например значение 0 мы можем записать во многих вариантах:

  1. 0000 0000 (0x00) varint = 0
  2. 1000 0000 0000 0000 (0x8000) varint = 0
  3. 1000 0000 1000 0000 0000 0000 (0x808000) varint = 0
    и так далее.

Compact varint

Я подумал что можно начинать значения контейнера большего размера от максимального значения предыдущего контейнера + 1. Ведь если мы используем контейнер такого размера то число должно быть больше максимума предыдущего контейнера.

Читать полностью »

От автора. Уже пятый декабрь подряд в блоге GopherAcademy самые разные представители Go-сообщества делятся своим опытом в рамках специальной предрождественской серии постов. В этом году я тоже решила предложить свою статью, написанную по мотивам первой части нашего с Игорем Должиковым мастер-класса по микросервисам. На Хабре небольшую часть этого руководства мы уже рассматривали ранее.

Если вы когда-либо пробовали Go, вы знаете, что писать сервисы на Go очень просто. Нам нужно буквально несколько строк кода для того, чтобы можно было запустить http-сервис. Но что нужно добавить, если мы хотим приготовить такое приложение в продакшн? Давайте рассмотрим это на примере сервиса, который готов к запуску в Kubernetes.

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

Читать полностью »

На протяжении последних месяцев я использую Go для имплементаций Proof of Concept (прим.пер.: код для проверки работоспособности идеи) в свободное время. Отчасти это было для изучения самого языка программирования. Программы сами по себе очень просты и не являются целью статьи, но сам опыт использования Go заслуживает того, чтобы сказать о нем пару слов. Go обещает быть (прим.пер.: статья написана в 2015) массовым языком для серьезного масштабируемого кода. Язык создан в Google, в котором активно им пользуются. Подведя черту, я искренне считаю, что дизайн языка Go плох для умных программистов.

Читать полностью »

В Go нет синтаксиса для определения необязательных аргументов в функциях, поэтому приходится использовать обходные пути. Я знаю 2:

  1. Передавать структуру, содержащую все необязательные аргументы в полях:
    funcStructOpts(Opts{p1: 1, p2: 2, p8: 8, p9: 9, p10: 10})

  2. Способ предложенный Робом Пайком с использованием функциональных аргументов:
    funcWithOpts(WithP1(1), WithP2(2), WithP8(8), WithP9(9), WithP10(10))

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

Отладка злого бага в рантайме Go - 1

Я большой поклонник Prometheus и Grafana. Поработав SRE в Google, я научился ценить хороший мониторинг и за прошедший год предпочитал пользоваться комбинацией этих инструментов. Я использую их для мониторинга своих личных серверов (black-box и white-box мониторинг), внешних и внутренних событий Euskal Encounter, для мониторинга клиентских проектов и много другого. Prometheus позволяет очень просто писать кастомные модули экспорта для мониторинга моих собственных данных, к тому же вполне можно найти подходящий модуль прямо из коробки. Например, для создания симпатичной панели имеющихся метрик Encounter-событий мы используем sql_exporter.

Читать полностью »

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

19 октября 2017 года команда Deepmind опубликовала в Nature статью, краткая суть которой сводится к тому, что их новая модель AlphaGo Zero не только разгромно обыгрывает прошлые версии сети, но ещё и не требует никакого человеческого участия в процессе тренировки. Естественно, это заявление произвело в AI-коммьюнити эффект разорвавшейся бомбы, и всем тут же стало интересно, за счёт чего удалось добиться такого успеха.

По мотивам материалов, находящихся в открытом доступе, Семён sim0nsays записал отличный стрим:

А для тех, кому проще два раза прочитать, чем один раз увидеть, я сейчас попробую объяснить всё это буквами.

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

Ну, поехали.
Читать полностью »

Пирожки в Go - 1

В продолжение эпопеи с дистрибутивно-семантическими пирожками (и в погоне за модными тенденциями) решил переписать веб-сервис с лапидарного Питона на прогрессивный Go. Заодно был вынужден перенести и всю «интеллектуальную» часть (благо, не бином Ньютона). Сделать это оказалось куда проще и приятней, чем предполагал в начале. Впрочем, на медово-синтаксическом празднике жизни не обошлось без ложки дёгтя — самая быстрая гошная «числодробилка», какую смог найти (mat из gonum) таки уступила по скорости питоновской связке numba + numpy.
Читать полностью »

image
ftest — библиотека, упрощающая тестирование. Имеет плавучий дизайн, что уменьшает количество строк кода. Использует t.Helper() чтобы во время сбоя теста вместо кучи сообщений выводить лишь одну актуальную строку, где тест не прошел
ftest/fclient — Помощник при тестировании http приложений, основанный на ftest.
Читать полностью »

Отрасль разработки программного обеспечения развивается молниеносными темпами. На рынок постоянно выходят новые технологии, инструменты и “маст-хэв” продукты, заставляя программистов ежегодно обновлять свой арсенал. Каким бы эффективным ни был язык программирования или фреймворк, рано или поздно возникает что-то еще более быстрое и мощное. Создавая продукты для разработчиков, мы в JetBrains стараемся угнаться за этим разнообразием, не упуская из виду главное — насколько инструмент разработки удобен в использовании.

Прошлой зимой мы объявили, что работаем над новой средой программирования на основе платформы IntelliJ — для языка Go. До недавнего времени эта IDE была известна под кодовым названием Gogland (в честь острова Гогланд в Финском заливе, в 180 км к западу от Санкт-Петербурга), но в качестве окончательного названия был выбран GoLand.

Сегодня мы, наконец, выпустили официальную версию GoLand 2017.3. Предлагаем вам скачать ее, и если понравится, купить!

Если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand можете пользоваться прямо в ней, просто установив этот плагин.

image

Читать полностью »

Привет читателям Habrahabr! В этой статье я продемонстрирую вам пример простой нейронной сети на языке Golang с использованием готовой библиотеки.

Немного предисловия

Начав изучать язык программирования Golang, мне стало интересно, что может этот язык в сфере машинного обучения. Тогда я начал искать примеры кода какой-либо НС на этом языке. К сожалению, ничего толкового найти не получилось. И вот тогда я решил переписать НС из этой статьи под GO.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js