Sleepless tech | Евгений J – Telegram
Sleepless tech | Евгений J
794 subscribers
483 photos
80 videos
1 file
213 links
DIY, web, coffee
Автоматизирую все и вся, ремонтирую что сломалось, трачу время на just-for-fun проекты. Пишу про хардвар и софтвар и не только.

http://jem-space.ru

Связь со мной: @jem_jem
Донаты на припой и хостинги: https://bit.ly/2MKcRoJ
Download Telegram
Forwarded from UX Live 🔥
This media is not supported in your browser
VIEW IN TELEGRAM
Когда посмотрел уже все на порнхабе и придумал собственный жанр
5😁5🔥2❤‍🔥1🤡1
Дарова!

Щас развоняюсь как дед.

Github ввел двухфакторную аутентификацию. И теперь как дед пытаюсь разобраться с какими то ссаными аутентификаторами. Либо ставь какую то херню на телефон или комп либо расширение для хрома. Отправить мне код на почту они блядь не могут, а смс естественно в Россию не доходят.

Ну это ладно, но то что он предлагают это мать его платные решения типа 1Password. Плати 2 доллара в месяц чтобы логиниться на сайт. Алооо, вы там ох*ели? Либо приложение от Копрософта с битой ссылкой на установку.

Ладно, мож я че не так понял. Пойду разбираться)
Если кто уже понял как сделать чтоб нормально было, черканите деду)

UPD: деду помогли - google authenticator норм тема, ставится как расширение, все бесплатно. Че бы его сразу было не предложить вместо 1Password и копрософт хз)
🙈4👏1🤝1
Ладно, вот вам задачка.

Есть 2 стула пакета в node_modules, которые использую третий как зависимость. Но в зависимостях он разной версии.
Один пакет нормально резолвит его. Второй же пытается найти его в общих node_modules, вместо своих внутренних (хотя во внутренних он есть).

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

Пробовал resolutions в package.json - не помогло. Пока рабочее решения - поправить руками импорты и накатывать патч на postinstall через patch-package.

Надеюсь щас набегут боты в коменты и все мне расскажут)
Надеюсь, это именно та разметка, которую они хотели видеть в поисковике)
Там еще и месяц в формате МММ. Чисто для рептилоидов каких то)
😁8👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Как побороть сдвиг сайта из-за появление скрола

Недавно увидел потрясающий CSS хак как компенсировать сдвиг сайта, когда у вас появляется скролл на странице. Вся верстка будто прыгает, появлется так называемый CLS – content layout shift. Нехорошо. Глаз раздражает и приводит к мискликам (смотри комментарии к посту).

А хак до жути простой:


padding-left: calc(100vw - 100%); // 15px


100vw – ширина всей страницы с учетом скролбара
100% – ширина страницы без учета скролбара

Вычитаем и получаем заветные 15px, когда скролл есть и 0px, когда его нет. А дальше добавляем куда вам нужно – будь это padding, margin, top, left или еще чего. Просто и гениально.

А пост пишу, потому что удалось сразу проверить в проде как оно работает. Весь дифф до и после компенсации видно на видео.

Не забывайте про мелочи (а тем более про CLS) и тогда сайтом будет действительно приятно пользоваться.

@dlents
🔥62👍2
Привет!

Вчера был мой последний рабочий день в компании 😢
В Артезио проработал почти 7 лет, а на проекте Партнёрского кабинета почти 6. Есть повод немного порефлексировать (интересно, скорее всего, не будет, но зафиксировать нужно).

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

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

Здесь, конечно, скрывалась одна из проблем - я начал клепать код без критического взгляда на него. Не то чтобы я не думал над оптимизацией функций, но вот гибкости и чистоты не хватало. Был некий флоу по разработке фич в основе которого была react-redux архитектура. Есть компоненты, они вызывают экшены, в которых выполняются запросы к мидлу, результат кладется в стор и все работает. Бизнес логика размазана по всему приложению…

Вопросы архитектуры меня волновали и тогда, но ответов на них особо не находил (про выделение бизнес логики, clean и feature-sliced я узнал года 3-4 назад). Да и думать честно говоря было некогда - нужно было быстро наращивать функционал приложения. Работали мы без особого планирования и спринтов, просто брали приоритетные задачи в разработку и старались сделать быстро. Но, замечу, без овертаймов!

Здесь крылась вторая проблема - нет времени на тесты. При оценке задач я всегда ориентировался только на этап разработки (+ багфикс) и забывал про тесты. Точнее я все думал, что надо когда нибудь попросить времени на них, но времени не было. Только потом я понял/узнал что продать бизнесу тесты невозможно. Их нужно изначально закладывать в оценку.

Третья проблема близка ко второй - отсутствие документации. По тестам можно понять как должен работать тот или иной процесс. Но можно вести документацию в той же конфлюенс. Мы этого не делали. На тот момент, как и что должно работать знал наш ПО + тестировщик, ну и разрабы, которые имплементили фичи. В какой то момент ПО ушел и частенько у нас начали сыпаться вопросы "А это всегда так работало или это баг?", ответить на которые мы могли только покопавшись в коде.

В какой-то момент обороты по реализации фич поутихли и проблемы кодовой базы уже не списать на то, что тебя торопили. По мере возможности я старался привести очевидные WTF части к нормальному виду. Особенно после того, как подумал, что если буду уходить с проекта, передавать его в таком виде оч стыдно. Это прям стало реальным мотиватором к тому, чтобы писать лучше. Да и вообще пришло осознание (хотя и поздно), что если ты один фронт, то этот репозиторий чисто твой проект и ты за все в ответе. За то, что у проекта нет нормального Read.me, за то что там до сих пор 4 версия react-router, древний redux без хуков и 4 вебпак.

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

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

Короче, классный опыт. Что-то из него вынес. Посмотрим, что будет дальше 😅
❤‍🔥8👍4🎉1
Autodesk Fusion 360 for personal use

Сохраню ссылку на бесплатную версию Fusion 360 для личного использования. При поиске на сайте эту версию что-то особо не предлагают, а из гугла - доступна по первой ссылке. Работает, правда, только при регистрации через vpn.

https://www.autodesk.com/products/fusion-360/personal
❤‍🔥5
Привет!

Давно слышал, что на айфонах с 13 версии появился лидар, с помощью которого можно сканить 3D объекты. Находил инфу, что точность у него 0.3 мм, так что многообещающе. Все хотел попробовать.

Появилась возможность поиграть с ним, и в результате немного разочарован. Чтобы получить нормальную модельку, видимо, нужно нормально поплясать (либо просто руки попрямее)

Снимал на scaniverse.

Кстати, если у кого нормально получалось, расскажите че как)
🦄4
Всем привет.

На днях столкнулся с задачей, что при отправке формы с типом multipart/form-data нужно было добавить отдельные заголовки для каждого файла из формы. Задача немного нестандартная и как средствами клиентского JS ее решить не сразу понятно.
В rtk-query и axios такой конфигурации не нашел, как и в клиентском FormData. В интернете гуглится мало инфы и часто встречается решение с использованием пакета form-data (но он для node).

Глядя в Network, видно, что браузер сам добавляет Content-Disposition и Content-Type. В спецификации же к http написано, что можно добавлять отдельные заголовки для полей.

В итоге выход один - генерить руками тело запроса и преобразовывать его в Blob.
Генерим заголовки как текст, добавляем 2 пустые сроки, преобразуем в blob и добавляем в массив. Затем преобразуем файл в blob и добавляем в массив. И так со всеми файлами. Не забываем разделить поля при помощь boundery типа ----WebKitFormBoundary{random_string}

Из всех блобов делаем один общий

new Blob(blobs, {
type: `multipart/form-data; boundary=${boundary}`,
});


И отправляем нахуй
Спасибо чатгпт за алгоритм (я бы охерел это руками писать).

Chrome кстати говорит, что это пустая FormData, но бекенд успешно сохраняет файлы из запроса.
🔥6🤯1😎1
Подкинули воркераунд еще https://huecker.io/
👾6🔥5
Когда готовишься к собеседованию и приготовил блокнот и ручку. Ну и запасную ручку, ну и ещё парочку.

Ваш вариант подписи жду в комментах)
❤‍🔥3😁1
Откопал такой древний ПК у которого USB только на плате расширения. В принципе как на современных макбуках. Просто переходник с 5din на USB нужен.
👍1
Когда поводил во рту iphone 15 (нет).
Вообще оценил какая кайфовая детализация у ортодонтических сканеров. Ценник у них, думаю, соответствующий.
👍3🤯1
Так, нужна помощь зала. Вдруг кто шарит в ремонте кондеев.

Есть пациент фирмы Gree с ошибкой датчика температуры. Я откопал виновника и замерил сопротивление. Но таблиц соответствия температуры и сопротивления не нашел.
Эксперты, есть смысл заказывать и ждать датчик, либо может дело в недостаточном уровне фреона (т. к кулер крутится и патрубки холодные у внешнего блока, а до внутреннего холод не доходит)?

UPD: короч я так подумал, что кондей работает на температуре 18 градусов, а из за того что не хватает фреона через 20 минут начинает думать что неисправен датчик (ведь за это время он по идее должен был уже охладиться).
🤯4👍3😢1
Media is too big
VIEW IN TELEGRAM
eto ya трачу 3 часа на то, что можно купить за 300 рублей.
🔥17👍5❤‍🔥4👏2😁2
Media is too big
VIEW IN TELEGRAM
eto ya перехожу на новый уровень и экономлю до 800 рублей (сомнительно, но окей)
😁11👍7❤‍🔥3🔥21💯1
Всем привет! Ищу знатоков питона чтобы решить головоломку (которую я не смог решить с чатгпт)

Есть 2 модуля: alarm_config (отвечает за чтение конфига из файла) и alarm_manager (получает настройки из alarm_config и заведует алармами). Хочу при обновлении настроек в файле, обновлять их и менеджере. НО! Когда насильно вызывают реинициализацию менеджера, новые настройки вижу, а при проверке аларма (который происходит в бесконечном цикле основного модуля) — нет, там старые значения.

#alarm_config.py
class AlarmConfig:
def __init__(self, file_name=os.path.join(os.path.dirname(__file__), os.pardir, 'alarms.cfg')):
self._conf = self._load_alarms(file_name)

def subsсribe(self, cb):
self.cb = cb

@property
def alarms(self):
alarms = list(self._conf.items('alarms'))
........
return alarms_list

def update:
self.cb() #вызываю реинициализацию менеджера

alarmConfig = AlarmConfig()


#alarm_manager.py

class AlarmManager:
def __init__(self):
self.alarms = alarm_config.alarmConfig.alarms
alarm_config.alarmConfig.subsсribe(self.reinit)
self.isAlarm = False

def reinit(self):
self.alarms = alarm_config.alarmConfig.alarms
# вижу новые значения

.......

def checkAlarms(self, prop, data, callback):
self.alarms = alarm_config.alarmConfig.alarms
# вижу старые значения все равно


alarmManager = AlarmManager()


# main.py
while True:
try:
alarmManager.checkAlarms(item, data, alarm_callback)


Я сам не местный, в питоне не особо шарю(
Предполагаю, что тут какое то ПИТОНОВСКОЕ замыкание (если такие есть). В общем, буду рад любой подсказке 😊