Pull to refresh
0
0
Алексей @AKomarov

User

Send message

Путь Сантьяго с ноутбуком

Reading time3 min
Views8.5K


Этим летом я совершил паломничество по Пути Святого Иакова, пешком из Франции через Пиренеи, через всю Испанию до побережья Атлантического океана, это было интересное путешествие длиной 800 километров.

Так вышло, что я брал с собой ноутбук по работе, и по ходу маршрута ко мне пришла мысль, что по Пути Сантьяго можно очень бюджетно путешествовать по красивейшим местам, с пользой для здоровья и без отрыва от производства. Хороший летний лайфхак для удалёнщиков, давайте разбираться.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments46

Load Average в Linux: разгадка тайны

Reading time18 min
Views228K


Средние значения нагрузки (Load averages) — это критически важная для индустрии метрика. Многие компании тратят миллионы долларов, автоматически масштабируя облачные инстансы на основании этой и ряда других метрик. Но на Linux она окутана некой тайной. Отслеживание средней нагрузки на Linux — это задача, работающая в непрерываемом состоянии сна (uninterruptible sleep state). Почему? Я никогда не встречал объяснений. В этой статье я хочу разгадать эту тайну, и создать референс по средним значениям нагрузки для всех, кто пытается их интерпретировать.

Читать дальше →
Total votes 127: ↑125 and ↓2+123
Comments25

Чем проще задача, тем чаще я ошибаюсь

Reading time7 min
Views46K
image

Эта тривиальная задача возникла в один из пятничных дней и должна была занять 2-3 минуты времени. В общем, как всегда.

Коллега попросил поправить скрипт у него на сервере. Сделал, сдал ему и обронил ненароком: «Время спешит на 5 минут». Сервер его, пусть сам и разбирается с синхронизацией. Полчаса, час прошел, а он всё пыхтит и тихо матерится.

«Бестолочь! — подумал я, переключаясь в консоль сервера — ну ладно оторвусь ещё на пару минут.»

Смотрим, ntp, rdate, sdwdate не установлены, timesyncd отключен и не запущен.

# timedatectl
      Local time: Sun 2019-08-25 20:44:39 +03
  Universal time: Sun 2019-08-25 17:44:39 UTC
        RTC time: Sun 2019-08-25 17:39:52
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Здесь сразу отмечу, что аппаратное время верное: по нему будет легче ориентироваться дальше.

Отсюда и началась череда ошибок.
Читать дальше →
Total votes 93: ↑92 and ↓1+91
Comments37

Пять студентов и три распределённых key-value хранилища

Reading time8 min
Views5.9K

Или как мы писали клиентскую C++ библиотеку для ZooKeeper, etcd и Consul KV


В мире распределённых систем существует ряд типовых задач: хранение информации о составе кластера, управление конфигурацией узлов, детекция сбойных узлов, выбор лидера и другие. Для решения этих задач созданы специальные распределённые системы — сервисы координации. Сейчас нас будут интересовать три из них: ZooKeeper, etcd и Consul. Из всей богатой функциональности Consul мы сосредоточимся на Consul KV.



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

Идея, призванная решить эту проблему, зародилась в одном австралийском консалтинговом агентстве, а нам – небольшой команде студентов – выпало её реализовывать, о чём я и собираюсь рассказать.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments1

Обширный обзор собеседований по Python. Советы и подсказки

Reading time10 min
Views185K

Всем привет!


Кратко о себе. По образованию я математик, а вот по профессии — программист. В сфере разработки с 2006 года. Хотя, поскольку программирование начали изучать ещё в школе, свои первые программки и игры я начал писать ещё в школе (примерно, с 2003). Так сложилось, что пришлось выучить и поработать на нескольких языках. Если не брать во внимание ВУЗ-овские лекции по С, С++, Бэйсику, Паскалю и Фортрану, то реально я работал с Delphi (более 6 лет), PHP (более 5 лет), Embedded (Atmel + PIC около 2.5 лет) и последним временем Python + чуть-чуть Scala. Конечно же без баз данных тоже никак не обойтись.


Для кого эта статья? Для всех, кто, как и я, хотел (или хочет) найти для себя достойную хорошо оплачиваемую работу с интересным проектом, классным коллективом и всякими плюшками. А также для тех, кто желает поднять свой уровень знаний и мастерства.

Читать дальше →
Total votes 71: ↑70 and ↓1+69
Comments57

Преимущества и недостатки HugePages

Reading time7 min
Views37K


Перевод статьи подготовлен для студентов курса «Администратор Linux».




Ранее я рассказал о том, как проверить и включить использование Hugepages в Linux.
Эта статья будет полезна, только если у вас действительно есть, где использовать Hugepages. Я встречал множество людей, которые обманываются перспективой того, что Hugepages волшебным образом повысят производительность. Тем не менее hugepaging является сложной темой, и при неправильном использовании он способен понизить производительность.

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

7 полезных сайтов и приложений для изучения английского

Reading time3 min
Views31K


Интересный факт – 20% населения планеты хотя бы на каком-то уровне говорит на английском языке, а его носителями являются всего 5% населения. При этом, этот язык – пожалуй, главный в интернете. По статистике, на нем написано 55,5% всего размещенного онлайн-контента.

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

Django ORM, gevent и грабли в зелени

Reading time6 min
Views16K
Очень многие выбирают Django за его простоту. Код на Django прост и лаконичен, мы меньше думаем о костылях и больше о бизнес-логике.

Gevent тоже выбирают из-за того, что он простой, очень шустрый и не несёт за собой callback hell.

В голове возникает великолепная идея совместить две простые и удобные вещи вместе. Мы патчим Django и радуемся простоте, лаконичности и производительности, делаем множество запросов на другие сайты, создаём подпроцессы, в общем используем наш новый асинхронный Django по максимуму.
Но совместив их, мы незаметно для себя поставили несколько граблей на нашем пути.
Читать дальше →
Total votes 50: ↑48 and ↓2+46
Comments76

Тюнинг производительности запросов в PostgreSQL

Reading time8 min
Views32K
Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в PostgreSQL. Мои методы не является исчерпывающими, скорее учебником для тех, кто просто тащится от тюнинга.

Поиск медленных запросов


Первый очевидный способ начать тюнинг — это найти конкретные операторы, которые работают плохо.

pg_stats_statements


Модуль pg_stats_statements — отличное место для начала. Он просто отслеживает статистику выполнения операторов SQL и может быть простым способом поиска неэффективных запросов.

Как только вы установили этот модуль, системное представление с именем pg_stat_statements будет доступно со всеми своими свойствами. Как только у него будет возможность собрать достаточный объем данных, ищите запросы, которые имеют относительно высокое значение total_time. Сначала сфокусируйтесь на этих операторах.

SELECT *
FROM
  pg_stat_statements
ORDER BY
  total_time DESC;

user_id dbid queryid query calls total_time
16384 16385 2948 SELECT address_1 FROM addresses a INNER JOIN people p ON a.person_id = p.id WHERE a.state = @state_abbrev; 39483 15224.670
16384 16385 924 SELECT person_id FROM people WHERE name = name; 26483 12225.670
16384 16385 395 SELECT _ FROM orders WHERE EXISTS (select _ from products where is_featured = true) 18583 224.67

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

Оптимизация запросов базы данных на примере B2B сервиса для строителей

Reading time7 min
Views21K
Как вырасти в 10 раз под количеству запросов к БД не переезжая на более производительный сервер и сохранить работоспособность системы? Я расскажу, как мы боролись с падением производительности нашей базы данных, как оптимизировали SQL запросы, чтобы обслуживать как можно больше пользователей и не повышать расходы на вычислительные ресурсы.
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments12

Class Template Argument Deduction

Reading time7 min
Views17K


Стандарт C++17 добавил в язык новую фичу: Class Template Argument Deduction (CTAD). Вместе с новыми возможностями в C++ традиционно добавились и новые способы отстрела собственных конечностей. В этой статье мы будем разбираться, что из себя представляет CTAD, для чего используется, как упрощает жизнь, и какие в нём есть подводные камни.

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

Год приключений с graphene-python

Reading time10 min
Views19K

Год приключений с graphene-python


image


Всем привет, я python-разработчик. Последний год я работал с graphene-python + django ORM и за это время я пытался создать какой-то инструмент, чтобы сделать работу с graphene удобнее. В результате у меня получилась небольшая кодовая база graphene-framework и набор некоторых правил, чем я бы и хотел поделиться.

Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments8

SQL. Занимательные задачки

Reading time13 min
Views325K
Здравствуй, Хабр!

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

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



SQL (ˈɛsˈkjuˈɛl; англ. structured query language — «язык структурированных запросов») — декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных. Подробнее…

Почитать об SQL можно из разных источников.
Данная статья не преследует цели обучить вас SQL с нуля.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments63

Что связывает парадокс дней рождения и уязвимости электронных подписей?

Reading time7 min
Views16K

Введение


Допустим, я спрошу вас, сколько человек должно быть в комнате, чтобы у двух из них день рождения с вероятностью 50% приходился на один день. Каким будет ответ? Именно это и называется парадоксом дней рождения.

Парадокс гласит:

Если в комнате есть 23 человека, то с вероятностью 50% двое из них родились в один день.

В некоторых версиях парадокса делаются ещё более сильные заявления:

Если в комнате 70 человек, то с вероятностью 99% двое из них родились в один день.

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

  1. Будем считать, что все люди в комнате родились не в високосный год. Мы делаем это допущение, чтобы нам не пришлось анализировать два разных случая.
  2. В комнате нет близнецов. При наличии пары близнецов решение будет тривиальным.
  3. Мы предполагаем, что люди рождаются равномерно и случайно. Что это значит? Люди с равной вероятностью могут рождаться в любой день года. Если немного это формализовать, то вероятность рождения в любой выбранный день равна $\frac{1}{365}$.
  4. Люди рождаются независимо друг от друга. Это значит, что дата рождения любого человека не влияет на дату рождения другого.

Стоит заметить, что эти условия необязательно соблюдаются в реальном мире. В частности, в реальном мире люди не рождаются с равномерной случайностью. По этой ссылке есть статистика по дням, в которые рождаются люди. Хотя наша модель не является точным отражением реального мира, её простота позволяет значительно облегчить анализ задачи.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments29

Подборка полезных слайдов от Джулии Эванс

Reading time1 min
Views53K
Перевели новую порцию слайдов. Права доступа в Unix, файловые дескрипторы, потоки, магия proc. И на закуску пара советов о том, как общаться, когда ты не согласен. А вдруг пригодятся =)



Читать дальше →
Total votes 115: ↑111 and ↓4+107
Comments42

Жадный подход и игровые автоматы. Разбор задач ML-трека чемпионата по программированию

Reading time16 min
Views12K


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

Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments1

Указатели сложны, или Что хранится в байте?

Reading time9 min
Views19K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pointers Are Complicated, or: What's in a Byte?" авторства Ralf Jung.


Этим летом я снова работаю над Rust фуллтайм, и я снова буду работать (помимо прочих вещей) над "моделью памяти" для Rust/MIR. Однако, прежде чем я заговорю о своих идеях, я наконец должен развеять миф, что "указатели просты: они являются просто числами". Обе части этого утверждения ошибочны, по крайней мере в языках с небезопасными фичами, таких как Rust или C: указатели нельзя назвать ни простыми, ни (обычными) числами.


Я бы также хотел обсудить часть модели памяти, которую необходимо затронуть, прежде чем мы можем говорить о более сложных частях: в какой форме данные хранятся в памяти? Память состоит из байтов, минимальных адресуемых единиц и наименьших элементов, к которым можно получить доступ (по крайней мере на большинстве платформ), но каковы возможные значения байта? Опять же, оказывается, что "это просто 8-битное число" не подходит в качестве ответа.

Читать дальше →
Total votes 40: ↑38 and ↓2+36
Comments37

Ликбез по передаче параметров по значению в конструкторы и сеттеры (современный C++, примеры)

Reading time4 min
Views20K
Судя по комментам habr.com/ru/post/460831/#comment_20416435 в соседнем посте и развернувшейся там дискуссии, на Хабре не помешает статья, как правильно передавать аргументы в конструктор или сеттер. На StackOverflow подобного материала полно, но тут что-то я не припомню.

Потому что пример в той статье полностью корректен, и автор статьи абсолютно прав. Вот этот пример:

// Хорошо.
struct person {
  person(std::string first_name, std::string last_name)
    : first_name{std::move(first_name)} // верно
    , last_name{std::move(last_name)} // std::move здесь СУЩЕСТВЕНЕН!
  {}
private:
  std::string first_name;
  std::string last_name;
};

Такой код позволяет покрыть все (ну ладно, почти все) возможные варианты использования класса:
Читать дальше →
Total votes 46: ↑45 and ↓1+44
Comments76

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

Reading time6 min
Views21K
Недавно мы писали о том, какие вопросы задаем на собеседовании кандидатам на вакансии в “Максилекте”. Теперь я хочу взглянуть на проблему с другой стороны “баррикад” – с позиции наемного работника. Хотя сегодня я руковожу компанией, за свою жизнь мне пришлось поучаствовать не в одном десятке собеседований на работу. Я даже когда-то описывал свой опыт в статьях, рекомендуя не только отвечать на вопросы, но и задавать их самостоятельно. И опыт показывает, что некоторые вопросы дадут вам даже больше информации, чем вы ожидаете. О них и поговорим.

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

Полезные сниппеты для Nginx конфигов

Reading time5 min
Views122K


Доброго времени суток, уважаемые хабравчане! В Elasticweb мы негласно ратуем за Nginx и, наверное, мы одни из немногих хостингов, которые не поддерживают Apache и .htaccess соответственно. В связи с этим, большое количество обращений в тех. поддержку связано с оказанием помощи в написании конфигурационного файла для Nginx. Поэтому мы решили собрать коллекцию полезных сниппетов и коллекцию готовых Nging конфигов для наиболее популярных CMS/CMF/Фреймворков на PHP.

Читать дальше →
Total votes 94: ↑91 and ↓3+88
Comments44
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity