Pull to refresh
18
-3.5
Максим @GenkaOk

Разработчик

Send message

Ощущение что мало кто понимает что такое тимлид, чем он отличается от проектменеджера. Хотя это вроде как то, с чего надо начинать. Как можно определить свои обязанности, не понимая что ты должен делать? Как можно назначать человека на должность не понимая, какую роль она выполняет?

Я когда-то достаточно комфортно для себя определил понимание что это такое через генезис тимлида в команде как самостоятельной роли. Есть небольшая команда из одного разработчика, у него есть ПМ и архитектор. Разработчик кодит, остальные подкидывают ему задачи на вход: архитектор говорит что и как должно получиться на выходе, ПМ что и к каком сроку должно быть сделано, планирует ему загрузку, все прекрасно. Объем задач в единицу времени возрастает и в какой-то момент разработчику перестает хватать физического времени все сделать. Он легко может написать разные участки кода на один продукт, но в один момент он может сделать только что-то одно из. Тогда мы берем и добавляем ему дополнительную голову и пару рук, в виде второго кодера, который сможет писать эти отдельные участки кода параллельно с первым. С первого снялась задача писать часть кода, но появилась задача админить второго: ставить ему конкретные задачи какие куски писать, сроки, контролировать выполнение. Для выполнения того же объема работ администрирвоание второго занимает значительно меньше времени, чем собственно написание кода. И админство это совсем другая работа: ты должен контролировать старт и финал того куска, который отдаешь второму кодеру. С довеском: надо контролить компетентность второго, оценивать риск его ошибок, предпринимать меры к их минимизации и исправлению.

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

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

Отсюда и следуют требования к нему.

  1. Опция -А позволяет пробрасывать свой ключ по цепочке, если заходить в несколько вложенных сессий. Иногда бывает нужно

  2. Тулза sshuttle позволяет автоматически настраивать роутинг в подсеть через ноду, к которой есть доступ по ссш. Тоже нужна редко, но метко

Сколько сложностей. Зачем вам кривая Ubuntu c проблемами вроде:
не запускалась малинка после очередного обновления ядра Linux

Находим файл vmlinuz, распаковываем его в эту же директорию (я использовал 7-Zip) и переименовываем в vmlinux

скаченном архиве идем в папку Boot и копируем (с заменой конечно же!) файлы с расширением .dat и .elf в загрузочный раздел нашего USB носителя

Ubuntu перестанет запускаться до тех пор, пока в загрузочном секторе мы снова не распакуем vmlinuz в vmlinux

Это все не нужно, потому что давно уже есть нормальный чистый Debian под Raspberry Pi 4 (и 3):
raspi.debian.net/tested-images
Причем сейчас там появились сборки с Bullseye, что означает куда более современный софт в репах. Мои платы на этих образах работают уже полгода, обновляться можно сколько угодно безо всякого опасения, что все слетит, все стабильно железно.
Монитор с клавиатурой не нужно, все можно поставить в headless режиме, в файл /boot/firmware/sysconf.txt можно прописать свой ключ для SSH и спокойно все настраивать удаленно.
Если так сильно хочется подключать плату по Wi-Fi, то вставляем SSID и пароль в файл /etc/network/interfaces.d/wlan0:
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid my-network-ssid
wpa-psk s3kr3t_P4ss


Дальше уже дело вкуса, но зачем вам Supervisor? Я лично поставил HA в Docker, настроил автоматизацию, что при обновлении мне падает сообщение в Telegram вида:
Update available.
Home Assistant 2021.3.4 is available.


После чего, когда мне удобно, я захожу по SSH в Debian на плате и запускаю скрипт ./update-hass.sh:
docker pull homeassistant/home-assistant:stable
docker stop home-assistant
docker rm home-assistant
docker run --restart=always -d --name="home-assistant" -v /home/user/homeassistant/:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant:stable
docker image prune --force


Последняя строчка подчищает скачанные образы, docker pull выкачивает новый, но старый остается занимать место на диске, со временем может много накопиться старых образов.

Вот и все, то есть обновить контейнер с HA несложно, а что еще может Supervisor? Ставить дополнения к HA? Так дополнения это те же самые контейнеры Docker, можно и самому поставить, если хочется. Разве что для обновления HA через Web-интерфейс? Ну если вы столько мучались с Ubuntu на Raspberry, то и обновить докер-контейнер с HA не проблема.
Очень давно пользуюсь этой утилитой, никак ни нарадуюсь: позволяет отключить кучу всего ненужного, включая телеметрию, рассказывает какие могут быть сайд эффекты у каждой опции. Утилита, правда, для самой Винды, а не для Office365.
UFO landed and left these words here

Все очень просто.
1) Не выделяй память, если можно не выделять
2) Знай какие операции блокирующие, а какие нет. Очевидно читать файл или слать запросы в сеть в гуёвом потоке дело неправильное.
3) Не городи абстракций в одноразовых решениях или на среднем уровне архитектуры приложения. Конкретный код, под конкретное бизнес решение, никогда не будет переиспользован.
4) Соблюдай стайл-гайд
5) Если пишешь костыль, оставь огромный комментарий с цепочкой размышлений, который привёл к появлению костыля.
6) Если условие сложное, разбей на несколько булевых переменных с нормальным названием и скомбинируй. Если невозможно (например сложная регулярка), то оставь понятный текстовый пример, когда условие срабатывает и когда не срабатывает.
7) Не используй редких английских слов в названиях
8) Погугли хоть раз в жизни " best practices".
9) Не пиши сложно и оптимально, если код вызывается раз в час/сутки/жизнь.
10) Даже если ты невероятно крут и умен, помни, что читать и поддерживать твой код будут люди менее компетентные. Это не значит, что надо писать хуже, но значит, что в каждой точке, над которой пришлось подумать и сделать неочевидно — нужно оставить комментарий.

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

github.com/iamadamdev/bypass-paywalls-chrome
github.com/iamadamdev/bypass-paywalls-firefox

Не тянет на статью, но вот пример конфига для dante, который пропускает через себя трафик telegram.
Честно говоря, хотелось поднять shadowsocks, т.к. он не передаёт пароль прямым текстом, но не получилось разобраться с правилами для iptables.

К сожалению, местами ваша статья тоже учит людей плохому, как и многие другие статьи о шелл-программировании.


КДПВ. То, что там написано, не поддаётся никакой критике:


ls -d * | sort -r | tr "\n" " "; echo

Кто-то так в жизни пишет скрипты? А что если:


  • файлов слишком много и * раскрывается в слишком длинную последовательность, которая не поместится в лимит командной строки?
  • где-то в имени файла затесался перевод строки (как бы ужасно это ни звучало)?

Более правильно так:


# Если на вывод будет смотреть человек.
ls --reverse

# Если это зачем-то нужно сделать в скрипте.
find -maxdepth 1 ! -path . -print0 | sort -z -r | xargs -0 echo

Разбиение строки. Как быть в случае, когда нужны все поля, или какое-то поле из середины? В этом случае ${##} не поможет, но вполне можно разбить строку в массив средствами Bash:


userInfoString="username:homedir:shell"

IFS=':'
userInfo=($userInfoString)
echo "${userInfo[0]}"
echo "${userInfo[1]}"
echo "${userInfo[2]}"

# Восстановим дефолтное значение разделителя. По-хорошему,
# следовало бы сохранить старое значение IFS, а затем восстановить.
unset IFS

Последовательности. В приведённом простом примере совсем не обязательно использовать seq, достаточно добавить ведущих нулей в оператор {..}. Не стоит также забывать про кавычки, хотя тут их отсутствие не несёт угрозы.


# Было.
for srv in `seq -w 1 10`; do echo server${srv};done

# Стало.
for srv in {01..10}; do echo "server${srv}"; done

Кавычки!. Не знаю, почему, но вы почти нигде не квотируете строки. Как насчёт файлов с пробелами в имени?


# Было.
for file in *.txt; do name=`basename $file .txt`;mv $name{.txt,.lst}; done

# Стало.
for file in *.txt; do name="$(basename "$file" .txt)"; mv "$name"{.txt,.lst}; done

Коварная команда test. Увидел у вас вот такой фрагмент кода:


[ "$REPLY" = 'n' ]

Что будет, если пользователь введёт '--help' или ещё что-то, начинающееся с дефиса? В баше (по крайней мере, новых версиях) не произойдёт ничего страшного, но в древних шеллах команда test может перепутать операнд с опцией и выдать сообщение об ошибке. Думаю, лучше так:


# Если пишем на башике и на другие шеллы не смотрим.
# (Заодно можем опустить кавычки.)
[[ $REPLY == 'n' ]]

# Если хотим, чтобы работало как можно более везде, придётся сделать
# подношение древним богам портабельности.
[ x"$REPLY" = x'n' ]
«Нет, Тим, не прими на свой счет, но ПОКАЖИТЕ МНЕ ПИД*АСА ЭТО СДЕЛАВШЕГО?! Он еще работает в компании?»
Например, при использовании master-master, мы заплатим auto increment'ами.

Не заплатим. Схема стара как мир. Например, пусть у нас два мастера. На первом стартовое значение делаем 1, на втором — 2 и на обоих шаг делаем в два. Всё.
много всякого мусора по работе с Сhrome, но волшебное решение ЕСТЬ:

Создаем папку — кеш и делаем так:
mklink /J «C:\Users\YOUR_USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Cache» «D:\somewhere_else»

C:\Users\YOUR_USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Cache это предварительно убиваем
сделал в пятницу коммит — в понедельник знаменит!
ЗАШЕВЕЛИЛИСЬ ПИНДОСЫ, СПУТНИКА ИСПУГАЛИСЬ!
простите
Эх было время, тоже эникейщиком 6 лет работал, только сам на себя, без посредников. Тоже есть пара негативных историй:

1) Приехал в пригород делать старенький системный блок. Как оказалось, ПК не видел мастера несколько лет. Я предложил хозяйке сделать всё в комплексе: полная чистка внутренностей от пыли, сохранение пользовательских данных и переустановка ОС. Когда работа была почти завершена вернулся её муж. Я огласил стоимость работы (2010 год, с учётом выезда в пригород, чистки) — 150 грн. Муж ответил, что люди на поле (юг Украины) за 100 грн. в день работают, а я тут два часа потратил и хочу такие «бешеные» деньги, при этом квартирка у них была совсем не бедная. Короче, заплатил он мне 90 грн. я его назвал жлобом, а он чуть ли не драться полез. В итоге, все обошлось, больше они меня не вызывали — наверно им уборщики лука или помидор с поля приходят компьютер делать.

2) По объявлению в газете вызвал мужчина установить ОС и программы на компьютер. Основной пользователь компьютера — сын, старшеклассник. Всё прошло гладко, компьютер был относительно новым, быстрым. По окончании работы со мной рассчитались и я ушел. Через неделю позвонил тот же клиент и заявил что с компьютером опять какие-то проблемы и нужно идти делать. На месте выяснилось, что сынок наустанавливал из Интернета всякой «муры». Я решил не заморачиваться и повторно переустановить всё. Когда зашла речь об оплате, мужичок сказал мне что этот вызов «по-гарантии» и он мне не заплатит. Не стал раздувать скандал, просто ушел, но сказал чтобы он мне больше не звонил.

Также были и сверхщедрые клиенты которые платили сумму в 1,5 — 2 раза больше озвученной.
На примере World of Warcraft, хоть в двух словах и не опишешь.

Игра в релизной версии поддерживала рейды на 40 человек, прокачка занимала порядочное время несмотря на наличие большого количества фансайтов с информацией. Чтобы попасть в эндгейм контент приходилось долгое (действительно долгое) время добывать реагенты и более-менее подходящую экипировку. В конечном итоге эндгейм успешно проходили около 5% игроков. Сбор предмета высшего качества (легендарный посох) занимал умопомрачительное время и требовал соизмеримого количества сил.

До выхода большого контент-патча прошло 2 года и количество подписчиков выросло с 1,5 млн на старте до 8 млн. Вышел патч 2.0, который многие считают «золотым веком» игры. Снизилось кол-во человек в рейде с 40 до 25 (с 8 до 5 полных групп), сложность рейдов объективно снизилась, позволяя поиграть в эндгейме уже бОльшему проценту игроков, а легендарный предмет стал простым лутом низким шансом выпадения. Однако игра всё ещё карала за небрежность. Количество подписчиков к концу второго патча составило 11 млн игроков.

Деградация сложности начиналась постепенно с третьего патча, во время которого был достигнут максимум по кол-ву подписчиков — 12 млн. Рейды стали доступны всем — формат «только 25» уступил место 10 или 25, а рейдовые боссы стали не сложнее боссов обычных боссов подземелий на 5 человек. В процессе разработчики спохватились и ввели т.н. «сложный режим» (hardmode), успешное покорение которого приносило лучшую добычу и требовало большей слаженности от игроков.

Описывать игру я могу долго, но я вижу несколько причин в деградации:
  • Десоциализация. Абсурдный тезис для ММО? Если в первых патчах к подземелью приходилось топать ножками, а иногда и пробиваться с боем, то в процессе развития был добавлен режим «looking for group», где было достаточно нажать кнопочку и игра услужливо закидывала тебя в подземелье.
  • Девальвация усилий игроков. Легендарный посох из первого патча собирался настолько долго и сложно, что был доступен считанным единицам игроков. В четвёртом патче легендарка стала собираться, как паззл — долго, но несложно
  • Избыточная заботливость. Пропал стимул изучать мир, когда на каждом углу тебе показывают стрелочку «туда иди, сюда не ходи». И от этого игроки перестали исследовать мир, воспринимая боссов, не как персонажей с проработанной историей (а у близзард сценаристы достойны оскара), а как мешок с лутом.
  • Стремление угодить всем. И упрощение, как следствие. Я понимаю — обидно работать над локацией, которую увидят 5-10% максимум. Но в конечном итоге это опять же девальвация усилий. Неоднократно озвучивалась официальная политика компании: "Вы, элита, которые пишут петиции на форуме — 5% игроков и не являетесь репрезентативной выборкой".
  • Насильственные методы привязки. Самый кошмар начался в пятом патче (2012 год), по итогам которого абонентская база упала ниже показателей второго патча — начались «обязательные» задания. То есть они не были обязательными, но те, кто не заходил каждый день в игру и не тратил на ежедневные задания 30-60 минут — оказывались в заведомо проигрышном положении по сравнению с теми, кто «фармил».

Причин на самом деле больше, а история, начавшаяся в 2005 году пишется до сих пор. Я и так написал стену текста, которой не очень-то и место на хабре. Но конкретику могу предоставить по запросу любую — квартальные отчёты компании есть в публичном доступе и сопоставить их с конкретными изменениями в игре не составляет для меня труда.
Всегда считал вот этот комментарий, достойным перевода: stackoverflow.com/a/769443

// Здесь, я хотел бы немного поговорить с тобой о Adobe PSD формате. PSD это не хороший
// формат. PSD это даже не плохой формат. Называть его плохим, было бы оскорблением других 
// плохих форматов, таких как PCX или JPEG. Нет, PSD это отвратительнейший формат. Поработав 
// над этим кодом уже несколько недель, моя ненависть к PSD выросла в бушующее пламя, 
// которое горит с всепоглощающим жаром миллиона солнц.

// Если есть два различных пути сделать что-нибудь, PSD будет использовать оба в разных местах. 
// Потом он придумает еще три пути, до которых бы не догадался ни один вменяемый человек, и 
// также будет их использовать. Несовместимость - это форма искусства для PSD. Например, 
// почему, он вдруг решил что именно *эти* блоки должны быть выровнены по 4х 
// байтовой границе, а вот это выравнивание *не* должно быть включено в размер. Другие 
// блоки в других местах либо не выравниваются или выравниваются по границам, включенным 
// в размер. Хотя, здесь, они не включены. Подошел бы любой из этих трех возможных вариантов 
// поведения. Вменяемый формат бы выбрал один. PSD, конечно же, использует все три и даже 
// больше.

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

// Недавно, я пытался заполучить последние спецификации PSD формата. Чтобы их получить, мне 
// бы пришлось подать заявление на разрешение на заявление им, чтобы они хотя бы подумали, 
// стоит ли высылать мне этот священный том. Это бы включало в себя отправку им по факсу 
// копии какого-нибудь документа или чего-нибудь другого, скорее всего, подписанного кровью. Я 
// могу только предполагать, что они сознательно затрудняют этот процесс, потому что им крайне 
// стыдно за создание этой мерзости. Я не слишком доверчив от природы, чтобы пройти через эту 
// процедуру, но если бы я это сделал, я бы распечатал каждую страницу спецификации и сжег бы 
// их все. Если бы это было в моей власти, я бы собрал все копии этих спецификаций и запустил 
// их на космическом корабле прямиком к солнцу.

// PSD - мой не самый любимый формат.


(*) Рубен Люциус Голдберг — американский карикатурист, более всего известен серией карикатур, в которых фигурирует так называемая «машина Руба Голдберга» — чрезвычайно сложное, громоздкое и запутанное устройство, выполняющее очень простые функции.
При предварительном изучение налогового законодательства, в голову приходит одна мысль: ни… себе.
При более детальном изучении, в голову приходит другая мысль:… вам.
Позволю еще привести пару примеров (украинские реалии, возможно в России чуть иначе):
  1. Сок яблочный.
    Пишут на этикетке состав, но не пишут массовые доли. В итоге, заливают 5% яблочного сока натурального, дальше вода, иногда сахарный сироп, подсластители и аромат, отдушку.
  2. Сок томатный
    По технологии, он делается из томатной пасты. Ни массовая доля, ни % сухого вещества в томатной пасте на этикетке томатного сока не пишется.
  3. Сок фруктовый
    Основа 5% яблочного сока, дальше краситель, подсластитель и нужный аромат.
  4. Сок фруктовый с мякотью
    Тоже, что сок фруктовый, только немного яблочного пюре, не больше 5%
    Чтобы проверить, сколько понадобится фруктов для сока, купите свежие фрукты, и выдавите из них сок, взвесьте сок. Обычно выход сока не больше 20-40% А с некоторых фруктов вообще невозможно получить сок, например, с бананов.
  5. Колбасы
    Некоторые производители честно указывают состав, но не указывают массовые доли. Может, там соевого белка 80%, а мясо добавлено в виде бульона?
  6. Алкоголь (спирт)
    Невозможно отличить технический спирт (выгнанный из древесины или нефти) и пищевой спирт (зерновой). Только в некоторых лабораториях и то по % соотношению сивушных масел.
    Трудовые и сырьевые затраты при производстве этилового спирта из пищевых продуктов и древесных опилок очень велики, поэтому значительно выгоднее исходить из дешёвого углеводородного сырья и получать спирт гидратацией этилена. Для производства одной тонны этилового спирта на основе этилена необходимо переработать всего примерно 2,5 тонны газа или нефтяных дистиллятов, а для получения 1 тонны спирта из растительных материалов требуется 4 тонны зерна, 10 – 12 тонн картофеля или 8 тонн древесных опилок. Трудовые затраты в человеко-часах при производстве этанола из разных источников составляют: из картофеля 280, из зерна 160, из этилена 10.

  7. Алкоголь (водка)
    Человек органолептически не может определить разницу в воде, в которой растворяют спирт. Только контрастный цвет и запах скажет, что есть какие-то добавки. Плюс сам спирт обжигает вкусовые рецепторы во рту. Так часто в питейных заведениях поступают. Сначала при клиенте якобы раскупоривают бутылку и наливают первую стопку клиенту. Дальше клиент хмелеет и ему можно лить любую дешевую водку.
  8. Крем
    Крем не может впитываться в кожу, я тем более питать!
    Максимум, вазелин покрывает поверхность кожи и мешает коже дышать.

Нужно все же наказывать производителей, пока они нас не начали совсем травить.

В защиту некоторых, скажу, что бывают и правильные товары. Читайте состав, там мяса больше чем каши, удивило. «Иногда покупаю и ем такую, когда охота есть, а готовить что-то долго или в походах.»
image
image
1

Information

Rating
Does not participate
Location
Йошкар-Ола, Марий Эл, Россия
Date of birth
Registered
Activity