Forwarded from Особенный айтишник LIFE🇷🇺🕊🌏 (Сергей Золотарев)
Forwarded from Особенный айтишник LIFE🇷🇺🕊🌏 (Сергей Золотарев)
Forwarded from Forbes Russia
Играя на гармошке: как на народном инструменте заработать 300 млн рублей в год
Выдержав конкуренцию с магнитофонами в 1980-х, едва не погибнув от рухнувшего спроса в 1990-х, производство тульской гармони возродилось в 2000-х. Сегодня компания «Тульская гармонь» выпускает шесть десятков моделей гармоней, баянов и аккордеонов — от детских до профессиональных.
Тульская продукция занимает около 80% российского рынка, давая 300 млн рублей годового оборота. Почти все комплектующие компания до сих пор выпускает самостоятельно, а корпуса инструментов расписывают вручную.
О том, как удалось возродить предприятие и почему гармошки и баяны снова популярны — в материале Forbes
Выдержав конкуренцию с магнитофонами в 1980-х, едва не погибнув от рухнувшего спроса в 1990-х, производство тульской гармони возродилось в 2000-х. Сегодня компания «Тульская гармонь» выпускает шесть десятков моделей гармоней, баянов и аккордеонов — от детских до профессиональных.
Тульская продукция занимает около 80% российского рынка, давая 300 млн рублей годового оборота. Почти все комплектующие компания до сих пор выпускает самостоятельно, а корпуса инструментов расписывают вручную.
О том, как удалось возродить предприятие и почему гармошки и баяны снова популярны — в материале Forbes
Forwarded from Forbes Russia
Жизнь взрослого человека состоит из поиска баланса между работой и личными делами, обучением чему-то новому и поиском личного счастья. А еще есть задача со звездочкой: на пути к последнему не потерять себя.
Кажется, что в реальности подобного баланса не существует — есть только череда выгораний, за любой светлой полосой в жизни сразу начинается черная, а все советы — пустой звук.
Попробуем вас переубедить и дать надежду. В этом выпуске мы говорим с топ-менеджером, которой удалось невероятное: победить выгорание, найти баланс между личными и рабочими интересами, выделить время на обучение и развитие навыков, а также не только руководить и строить карьеру, но и заботиться о подчиненных.
Слушайте в Apple Podcasts
В Звуке
На Яндекс.Музыке
И на другой удобной площадке
Кажется, что в реальности подобного баланса не существует — есть только череда выгораний, за любой светлой полосой в жизни сразу начинается черная, а все советы — пустой звук.
Попробуем вас переубедить и дать надежду. В этом выпуске мы говорим с топ-менеджером, которой удалось невероятное: победить выгорание, найти баланс между личными и рабочими интересами, выделить время на обучение и развитие навыков, а также не только руководить и строить карьеру, но и заботиться о подчиненных.
Слушайте в Apple Podcasts
В Звуке
На Яндекс.Музыке
И на другой удобной площадке
Forwarded from artalog (artalar)
Сегодня в 14-00 (gmt+3) в artalogg поговорим на темы:
- архитектура
- зачем нужна и какие вопросы решает
- как правильно строить связи между модулями на фронте
- сетевой слой
- интерсепторы
- gql vs rest
- trpc
- контракты, zod
Доступ: boosty.to/artalar
- архитектура
- зачем нужна и какие вопросы решает
- как правильно строить связи между модулями на фронте
- сетевой слой
- интерсепторы
- gql vs rest
- trpc
- контракты, zod
Доступ: boosty.to/artalar
Forwarded from artalog (artalar)
Как же меня достало вручную чекать обновление зависимостей после git pull. Почему у npm / yarn / pnpm нет (или есть) флага под это? Написал скрипт, вставьте его себе перед стартом дева
Вопрос только, можно ли как-то весь выхлоп из execSync форвардить выше? спасибо, обновил.
{
"dev": "node deps_check.mjs && vite”,
}
import { execSync } from 'child_process';
import { createHash } from 'crypto';
import { readFile, writeFile, mkdir } from 'fs/promises';
import { resolve, dirname } from 'path';
await mkdir(resolve(dirname(''), './node_modules/.cache')).catch(() => {});
const cachePath = resolve(
dirname(''),
'./node_modules/.cache/deps_check_lock_hash.txt',
);
const lockFilePath = resolve(dirname(''), 'package-lock.json');
const lockHashCache = await readFile(cachePath, {
encoding: 'utf-8',
flag: 'a+',
}).catch(() => {});
const lockHash = createHash('sha256')
.update(await readFile(lockFilePath, { encoding: 'utf-8' }))
.digest('hex');
if (lockHashCache !== lockHash) {
execSync('npm i', { stdio: 'inherit' });
await writeFile(cachePath, lockHash);
}