Немного туп(л,)
84 subscribers
179 photos
26 videos
40 links
Маленький бложег С++ программиста, увлекающегося Rust'ом. Не столько про пргрмрвне, а вообще.
Download Telegram
Немного туп(л,)
Однако образованный читатель может начать кричать: "Здесь нет гарантий, что присваивание это атомарная операция, поэтому всё летит в тар-тарары!" И будет прав. На это я отвечу следующим образом: Я не просто так решил написать пример на Си. Когда пишешь на…
На самом деле тут ещё один момент, который я хочу осветить.

В беседе, которая вылилась в предыдущей пост, я упоминал, что раньше у нас были атомарные счётчики в этой очереди, которые я удалил и получил примерно 5% по перфу.
Эти счётчики позволяли вычислить длину очереди. И с ними структура Queue выглядела бы ("бы" потому что напомню, что я здесь выкладываю не оригинальный плюсовый код, а его интерпретацию на Си) примерно так:
struct Queue {
struct Item* head;
struct Item* tail;
atomic_ullong count_push;
atomic_ullong count_pop;
}


Соответственно, в момент инициализации очереди эти счётчики занулялись, а функции добавления и извлечения элементов из очереди выглядели так:
void queue_push(struct Queue* queue, int data) {
struct Item* item = new_item(data);
queue->tail->next = item;
queue->tail = item;
++count_push; // <-- this
}
bool queue_pop(struct Queue* queue, int* data) {
if (queue_is_empty(queue))
return 0;

strut Item* old_head = queue->head;
queue->head = old_head->next;
free_item(old_head);

*data = queue->head->data;
++count_pop; // <-- this
return 1;
}


Как можно заметить, счётчики только увеличиваются, и никогда не уменьшаются. Это нормально, потому что счётчики беззнаковые, а согласно стандарту:
Unsigned integer arithmetic is always performed modulo 2^n where n is the number of bits in that particular integer. E.g. for unsigned int, adding one to UINT_MAX gives 0, and subtracting one from 0 gives UINT_MAX.

Тогда функцию для получения длины очереди можно написать так:
unsigned long long queue_length(struct Queue* queue) {
unsigned long long push = atomic_load(queue->count_push); // (1)
unsigned long long pop = atomic_load(queue->count_pop); // (2)
return push - pop;
}

В этой операции опять же возможны переполнения, но суть - всё равно, ибо смотри выдержку из стандарта.
Единственное рассмотрим нюансы атомарных операций:
(1) Мы не(!)атомарно разыменовываем указатель и потом уже (!)атомарно читаем значение счётчика. Тут всё нормально, потому что указатель на queue никто не меняет, а чтение и запись атомарного счётчика атомарны (sic!), поэтому гонок с функцией queue_push не будет.
(2) Прежде чем мы дойдём до этой строки может выполниться куча операцией push/pop, но нам это не важно!
Мы опять неатомарно разыменовываем указатель и атомарно читаем значение счётчика pop. Ну и потом уже неатомарно посчитаем разность этих счётчиков из закэшированных значений, поэтому нам неважно, происходят ли ещё какие-то push/pop.
Немного туп(л,)
На самом деле тут ещё один момент, который я хочу осветить. В беседе, которая вылилась в предыдущей пост, я упоминал, что раньше у нас были атомарные счётчики в этой очереди, которые я удалил и получил примерно 5% по перфу. Эти счётчики позволяли вычислить…
Добавлю ещё два нюанса:
1. Так как наши коды очень старые, изначально счётчики были не атомарные, а volatile, что как бы важно, но не очень (объяснение будет дальше)
2. Оригинальная функция так же учитывала проверку на переполнение, когда count_push уже переполнился, а count_pop ещё нет, и выглядело это примерно так:
unsigned long long queue_length(struct Queue* queue) {
unsigned long long push = atomic_load(queue->count_push);
unsigned long long pop = atomic_load(queue->count_pop);

if (pop > push)
return ULLONG_MAX - pop + push + 1
else
return push - pop;
}

Но мне кажется эта проверка бессмысленной, так как:
1. От перемены мест слагаемых сумма не меняется
2. ULLONG_MAX + 1 = 0
3. 0 - pop + push = push - pop
И в итоге получается то же самое, что и во второй ветке условия. Но если я не прав, будет отлично если кто-нибудь меня поправит и объяснит где я ошибаюсь.

Теперь надо понять, почему удаление этих счётчиков увеличило перформанс данного кода.
Нужно понять, что такое "атомарная операция". Это операция, которая выполняется неделимо, пока выполняется она - не выполняется ничего другого. Однако, atomic-типы в C++ и Си делают по-умолчанию больше: они учитывают memory_ordering, то бишь порядок доступа к памяти. Тут я ступаю на рыхлую почву, потому что сам всё ещё несколько плаваю в этой теме. Поэтому углубляться я не буду, чтобы сильно не наврать, но грубо постараюсь объяснить.
Поведение по-умолчанию для всех атомарных операций - memory_order_seq_cst, что для операций чтения эквивалентно memory_order_acquire, а для операций записи - memory_order_release. Read-modify операции я в примерах выше не использовал, поэтому опустим их.
memory_order_acquire значит, что в данном участке памяти нельзя менять порядок других операций чтения или записи до завершения текущей операции чтения. То есть наш поток увидит все изменения, совершённые другими потоками.
memory_order_release значит, что в данном участке памяти нельзя менять порядок других операций чтения или записи после завершения текущей операции записи. То есть все потоки увидят эту запись.
Таким образом, операции со счётчиками добавляют синхронизацию в наш код расставляя барьеры памяти, что легко увидеть в ассемблерном выхлопе (спасибо godbolt):
// Оптимизации -O3
int* foo(void* v) {
int* a = (int*)v;
++(*a);
return thrd_success;
}
int* bar(void* v) {
atomic_ullong* a = (atomic_ullong*)v;
++(*a);
return thrd_success;
}

foo:
add DWORD PTR [rdi], 1
xor eax, eax
ret
bar:
lock add QWORD PTR [rdi], 1
xor eax, eax
ret
Немного туп(л,)
Добавлю ещё два нюанса: 1. Так как наши коды очень старые, изначально счётчики были не атомарные, а volatile, что как бы важно, но не очень (объяснение будет дальше) 2. Оригинальная функция так же учитывала проверку на переполнение, когда count_push уже переполнился…
При этом можно, казалось бы, использовать явно memory_order_relaxed, но это всё равно бьёт по перфу: relaxed операции не добавляют синхронизации, НО всё равно заставляют компилятор вызвать сброс кэша процессора, что в минималистичном примере даёт такой же результат для функции bar:
int* foo(void* v) {
atomic_ullong* a = (atomic_ullong*)v;
atomic_fetch_add_explicit(a, 1, memory_order_relaxed);
return thrd_success;
}

foo:
lock add QWORD PTR [rdi], 1
xor eax, eax
ret

То есть, атомарные операции в С/С++ это больше, чем просто "атомарные" операции, это ещё и полноценная синхронизация, как минимум между кэшами ядер.

А когда мы используем volatile вместо атомарных типов, то тут два варианта:
1. Компилятор сгенерирует такой же код, как для memory_order_relaxed операции (и так точно делает MSVC, если не всегда, то часто)
2. Компилятор сгенерирует "нормальный" код без сброса кэша, и поэтому ситуация будет полностью аналогична тому, что происходит с присваиванием указателей (см. предыдущие посты).
#irl #hate
БЛЯДЬ КАКОЙ ЖЕ УЕБАНСКИЙ ТЕКСТОВЫЙ РЕДАКТОР У ТЕЛЕГРАММА, СУКА, ПОСТОЯННО ВЁРСТКА КОДА СЛЕТАЕТ БЛЯДЬ Я ПОЛ ЧАСА ТУПО КОПИРОВАЛ ЭТУ ТЕЛЕГУ ТЕКСТА ИЗ ТЕКСТОВОГО ФАЙЛА
😁1
This media is not supported in your browser
VIEW IN TELEGRAM
#irl
Моя супруга приготовила торт ^_^ Но я его вам не дам :P
😁1
Раз уж я показал, чем занимается моя супруга, то расскажу ещё чем я недавно занимался.

#prog #rust
Решил я что-нибудь простенькое растовое запилить для наполнения портфолио. Чисто чтобы хоть что-то показать.
Сделал я две штуки:

1. Есть одна нерешённая математическая проблема (одна из, их на самом деле целое море) - гипотеза Коллатца. Гипотеза гласит, что абсолютно любое натуральное число n сведётся к 1, если применять к нему следующие преобразования: если число чётное - делим его на 2, в противном случае - умножаем на 3 и прибавляем 1. Так же эта гипотеза называется "3n+1 дилемма", или "сиракузская проблема" (потому что такая последовательность чисел, построенная в результате этих преобразований, называется "сиракузской").
Это нерешённая проблема математики, потому что не получается математически доказать, что она верна, и не получается найти контр-пример, чтобы доказать, что она не верна.

Сопсна, что сделал я? Да особо ничего выдающегося, простенький трейт-итератор, который позволяет для любого числа вызвать метод collatz_iter(), по которому можно проитерироваться по всей сиракузской последовательности для этого изначального числа. То есть написать что-то такое:
for n in 8.collatz_iter() {
print!("{} ", n);
}

что выведет:
8 4 2 1

Чтобы было поинтереснее, я посыпал сверху немного macro_rules!, cargo-фичи, Resultы, ну и сопсна всё.

Полистать код (его совсем не много) можно здесь.
Немного туп(л,)
Раз уж я показал, чем занимается моя супруга, то расскажу ещё чем я недавно занимался. #prog #rust Решил я что-нибудь простенькое растовое запилить для наполнения портфолио. Чисто чтобы хоть что-то показать. Сделал я две штуки: 1. Есть одна нерешённая математическая…
2. Вторая штука позабористей, да и делать я её начал раньше, но всё-таки она оказалась посложнее, и код там сейчас очень не очень 🌚

Возьмём число π (Пи). Это бесконечная непериодическая десятичная дробь. Раз она бесконечная и непериодическая, значит в её записи (после запятой) можно найти абсолютно любое другое число. А значит, что можно взять любой файл с вашего компуктера, представить это байты в виде числовой последовательности, потом найти эту числовую последовательность где-то в числе π, и запомнить позицию первой найденной цифры и длину этой последовательности. То есть, условно, превратить ваш гигабайтный видосик в два числа.
На основе всего вышеперечисленного реализован проект πfs. То есть это файловая система, которая "на лету" ищет ваши файлы в числе π и сохраняет два числа: позицию и длину.

Собственно я посмеялся, потому что с одной стороны это очень круто, с другой стороны нифига не практично (ибо считаться этот ваш фильм на пару гигабайт будет миллионы лет). Но подумал: а можно ли сделать лучше? Ибо вот, например, пишу я код, часто меняю один и тот же файл, и его постоянно приходится пересчитывать в этом числе π. Лишний жор ресурсов! А что если сделать... архиватор? Ведь файлы архивируются не так уж часто, значит можно потратить время и посчитать нужные циферки, тем более что весь этот процесс можно распараллелить на тысячи мощных ЭВМ, и архивировать таким образом особо важные файлы, которые терять нельзя. И... Да, я сделал свой архиватор на базе числа π.

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

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

Но спецификация явно сырая, архиватора ещё нет, НО (sic!) есть разархиватор! Правда у него много ограничений, например я решил начать работать преимущественно на целых числах, ибо это быстрее, поэтому если пытаться посчитать "далёкую" цифру числа π, то очень быстро происходит переполнение и паника. В общем код там откровенное говно, но спецификация мне более-менее нравится. Дошлифовка явно нужна, но уже вполне жизнеспособно, кмк.

Собственно, репозиторий здесь (но про качество кода я предупредил).
#irl

Хозяйке на заметку:
Если высокая температура долго не сбивается обычными средствами на базе парацетамола, можно принять ибуклин. Ибуклин можно купить как готовый препарат, а можно сделать самостоятельно, ибо это 400 мг ибупрофена и 325 мг парацетамола. Всё, остальные вспомогательные вещества в составе - это оболочка таблетки, наполнители для увеличения объёма таблетки, подкрашивание и так далее.

Собственно, "приготовить" ибуклин дома легко, если есть парацетамол и ибупрофен в "чистом" виде. Но есть нюанс.
Ибупрофен обычно дозируется кратно 200 мг на таблетку (я встречал дозировки только 200 мг и 400 мг), так что "собрать" 400 мг будет легко. А вот с парацетамолом чуть сложнее.

Стандартная дозировка парацетамола в таблетках - 500 мг на 1 таблетку. 500 мг делить на 325 мг не очень удобно. В принципе, когда мне это надо я не в состоянии считать, как там надо дробить таблетку, поэтому пью целую. И вот не советую так делать. ОСОБЕННО если до этого вы пили некоторое другое средство на базе парацетамола. По-хорошему это вам надо:
1. Определить, сколько часов/минут назад было выпито средство
2. Найти инструкцию к выпитому препарату и посмотреть, сколько в его составе парацетамола
3. Запомнить (или скорее нагуглить), что период полувыведения парацетамола у взрослых составляет 2,7 часов и что выводится оно в основном с мочой.
4. Посчитать, сколько парацетамола осталось в вашем организме.
5. Скорректировать количество парацетамола, которое надо сейчас выпить.

А то если этого не сделать, будете как я: вчера весь день лежал с температурой 38,5, не сбивалась никак, пил парацетамоловые порошочки и спал. В итоге вечером плюнул и "приготовил" себе ибуклин. Так как с температурой думать толком сил не было, никаких пересчётов не производил и хряпнул 500 мг парацетамола + 400 мг ибупрофена. Когда проснулся на градуснике было 36,1, что тоже, знаете ли, не очень хорошо. По идее, сбивать температуру надо до 37,5, не ниже. И сейчас объясню почему.
Немного туп(л,)
#irl Хозяйке на заметку: Если высокая температура долго не сбивается обычными средствами на базе парацетамола, можно принять ибуклин. Ибуклин можно купить как готовый препарат, а можно сделать самостоятельно, ибо это 400 мг ибупрофена и 325 мг парацетамола.…
Наш организм сложная хреновина. И у него есть порой странные способы работы. Особенно "странно" работает иммунитет.

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

Однако, при слишком сильном воспалительном процессе будет плохо. И в данном контексте наибольшей вред представляет повышение температуры.
Мы состоим преимущественно из белка, особенно наш мозг это жир и белок, и нагревание или существенное изменение ph, приводит к последовательному нарушению четвертичной, третичной и вторичной структур белка. Называется это "денатурация". Вообще, прям реально опасным повышением температуры будет 40+ градусов, а действительно разрушение белка начнётся где-то в районе 42 градусов, но лучше до такого не доводить. Врачи рекомендуют сбивать температуру 38+. Я для себя начинаю сбивать с 38,5.
А температура 37, 37,5 это НОРМАЛЬНАЯ температура. Можно, блин, коленом удариться и получить повышение температуры до этих самых 37,5, потому что колено воспалилось и пошёл весь тот же самый процесс работы иммунной системы.

Не сбивайте температуру, если она ниже 38, дайте организму работать.

Не, естесна есть исключения. Ну вот например вы в дороге и вам схреновилось. А до дома ещё часов 12. Тут без вопросов - надо сбить температуру до комфортных значений, чтобы дойти до дома и не помереть по дороге. Как ни крути, а лечение любых ОРЗ/ОРВИ это на 99% симптоматическое лечение, так что "убитие" симптома тоже "лечение".
Немного туп(л,)
Наш организм сложная хреновина. И у него есть порой странные способы работы. Особенно "странно" работает иммунитет. Так, при обнаружении вирусного/бактериального недруга в организме какие-то там клетки иммунитета вызывают воспалительный процесс в организме.…
Да, и ещё кое-что: хочу рассмотреть парочку мифов и заблуждений о лекарствах и методах лечения.

1. Про лекарства: ингавирин, арбидол, эргоферон, гриппферон, кагоцел.
Прежде, чем про них говорить задам вопрос: а вы уже что-то из этого принимаете? Стабильно, каждый раз когда заболеете? Если ответ на все вопросы "да", то переходите сразу ко второму пункту и НЕ ЧИТАЙТЕ скрытый текст.
А теперь для тех, кто их никогда не принимал: это всё фуфломицины. Они не работают. Тот же ингавирин - есть два препарата на базе одно и того же действующего вещества (имидазолилэтанамид пентадионовой вислоты) - наш с вами ингавирин, позиционирующийся как "противовирусное", и "Дикарбамин", позиционирующийся, как "стимулятор кроветворения". Бывает ли такое? Бывает. Но не в рамках двух препаратов (вспомните виагру). Кроме того, у ингавирина из побочных эффектов только аллергия (что связано с красителем Понсо в составе капсулы), и совершенно нет данных о передозировке. Бывает ли такое с нормальными медицинскими препаратами? Нет, не бывает. У того же "септолете" среди побочек - кома и смерть. Живите теперь с этим знанием.
Другие интересные препараты - эргоферон, гриппферон и прочие "фероны", которые якобы содержат интерферон. Да, содержат. Но на самом деле не содержат. Потому что это чистой воды гомеопатия. То есть взяли (условно) 1 г интерферона и растворили его в 10 тоннах воды. После из этого раствора взяли воды в пипетку и одну капельку плюнули вам на таблеточку. Математические расчёты о гомеопатии оставлю другим, благо много кто уже это делал (на
ютуб-канале "Химия-Просто" Саша даже гомеопатическую серную кислоту пил).

А, собственно, почему этот текст скрыт: самовнушение. Оно, чёрт возьми, работает. Давным давномы всей семьёй пили арбидол, и нам помогало. А я несколько лет назад при первом насморке бежал в аптеку и покупал эргоферон. И мне помогало! Я за 2 дня проходил от температуры 37,5 до полного выздоровления на римантадине и эргофероне! Так что самовнушение это вещь, и если состояние больного не критическое, пусть самовнушается, не мешайте ему.

2. Римандатин.
Хорошее противовирусное достаточно широкого спектра действия. Да, оно против других вирусов, не простудных, но за счёт "размазанности вширь действия" бьёт и по простуде. Однако, почти все современные вирусы получили резистентность к римантадину, поэтому применять его особого смысла нет, а нагрузка на почки и печень от него очень большая, так как римантадин очень токсичный препарат.
Немного туп(л,)
Да, и ещё кое-что: хочу рассмотреть парочку мифов и заблуждений о лекарствах и методах лечения. 1. Про лекарства: ингавирин, арбидол, эргоферон, гриппферон, кагоцел. Прежде, чем про них говорить задам вопрос: а вы уже что-то из этого принимаете? Стабильно…
3. "Больного с температурой надо замотать в тридцать одеял и ни в коем случае не раскрывать".
Бездумное выполнение этой "традиции" может убить. Серьёзно, я не шучу. Особенно это касается маленьких детей. Если у человека, особенно у ребёнка очень высокая температура и она не сбивается - надо его охладить. Наоборот убрать все одеяла, приоткрыть немного окошко, положить на лоб прохладную мокрую тряпку, снять девять кофт, оставив одну сухую футболочку. Вы это делаете, чтобы остудить организм и он не убил себя сам от перегрева (см. пред-предыдущий текст).
ОДНАКО, нельзя сказать, что эта "традиция" совершенно глупа и бесполезна. Когда вы находитесь под толстым слоем одеял в кофте, тёплых носках и штанах, вы подогреваете воздух вокруг себя (потому что вы - горячий), этот тёплый воздух не может выйти наружу (потому что вы плотно обмотались одеялами), начинает подогревать уже вас снаружи, и так далее. В итоге это должно привести к тому, что вы начнёте потеть. А потовыделение - основной инструмент терморегуляции нашего организма. За счёт создания "жары" вокруг себя вы заставляете себя потеть. Тем самым вы снижаете собственную температуру без дополнительных медикаментов, да ещё и с потом часть шлака из организма выйдет. Я при невысокой температуре (37,5-38) вообще обматывался пищевой плёнкой (поверх кофты и тёплых штанов), чтобы вызвать более интенсивное потение. Но не советую так кому-то делать, очень большая нагрузка на и так болеющий организм.

4. "Если насморк лечить он проходит за 7 дней, а если не лечить, то за неделю".
Иииииии, это действительно так. Но есть нюанс! Это касается только лёгкой формы заболевания.
Сопсна, повторюсь, де-факто 99% лечения любых ОРЗ/ОРВИ - это симптоматическое лечение. То есть мы лечим сиптомы, а не саму причину болезни, чтобы не помереть от этих симптомов (см. про температуру) и облегчить себе жизнь (это про насморк, головную боль и т.д.).
Это не потому что всем насрать, или не потому что "злобные фарм корпорации не хотят продавать одну таблетку от простуды, а хотят продавать 10 таблеток, по одной на каждый сиптом, и тем самым обогатиться на нас!", - нет. Всё проще, вирусы вообще сложно убить. Тот же римантадин - больше практически не работает из-за выработки резистентности. И вирусы приспосабливаются очень быстро. Та же история и с бактериями и антибиотиками, но антибиотики НАДО пить (если их врач прописал), потому что иммунитету самостоятельно справиться с бактериями много тяжелее, чем с вирусами. Ну и как-то создание новых видов антибиотиков даётся фарм-компаниям проще, чем создание новых противовирусных препаратов.
#jobbing

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

Но пока что у меня мини-жалоба. Меня тут припрягли участвовать в собеседовании кандидата на должность системного администратора, ответственного за CI/CD. Проблема в том, что я понятия не имею, что спрашивать. Моей квалификации в этом вопросе достаточно, чтобы самому это настроить (используя гугл и метод научного тыка), но совершенно недостаточно, для оценки чужой квалификации.
#rust #prog

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

https://habr.com/ru/company/timeweb/blog/697882/
#sysadm

Небольшая статейка со сравнением NFS, Samba и SSHFS (он же SFTP). С недавних пор это нужные мне знания. Надо бы рассказать об этом, да чот времени всё нет...

https://blog.ja-ke.tech/2019/08/27/nas-performance-sshfs-nfs-smb.html

Добавлю пару слов: Исходя из бенчмарков из статьи, плюс учитывая особенности местности, где это будет применяться, вероятнее всего мой выбор падёт на NFS без шифрования, ибо доверенная сеть. По крайней мере я думаю, что доверенная. Если мне всё же скажут не считать сеть доверенной, то моим выбором будет SSHFS, потому что основным сценарием использования будет последовательные чтение и запись.
#haha

BorgBackup - утилита для резервного копирования. В основном для линупсов, но есть альфа версия поддержки винды. Она настолько альфа, что в README написано:

Build Requirements
- [bla-bla-bla]
- [bla-bla-bla]
- Patience and a lot of coffee / beer
(c) borg
#jobbing

Итак, я созрел, чтобы рассказать о том, что у меня происходит.

Уже две недели как уволился последний сисадмин из нашего департамента. То есть, в конторе есть отделы инженеров и админов (первые ставят и подключают железку, вторые - настраивают эту железку), но у нас в департаменте всегда был собственный штатный системный администратор, в задачи которого входит (или скорее входило) обслуживание нашего небольшого железного зоопарка, администрирование нашей подсети, где всякие DNS, DHCP, Jabber-сервер, локальный сайтик, починка машин сотрудников департамента, администрирование нашего Jenkins'а, Redmine'а, и прочее тому подобное. То есть тут и немного эникейства, и обычное "типичное" сисадминство, и обслуживание CI/CD. Плюс сверху (из-за особенностей нашего департамента) насыпалось некоторое количество задач, связанных с составлением некоторой документации и спецификаций оборудования.

И вот, последний сисадмин ушёл, а нового нанять не успели (да и не особо как-то торопились, блядь). И теперь обязанности этой должности были разделены между мной и моим начальником. Без доплаты, разумеется :(

По идее, обязанности распределены "по мере возможности", то есть кто свободен, тот проблему и решает. Но по факту, я забрал себе CI/CD, всё связанное с линупсами, починка умирающих компов (буквально сегодня пришлось умирающий диск менять), и починка зависших ftp/jabber/dhcp/dns и так далее. Начальнику досталось администрирование контроллера домена (он раньше этим уже занимался у нас тут), составление спецификаций, оформление заявок на оборудование и материальная ответственность. Вот то, что последнего на мне нет, это я рад :D

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

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

Спасает только одно - нам очень помогает сисадмин, который был до этого сисадмина, проработал у нас в департаменте кучу лет, фактически сам это всё у нас поднял и настроил, и потом перевёлся в другой департамент. Если бы не он - я бы совсем опух тут.
👏1🤔1🤯1
#irl

Укатили с женой в Воронеж. Зачем? Затем, что мы взрослые люди, и если мы хотим уехать на выходные в Воронеж, то мы садимся на поезд, и едем на выходные в Воронеж!

Ну как "на выходные". Мы сели в поезд в 2 часа ночи. Приедем в 12 часов дня. Протусуемся там до 6 утра воскресенья и покатим обратно. А обратный путь займёт 18 часов...

Так что, по сути, мы на этих выходных тусим не в Воронеже, а в поездах междугороднего сообщения 🌚
😁1
Немного туп(л,)
#irl Укатили с женой в Воронеж. Зачем? Затем, что мы взрослые люди, и если мы хотим уехать на выходные в Воронеж, то мы садимся на поезд, и едем на выходные в Воронеж! Ну как "на выходные". Мы сели в поезд в 2 часа ночи. Приедем в 12 часов дня. Протусуемся…
Итак. Пока мы проехали треть обратного пути, можно немножечко порефлексировать.

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

Поезд нам достался двухэтажный. Я раньше очень часто катался на поездах всяких разных видов, но на двухэтажном - впервые. Провели мы в этом поезде чуть больше 10 часов, и почти всё это время мы спали. Соседями по купе нам стали крайне доброжелательный и добродушный спецназовец (если что, тут нет сарказма, реально очень приятный парень) и, как я их называю, "типичный гражданин дальнего следования". Большую часть времени он спал, потом вышел в купе и вплоть до нашего выхода стоял у окна напротив купе. Если что, мы его не выгоняли и где сесть - ему было 😅

В общем, поездка прошла нормально. Я не особо оценил двухэтажный поезд: низко, из-за этого неудобно запрыгивать на верхнюю полку, но в принципе ничего плохого прям сказать не могу. Надо будет ещё пару раз на таком прокатиться, чтобы сложить полное впечатление.
Немного туп(л,)
Итак. Пока мы проехали треть обратного пути, можно немножечко порефлексировать. Из нашего города N в Воронеж поезд отправлялся в 2 часа ночи. В принципе норм, у нас даже были планы лечь поспать перед поездкой. Но вот с этим как раз возникли проблемы из-за…
Дальше нас встретил Воронеж. Встретил прохладно. Тут в меня сразу интересные воспоминания: когда я в первый раз приехал в Питер (мне было 14 или 15 лет), я выходил из поезда на перрон в приподнятом, даже можно сказать благоговейном настроении, ведь "такой город, такой город", и с первого же шага я подскользнулся (короче, с момента знакомства Питер пытался меня убить 🌚), но потом я с Питером стал на "ты". Воронеж встретил просто холодно. Ибо погода. Мороз и мелкий, но острый и неприятный снег. Но приемлемо, я в Питере 5 лет жил, и не такое бывало.

Прибыли мы в Воронеж в 12 часов дня, а конкретная цель нашей поездки, должна была случиться в 7 вечера, поэтому были ещё "дополнительные цели посещения".

Первой целью был корабль-музей "Гото Предестинация". Навигатор говорил, что пешком до него идти 32 минуты, а общественным транспортом - 30 минут, из который 19 минут всё равно пешком. Поэтому мы пошли полностью пешком. "Хорошая идея", подумали мы, мол и город посмотрим, и прогуляемся. Нет. Плохая была идея.

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

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

Следующим побочным квестом было посмотреть на памятнику Биму, который Чёрное ухо. Тут и дорога опять вверх-вниз по-началу, и начала портиться погода и снег начал превращаться в дождь. Но пока ещё было норм. И мы дошли до памятника Биму. Точнее до того места, где он должен стоять. Потому что памятника не было. Гугл подсказал, что его убрали из-за реконструкции площади перед театром. Но в общем мы опечалились.

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

Погода, тем временем продолжала портиться. В принципе, ещё дополнительных квестов по посещению каких-то мест мы себе не брали и были готовы двигать в сторону основного квеста. Но был ещё квест на "магнитики"...

Погода портилась. Мы заскочили в магазин канцтоваров, где искомого не было, но нас отправили в соседний ТЦ (20 минут пешком до него). А погода портилась. Это уже был средне-крупный дождь, который замерзал из-за ветра и температуры в -1, поэтому было очень холодно, очень мокро и очень скользко. Но мы дошли туда, куда нас отправляли. И по моей вине пошли в другой ТЦ через дорогу. Потратили минут 40, чтобы понять, что что-то не так, и найти нужный ТЦ. В общем, в итоге квест с магнитиками был выполнен. А погода продолжала портиться...

Есть в Воронеже очень крупный ТРЦ "Сити-парк Град", нам даже сказали, что это "единственная такая крупная хреновина на несколько областей". Наш основной квест должен был пройти именно там. Но находится это заведение за чертой города. В принципе, достигнуть его было не трудно, хоть и волнительно, ибо незнакомый город, уже темно и маршрутка, где надо самому называть остановку. Боже, храни навигационные технологии!

Чтобы ещё потратить время и немного обсохли куртки мы пошли в парк аттракционов и немного покатались. Достойно, зачётно, недорого, рекомендую 👍

И вот, мы дошли до основного квеста...
💩1