Язык программирования ü. введение, мотивация к созданию, цели

Содержание:

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

Перевод

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

Skillbox

Golang от Google — прост, универсален и эффективен. Согласно опросу stack overflow, язык входит в тройку наиболее востребованных в 2020 году. Вы освоите его, научитесь создавать приложения с микросервисной архитектурой и получите высокооплачиваемую профессию.

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

Курс создан в партнёрстве с международным e-commerce-проектом WildBerries. Вы пройдёте уроки от ведущих разработчиков компании, разберёте реальные кейсы на практике, посетите офлайн-воркшопы и узнаете о языке Golang всё. Выпускники, успешно окончившие курс, смогут пройти собеседование и попасть на стажировку в компанию.

Technical Details

Почему Go и Rust не соперники

  • Перевод

В этом небольшом посте я расскажу, почему я считаю, что Go и Rust не являются соперниками.

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

Rust и Go анонсировали в примерно одно и то же время. Разработку языка Go начали в 2007 и в ноябре 2009 он уже увидел свет. Rust появился несколько месяцев спустя, в 2010, тем не менее Грейдон отмечает, что разработку начали гораздо раньше. В любом случае, у обоих языков достаточно явно различаются влиятельные предшественники. В случае Go, это CSP Хоара, Alef, и Newsqueak Пайка. Rust рассматривается, как расширение семейства ML-языков.
Что Rust, что Go — оба считаются безопасными (по части управления памятью)

В то время, как это утверждение абсолютно правдиво, оба языка не поощряют использование unsafe кода; что более важно, сегодня мир просто не примет язык без подобных гарантий надежности. Просто так получилось, что Go и Rust — это первые языки, которым удалось доказать, спустя десятилетия доказательств, что в реальности программисты просто не могут безопасно обращаться с памятью вручную.
Оба очень молоды: Go достиг 1.0 в 2012, а Rust в середине 2015 года

Оба более, чем амбициозны и явно готовы потеснить «старожил».

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

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

На ряде задач, например в случае с 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 и это будет быстрее и надежнее лобового решения.

Резюме

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

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

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

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

Пакеты

Представленной информации вполне достаточно для создания простейших программ, поэтому можно перейти к обсуждению архитектуры go-программы. Каждая программа – это пакет (см. в листинге 1), а точнее набор пакетов. Программы собираются из пакетов, и то, что обычно называется библиотеками, в go называется набором пакетов.

Исполняемая программа должна иметь пакет и метод , с которого начинается выполнение программы, и по завершении которого программа закрывается. Выражение дает доступ к методам, переменным и константам пакета . Обращаться к ним следует через оператор (точка), например, .

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

Например, клиент импортировал пакет package, в котором объявлены следующие переменные:

const hello = “Im not visible in client, just in package” //видна только в пакете
const Hello = “I can say hello to client” //видна также при импорте

Хотя язык go достаточно молод, он уже имеет обширную библиотеку пакетов. Выше использовался пакет , предназначенный для форматированного ввода/вывода. Пакет предоставляет доступ к файлам, аргументам командной строки, позволяет запускать другие программы и т.д. Есть пакеты для шифрования, сжатия, кодирования и журналирования. Отдельного внимания заслуживают пакеты , , для работы с сетью, позволяющие без особых усилий создавать Web-приложения. В стандартной поставке есть даже пакет для работы с изображениями. После установки в каталоге $HOME/go появляется каталог pkg, в котором есть каталог, соответствующей архитектуре. В этом каталоге выполняется хранение и поиск пакетов.

Как Docker помог нам достичь (почти) невозможного

Перевод

С тех пор как мы начали работать над Iron.io, мы пытались решить проблему поддержания наших IronWorker-контейнеров в актуальном состоянии относительно новых сред выполнения и пакетов Linux. В течение последних двух лет IronWorker использовал одну и ту же среду выполнения без изменений. Пока, несколько недель назад, мы не выпустили в продакшен различные окружения для языков программирования.
С момента создания нашего сервиса, мы использовали только один контейнер, который содержал набор языковых сред и бинарных пакетов — Ruby, Python, PHP, Java, .NET и другие языки, а также библиотеки такие как ImageMagick, SoX и другие.
Этот контейнер и стратегия его использования начали устаревать, равно как и Ruby 1.9.1, Node 0,8, Mono 2 и прочие языки со старыми версиями, которые использовались в стеке по умолчанию. Со временем проблема стала ещё острее, поскольку люди начали использовать новые вещи, но были вынуждены изменять свой код для работы со старыми версиями языков.

Что такое горутины и каков их размер?

Перевод

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

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

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

Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS

Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.

В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.

Мириады запущенных задач на C#

Недавно на ресурсе Medium были опубликованы две статьи от одного и того же автора, затрагивающие функциональность C# async/await.

Основными выводами были:

  • рекурсивный вызов асинхронного метода в C# подвержен StackOverflowException
  • goroutine’ы лучше задач (тасков) в .NET в плане производительности

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

Далее в статье я попытаюсь раскрыть суть проблемы более подробно с примерами решения.

NB: использоваться будут свежевыпущенный .NET Core 2.0 и Go 1.8.3.

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

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

История развития Go

Язык Go элегантен и прагматичен, но некоторые его особенности имеют смысл только под определенным историческим контекстом. История Go начинается с Си. Во многих отношениях Си стал основой для создания JavaScript, Ruby, Python, C++, C# и Java. Компиляторы или интерпретаторы некоторых из этих языков даже написаны на Си. Влияние Си легко заметить во многих языках. Он был разработан Денисом Ритчи для создания ядра Unix и потом использовался для создания ядра Linux.

Язык Go был создан легендами эпохи Unix и Си. Работая Google, Роберт Грисемер, Роб Пайк и Кен Томпсон были разочарованы в Си-языках из-за их проблем. Бъярн Страуструп, создать C++ говорил так: «Си позволяет легко выстрелить себе в ногу, в C++ это сложнее, но если вы все же выстрелите, то взорвете ногу целиком».

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

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

Также можно найти определенное сходство с динамическими языками, Go перенимает стиль написания кода у Python, настраиваемость у Ruby и простой параллелизм, вшитый в ядро языка, как у Node.js. Все начиналось, как язык, решающий некоторые проблемы Си и выросло в прекрасный язык программирования общего назначения.

Использование Go в правительстве

Перевод

Когда UK Government Digital Service (Служба Электронного Правительства Великобритании) взялась за GOV.UK код был в основном написан на Ruby. С тех пор мы попробовали в деле несколько языков включая Java, Clojure, Scala, Python и Javascript. В последнее время мы переключились на Go для ряда проектов.
Ниже короткий отчет о полученном опыте. Как мы использовали Go и что на наш взгляд полезно знать другим разработчикам помышляющим о внедрении языка в своем окружении. Если вас интересуют подробности, то более детальную информацию мы публиковали в блоге — router (мой перевод), crawler и CDN acceptance test.

Спортивный телеком: «СМОТРИ+»

Легендарный телекомментатор Николай Озеров, которому в этом году исполнилось бы 92 года, превратил спортивные трансляции в шоу, привлекающие к экранам телевизоров миллионы любителей спорта. Технологии с тех пор ушли достаточно далеко, но суть остается прежней – не имея возможности в силу различных обстоятельств лично присутствовать на интересном спортивном событии, можно следить за оными посредством телекоммуникационных технологий.
Сегодня компания «МегаФон» пошла навстречу любителям спорта и заядлым болельщикам, выпустив специальное телекоммуникационное приложение «СМОТРИ+».

Python или Golang — Что легче и быстрее выучить?

Знаете ли вы, что многие терпеть не могут Java, несмотря на его возможности? Все оттого, что Java сложен. Если речь заходит о сложных крупных программ, таким же становится и Python.

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

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

«Велосипед» проверки версии сайта

Всем добрый день.
В связи с растущей нагрузкой на один из сайт компании, в которой я числюсь системным администратором, было принято решение воспользоваться балансировщиком Keepalived. Останавливаться на этом продукте не буду, опишу возникшую проблему.
Раскладка происходит из gitlaba. Для того, чтобы отдел тестирование был в курсе того, что он вообще тестирует, давным давно на каждый отдельный сайт был добавлен файл. Обычный txt файл, который генерировался при раскладке. В себе этот файл содержал информацию о текущей версии (бранч, ревизию, хэш последнего коммита и список последних 300 коммитов.) То есть благодаря этому файлу, тестировщик знает, что именно он тестирует. Выглядит это примерно так:

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

Зависимости между зависимостями

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

Добавляя наш к мы развязываем(decouple) наши две зависимости:

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

Как устроены каналы в Go

Перевод познавательной статьи «Golang: channels implementation» о том, как устроены каналы в Go.

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

Почему Go — это плохо продуманный язык программирования

Перевод

Это перевод статьи юзернейма tucnak с Medium, которая получила обширное обсуждение на reddit.com/r/programming.
Окей, заголовок действительно несколько громкий, признаю. Cкажу больше: я прусь от громких заголовков, все из-за внимания. В этой блогозаписи я постараюсь доказать тот факт, что Go это ужасно продуманный язык (спойлер: это так). Я уже играюсь с Go уже на протяжении нескольких месяцев, первый helloworld собрал, кажется, в июне. Математик из меня никакой, но с тех пор прошло уже что-то около 4 месяцев и я даже успел залить на Github несколько репозиториев и собрать немного звезд! Стоит также упомянуть, что у меня совершенно нет опыта применения Go в продакшне, так что любые мои слова о «поддержке кода» или «деплое» не стоит принимать за единственноверную истину.
Я люблю Go, я полюбил его как только впервые попробовал его. Я потратил несколько дней на то, чтобы принять идиоматику, смириться с отсутствием дженериков, разобраться с откровенно странным способом обработки ошибок и вы знаете, всеми этими классическими проблемами, так или иначе связанными с Go. Я прочел Effective Go, много статеек из блога Dave Cheney, следил за всеми новостями из мира Go. Я даже могу сказать, что я достаточно активный участник сообщетсва! Я люблю Go и ничего не могу с этим поделать — Go просто замечательный. Тем не менее, я считаю, что Go это ужасный плохо продуманный язык, который делает совершенно не то, что «продает».

Опыт применения Go в продакшене Яндекса

Хочу поделиться опытом использования языка Go в продакшн-системах Яндекса. Вообще мы здесь довольно консервативно относимся к тому, какие языки использовать для реальных систем. И это лишь добавляет полезности тому опыту, который мы получили в этот раз.
Мы начали разрабатывать на Go летом прошлого года. Тогда появился фреймворк Go для облачной платформы Cocaine. До этого приложения серверного API Браузера писались в основном на C++ и Python. Серверный API в это время как раз переходил на облачную платформу, и мы по большей части только определялись с тем, какие технологии использовать в будущем для него. API выполняет следующие функции: получить данные, обработать, отправить во внутренний сервис Яндекса, ещё раз обработать, отдать назад Браузеру. Набор простых приложений.
Недостатком C++ для нас был явный оверкилл для наших целей, на разработку уходила уйма времени, также большой проблемой для нас было то, что плюсовый фреймворк для Кокаина не представлял никакой возможности работать асинхронно, кроме как с помощью коллбэков. У нас было много обращений к различным сервисам, поэтому в результате скоро весь код стал одной большой лапшой из коллбэков. Масштабировать и отлаживать ее было очень сложно.

Куда обращаться за помощью?

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

3,5 года, 500к строк Go. Часть 1

Это перевод статьи Нейта Финча (Nate Finch) — оригинал (опубликовано 24 марта 2017)

31 января 2017 года было моим последним днем в Canonical после 3,5 лет работы над одним из крупнейших проектов с открытым исходным кодом, написанных на Go — Juju.

На момент написания статьи основной репозиторий Juju — это 3 542 файла, 540 000 строк кода Go (в это число не входит 65 000 строк комментариев). С учетом всех зависимостей, кроме стандартной библиотеки, Juju содержит 9 523 файла, в которых содержится 1 963 000 строк кода Go (без учета 331 000 строк комментариев).

Вот несколько уроков, извлеченных из примерно 7 000 часов работы над этим проектом.

Микросервис на Golang

Среди беспорядка найдите простоту; среди раздора найдите гармонию; в трудности найдите возможность…
(С) Альберт Эйнштейн
Статей о микросервисах, их достоинствах и недостатках в последнее время написано немало. Однако как-то редко кто пишет об имплементации микросервисной архитектуры, и прежде всего, именно об микросервисе, как о кирпичике, из которой и строится потом здание такого приложения. Я попытался восполнить этот пробел, и поделиться своим опытом в разработке http-микросервиса, вылившемся в конечном счёте в небольшую библиотеку под не оставляющим места для сомнений названием Microservice. Код написан на прекрасно подходящем для микросервисов, простом и удобном языке программирования Golang.

Учебный центр «Специалист»

Курс посвящен основам языка Go. Целью курса является изучение базовых концепций и синтаксиса языка Go.

Курс включает в себя рассмотрение синтаксиса языка Go , а также базовых инструментов стандартной библиотеки Go для создания простейших CLI и веб-приложений.
Курс основан на опыте практического применения языка Go в современной backend разработке. Курс включает в себя не только практическую, но и теоретическую часть, и таким образом не сводится к простому «сборнику рецептов».
Курс читается на базе ОС Linux. Обучение проводится на примере популярнейшего дистрибутива Ubuntu. Однако большинство технологий, изучаемых на курсе, могут применяться и на базе Windows.

Вы научитесь:

Использовать язык Go для создания как консольных утилит, так и простейших макетов веб-сервисов

GoLand 2020.2: улучшенная поддержка Go modules, дженерики и многое другое

Хабр, привет! Две недели назад мы выпустили GoLand 2020.2 и хотим рассказать про основные изменения в этом релизе.

Если коротко, то мы улучшили поддержку Go modules, сделали удобнее поиск возможных проблем и слабых мест в коде, добавили новые проверки кода.

Кроме того, вы найдете новые функции редактирования кода, экспериментальную поддержку дженериков, возможность отправлять код из редактора в Go Playground, обновления для системы контроля версий, включая поддержку WSL 2 для Git на Windows, и многое другое!

Кстати, узнавать о новой функциональности в интерактивной форме можно прямо в IDE. Пройдите урок What’s New in GoLand 2020.2 на экране приветствия.

Библиотека Statsmodel в Python

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

Ниже приведен пример реализации библиотеки Statsmodel в Python.

Python

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf

input_data = sm.datasets.get_rdataset(«Guerry», «HistData»).data

res = smf.ols(‘Lottery ~ Literacy + np.log(Pop1831)’, data = input_data).fit()
print(res.summary())

1
2
3
4
5
6
7
8
9

importnumpy asnp

importstatsmodels.api assm

importstatsmodels.formula.api assmf

input_data=sm.datasets.get_rdataset(«Guerry»,»HistData»).data

res=smf.ols(‘Lottery ~ Literacy + np.log(Pop1831)’,data=input_data).fit()

print(res.summary())

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

Планировщик Go

Перевод

Преамбула от переводчика: Это достаточно вольный перевод пусть и не самой свежей (июнь 2013 года), но доходчивой публикации о новом планировщике параллельных ветвей исполнения в Go. Достоинством этой заметки есть то, что в ней совершенно просто, «на пальцах» описывается новый механизм планирования для ознакомления. Тем же, кого не устраивает объяснение «на пальцах» и кто хотел бы обстоятельного изложения, рекомендую Scheduling Multithreaded Computations by Work Stealing — 29 страниц изложения со строгим и сложным математическим аппаратом для анализа производительности, 48 позиций библиографии.

Введение

Одной из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым (Dmitry Vyukov). Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.

Golang

Курс изучения Golang для начинающих

Полный курс изучения программирования на Golang для начинающих. Примеры кода на Go с полным описанием. Изучение основ языка программирования Golang.

В программе курса:

  1. Начало программирования в Go — что нужно знать?
  2. Что такое Go? Go Playground, пакеты, функции и скобки в Golang
  3. Основы: Работа с числами, форматирование строк, переменные и константы
  4. Цикл for, if-else-switch, True-False и операторы сравнения в Golang
  5. Область видимости переменных в Golang
  6. Создание программы для покупки билетов в Golang
  7. Вещественные числа в Golang — float64 и float32
  8. Целые числа integer в Golang — выбор верного типа
  9. Пакет Big — Крупные числа в Golang и примеры их использования
  10. Работа со строками в Golang
  11. Конвертирование типов данных в Golang
  12. Создаем Шифр Виженера на Golang

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

Go на устройствах с маленькой памятью

Перевод

Перевод статьи разработчика компании Samsara об опыте использования Go на автомобильном роутере с 170MB оперативки.

В компании Samsara мы разрабатываем автомобильные роутеры, которые предоставляют в реальном времени телеметрию двигателя через CAN шину, данные с беспроводных термосенсоров через Bluetooth Low Energy и соединение по Wi-Fi. Эти роутера очень ограничены по ресурсам. В отличие от серверов с 16 GB оперативной памяти, у наших роутеров есть всего 170MB и всего одно ядро.

Наша новая камера CM11, закреплённая в кабине.

Чуть ранее в этом году мы выпустили видео камеру, которая крепится внутри кабины, чтобы улучшить безопасность машин для наших клиентов. Эта камера, по сути, является периферийным устройством для нашего роутера, которое генерирует много данных. Она записывает 1080p H.264 видео с частотой 30 кадров в секунду.

Наша первая реализация сервиса работы с камерой, который был отдельным процессом на роутера, потреблял 60MB, то есть почти половина всей доступной памяти, но мы знали, что можем добиться лучших результатов. Мы буферизировали только 3 секунды видео потока на 5Mpbs, и 60MB было достаточно, чтобы удерживать в памяти целых 90 секунд видео, так что мы решили посмотреть, где мы можем уменьшить использование памяти.

Разработка менеджера закачек на GO

Менеджер многопоточных закачек на GO.http://loafter.github.io/godownloader/https://github.com/Loafter/godownloader

Вступление

Давным-давно, в году этак 1998, для выхода в интернет я использовал модем на работе у отца. Он его включал вечером после работы и я мог наслаждаться просторами сети интернет на скорости аж 31.2 кбит/c. В то время не было истеричных блогеров, страницы не весили по мегабайту, а в новостных сайтах говорили только правду. Естественно основной интерес представляли ресурсы. Картинки, программы, всякие дополнения к играм, вроде машинок. Как сейчас помню качать через IE было сущим адом. Скачать файл весом больше 500 кб было просто невозможно, древний осел был намного упрямей.

Быстрый старт – программируем на Go под Windows — настройка Environment

Update (22.07.2013)

С момента изначального написания статьи многое изменилось. Я немного обновил пост, чтобы в сети не висела устаревшая инструкция.

Вместо вступления

Если кто не знает, Go (www.golang.org) – компилируемый язык программирования. Как и все хочет быть «лучше чем C». Разработку языка поддерживает Google (создатели языка — Rob Pike, Robert Griesemer и Ken Tompson), но Go — полностью open-source, в разработке принимает участие большое количество людей не из Google. Меня язык заинтересовал своей простотой и необычным подходом к ООП и многопоточности. Захотелось попробовать. Моя рабочая OS — Windows и будучи разбалованным платформой .Net, C# и Visual Studio мне было трудно именно начать. Хотя на самом деле это оказалось совсем просто, и достаточно быстро я настроил себе удобный Environment, состоящий, по сути, из IDE с подобием IntelliSense. О том, как это сделать за 15 минут я и хотел бы рассказать.

Разработка OS на Go+asm Part 0x01

Tutorial

Приветствую, %username%.
Перед вами вторая статья из цикла о разработке ОС на Go + asm.Part 0x00
Part 0x01
Изначально я планировал, что вторая статья будет про обработку прерываний, но Go накладывает свои корректировки — сейчас будет описано простое выделение памяти и часть рантайма Go, которая нам пригодится, но будет переписано. На самом деле это подготовка к третьей статье — куче и допиливанию рантайма.
Кода к этой статье на гитхабе не будет (забыл вовремя сделать коммит, а теперь банально лень специально восстанавливать, если кто пришлет пулл реквест — буду благодарен).Слабонервным просьба закрыть статью — все, что может быть написанно на Go будет написанно на нем!

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

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

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

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

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

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

JSON с опциональными полями в Go

Перевод

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

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

Заключение

В 2009 go был признан языком года по версии организации TIOBE. Сложно сказать, насколько этот язык «созрел» для серьезных проектов, но его потенциал очевиден. Простота создания многопоточных и сетевых приложений позволяет говорить о жизнеспособности и востребованности проекта в целом. «Идеологическое родство» с языками С и С++, возможно, поможет языку go, как в свое время родство с С помогло развитию C++, а родство с C++ способствовало становлению Java. Огромную роль играет и поддержка со стороны разработчика языка – компании Google, возможно, самой влиятельной IT-компании на данный момент. В следующих статьях будут рассматриваться более сложные аспекты программирования на языке go.

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

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

Adblock
detector