Work & Beer Balance – Telegram
Work & Beer Balance
1.54K subscribers
117 photos
5 videos
4 files
183 links
Авторский канал @Akiyamka
Поддержать автора можно здесь:
buymeacoffee.com/cherrytea
Download Telegram
пост @artalar про то Что такое бизнес логика (БЛ) и как ее писать вынуждает меня написать своё мнение по этому поводу.
Моя версия того что такое бизнес логика:

1. Во первых давайте сразу определимся что за "бизнес". В русском языке и в английском языке это слово имеет схожие, но все же разные смыслы.
В русском языке бизнес это то, что приносит прибыль. В английском языке это - дело или занятие. Спрашивая "в чем твой бизнес" - спрашивают о том что зачем ты интересуешся.
Таким образом, бизнес логика это Зачем логика (или "логика дела") - звучит смешно но передает суть. Она отвечает на то, какие цели должны быть достигнуты. С зарабатыванием денег напрямую не связано, у опенсорс и бесплатных проектов тоже есть бизнес логика, потому что они зачем-то существуют. Бизнес логика может быть и на уровне системы, и даже на уровне одного модуля. Например, логгер для приложения не является бизнес логикой, это вспомогательная логика, но на уровне самого логера (когда мы выступаем в роли разрабочтика логгера) там так же есть бизнес логика и вспомогательная логика

2. Как вы уже догадались ответ на вопрос "зачем" будет разным в зависимости от того, кого мы спросим - дизайнера, разработчика, менеджера, пользователя, владельца бизнеса или священика. Когда мы говорим о "бизнес логике" мы всегда подразумеваем какой-то контекст из которого понятно с чьей точки зрения мы ее выделяем.

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

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

@BANOnotIT предлагает использовать "Полезная логика" и "Вспомогательная логика" по аналогии с полезной и паразитной нагрузкой из техники, как вам?
👍8🤔2🔥1
Для всех кто хочет попробовать Linux обычно советуют определенный дистрибутив.
Хотя это влияет не так сильно на опыт будущего линуксовода, как то какое железо он выберет.
Ведь именно с железом будут самые сложные дурацкие и выматывающие проблемы если выбрать не то.

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

- System76 (PopOS)
- Frame.work (Ubuntu, Project Bluefin, Bazzite)
- Slimbook (Fedora)
- Некоторые модели Dell, HP и Lenovo (Ubuntu)
- Pine64 (Manjaro)
- Starlabs Systems (Manjaro)
- Manjaro Computer (угадайте!)
- Tuxedo Computers (Tuxedo OS - форк Kubuntu)
- Librem (Librem OS)

2. Если ни один из вариантов выше вам по какой-то причине не подходит, при выборе учитывайте что:

- Nvidia - видео карточки работают только с проприетарными закрытыми драйверами. CUDA - закрытая проприетраная технология. Вы будете полностью зависеть от их желания и планов чинить что-то.

- Radeon - публикуют свои драйвера в опенсорс, для всех закрытых технологий связаных с видеокартами разрабтывают или активно участвуют в разработке опенсорс альтернатив (Vulcan, Open CL)

- Intel - комитят свои драйвера в linux ядро, но часть драйверов все равно закрыта, часть обложена лицензиями, и туда боятся лезть. У проходных моделей поддержка сносная, но она для них не в приоритете. У моделей расчитанных на сервера - все замечательно (не ваш случай). Если берете intel, лучше берите что-то массовое, и не этого года выпуска, в идеале те модели что есть на ноутбуках из первого списка.

- AMD - основную ставку делают на linux и опенсорс, все драйвера открытые, проблемы совместимости с linux мной замечены не были

P.S. Если вам очень нужна CUDA, и на линукс тоже хочется - посмотрите на польскую ZLUDA!
👍3
Как думаете сколько Bazel-у нужно нагенерить bash кода чтобы вызвать node.js бинарник? (pnpm в моем случае)
$ wc bazel-bin/external/pnpm/pnpm.sh
617

(и все равно работает абы как)
Сегодня я буду рассказывать о своем Starlabs Starlight V - моем планшете на Linux.
Текста будет много так что он будет в комментариях к этому посту.
Рассказывать буду о том:
- Чем девайс уникален
- Зачем купил
- Какие проблемы есть у тач устройств на linux и как я это чинил.
👍31
Vite дико тупит в дев моде при первом открытии странички?
Возможно я знаю как вам помочь.

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

Если это ваш случай, обратите внимание на vite-plugin-entry-shaking, он как раз исправляет эту пробелму возращяя тришейкинг в дев режим.
И черт меня побери зацените эти превосходные девтулы плагина, мне кажется на их создание ушло больше времени чем на сам плагин
👍12
Прочитал обзор одного интересного исследования - насколько качественный код генерирует ChatGPT.

TLRD: Проверяли на задачках литкода.
C, C++, Java, JavaScript, Python.
Вероятность успеха в зависимости от сложности:
Easy: 89%
Normal: 71%
Hard: 40%
(Обратите внимание, 100% нету даже у easy)

Дальше лучше, сделали тоже самое но в этот раз только на задачках которые появились после 2021 года (т.е. запрос для которых chat gpt решений не видел, и ему надо было решать их "самому".)

Easy уровень упал до 52% а hard до 0.66% успеха...

Причём подсказки и указания на ошибки не помогали, АИ не мог понять даже сути задачи которую надо решить

Все ещё думаете что когда-нибудь мы будет хранить только промпты в Гите?
🔥53💯3
В Gnome у приложений есть ярлычки, а у ярлычков может быть иконка.
Но в 99% случаев в настройках ярлыка путь к ионке не указан, только название.
Мне в моем приложении надо воссоздать это поведение, а биндинги GTK к ноде весят в трое больше всей приложухи, так что я решил эту логику воссоздать самостоятельно.
Там же все просто должно быть, подумал я в 12 часов дня. Спустя 4 часа я понял как я ошибался.

Алгоритм следующий:
1. Найти в переменных окружения тему иконок и список папок где могут хранится файлы темы.
2. Темы могут быть определены в разных папках одновременно, надо следовать логике спецификации чтобы определить какая имеет больший вес.
3. Когда мы определили тему надо просканивароть еще один список вохможных директорий, где могут быть файлы темы.
4. Когда мы определили где лежат файлы темы, надо найти ее index файл. В нем описано иконки на какие темы (контексты) лежат в каких подпапках, и в диапазоне каких размеров (min-max), и в каком коофиценте скейлинга
5. Тема может наследоваться от других тем, причем наследование множественное, так что для всех тем от которых она наследуется нужно повторить все пункты выше, и в случае если чего-то не будет в этой теме, брать ее из родительских тем
6. Так как все это куча логики для резолва одной иконки, а показывать их надо много и быстро, в оригинале еще реализован бинарный кэш который пишется на диск, чтобы не делать всю эту работу повторно

я остановился на пункте 4 и думаю - может и хрен с ним с этими 16 лишними мегабайтами биндингов
👍4
У меня такая же фигня была пока мой гугл не обучился : )

Что такое programmers socks?
океееей TypeScript. Пора доставать programmers socks, да?
😁61🤮1
Есть одна мелочь, о которой если не подумать при написании скрипта, то можно сломать пол системы неопытному пользователю.

Если вы писали на node.js консольные утилиты, то там с 99% вероятностью был параметр принимающий путь к файлу (по крайней мере у меня было так).
И рано или поздно туда прилетит что-то вроде --path ~/logs/debug.txt - и ничего страшного не произойдет. А потом это перенесут в конфиг - и вот тут начнется дичь.

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

Что же поменялось?

Дело в том что `~` это алиас который понимает ваш шэл (bash например). Когда вы задаете параметр ~/logs/debug.txt оно преобразуется в /home/username/logs/debug.txt перед тем как будет передано программе.
А когда вы читаете файл, или stdout - этого не происходит, и в приложение путь попадает как есть. Но далеко не все пользователи это осознают.
По этой причине, было бы здорово в вашей апке учесть этот момент, и при чтении пути интерпретировать символ ~ в начале пути.
В npm полно либ которые это делают, но это легко сделать без них

import os from "node:os"

const resolveHomeDir = (path) => (path === '~' || path.startsWith('~/')) ? path.replace('~', os.homedir()) : path



(P.S. вот поэтому нельзя запускать скрипты рукожопам вроде меня с правами админа!)
👍7🔥2
Warp терминал портировали на linux, потому что очень просили. Но это была пуcтая трата времени и сил, вот почему:

1. В отличии от macOS юзерей, в linux экосистеме уж чего чего, а отличных терминалов пруд пруди. И все они бесплатные.

2. В отличии от macOS юзерей, пользователи linux очень скептически настроены к проприетарному софту с закрытым кодом. Особенно если это терминал в который они вводят пароли и много другой "sensitive" информации

3. В отличии от maсOS юзерей, пользователи linux очень скептически настроены в том что терминал отправляет все в какое-то облако и требует (можете себе это представить?) за это деньги!. Терминал!

4. В отличии от maсOS юзерей, пользователи linux сидят на очень разных железках и софте, от чего терминал сразу же посыпался на большинстве систем

5. В отличии от maсOS юзерей, пользователи linux не сидят на голых (или почти голых) терминалах, у них уже есть куча каких-то oh-my-zsh плагинов которые делают все эти автокомплиты и другую магию, с которыми warp тут же попадает конфликт и ломается (а вариант - выключите сначала все все с трудом настроенное, прежде чем попробовать наш терминал - заведомо будет проигнорирован)

6. В конце концов даже с чисто эстетической точки зрения все эти градиенты, свечения, и скругленные уголки выглядят настолько чужеродно в кедах или гноме что хочется это развидеть уже через 10 минут

Жаль их потраченного времени, знай они все вышеописанные пункты пошли бы пилить версию для винды
😁6🥴2
Сегодня я хотел сделать пост про то как мне bing понравился больше чем google search.
Но вместо этого я вас поздравляю с международным днем синего экрана
😁6
😁7
Вы наверняка уже знаете, что сегодня произошёл сбой Windows по всему миру из-за сервиса Crowdstrike, который отвечает за безопасность. И, кажется, был найден виновник.

Мой первый рабочий день в Crowdstrike. Выпустил небольшое обновление, и теперь можно отдыхать.

Уволен. Совершенно несправедливо.


r/#ProgrammerHumor
Кто-то сделал для фреймворка модуль с впаяным донглом Logitech.

Кто не в курсе - у Logitech-a донглы программируемые, и даже продаются отдельно.
Т.е. любой их девайс можно прицепить на такой донгл выполнив небольшой ритуал.

Донглы (Dongle) общаются с вашей мышью / клавиатурой по средствам радио канала, у которого задержка значительно меньше чем от Bluetooth. Минус всегда был в том что он занимает usb порт. В данном случае мы получили И донг И свободный порт, красиво!

https://github.com/LeoDJ/FW-EC-DongleHiderPlus
🔥5
Не такие хорошие новости - в последнем обновлении ядра Linux какой-то бажец - выглядит так - смотрю ютуб и тут бац - картикна замирает, черный экран, через 5 секунд я на логин скрине.
Второй раз две недели.
Коснулось владельцев AMD.

Workaround:
Disable scatter gather support on kernel cli and increase the reserved VRAM.
Known issues with the amdgpu default enabling of Scatter Gather VRAM which is set from 6.2 kernel onwards.
add
```
amdgpu.sg_display=0
```
to your Kernel command line, and change the VRAM allocation in the BIOS to
```
UMA_GAME_OPTIMIZED
```
These in combination alleviate (but not completely remove) the issue you are seeing.
Вот как ОЧЕНЬ легко сделать бинарник (т.е. nodejs или что-то еще для запуска не требуется), весом 4.8 MB, который будет запускать JS код из вашего секретного гиста на гитхабе

index.js
import { urlGet, evalScript } from "std";

evalScript(
urlGet(
"https://gist.githubusercontent.com/.../noscript.js",
),
);


./qjsc -o ./run-gist ./index.js
👏3👍1
Сегодня в который раз оценил полезность правила работы с Typenoscript которое я сам себе придумал.

Если уперся в сложный кейс который не понятно как затипизировать - скипаю это место и доделываю задачу.

Во первых - Ребусы тайпскрипта это кроличья нора, пока решаю такие задачки могу полностью выпасть из контекста задачи, и в него надо будет снова погружаться.
Во вторых - бывает так что потраченный час на дженерики оказывается потраченным в пустую, т.к. уже через пол часа пришла идея все немного переделать иначе
👍28🤔2💯1
У Cloudflare есть сервис Zaraz. Что в переводе с Белорусского или Украинского переводится как "Сейчас". Любопытное проникновение славянского в зарубежные сервисы

(Кстати, знаете почему тут лавовая лампа на заставке? Они такими лампами генерят случайные хеши для криптографических подписей) Еще более любопытно то что эти лампы стоят прямо у них в холле, и проходящие мимо люди добавляют им энтропии
👍7🔥3