#фишка дня
Не только лишь все знают, что одному элементу можно задавать несколько фонов.
Ну, буквально:
А вот чего точно могли не знать, так это что если расположить в углу блока по радиальному градиенту, получатся прикольные завихрения, как на иллюстрации.
Пруф имеется: https://codepen.io/alinaki/pen/zYbbvWr
Всем красоты, котаны.
#css #gradient #бородач
Не только лишь все знают, что одному элементу можно задавать несколько фонов.
Ну, буквально:
.myclass {
background:
background1,
background2,
/* …, */ backgroundN;
}
А вот чего точно могли не знать, так это что если расположить в углу блока по радиальному градиенту, получатся прикольные завихрения, как на иллюстрации.
Пруф имеется: https://codepen.io/alinaki/pen/zYbbvWr
Всем красоты, котаны.
#css #gradient #бородач
❤13👍2
#инструмент дня
AI-парсинг (скрейпинг, скраппинг) сайтов набирает обороты, но классические утилиты никто не отменял.
И среди таких утилит очень выделяется pipet: https://github.com/bjesus/pipet
Создаем pipet-файл:
Ну и запускаем:
pipet hackernews.pipet
Красота? Не то слово. Более того, утилита умеет рендерить сразу в шаблоны, напоминающие Mustache:
Ясное дело, никто не отменяет и ИИ прикрутить, если так надо :) Ну а вообще, поддерживаются пайпы, потому результат любой строки конфигурации можно пропустить через что угодно вообще. Да и запуск возможен не только curl-ом, но и Playwright.
В общем, я впечатлен. Надо брать.
#go #parser #scraping #бородач
AI-парсинг (скрейпинг, скраппинг) сайтов набирает обороты, но классические утилиты никто не отменял.
И среди таких утилит очень выделяется pipet: https://github.com/bjesus/pipet
Создаем pipet-файл:
curl https://news.ycombinator.com/.title .titleline span > a .sitebit aНу и запускаем:
pipet hackernews.pipet
Красота? Не то слово. Более того, утилита умеет рендерить сразу в шаблоны, напоминающие Mustache:
<ul> {{range $index, $item := index (index . 0) 0}} <li>{{index $item 0}} ({{index $item 1}})</li> {{end}}</ul>Ясное дело, никто не отменяет и ИИ прикрутить, если так надо :) Ну а вообще, поддерживаются пайпы, потому результат любой строки конфигурации можно пропустить через что угодно вообще. Да и запуск возможен не только curl-ом, но и Playwright.
В общем, я впечатлен. Надо брать.
#go #parser #scraping #бородач
❤3👍3
💡 Хватит мучить железо. Выносите тесты, небольшие сервисы и личные проекты на надежный сервер.
У Selectel виртуальный выделенный сервер (VDS) поднимается за пару минут. Получите изолированные ресурсы, полный административный контроль и скорость быстрых NVMe-дисков.
И всё это — от 200 ₽/мес. А новым клиентам дарят ещё и бесплатный домен 🎁
Нервы и ресурс ноутбука стоят дороже.
➡️ Арендуйте сервер для своего проекта выгодно с Selectel.
Реклама. АО "Селектел". erid:2W5zFHEuFr1
У Selectel виртуальный выделенный сервер (VDS) поднимается за пару минут. Получите изолированные ресурсы, полный административный контроль и скорость быстрых NVMe-дисков.
И всё это — от 200 ₽/мес. А новым клиентам дарят ещё и бесплатный домен 🎁
Нервы и ресурс ноутбука стоят дороже.
➡️ Арендуйте сервер для своего проекта выгодно с Selectel.
Реклама. АО "Селектел". erid:2W5zFHEuFr1
🫡3
#инструмент дня
Этот пост — ежегодный #бородач. Традиция.
Пять (охереть) лет назад я писал большую серию статей на тему того, как же тестировать WebKit aka Safari на Windows и Linux. Вот, можете почитать: https://xn--r1a.website/htmlshit/705
Дайте знать, если пора эту серию статей обновить!
И тогда мы остановились на том, что можно просто использовать... Browserstack!
Но не все могут себе позволить даже 150 долларов в год за фриланс-план… или всё же есть выход?
Выход правда есть!
Browserstack активно поддерживает open-source проекты и даёт бесплатные лицензии на год!
Если у вас есть такой — смело топайте на https://www.browserstack.com/open-source и вбивайте там ссылку на репозиторий.
Главное — чтобы была подходящая лицензия. Полного списка я не нашёл, но уверен, что GPL, BSD и MIT точно включены. Я же указал Creative Commons Attribution 4.0 International.
Ах да, что же у меня за проект такой опенсорс? Да просто сайт этого канала: https://github.com/HTMLShit/htmlshit.site
Как видите, требования невысокие :) Надо бы обновить его как-то уже. Или другой подобрать.
Он в анабиозе сейчас, но работу над ним можно и восстановить. Да и пульт мой я ещё подумываю открыть.
Так вот, доступ обновляется каждый год пока репозиторий доступен! У меня, выходит, уже 5 лет.
После прохождения ручной модерации, мне пришло письмо. Я получил годовые планы тестирования браузера и мобильных с весьма вкусными условиями.
Короче, если вы ещё не начали свой проект – чего вы ждёте вообще?
#browserstack #testing
Этот пост — ежегодный #бородач. Традиция.
Пять (охереть) лет назад я писал большую серию статей на тему того, как же тестировать WebKit aka Safari на Windows и Linux. Вот, можете почитать: https://xn--r1a.website/htmlshit/705
Дайте знать, если пора эту серию статей обновить!
И тогда мы остановились на том, что можно просто использовать... Browserstack!
Но не все могут себе позволить даже 150 долларов в год за фриланс-план… или всё же есть выход?
Выход правда есть!
Browserstack активно поддерживает open-source проекты и даёт бесплатные лицензии на год!
Если у вас есть такой — смело топайте на https://www.browserstack.com/open-source и вбивайте там ссылку на репозиторий.
Главное — чтобы была подходящая лицензия. Полного списка я не нашёл, но уверен, что GPL, BSD и MIT точно включены. Я же указал Creative Commons Attribution 4.0 International.
Ах да, что же у меня за проект такой опенсорс? Да просто сайт этого канала: https://github.com/HTMLShit/htmlshit.site
Как видите, требования невысокие :) Надо бы обновить его как-то уже. Или другой подобрать.
Он в анабиозе сейчас, но работу над ним можно и восстановить. Да и пульт мой я ещё подумываю открыть.
Так вот, доступ обновляется каждый год пока репозиторий доступен! У меня, выходит, уже 5 лет.
После прохождения ручной модерации, мне пришло письмо. Я получил годовые планы тестирования браузера и мобильных с весьма вкусными условиями.
Короче, если вы ещё не начали свой проект – чего вы ждёте вообще?
#browserstack #testing
👍8
This media is not supported in your browser
VIEW IN TELEGRAM
#статья дня
В CSS предлагают добавить роутинг
Сейчас без JS кастомные анимации перехода по страницам практически невозможны: ловить переход, смотреть исходный и конечный URL, определять, по какой ссылке кликнули, и уже после этого выбирать нужный View Transition.
В черновике CSS Route and Navigation Matching предлагают описывать эту логику прямо в CSS.
Всё можно описать декларативно, если ты достаточно смел. Ну вы поняли.
Например, сначала объявить маршруты:
А потом задать отдельную анимацию для перехода с главной на статью:
Для перехода назад можно использовать другой тип анимации.
Кроме
Самый понятный пример — список карточек. Пользователь нажимает на изображение, открывается отдельная страница, а именно эта картинка плавно превращается в большое изображение статьи. Сейчас для такого обычно нужен JavaScript, который найдёт нажатый элемент и назначит ему
Роутер это, конечно, не заменяет. CSS не будет загружать страницы или управлять историей браузера. Он просто сможет выбирать стили и анимации с учётом того, между какими адресами происходит переход.
Пока это ранний Editor’s Draft, поэтому синтаксис ещё вполне может измениться. Попробовать можно в Chrome Canary с включённым
Подробный разбор — у Ван Дамма нашего Брамуса, сам черновик — на сайте CSSWG.
#route #css #view #transition
В CSS предлагают добавить роутинг
Сейчас без JS кастомные анимации перехода по страницам практически невозможны: ловить переход, смотреть исходный и конечный URL, определять, по какой ссылке кликнули, и уже после этого выбирать нужный View Transition.
В черновике CSS Route and Navigation Matching предлагают описывать эту логику прямо в CSS.
Всё можно описать декларативно, если ты достаточно смел. Ну вы поняли.
Например, сначала объявить маршруты:
@route --home {
pathname: url-pattern("/");
}
@route --article {
pathname: url-pattern("/articles/:id");
}
А потом задать отдельную анимацию для перехода с главной на статью:
@navigation (from: --home) and (to: --article) {
@view-transition {
navigation: auto;
types: slide-left;
}
}
Для перехода назад можно использовать другой тип анимации.
Кроме
@route и @navigation, в черновике есть :nav-source — селектор элемента, с которого начался переход, и :link-to() — селектор ссылок, ведущих на определённый маршрут.Самый понятный пример — список карточек. Пользователь нажимает на изображение, открывается отдельная страница, а именно эта картинка плавно превращается в большое изображение статьи. Сейчас для такого обычно нужен JavaScript, который найдёт нажатый элемент и назначит ему
view-transition-name. Здесь это хотят сделать без ручной обвязки.Роутер это, конечно, не заменяет. CSS не будет загружать страницы или управлять историей браузера. Он просто сможет выбирать стили и анимации с учётом того, между какими адресами происходит переход.
Пока это ранний Editor’s Draft, поэтому синтаксис ещё вполне может измениться. Попробовать можно в Chrome Canary с включённым
Experimental Web Platform Features.Подробный разбор — у Ван Дамма нашего Брамуса, сам черновик — на сайте CSSWG.
#route #css #view #transition
🔥15❤3
#заметка дня
В npm нашли ChainDrop — червя, который успел выпустить 2212 заражённых версий в 444 пакетах.
Стартовой точкой стал
Код запускался через
Заодно менялись конфиги Claude Code и VS Code. Поэтому заражённый репозиторий мог сработать не только при
С
То есть provenance не была подделана. Она честно подтверждала, что пакет собран официальным workflow из конкретного коммита. Просто сам коммит уже содержал вредоносный код, потому что аккаунт мейнтейнера был скомпрометирован.
Поэтому наличие attestation здесь ничего не гарантировало. Она подтверждает происхождение сборки, но не авторизованность изменений в репозитории.
Если одна из заражённых версий попала в CI или локальное окружение, откатить пакет недостаточно. Токены и секреты, доступные этому окружению, придётся перевыпустить.
StepSecurity
#npm #attack
В npm нашли ChainDrop — червя, который успел выпустить 2212 заражённых версий в 444 пакетах.
Стартовой точкой стал
keyv@6.0.0. После установки пакет искал npm-токены и, если находил, публиковал заражённые версии других пакетов, к которым у владельца токена был доступ. Так заражение пошло дальше по экосистеме и затронуло, среди прочих, flat-cache, file-entry-cache и cache-manager.Код запускался через
preinstall. Пакет скачивал Bun с GitHub и выполнял обфусцированный скрипт, который собирал токены GitHub, npm, PyPI, AWS, GCP, Azure, Docker, Kubernetes, Vault и других сервисов. В GitHub Actions он ещё и пытался достать секреты из памяти runner-процесса.Заодно менялись конфиги Claude Code и VS Code. Поэтому заражённый репозиторий мог сработать не только при
npm install, но и просто при открытии проекта или запуске агента.С
keyv есть отдельный нюанс. Вредоносная версия была опубликована через официальный GitHub Actions workflow, с npm Trusted Publishing и валидной SLSA provenance.То есть provenance не была подделана. Она честно подтверждала, что пакет собран официальным workflow из конкретного коммита. Просто сам коммит уже содержал вредоносный код, потому что аккаунт мейнтейнера был скомпрометирован.
Поэтому наличие attestation здесь ничего не гарантировало. Она подтверждает происхождение сборки, но не авторизованность изменений в репозитории.
Если одна из заражённых версий попала в CI или локальное окружение, откатить пакет недостаточно. Токены и секреты, доступные этому окружению, придётся перевыпустить.
StepSecurity
#npm #attack
1🫡8❤4🔥2
Проект от подписчика!
Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.
Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!
Привет! Меня зовут Артём
Несколько недель назад заинтересовался созданием собственного AI-бота внутри Telegram, который бы вел календарь, финансы, помогал что-то быстро проанализировать, не выходя из мессенджера, и обходился бы достаточно дешево. Для этого уже есть готовые решения (openclaw или hermes), но у них есть 2 проблемы: они избыточны и их неудобно масштабировать на несколько пользователей. Хотелось сделать одного бота для себя, друзей и тех, кому это было бы полезно.
Пришлось создать собственное решение, которое было бы масштабируемым, дешевым, но достаточно качественным. Написал свой harness для работы LLM, указал её возможности, а в качестве основной модели, после нескольких тестов и попыток удешевить работу нейросети, добился отличной работы на модели deepseek-v4-flash. Так появился vaka-assistant.
Бот-ассистент бесплатный и пока работает в тестовом режиме, но уже может:
• ставить напоминания, записывать задачи
• учитывать финансы и устанавливать лимиты трат
• понимать голосовые сообщения
• запоминать факты о пользователе, можно настроить личность ассистента и его стиль общения
• есть удобное представление данных в Telegram Mini Apps
Думаю, что многим такой бот может быть полезен: как в рабочих делах, так и в обычной жизни. Внутри чата можно оставить фидбек, буду рад услышать пожелания по улучшению и развитию проекта.
Ссылка на ассистента
Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.
Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!
Привет! Меня зовут Артём
Несколько недель назад заинтересовался созданием собственного AI-бота внутри Telegram, который бы вел календарь, финансы, помогал что-то быстро проанализировать, не выходя из мессенджера, и обходился бы достаточно дешево. Для этого уже есть готовые решения (openclaw или hermes), но у них есть 2 проблемы: они избыточны и их неудобно масштабировать на несколько пользователей. Хотелось сделать одного бота для себя, друзей и тех, кому это было бы полезно.
Пришлось создать собственное решение, которое было бы масштабируемым, дешевым, но достаточно качественным. Написал свой harness для работы LLM, указал её возможности, а в качестве основной модели, после нескольких тестов и попыток удешевить работу нейросети, добился отличной работы на модели deepseek-v4-flash. Так появился vaka-assistant.
Бот-ассистент бесплатный и пока работает в тестовом режиме, но уже может:
• ставить напоминания, записывать задачи
• учитывать финансы и устанавливать лимиты трат
• понимать голосовые сообщения
• запоминать факты о пользователе, можно настроить личность ассистента и его стиль общения
• есть удобное представление данных в Telegram Mini Apps
Думаю, что многим такой бот может быть полезен: как в рабочих делах, так и в обычной жизни. Внутри чата можно оставить фидбек, буду рад услышать пожелания по улучшению и развитию проекта.
Ссылка на ассистента
❤6👍3
#инструмент дня
У меня регулярно есть код, который вроде бы не проект. Проверить библиотеку, накидать PoC, воспроизвести баг, попробовать какой-нибудь API, проверить идею на десяти строках.
Обычно всё это заканчивается одинаково:
Для этого есть try.
Идея простая: все такие одноразовые штуки живут в одной директории, по умолчанию
Потом достаточно написать:
и получишь fuzzy search по всем своим экспериментам. Он ещё учитывает, насколько недавно ты открывал директорию, поэтому свежие штуки поднимаются выше.
Если ничего подходящего нет, из того же интерфейса можно сразу создать новую папку. То есть
Короче, можно посмотреть интерактивную презентацию: https://asciinema.org/a/ve8AXBaPhkKz40YbqPTlVjqgs
Ещё полезная штука:
Если запустить это внутри git-репозитория, он создаст для текущего репо отдельный worktree в tries. Нормальный вариант для «хочу быстро что-то попробовать, но текущую рабочую копию трогать не хочу».
Можно и сразу клонировать чужой репозиторий туда же:
А если какой-то такой эксперимент внезапно вырос во что-то настоящее, его можно перенести из tries в обычные проекты.
В общем, штука довольно узкая, но хорошо попадает в конкретную проблему: временный код почему-то почти никогда не оказывается временным.
Написана на Ruby, ставится через gem или Homebrew.
https://github.com/tobi/try
#experiment #tool
У меня регулярно есть код, который вроде бы не проект. Проверить библиотеку, накидать PoC, воспроизвести баг, попробовать какой-нибудь API, проверить идею на десяти строках.
Обычно всё это заканчивается одинаково:
test, test2, tmp, new-test, какая-нибудь папка на Desktop, ещё одна в /tmp, а через пару недель уже непонятно, где именно лежал тот эксперимент, который внезапно понадобился снова.Для этого есть try.
Идея простая: все такие одноразовые штуки живут в одной директории, по умолчанию
~/src/tries. Когда создаёшь новую, try добавляет дату:2026-08-07-redis-poolПотом достаточно написать:
try redisи получишь fuzzy search по всем своим экспериментам. Он ещё учитывает, насколько недавно ты открывал директорию, поэтому свежие штуки поднимаются выше.
Если ничего подходящего нет, из того же интерфейса можно сразу создать новую папку. То есть
try одновременно заменяет мне кусок из mkdir, cd, find и попыток вспомнить, как я назвал папку три недели назад.Короче, можно посмотреть интерактивную презентацию: https://asciinema.org/a/ve8AXBaPhkKz40YbqPTlVjqgs
Ещё полезная штука:
try .Если запустить это внутри git-репозитория, он создаст для текущего репо отдельный worktree в tries. Нормальный вариант для «хочу быстро что-то попробовать, но текущую рабочую копию трогать не хочу».
Можно и сразу клонировать чужой репозиторий туда же:
try https://github.com/foo/bar.gitА если какой-то такой эксперимент внезапно вырос во что-то настоящее, его можно перенести из tries в обычные проекты.
try уберёт дату из имени, перенесёт директорию, а на старом месте оставит симлинк, чтобы старый путь не умер.В общем, штука довольно узкая, но хорошо попадает в конкретную проблему: временный код почему-то почти никогда не оказывается временным.
Написана на Ruby, ставится через gem или Homebrew.
https://github.com/tobi/try
#experiment #tool
1❤11
#инструмент дня
Вчера писал про try и в последний момент засомневался, какую картинку поставить к посту. В итоге сдался и прилепил нейрослоп.
А можно было просто открыть Boron.
Это редактор скриншотов терминала. Вставляешь туда настоящий вывод консоли — вместе с ANSI-цветами — и дальше можно уже нормально собрать картинку: поменять тему, фон, размер окна, поправить текст, перекрасить отдельные куски и вообще привести всё в аккуратный вид.
Причём редактируется именно содержимое терминала, а не картинка поверх картинки. Можно выделять текст, печатать свой, менять цвета отдельных фрагментов. Есть даже прямоугольное выделение через Alt/⌥ — удобно, например, чтобы перекрасить целую колонку таблицы или кусок вывода
Boron сам отличает команды от вывода: строки с
На выходе PNG, SVG, JPEG или WebP, плюс картинку можно сразу скопировать в clipboard.
Но самая интересная функция — всё нарисованное можно скопировать обратно как настоящий терминальный текст: plain text, ANSI escape sequences или код на
В общем, вчера вместо нейрослопа можно было просто красиво снять
boron.sh
GitHub
#tool #terminal
Вчера писал про try и в последний момент засомневался, какую картинку поставить к посту. В итоге сдался и прилепил нейрослоп.
А можно было просто открыть Boron.
Это редактор скриншотов терминала. Вставляешь туда настоящий вывод консоли — вместе с ANSI-цветами — и дальше можно уже нормально собрать картинку: поменять тему, фон, размер окна, поправить текст, перекрасить отдельные куски и вообще привести всё в аккуратный вид.
Причём редактируется именно содержимое терминала, а не картинка поверх картинки. Можно выделять текст, печатать свой, менять цвета отдельных фрагментов. Есть даже прямоугольное выделение через Alt/⌥ — удобно, например, чтобы перекрасить целую колонку таблицы или кусок вывода
tree.Boron сам отличает команды от вывода: строки с
$, ❯, > или ➜ делает ярче, остальное немного приглушает. Тем сейчас восемь: от VS Code Dark+ и Dracula до Tokyo Night, Nord и Catppuccin.На выходе PNG, SVG, JPEG или WebP, плюс картинку можно сразу скопировать в clipboard.
Но самая интересная функция — всё нарисованное можно скопировать обратно как настоящий терминальный текст: plain text, ANSI escape sequences или код на
chalk. То есть можно не только оформить существующий вывод, но и мышкой набросать, как должен выглядеть CLI, а потом забрать это обратно в код.В общем, вчера вместо нейрослопа можно было просто красиво снять
try в работе. Видимо, Boron попался мне примерно на сутки позже, чем нужно.boron.sh
GitHub
#tool #terminal
❤7👏2🔥1
Есть довольно простая ловушка: чем больше у тебя ответственности, тем легче перепутать количество работы с движением вперёд.
Когда задач мало, всё понятно. Сделал — молодец. А потом появляется продукт, команда, маркетинг, несколько направлений роста, операционка, и почти любая задача начинает выглядеть важной. В итоге проблема уже не в том, как всё успеть, а в том, что из этого вообще не надо делать.
У Константина Сухачева есть несколько хороших текстов ровно про это.
Например, про стратегию как отказ. Не в смысле очередного «умей говорить нет», а буквально: если компания выбрала направление, остальные хорошие возможности тоже приходится сознательно хоронить. Иначе стратегия превращается просто в список пожеланий.
Рядом — тема фокуса и постоянного переключения. Можно весь день быть занятым, отвечать, решать, созваниваться и даже чувствовать себя очень продуктивным. Но если каждые полчаса меняется контекст, к вечеру часто оказывается, что ничего действительно важного далеко не уехало.
С управлением примерно та же неприятная механика. Хороший менеджмент — это далеко не всегда про мотивацию и развитие людей. Иногда это про отказ, увольнение, смену структуры или признание, что человек отлично работает, но находится не на своём месте.
Мне в целом нравится такой взгляд на бизнес: не через отдельные инструменты и «хаки роста», а через выбор, ограничения и цену решений.
Если это близко, можно начать с текстов про стратегию и отказ, про фокус и про цену управления. Остальное уже рядом.
Когда задач мало, всё понятно. Сделал — молодец. А потом появляется продукт, команда, маркетинг, несколько направлений роста, операционка, и почти любая задача начинает выглядеть важной. В итоге проблема уже не в том, как всё успеть, а в том, что из этого вообще не надо делать.
У Константина Сухачева есть несколько хороших текстов ровно про это.
Например, про стратегию как отказ. Не в смысле очередного «умей говорить нет», а буквально: если компания выбрала направление, остальные хорошие возможности тоже приходится сознательно хоронить. Иначе стратегия превращается просто в список пожеланий.
Рядом — тема фокуса и постоянного переключения. Можно весь день быть занятым, отвечать, решать, созваниваться и даже чувствовать себя очень продуктивным. Но если каждые полчаса меняется контекст, к вечеру часто оказывается, что ничего действительно важного далеко не уехало.
С управлением примерно та же неприятная механика. Хороший менеджмент — это далеко не всегда про мотивацию и развитие людей. Иногда это про отказ, увольнение, смену структуры или признание, что человек отлично работает, но находится не на своём месте.
Мне в целом нравится такой взгляд на бизнес: не через отдельные инструменты и «хаки роста», а через выбор, ограничения и цену решений.
Если это близко, можно начать с текстов про стратегию и отказ, про фокус и про цену управления. Остальное уже рядом.
Telegram
Константин Сухачев
Бизнес, стратегия, маркетинг и лайфстайл — честно, через опыт и боль.
Драйвлю рост в Overgear, развивал предпринимательство в банке «Бланк», построил маркетинг в BestDoctor, начинал в OneTwoTrip.
Реклама: @ks_wrk
Драйвлю рост в Overgear, развивал предпринимательство в банке «Бланк», построил маркетинг в BestDoctor, начинал в OneTwoTrip.
Реклама: @ks_wrk
👍4🔥2❤1
#инструмент дня
Вы, наверное, уже наслышаны от обладателей айфонов про AirDropи дикпики.
Кроме шуток, передать файлы по локальной сети между двумя своими устройствами должно быть максимально просто же! Без ковыряний в Network Discovery, настроек Samba и так далее.
И такое решение есть, даже с открытым кодом: LocalSend.
Сайт: https://localsend.org/
Написано на Dart и Flutter, работает на всех разумно доступных платформах: Windows, Linux, MacOS, Android, iOS.
Не опирается на один протокол, а перебирает все доступные и даже может запустить свой собственный сервер по необходимости. В крайнем случае, можно донастроить.
Никаких облаков, всё по локальной сети.
Поддержка нескольких получателей, поддержка буфера обмена.
В общем, если у вас дома зоопарк устройств и пока не хватило времени настроить что-то иное, или лучше Samba вы ничего в жизни не видели — вот это самое то.
#flutter #localsend #airdrop #network #бородач
Вы, наверное, уже наслышаны от обладателей айфонов про AirDrop
Кроме шуток, передать файлы по локальной сети между двумя своими устройствами должно быть максимально просто же! Без ковыряний в Network Discovery, настроек Samba и так далее.
И такое решение есть, даже с открытым кодом: LocalSend.
Сайт: https://localsend.org/
Написано на Dart и Flutter, работает на всех разумно доступных платформах: Windows, Linux, MacOS, Android, iOS.
Не опирается на один протокол, а перебирает все доступные и даже может запустить свой собственный сервер по необходимости. В крайнем случае, можно донастроить.
Никаких облаков, всё по локальной сети.
Поддержка нескольких получателей, поддержка буфера обмена.
В общем, если у вас дома зоопарк устройств и пока не хватило времени настроить что-то иное, или лучше Samba вы ничего в жизни не видели — вот это самое то.
#flutter #localsend #airdrop #network #бородач
❤8👍7🫡1
#тред дня
Забытое воровство из X!
Лонгрид от Димы Рожкова: «Собес — не место для советов». Сразу ссылку, ну и копия.
Спасти компанию за 5 минут
Ваши вопросы к представителям компании на собеседовании - очень важный этап. Он же может стать решающим. Я как то на собеседовании в Мету на менеджера спросил могу ли я уволить всю команду в один день и нанять новую. В те далекие долэйофные годы следующего этапа не последовало. Это был один из вопросов Бугаенко "на менедждера", в Лондон я переезжать не планировал поэтому ради прикола решил спросить. Один раз живем.
Так вот. По следам треда @beshkenadze решил написать, что стоит спрашивать, а какие вопросы стоит задавать когда уже пройдете испытательный срок.
Во-первых: совершенно точно нужно задавать вопросы! Особенно если вы идете на сеньорную позицию. Если у вас нет вопросов - это очень плохой сигнал:
• Вы читали про компанию и ее бизнес?
• Вам совсем не важно как с кем и с чем вы будете работать?
• Ничего не хотите добавить к своим ответам?
Что точно не стоит спрашивать
Давать непрошеные советы и критиковать выбор людей. Даже если мягко. Во-первых у тебя околонулевой контекст. Даже если ты изначально спросил какая у них платформа (хороший вопрос), а потом начинаешь критивовать и сокрушаться, что они все выбрали не правильно. Тебе скорее всего ответили прямым ответом: У нас технология Х. У тебя нет необходимых данных, метрик и причин почему у них так. И за одну минуту ответа ты не сможешь открыть тупым глаза на их ошибки и заработать авторитет. Но ты можешь показать, что ты с порога несогласен. Начинаешь давать советы неразобравшись. Зачем тебя брать если ты уже недоволен с чем тебе придется работать?
На собеседовании ты продаёшь не только экспертизу, но и предсказуемость. Компания (особенно если это уже работающий бизнес, а не совсем зелёный стартап) хочет понять:
• Ты сможешь встроиться в существующую систему?
• Ты будешь решать их проблемы или создавать новые?
• Ты уважаешь чужой контекст или сразу начинаешь мерить всё своей меркой?
Критиковать само собеседовение тоже не стоит. Особенно в лицо людям, которые к дизайну собеседования не имеют отношения. Как например спрашивать, пишут ли программисты алгоритмы каждый день на работе? Кому что кроме своей раздражительности ты этим вопросом хочешь показать? Особенно если ты НЕ МОЖЕШЬ решить задачу.
Что стоит спрашивать
На собесе ты исследователь и дипломат. Молчать совершенно точно нельзя, а задавать качественные вопросы, которые показывают сеньорность.
Если ты молчишь и только киваешь, ты выглядишь как исполнитель, а не как человек, который будет влиять на архитектуру. Хороший баланс — задавать вопросы, которые раскрывают ситуацию, а не оценивают её.
1. Про нагрузку и масштаб «Какая сейчас нагрузка? Какие планы по росту на год-два?»
2. Про текущие боли «Какие самые болезненные проблемы прямо сейчас в инфре/деплое/костах?»
3. Про структуру команды «Как устроена команда? Кто принимает архитектурные решения? Как выглядит процесс изменений?»
4. Про бизнес-контекст «Какие требования бизнеса сейчас важнее всего: скорость фич, косты, надёжность?»
5. Про квалификацию и процессы «Какой уровень экспертизы в команде по платформе/куберу/терраформу?»
6. Про историю развития «Это первая версия системы? Как бы выглядела идеальная система для этой задачи? Какие риски в текущей архитектуре вы видите?»
7. Можно урвать эти 5 минут и наоборот уточнить свой ответ, если вы осознали, что что-то недосказали. Этой возможностью вообще довольно редко пользуются.
Самый сильный сигнал сеньорности — это когда ты: задаёшь точные вопросы; демонстрируешь, что понимаешь компромиссы; оставляешь пространство для того, что у них могут быть на все веские причины о которых тебе не рассказали.
На собеседовании твоя главная задача — собрать максимум информации и показать, как ты думаешь, а не «спасти» компанию от страшной ошибки за 5 минут.
А уже после офера (или испытательного срока), когда ты внутри и у тебя есть полный контекст и выстроены отношения блядь, — можно и нужно спорить, отстаивать свою точку зрения.
#cv #interview #собеседование #x
Забытое воровство из X!
Лонгрид от Димы Рожкова: «Собес — не место для советов». Сразу ссылку, ну и копия.
Спасти компанию за 5 минут
Ваши вопросы к представителям компании на собеседовании - очень важный этап. Он же может стать решающим. Я как то на собеседовании в Мету на менеджера спросил могу ли я уволить всю команду в один день и нанять новую. В те далекие долэйофные годы следующего этапа не последовало. Это был один из вопросов Бугаенко "на менедждера", в Лондон я переезжать не планировал поэтому ради прикола решил спросить. Один раз живем.
Так вот. По следам треда @beshkenadze решил написать, что стоит спрашивать, а какие вопросы стоит задавать когда уже пройдете испытательный срок.
Во-первых: совершенно точно нужно задавать вопросы! Особенно если вы идете на сеньорную позицию. Если у вас нет вопросов - это очень плохой сигнал:
• Вы читали про компанию и ее бизнес?
• Вам совсем не важно как с кем и с чем вы будете работать?
• Ничего не хотите добавить к своим ответам?
Что точно не стоит спрашивать
Давать непрошеные советы и критиковать выбор людей. Даже если мягко. Во-первых у тебя околонулевой контекст. Даже если ты изначально спросил какая у них платформа (хороший вопрос), а потом начинаешь критивовать и сокрушаться, что они все выбрали не правильно. Тебе скорее всего ответили прямым ответом: У нас технология Х. У тебя нет необходимых данных, метрик и причин почему у них так. И за одну минуту ответа ты не сможешь открыть тупым глаза на их ошибки и заработать авторитет. Но ты можешь показать, что ты с порога несогласен. Начинаешь давать советы неразобравшись. Зачем тебя брать если ты уже недоволен с чем тебе придется работать?
На собеседовании ты продаёшь не только экспертизу, но и предсказуемость. Компания (особенно если это уже работающий бизнес, а не совсем зелёный стартап) хочет понять:
• Ты сможешь встроиться в существующую систему?
• Ты будешь решать их проблемы или создавать новые?
• Ты уважаешь чужой контекст или сразу начинаешь мерить всё своей меркой?
Критиковать само собеседовение тоже не стоит. Особенно в лицо людям, которые к дизайну собеседования не имеют отношения. Как например спрашивать, пишут ли программисты алгоритмы каждый день на работе? Кому что кроме своей раздражительности ты этим вопросом хочешь показать? Особенно если ты НЕ МОЖЕШЬ решить задачу.
Что стоит спрашивать
На собесе ты исследователь и дипломат. Молчать совершенно точно нельзя, а задавать качественные вопросы, которые показывают сеньорность.
Если ты молчишь и только киваешь, ты выглядишь как исполнитель, а не как человек, который будет влиять на архитектуру. Хороший баланс — задавать вопросы, которые раскрывают ситуацию, а не оценивают её.
1. Про нагрузку и масштаб «Какая сейчас нагрузка? Какие планы по росту на год-два?»
2. Про текущие боли «Какие самые болезненные проблемы прямо сейчас в инфре/деплое/костах?»
3. Про структуру команды «Как устроена команда? Кто принимает архитектурные решения? Как выглядит процесс изменений?»
4. Про бизнес-контекст «Какие требования бизнеса сейчас важнее всего: скорость фич, косты, надёжность?»
5. Про квалификацию и процессы «Какой уровень экспертизы в команде по платформе/куберу/терраформу?»
6. Про историю развития «Это первая версия системы? Как бы выглядела идеальная система для этой задачи? Какие риски в текущей архитектуре вы видите?»
7. Можно урвать эти 5 минут и наоборот уточнить свой ответ, если вы осознали, что что-то недосказали. Этой возможностью вообще довольно редко пользуются.
Самый сильный сигнал сеньорности — это когда ты: задаёшь точные вопросы; демонстрируешь, что понимаешь компромиссы; оставляешь пространство для того, что у них могут быть на все веские причины о которых тебе не рассказали.
На собеседовании твоя главная задача — собрать максимум информации и показать, как ты думаешь, а не «спасти» компанию от страшной ошибки за 5 минут.
А уже после офера (или испытательного срока), когда ты внутри и у тебя есть полный контекст и выстроены отношения блядь, — можно и нужно спорить, отстаивать свою точку зрения.
#cv #interview #собеседование #x
1👍14❤3🔥3👎1🫡1
#статья дня
Я тут в нашем продукте всё пытаюсь сделать идеальные всплывающие уведомления, aka тосты.
Потому что выскакивают, как хлеб из тостера.
Поначалу они были сугубо императивные, вызвали уведомление вручную, вручную же скрыли все разом или по некому id. Потом я решил объединить уведомления и некоторые виды модальных окон (например, подтверждение или отмену действия).
Параллельно я начал переписывать императивные уведомления на React, потому что на тот момент приложение стало гибридным. Получалось вроде неплохо. Но в какой-то момент...
В какой-то момент я на полную познал, что такое гипотеза Чёрной Королевы (забавно, что в английском языке — Красной Королевы). В простейшем варианте она звучит так: "Нужно бежать, чтобы оставаться на месте". Непомерно много усилий требуется, чтобы лишь чуть-чуть двигаться вперёд.
В мире разработки она же значит, что на один закрытый баг — получаешь пятнадцать новых :)
Да, пришло время признать, что я со своей реализацией уведомлений зашёл в тупик, и надо смотреть в сторону альтернатив.
И тут попадается нечто прекрасное, компонент Sonner: https://emilkowal.ski/ui/building-a-toast-component
И сразу ссылка на репозиторий: https://github.com/emilkowalski/sonner
Статья буквально на острие взаимодействия CSS и JS, объяснены принципы построения анимаций на CSS-переменных и управления ими из React-приложения.
Сами же тосты реализованы на простой шине событий, что весьма надёжно.
В общем, я ещё свой поиск идеальной реализации не завершил, но Sonner — максимально к ней близок.
#react #toasts #notification #animation #бородач
Я тут в нашем продукте всё пытаюсь сделать идеальные всплывающие уведомления, aka тосты.
Потому что выскакивают, как хлеб из тостера.
Поначалу они были сугубо императивные, вызвали уведомление вручную, вручную же скрыли все разом или по некому id. Потом я решил объединить уведомления и некоторые виды модальных окон (например, подтверждение или отмену действия).
Параллельно я начал переписывать императивные уведомления на React, потому что на тот момент приложение стало гибридным. Получалось вроде неплохо. Но в какой-то момент...
В какой-то момент я на полную познал, что такое гипотеза Чёрной Королевы (забавно, что в английском языке — Красной Королевы). В простейшем варианте она звучит так: "Нужно бежать, чтобы оставаться на месте". Непомерно много усилий требуется, чтобы лишь чуть-чуть двигаться вперёд.
В мире разработки она же значит, что на один закрытый баг — получаешь пятнадцать новых :)
Да, пришло время признать, что я со своей реализацией уведомлений зашёл в тупик, и надо смотреть в сторону альтернатив.
И тут попадается нечто прекрасное, компонент Sonner: https://emilkowal.ski/ui/building-a-toast-component
И сразу ссылка на репозиторий: https://github.com/emilkowalski/sonner
Статья буквально на острие взаимодействия CSS и JS, объяснены принципы построения анимаций на CSS-переменных и управления ими из React-приложения.
Сами же тосты реализованы на простой шине событий, что весьма надёжно.
В общем, я ещё свой поиск идеальной реализации не завершил, но Sonner — максимально к ней близок.
#react #toasts #notification #animation #бородач
❤6👍3🔥1
#видео дня
Если фамилия Корольковой вам ничего не говорит, то её шрифты почти наверняка говорят.
Александра Королькова — шрифтовой и книжный дизайнер, арт-директор Paratype, автор «Живой типографики» и один из авторов PT Sans, PT Serif, Circe и других известных гарнитур.
А вот её свежая лекция — «Шрифтовая магия»:
https://www.youtube.com/watch?v=76P5P9agcHc
Королькова показывает нестандартную вариативность, оптические размеры, то, как один шрифт может буквально «переодеваться» под разные задачи, разбирает внимание к мелким деталям и всякие странные штуки, которые вообще можно зашить внутрь шрифта. А потом отдельно доходит до более практичного вопроса: что из всего этого реально полезно дизайнеру в повседневной работе и где это можно попробовать бесплатно.
И заодно несколько ссылок по теме из архива канала:
— бесплатная «Живая типографика»
— оптическое выравнивание
— минус и дефис
#video #fonts #talk
Если фамилия Корольковой вам ничего не говорит, то её шрифты почти наверняка говорят.
Александра Королькова — шрифтовой и книжный дизайнер, арт-директор Paratype, автор «Живой типографики» и один из авторов PT Sans, PT Serif, Circe и других известных гарнитур.
А вот её свежая лекция — «Шрифтовая магия»:
https://www.youtube.com/watch?v=76P5P9agcHc
Королькова показывает нестандартную вариативность, оптические размеры, то, как один шрифт может буквально «переодеваться» под разные задачи, разбирает внимание к мелким деталям и всякие странные штуки, которые вообще можно зашить внутрь шрифта. А потом отдельно доходит до более практичного вопроса: что из всего этого реально полезно дизайнеру в повседневной работе и где это можно попробовать бесплатно.
И заодно несколько ссылок по теме из архива канала:
— бесплатная «Живая типографика»
— оптическое выравнивание
— минус и дефис
#video #fonts #talk
👍4❤1
#статья дня
Прекрасный рефрешер знаний по таблицам от Мишель Баркер: https://piccalil.li/blog/styling-tables-the-modern-css-way/
Таблицы получили много незаслуженного хейта из-за лихих нулевых. Мобильные устройства тоже не добавили удобства, в итоге многие положили болт на семантику и начали верстать таблицы гридами. Во имя чего — непонятно.
А люди потом в эксель не могли ничего скопировать.
Но вместе с этим, ничего более универсального для двумерного представления данных пока не придумали, поэтому имеет смысл обновить знания по существующим фишкам и посмотреть, нет ли чего нового.
Статья хороша тем, что посвящена не трюкам, а просто сводит воедино базу по доступности и удобству. Да, sticky columns там тоже описываются.
Ну и тут уместно напомнить о моём тейке про доступные таблицы: https://xn--r1a.website/htmlshit/2981
#css #table #бородач
Прекрасный рефрешер знаний по таблицам от Мишель Баркер: https://piccalil.li/blog/styling-tables-the-modern-css-way/
Таблицы получили много незаслуженного хейта из-за лихих нулевых. Мобильные устройства тоже не добавили удобства, в итоге многие положили болт на семантику и начали верстать таблицы гридами. Во имя чего — непонятно.
А люди потом в эксель не могли ничего скопировать.
Но вместе с этим, ничего более универсального для двумерного представления данных пока не придумали, поэтому имеет смысл обновить знания по существующим фишкам и посмотреть, нет ли чего нового.
Статья хороша тем, что посвящена не трюкам, а просто сводит воедино базу по доступности и удобству. Да, sticky columns там тоже описываются.
Ну и тут уместно напомнить о моём тейке про доступные таблицы: https://xn--r1a.website/htmlshit/2981
#css #table #бородач
👍3❤2
#история дня
30 лет назад вышел Internet Explorer 3.0.
13 августа 1996 года появилась версия для Windows, а 8 января 1997 — для Mac OS (да-да, она тогда не macOS называлась). Было же время...
Что же такого в нём примечательного?
Ну, помимо того, что это первый IE с легендарной вселяющей ужас во всех верстальщиков иконкой, это ещё и первый браузер вообще с поддержкой CSS.
В то время CSS использовался чтобы помечать посещенные ссылки фиолетовым.
Эта самая поддержка была даже по тем скромным меркам неполной. Microsoft, впрочем, надолго решила продолжать в том же духе.
А ещё была своя реализация JavaScript: JScript. И предлагалась поддержка VBScript... я свой первый веб-проект на нём писал, не особенно содрогаясь.
Работал браузер на 386 с Windows 3.1, требовал от 4 MB оперативной памяти, 12 MB — если хотелось Java 🤯
Посмотреть скриншоты и видео можно в музее веб-дизайна: https://www.webdesignmuseum.org/old-software/web-browsers/internet-explorer-3-0
Взгрустнулось, котаны? 😅
#css #ie #history
30 лет назад вышел Internet Explorer 3.0.
13 августа 1996 года появилась версия для Windows, а 8 января 1997 — для Mac OS (да-да, она тогда не macOS называлась). Было же время...
Что же такого в нём примечательного?
Ну, помимо того, что это первый IE с легендарной вселяющей ужас во всех верстальщиков иконкой, это ещё и первый браузер вообще с поддержкой CSS.
В то время CSS использовался чтобы помечать посещенные ссылки фиолетовым.
Эта самая поддержка была даже по тем скромным меркам неполной. Microsoft, впрочем, надолго решила продолжать в том же духе.
А ещё была своя реализация JavaScript: JScript. И предлагалась поддержка VBScript... я свой первый веб-проект на нём писал, не особенно содрогаясь.
Работал браузер на 386 с Windows 3.1, требовал от 4 MB оперативной памяти, 12 MB — если хотелось Java 🤯
Посмотреть скриншоты и видео можно в музее веб-дизайна: https://www.webdesignmuseum.org/old-software/web-browsers/internet-explorer-3-0
Взгрустнулось, котаны? 😅
#css #ie #history
❤7🔥2🫡1
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня
Каждому смотрящему сериалы известно, что один из самых лучших способов сделать текст субтитров видимым на практически любом фоне — это добавить инверсную обводку.
Белый контур для чёрного текста, чёрный — для белого (внезапно).
Есть ли что-то подобное в CSS? Ну, конечно, есть! Как минимум, можно бросить тень aka text-shadow. Правда, синтаксис не очень интуитивный да и выглядит иногда странненько.
Какие ещё варианты? SVG text, очевидно, но там свои нюансы с доступностью и стилями.
И есть ещё!
Несмотря на префикс, Firefox тоже его поддерживает (спорное решение, но уж как есть).
Вот только как всегда есть нюанс. По-умолчанию, обводка будет нарисована перед слоем с текстом. Это очевидно, если понимать разницу между штрихом (stroke) и обводкой (outline), но всё же.
Поэтому
#css #stroke #outline #бородач
Каждому смотрящему сериалы известно, что один из самых лучших способов сделать текст субтитров видимым на практически любом фоне — это добавить инверсную обводку.
Белый контур для чёрного текста, чёрный — для белого (внезапно).
Есть ли что-то подобное в CSS? Ну, конечно, есть! Как минимум, можно бросить тень aka text-shadow. Правда, синтаксис не очень интуитивный да и выглядит иногда странненько.
Какие ещё варианты? SVG text, очевидно, но там свои нюансы с доступностью и стилями.
И есть ещё!
-webkit-text-stroke-colorНесмотря на префикс, Firefox тоже его поддерживает (спорное решение, но уж как есть).
Вот только как всегда есть нюанс. По-умолчанию, обводка будет нарисована перед слоем с текстом. Это очевидно, если понимать разницу между штрихом (stroke) и обводкой (outline), но всё же.
Поэтому
paint-order: stroke нам в помощь! Таким образом, штрих будет отрисован первым, натуральным образом превратившись в обводку (при достаточной толщине, конечно же):
-webkit-text-stroke-color: white;
-webkit-text-stroke-width: var(--stroke);
paint-order: stroke;
#css #stroke #outline #бородач
👍8
Проект от подписчика!
Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.
Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!
Всем привет! Меня зовут Василий, я разработчик из Хельсинки. В свободное время занимаюсь проектами на стыке веба, C++ и криптографии. Один из них это AmethystXMR: https://amethystxmr.github.io/
Это браузерный Monero-кошелёк: нативный C++ код Monero собран в WebAssembly, а вокруг него сделан интерфейс на React. Ключи остаются у пользователя в браузере, там же приложение сканирует блокчейн и формирует транзакции.
На скриншоте кошелёк называется
AmethystXMR полностью рабочий: можно создать или восстановить кошелёк, отправлять и получать XMR, подключаться к своей ноде, использовать QR-коды. Можно запускать и в Tor Browser, в том числе с onion-нодами.
Еще есть поддержка multisig. В Monero он устроен довольно интересно и не совсем так как в Bitcoin. Я рассказывал об этом на MoneroKon, а по мотивам доклада вышел подробный пост со схемами:
https://coin.space/how-does-monero-xmr-multisig-work
Недавно еще разбирался с неприятным багом: платеж отображался как потерянный, хотя в итоге оказалось, что деньги никуда не пропали. Всю историю расследования и того, как удалось найти проблему, описал здесь:
https://www.reddit.com/r/MoneroMeansMoney/comments/1v5dsx2/the_story_of_a_lost_and_found_payment/
Еще с MoneroKon есть запись моего второго доклада - про Lightning Network:
https://www.youtube.com/watch?v=obFwB_KA7pk
Исходники проекта:
https://github.com/amethystxmr/amethystxmr.github.io
Если появятся какие-то вопросы по проекту, WebAssembly, Monero или докладам - спрашивайте, отвечу.
Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.
Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!
Всем привет! Меня зовут Василий, я разработчик из Хельсинки. В свободное время занимаюсь проектами на стыке веба, C++ и криптографии. Один из них это AmethystXMR: https://amethystxmr.github.io/
Это браузерный Monero-кошелёк: нативный C++ код Monero собран в WebAssembly, а вокруг него сделан интерфейс на React. Ключи остаются у пользователя в браузере, там же приложение сканирует блокчейн и формирует транзакции.
На скриншоте кошелёк называется
[object Promise] - это не баг, а мое чувство юмора: люблю вписывать в формы значения вроде undefined, null, NaN, Invalid Date, ReferenceError, TypeError, [object Object], Cannot read properties of undefined. Смешно же.AmethystXMR полностью рабочий: можно создать или восстановить кошелёк, отправлять и получать XMR, подключаться к своей ноде, использовать QR-коды. Можно запускать и в Tor Browser, в том числе с onion-нодами.
Еще есть поддержка multisig. В Monero он устроен довольно интересно и не совсем так как в Bitcoin. Я рассказывал об этом на MoneroKon, а по мотивам доклада вышел подробный пост со схемами:
https://coin.space/how-does-monero-xmr-multisig-work
Недавно еще разбирался с неприятным багом: платеж отображался как потерянный, хотя в итоге оказалось, что деньги никуда не пропали. Всю историю расследования и того, как удалось найти проблему, описал здесь:
https://www.reddit.com/r/MoneroMeansMoney/comments/1v5dsx2/the_story_of_a_lost_and_found_payment/
Еще с MoneroKon есть запись моего второго доклада - про Lightning Network:
https://www.youtube.com/watch?v=obFwB_KA7pk
Исходники проекта:
https://github.com/amethystxmr/amethystxmr.github.io
Если появятся какие-то вопросы по проекту, WebAssembly, Monero или докладам - спрашивайте, отвечу.
👍12🔥3
#игра дня
Давненько не было чего-то необычного.
Впрочем, если вы не фанат Dwarf Fortress, конечно.
Untrusted — это игра, в которой вам предлагают не просто пройти уровень, а сначала починить его. Или, если точнее, подправить JavaScript-код, который за него отвечает. Персонаж — профессор Эвал — застрял в виртуальной реальности, и единственный способ выбраться оттуда — лезть в исходники и аккуратно, а иногда и не очень, их переписывать.
Каждый уровень — это кусок JS-кода, который можно и нужно менять: отключить ловушку, переписать поведение врагов, добавить себе проход в стене — пожалуйста. Главное — чтобы заработало.
Игру сложно назвать обучающей, но если вы когда-то писали на JavaScript и у вас осталась эта мышечная память
🎮 https://untrustedgame.com/ 📂 https://github.com/AlexNisnevich/untrusted
#game #js #бородач
Давненько не было чего-то необычного.
Впрочем, если вы не фанат Dwarf Fortress, конечно.
Untrusted — это игра, в которой вам предлагают не просто пройти уровень, а сначала починить его. Или, если точнее, подправить JavaScript-код, который за него отвечает. Персонаж — профессор Эвал — застрял в виртуальной реальности, и единственный способ выбраться оттуда — лезть в исходники и аккуратно, а иногда и не очень, их переписывать.
Каждый уровень — это кусок JS-кода, который можно и нужно менять: отключить ловушку, переписать поведение врагов, добавить себе проход в стене — пожалуйста. Главное — чтобы заработало.
Игру сложно назвать обучающей, но если вы когда-то писали на JavaScript и у вас осталась эта мышечная память
for (var i = 0; i < ...), будет ощущение, что вы просто продолжаете работу, только теперь в компании ASCII-графики и странного профессора.🎮 https://untrustedgame.com/ 📂 https://github.com/AlexNisnevich/untrusted
#game #js #бородач
🤩8
#заметка дня
Новости для Java-, Kotlin- и Scala-разработчиков: 29 августа в Москве пройдет JVM Day — конференция для разработчиков, архитекторов и тимлидов от Т-Банка.
Из спикеров конференции – Андрей Кулешов, который поделится последними новостями в области Java, Антон Курако объяснит, как красивые показатели могут ввести в заблуждение, а Сергей Петрелевич разберет Mechanical Sympathy и подходы к ускорению Spring Boot-приложений. На конфе также будет аллея продуктов, где можно потыкать демки фреймворка Kora для Java и Kotlin, AI-native-платформы SourceCraft и мультиязычной OpenIDE.
После докладов пройдет вечеринка во дворе штаб-квартиры Т-Банка с играми на Sega, ИТ-квизом и диджей-сетом на виниле.
Зарегистрироваться на конфу можно тут: https://meetup.tbank.ru/conference/jvm-day/.
Если вы собираетесь на конференцию, дайте знать в комментах. Так будет проще найтись и пойти вместе.
#ai #performance #java #jvm
Новости для Java-, Kotlin- и Scala-разработчиков: 29 августа в Москве пройдет JVM Day — конференция для разработчиков, архитекторов и тимлидов от Т-Банка.
Из спикеров конференции – Андрей Кулешов, который поделится последними новостями в области Java, Антон Курако объяснит, как красивые показатели могут ввести в заблуждение, а Сергей Петрелевич разберет Mechanical Sympathy и подходы к ускорению Spring Boot-приложений. На конфе также будет аллея продуктов, где можно потыкать демки фреймворка Kora для Java и Kotlin, AI-native-платформы SourceCraft и мультиязычной OpenIDE.
После докладов пройдет вечеринка во дворе штаб-квартиры Т-Банка с играми на Sega, ИТ-квизом и диджей-сетом на виниле.
Зарегистрироваться на конфу можно тут: https://meetup.tbank.ru/conference/jvm-day/.
Если вы собираетесь на конференцию, дайте знать в комментах. Так будет проще найтись и пойти вместе.
#ai #performance #java #jvm
👍12🔥9🤩9❤1