https://devzone.org.ua/feed2024-03-09T20:09:03+00:00https://devzone.org.ua/40015
Програма має базові налаштування і працює одразу після встановлення, стандартно блокуючи на десять хвилин доступ до ssh після п'ятої невдалої спроби входу. Подивитись стандартні налаштування можна у файлі /etc/fail2ban/jail.conf
Утім, в системах Debian 12 існує відома проблема її запуску зі штатних репозиторіїв, що звершується з помилкою сервісу systemd. Виправити це досить просто виконавши наступні кроки
Переконайтесь, що python3-systemd встановлено:
apt install python3-systemd
Створіть файл /etc/fail2ban/jail.local та додайте наступні налаштування:
[DEFAULT]
backend = systemd
Перезавантажте сервіс:
systemctl restart fail2ban
]]>
2024-03-09T20:09:03+00:00https://devzone.org.ua/40013
Зокрема, його зручно використовувати у якості проксі серверу для віртуальних хостів, аналогічно тому як цю функцію виконує Nginx для HTTP.
Це може бути зручно, коли немає змоги піднімати для кожного серверу маску підмережі, або коли сайт працює на VPS з одним виділеним IP.
Встановлення
Написаний Gmid на C, перед його збіркою потрібно додати наступні бібліотеки:
apt install bison byacc
Буде правильним запускати і відповідно виконувати процес Gmid від окремого користувача, якого спочатку створимо та виконаємо вхід:
useradd -m gmid
su gmid
Клонуємо останню версію з офіційного дзеркала на GitHub і виконуємо компіляцію:
git clone https://github.com/omar-polo/gmid.git
cd gmid
./configure
make
Налаштування reverse-proxy
Нижче описаний приклад створення двох віртуальних хостів host1.com та host2.com, які працюють на умовних адресах 1.2.3.4:1965 та 4.3.2.1:1965 відповідно.
Таким чином, файл конфігурації виглядатиме т...]]>
2024-03-09T14:28:08+00:00https://devzone.org.ua/40011
Вирішується це досить просто, за допомогою утиліти Rustup.
Спочатку потрібно видалити встановлені раніше версії, разом з їх залежностями.
Наприклад, в Debian:
apt remove cargo rustc
apt autoremove
Наступні кроки виконуються від того користувача, від якого планується подальша робота з програмою.
Таким чином, пакети будуть стандартно встановлюватись до теки ~/.cargo
Після введення наступної команди слідуємо підказкам:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Оновити пакети до останньої версії можна командою:
rustup update
Якщо потрібно зібрати будь яку програму на більш ранній версії, наприклад 1.63 - достатньо встановити її поряд з іншою:
rustup install 1.63
Для збірки програми, вказуємо відповідну версію компілятора:
cargo +1.63 build --release
Щоб видалити встановлені таким чином cargo, rustc включно з rustup:
rus...]]>
2024-03-09T12:41:27+00:00https://devzone.org.ua/40010
Видалення попередньої версії
Спочатку перевірте, чи не встановлена певна версія Go за допомогою пакетного менеджеру:
go version
Якщо так, попередньо переконайтесь, що її не використовують інші програми, після чого її можна видалити із системи:
apt remove golang
Додатково можна перевірити наявність старих файлів та зачистити їх:
rm -rf /usr/lib/go-ВЕРСІЯ
Встановлення останньої версії
Наступні кроки виконуються в домашній теці користувача, від якого планується запуск програми:
cd ~
Переходимо на сторінку завантажень Go і обираємо версію для потрібної архітектури:
wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz
Розпаковуємо архів, після чого його можна видалити:
tar -xzf go1.22.1.linux-amd64.tar.gz
rm go1.22.1.linux-amd64.tar.gz
Переміщуємо файли до системної теки від root:
sudo mv go /usr/local/
Створимо робочу теку Go для поточного користувача...]]>
2024-03-09T09:31:01+00:00https://devzone.org.ua/40009
Для транспорту даних використовує вбудований вузол Yggdrasil, не потребує його окремого встановлення а також може ізольовано працювати поряд з ним. Трафік, що передається - захищений і не потребує додаткового шифрування TLS.
З коробки, являє собою сервер, підключитись до якого можна через поштовий клієнт типу Thunderbird або DeltaChat. Утім, від класичних поштових серверів відрізняється протоколом транспорту, тому не є сумісним зі звичайними скриньками і працює у власній мережі. Yggmail варто сприймати саме як месенджер, оскільки він має тільки спільний поштовий інтерфейс IMAP / SMTP але іншу модель транспорту.
Встановлення
Yggmail знаходиться на стадії розробки, тому для встановлення будем...]]>
2024-03-09T08:53:20+00:00https://devzone.org.ua/40008
Написаний на базі Node.js / Electron. В стандартних налаштуваннях використовує випадковий проксі-сервер Invidious, що запобігає відслудковуванню користувача і формуванню персоналізованих списків. Метод підключення та провайдер може бути вибраний вручну, якщо така потреба є. Кожен може стати таким провайдером, якщо сервер відповідає певним умовам.
Окрім того, що ретрансляція відео FreeTube не містить реклами, клієнт працює у режимі створення локальних підписок, плейлистів, вподобань, які за потреби можна експортувати в JSON чи XML на інший пристрій без участі третіх сторін. Такий підхід дозволяє переглядати виключно той контент, який подобається саме вам, і ніхто не матиме доступу до ваших персональних колекцій.
Серед функцій - гнучкі налаштування інтерфейсу, зручне завантаження відео, аудіо та субтитрів локально у різній якості, щоправда максимальна якість такого відео обмежена 1080p / 60f...]]>
2024-03-08T19:25:45+00:00https://devzone.org.ua/40007
Наприклад, щоб зменишити яскравість до 80%:
xrandr --output eDP --brightness 0.8
Якось випадково мені довелось залізти в драйвер підсвітки /sys/class/backlight/radeon
Змінивши стандартне значення з 255 до комфортних 50 я був здивований наскільки контрастне відображення вдалось отримати!
Вражає, скільки часу провів на пересвіченому моніторі!
Як виявилось, існує два фактори: живлення на катоди RGB та власне самої підсвітки.
В залежності від відеокарти, ймовірно, для інших користувачів iMac цього року випуску, команда виглядатиме так (і виконується від root):
echo 50 > /sys/class/backlight/radeon_bl0/brightness
або ж подивіться що у вас в теці (і підставте в команду вище вашу карту):
ls /sys/class/backlight
Зауважу, що наведена вище інструкція, у моєму випадку, вимагає зміни acpi_backlight в значення native
#/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet...]]>
2024-03-08T17:32:42+00:00https://devzone.org.ua/40006
Варіант передбачає роботу з абеткою версії Максима Прудеуса з наступним набором символів:
A B Cц Čч D E F G Ĝґ H I Jй K L M N O P R S Šш T U V Yи Z Žж '
Як програміст, користуюсь версією клавіатури, що базується на мапі us, оскільки вона дозволяє не змінювати розкладку під час написання коду і відвідування англомовних ресурсів.
В прикладі використовується код ue - українська європейська, ukrainian extended, united european тощо.
Код можна замінити на ul - наприклад "українська латинська" - тут кому як подобається!
#/usr/share/X11/xkb/symbols/ue
partial alphanumeric_keys
include "level3(ralt_s...]]>
2024-03-08T15:38:25+00:00https://devzone.org.ua/40005
Статус
Забігаючи вперед, скажу що монета KevaCoin (KVA) у її поточному статусі і ймовірних перспективах - не буде цікавою трейдерам, оскільки була давно знята з торгівлі, проект покинули інвестори, а останній коміт датується 20 березня 2020 року.
Щодо розробника є лише наступна інформація:
According to the information disclosed by the community moderator, the developer/administrator of the project lost contact completely after the outbreak of COVID-19.
Наразі середній хешрейт мережі складає приблизно 300 kH/s, кілька років тому - близько 700 kH/s, тому зберігається впевнена тенденція до колапсу (хоча деякі монети в такому стані можуть перебувати досить довго, поки не знайдуть новий імпульс). Частка потужності мережі при цьому іноді сягає 100% для одного пулу, що має застерегти від використання її у яко...]]>
2024-03-08T08:28:59+00:00https://devzone.org.ua/40004
Класично, сферою застосування може бути пошуковий сервер для сайту, будь якої бази даних, індекс кравлеру інтернет / локальної мережі, тощо.
У той час, як Sphinx версії 3 і досі має закритий код, Manticore - це форк відкритого Sphinx 2.
Наразі активно розробляється, має живу спільноту і містить багато доповнень, особливо в плані автоматизації real-time індексів.
Окрім того, Manticore у більшості випадків може замінити собою сервер PostgreSQL або MySQL, де не потрібна гнучка вибірка і багаторівневі запити. Таким чином, можна значно заощадити на використанні жорсткого диску для великих індексів а також зменшити використання пам'яті у разі, якщо MySQL використовується просто як основна база даних (до якої раніше звертався Sphinx через document ID).
Встановлення
На прикладі Debian / Linux, доволі просте:
wget https://repo.manticoresearch...]]>
2024-03-07T16:36:54+00:00https://devzone.org.ua/40003
Для цього, в стандартній конфігурації, використовується клавіша T.
Обрати таке зображення можна в меню Multiplayer → Customize, але якщо жодне з них не відповідає бажаному, є можливість зробити його самому, в редакторі з відкритим кодом - GIMP!
Файл графіті/логотипу для Half-Life має бути у відтінках сірого, розміром 64х64 пікселя та у форматі BMP.
При тому, чорний колір у поточній схемі буде відповідати 100% прозорості. Палітру можна потім обрати безпосередньо в інтерфейсі ігрових налаштувань.
Щоб створити логотип на базі існуючого кольорового зображення, наприклад:
Відкриваємо його в редакторі GIMP і виконуємо наступні кроки:
Image → Scale Image → 64×64 / Quanlity: Linear
Layer → Transparency → Remove Alpha Channel
Colors → Components → Decompose
Colors → Invert
File → Export As.. → зберігаємо до valve/logos/filename.bmp
Якщо все зроблено правильно, результат буде наступним:
Дивіться також
Half-Life в Lin...]]>
2024-03-07T15:31:40+00:00https://devzone.org.ua/40002
Вона стандартно працює в Linux через Steam, утім варто знати й про таку альтернативу рушія з відкритим кодом, як Xash3D/FWGS.
Встановлення
Для встановлення, знадобиться підтримка архітектури i386:
dpkg --add-architecture i386
apt update
apt install build-essential gcc-multilib g++-multilib python3 libsdl2-dev:i386 libfontconfig-dev:i386 libfreetype6-dev:i386
export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
Після цього клонуємо репозиторій та збираємо бінарний пакет:
git clone https://github.com/FWGS/xash3d-fwgs.git
cd xash3d-fwgs
./waf configure -T release
./waf build
Коли рушій буде скомпільовано, його можна перенести у потрібну теку, де звичайно зберігаються ігри:
./waf install --destdir=/path/to/any/output/directory
Наступним кроком, потрібно придбати саму гру (до якої і досі виходять оновлення). Купити гру можна безпосередньо у Steam. Зробити це найкраще у свята, коли бувають розпрода...]]>
2024-03-07T13:30:23+00:00https://devzone.org.ua/40001
Резольвер та клієнтська частина написані на мові Rust. Системою використовуються зони .anon, .btn, .conf, .index, .merch, .mirror, .mob, .screen, .srv, .ygg, де .anon та .ygg - зарезервовані для адрес мережі Yggdrasil що виключає випадковий перехід з таких адрес на хости клірнет.
Для запобігання кіберсквотингу використовується модель PoW і частково - PoS, генерація нових доменів також обмежена добовим інтервалом, а на один персональний ключ можна згенерувати не більше 10 доменів (що насправді має досить спірне підгрунтя).
Тим не менше, система досить зручна для локальних мереж, оскільки дозволяє створити безкоштовний домен на один рік без необхідності реєстрації персональних даних та залежності від центрального серверу. А розмір блокчейну при поточній кількості близько 1000 доменів складає приблизно 7 Мб.
В середньому, на комп'ютері з процесором i5, новий домен генерується від декількох до 12 годин; утім...]]>
2024-03-06T20:42:42+00:00https://devzone.org.ua/40000
В своїй основі використовує приватний ключ для генерації постійних псевдо-адрес IPv6 в діапазоні 0200::/7
Має різні сфери застосування, зокрема: автоматизована побудова локальних мереж, маскування IP (як транспорт I2P), обхід блокувань та обмежень віртуальної адресації NAT (наприклад, для організації відео-спостереження без наявності виділеної адреси, розгортання домашнього веб-серверу, віддаленого керування інфраструктурою підприємства тощо). Завдяки простоті встановлення та здатності до саморозгортання підключень, здобув широку популярність зокрема серед користувачів CJDNS.
Встановлення
Yggdrasil написаний на Go, початковий код доступний в репозиторії на GitHub.
Бінарні збірки можуть бути встановлені зі штатного репозиторію командою:
apt install yggdrasil
або використовуючи останню збірку з релізу:
wget https://github.com...]]>
2024-03-06T18:36:50+00:00https://devzone.org.ua/39999
Орієнтований на мінімалізм та конфіденційність, оскільки виключає використання таких веб-технологій як Cookies та JavaScript, а формат даних, що передається - обмежений текстом або бінарними даними без підтримки стиснення та фонового завантаження зі сторонніх ресурсів. Обов'язковим є захист трафіку сертифікатом TLS.
Не зважаючи на простоту, протокол цілком багатофункціональний і дозволяє працювати з різними типами ресурсів: от як хостинг статичних файлів для персональних сторінок так і системи з авторизацією та обробкою запитів користувача - форуми, пошукові системи, організація радіо та відео стрімів, обмін зображеннями та іншими мультимедійними даними.
Враховуючи архітектуру, Gemini здебільшого буде цікавий тим, кого не влаштовує "роздутість" сучасного HTTP; стане в нагоді користувачам командного рядка, E-ink планшетів.
Термінологія
Як і в багатьох екосистемах, для Gemini характерна своя терм...]]>
2024-03-06T15:26:33+00:00https://devzone.org.ua/39995
У цій статті ми розповімо про різні методи оптимізації, які ви можете швидко застосувати, щоб створити якомога менший образ докера. Ми також розглянемо деякі з найкращих інструментів для оптимізації.
Docker як контейнерний рушій дозволяє легко взяти шматок коду і запустити його всередині контейнера. Це допомагає інженерам зібрати всі залежності коду та файли в одному місці, звідки їх можна запустити будь-де, досить швидко та легко.
Вся концепція образів, які можна запускати будь-де, починається з простого конфігураційного файлу, який називається Dockerfile. Спочатку ми додаємо всі інструкції зі збирання, такі як залежності коду, команди та деталі базового образу, у Dockerfile.
Потреба в оптимізації образів Docker
Незважаючи на те, що процес збирання Docker є простим, багато організацій припускаються помилки, створюючи роздуті та не оптимізовані образи.
При типовій розробці...]]>
2024-02-20T12:49:21+00:00https://devzone.org.ua/39994
JavaScript файли є життєво важливими аспектами процесу розробки веб-застосунка, але для досягнення успіху вирішальну роль відіграють швидкість його роботи та зручність для користувачів. Тому для забезпечення безперебійної роботи важливо оптимізувати JavaScript-файли. Оптимізація файлів JavaScript дозволяє усунути проблему блокування рендерингу, часу завантаження сторінки, великого розміру файлу тощо.
Розуміння оптимізації JavaScript
Оптимізація JavaScript - це процес підвищення продуктивності. Щоб зрозуміти переваги оптимізації, спочатку потрібно розібратися з проблемами, пов'язаними з JavaScript. Деякі з них включають
Виконання скриптів. Файли JavaScript, що містять бло...]]>
2024-01-31T15:50:27+00:00https://devzone.org.ua/39986
Дисклеймер: основна частина цієї статті була написана ще у лютому 2023, але часу та натхнення довести її до кінця не вистачало. Забігаючии наперед скажу, що розробляв це добро наприкінці січня, з тих пір вийшло кілька десятків оновлень і зараз застосунок вже зовсім не такий, як тоді. Я знайшов старі скріншоти для автентичності, тож не дивуйтеся, що зараз все трохи інакше.
Якщо відкинути занудні скарги автора на недостатньо зелену траву та вже не такий смачний смузі, залишиться кілька слів про те, як дуже швидко зробити продуктивний веб-застосунок для проекту вихідного дня. Бажано красивий, зручний та приємний у підтримці. Приклад реальний, код у відкритому доступі, можна поклацати, та й взагалі все як у людей.
Завдання було дуже просте: створити зручний розклад київської міської електрички, яким можна легко скористатися навіть з мобільного браузеру. Знаю, не звучить як виклик для початку 2023:) Проте, ситуація на той момент була не дуже: цю потребу закривало приблизно 0...]]>
2023-11-11T17:04:00+00:00https://devzone.org.ua/39979
Минулого року була стандартизована нова версія протоколу, HTTP/3, організацією Internet Engineering Task Force (IETF), яка відповідає за визначення інтернет-технологій. Відтоді HTTP/3 і пов'язаний з ним протокол QUIC стали швидко поширюватися у всесвітній павутині. Точні цифри залежать від джерела та методології вимірювання, але HTTP/3 підтримують від 19% до 50+% веб-серверів та мереж по всьому світу.
Оскільки ці нові протоколи активно використовуються великими компаніями, такими як Google і Meta, можна з упевненістю сказати, що велика частина поточного інтернет-трафіку вже сьогодні використовує HTTP/3.
У цій статті я розповім про те, які проблеми вирішує HTTP/3, як він працює, чому його так швидко прийняли, і які обмеження він все ще намагається подолати.
Навіщо потрібен HTTP/3?
Мережевий протокол описує, як ві...]]>
2023-10-24T09:46:46+00:00https://devzone.org.ua/39978
Що таке команда trap?
Команда trap використовується для обробки сигналів, які можуть бути надіслані процесу. Сигнали - це спосіб для інших процесів або системи повідомляти процесу про певні події або стани. Наприклад, сигнал може бути надісланий процесу, щоб попросити його завершити роботу або перезавантажитися.
Команда trap дозволяє нам визначити, які дії повинні бути виконані, коли процес отримує певний сигнал. Можливі дії включають в себе виконання певних команд, ігнорування сигналу або навіть завершення процесу.
Синтаксис команди trap
Синтаксис команди trap виглядає так:
trap 'command' SIGNAL
'command' - команда або список команд, які...]]>
2023-10-09T10:50:38+00:00https://devzone.org.ua/39974
Разом із розробником Ruby on Rails від Codica Іваном, ми підготували докладний гайд — які питання вам точно поставлять на інтервʼю.
Отже, погарцювали:
Які типи даних підтримує Ruby?
Важливо розуміти, що в Ruby типізація є динамічною. Це означає, що вам не потрібно оголошувати типи змінних заздалегідь. Ruby автоматично визначатиме змінні на підставі їхніх значень.
Ruby підтримує:
Числа:
Integer: представляють цілочисельні значення
Float: показують числа з рухомою крапкою
String: тут послідовність символів узято в лапки. Наприклад, "Hello, world!".
Symbol: являють собою літерали, які використовуються для імен та ідентифікаторів. На відміну від рядків, символи є незмінними. Наприклад, :name.
Boolean: являє собою логічне значення і може бути або істиною (true), або хибою (false).
Array: представляють упорядковану колекцію елементів. Елементи можуть бут...]]>
2023-10-04T14:58:03+00:00https://devzone.org.ua/39973
Візьмемо Amazon. Що, на вашу думку, є посиланням на один з їхніх продуктів?
Простого ідентифікатора на кшталт 3c6n63N більш ніж достатньо для представлення будь-якого продукту, при цьому він залишається читабельним і полегшує комунікацію. Альтернативний UUID на кшталт a73ba12d-1d8b-2516-3aee-4b15e563a835 є просто марнотратним з точки зору користувача.
У конкретному випадку, я був свідком того, як об'єкти, які мали бути доступними кінцевим користувачам, використовували зручні для користувача ідентифікатори, в той час,...]]>
2023-10-03T10:22:50+00:00https://devzone.org.ua/39972
Вже восьмий рік поспіль Rust очолює рейтинг "найбажанішої мови програмування" у щорічному опитуванні розробників Stack Overflow. А оскільки понад 80% розробників повідомили, що хотіли б знову використовувати цю мову в наступному році, варто замислитися, як мова, створена менш як 20 років тому, змогла завоювати серця розробників по всьому світу.
У цій статті ми розглянемо історію Rust, для чого вона зазвичай використовується, чому розробники так її люблять, а також деякі ресурси, які допоможуть вам почати вивчати одну з найбільш динамічно зростаючих мов на GitHub.
Отже, що таке мова програмування Rust?
Rust - це мова системного програмування, яка спочатку була задумана як безпечніша альтернатива мовам C та C++, але набула значної популярності серед розробників завдяки своєму акценту на бе...]]>
2023-10-02T09:42:15+00:00https://devzone.org.ua/39970
Vite - це сучасний інструмент для розробки фронтенду, який користується величезною популярністю. Просто подивіться на цю статистику завантажень з npm-трендів на зображенні нижче.
Ця тенденція зумовлена ключовою концепцією, що лежить в основі Vite: досвід розробника. У порівнянні з Webpack, Vite може запропонувати значно швидший час збірки та гаряче перезавантаження під час розробки. Це досягається завдяки використанню переваг сучасних функцій браузера, таких як модулі ES в браузері.
Перш ніж ми зануримося в процес міграції з Webpack на Vite, варто зазначити, що середовище фронтенд-розробки постійно розвивається, і Vite - не єдиний інструмент в цьому напрямку. esbuild - ще один неймовірно швидкий JavaScript-бандлер і мініфікатор, який привертає увагу веб-розробників. А якщо ви шукаєте підхід з нульовою конфігурацією, вам також варто звернути увагу на Parcel, який забезпечує безперебійну роботу для багатьох розробни...]]>
2023-09-29T10:03:56+00:00https://devzone.org.ua/39967
При визначенні функцій ви часто включаєте список параметрів, розділених комами, щоб визначити, які типи аргументів користувач може передавати вашій функції. Використання символів зірочки та слешу як спеціальних параметрів у заголовку функції може спочатку виглядати дивно:
def strange_function(*, x, y):
...
Обидва ці визначення функцій можуть виглядати трохи дивно, але їхні параметри насправді є абсолютно правильними. Отже, що саме означають голі зірочка та коса риска у визначенні функції у Python?
Коротко: Зірочка та слеш у Python: контролюють як передавати значення у функції
Зірочка * і пряма сл...]]>
2023-09-26T10:48:28+00:00https://devzone.org.ua/39969
Коли ви підключаєте телефон Android до ПК, у вас є можливість змінити режим USB між передачею файлів/Android Auto (MTP), прив'язкою USB (NCM), MIDI або PTP. Однак в Android 14 з'явилася нова опція у налаштуваннях USB: USB веб-камера. Виб...]]>
2023-09-25T09:27:45+00:00https://devzone.org.ua/39966
Тут ми розповімо вам про пошук музичних даних за допомогою підходу, відомого як векторний пошук. Оскільки понад 80% даних у світі неструктуровані, корисно знати, як поводитися з різними типами даних, окрім тексту.
Якщо ви хочете стежити за кодом і виконувати його під час читання, отримайте доступ до файлу на GitHub, вказаного в кінці цієї статті.
Архітектура
Уявіть, що ви наспівуєте мелодію пісні, яку намагаєтеся згадати, і раптом на екрані з'являється пісня, яку ви наспівували? Саме це ми сьогодні й зробимо, доклавши певних зусиль та налаштувавши модель даних.
Щоб досягти нашого результату, ми створимо наступну архітектуру:
Головною дійовою особою тут є вбудовування....]]>
2023-09-21T08:21:46+00:00https://devzone.org.ua/39965
Ключове слово go для створення підпрограм
Канали, для зв'язку між підпрограмами
Контекстний пакет для поширення скасування (propagating cancellation)
Пакети sync та sync/atomic для примітивів нижчого рівня, таких як м'ютекси та атомарний доступ до пам'яті
Ці можливості мови та пакети надають багатий набір інструментів для створення паралельних програм. Можливо, ви ще не знаєте про набір високорівневих примітивів паралелізму, доступних у "розширеній стандартній бібліотеці", що знаходиться на golang.org/x/sync. У цій статті ми їх розглянемо.
Пакет singleflight
Як зазначено у документації до пакета, цей модуль надає механізм придушення дублюючих викликів функцій.
Цей пакет надзвичайно корисний у випадках, коли у відповідь на дії користувача ви виконуєте щось обчислювально дороге (або просто повільне, наприклад, доступ до мережі). Наприклад, скажімо, у вас є база даних з інформацією пр...]]>
2023-09-19T08:56:41+00:00https://devzone.org.ua/39964
Троє ранніх співробітників PayPal хотіли створити платформу для обміну відео. Тож вони заснували YouTube у себе в гаражі.
Але вони мали обмежені фінансові ресурси. Тому вони фінансували YouTube коштом кредитних карток та інфраструктурних запозичень. Фінансові обмеження змусили їх створити інноваційні методи масштабування.
Наступного року вони досягли 100 мільйонів переглядів відео на день. І вони зробили це, маючи лише 9 інженерів.
Масштабованість YouTube
Ось 11 методів масштабування YouTube:
1. Магічний маховик
Вони застосували науковий підхід до масштабування: зібрали та проаналізували системні дані.
Їхній робочий процес був постійним циклом: виявлення та усунення вузьких місць. Такий підхід дозволив уникнути потреби у висококласному обладнанні та зменшити витрати на нього.
2. Нудний технічний стек
Вони спростили свій технічний стек і використовували перевірені технології. Їхній технічний стек:
У MySQL зберігалися метадані: назви відео, теги, опис...]]>
2023-09-17T17:14:58+00:00https://devzone.org.ua/39963
Під час розгортання ви, ймовірно, перезапускаєте ваших обробників черги за допомогою чогось на кшталт artisan queue:restart або supervisorctl restart <ім'я обробника>.
Laravel завбачливо підмітив, що нам не подобається, коли завдання, яке знаходиться у процесі виконання, раптово вбивається. Laravel перевіряє, чи воркер повинен зупинитися. Якщо так, то він чекає, поки поточне завдання буде завершено, а потім завершує роботу.
Він робить це за допомогою сигналів.
Сигнали?
Так, сигнали. Сигнали - це події, які процес може слухати і вирішувати, як на них реагувати. Наприклад, натискання ctrl+c у вашому терміналі надсилає SIGINT (переривання) поточному процесу. Зазвичай це призводить до зупинки процесу.
Ви також можете скористатися командою kill для надсилання сигналу (будь-якого сигналу). Надсилання SIGINT за допомогою kill виглядає наступним чином:
# Ці команди еквівалентними
kill -2 `
kill -s INT