Как стать автором
Обновить
2
Карма
0
Рейтинг

Пользователь

  • Подписчики 1
  • Подписки 1
  • Публикации
  • Комментарии

Настройка инструментов стандартной библиотеки Golang для production

Блог компании ispring Go *

Привет, Хабр, меня зовут Богданов Илья, я работаю ведущим инженером в команде веб-разработки. Сегодня я вам расскажу, как настроить стандартную библиотеку Golang так, чтобы избежать неожиданных ошибок в production.

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

о том, как не ловить ошибки соединения с базой данных на production;
http.Client и что не так с клиентом по умолчанию;
http.Server и его подводные камни;
и, наконец, рассмотрим пару занятных проблем, не связанных напрямую с настройкой стандартной библиотеки.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 5.4K
Комментарии 2

Модульный PHP монолит: рецепт приготовления

Блог компании ispring PHP *Программирование *Анализ и проектирование систем *

Статья написана по мотивам моего доклада на митапе. В нем я рассказываю историю того, как мы взяли и не распилили монолит на микросервисы, и что сделали вместо этого.

На тот момент наша команда работала над приложением, начало которому было положено еще в 2009 году не искушенными в архитектуре студентами. К 2018 это уже был типичный big ball of mud (большой ком грязи), или, этакий «монолит-копролит», как выразился один наш коллега. Думаю, многим знакомо.

Читать далее
Всего голосов 27: ↑26 и ↓1 +25
Просмотры 8.2K
Комментарии 12

Актуальность принципов SOLID

Программирование *Совершенный код *Проектирование и рефакторинг *
Перевод

Впервые принципы SOLID были представлены в 2000 году в статье Design Principles and Design Patterns Роберта Мартина, также известного как Дядюшка Боб. 

С тех пор прошло два десятилетия. Возникает вопрос - релевантны ли эти принципы до сих пор?

Перед вами перевод статьи Дядюшки Боба, опубликованной в октябре 2020 года, в которой он рассуждает об актуальности принципов SOLID для современной разработки.   

Недавно я получил письмо с примерно следующими соображениями:

Годами знание принципов SOLID было стандартом при найме. От кандидатов ожидалось уверенное владение этими принципами. Однако позже один из наших менеджеров, который уже почти не пишет код, усомнился, разумно ли это. Он утверждал, что принцип открытости-закрытости стал менее важен, так как по большей части мы уже не пишем код для крупных монолитов. А вносить изменения в компактные микросервисы - безопасно и просто.

Принцип подстановки Лисков давно устарел, потому что мы уже не уделяем столько внимания наследованию, сколько уделяли 20 лет назад. Думаю, нам стоит рассмотреть позицию Дена Норса о SOLID - “Пишите простой код”

Читать далее
Всего голосов 48: ↑42 и ↓6 +36
Просмотры 33K
Комментарии 87

Дженерики в языке Go

Блог компании Karuna Программирование *Go *
func Map[F, T any](s []F, f func(F) T) []T {
    r := make([]T, len(s))
    for i, v := range s {
        r[i] = f(v)
    }
    return r
}

Как вы уже наверняка знаете, proposal по дженерикам в Golang принят (официально это называется type parameters) и будет имплементирован в go 1.18. Бета будет доступна уже в конце этого года. А это значит, что пора разобраться, на чём в итоге остановились разработчики языка — ведь черновик type parameters постоянно менялся в течение последних лет.


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


Самостоятельно поиграться с дженериками можно здесь


Итак, поехали.

Читать дальше →
Всего голосов 43: ↑43 и ↓0 +43
Просмотры 17K
Комментарии 47

Go: Управление обработкой множественных ошибок

Блог компании OTUS Программирование *Go *
Перевод

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

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 3.2K
Комментарии 0

Не мокайте то, чем вы не владеете

PHP *
Перевод

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

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Просмотры 7K
Комментарии 7

Go: детектор утечек горутин (Goroutine Leak Detector)

Блог компании OTUS Программирование *Go *
Перевод

Утечку горутин можно легко обнаружить с помощью APM, который отслеживает количество работающих горутин. Вот пример из NewRelic — график, который мониторит горутины:

Читать далее
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 3.9K
Комментарии 0

Разбираемся с SOLID: Инверсия зависимостей

PHP *ООП *

Давайте глянем на определение принципа инверсии зависимостей из википедии:


Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

Формулировка:

A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

Читать дальше →
Всего голосов 37: ↑33 и ↓4 +29
Просмотры 93K
Комментарии 21

Go: распространенные антипаттерны

Блог компании RUVDS.com Программирование *Go *
Перевод
Программирование — это искусство. Мастера своего дела, создающие потрясающие работы, могут ими гордиться. То же самое относится и к программистам, которые пишут код. Чтобы достичь вершин мастерства, творцы постоянно ищут новые подходы к работе и новые инструменты.

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

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


Как писать хороший код (источник)

В этом материале сделана попытка найти ответ на большой вопрос из вышеприведенного комикса. Самый простой способ писать хороший код заключается в том, чтобы не употреблять в своих программах так называемые «антипаттерны».
Читать дальше →
Всего голосов 46: ↑37 и ↓9 +28
Просмотры 12K
Комментарии 18

Почему стек горутины бесконечен?

Блог компании Vivid Money Программирование *Go *
Перевод

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


package main

import "fmt"

type S struct {
        a, b int
}

// String implements the fmt.Stringer interface
func (s *S) String() string {
        return fmt.Sprintf("%s", s) // Sprintf will call s.String()
}

func main() {
        s := &S{a: 1, b: 2}
        fmt.Println(s)
}
Читать дальше →
Всего голосов 11: ↑5 и ↓6 -1
Просмотры 4.2K
Комментарии 4

Внедрение зависимостей в GO

Программирование *Go *

Источник изображения

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

Читать далее
Всего голосов 22: ↑17 и ↓5 +12
Просмотры 7.3K
Комментарии 14

Оптимизация микросервиса на Go на живом примере

Блог компании Авито Серверная оптимизация *Go *Микросервисы *

Всем привет. Меня зовут Нещадин Иван, и я расскажу про оптимизацию одного из микросервисов Авито на Go. История построена вокруг различных инструментов, которые доступны в языке, и пойдёт от простых примеров к более сложным.


Читать дальше →
Всего голосов 41: ↑37 и ↓4 +33
Просмотры 15K
Комментарии 40

Двоичные и побитовые операции в PHP

Блог компании VK Ненормальное программирование *PHP *Программирование *Математика *
Перевод

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

В PHP есть много инструментов, помогающих манипулировать двоичными данными, но хочу сразу предупредить: если вам нужно супернизкоуровневая эффективность, то этот язык не для вас.

А теперь к делу! В этой статье я расскажу много интересного о побитовых операциях, двоичной и шестнадцатеричной обработке, которые будут полезны в ЛЮБОМ языке.
Читать дальше →
Всего голосов 41: ↑38 и ↓3 +35
Просмотры 7.2K
Комментарии 11

Как бы я изучал Data Science, если бы начал пару лет назад, или Руководство по эффективному изучению науки о данных

Блог компании SkillFactory Алгоритмы *Математика *Карьера в IT-индустрии Data Engineering *
Перевод
Когда я только начал своё путешествие к науке о данных, я потратил много времени на то, чтобы понять, с чего начать, что я должен узнать в первую очередь и какие ресурсы должен использовать. За последние два года я узнал несколько вещей, о которых хотел знать раньше, например о том, стоит ли сначала сосредоточиться на программировании или статистике, какие ресурсы я должен использовать для изучения новых навыков, как я должен подходить к изучению этих навыков и так далее. Таким образом, эта статья написана, чтобы дать направления и идеи для тех, кто изучает Data Science.

Приятного чтения!
Всего голосов 37: ↑36 и ↓1 +35
Просмотры 23K
Комментарии 3

Квантовая теория. Вселенная из волн вероятностей

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

image Что будет, если по аналогии с двущелевым опытом, все пространство на пути частицы до экрана будет заполнено щелями?
Читать дальше →
Всего голосов 74: ↑71 и ↓3 +68
Просмотры 48K
Комментарии 153

Go и кэши CPU

Блог компании VK Программирование *Алгоритмы *Go *Процессоры
Перевод

Источник: unsplash.com

По словам Джеки Стюарта, трехкратного чемпиона мира по гонкам Формулы-1, понимание автомобиля помогло ему стать лучшим пилотом: «Гонщику не обязательно быть инженером, но нужен интерес к механике».

Мартин Томпсон (создатель LMAX Disruptor) применил эту концепцию к программированию. Если в двух словах, то понимание базового оборудования улучшит ваши навыки, когда речь заходит о разработке алгоритмов, структур данных и так далее.

Команда Mail.ru Cloud Solutions перевела статью, автор которой углубился в устройство процессора и рассмотрел, как понимание некоторых концепций CPU помогает принимать оптимальные решения.
Читать дальше →
Всего голосов 72: ↑69 и ↓3 +66
Просмотры 17K
Комментарии 17

Семейный бюджет в Telegram

Я пиарюсь
Статья посвящена обзору коммерческого продукта — Telegram-бота @budgetmoneybot для ведения семейного бюджета.

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

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



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

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

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

Несколько месяцев мне потребовалось на реализацию и тестирование такого бота. Но, как говорится, «дорогу осилит идущий» — в августе 2019 года бот был реализован.

Telegram-бот @budgetmoneybot предоставляет пользователям возможность вести как личный, так и семейный бюджет.
Читать дальше →
Всего голосов 79: ↑71 и ↓8 +63
Просмотры 57K
Комментарии 156

SSLH: Прячем SSH/HTTPS/OpenVPN/Telegram за единым портом 443

Информационная безопасность *Open source *
Tutorial
image

SSH/HTTPS/OpenVPN/Telegram и всё на одном порту?! Что?!
— Да!
  • Хотите скрыть наличее у вас некоторых сервисов?
  • В публичной wi-fi сети блокируется всё кроме 443 (https) порта?
  • Настроили Telegram Proxy/OpenVPN и не хотите его «светить» ?
  • SSH подключение к своему серверу из стран с цензурой?

На все эти вопросы ответ один — Мультиплексирование SSL/TLS соединений, или SSLH.

В посте мы рассмотрим как в 1 команду спрятать кучу сервисов за 1 портом.
Читать дальше →
Всего голосов 83: ↑79 и ↓4 +75
Просмотры 94K
Комментарии 100

Ошибка выжившего

Поисковые технологии *Читальный зал Научно-популярное Мозг Здоровье
«Защита» — хороший ярлык для плохих дел.
Милтон Фридман «Свобода выбирать»


Этот текст получился в результате анализа некоторых комментариев к статьям «Дефекты лайков» и «Экономика и права человека».

Интерпретируя какие-либо данные и делая выводы, некоторые комментаторы совершали типичную «ошибку выжившего».

Что такое «систематическая ошибка выжившего»? Это учет известного и пренебрежение неизвестным, но существующим.

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

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

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

image
Читать дальше →
Всего голосов 110: ↑73 и ↓37 +36
Просмотры 109K
Комментарии 225

learnopengl. Урок 1.1 — OpenGL

Программирование *C++ *
Перевод
Tutorial
Здравствуйте. Несколько недель назад я начинал серию переводов статей по изучению OpenGL. Но на 4 статье один хабровчанин заметил, что мои переводы могут нарушать лицензию, по которой распространяются учебные материалы, предоставленные в исходной статье. И действительно, мои переводы нарушали лицензию. Для разрешения этой проблемы я обратился к авторам того набора уроков, но так и не смог добиться нормального ответа. По этой причине я связался с автором другого, не менее (а возможно даже и более) крутого, набора уроков по OpenGL: Joey de Vries. И он дал полное разрешение на перевод его набора уроков. Его уроки гораздо более обширные, чем прошлый набор, поэтому эти переводы растянутся на долго. И я обещаю, будет интересно. Заинтересовавшихся прошу под кат.

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

На счет уроков по Vulkan: к сожалению мне тяжело сейчас написать уроки по данному API по причине скудной видеокарты на данный момент, которая просто не поддерживает Vulkan API, поэтому уроки по данному API будут только после обновления видеокарты.
Читать дальше →
Всего голосов 45: ↑42 и ↓3 +39
Просмотры 249K
Комментарии 9

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность