Pull to refresh
5
0

Математик

Унифицируй это: как Lamoda делает единообразными свои Go сервисы

Reading time 14 min
Views 18K

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


Казалось бы, насколько сильно может отличаться один микросервис, который ходит в базу данных, от другого микросервиса, который ходит в соседнюю базу данных? Например, одна команда использует Go 1.9, glide, стандартный database/sql и одну структуру проекта, а в это же время другая команда использует Go 1.13, modules, sqlx и, конечно же, другую структуру проекта.


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


Меня зовут Алексей Партилов, я техлид команды web-разработки в компании Lamoda. В этой статье я расскажу, как мы справляемся с разношерстностью около 40 наших микросервисов на Go. Статья будет полезна разработчикам, которые только вливаются в Go и не знают, с чего начать более сложный проект, чем “helloworld”.


image

Читать дальше →
Total votes 60: ↑54 and ↓6 +48
Comments 65

Горячие клавиши в шелле

Reading time 3 min
Views 113K
Посвящается B_dot, пост которого заставил заинтересоваться возможностями консоли плотнее.
cat /dev/cheat-sheet >> /dev/head

Краткое вступление


В этом посте будет рассказано о некоторых сочетания клавиш, которые могут упросить жизнь администраторам, работающим в консоли. Все они работают в bash'e. Сочетания клавиш я дополнительно проверял на циске (Cisco IOS Software, s72033_rp Software (s72033_rp-ADVIPSERVICESK9_WAN-M), Version 12.2(33)SXH4), csh и zsh. Рассмотренное в других записях повторять особо не буду. Сочетания сгруппированы по использованной функциональной клавише.
Особенно полезен этот текст будет людям, которые любят использовать клавиши Home, End и Delete (которые в цисковой консоли «не работают»).
Читать дальше →
Total votes 150: ↑145 and ↓5 +140
Comments 59

Такие удивительные семафоры

Reading time 9 min
Views 136K
От переводчика: Джефф Прешинг (Jeff Preshing) — канадский разработчик программного обеспечения, последние 12 лет работающий в Ubisoft Montreal. Он приложил руку к созданию таких известных франшиз как Rainbow Six, Child of Light и Assassin’s Creed. У себя в блоге он часто пишет об интересных аспектах параллельного программирования, особенно применительно к Game Dev. Сегодня я бы хотел представить на суд общественности перевод одной из статей Джеффа.

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

Раньше я думал, что семафоры давно устарели. В 1960‑х, когда еще мало кто писал многопоточные программы, или любые другие программы, Эдсгер Дейкстра предложил идею нового механизма синхронизации — семафор. Я знал, что при помощи семафоров можно вести учет числа доступных ресурсов или создать неуклюжий аналог мьютекса, но этим, как я считал, область их применения ограничивается.
Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 1

GraphQL и Golang

Reading time 16 min
Views 31K
Технология GraphQL за последние несколько лет, после того, как компания Facebook перевела её в разряд опенсорсных, стала весьма популярной. Автор материала, перевод которого мы сегодня публикуем, говорит, что попробовал работать с GraphQL в среде Node.js и на собственном опыте убедился в том, что эта технология, благодаря её замечательным возможностям и простоте, неслучайно привлекает к себе столько внимания. Недавно он, занимаясь новым проектом, перешёл с Node.js на Golang. Тогда он и решил испытать совместную работу Golang и GraphQL.


Читать дальше →
Total votes 36: ↑34 and ↓2 +32
Comments 11

Сбалансированные двоичные деревья поиска: реализация на Julia

Reading time 20 min
Views 19K


Иллюстрация из работы Г.М. Адельсон-Вельского и Е.М. Ландиса 1962 года


Деревья поиска — это структуры данных для упорядоченного хранения и простого поиска элементов. Широко применяются двоичные деревья поиска, в которых у каждого узла есть только два потомка. В этой статье рассмотрим два метода организации двоичных деревьев поиска: алгоритм Адельсон-Вельского и Ландиса (АВЛ-деревья) и ослабленные АВЛ-деревья (WAVL-деревья).

Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 2

Делать хорошо, делая плохо: написание «злого» кода с помощью Go, часть 1

Reading time 12 min
Views 7K

Вредные советы для Go-программиста


image

После десятилетий программирования на Java, последние несколько лет я в основном работал на Go. Работать с Go — здорово, прежде всего потому, что за кодом очень легко следовать. Java упростила модель программирования C ++, удалив множественное наследование, ручное управление памятью и перегрузку операторов. Go делает то же самое, продолжая двигаться к простому и понятному стилю программирования, полностью удаляя наследование и перегрузку функций. Простой код — читаемый код, а читаемый код — поддерживаемый код. И это здорово для компании и моих сотрудников.

Как и во всех культурах, у разработки программного обеспечения есть свои легенды, истории, которые пересказываются у кулера для воды. Все мы слышали о разработчиках, которые вместо того, чтобы сосредоточиться на создании качественного продукта, зацикливаются на защите собственной работы от посторонних. Им не нужен поддерживаемый код, потому что это означает, что другие люди смогут его понять и доработать. А возможно ли такое на Go? Можно ли сделать код на Go настолько сложным? Скажу сразу – дело это непростое. Давайте рассмотрим возможные варианты.
Читать дальше →
Total votes 23: ↑19 and ↓4 +15
Comments 8

[в закладки] PDF-версия руководства по Node.js и новое руководство по JavaScript

Reading time 2 min
Views 43K
Недавно мы опубликовали серию материалов, представляющую собой перевод руководства по Node.js. В первой публикации мы интересовались мнением аудитории о целесообразности перевода этого руководства и говорили, что планируется подготовить его PDF-версию.

image


PDF-версия документа состоит более чем из 120 страниц, содержит оглавление, немного картинок и всё необходимое форматирование. Просто закидывайте файлик в читалку и готово. Или в папочку с литературой. Или… решать вам.

Скачать PDF-версию [ 1.8 Мб ]



Сегодня мы хотим представить вашему вниманию новое руководство того же автора, посвящённое JavaScript.

Вот краткий перечень вопросов, которые оно раскрывает:
  • Общая характеристика языка и его стандартизация
  • Особенности стандартов ES6, ES7, ES8, ES9
  • Оформление кода, руководства по стилю
  • Лексическая структура языка
  • Переменные
  • Типы данных
  • Выражения
  • Логические выражения
  • Прототипное наследование
  • Классы
  • Исключения
  • Функции и замыкания
  • Массивы
  • Циклы
  • События
  • Асинхронное программирование
  • Таймеры
  • Строгий режим
  • Математические вычисления
  • Модули

Мы планируем это руководство перевести, но, прежде чем приняться за работу, хотели бы предложить вам поучаствовать в небольшом опросе
Читать дальше →
Total votes 37: ↑34 and ↓3 +31
Comments 11

МФТИ открывает первую в России продвинутую магистерскую программу в Computer Science и Software Engineering

Reading time 2 min
Views 16K
Программа разработана кафедрой дискретной математики МФТИ и базовыми кафедрами ИТ-компаний Сбертех, Тинькофф, Яндекс, ABBYY и 1C в Физтех-школе прикладной математики и информатики (ФПМИ). Она представляет собой набор курсов, которые смогут выбрать лучшие абитуриенты магистратуры ФПМИ по результатам вступительных испытаний.


Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 5

Быстрое умножение целых чисел с использованием таблиц

Reading time 3 min
Views 15K
Хочу рассказать читателям о программистском трюке, с которым я познакомился в какой-то переводной книжке, содержащей подборку таких трюков, в те далёкие времена, когда ещё не изобрели не то что байт, а страшно сказать — стек, а великий Дейкстра ещё не проклял оператор GOTO (sic, in uppercase).

Трюк настолько мне понравился простотой и изяществом, что уже в этом тысячелетии я с удовольствием рассказывал о нём студентам в виде следующей задачи.

Представьте себе, что в процессе возвращения в 2030 году с Луны вы вдруг обнаружили, что ваш бортовой компьютер неправильно выполняет операции целочисленного умножения, и это непременно приведёт к аварии при посадке.

В таком сюжете нет ничего особо фантастического. Вспомним, например, какие проблемы случались когда-то с процессорами Pentium , а к моменту отправки на Луну вы ещё не достигли полного импортозамещения. И вообще надо проверить, а не были ли процессоры просверлены специально.

Но к делу. Вам надо срочно реализовать умножение программно, чтоб работало быстро в реальном времени и укладывалось в доступный ресурс.
Читать дальше →
Total votes 47: ↑46 and ↓1 +45
Comments 54

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

Reading time 11 min
Views 12K

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

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

Настройка параметров ядра Linux для оптимизации PostgreSQL

Reading time 9 min
Views 41K
Оптимальная производительность PostgreSQL зависит от правильно определенных параметров операционной системы. Плохо настроенные параметры ядра ОС могут привести к снижению производительности сервера базы данных. Поэтому обязательно, чтобы эти параметры были настроены в соответствии с сервером базы данных и его рабочей нагрузкой. В этом посте мы обсудим некоторые важные параметры ядра Linux, которые могут повлиять на производительность сервера базы данных и способы их настройки.

SHMMAX / SHMALL


SHMMAX — это параметр ядра, используемый для определения максимального размера одного сегмента разделяемой памяти (shared memory), который может выделить процесс Linux. До версии 9.2 PostgreSQL использовал System V (SysV), для которой требуется настройка SHMMAX. После 9.2 PostgreSQL переключился на разделяемую память POSIX. Так что теперь требуется меньше байтов разделяемой памяти System V.

До версии 9.3 SHMMAX был наиболее важным параметром ядра. Значение SHMMAX задается в байтах.
Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Comments 26

Старый компьютер, Windows 7, 1 Гб оперативки, Firefox и интернет

Level of difficulty Medium
Reading time 127 min
Views 137K
Несмотря на пройденное время, многие по прежнему ещё пользуются Windows 7. Кто-то вынужден работать на этой ОС или обслуживать такие компьютеры, у кого-то может быть хобби восстановления старых ПК, некоторых полностью устраивает Windows 7 или же из-за своих финансовых или прочих убеждений они не хотят менять старого верного «друга» на нового.
Эта статья, возможно поможет многим обладателям старых компьютеров открыть «второе дыхание» своим музейным экспонатам.

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

— Firefox
— Дополнения к браузеру
— Драйверы
— Windows 7
— BIOS
— Советы по аппаратной части
Читать дальше →
Total votes 53: ↑37 and ↓16 +21
Comments 960

Советы начинающему хостеру

Reading time 5 min
Views 6.3K
Предположим, одним теплым летним дождливым осенним днем вы шли по улице и решили, что хорошо бы начать продавать виртуальные серверы посторонним лицам. В этой статье я постараюсь рассказать о своих наблюдениях и ошибках, которые можно совершить, занимаясь предоставлением таких услуг.

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


В этой папке есть все: пальмы, девушки, голубые экспрессы, синее море, белый пароход, малопоношенный смокинг, лакей-японец, платиновые зубы, носки без дырочек, собственный бильярд, а самое главное — власть, уважение, слава, которую дают деньги
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Comments 6

Как научить программировать свою девушку, если ты не педагог, но она в тебя верит

Reading time 7 min
Views 51K

Когда твой парень - fullstack


Когда твой парень — fullstack


Работая программистом и проживая в пяти минутах ходьбы от офиса, крайне тяжело успеть «отойти» от работы, отойдя от работы.


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


Как бы не так!


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


И вот однажды она приходит к тебе и торжественно заявляет:
— Я готова! Готова учиться программированию! Давай!


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


О том, как я, не имея никакого практического опыта в обучении, решил ввести в программирование человека, объяснившего, что «ты же умный» и «всё у нас получится», расскажу под катом.


Добро пожаловать!

Читать дальше →
Total votes 76: ↑50 and ↓26 +24
Comments 309

Как сделать расширение на PHP7 сложнее, чем «hello, world», и не стать красноглазиком. Часть 1

Reading time 9 min
Views 12K

Зачем?


Я пишу эту статью для того, чтобы путь, который у меня занял в общей сложности не меньше года, читатель смог пройти за пару часов. Как показал мой личный опыт, просто программировать на Си несколько легче, чем заставить работать серьезное расширение для PHP. Здесь я максимально подробно расскажу вам о том, как сделать расширение на примере библиотеки libtrie, реализующей префиксное дерево, более известное как trie. Я буду писать и параллельно выполнять описываемые действия на свежеустановленной системе Lubuntu 18.04.

Начнем.
Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Comments 11

Спустя 6 лет вышла новая версия легендарного аварийного дистрибутива Hiren's BootCD

Reading time 4 min
Views 157K


Сегодня праздник у железячников, ремонтников, сисадминов и эникейщиков!
После долгого забвения был возобновлен выпуск легендарного загрузочного диска Hiren's BootCD.

Hiren's BootCD (также известный как HBCD) представляет собой загрузочный образ с программным обеспечением для записи на CD\DVD\USB-flash, содержащий ряд диагностических утилит, таких как тесты производительности системы, программы для форматирования и разметки, средства клонирования и создания образов диска, инструменты для восстановления данных, инструменты для работы с MBR, инструменты прошивки и модификации BIOS и других средств для исправления различных компьютерных проблем.

На этот раз дистрибутив базируется на 64-разрядной Windows PE 10.0 и содержит только легальные для свободного распространения программы, при условии, что вы будете использовать HBCD исключительно в целях диагностики и устранения компьютерных неисправностей, а не в качестве основного ПО для компьютера.

Выпуском новых официальных версий занимается группа особо преданных фанатов дистрибутива, которым был передан доступ к официальному сайту (старая версия сайта до анонса новых версий), в то время как оригинальный автор давно отошел от дел.
Читать дальше →
Total votes 72: ↑70 and ↓2 +68
Comments 71

Go Language. Небольшое клиент-серверное приложение

Reading time 7 min
Views 29K
Этот код написан с целью самообучения. Чтоб закрепить материал я решил немного прокомментировать проделанную работу.
Сразу скажу: на компилируемых языках не писал.

Что делает приложение


[к] — клиент
[c] — сервер
1. По установленному TCP соединению, [к] передает публичный ключ rsa.
2. При помощи принятого публичного ключа, [c] шифрует и отправляет сообщения [к]
3. [к] расшифровывает и выводит сообщения.

Вот как это выглядит в консоли:
image
Читать дальше →
Total votes 27: ↑23 and ↓4 +19
Comments 13

Игра для математика. Устный счёт

Reading time 3 min
Views 42K
Подумать только, живём мы в чудесную эпоху, изобрели вычислительные машины, забыли как пользоваться механическими счётами, у каждого второго в кармане сверхмощная ЭВМ, пару поколений уже выросло имея карманные калькуляторы, элементарные вычисления востребованы всё реже. Давно ли вам приходилось считать в уме? Ну, скажем, почему бы не сложить пару четырёх или пятизначных чисел делая покупки, потом дать кассиру деньги с точностью до копейки? Скажете, ерунда всё это, пустая трата времени. Кому пустая, кому не пустая. Я же считаю, что во-первых для поддержания функциональности мозга нужно периодически пользоваться этой замечательной функциональностью, а во-вторых искусство преуспевать в базовых навыках делает человека мастером.

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


Та ну, тут же всё опирается в реакцию и слепой набор чисел
Читать дальше →
Total votes 38: ↑33 and ↓5 +28
Comments 28

Как настроить Android и RAD Studio XE7 (Delphi, C++ Builder)

Reading time 3 min
Views 65K
Поговорим о том, как «подружить» или настроить Android и RAD Studio XE7 (или Delphi, или C++Builder, или AppMethod).
На самом деле вопрос не очень сложный, но часто поступающие на эту тему вопросы побудили меня написать этот пост.

План действий:
— настройка RAD Studio XE7 (SDK + NDK);
— настройка Android-устройства;
— запуск своего приложения на Android-устройстве.
Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Comments 22

Приглашаем на вебинары для начинающих Android-программистов на Delphi

Reading time 2 min
Views 11K
Друзья!

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

Вебинары мы планируем проводить каждую 2-ю и 4-ю пятницу месяца в 16-00 по московскому времени. Конечно же, если это время не совпадает с моей командировкой или другим мероприятием, о чем Вы будете заранее уведомлены.
Регистрация на первые четыре вебинара уже открыта.

image
Читать дальше →
Total votes 18: ↑13 and ↓5 +8
Comments 5

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity