Язык программирования zig

Содержание:

Визуализация NFS-трафика с помощью elasticsearch+kibana

Tutorial

По долгу службы, мне часто приходится анализировать NFS-трафик. Wireshark является моим основным инструментом и для него я даже создавал расширение на lua. Но чего-то не хватало. И вот две недели назад я наткнулся на новый для меня инструмент Packetbeat. К сожалению, paketbeat не поддерживает не поддерживал NFS, но этот недостаток мне удалось исправить.

Packetbeat

Paketbeat — это один из инструментов из комплекта beats от создателей elasticsearch, logstash и kibana. Это отправитель (shipper) данных в elasticsearch, который слушает сетевой трафик, конвертирует его в json-записи и посылает в elasticsearch. Если вы используете Kibana4, то есть стандартные панели для визуализации собранного трафика. На данный момент, packetbeat распознаёт TCP, UDP, DNS, ICMP, HTTP, memcache, MongoDB, redis, PostgreSQL, MySQL, thrift и, теперь уже, NFS. Где-то внутри, packetbeat использует libpcap.

Кросс-компиляция в Go

Несмотря на то, что кроссплатформенность стала фактически стандартным атрибутом практически всех современных языков и библиотек, создавать по-настоящему кроссплатформенный продукт, всё равно было непросто. Компилируемые языки и сопутствующие библиотеки требовали сложной установки и настройки среды сборки и библиотек, а интерпретируемые — обязывали иметь или деплоить в составе необходимую версию интерпретатора. Есть немало проектов, пытающихся сделать этот процесс чуть более простым, но зачастую единственным решением оставалось устанавливать отдельный сервер и компилировать нативно.
В Go кросс-платформенность вышла на тот уровень, когда впервые можно смело отказаться от compile farms, специально настроенных dev-сред, виртуальных машин для сборки или chroot/docker-dev решений. И это ещё один серьезный game-changer, подробнее о котором я и хочу рассказать и показать на примерах
Поехали.

Не ограничивайтесь только внешними зависимостями

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

Это может выглядеть странно иметь пакет с тем же самым именем, что и в стандартной библиотеке, но это сделанно намеренно. У вас не будет конфликтов имён, если вы не используете net/http в других местах вашего приложения. Выгода от дублирования имени будет в том, что вы изолируете весь HTTP код внутри вашего http пакета:

Теперь ваш http.Handler работает как адаптер между вашим доменом и HTTP протоколом.

3. Использование общего пакета

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

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

Заглушки, которые я использую обычно очень просты. Например, заглушка для UserService выглядит вот так:

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

Допустим, мы хотим протестировать наш http.Handler, который мы добавили чуть выше:

Наша заглушка позволила полностью изолировать этот unit-тест и протестировать только часть HTTP протокола.

4. Пакет объединяет вместе зависимости

Со всеми этими пакетами с зависимостями, вы можете спросить, как они все объединяются. И это, как раз, работа для пакета .

Почему Go и Rust не соперники, а чертовы враги

Перевод

Прим. переводчика — это всего лишь перевод статьи, которая отражает альтернативную точку зрения на тему «Go против Rust». Вовсе не обязятельно показывать свое несогласие с мнением автора на карме переводчика, спасибо.
Эта статья — небольшой ответ к записи в блоге Дейва Чейни «Почему Go и Rust не соперники». Я настоятельно рекомендую вам почитать его доводы! Вероятно, вам также понравится замечательная дискуссия на реддите.
На самом деле, Go и Rust решают одну и ту же самую проблему: оба пришли в наш мир, чтобы сделать жизнь программистов проще. Go до безобразия упростил концепт конкурентного (ака многопоточного) программирования и мне кажется, сделал программирование приятным занятием, ведь код на Go действительно приятно читать. В то ж время, Rust подарил нам мощные zero-cost абстракции… для паттерн-матчинга. Звучит оправданно, не так ли? Шутки-шутками, но Rust действительно сделал многие непростые штуки проще (частое заблуждение: он не избавился от них). Его дьявольская система типов позволяет гарантировать безопасность памяти, и в том числе, избавиться от состояния гонки, что звучит очень заманчиво.

Как поставить тире на клавиатуре компьютера или ноутбука?

Обновление сервисов, запущенных на Go

Из песочницы

Я люблю программировать на Go, но больше всего сейчас мне нравится программировать в gobot для Raspberry Pi. Каждое изменение в коде требует определенное время на нудные операции, связанные с обновлением кода. Сначала я должен остановить процесс, так как Filezilla отказывается писать в исполняемый файл, когда процесс запущен, загрузить новый исполняемый файл по SFTP и запустить его (это не только нудно, но еще 10-20 секунд простоя, когда процесс остановлен).
Аналогичная ситуация меня преследует и при разработке для обычного веба на Go. Именно в gobot я вынужден очень часто обновлять код, что связанно со стилем разработки, который приносит мне удовольствие в свободное время. С разработкой нового пакета обновлять код, написанный на Go стало проще и быстрее.

Go, Vue и 3 дня на разработку: система реального времени для мониторинга пациентов

Перевод

В ноябре 2019 года люди услышали о первых случаях неизвестной смертельно опасной болезни в Китае. Теперь все знают о том, что эта болезнь называется COVID-19. Видимо, эпидемия навсегда изменила тот мир, который мы знали. Вирус опасен и очень заразен. И человечество пока не особенно много знает о нём. Очень надеюсь, что скоро будет найдено лекарство от этой болезни.
Природа вируса такова, что очень сложно помешать его распространению. В Шри-Ланке, где я живу, мы столкнулись с такой же ситуацией, с которой столкнулись люди в других странах. Здесь я хочу рассказать о том, как программисты смогли оказать посильную помощь тем, кто сражается с болезнью лицом к лицу.

Экосистема поддержки. Автоматизация регистрации пользователей средствами Golang

  • Из песочницы
  • Tutorial

Чем мы занимаемся?

Наша команда разрабатывает платформу программной отправки уведомлений посредством REST API на мобильные устройства. В настоящий момент это push уведомления для iOS устройств, а также SMS благодаря интеграции с Twilio). С целью организации процесса поддержки, а также сообщества пользователей, был выбран ряд информационных систем и сервисов (список см. ниже), которые, с нашей точки зрения, позволяли решить поставленную задачу в кратчайшие сроки и с минимальными усилиями.

Задачи

Автоматизировать выполнение следующих действий:

  • Pегистрация пользователей в системе учета обращений
  • Регистрации пользователей на портале сообщества
  • Управление услугами для пользователей

Используемые системы (и их назначение)

Все нижеперечисленные информационные системы и сервисы имеют REST API интерфейс, позволяющий решить поставленные задачи.

  • Atlassian Jira Service Desk (система учета обращений позьзователей)
  • Atlassian Confluence (информационный портал)
  • Slack (сообщество пользователей)
  • Paddle (распространение/ лицензирование программного обеспечения)

Гибридные решения

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

На ряде задач, например в случае с structured frequent pattern mining гибридные решения имеют существенное преимущество в масштабируемости (см. Paramonov, Sergey; Stepanova, Daria; Miettinen, Pauli: Hybrid ASP-based Approach to Pattern Mining, Theory and Practice of Logic Programming, 2018):

Сравнение на синтетическом датасете последовательностей (от авторов другого метода; разница работы на настоящих крупных датасетах несколько порядков — у нас десятки секунды-минуты, у них не получается вычислить все последовательности за ночь вычислений)

Так же для графовых датасетов разница еще существенней, тут сравнивается старый декларативный метод и новый гибридный (логарифмическая шкала)

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

Тестирование и корректность программ

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

И в целом, если вы думали, что научный код обычно необычайного качества, покрыт тестами и легко поддерживается, то вот кусочек кода из LCM-k:

Одной из важных особенностей программ с формальной семантикой является доказуемость их корректности, точнее говоря, вы смещаете фокус вопроса корректности на «ASP solver», т.е. систему которая может работать с языком Answer Set Programming. Вы можете показать, что программа и правила математически корректно моделируют вашу задачу — и вопросы по верному выполнению переходят в сообщество разработчиков. У систем, как правило, открытый код — так же они хорошо покрыты тестами и ими пользуются немалая группа юзеров. В среднем, мы достаточно уверены, что с ASP системами все хорошо в плане правильного выполнения кода.

Обычно, когда на свет выходит новый алгоритм (и статья вместе с ним), мы как бы просто верим в часть помеченную «?» на схеме:

В случае с ASP — algorithm и implementation являются одним и тем же (ну если вы не обернете ASP в процедурные вызовы в алгоритме), а значит можно показать формальную корректность самого кода.

Например, это можно использовать в качестве:

  • прототипа решения
  • baseline алгоритма
  • тестирования более быстрой версии на корректность

Заключение

Сегодня мы многое поняли (с) — и прикоснулись к вершине айсберга логического программирования. Тезисно (tl;dr) статья умещается в несколько пунктов:

  • современное логическое программирование != Пролог;
  • ASP хорош для решения комбинаторных задач;
  • вероятностное логическое программирование подходит для моделей вида: правила + вероятность;
  • лучше всего использовать ASP и ЛП для создания прототипов и тестирования идей: «а нам вообще что-то даст это дополнительное ограничение?», «против чего тестировать будем?», etc;
  • если у вас нет хороших идей, как написать быстрый поиск к трудной задаче с ограничениями, скорее всего вам пригодится ASP и это будет быстрее и надежнее лобового решения.

Как мы делали мониторинг запросов mongodb

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

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

Как раз про сложности и проблемы я и хочу рассказать на примере реализации мониторинга запросов к mongodb.

Как узнать диагональ монитора компьютера

Для определения размера есть несколько вполне распространенных причин:

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

Особенно это важно для игрового ноутбука;
ремонт — вам нужно подобрать новую матрицу для своего ноута. И конечно же необходимо точно определить ее размеры.

Ручное измерение диагонали

  1. Возьмите линейку, рулетку, либо измерительную ленту.
  2. Измерьте расстояние между левым верхним и правым нижним углом монитора.
  3. Значение в сантиметрах переведите в дюймы.

Обратите внимание на то, что измерять нужно видимую часть экрана. А размер корпуса в расчётах не учитываем

При помощи специальных программ

Для этой цели вы можете использовать:

  • AIDA64,
  • HWMonitor,
  • SiSoft Sandra.

В любой из этих программ найдите среди списка оборудования пункт «Монитор», «Дисплеи» или подобные. А потом среди параметров найдите пункт «Разрешение».

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

Как узнать диагональ монитора с помощью документации

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

Поисковая система (гугл в помощь)

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

Фабричная наклейка на корпусе монитора

Чаще всего на задней стенке корпуса располагается наклейка, где указаны серийный номер. А также производитель, условия эксплуатации, дата выпуска и название модели. Иногда диагональ экрана указывается прямо. Если нет, то найдите наименование модели. Скорее всего первые две цифры — это и есть нужное нам значение.

Так, у LG Flatron E 2260 диагональ составляет 22″. А если сомневаетесь в результате, можете проверить другими методами. На пример, на сайте производителя или самостоятельным измерением.

Как узнать диагональ монитора методом математических решений

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

К примеру: Размеры нашего монитора 10,5″ × 19″. Узнаём же квадрат его гипотенузы: 10,5² + 19² = 110,25 + 361 = 471,25. А теперь вычисляем саму диагональ: √471,25 = 21,7″.

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

И обратите внимание — измеряйте только матрицу, т.е., дисплей без учёта корпуса

Иные способы замера

Можно привести и ещё несколько экзотических способов измерить диагональ экрана.

Например:

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

Редактирование «Автозамены»

Technical Details

man!(D => Rust).basics

Просьба не воспринимать эту статью слишком серьёзно, переходить с D на Rust не призываю, просто после прочтения серии переводов за авторством Дмитрия aka vintage, мне стало любопытно переписать примеры кода на Rust, тем более, что автор добавил этот язык в голосование. Мой основной рабочий инструмент — С++, хотя в последнее время активно интересуюсь Rust. За D несколько раз пытался взяться, но каждый раз что-то отталкивало. Ни в коем случае не хочу сказать, что это плохой язык, просто местами он «слишком радикален» для «убийцы плюсов», например, имеется GC (пусть и отключаемый), а в других местах наоборот слишком близок к С++ со всеми его неочевидными нюансами.
Самое забавное тут то, что после изучения Rust отношение к D несколько изменилось — в плане лаконичности и выразительности последний сильно выигрывает. Впрочем, «явность» Rust-сообщество наоборот считает преимуществом. По моим ощущениям, в Rust чаще руководствуются «академической правильностью», а в D более практичный подход. Что лучше — сложный вопрос, лично я и сам не всегда могу определиться.
Впрочем, это всё очень субъективно, так что давайте вместе посмотрим на код. Код на Go приводить не буду, при желании, можно посмотреть в оригинальной статье.

Лучшие планшеты для детей от 7 до 10 лет

Особенности архитектуры распределённого хранилища в Dropbox

Вниманию читателей «Хабрахабра» представляется расшифровка видеозаписи (в конце публикации) выступления Вячеслава Бахмутова на сцене конференции HighLoad++, прошедшей в подмосковном Сколково 7-8 ноября ушедшего года.
Меня зовут Слава Бахмутов, я работаю в Dropbox. Я Site Reliability Engineer (SRE). Я люблю Go и продвигаю его. С ребятами мы записываем подкаст golangshow.

Что такое Dropbox?

Это облачное хранилище, в котором пользователи хранят свои файлы. У нас 500 миллионов пользователей, у нас более 200 тысяч бизнесов, а также огромное количества данных и трафика (более 1.2 млрд новых файлов в день).

История

Go был рождён из-за разочарования в существующих языках и рабочего окружения для системных программистов. Программирование стало слишком сложным и многообразие языков было тому частичной виной. Один делал выбор в сторону эффективной компиляции, другой — эффективное выполнение или лёгкость в написании кода. Все три аспекта в популярных языках не были доступны одновременно. Программисты, которые склонялись к простоте нежели к надёжности и производительности делали выбор в сторону динамически типизированных языков программирования таких как Python и JavaScript отвергая C++, Java.

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

Другая сторона Go: рисуем анализируя данные

Перевод

Go — универсальный язык программирования который отлично подходит для фоновых задач, но иногда вам может понадобится генерировать изображения опираясь на входящие данные. Go отлично работает с созданием визуальных объектов. В этом посте описан один из методов создания изображений (в частности векторной графики) на основе данных с помощью пакета SVGo.
Библиотека SVGo занимется одной единственной задачей: генерирует SVG и отдает его в io.Writer. I\O пакет в Go позволяет вам выводить результаты используя необходимый интерфейс (стандартный вывод, файлы, сетевые соеденения, веб сервер).
Для SVGo первостепенны высокоуровневые объекты такие как круги, прямоугольники, линии, полигоны и кривые. Стили и атрибуты являются второстепенными и применяются по мере необходимости.

Собственный поисковик по раздачам The Pirate Bay

Из песочницы

В последнее время на хабре стало популярно делать собственные поисковики по RuTracker. Мне это показалось прекрасным поводом для того, чтобы отойти от скучной enterprise разработки и попробовать что-нибудь новое.
Итак, задача: реализовать на локалхосте поисковик по базе The Pirate Bay и попутно попробовать, что же такое frontend разработка и с чем её едят. Задача осложняется тем, что TPB не публикует своих дампов, в отличие от RuTracker, и для получения дампов требуется распарсить их сайт. В результате гугления и осмысления задачи я решил в качестве поисковика использовать Elasticsearch, для которого написать client-side only фронтенд на AngularJS. Для получения данных я решил написать собственный парсер сайта TPB и отдельный загружатель дампа в индекс, оба на Go. Пикантность выбору придавал тот факт, что ни к Elasticsearch, ни к AngularJS я до этого ни разу не прикасался и именно их опробывание было моей настоящей целью.

Как работает программа распознавания лиц?

Эволюция Go

Перевод

Подошедший к концу GopherCon 2015, длившийся с 7 по 10 июля в Денвере, отметился немалым количеством интересных выступлений. Видео докладов еще недоступно, однако, конспекты некоторых из них доступны на английском языке по этому адресу; в официальном блоге также можно прочитать программную речь Расса Кокса. Вниманию читателей предлагается конспект доклада об истории создания языка, который открыл второй день конференции.
Роберт Грисмер (@robertgriesemer) — разработчик в Google, один из авторов языка Go. В прошлом Роберт работал над генерацией кода для высокопроизводительного JavaScript, занимался языком программирования Sawzall и разработкой современной реализации Smalltalk — Strongtalk. По собственному заявлению, он «провел слишком много времени в виртуальных Java-машинах, но так и не понял, как ими пользоваться».
Интерес Роберта к языкам программирования возник при знакомстве с Pascal — до этого момента он в основном писал на BASIC. Будучи аспирантом, он обучался у Никлауса Вирта, создателя Pascal.
Когда Роберт закончил учебу и окунулся в реальный мир индустрии профессионального программирования, то почувствовал себя так, словно совершил огромный шаг назад. Во время обучения в академии он использовал Оберон — язык, позволяющий программисту достигать очень высокой личной эффективности. Теперь же Роберт тратил свое время на размышления о языках программирования в надежде придумать способ, как ему вернуться на былой уровень производительности. После 15 лет опыта программирования на С++ он понял, что впереди у него только два пути: или продаться, или спасаться. Вместе с Робом Пайком и Кеном Томпсоном они выбрали второй вариант.

Настройка окружения

Для начала скачаем 64-битную версию Go c официального сайта. В зависимости от используемой операционной системы выполняем следующие действия.

Извлекаем скачанный архив в папку . Например:

Добавляем папку в переменную окружения :

Windows

Используем MSI файл и следуем инструкциям. По умолчанию инструменты Go размещаются в папке . При установке папка автоматически добавится в системную переменную .

Чтобы изменения вступили в силу, перезапустим все открытые окна эмуляторов терминала.

Проверяем корректность установки, создав и выполнив файл :

Выполним этот код и получим следующий результат:

Сериализация данных или диалектика общения: простая сериализация

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

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

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

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

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

ФРОО

Курс подойдет тем, кто пишет на PHP, Python, C/C++, JavaScript, Ruby.

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

Во время обучения вы:

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

Обзор функций

Полнотекстовый поиск в Couchbase Server

Дмитрий Калугин-Балашов большую часть своей жизни писал поиск: с 2011 года в компании Mail.ru был поиск по почте, затем был небольшой перерыв из-за работы в США, а сейчас это — работа над поиском в Couchbase. Одна из первых вещей, которую Дмитрий понял, работая в США — не всегда покупают самое эффективное решение. Иногда покупают то, где клиент будет иметь меньше проблем.
Поэтому ещё в 2013 году Дмитрий написал движок поиска для почтовых ящиков Mail.ru и рассказал об этом в том же году на конференции HighLoad и в статье на Хабре. А на HighLoad 2019 показал, как устроен полнотекстовый поиск в Couchbase Server, и сегодня мы предлагаем расшифровку его доклада.

Coursera

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

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

Это курс предназначен для людей с опытом в веб-программировании. Если вы пишете на PHP/Python/Ruby/JS (Node.js) и хотите освоить Go — этот курс для вас.
Начинающим программистам может быть немного сложно, т.к. в лекциях используется профессиональных жаргон (сленг), без детальных пояснений.
Курс не рассчитан на людей без опыта программирования.

GopherCon Russia 2018: программа конференции готова

Всем привет!
Продолжаем рассказывать про GopherCon Russia, который пройдет 17 марта в Москве. В прошлом посте мы прошлись по первой половине программы, а теперь она готова полностью. Например, на конференцию приедут и выступят ведущий подкаста Go Time Brian Ketelsen и технический евангелист Microsoft Ashley McNamara.
Напомним, что будет два параллельных потока докладов с 10.00 до 19.00, огненное афтепати в баре с 19.00 и до упора, крутые активности от наших партнеров. Кстати, 16 марта тоже будет пара камерных событий о Go, подробности coming soon. На конференцию ждем 400 участников (200 из них уже зарегистрировались), присоединяйтесь!
Если вы очень-очень любите Go, то можете не читать дальше, а сразу регистрироваться на сайте. Цена билета — 7000 рублей.Итак, кто и о чем еще расскажет:

CourseHunter

В этом курсе вы узнаете, как тестировать РЕАЛЬНОЕ программное обеспечение, а не функции палиндрома.

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

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

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

Жизнь в одну строчку

Перевод

Если уменьшение размера бинарников Go на 6% — это то, в чем вы отчаянно нуждаетесь, то эта статья для вас. (Я проводил этот эксперимент в рамках помощи Tailscale. Следует отметить, что я инвестор.) Если же вас не сильно заботит размер двоичных файлов, что ж, может быть, вам хотя бы будет интересно почитать это для развлечения.

Чтобы получить примерные цифры для этой статьи, я взял первый попавшийся файл из моего GOPATH. Все конкретные цифры в этой статье относятся к github.com/mvdan/sh/cmd/shfmt. После нескольких экспериментов, они кажутся мне довольно репрезентативными.

В качестве базового комита я использую коммит 9d812cfa5c тулчейна Go. Это ветка master по состоянию на 29 апреля 2020 г.; вероятно, он будет схож с версией Go 1.15beta1. Я использую его, а не Go 1.14, потому что он включает в себя несколько сокращений размера бинарников, в том числе одно конкретное, которое вам обязательно понадобится, если для вас важен размер.

Как ввести длинное тире на компьютере с операционной системой Windows

Двойное преображение – особые стабилизаторы

Это устройство называют лучшим. Применяется для слишком чувствительного к перепаду напряжения домашнего оборудования при мощности от 1 до 30 кВт. Характеризуются минимизацией помех и бесшумно работают. Показатель погрешности не превышает 1%. Отличается большим спектром напряжения на входе 118–300В. Цена аналогична симисторному аналогу, но надёжность и качественный уровень работы намного выше.

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

Для расчёта абсолютной мощности холодильника, необходимо данные из технического паспорта поделить на 0,65. Результат – мощность холодильника.

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

Рассчитываем полную мощность с учётом тока при запуске:

По результату расчёта требуемый стабилизатор должен иметь выходную мощность в 1,2 кВт.

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

Практическое использование в Go: организация доступа к базам данных

Несколько недель назад кто-то создал топик на Reddit с просьбой:

Ответы, которые он получил, были разнообразными и интересными. Некоторые люди посоветовали использовать внедрение зависимостей, некоторые поддержали идею использования простых глобальных переменных, другие предложили поместить указатель пула соединений в x/net/context (c golang 1.7 используется пакет context).

Что касается меня? Думаю что правильный ответ зависит от проекта.

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

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

Данный пост является вольным переводом оригинальной статьи. Автор статьи предлагает четыре подхода по организации доступа к БД в приложении написанном на golang

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector