А что такое гоу болтать
Кому и зачем все-таки нужен Go?
Здарова! Короче, последнее время на хабре было много срачей вокруг Go: хороший-плохой, нужен-ненужен, много сравнивали с питоном, много сравнивали с растом, divan0 даже додумался перевести высер «Go vs Haskell» ну и в таком ключе. У меня сложилось ощущение, что из-за хайпа и агрессивного маркетинга языка некоторыми Иванами Данилюками очень мало кто понял, кому и зачем вообще Go может пригодиться, зачем его делали и стоит ли вообще его учить. Я тоже долгое время участвовал в этих срачах, принимая посменно сторону «фанов» языка и сторону оппозиции, но в конце-концов допер, в чем фокус. Сегодня немного потупил у дивана в посте и решил написать вот эту заметочку.
Давайте, пацаны, проходим в пост.
Кому нужен Go?
Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.
Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:
Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.
А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
Так вот, Go нужен корпорациям. Если у вас в компании работает много людей, большие проекты и все такое, то Go это идеальный вариант! Но для того, чтобы понять, действительно ли вам нужен Go, надо разобраться ЗАЧЕМ его все-таки стоит использовать. Давайте узнаем.
Зачем нужен Go?
С технической стороны, ниша у Go довольно скромная: сеть, утилиты, бэкенды. Если у вас сложные сети или много нод, которые надо как-то навороченным образом оркестрировать, то Go это хороший выбор (судя по опыту CloudFlare). Если вы хотите сделать какую-то классную консольную утилиту, вроде докера или консула, то Go тоже нормульок подойдет (судя по опыту оных). Я вот сейчас тоже делаю интересную утилиту и пишу ее на Go, потому что вписывается. Ну и в конце-концов. Если вам нужен быстрый и в принципе, эффективный бэкенд, то тоже можно выбрать Go. Я не представляю, как народ пишет бизнес-логику на Go, но как-то пишут же! Короче, тут все довольно сложно. С одной стороны, делать CRUD в Go это достаточно болезненно, с другой стороны есть 350 разных роутеров и фреймворков, которые здорово облегчают работу.
Что касается других ниш, то я с уверенностью могу вас заверить: полная профанация. Если Go где-то всерьез и используется, то в консольных утилитах, на сетях и бэкендах. Больше юскейсов нет. И давайте не будем их выдумывать. Go изначально язык, который сделали в гугле, чтобы студенты могли придти и писать код для навороченной сетевой инфраструктуры гугла. Тут можно сформировать своеобразный rule of thumb: «Если ты не пишешь софт для сети, консольную утилиту или хайлоад бэкенд, то Go тебе скорее всего не нужен«. Тем не менее, полно народу продолжает писать софт на Go ради собственно говоря, самого Go.
Cтоит ли учить Go?
Это вопрос, на который можно дать короткий и однозначный ответ. Go стоит учить в любом случае. Во-первых, потому что это как два пальца обоссать — проще язык сложно придумать. В Go очень мало грамматик и абстракций, освоить его можно на начальном уровне за выходные. Конечно же, в языке есть полно дырок и «ловушек для лошпетов», о которых я писал в своей последней статье, но они довольно быстро резолвятся.
Для тех, кто прямо не могут сдерживаться и УЖЕ выпригивают из трусов, сразу кидаю несколько ссылок на материалы:
Заключение
Как говорить в кс го
Как говорить со своими тиммейтами в игре кс го — один из важных вопросов, которые мы сейчас постараемся выяснить!
Содержание
Настройка голосового чата
Если вы только что установили игру и хотите включить микрофон для того, чтобы пообщаться со своими товарищами по команде, то необходимо нажать кнопку K (на английской раскладке) и Л (если включена русский язык).
В случае если вы хотите сменить кнопку для активации микрофона на любую другую, вы должны открыть настройки в самой игре и найти пункт « использовать микрофон «. Справа от этого пункта серый прямоугольник в котором будет написана клавиша(англ.) на которую у вас будет включаться микрофон. Данную клавишу можно заменить на другую удобную для вас:
Как только вы установили игру, то она имеет стандартные настройки. Соответственно всегда голосовая связь будет работать только по 1 кнопке — K (ang).
В другом случае можем установить в консоли bind f «+voicerecord»
Для того чтобы понять, что ваша активация микрофона проходит успешно, то достаточно увидеть вот такой значок в левом нижнем углу:
Видеогайд по голосовому чату
Делаем бинд на готовую голосовую фразу
Если вы такое хотите сделать, то это можно реализовать по следующему алгоритму:
Теперь при нажатии на клавишу «H» (английской раскладки) мы будем слышать записанный наш голос, который мы сохранили в файл.
Если не работает микрофон или у вас его нет, вот видео о том, как сделать бинды для текстового чата:
Какие основные нюансы и тонкости голосового чата
Всегда знайте, что голосовой чат он, как телефонный разговор. Всегда необходимо придерживаться основной логики работы чата, о которой мы сейчас поговорим, а также правила хорошего тона.
Основные правила работы голосовой связи в кс го:
ЧИТАЙТЕ ТАКЖЕ : Переключаем язык в кс го!
Правила хорошего тона
Видео с хорошими советами по голосовому чату:
Рекомендуем общаться со своими соклановцами по нажатию кнопки на мышке. Самое удобное — это боковые кнопки. Нет необходимости тянуться к какой-то клавише, и всегда под пальцем. К тому же, очень редко бывают ситуации, когда вы используете стрельбу и в этот момент пытаетесь общаться со своими союзниками. Именно такая комбинация бинда и позволяет получать комфорт в общении.
Подписывайтесь на нас в социальных сетях ( ВК, Телеграмм)!
Значение слова «болтать»
1. (сов. взболтать) перех. Толчками, покачиванием сосуда приводить в движение находящуюся в нем жидкость. Болтать лекарство. || Устар. При помощи взбалтывания приготовлять что-л. [Башкирцы] кобылье молоко доят и из него кумыс делают. Бабы кумыс болтают и сыр делают. Л. Толстой, Много ли человеку земли нужно.
2. чем. Делать движения из стороны в сторону или взад и вперед (чем-л. находящимся на весу). Сидя в большом кресле, она [закройщица] болтает маленькими ножками в меховых туфлях. М. Горький, В людях.
3. безл., перех. Разг. Покачивать из стороны в сторону, подбрасывать (самолет). Самолет болтает сильней, видимо, вступили в полосу горных восходящих потоков. Первенцев, Честь смолоду.
1. перех. и без доп. Вести легкий, непринужденный разговор, разговаривать. [Милашкин:] Будь глуп, как пробка, только умей любезничать, болтать… Вот что нынче нравится. А. Островский, Бедная невеста. Они целыми днями болтали о чьих-то успехах, о каких-то интригах, о женитьбах и смертях, о наградах и ошибочных надеждах. Макаренко, Книга для родителей. До поздней ночи мы сидим за столом и болтаем, болтаем без конца. Каверин, Два капитана. || Говорить то, о чем не следует говорить; проговариваться. Вы, щенки! за мной ступайте! Будет вам по калачу, Да смотрите ж, не болтайте, А не то поколочу. Пушкин, Утопленник. — А понятно тебе, почему не надо болтать об этом? — Немного понятно. В. Беляев, Старая крепость.
2. Бегло говорить на каком-л. иностранном языке. Болтать по-французски и по-немецки я выучился довольно рано. Салтыков-Щедрин, Пошехонская старина.
Источник (печатная версия): Словарь русского языка: В 4-х т. / РАН, Ин-т лингвистич. исследований; Под ред. А. П. Евгеньевой. — 4-е изд., стер. — М.: Рус. яз.; Полиграфресурсы, 1999; (электронная версия): Фундаментальная электронная библиотека
Источник: «Толковый словарь русского языка» под редакцией Д. Н. Ушакова (1935-1940); (электронная версия): Фундаментальная электронная библиотека
болта́ть
1. беспорядочно раскачивать чем-либо ◆ На подоконнике сидел и болтал ногами в джинсах совершенно незнакомый дядька.
2. устар. что-либо перемешивать, взбалтывая ◆ Лита на мгновение даже перестала болтать ложкой похлёбку. ◆ Генри мрачно болтал ложкой в чашке, и вид у него был такой несчастный, что мне стало жаль бедного ученого. Дарья Донцова, «Долг платежом опасен»
3. разг. вести непринуждённый диалог, беседовать
Фразеологизмы и устойчивые сочетания
Делаем Карту слов лучше вместе
Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!
Спасибо! Я обязательно научусь отличать широко распространённые слова от узкоспециальных.
Насколько понятно значение слова слежаться (глагол), слежался:
Что за грустный тренд Go little rockstar. Флешмоб родился из песни про рок-звезду Папу Римского
В Сети распространился тренд Go little rockstar (рус. «Иди, маленькая рок-звезда»), в котором англоязычные пользователи соцсетей грустили по умершим близким, а россияне шутили и ободряли сами себя. Кто запустил флешмоб, почему участники неправильно поняли смысл фразы и при чём тут песня исполнительницы SALES, разобралась авторка Medialeaks.
Откуда взялся тренд Go little rockstar
В начале декабря 2021 года в Сети набрал популярность тренд, в котором пользователи тиктока монтировали грустные видео под звук женского голоса, тихо поющего:
Go little rockstar (рус. «Иди, маленькая рок-звезда»).
Флешмоб запустил пользователь тиктока deebo.spins, опубликовав ролик с американским спортсменом Ларри Фицджеральдом, который в 2021 году закончил карьеру. По мнению автора видео, игрок в американский футбол слишком рано ушёл из спорта.
Пользователи тиктока быстро подхватили тренд, превратив его в грустный флешмоб воспоминаний о близких. Автора роликов xx.cooper поделилась видео, где показала рассказала, как помогает отцу справиться со смертью мамы.
Моя мама умерла два месяца назад. Папа очень грустил, и я купила ему говорящего плюшевого медведя и записала на него мамин голос, — пишет девушка и показывает плачущего папу.
Тиктокерша katrinalitmolaa показала на видео свою немецкую овчарку, которая играет с мячом, и рассказала, что сняла видео перед смертью питомца.
Играем в мяч в его последний день его жизни, потому что это была его любимая игра. Go little rockstar.
Вскоре тренд дошёл и до России, однако пользователи рунета изменили его — вместо записи грустных видео они поддерживали сами себя. Вероятно, авторы роликов неверно перевели глагол go, выбрав значение «вперёд» или «давай», из-за чего фраза из прощания превратилась в ободрение. Например, тиктокерша gmnvga, рассказала, как в детстве боялась вести блог из-за возможного осуждения одноклассников.
Передаю привет 14-летней Ане, которая пытается вести соцсети, монтировать и показывать себя, но периодически удаляет что-то, ведь могут увидеть одноклассники, — пишет блогерша, у которой теперь 11 тысяч подписчиков. — Go little rockstar.
Авторша роликов katya_mishukova рассказала, что её мама в 25 лет стала серьёзной замужней женщиной с ребёнком и двумя работами, а сама тиктокерша в том же возрасте играет с длинной сосулькой, представляя, что это меч.
Моя мам в 25 лет вышла замуж, воспитывала меня, работала на двух работах. Я в 25 лет, — пишет пользовательница соцсети и показывает, как «фехтует». — Go little rockstar.
Фраза стала настолько популярной, что быстро перебралась из тиктока в другие соцсети, где превратилась в отдельный от звука мем.
Как изменился тренд Go little rockstar
Цитата стала очень популярна в твиттере, где пользователи описывали с её помощью поддержку, которую получили в момент грусти.
Я: «Мне плохо… Меня никто не понимает, я всех бешу, никому не нужна… Я устала, слабачка».
Твиттерские: «Go little Rockstar».
Другие авторы публикаций массово постили фразу без какого-либо контекста.
Скриншот публикаций
Цитата из тиктока стала основой для мемов в картинках, которые отображали грусть и безысходность. Авторы телеграм-канала ритуальные попуки опубликовали сразу два изображения, на одном из которых плачет кот, а на другом мужчина лежит в луже и держит в руке пиво.
Мемы Go little rockstar
Когда популярная фраза просочилась во все соцсети, нашлись те пользователи, кто заметил что-то неладное. Оказалось, что цитата взята из песни Pope is a Rockstar (рус. «Папа Римский — рок-звезда») исполнительницы SALES. Вероятно, пользователи Сети неправильно расслышали припев трека, так как в других строчках нет и намёка на слова go little rockstar.
Не могу поверить, что в тиктоке стала трендом песня Pope is a rockstar («Папа Римский — рок-звезда»). ПРОСТО [БЛИН] ПОТОМУ, ЧТО ВСЕ УСЛЫШАЛИ ТАМ go little rockstar.
Так нравится как тиктокеры любят сделать драму (?) из любой песни.
Go little rockstar, когда на самом деле в тексте это:
Авторы роликов, которых повеселила оплошность других тиктокеров, начали снимать «правильную» версию тренда — пользовательница соцсети cineastie порекомендовала подписчикам посмотреть сериал «Молодой Папа», где Папу Римского играет Джуд Лоу.
В этом тренде мне очень хочется посоветовать сериал «Молодой Папа», потому что Pope is a rockstar.
Во флешмобе с начала декабря успели поучаствовать пользователи соцсетей со всего мира. Многие из них и не догадываются, что популярный тренд появился благодаря ошибке американских слушателей, которые неправильно поняли припев песни Pope is a Rockstar.
Ранее Medilaeks рассказал, как трек «У неё был лучший друг» с эротическим подтекстом запустил грустный тренд про РПП.
В другом материале Medialeaks можно прочитать про песню «Этой ночью я умру, если не съем шаурму». Трек молодого юмориста стал популярным благодаря продавцу шаурмы.
Язык Go для начинающих
Цель этой статьи — рассказать о языке программирования Go (Golang) тем разработчикам, которые смотрят в сторону этого языка, но еще не решились взяться за его изучение. Рассказ будет вестись на примере реального приложения, которое представляет из себя RESTful API веб-сервис.
Передо мной стояла задача разработать бэкэнд к мобильному сервису. Суть сервиса довольно проста. Мобильное приложение, которое показывает посты пользователей, находящихся рядом с текущим местоположением. На посты пользователи могут оставлять свои комментарии, которые тоже, в свою очередь, можно комментировать. Получается своеобразный гео-форум.
Давно хотел попробовать применить язык Go для сколь нибудь серьезных проектов. Выбор был очевиден, благо что этот язык как нельзя лучше подходит для подобных задач.
Основные преимущества языка Go:
Все эти, и многие другие особенности позволяют выделить язык среди остальных. Это достойный кандидат на изучение, к тому же, освоить язык довольно просто.
Итак, вернемся к нашей задаче. Хоть язык и не накладывает ограничений на структуру проекта, данное приложение я решил организовать по модели MVC. Правда View реализовывается на стороне клиента. В моем случае это был AngularJS, в перспективе — нативное мобильное приложение. Здесь я расскажу лишь об API на стороне сервиса.
Структура проекта получилась следующая:
Программа в Go разделяется на пакеты (package), что указывается в начале каждого файла. Имя пакета должно соответствовать директории в которой находятся файлы, входящие в пакет. Так же, должен быть главный пакет main с функцией main(). Он у меня находится в корневом файле приложения loctalk.go. Таким образом, у меня получилось 5 пакетов: conf, controllers, models, utils, main.
Буду приводить неполное содержание файлов, а только минимально необходимое для понимания.
Пакет conf содержит константы и настройки сайта.
Думаю, комментировать тут нечего. Функция init() вызывается в каждом пакете до вызова main(). Их может быть несколько в разных файлах.
В самом верху определяется имя пакета. Далее идет список импортируемых пакетов. Мы будем использовать пакет Martini. Он добавляет легкую прослойку для быстрого и удобного создания веб-приложений. Обратите внимание как импортируется этот пакет. Нужно указать путь к репозиторию откуда он был взят. А чтобы его получить, достаточно в консоли набрать команду go get github.com/go-martini/martini
Далее мы создаем экземпляр Martini, настраиваем и запускаем его. Обратите внимание на знак « := ». Это сокращенный синтаксис, он означает: создать переменную соответствующего типа и инициализировать ее. Например, написав a := «hello», мы создадим переменную a типа string и присвоим ей строку «hello».
Переменная m в нашем случае имеет тип *ClassicMartini, именно это возвращает martini.Classic(). * означает указатель, т. е. передается не само значение, а лишь указатель на него. В метод m.Use() мы передаем функцию-обработчик. Этот Middleware позволяет Martini делать определенные действия над каждым запросом. В данном случае, мы определяем Content-Type для каждого запроса. Метод m.Map() же позволяет привязать нашу структуру и использовать ее затем в контроллерах при необходимости (механизм dependency injection). В данном случае, я создал обертку для кодирования структуры данных в формат json.
Тут же мы создаем внутреннюю функцию Auth, которая проверяет авторизацию пользователя. Ее можно вставить в наши роуты и она будет вызываться до вызова контроллера. Эти вещи возможны благодаря Martini. С использованием стандартной библиотеки код получился бы немного другой.
Взглянем на файл errors.go пакета conf.
Язык поддерживает возврат нескольких значений. Вместо механизма try-catch, очень часто используется прием, когда вторым аргументом возвращается ошибка. И при ее наличии, она обрабатывается. Есть встроенный тип error, который представляет из себя интерфейс:
Таким образом, чтобы реализовать этот интерфейс, достаточно иметь метод Error() string. Я создал свой тип для ошибок ApiError, который более специфичен для моих задач, однако совместим со встроенным типом error.
Обратите внимание на — type ApiError struct. Это определение структуры, модели данных, которую вы будете использовать постоянно в своей работе. Она состоит из полей определенных типов (надеюсь, вы успели заметить, что тип данных пишется после имени переменной). Кстати, полями могут быть другие структуры, наследуя все методы и поля. В одинарных кавычках « указаны теги. Их указывать не обязательно. В данном случае они используются пакетом encoding/json для указания имени в выводе json (знак минус «-» вообще исключает поле из вывода).
Обратите внимание, что поля структуры написаны с заглавной буквы. Это означает, что они имеют область видимости за пределами пакета. Если написать их с прописной буквы, они экспортироваться не будут, а будут доступны только в пределах пакета. Это же относится и к функциям и методам. Вот такой простой механизм инкапсуляции.
Далее мы определяем предустановленные ошибки и заполняем их поля. Поля вида http.StatusBadRequest — это значения типа int в пакете http для стандартных кодов ответа, своего рода алиасы. Мы используем сокращенный синтаксис объявления структуры &ApiError<> с инициализацией. По другому можно было бы написать так:
Символ & означает получить указатель на данную структуру. Оператор new() так же возвращает указатель, а не значение. По-началу возникает небольшая путаница с указателями, но, со временем, вы привыкните.
Перейдем к нашим моделям. Приведу урезанную версию модели постов:
Здесь мы используем замечательный драйвер для MongoDb — mgo, чтобы сохранять данные. Для удобства, я создал небольшую обертку над api mgo — utils.NewDbSession. Логика работы с данными: сначала мы создаем объект во внутренней структуре языка, а затем, с помощью метода этой структуры, сохраняем его в базу данных.
Обратите внимание, что в этих методах мы везде используем наш тип ошибки conf.ApiError. Стандартные ошибки мы конвертируем в наши с помощью conf.NewApiError(err). Так же, важен оператор defer. Он исполняется в самом конце выполнения метода. В данном случае, закрывает соединение с БД.
Что ж, осталось взглянуть на контроллер, который обрабатывает запросы и выводит json в ответ.
Здесь мы получаем из URL id запрашиваемого поста, создаем новый экземпляр нашей структуры и вызываем на ней метод LoadById(id) для загрузки данных из БД и заполнения данной структуры. Которую мы и выводим в HTTP ответ, предварительно преобразовав в json нашим методом mu.Marshal(post).
Обратите внимание на сигнатуру функции:
Входные параметры нам предоставляет Martini с помощью механизма внедрения зависимостей (dependency injection). И мы возвращаем два параметра (int, []byte) — число (статус ответа) и массив байт.
Итак, мы разобрали основные компоненты и подходы, используя которые, вы сможете сделать эффективный RESTful API интерфейс в короткие сроки. Надеюсь, статья была полезна и вдохновит некоторых из вас заняться изучением замечательного языка Go. Уверен, за ним будущее.
Для изучения могу порекомендовать хорошую книгу на русском «Программирование на языке Go» Марка Саммерфильда. И, конечно, больше практиковаться.