Digitable: Channel
132 subscribers
143 photos
12 videos
3 files
106 links
digitable.ru | Твой путеводитель в разработке ПО, от стажера/джуна до техлида, ex-workers и workers Microsoft, Xsolla, Roadmunk, Adjust, Контур, НЛМК, Т1, Аквелон
Download Telegram
#all #development #git #svc #pullrequests #documentation #decomposition #taskbehaviour #selfmanagement #selforganisation #problemsolving #transperancy #roadtosenior

Крайне часто нам приходится сталкиваться с тем, чтобы открывать Pull Requests / Merge Requests и прочее,

Однако мысль разработчика "моя работа заканчивается после того как я сделал пуш" в корне ошибочна,

Представьте себя в роли доставщика продуктов.

Вы пришли в магазин взять продукты, прошлись по списку блюд, которые нужно приготовить, заказчик сделал пометку:


- Борщ
- Чай (если нет зеленого, то взять черный)
- Хлеб (если нет черного, то не брать вообще)


И вот от того как Вы будете подходить к решению этой задачи многое зависит и Ваш mindset в том числе.

Как с этим всем работать и правильно оформлять Pull Requests и работать с задачами? 👇
Полный разбор подхода в закрепленном комментарии к этому посту.


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru/



Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше! 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#medium #development #os #nasm #yasm #qemu #virutal #x86 #assembly #brew

Чтобы написать вашу первую программу (а именно операционную систему, но на уровне bootloader) вы можете воспользоваться NASM (Netwide Assembler) под архитектуру x86

Мне, к примеру, нравится больше переписанная реализация с более широким списком архитектур YASM (https://yasm.tortall.net/), но для начала вам хватит и NASM.

В чём он хорош?

- BSD License
- Простой и понятный синтаксис

Ставим компилятор и виртуализатор (qemu), для примера будет использоваться brew:


brew install nasm qemu


Далее берём код из закрепленного комментария к этой публикации и закидываем в boot.asm файл

Компилим




Запускаем




Наслаждаемся, команда вывода в последней строке после msg

Как залить в Live USB?


sudo dd if=boot.com of=/dev/sdb bs=512 count=1


Статья в Википедии про синтаксис (англ.): https://en.wikibooks.org/wiki/X86_Assembly/NASM_Syntax
Статья в Википедии о технологии (рус.): https://ru.wikipedia.org/wiki/NASM
Руководство с metanit на русском: https://metanit.com/assembler/nasm/
Официальный веб-сайт: https://www.nasm.us/


Код на nasm в закрепленном комментарии к этому посту.

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru/


Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше! 👇
🔥2
#advanced #development #emails #dovecot #postfix #nginx #unix #linux #ubuntu #roundcube #spf #dkim #dmarc #dns #administration #devops

Как развернуть свой email-server?

А зачем вообще нужно поднимать свой собственный?
Всё просто - не нужно платить за то, что вы можете настроить сами и пользоваться на том же уровне, что вам и предлагают за услугу.
К примеру, Digital Ocean (#digitalocean) не позволяет вам использовать собственный email-server, а продаёт Sendgrid.

Свой email-server обеспечивает как в локальной, так и в открытой сети Интернет возможность отправлять письма.
То есть, к примеру, вы купили домен myawesome.ru, как теперь сделать почту admin@myawesome.ru?
Или того хуже, вам нужна почта только в локальной сети и без доступа к интернету на основе LDAP или AD и без лишних танцев с бубнами?

Немножко суммаризируем:
- Из достоинств:
- Self-hosted, вы сами управляете вашим сервером и не ждете поддержки. Яркий кейс, что случилось у cloudpit (#cloudpit) , после обновления dmarc, Google (#google) помечает все письма с их сервиса как спам. Вы продолжаете платить деньги и ждёте когда вам кто-то ответит на почте или решит вашу проблему.
- Из недостатков:
- Кривые руки и вы похоронили всю систему

Что же использовать и почему?
Есть такая связка из открытых инструментов:

- Postfix (#postfix), https://www.postfix.org, под IBM Public License (#ibmpubliclicense), - свободный и open-source (#opensource) агент отправки электронной почты.
- Dovecot (#dovecot), https://www.dovecot.org/, под MIT (#mit) и LGPLv2 (#lgplv2), - open-source (#opensource) IMAP (#imap) и POP3 (#pop3) сервер для Unix-like (#unixlike) систем, написанный с безопасностью из коробки.
- Roundcube (#roundcube), https://roundcube.net/, под GPL-3.0-or-later с исключениями под скины и плагины (#gpl3), - почтовый бразуерный IMAP клиент, свободный и open-source (#opensource).
- Apache SpamAssassin (#spamassassin #apache), https://spamassassin.apache.org/, под Apache License 2.0 (#apachelicense2), фильтрует спам с большим разнообразием техник.

Пошаговый гайд по настройке на свеженькой убунте-бубунте-22.04 и коллекция полезных ссылок будут в закрепленном комментарии к данной публикации


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

А еще саму настройку email-сервера можно заказать в нашем магазине https://digitable.ru

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

Have a fun!
🔥2
#medium #development #emails #dovecot #postfix #nginx #unix #linux #ubuntu #roundcube #spf #dkim #dmarc #dns #administration #devops #aapanel

Как развернуть свой email-server и поднять hosting panel? (часть вторая с графическим интерфейсом)

Сегодня разберём использование https://github.com/aaPanel/aaPanel - open-source с китайской лицензией. Это очередная панель, как вы могли привыкнуть к ISPManager, CPanel, ISPanel и прочее, но устанавливается проще, а также бесплатная, с опцией перейти на платные плагины и прочее

Устанавливаем на голую Ubuntu 22.04

Для начала не забудьте удостовериться, что в /etc/resolv.conf есть nameserver 8.8.8.8 - DNS от Google

После идём и ставим aapanel через


URL=https://www.aapanel.com/script/install_6.0_en.sh && if [ -f /usr/bin/curl ];then curl -ksSO "$URL" ;else wget --no-check-certificate -O install_6.0_en.sh "$URL";fi;bash install_6.0_en.sh aapanel


Пошаговый гайд по настройке на свеженькой убунте-бубунте-22.04 и коллекция полезных ссылок будут в закрепленном комментарии к данной публикации


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

А еще саму настройку email-сервера можно заказать в нашем магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
🔥2
#middle #development #typescript #patterns #decorators #fp #oop

Декоратор. Что-то декорирует. А зачем-почему?
По своей сути обычный структурный шаблон проектирования, целью которого является просто обогащение объекта чем-либо.

Typescript, к примеру, вы можете достигнуть это следующим образом, буду как всегда показывать на животных:


function vaccinated(target: any) {
target.prototype.reflect = function () {
console.log("Reflected.");
};
}

@vaccinated
class Animal {
public age: number = 42;
}

const instance = new Animal();
instance.reflect();


Когда и где это нужно?
- Это самый простой способ собрать подобие #chain_of_responsibility или хоть какого-то #pipe похожего оператора на классах
- В коде ваших тестов, базовую логику можно утащить туда, передавая дублирующийся код в качестве аргументов вашим декораторам

В чём плюсы?
- Легче писать #unit_testing под ваши классы, так как код становится ближе к модульности #modularity из парадигмы #fp

В чём минусы?
- Имея кривые руки, вы легко наплодите косяков вокруг `any`-типов, так как основная идея вообще избавиться от #типизация за счёт #generics

Что такое Decorator в Typescript в целом?


// Input - просто ваш type для target
type Decorator = (target: Input, context: {
kind: string; // class, method, getter, setter, field, or accessor
name: string | symbol; // имя декорируемого object
access: { // объект отвечающий за get-ер и set-ер декорируемого object
get?(): unknown;
set?(value: unknown): void;
};
private?: boolean; // если декорируемый object является private членом класса
static?: boolean; // если декорируемый object является static членом класса
addInitializer?(initializer: () => void): void; // способ добавить кастомную логику до вызова конструктора
}) => Output | void; // Output - что вы ожидаете получить

// При работе с классами
type ClassDecorator = (value: Function, context: {
kind: "class"
name: string | undefined
addInitializer(initializer: () => void): void
}) => Function | void


- Где ещё можно почитать?
- https://www.typescriptlang.org/docs/handbook/decorators.html
- https://blog.logrocket.com/practical-guide-typescript-decorators/
- https://dev.to/danywalls/decorators-in-typescript-with-example-part-1-m0f
- https://www.digitalocean.com/community/tutorials/how-to-use-decorators-in-typescript
- https://stackoverflow.com/questions/45160341/how-do-you-type-a-class-decorator-in-typescript
- https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

Другие простые примеры для расширения методов или полей вы можете найти используя Google, а вот более интересные примеры вы найдете в закрепленных комментариях, а именно:
- Пример
#middleware за счёт #decorator в #nodejs
- Расширение
#constructor без использования #prototype
- Расширение
#class целиком за счёт использования #наследование #inheritance (мой любимый пример)


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

А еще если вам понадобилась карьерная консультация, подготовка к интервью или настройка чего-либо, то можно ознакомиться с услугами в нашем магазине
https://digitable.ru

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

Have a fun!
🔥3👍1
Digitable: Channel pinned «Привет, %username%, здесь ты научишься полному циклу программиста в разработке ПО. Команда работающая над этим каналом - это ex/workers из Microsoft, Xsolla, Roadmunk, Иннотех, Контур, Akvelon, НЛМК и прочих - Софт-скиллы (искусство менеджмента для программиста…»
#all #development #ai #llm #localllm #chatgpt

В нашем магазине (https://digitable.ru) появилась новая опция "Поднять сервер с большой языковой моделью (как chatGPT)", расскажу только про устройство самого сервера что и к чему, в закрепленном комментарии найдете пошаговый гайд по развертыванию.

Итак, вариантов открытых моделей крайне много, но вот их лицензирование проблематично, самые распространенные:
- Llama (https://github.com/meta-llama/llama)
- GPT4All (https://github.com/nomic-ai/gpt4all)

Причем они также позволяют вам подключаться к chatGPT от OpenAI, но нас интересует следующая модель под названием Nous Hermes 2 Mistral DPO
У неё 7 миллиардов параметров, требует 8 GB RAM, а самое главное Licensed for commercial use.

Если открыть Hugging Face, то найдем следующее: https://huggingface.co/NousResearch/Nous-Hermes-2-Mistral-7B-DPO

Разумеется целый ряд benchmark-ов, по своему опыту на Metal от Apple скажу, что работает шустро, когда генерит простые ответы на вопросы. Ограничений никаких нет. Спросите сгенерировать ген. алгоритм зависнет на минуты 3, так как задача сложная, в остальном для "быстрой википедии" работает быстро.

#advice : Если просите сгенерировать код, неважно у какой модели, просите генерировать на Python, они все хорошо его знают, а потом просите сконвертировать полученный Python код на нужный вам язык, этот метод лучше, чем просто пробовать генерировать сразу код на JavaScript


Как дообучить ту же LLaMA можно почитать тут https://habr.com/ru/articles/755114/

Наша задача получить рабочее API для коммуникации. Гайд в комментах


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru/

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

Have a fun!
🔥3
#all #development #lectures #typescript #videos

Небольшая вводная по типизации в typescript

За кадром севший голос и температура, но лейт-мотив по типизации должен быть полезным

https://vk.com/video-35647046_456239144


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

Если вам понадобился личный лекториум или карьерная консультация, подготовка к интервью или настройка чего-либо, то можно ознакомиться с услугами в нашем магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
🔥2
#all #development #lectures #typescript #videos

Лекториум на тему "Построение REST Api" + построение баз данных и СУБД

Полная архитектура современного архитектурного стиля REST в беглом лекториуме на доступном языке

- Ассоциативные массивы
- Что такое REST
- CAP теорема (бегло пробежался в том числе по relational, key-value, document-oriented databases)
- Access pattern
- БД и СУБД
- CRUD
- Repository pattern

https://vk.com/video-35647046_456239145


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

Если вам понадобился личный лекториум или карьерная консультация, подготовка к интервью или настройка чего-либо, то можно ознакомиться с услугами в нашем магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
🔥4
#advanced #development #php #microfrontends #sandbox #composer #plugins #templates #javascript #hosting #twig

Нашел интересный плагин для PHP (twig), который впервую очередь создан для сахара разметки в PHP по подобию Pug (HTML), Django (Python), Blazor/Razor (C# ASP.NET) и так далее.

Одна из особенных фич - это sandboxing.

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

Идея очень похожа на заголовочные файлы от C. Или например на hosting в JavaScript, но на уровне шаблонов. Фактически вы можете просто вкорячить себе в проект PHP только для оркестрации микрофронтендов.


{{ include('page.html', sandboxed = true) }}


URL: https://twig.symfony.com
Composer: composer require twig/twig
GitHub: https://github.com/twigphp/Twig


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал
@digitable_blog

А еще если вам понадобилась карьерная консультация, подготовка к интервью или настройка чего-либо, то можно ознакомиться с услугами в нашем магазине
https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
Have a fun!
#advanced #development #warcraft #ai #voiceover #addons #habr #articles #python #games #tts #pytorch

На хабре новую статью написал, можно почитать, о том как я World Of Warcraft по-русски заставлял говорить

https://habr.com/ru/articles/818513/

Здравствуйте-здравствуйте, играю я значит в классический World of Warcraft и понимаю, что игра тосклива из-за отсутствия более-менее озвученных квестов. Конечно, инди-студия Метелица не способна озвучить всю свою игру, да и понятно, что сюжет развивается, а люди имеют свойство менять работу или, да это печально, физической гибели, как например случилось с озвучкой Артаса Менетила в Warcraft III: Frozen Throne.

В общем, заваривайте чай, как и все мои предыдущие публикации, эта статья в формате (б|в)лога.
🔥2
#all #development #python #packages #environment #dependencies #pip #pipx #conda #poetry #pyflow #pdm #venv

Какие способы работы с пакетами в Python вы знаете?

Да и вообще зачем всё это надо?

Смысл в том, что проекты редко делаются без стороннего набора библиотек, особенно, когда строите что-то поверх фреймворков. Так и выходит, что каким-то образом надо следить чтобы зависимости находились в одном месте и их можно было подтягивать вне зависимости от разработчика и среды окружения. Будь это другой разработчик на другой ОС или же CI/CD-агенты.

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


Что есть в Питоне?

Во-первых, pip, который можно использовать в следующем виде:

collapsed:: true
установка - pip install torch
установка конкретных версий - pip install torch==2.2
установка из конкретных registries, множества пакетов, а также с привязкой к версии питона - pip3.10 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
удаление - pip uninstall torch
листинг - pip show torch
через файл с указанием версий, например так:

# requirements.txt
torch==2.2

И последующая установка

pip3.10 install -r requirements.txt

Или удаление

pip3.10 uninstall requirements.txt

Но пакеты по-прежнему будут кешироваться, а значит нужно еще и пользоваться виртуальным окружением, чтобы использовать конкретную директорию

Единожды создаёте эту самую директорию,

python -m venv .venv

А далее, каждый раз в вашем терминале в папке проекта вызывайте . .venv/bin/activate, чтобы питон знал, что сейчас он работает с локальными модулями вместо глобальных


Во-вторых, pipx, который делает тоже самое что и pip, но уже сразу с venv

Во-третьих, poetry, который еще и в сборку умеет и в отслеживание зависимостей и огромную кучу всего
pipx install poetry==1.2.0

Есть там еще приколу вроде inject-а зависимостей, например


pipx inject ipython matplotlib


Чтобы доставить matplotlib к ipython

В-четверых, setuptools в роли такого же file-based указателя зависимостей
pip install setuptools

А далее в pyproject.toml указываем зависимости


[project]
name = "mypackage"
version = "0.0.1"
dependencies = [
"requests",
'importlib-metadata; python_version<"3.10"',
]

И можем собирать python -m build

В-пятых, conda, с лицензией BSD, между прочим
Создание виртуальных окружений

conda create -n digitable python=3

Использование окружения

source activate digitable

И установка разумеется conda install numpy

В-шестых, pdm, мне он нравится больше

Старт проекта - pdm init

Установка зависимостей


pdm add requests flask


В-седьмых, pyflow, на его вдохновении был создан pdm работает по сути также как и pipx, список команд такой же примерно

По сути на большей части проектов используется обычный `pip`, `pipx` или `poetry`
Что интересно, это то, что коммьюнити питона-петона-удава-петухона никак не можем договориться делать что-то одно, хотя тот же javascript тоже в ту же степь пошел, теперь там `yarn`, `npm`, `pnpm` и имхо из-за вендорства Microsoft над Typescript скоро будет `nuget`, хотя ЕМНИП npm теперь тоже им принадлежит
#docs #python

Ссылки для публикации

Доки по pip: https://pip.pypa.io/en/stable/installation/
Доки по pipx: https://github.com/pypa/pipx
Доки по venv: https://docs.python.org/3/library/venv.html
Доки по poetry: https://python-poetry.org/
Доки по setuptools: https://pypi.org/project/setuptools/
Доки по conda: https://conda.io/projects/conda/en/latest/user-guide/getting-started.html
Доки по pdm: https://github.com/pdm-project/pdm
Доки по pyflow: https://github.com/David-OConnor/pyflow


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

А еще если вам понадобилась карьерная консультация, подготовка к интервью или настройка чего-либо, или даже, например, парсер/скраппер на питоне то можно ознакомиться с услугами в нашем магазине https://digitable.ru
Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!

Have a fun!
#all #development #ai #llm #localllm #chatgpt #news

Парижский проект Mistral AI представил Codestral — модель искусственного интеллекта для генерации кода.

Нейросеть обучили на наборе данных из более чем 80 языков программирования, включая популярные (Python, Java, C, C++ и JavaScript, Bash) и даже Swift и Fortran.

- 22 млрд параметров

Официальная ссылка: https://mistral.ai/news/mistral-ai-non-production-license-mnpl/
Hugging Face: https://huggingface.co/bartowski/Codestral-22B-v0.1-GGUF

Весит 40 GB

О том, как подключить и сделать себе свой клиент/REST API, мы писали в отдельной публикации: https://t.me/c/2056433705/20
#all #development #lectures #frontend #videos #web

Лекториум на тему "Фронтенд разработка приложений"

Что такое фронтенд и почему он устроен именно так как устроен?
Как в это вписывается React и его основные идеи?

https://vk.com/video-35647046_456239152 (в скором времени переедем на собственное облако для статики)


А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog


Если вам понадобился личный лекториум или карьерная консультация, подготовка к интервью или настройка чего-либо, то можно ознакомиться с услугами в нашем магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
🔥2
#development #design #uiux #itten #colors #theory #web #mobile #colortheory #csharp

Работа с цветовой палитрой - одна из важнейших частей при разработке клиентских приложений.


Лет 8 назад, я хотел как-то избавиться от дизайнеров, изучив, каким образом, они подбирают согласованность в цветах. Репозиторий найти сложно, но кусок кода под подбор цветов Иттена остался.

Как это работает?

В начале 20-ого века швейцарский художник Иоханнес Иттен создал ощутимый вклад в изучение колористики. Написанная книга "Искусство цвета" делится принципами работы с цветом и was ist цветовой круг.

По сути это схема из 12 цветов с определенной иерархией.

Первичные - синий, желтый и красный, перемешивая которые, можно получить любые оттенки, что может воспринимать человеческое зрение.

Вторичные - зеленый, оранжевый и фиолетовый, что являются результатами смешения первичных цветов.

Третичные - смешивание первичных и вторичных

Итог: 3 первичных, 3 вторичных, 6 третичных

И как с этим работать?
Выберите или придумайте алгоритм.


Вариант А (Complementary pairs): Берем противоположные друг другу цвета (т.е. те, что находятся напротив друг друга, например зеленый и красный)

Вариант Б (Contrast triadic): Также как и А, только берем 2 цвета напротив вместо 1

Вариант В (Classic triadic): Также как и Б, только треугольник будет равносторонний

Вариант Г (Analog triadic): Берем просто три цвета подряд по дуге

Вариант Д (Tetrad): Как и В, только квадрат и теперь цветов 4

Вариант Е (Rectangle): Как и Д, только прямоугольник


Имхо, можно и самому навыдумывать тьму, выше только популярные

В комментариях:

- лайфхак-алгоритм для поиска комплементарных пар с примером кода на C#
- картинки для каждого из вариантов выше
- полезные ссылки

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
#tools #vm #dd #etcher #unix #posix #typescript

Для того, чтобы заливать ваши образы систем на флешки у вас есть один путь: использовать dd

Берете ваш образ, сигнатура следующая:

dd if=ЧТО of=КУДА bs=РАЗМЕР_БЛОКА

Например так

dd if=ubuntu.iso of=/dev/sda bs=1M

Подробно можно почитать, например тут: https://en.wikipedia.org/wiki/Dd_(Unix)


Однако инструмент в кривых руках похоронит вашу систему и диски в мгновенье ока, поэтому новичкам не рекомендуется на живых машиных тестить, а прогресс трекать хочется, тогда на помощь придет Etcher

Open source инструмент, хорошо справляется с прожигом образов операционных систем на девайсы

Количество звезд: 28.4k

GitHub: https://github.com/balena-io/etcher

Написан на TypeScript

Поддерживает ОС для запуска:

- Linux; most distros; Intel 64-bit.
- Windows 10 and later; Intel 64-bit.
- macOS 10.13 (High Sierra) and later; both Intel and Apple Silicon.

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!
#development #typescript #patterns #classes #inheritance #fp #oop

Каким образом заставить класс расширить поведение обобщенного класса? Или как сделать "наследование налету"?

Например у нас есть вот такой код


class Dog {
private name = 'dog';

public getName() {
console.info(this.name);
}
}

class Duck {
private name = 'duck';

public getName() {
console.info(this.name);
}
}


Но в какой-то момент мы хотим сделать так, чтобы наследовалась либо утка либо собака, в зависимости от переданного generic-а в наши подклассы, например подвергнутые мутациям



export function useDraft<Animal extends Duck | Dog>(
animal: Animal
) {
return class extends Dog {
name: string;

getName() {
console.info(animal);
}
}
}


Вопрос - как избавиться от return class extends Dog получив запись вида return class extends Dog & Cat

И оказалось так можно сделать, выглядит сложно, но только ощутить прекрасие сего кодирования!

Отвечая на вопрос - а зачем это вообще в production коде:

У вас может быть два класса тестов, например одни проверяют скриншот всей страницы, а другие проверяют ее часть

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

Финальный код в комментариях к данной публикации!

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru

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

Полезные ссылки:

https://github.com/microsoft/TypeScript/issues/4890
У нас тут микро-подкаст вышел про AI от вуза 🙂

Можете послушать, если интересно 😄

https://vk.com/video-35647046_456239167

Совместно с замечательным руководителем и преподавателем и моим первым тимлидом там про нейросети рассказываю) это пилот) но зато вы узнаете чуточку больше из научно-практических уст, чем просто от любителей :)

#подкасты #ai #нейросети #игхту
🔥4
#management #development #office #luckysheet #sheets #docs #excel #presentations #notes #365 #libreoffice #opensource

Сколько разных офисных решений вы знаете?

Самые известные из них:

* Microsoft Office (proprietary)
* Libre Office (open source)
* Google
* Мой Офис

И так далее

Но после закрытия opensource проекта Luckysheet на сцену вышел Univer

Полностью открытый и включает стандартный пак: документы, эксели и презентации

Его легко встроить куда угодно или просто развернуть для себя в рамках собственного облака

Из самых крутых фич - это возможность запускать multi-instances как показано на скриншотах

Плюс есть возможность сделать collaborative режим

github: https://github.com/dream-num/univer
demos: https://univer.ai/examples
landing: https://univer.ai
documentation: https://univer.ai/guides/sheet/introduction

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru

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