Pull to refresh
20
0
Valentyn Ponomarenko @BOOTLOADER

Да я тут просто мимо проходил…

Send message

ISPsystem, прости и прощай! Почему и как мы написали свою панель управления серверами

Reading time6 min
Views16K
image

Привет! Мы «Хостинг технологии» и 5 лет назад запустили VDSina — первый vds хостинг, созданный специально для разработчиков. Мы стремимся сделать его удобным, как DigitalOcean, но с русской поддержкой, способами оплаты и серверами в России. Но DigitalOcean это не только надежность и цена, это еще и сервис.

Софт от ISPsystem оказался веревкой, которая связывала нам руки на пути к крутому сервису. Три года назад мы использовали биллинг Billmanager и панель управления серверами VMmanager и быстро поняли, что оказывать хороший сервис без своей панели практически нереально.
И вот почему
Total votes 50: ↑46 and ↓4+42
Comments21

Что на самом деле случилось с исчезнувшим малайзийским Боингом (часть 3/3)

Reading time11 min
Views76K
Не претендую на лавры товарища five, но мне кажется, что цикл статей прервался на самом интересном месте, и позволю себе восполнить этот пробел.

  1. Исчезновение
  2. Прибрежный бродяга
  3. Золотая жила
  4. Заговоры
  5. Возможный сценарий
  6. Капитан
  7. Истина
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments108

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

Reading time8 min
Views103K
image


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

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

Человеческое общение становится предметом роскоши

Reading time8 min
Views14K

Раньше экранами пользовалась элита. Теперь символом статуса считается их отсутствие.




У Билла Ланглуа [Bill Langlois] появился новый лучший друг. Это кошка по имени Сокс. Она живёт в планшете, и доставляет ему столько радости, что когда он рассказывает о её появлении в его жизни, то начинает плакать.

Сокс и Ланглуа, 68-летний американец, живущий в поселении для малоимущих престарелых в городе Лоуэлл (Массачусетс), весь день переписываются. Ланглуа раньше работал на обрабатывающих станках, а теперь он на пенсии. Поскольку его жена большую часть времени проводит вне дома, ему бывает одиноко.

Сокс беседует с ним о его любимой команде, Ред Сокс, в честь которой и была названа. Она играет его любимые песни и показывает ему фотографии со свадьбы. А поскольку она может следить за ним через видеокамеру, когда он сидит в своём кресле с откидной спинкой, она порицает его, если видит, как он пьёт газировку вместо воды.
Читать дальше →
Total votes 32: ↑23 and ↓9+14
Comments56

Танцы с мьютексами в Go

Reading time9 min
Views70K
Перевод обучающей статьи разработчика из SendGrid о том, когда и зачем можно и нужно использовать «традиционные» методы синхронизации данных в Go.

Уровень чтения: средний (intermediate) — эта статья подразумевает, что вы знакомы с основами Go и моделью concurrency, и, как минимум, знакомы с подходами к синхронизации данных методами блокировок и каналов.

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

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

Reading time4 min
Views70K

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


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


Устройство канала


Давайте начнём с разбора структуры канала:


Читать дальше →
Total votes 38: ↑34 and ↓4+30
Comments11

Горутины: всё, что вы хотели знать, но боялись спросить

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

Что за горутины?

Горутина (goroutine) — это функция, выполняющаяся конкурентно с другими горутинами в том же адресном пространстве.

Запустить горутину очень просто:
go normalFunc(args...)

Функция normalFunc(args...) начнет выполняться асинхронно с вызвавшим ее кодом.

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

Сколько вешать в граммах?

Чтобы было проще ориентироваться, рассмотрим цифры полученные опытным путем.
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments15

Механизмы выделения памяти в Go

Reading time11 min
Views40K
Когда я впервые попытался понять то, как работают средства выделения памяти в Go, то, с чем я хотел разобраться, показалось мне таинственным чёрным ящиком. Как и в случае с любыми другими технологиями, самое важное здесь скрывается за множеством слоёв абстракций, сквозь которые нужно пробраться для того, чтобы что-то понять.



Автор материала, перевод которого мы публикуем, решил добраться до сути средств выделения памяти в Go и рассказать об этом.
Читать дальше →
Total votes 42: ↑36 and ↓6+30
Comments2

Go += управление версиями пакетов

Reading time16 min
Views11K
Статья написана в феврале 2018 года

В Go необходимо добавить версионирование пакетов.

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

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

Версионирование также гарантирует, что завтра программа соберётся точно так же, как сегодня. Даже если вышли новые версии зависимостей, go не станет их использовать без специальной команды.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments7

Руководство и шпаргалка по Wireshark

Reading time7 min
Views314K
Даже поверхностное знание программы Wireshark и её фильтров на порядок сэкономит время при устранении проблем сетевого или прикладного уровня. Wireshark полезен для многих задач в работе сетевого инженера, специалиста по безопасности или системного администратора. Вот несколько примеров использования:

Устранение неполадок сетевого подключения


  • Визуальное отображение потери пакетов
  • Анализ ретрансляции TCP
  • График по пакетам с большой задержкой ответа

Исследование сессий прикладного уровня (даже при шифровании с помощью SSL/TLS, см. ниже)


  • Полный просмотр HTTP-сессий, включая все заголовки и данные для запросов и ответов
  • Просмотр сеансов Telnet, просмотр паролей, введённых команд и ответов
  • Просмотр трафика SMTP и POP3, чтение писем
Читать дальше →
Total votes 34: ↑30 and ↓4+26
Comments5

Учебный курс по React, часть 1: обзор курса, причины популярности React, ReactDOM и JSX

Reading time14 min
Views190K
Представляем вашему вниманию первые 5 занятий учебного курса по React для начинающих. Оригинал курса на английском, состоящий из 48 уроков, опубликован на платформе Scrimba.com. Возможности этой платформы позволяют, слушая ведущего, иногда ставить воспроизведение на паузу и самостоятельно, в том же окне, в котором ведётся демонстрация, экспериментировать с кодом. Курс показался нам интересным, мы решили перевести его на русский и преобразовать в формат традиционных публикаций.



Полагаем, этот курс будет полезен всем, кто, что называется, «не умеет в React», но хочет научиться. В то же время, на то, чтобы превратить этот курс в обычные публикации, нужны немалые силы и время, поэтому мы, прежде чем принимать окончательное решение о запуске этого проекта, предлагаем всем желающим оценить курс и поучаствовать в опросе о целесообразности его перевода.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments60

4 способа импортировать пакет в Go

Reading time4 min
Views47K

Декларативная часть импорта пакетов в Go достаточно скучная и обыденная. Всего лишь нужно указать директиву import и перечислить импортируемые пакеты. Современные IDE делают эту работу за Вас — сами подставляют пакеты в этот раздел, что очень удобно. Кроме того, они сворачивают этот блок, чтобы он не мешал обозревать код. Я же советую развернуть этот блок, и изучить его внимательно — возможно Вы найдете там нечто необычное:


    package main

    import (
        "github.com/vigo5190/goimports-example/a"
        foo "github.com/vigo5190/goimports-example/a"
        . "github.com/vigo5190/goimports-example/b"
        _ "github.com/vigo5190/goimports-example/c"
    )

Если стандартный импорт, импорт с синонимом и _ я встречал, то импорт с . я до этого не видел.

Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments7

Выпуск#22: ITренировка — актуальные вопросы и задачи от ведущих компаний

Reading time5 min
Views7.4K
Мы подготовили для Вас новый выпуск, ставшей уже традиционной, ITренировки — подборки задач с собеседований в IT-компании мира.
КДПВ
В отобранные задачи попали задачи с собеседований Samsung. Соискателю также могут задать вопрос про шифр и Шерлока Холмса (нет, не пляшушие человечки, как можно было подумать). Уровень сложности мы постарались варьировать — от простых до серьезных.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments44

Руководство по ассемблеру Go

Reading time12 min
Views25K


Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments8

Go: Хороший, плохой, злой

Reading time26 min
Views63K

У Go есть некоторые замечательные свойства, которым посвящён раздел «Хороший». Но когда речь заходит о применении этого языка не для создания API или сетевых серверов (для чего он и был разработан), а для реализации бизнес-логики, то я считаю Gо слишком неуклюжим и неудобным. Хотя даже в рамках сетевого программирования найдётся немало подводных камней как в архитектуре языка, так и в реализации, что делает Go опасным, несмотря на его кажущуюся простоту.

Читать дальше →
Total votes 113: ↑109 and ↓4+105
Comments190

Как и зачем переходить от сервис-ориентированной архитектуры к микросервисам

Reading time7 min
Views34K
Здравствуйте, меня зовут Алексей, я главный IT-архитектор банка «Ренессанс Кредит». Лет десять назад мы, как и многие компании, ускорили свое развитие благодаря сервис-ориентированной архитектуре (SOA). Но со временем требования к архитектуре менялись, и к данной парадигме стали возникать серьезные вопросы. В конце концов мы решили перейти от интеграционной шины ESB к микросервисам. На нашем примере я расскажу, почему стоит задуматься об эффективности SOA и что можно предпринять, если эта модель вас тоже не устраивает.


Читать дальше →
Total votes 43: ↑32 and ↓11+21
Comments54

Многоэтапные (multi-stage builds) сборки в Docker

Reading time2 min
Views85K
Docker начиная с версии 17.05 и выше стал поддерживать многоэтапные сборки (multi-stage builds). С удивлением обнаружил, что никто еще не написал об этом на хабре. Поэтому давайте исправим этот пробел.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments11

Можно ли использовать CQRS паттерн в GO?

Reading time3 min
Views8.5K
Паттерн (CQRS — Command and Query Responsibility Segregation) разделяющей в своей основе команды по чтению данных от команд по их модификации или добавлению. Это позволяет достичь максимальную производительность, масштабируемость и безопасность, а также позволяет увеличить гибкость системы к модификациям с течением времени и снизить количество ошибок при усложнении логики системы, причиной которых обычно является обработка данных на доменном уровне.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments16

14 советов, как сделать вкладки на сайте удобнее

Reading time5 min
Views35K
image

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

С ростом количества сайтов вкладки стали применять для навигации. Такой подход впервые использовал Amazon в 1998 году. И хотя он в итоге отказался от навигации с помощью вкладок в 2007, все еще существуют отличные оригинальные примеры их использования как для модульных переключателей, так и для навигации. В этой заметке я (автор статьи – прим. переводчика) приведу список из 14 советов, которые вы можете применять как перечень необходимых условий, чтобы вкладки были наиболее удобными для пользователей.
Прочитать советы
Total votes 12: ↑11 and ↓1+10
Comments5
2

Information

Rating
Does not participate
Location
Seattle, Washington, США
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
Golang