Pull to refresh
96
0
Dolovar @dolovar

SE

Send message

Создание минимального Docker-контейнера для Go-приложений

Reading time4 min
Views49K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи основателя сервиса Meetspaceapp Nick Gauthier «Building Minimal Docker Containers for Go Applications».

Время чтения: 6 минут

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

Часть 1: Наше «приложение»


Для тестирования нам потребуется какое-нибудь маленькое приложение. Давайте будем фетчить google.com и выводить размер HTML.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

func main() {
    resp, err := http.Get("https://google.com")
    check(err)
    body, err := ioutil.ReadAll(resp.Body)
    check(err)
    fmt.Println(len(body))
}

func check(err error) {
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

Если мы запустимся, то получим только какое-то число. У меня вышло около 17К. Я целенаправленно решил использовать SSL, но причину объясню позднее.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments10

Big Data resistance 1 или неуловимый Джо. Интернет анонимность, антидетект, антитрекинг для анти-вас и анти-нас

Reading time28 min
Views21K
Доброго времени прочтения, уважаемые читатели Хабра.

Прочитал за последнее время ряд статей, в том числе на Хабре, по цифровым отпечаткам браузеров и слежке за пользователями в Интернете. Например, статья Анонимная идентификация браузеров и Ловушка в интернете журнал Forbes, раздел «технологии» — «Big Data».

А может я не хочу, чтоб меня учитывали! Только, боюсь, ирония в том, что это тоже отпечаток, да, к тому же, видимо, и основная причина появления отпечатков. ИМХО, способ только один. Применительно к FireFox — если все лисицы хором и каждая в отдельности начнут тявкать, что они обыкновенные стандартные лисицы, а не тор, не хром и не макось.

Но, из академического интереса, для сохранения индивидуальности лисиц и в ответ на очередные происки дикого капитализма, хочу предложить на суд уважаемого Хабрасообщества, следующий хитрый план.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments16

5 причин, почему вы должны забыть о Redux в приложениях на React

Reading time3 min
Views77K
Я работаю с Реактом на протяжении почти 3 лет, использовал как Redux так и MobX и у меня к текущему моменту возник вопрос. Почему абсолютное большинство front-end разработчиков продолжают свято верить в то, что Redux + Redux Saga + Reselect + 100500 других библиотек «облегчающих» жизнь — это лучшее решение на сегодняшний момент? Я приведу 4 аргумента в пользу того, чтобы в следующем проекте вы использовали MobX вместо Redux.
Читать дальше →
Total votes 76: ↑64 and ↓12+52
Comments478

Бережная обработка ошибок в микросервисах

Reading time11 min
Views13K

В статье показано, как в Go реализовать обработку ошибок и логирование по принципу "Сделал и забыл". Способ расчитан на микросервисы на Go, работающие в Docker-контейнере и построенные с соблюдением принципов Clean Architecture.

Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments14

Новый оператор spaceship (космический корабль) в C++20

Reading time8 min
Views51K
C++20 добавляет новый оператор, названный «космическим кораблем»: <=>. Не так давно Simon Brand опубликовал пост, в котором содержалась подробная концептуальная информация о том, чем является этот оператор и для каких целей используется. Главной задачей этого поста является изучение конкретных применений «странного» нового оператора и его аналога operator==, а также формирование некоторых рекомендаций по его использованию в повседневном кодинге.

Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments64

Функциональный JavaScript: что такое функции высшего порядка и зачем они нужны?

Reading time9 min
Views16K

«Функции высшего порядка» — это одна из тех фраз, которыми часто разбрасываются. Но редко кто может остановиться и объяснить, что это такое. Возможно, вы уже знаете, что называют функциями высшего порядка. Но как мы используем их в реальных проектах? Когда и почему они бывают полезны? Можем ли мы с их помощью манипулировать DOM? Или люди, которые используют эти функции, просто хвастаются? Быть может, они бессмысленно усложняют код?

Раньше я считал, что функции высшего порядка полезны. Теперь я считаю их самым важным свойством JavaScript как языка. Но прежде чем мы это обсудим, давайте сначала разберёмся, что же такое функции высшего порядка. И начнём мы с функций в качестве переменных.
Читать дальше →
Total votes 37: ↑33 and ↓4+29
Comments2

13 приёмов работы с npm, которые помогают экономить время

Reading time11 min
Views87K
Каждый день миллионы разработчиков, создавая свои JavaScript-приложения, обращаются к npm (или к Yarn). Выполнение команд наподобие npm init или npx create-react-app стало привычным способом начала работы над практически любым JavaScript-проектом. Это может быть сервер, клиент, или даже настольное приложение.

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



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

Если вы совершенно не знакомы с npm — знайте, что интересующая нас программа устанавливается вместе с Node.js. Если вы работаете в Windows, то, чтобы воспроизвести кое-что из того, о чём здесь пойдёт речь, рекомендуется установить Git Bash.
Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments3

Функциональный JavaScript: пять способов нахождения среднего арифметического элементов массива и метод .reduce()

Reading time13 min
Views79K
Методы итерирования массивов похожи на «стартовые наркотики» (это, конечно, не наркотики; и я не говорю, что наркотики — это хорошо; это — просто фигура речи). Из-за них многие «подсаживаются» на функциональное программирование. Всё дело в том, что они невероятно удобны. Кроме того, большинство этих методов очень просто понять. Методы наподобие .map() и .filter() принимают всего один аргумент-коллбэк и позволяют решать простые задачи. Но возникает такое ощущение, что метод .reduce() у многих вызывает определённые затруднения. Понять его немного сложнее.


Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments26

Следующие шаги на пути к Go 2

Reading time4 min
Views14K

Состояние


Мы вовсю работаем над Go 1.13, релиз которого, надеюсь, состоится в начале августа этого года. Это первый релиз, который будет включать в себя изменения конкретно в языке (а не просто незначительные правки спецификации) после длительного моратория на любые такие изменения.


Чтобы прийти к этим изменениям в языке, мы начали с нескольких жизнеспособных предложений (proposals), отобранных из гораздо большего списка предложений по Go 2, в соответствии с новым процессом оценки предложений, описанным в посте "Go 2, here we come!". Мы хотели, чтобы первичный отбор предложений нами играл относительно малую роль и, по большей части, не вызывал споров, чтобы с большой вероятностью они бы прошли весь этот процесс. Предложенные изменения должны были быть обратно совместимыми, чтобы сломать как можно меньше, поскольку модули (которые в будущем позволят выбрать версию языка для конкретного модуля) пока еще не являются режимом сборки по умолчанию. Коротко, текущий начальный этап изменений был больше направлен на то, чтобы снова сдвинуться с мертвой точки и получить опыт, а не на решение больших проблем.

Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments26

Линтеры в Go. Как их готовить. Денис Исаев

Reading time16 min
Views41K

Предлагаю ознакомиться с расшифровкой доклада Дениса Исаева jirfag "Линтеры в Go. Как их готовить."


В go 50+ линтеров: в чем их профит и как эффективно встроить их в процесс разработки? Доклад будет полезен как тем, кто еще не использует линтеры, так и тем, кто уже применяет их: я раскрою малоизвестные трюки и практики работы с линтерами.



Кому интересно, прошу под кат.

Total votes 19: ↑18 and ↓1+17
Comments4

Хэш таблицы в Go. Детали реализации

Reading time8 min
Views106K
image


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

Детали под катом.
Читать дальше →
Total votes 24: ↑20 and ↓4+16
Comments16

Камеры глубины — тихая революция (когда роботы будут видеть) Часть 1

Reading time15 min
Views53K



Недавно я описывал, благодаря чему роботы завтра начнут НАМНОГО лучше соображать (пост про аппаратное ускорение нейросетей). Сегодня разберем, почему роботы скоро будут НАМНОГО лучше видеть. В ряде ситуаций намного лучше человека.

Речь пойдет про камеры глубины, которые снимают видео, в каждом пикселе которого хранится не цвет, а расстояние до объекта в этой точке. Такие камеры существуют уже больше 20 лет, однако в последние годы скорость их развития выросла многократно и уже можно говорить про революцию. Причем многовекторную. Бурное развитие идет по следующим направлениям:
  • Structured Light камеры, или камеры структурного света, когда есть проектор (часто инфракрасный) и камера, снимающая структурный свет проектора;
  • Time of Flight камеры, или камеры, основанные на измерении задержки отраженного света;
  • Depth from Stereo камеры — классическое и, пожалуй, наиболее известное направление построения глубины из стерео;
  • Light Field Camera — они же камеры светового поля или пленоптические камеры, про которые был отдельный подробный пост;
  • И, наконец, камеры, основанные на Lidar-технологиях, особенно свежие Solid State Lidars, которые работают без отказа примерно в 100 раз дольше обычных лидаров и выдают привычную прямоугольную картинку.

Кому интересно, как это будет выглядеть, а также сравнение разных подходов и их текущее и завтрашнее применение — добро пожаловать под кат!
Читать дальше →
Total votes 79: ↑79 and ↓0+79
Comments40

Темный день для Vue.js

Reading time6 min
Views81K

Сегодня я был изумлен тем, как обычно позитивное и дружелюбное сообщество Vue.js скатилось в печальное противостояние. Две недели назад создатель Vue Эван Ю опубликовал предложение (RFC) с новым функциональным API для компонентов в грядущем Vue 3.0. Сегодня критическое обсуждение на Reddit и аналогичные комментарии на Hacker News вызвали наплыв разработчиков в изначальный RFC с возмущениями, порой даже чересчур резкими.

Читать дальше →
Total votes 83: ↑77 and ↓6+71
Comments135

13 полезных однострочников на JavaScript

Reading time5 min
Views41K
Автор статьи, перевод которой мы сегодня публикуем, говорит, что он программирует на JavaScript уже многие годы. За это время он собрал коллекцию отличных однострочников — фрагментов кода, удивительно мощных, учитывая то, что укладываются они в одну строку. По его словам, большие возможности — это и большая ответственность, поэтому пользоваться этими конструкциями нужно осмотрительно, стремясь к тому, чтобы они не вредили бы читабельности программ.



Здесь представлено 13 однострочников. Примеры подготовлены с использованием Node.js v11.x. Если вы будете использовать их в другой среде — это может повлиять на их выполнение.
Читать дальше →
Total votes 72: ↑53 and ↓19+34
Comments76

Элегантная обработка ошибок в JavaScript с помощью монады Either

Reading time18 min
Views23K
Давайте немного поговорим о том, как мы обрабатываем ошибки. В JavaScript у нас есть встроенная функция языка для работы с исключениями. Проблемный код мы заключаем в конструкцию try...catch. Это позволяет прописать нормальный путь выполнения в разделе try, а затем разобраться со всеми исключениями в разделе catch. Неплохой вариант. Это позволяет сосредоточиться на текущей задаче, не думая о каждой возможной ошибке. Определённо лучше, чем засорять код бесконечными if.

Без try...catch трудно проверять результаты каждого вызова функции для неожиданных значений. Это полезная конструкция. Но у неё есть определённые проблемы. И это не единственный способ обрабатывать ошибки. В статье мы рассмотрим использование монады Either в качестве альтернативы try...catch.

Прежде чем продолжить, отмечу пару моментов. Статья предполагает, что вы уже знаете о композиции функций и каррировании. И предупреждение. Если вы раньше не сталкивались с монадами, они могут показаться действительно… странными. Работа с такими инструментами требует изменить мышление. Поначалу это бывает тяжело.

Не волнуйтесь, если сразу запутались. У всех так. В конце статьи я перечислил несколько ссылок, которые могут помочь. Не сдавайтесь. Эти штуки опьяняют, как только проникают в мозг.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments12

Подборка академических и науч-поп источников

Reading time5 min
Views13K
Академическое знание давно уже обитает в интернете, и как и любая информация, индексируется поисковыми машинами и базами данных. Я говорю о более широкой категории знаний, чем STEM (Science Technology Engineering and Mathematics), основным критерием академических источников является их рецензирование (например, скопусовский журнал Modern Theology является рецензируемым источником, хотя не все согласятся назвать его научным, а вот академическим, пожалуйста). Однако, насколько обычный пользователь интернета представляет себе этот сектор Сети, знает где, что, и как искать, умеет различать надежность различных академических источников, имеет доступ к этим источникам, а также понимает всю сложность и объем академического знания? Мне не встречалось каких-либо обзоров на русском языке, в котором была бы представлена информация, рамочно характеризующая условный «Scholarnet», дающая общее представление, справку, прочтя которую, можно было эффективно академическим знанием пользоваться. Я решил составить обзор источников академической информации, и источников, вторичных к ним (пресс-релизы научных новостей и науч-поп). Сразу оговорюсь, обзор произволен, и не выведен из какой-то точной методологии, но это лучше чем его отсутствие. Описав при этом разные потоки данных, с которыми может взаимодействовать самые разные люди: от самих исследователей до, как принято говорить в аннотациях книг, «широкого круга читателей» (в т.ч. википедистов, журналистов, участников интернет-споров, и т.д.). Также прошу заранее извинить за огрехи оформления, по мере возможности постараюсь исправить то, на что укажет читатель (желательно в ЛС).
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments25

Простые методы оптимизации программ Go

Reading time11 min
Views15K
Я всегда забочусь о производительности. Точно не знаю, почему. Но меня просто бесят медленные сервисы и программы. Похоже, я не одинок.

В тестах A/B мы попытались замедлять выдачу страниц с шагом 100 миллисекунд и обнаружили, что даже очень небольшие задержки приводят к существенному падению доходов. — Грег Линден, Amazon.com

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

  • Операции, которые хорошо выполняются в небольших масштабах, становятся нежизнеспособными с ростом числа пользователей. Обычно это операции O(N) или O(N²). Когда база пользователей мала, всё работает отлично. Продукт спешат вывести на рынок. По мере роста базы возникает всё больше неожиданных патологических ситуаций — и сервис останавливается.
  • Много отдельных источников неоптимальной работы, «смерть от тысячи порезов».
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments10

5 чрезвычайно простых способов ощутимо повысить скорость вашего VueJS-приложения

Reading time4 min
Views14K
Здравствуйте. Перевод данной статьи подготовлен специально для студентов курса «Разработчик JavaScript», который стартует уже на следующей неделе.


Голос Чуи

Немного обо мне — меня зовут Вайбхав, я из Five2One. Я вовлечен во VueJS уже целых 2 года (с момента выхода 1.0) и в основном помогал создавать/обучать 3 из крупнейших кодовых баз VueJS в Сиднее. Этот код служит миллионам людей, поэтому моя задача — не просто создавать масштабируемые паттерны кода, а еще и в значительной степени заботиться о его производительности.

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

Давайте перейдем прямо к делу — поговорим о некоторых простых способах повышения производительности вашего приложения VueJS.
Читать дальше →
Total votes 34: ↑23 and ↓11+12
Comments7

11 советов для тех, кто использует Redux при разработке React-приложений

Reading time13 min
Views19K
Когда речь идёт о разработке React-приложений, то, в плане архитектуры кода, маленькие проекты часто бывают более гибкими, чем большие. Нет ничего плохого в том, чтобы создавать такие проекты с использованием практических рекомендаций, нацеленных на более крупные приложения. Но всё это, в случае с маленькими проектами, может оказаться попросту ненужным. Чем меньше приложение — тем «снисходительнее» оно относится к использованию в нём простых решений, возможно — неоптимальных, но не требующих больших затрат времени на их реализацию.



Несмотря на это хотелось бы отметить, что некоторые рекомендации, которые будут даны в этом материале, нацелены на React-приложения любого масштаба.
Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments19

Логирование в распределенном php-приложении

Reading time17 min
Views40K


В статье пойдет речь о том, какую пользу оказывает логирование. Расскажу о логах по PSR. Добавлю немного личных рекомендаций по работе с уровнем, сообщением и контекстом логируемого события. Будет приведен пример, как можно организовать логирование и мониторинг с помощью ELK в приложении, написанном на Laravel и запущенном через Docker на нескольких инстансах. Распишу важное правило системы оповещения. Приведу пример скрипта, который поднимает одной командой весь стек мониторинга.

Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments16

Information

Rating
5,454-th
Registered
Activity