Famabara

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

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

Пожар из-за окурка сверху

Viki99
2 days ago
Снимаю квартиру в обычной кирпичной пятиэтажке, мой балкон находится в полуметре от другого балкона. Хозяйка этого балкона - московская бабушка, которая явно прожила всю жизнь в этой квартире. На её балконе было много залежалого хлама, какие-то журналы хранились и другие никому ненужные вещи.

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

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

Сначала была взвинчена во время пожара, а теперь какая-то сильная усталость накатила. Вот так проходят выходные..
+2
15

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

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

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

Бассейн и продвижение

sum
8 days ago
У нас недалеко от дома есть частный небольшой бассейн для детей 0+.
Несколько лет назад водила туда сына и обратила внимание, что детей ходит не очень много, тренеры уходят, цена растет достаточно резко.

Внимание вопрос: что они делают не так.

Обратила внимание, что практически нет продвижения, только наружная реклама на доме и сарафанное радио, возможно, ещё где-то наверняка есть листовки, но я не видела. Сайт не могу назвать продающим. Соцсети практически не ведутся.

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

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

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

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

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

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

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

dima
12 days ago
Для повышения производительности приложений на 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 так и пишет:
+3
5

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

dima
16 days ago
Согласно данным Росстата в 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 квадратных метров в муравейнике.

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

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

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

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

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

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

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

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

Рецепт ленивой овсянки

sum
20 days ago
+3
22

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

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

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

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

dima
26 days ago
Насколько хорошо вы знаете 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
21

Пошлости маркетинга

sum
26 days ago
Я думала, пошлости в рекламе остались где-то в 90х-2000х, но нет. Это по-прежнему актуально.

Вот яркий тому пример:
+2
24

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

dima
26 days ago
Это перевод моего англоязычного поста - 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
11

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

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

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

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

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

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

Дано: небольшой арендуемый у хостера сервер с 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
23

Яндекс Карты удобнее Google Maps

dima
1 mo. ago
Попользовавшись мобильными Яндекс Картами, а потом перейдя на Гугл Карты, понимаешь насколько у Яндекса удобнее интерфейс.
+2
22

Туалет в детском саду

sum
1 mo. ago
Сегодня пришла за ребенком в детский сад, а он был в туалете в это время. И я так удивилась, когда увидела в детском туалете дверцы кабинок!

У меня даже в школе не было, и в саду не было, и в другом саду у моих детей тоже не было. И я помню, что это всегда смущало.

Представьте взрослого человека в туалете без дверей, большинству было бы не очень комфортно. Почему же тогда у детей их не делали и не везде делают до сих пор.
+2
71

Риэлторы и застройщики врут о количество комнат в квартирах

dima
1 mo. ago
Как же надоели застройщики и риэлтеры, которые врут в своих объявлениях и рекламе. Написано - трёхкомнатная квартира, открываешь страницу, а там двушка. Или пишут двухкомнатная - а там однушка с кухней 15 м2. И вот эта кухня - это типа ещё одна комната по логике этих риэлтеров. Сволочи, задолбали.

Ну почему людей за идиотов держат? Это же только оттлалкивает людей. У покупателей есть голова на плечах, покупатель видит, что кухня - это кухня и никакой дополнительной комнаты нет. Что мешает тогда все кладовки и ванные комнаты записать в обычные комнаты? Теперь это не санузел, теперь это ванная-кабинет! 2 м2 ванная комната и аж 3 м2 кабинет!!!

Ладно, риэлтеры - черт с ними, у тех вообще совести нет, но застройщики-то почему обманывают?
Давайте пройдёмся немного по московским строительным компаниям.

Компания MR Rroup. Выбираю трёшки:
Показывает двушку вместо трёшки:
+2
11

Кассы в фастфудных

dima
1 mo. ago
Как хорошо, что современные фастфудные заведения имеют кассы самообслуживания.
Их всегда много, хватает на всех, очереди бывают крайне редко.

Ещё десять лет назад очень утомляли очереди на обычные кассы. Работало максимум два-три кассира, каждый заказ занимал много времени, особенно если много позиций. А теперь потыкал пальцем, оплатил картой и жди, когда твой номер появится на экране.

А на обычных кассах уже и кассиров часто нет, ибо не нужно никому:
+3
17

Очередной старинный дом сгорел в Ростов-на-Дону

dima
1 mo. ago
Старинное здание находится по адресу Серафимовича, 54. Это был доходный дом Ботвинникова, построен в 1910 году. Сегодня , 4 августа 2024 он сгорел.
Воду льют напором с нескольких шлангов. Что не уничтожено пожаром, будет уничтожено водой и дальше плесенью.
+2
11