Войдите или зарегистрируйтесь
Вы сможете писать комментарии и посты, ставить лайки и другое
Поиск
Тёмная тема

Посты пользователя: dima: страница 8


Танцующая парочка - новая скульптура в Ростове-на-Дону

1 г. назад
В Ростове-на-Дону на набережной появилась вот такая новая скульптура.
Показать полностью...
+4
183

Российское кресло

1 г. назад
Купили жене кресло в обычном оффлайн магазине. Привезли домой, собрали, всё хорошо.
Смотрим на коробке документ, а там адрес изготовителя - Россия, Белгородская область, город Шебекино.
Показать полностью...
+3
9

Ботанический сад осенью

1 г. назад
Осень - прекрасное время, чтобы сходить в ботанический сад.

Вечерние лучи красиво подсвечивают коричневые стволы сосен.
Чертополох.
Показать полностью...
+4
46

Собаководы, как же вы надоели

1 г. назад
В Ростове-на-Дону в центре отремонтировали территорию перед Музыкальным театром, сделали клумбы с подсветкой и капельным поливом, плюс несколько хороших фонтанов. И эту местность уже облюбовали собаководы! Играет классическая музыка, на струи фонтанов проецируется балет, а рядом уже половина гранитных углов обоссана псинами. Это даже не парк, по факту это часть здания, под всеми этими клумбами и фонтанами находится парковка театра.
Когда мы там были, работник театра в микрофон делала объявление, что с собаками вход воспрещён. Но собаководам плевать, им если любимая псина не обоссала угол - день прошёл зря.
+2
100

Прошёл The Excavation of Hob's Barrow

1 г. назад
Периодически играю в квесты на компе, как в старые, так и в новые. Из новых вот на днях прошёл The Excavation of Hob's Barrow. Игра вышла при поддержке Wadjet Eye Games, а я эту студию уважаю за серию Blackwell. Я в принципе прошёл почти все квесты от Wadjet Eye Games, поэтому пропустить The Excavation of Hob's Barrow не мог.
Игра требует серьёзного знания английского языка. Очень много мудрёных речевых оборотов, а русского перевода нет, это нужно иметь в виду.
Показать полностью...
+2
26

Что гложет Гилберта Грейпа

1 г. назад
Посмотрел "Что гложет Гилберта Грейпа" 1993 года. В главных ролях очень молодые Джонни Депп и Леонардо Ди Каприо.
Леонардо Ди Каприо так вообще выглядит как ребёнок, хотя актёру уже было 18 лет.
Показать полностью...
+2
16

"Мечтать" и "присниться" по-английски

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

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

Как нам Гугл переведёт?
Гугл сам не может определиться - мечтал или просто приснилось.
Показать полностью...
+3
81

Кого хотела убить сватья баба Бабариха?

1 г. назад
У меня младший сын обожает "Сказку о царе Салтане" Пушкина.
Я когда ему читаю вот эти строки:
А ткачиха с поварихой,
С сватьей бабой Бабарихой,
Не хотят его пустить
Чудный остров навестить.
аж интонация меняется в духе "ах какие они негодяйки".

Я никогда не задумывался, кто такая Бабариха. А оказывается, Бабариха - это бабушка (!) царя Гвидона:
Ни гугу — но Бабариха,
Усмехнувшись, говорит:
...
Молвить можно справедливо,
Это диво, так уж диво».
Гости умные молчат:
Спорить с бабой не хотят.
Чуду царь Салтан дивится —
А царевич хоть и злится,
Но жалеет он очей
Старой бабушки своей:
Он над ней жужжит, кружится —
Прямо на нос к ней садится,
Нос ужалил богатырь:
На носу вскочил волдырь

Пушкин прямым текстом говорит, что это бабушка князя Гвидона. Получается, родная бабушка приказала бросить внука в "бездну вод", по факту обрекала на смерть. А в конце сказки добрый царь Салтан пожалел всех негодяев, которые хотели его сына убить.

Вопрос только: Бабариха - это мать "царицы молодой" или мать Салтана? Что так, что так - дичь какая-то получается. В первом случае она хотела убить свою дочь и внука, во втором случае - убить свою невестку и опять же внука.
+3
80

Фотозаметки о Нью-Йорке: часть 2

1 г. назад
Первая часть: https://famabara.com/posts/120

Пешеходная арка в Централ-парке:
Вид на 10-е авеню.
Показать полностью...
+3
17

Ростовский зоопарк становится лучше

1 г. назад
Был с сыном в ростовском зоопарке, там появился новый вольер, где можно смотреть на козлов сверху.
Такой же подход в московском зоопарке. Очень удобно посетителям.
Животные как на ладони.
Показать полностью...
+2
6

Что-то слышал о Prodigy

1 г. назад
Сижу на работе, работаю работу, общаюсь с молодым коллегой о музыке, кто что слушал/слушает и прочее.
Сказал ему о Prodigy.
Он отвечает:
- А, да, слышал о такой группе.
У меня глаза округлились.
Да, у нас разница поколений, 15 лет почти, но если мне скажут про Beatles или Modern Talking, я буду прекрасно понимать о чем речь.

The Prodigy - это веха. Prodigy значимы для музыки так же, как значимы Deep Purple или Майкл Джексон.
+3
137

Фотозаметки о Нью-Йорке: часть 1

1 г. назад
Детализированность отделки некоторых зданий просто поражает.
Мы уже привыкли, что дорожки в парках обычно из тротуарной плитки. А вот в Нью-Йорке это может быть обычный асфальт.
Показать полностью...
+3
16

Эффективность использования всех ядер процессора в NodeJS с помощью cluster

1 г. назад
Для повышения производительности приложений на NodeJS во всех материалах рекомендуется использовать нодовский встроенный модуль cluster. Все статьи повторяют одно и то же, что и так написано в документации.
Вот официальный пример из доки:
import cluster from 'node:cluster';
import http from 'node:http';
import { availableParallelism } from 'node:os';
import process from 'node:process';

const numCPUs = availableParallelism();

if (cluster.isPrimary) {
  console.log(`Primary ${process.pid} is running`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  // In this case it is an HTTP server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}
А теперь поделюсь своими исследованиями и расскажу, что не так в этом примере и как это можно улучшить.

Во-первых, некорректен нейминг переменной numCPUs. На моём компьютере, на котором тестировал производительность, стоит процессор Intel i7-13700, в нём всего 16 ядер. Сайт Intel так и пишет:
Обратите внимание: 16 ядер и 24 треда. И нода после вызова availableParallelism() возвращает число 24, а не 16. Так что это не ядра, а треды.

Во-вторых, большинство нодовских приложений - это обычные API. Какой-нибудь REST API, гоняющий туда-сюда JSON. А берётся этот JSON в большинстве случаев из базы данных вроде PostgreSQL. Многие сайты, описывающие работу с модулем cluster в качестве примера, почему-то возвращают моковые данные, захардкоженные прямо в коде, а в реальную базу данных не лезут. И потом делают нагрузочное тестирование по этим данным. Т.е. при таком подходе на каждом ядре сидит по процессу NodeJS и другие процессы не мешают их работе, не заставляют переключать на себя внимание ядра.

А теперь давайте проведём тест на реальной работе REST API. Это будет GET-запрос за сущностью по её id. Чтобы сформировать JSON этой сущности, нода совершает не один, а несколько сложных запросов в базу данных. Кэширование в глобальных переменных или в Redis не используется.

Для тестирования я использовал пакет bombardier, написанный на Golang.
go install github.com/codesenberg/bombardier@latest

Сначала провёл тест на Windows 10.
Запускаю:
bombardier http://127.0.0.1:7100/api/some/1101
Результат без cluster:
Bombarding http://127.0.0.1:7100/api/some/1101 for 10s using 125 connection(s)
[=================================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec      2754.89    1413.90    5813.88
  Latency       45.31ms     1.95ms    72.43ms
  HTTP codes:
    1xx - 0, 2xx - 27625, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     9.99MB/s
Результат с cluster (все 24 потока):
Bombarding http://127.0.0.1:7100/api/some/1101 for 10s using 125 connection(s)
[=================================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec      8424.89     801.49   15177.67
  Latency       14.84ms     1.69ms    72.64ms
  HTTP codes:
    1xx - 0, 2xx - 84224, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    30.54MB/s
Разница по производительности почти в 3 раза.
Показать полностью...
+3
38

Может ли россиянин позволить себе квартиру в Москве?

1 г. назад
Согласно данным Росстата в 2023 году среднемесячная номинальная начисленная заработная плата работников в Москве была 138882 рублей.

Для сравнения:
Ростовская область - 52100 руб.
Краснодарский край - 58256 руб.
Волгоградская область - 51833 руб.
Средняя по всей России - 74854 руб.

Согласно данным Циана в 2023 года стоимость среднего московского квадратного метра в новостройке была 291000 рублей.

Теперь предположим, что у нас семья из 4 человек - мама, папа, двое детей. Оба родителя работают (хотя часто один не работает, но, ладно, пусть работают оба). Такая семья должна жить в человеческих условиях, а не в однушках или в "студиях", прости-господи. Адекватная (!) минимальная площадь квартиры должна быть от 60 м2 для 4 человек, т.е. каждому хотя бы по 15 м2.

Таким образом, чтобы купить такую квартиру им нужно 60 * 2910000 = 17,46 млн рублей.

Давайте теперь считать - сколько месяцев должны работать родители, причем не есть, не пить, не платить коммуналку, не покупать одежду и прочее, чтобы накопить на такую московскую квартиру.

Ростовская область: 17460000 / (52100 * 2) = 167 месяцев = 13,9 лет.
Краснодарский край: 17460000 / (58256 * 2) = 150 месяцев = 12,5 лет.
Волгоградская область: 17460000 / (51833 * 2) = 168 месяцев = 14 лет.
"Средняя" Россия: 17460000 / (74854 * 2) = 116 месяцев = 9,7 лет.
Москва: 17460000 / (138882 * 2) = 63 месяца = 5,2 лет.

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

По факту получается, что рядовой российской семье квартира в Москве никогда не светит. В противном родителям придётся более 20 лет работать, чтобы уже ближе к старости получить эти убогие 60 квадратных метров в муравейнике.

Квартиры в Москве доступны... только москвичам. Какой-то заколдованный круг.
Показать полностью...
+6
322

Ford Focus 3: не заводится, делает чик-чик-чик, когда пытаешься завести

1 г. назад
Пишу, может кому поможет.
Дано авто: Форд Фокус 3 2013 года выпуска (дорестайлинговая версия), двигатель 1,6 л, 125 лс.
Сажусь в машину, завожу ключом, но машина лишь издаёт "чик-чик-чик" и гаснет экран. Сразу мысль на аккумулятор - я его не менял с момента покупки авто, а уже прошло 11 лет. Вообще, это мегарекорд для обычного автомобильного аккумулятора, обычно они 3-7 лет служат.

Нахожу на Авито объявление "прикурить/заменить" аккум. Звоню, выбираю аккум, через полчаса приезжает человек, меняет аккумулятор. Делов на 10 минут.

Кстати, на ютубе есть ролик, где человек на Фокусе 3 меняет аккумулятор и сначала снимают плюсовую клемму. Так вот это небезопасно, может долбануть током!

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

Человек, который менял на моём Форде АКБ тоже удивился, когда узнал, что батарея родная за более чем 11 лет, в его опыте это тоже рекорд службы. На российских фордах тогда ставили вроде бы немецкие Варты, как теперь видно очень хорошая фирма оказалась.

Любопытно, что у меня даже в ключе стоит до сих пор родная батарейка. Разобрал ключ - CR 2032 3V Panasonic. Во раньше качество делали!
+3
83

Стоит ли идти в Исторический музей на Красной площади

1 г. назад
Государственный исторический музей - замечательное место, обязательно стоит пойти.
Есть масса интересных исторических экспонатов.

Личный автомобиль Ленина? Пожалуйста!
Бивни мамонта с берегов Енисея.
Показать полностью...
+3
21

Передача по ссылке и передача по значению в JavaScript

1 г. назад
Насколько хорошо вы знаете JavaScript?
Как в JS передаются значения - по ссылке или по значению? Не спешите, подумайте даже если вы "мидл" или синьор-помидор.
let str1 = 'Famabara';
let str2 = str1; // Тут копия или новая строка?

let obj1 = { name: 'Famabara' };
let obj2 = obj1; // Тут копия или новый объект?

Можете в опросе ответить:
Как передаются значения при присвоении в переменную или в свойство объекта?
Теперь посмотрим, что нам говорит learn.javascript.ru - очень популярный в рунете учебник JavaScript:
А теперь давайте запустим в NodeJS такой код:
const arr = [];

for (let i = 0; i < 1200200; i++) {
  arr.push('0123456789'.repeat(1000 * 1000));
}

while (true) {
}

После запуска смотриим программой top потребление ресурсов:
39858 dima      20   0 2026180   1,0g  37824 R 100,0   3,2   0:21.44 node 
На моей Кубунте сожрано 1 Гб оперативки. Ух ты.

Теперь изменим немного код:
const arr = [];
const text = '0123456789'.repeat(1000 * 1000);

for (let i = 0; i < 1200200; i++) {
  arr.push(text);
}

while (true) {
}

Смотрим ещё раз через top:
40267 dima      20   0 1066148  73796  37440 R  99,7   0,2   0:12.27 node

Программа потребила всего 73 Мб вместо 1 Гб. Согласно популярной теории о копировании примитивов такого быть не должно. ;)

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

Кстати, на ноде в Windows 10 аналогичное поведение - около 1 Гб потребление против менее 100.

Ну, а теперь главный секрет! :)
В JavaScript всё передаётся/копируется по ссылке!
Показать полностью...
+4
103

Популярность Vue.js в 2024

1 г. назад
Это перевод моего англоязычного поста - https://famabara.com/posts/108

Попытаюсь измерить попурлярность Vue.JS. Я очень люблю этот фреймворк, поэтому всецело за его популяризацию :)

Сначала давайте посмотри на статистику скачиваний на NPM.
Сейчас и год назад:
vue - 4,868,119 - 3,746,361
@angular/core - 3,416,382 - 3,015,855
react - 23,763,131 - 20,548,838

Как видно, по абсолютным значенияем React на первом месте. Ну, а VueJS занимает только второе место.

А теперь посмотрим на относительный рост в процентах по отношению к прошлому году.
vue +29,9%
angular +13,3%
react +15,6%
Ура! Популярность Вью растёт быстрее, чем у остальных из "большой троицы".

Ну а теперь пройдусь по сайтам из топа Гугла и посмотрим, какие там используются фреймворки.
В качесте тестового запроса взял англоязычный запрос "rent car".
Юзал Wappalyzer - это расширение для браузера, чтобы детектить используемые технологии.

Вот список сайтов; NF - означает "нет фреймворка из большой троицы".
rentalcars.com - NF
enterprise.com - NF
kayak.com - React
avis.com - NF (есть старый AngularJS)
localrent.com - Vue
hertz.com - NF (есть старый BackboneJS)
sixt.com - React
budget.com - NF (есть старый AngularJS)
zipcar.com - NF
turo.com - React
autoeurope.eu - NF
alamo.com - React
rent.toyota.co.jp - NF
booking.com - React
costcotravel.com - React
borent.nl - NF
europcar.com - Vue
turo.com - React
vipcars.com - NF
skyscanner.net - React
tripadvisor.com - NF
timescar-rental.com - NF
klook.com - Vue
wiberrentacar.com - Vue
uber.com - NF
dollar.com - React
edreams.com - Vue
nationalcar.com - NF
thrifty.com - NF

Ну что, всё очень неплохо для Vue.JS! Он постепенно захватывает англоязычные сайты.
Показать полностью...
+4
61

Мел Брукс получил почётный Оскар

1 г. назад
Мел Брукс один из моих любимых режиссёров, очень нравятся его пародии. Оказывается, в этом году он получил почётный Оскар - "Премия за выдающиеся заслуги в кинематографе". Это как бы отдельная премия вне "текущего сезона", ею награждают видных кинодеятелей.
Автор фото: KEVIN WINTER/GETTY

Оскар вполне заслуженный, он классный пародийный режиссёр.

Мы с женой очень любим пересматривать "Дракула: Мёртвый и довольный" (Dracula: Dead and Loving It). Комедия особенно хороша в переводе Сербина.
Показать полностью...
+2
23

Как я сражался на сервере с вирусом-криптомайнером, маскирующимся под PostgreSQL

1 г. назад
Целая детективная история разыгралась на моём сервере.

Дано: небольшой арендуемый у хостера сервер с Debian 12 и последней PostgreSQL 16. Постгрес стоит без всяких докеров.

Месяц назад начал тормозить сервак. Думаю, что за ерунда, захожу по SSH, ввожу:
top
и вверху поверх всякой мелочи вижу это:
 PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
2251 postgres  20   0 2445140   2,3g      4 S 400,7  14,7   6:20.66 kswapd0
Жрёт все ресурсы, процессор загружен полностью.
Зарождается слабая мысль о криптомайнерах, но пока не понимаю, как вирус проник на сервер. Пароль у рута сложный, да и тут про постгрес написано.

В общем, думаю - ну, заглючил PostgreSQL, наверное. Убиваю процесс и перезагружаю сервак (это всегда полезно):
kill 2251
reboot
Захожу по SSH снова - чисто. Ну, думаю, всё ок.

Потом опять тормоза через некоторое время. Смотрю - эта хрень опять запущена. И странно как-то всё, причём тут юзер postgres?

Полез гуглить. Про этот kswapd и нагрузку на проц много разрозненных сообщений. Народ про него пишет и 2013, и в 2017, а у меня вообще-то 2024 на дворе, а ведь в те годы не было ещё криптовалют.
Может это не криптомайнер, а что-то другое?
Пытаюсь понять, кто запускает процесс. Делаю:
ls -l /proc/2251/exe
выводит:
lrwxrwxrwx 1 postgres postgres 0 июл 23 13:12 /proc/2251/exe -> /var/lib/postgresql/.configrc5/a/kswapd0
Такс... Находится в каталоге postgresql. А вдруг это важная часть сервера базы данных? Названо ведь так "по-умному" - configrc5.

Решаю просто переименовать каталог:
kill 2251
cd /var/lib/postgresql
mv .configrc5 _renamed_.configrc5
reboot
После этого всё хорошо... но только пару недель :)

Через эти пару недель опять веселуха с загрузкой всех ядер процессора.
Смотрю - каталог снова создан. Значит точно криптовалютный вирус. Но как зараза проникла на сервер?

Наконец-то до моей глупой головы дошло посмотреть логи SSH:
journalctl -t sshd
Опытные линуксоиды знают, что так смотреть не имеет смысла. Там толпы кул-хацкеров пытаются подключиться к серверу, но обламываются.
Фильтрую только логи успешного входа по SSH:
journalctl -t sshd --since "2024-08-01" --until "2024-08-16 10:00:00" | grep "Accepted "
И там среди моих заходов вижу эту падлюку:
Jul 06 11:40:07 debian sshd[589266]: Accepted password for postgres from 103.94.113.2 port 33482 ssh2
Jul 10 08:18:00 debian sshd[723300]: Accepted publickey for postgres from 162.217.64.26 port 60366 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
Aug 02 07:45:44 debian sshd[258599]: Accepted publickey for postgres from 206.189.36.236 port 47140 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
Aug 02 07:50:53 debian sshd[258915]: Accepted publickey for postgres from 157.245.42.37 port 50478 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
Aug 14 10:23:08 debian sshd[99132]: Accepted publickey for postgres from 82.165.79.77 port 40086 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
Aug 14 10:47:37 debian sshd[99723]: Accepted publickey for postgres from 103.146.52.138 port 55110 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
Ёлы-палы! Сначала чувак вошёл по паролю, а потом уже входил по ключу.

Ради интереса проверил айпишники:
103.94.113.2 - India
162.217.64.26 - USA
206.189.36.236 - Singapore
103.146.52.138 - Hong Kong
Целый ботнет. Или VPN-ы. Не знаю, да и это не важно.

Начинаю вспоминать, что когда ставил PostgreSQL, создавал примитивный пароль. Или вообще не задавал его - точно не помню.

Срочно меняю пароль юзеру postgres:
passwd postgres
и ставлю запрет входа SSH для определённых юзеров:
nano /etc/ssh/sshd_config
DenyUsers postgres no-reply blah
В идеале, конечно вообще всем запретить, а оставить только для разрешённых.

Перезагружаем SSH демона:
systemctl restart sshd

Кстати, это зараза прописала SSH-ключ в:
/var/lib/postgresql/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr
Разумеется это надо сразу удалять.
Показать полностью...
+3
62