В вашем вэб приложении есть шорткаты (горячие клавиши)?
Проверьте что для определения нажатой клавиши вы используете
Проверьте что для определения нажатой клавиши вы используете
keycode а не keychar, люди с нестандартной раскладкой клавиатуры вам спасибо скажутX (formerly Twitter)
Ilia Blinov (@goodhoopoe) on X
29/31. Какие еще минусы? Некоторые сайты шорткаты делают не на основе keycode, а на основе keychar(если вы погромист фронтендер не делайте так). Но такого скорее единицы.
👍2
Warp терминал портировали на linux, потому что очень просили. Но это была пуcтая трата времени и сил, вот почему:
1. В отличии от macOS юзерей, в linux экосистеме уж чего чего, а отличных терминалов пруд пруди. И все они бесплатные.
2. В отличии от macOS юзерей, пользователи linux очень скептически настроены к проприетарному софту с закрытым кодом. Особенно если это терминал в который они вводят пароли и много другой "sensitive" информации
3. В отличии от maсOS юзерей, пользователи linux очень скептически настроены в том что терминал отправляет все в какое-то облако и требует (можете себе это представить?) за это деньги!. Терминал!
4. В отличии от maсOS юзерей, пользователи linux сидят на очень разных железках и софте, от чего терминал сразу же посыпался на большинстве систем
5. В отличии от maсOS юзерей, пользователи linux не сидят на голых (или почти голых) терминалах, у них уже есть куча каких-то oh-my-zsh плагинов которые делают все эти автокомплиты и другую магию, с которыми warp тут же попадает конфликт и ломается (а вариант - выключите сначала все все с трудом настроенное, прежде чем попробовать наш терминал - заведомо будет проигнорирован)
6. В конце концов даже с чисто эстетической точки зрения все эти градиенты, свечения, и скругленные уголки выглядят настолько чужеродно в кедах или гноме что хочется это развидеть уже через 10 минут
Жаль их потраченного времени, знай они все вышеописанные пункты пошли бы пилить версию для винды
1. В отличии от macOS юзерей, в linux экосистеме уж чего чего, а отличных терминалов пруд пруди. И все они бесплатные.
2. В отличии от macOS юзерей, пользователи linux очень скептически настроены к проприетарному софту с закрытым кодом. Особенно если это терминал в который они вводят пароли и много другой "sensitive" информации
3. В отличии от maсOS юзерей, пользователи linux очень скептически настроены в том что терминал отправляет все в какое-то облако и требует (можете себе это представить?) за это деньги!. Терминал!
4. В отличии от maсOS юзерей, пользователи linux сидят на очень разных железках и софте, от чего терминал сразу же посыпался на большинстве систем
5. В отличии от maсOS юзерей, пользователи linux не сидят на голых (или почти голых) терминалах, у них уже есть куча каких-то oh-my-zsh плагинов которые делают все эти автокомплиты и другую магию, с которыми warp тут же попадает конфликт и ломается (а вариант - выключите сначала все все с трудом настроенное, прежде чем попробовать наш терминал - заведомо будет проигнорирован)
6. В конце концов даже с чисто эстетической точки зрения все эти градиенты, свечения, и скругленные уголки выглядят настолько чужеродно в кедах или гноме что хочется это развидеть уже через 10 минут
Жаль их потраченного времени, знай они все вышеописанные пункты пошли бы пилить версию для винды
😁6🥴2
Сегодня я хотел сделать пост про то как мне bing понравился больше чем google search.
Но вместо этого я вас поздравляю с международным днем синего экрана
Но вместо этого я вас поздравляю с международным днем синего экрана
😁6
Forwarded from r/ретранслятор
Вы наверняка уже знаете, что сегодня произошёл сбой Windows по всему миру из-за сервиса Crowdstrike, который отвечает за безопасность. И, кажется, был найден виновник.
r/#ProgrammerHumor
Мой первый рабочий день в Crowdstrike. Выпустил небольшое обновление, и теперь можно отдыхать.
Уволен. Совершенно несправедливо.
r/#ProgrammerHumor
Кто-то сделал для фреймворка модуль с впаяным донглом Logitech.
Кто не в курсе - у Logitech-a донглы программируемые, и даже продаются отдельно.
Т.е. любой их девайс можно прицепить на такой донгл выполнив небольшой ритуал.
Донглы (Dongle) общаются с вашей мышью / клавиатурой по средствам радио канала, у которого задержка значительно меньше чем от Bluetooth. Минус всегда был в том что он занимает usb порт. В данном случае мы получили И донг И свободный порт, красиво!
https://github.com/LeoDJ/FW-EC-DongleHiderPlus
Кто не в курсе - у Logitech-a донглы программируемые, и даже продаются отдельно.
Т.е. любой их девайс можно прицепить на такой донгл выполнив небольшой ритуал.
Донглы (Dongle) общаются с вашей мышью / клавиатурой по средствам радио канала, у которого задержка значительно меньше чем от Bluetooth. Минус всегда был в том что он занимает usb порт. В данном случае мы получили И донг И свободный порт, красиво!
https://github.com/LeoDJ/FW-EC-DongleHiderPlus
GitHub
GitHub - LeoDJ/FW-EC-DongleHiderPlus: Framework Expansion Card that includes a USB hub to hide a bare dongle inside and still have…
Framework Expansion Card that includes a USB hub to hide a bare dongle inside and still have a USB-A port externally - LeoDJ/FW-EC-DongleHiderPlus
🔥5
Не такие хорошие новости - в последнем обновлении ядра Linux какой-то бажец - выглядит так - смотрю ютуб и тут бац - картикна замирает, черный экран, через 5 секунд я на логин скрине.
Второй раз две недели.
Коснулось владельцев AMD.
Workaround:
Второй раз две недели.
Коснулось владельцев AMD.
Workaround:
Disable scatter gather support on kernel cli and increase the reserved VRAM.
Known issues with the amdgpu default enabling of Scatter Gather VRAM which is set from 6.2 kernel onwards.
add
```
amdgpu.sg_display=0
```
to your Kernel command line, and change the VRAM allocation in the BIOS to
```
UMA_GAME_OPTIMIZED
```
These in combination alleviate (but not completely remove) the issue you are seeing.
Вот как ОЧЕНЬ легко сделать бинарник (т.е. nodejs или что-то еще для запуска не требуется), весом 4.8 MB, который будет запускать JS код из вашего секретного гиста на гитхабе
index.js
index.js
import { urlGet, evalScript } from "std";
evalScript(
urlGet(
"https://gist.githubusercontent.com/.../noscript.js",
),
);./qjsc -o ./run-gist ./index.js
👏3👍1
Сегодня в который раз оценил полезность правила работы с Typenoscript которое я сам себе придумал.
Если уперся в сложный кейс который не понятно как затипизировать - скипаю это место и доделываю задачу.
Во первых - Ребусы тайпскрипта это кроличья нора, пока решаю такие задачки могу полностью выпасть из контекста задачи, и в него надо будет снова погружаться.
Во вторых - бывает так что потраченный час на дженерики оказывается потраченным в пустую, т.к. уже через пол часа пришла идея все немного переделать иначе
Если уперся в сложный кейс который не понятно как затипизировать - скипаю это место и доделываю задачу.
Во первых - Ребусы тайпскрипта это кроличья нора, пока решаю такие задачки могу полностью выпасть из контекста задачи, и в него надо будет снова погружаться.
Во вторых - бывает так что потраченный час на дженерики оказывается потраченным в пустую, т.к. уже через пол часа пришла идея все немного переделать иначе
👍28🤔2💯1
У Cloudflare есть сервис Zaraz. Что в переводе с Белорусского или Украинского переводится как "Сейчас". Любопытное проникновение славянского в зарубежные сервисы
(Кстати, знаете почему тут лавовая лампа на заставке? Они такими лампами генерят случайные хеши для криптографических подписей ) Еще более любопытно то что эти лампы стоят прямо у них в холле, и проходящие мимо люди добавляют им энтропии
Cloudflare Docs
Overview · Cloudflare Zaraz docs
Cloudflare Zaraz gives you complete control over third-party tools and services for your website, and allows you to offload them to Cloudflare's edge, improving the speed and security of your website. With Cloudflare Zaraz you can load tools such as analytics…
👍7🔥3
В браузере в setTimeout или setInterval можно передать Infinity и это будет работать.
А вот в node.js (проверил в node v22.4.0) вы получите warning (т.е. приложение продолжит работу) следующего содержания:
Фактически теперь ваш таймаут сработает наоброт - как можно раньше.
И узнать вы можете об этом только из логов. Будьте осторожны!
А вот в node.js (проверил в node v22.4.0) вы получите warning (т.е. приложение продолжит работу) следующего содержания:
TimeoutOverflowWarning: 4294967296000 does not fit into a 32-bit signed integer.
Timer duration was truncated to 1.
Фактически теперь ваш таймаут сработает наоброт - как можно раньше.
И узнать вы можете об этом только из логов. Будьте осторожны!
А на моем канале не будет новости про ts в node потому что ну сколько можно то : )
😁18🎉2
Work & Beer Balance
А на моем канале не будет новости про ts в node потому что ну сколько можно то : )
Кстати, любители enum которые игнорировали все предупреждения и только оправились от того что не могли перехать на esbuild - теперь снова будут страдать
И поделом, предупреждали же что enum это плохо
И поделом, предупреждали же что enum это плохо
Gist
bad_enums.md
GitHub Gist: instantly share code, notes, and snippets.
💯3❤2🔥1
Любопытное - мой ноут, который фреймворк, не подключает большой внешний монитор по type-c до тех пор пока в него самого не воткнута зарядка.
Едва ли это может быть мне нужно хоть когда-то, но и причина такого поведения мне не ясна (у монитора собственное питание)
Едва ли это может быть мне нужно хоть когда-то, но и причина такого поведения мне не ясна (у монитора собственное питание)
Последнее время стал патчить или форкать вместо ПР-ов в исходный репозиторий. Хотя это считается плохой практикой в сообществе. Посчитал статистику по своему github: на 37.8% моих PR не было никакой реакции мэйтенеров*. Статистика удручающая, хотя по ощущениям было что таких половина.
* От числа PR которые я делал в репозитории незнакомых мне людей
* От числа PR которые я делал в репозитории незнакомых мне людей
😢3
старый прикол, но вдруг кто не видел раньше - вы знали что есть Docker-клиент на базе Minecraft ?
Да, вы все правильно поняли, предлагает вам управлять докер контейнерами дергая выключатели в игре.
https://www.youtube.com/watch?v=eZDlJgJf55o
Да, вы все правильно поняли, предлагает вам управлять докер контейнерами дергая выключатели в игре.
https://www.youtube.com/watch?v=eZDlJgJf55o
YouTube
Dockercraft - Minecraft Docker client
A Minecraft Docker client! To visualize and run containers directly from a Minecraft environment.
Github repository: https://github.com/docker/dockercraft (we're looking for contributors!)
Authors: https://twitter.com/aduermael & https://twitter.com/gaetan_dv
Github repository: https://github.com/docker/dockercraft (we're looking for contributors!)
Authors: https://twitter.com/aduermael & https://twitter.com/gaetan_dv
😁5🔥3🤔1
Гарантирует ли ECMAScript что ключи объекта всегда будут перечислены в том же порядке в котором были добавлены?
Anonymous Quiz
12%
Да, гарантирует
77%
Нет, не гарантирует
11%
It depends
💩6👍1
До того как я стал жить в Польше я понятия не имел как правильно делать интернациональные сайты.
Пока сам на эти грабли не наступил - не понимал как это важно.
Ниже я напишу простые советы, что учесть чтобы сделать нормальный сайт для путешественников и мигрантов
(Вдруг мои подписчики умнее меня и учатся не только на своих ошибках)
Самое главное правило - местоположение вашего пользователя ничего не говорит вам о его языке. Он может быть на этой территории временно, недавно, или вовсе не быть там (VPN). Есть более надежный способ - прочитать заголовок Accept-Language, используйте его для определения языка
Итак, чеклист
1. Проверьте что вы не определяйте язык вашего пользователя по IP (по goip базам, whois и тп) ❌
2. Проверьте что вы не определяете язык вашего пользователя по геолокации ❌
3. Убедитесь что вы определяете язык пользователя считывая заголовок Accept-Language ✅
4. Если у вас нет переводов на другие языки - проверьте что ничего не ломается при использовании Google Translate (а ломается оно часто, особенно если у вас реакт, про это напишу отдельный пост)
Так же стоит избегать следующих практик:
1. Забыть добавить возможность изменить язык вручную (если есть переводы) не покидая страничку.
2. В случае выбора отличного от дефолтов языка - редиректить на другой сайт (например при выборе en языка на example.xy перекидывать на example.com)
3. Ререндерить всю страницу после каждого взаимодействия (делает авто перевод страниц около бесполезным)
4. Использовать лейблы дропдаунов в качестве значений отправляемых формой
Пока сам на эти грабли не наступил - не понимал как это важно.
Ниже я напишу простые советы, что учесть чтобы сделать нормальный сайт для путешественников и мигрантов
(Вдруг мои подписчики умнее меня и учатся не только на своих ошибках)
Самое главное правило - местоположение вашего пользователя ничего не говорит вам о его языке. Он может быть на этой территории временно, недавно, или вовсе не быть там (VPN). Есть более надежный способ - прочитать заголовок Accept-Language, используйте его для определения языка
Итак, чеклист
1. Проверьте что вы не определяйте язык вашего пользователя по IP (по goip базам, whois и тп) ❌
2. Проверьте что вы не определяете язык вашего пользователя по геолокации ❌
3. Убедитесь что вы определяете язык пользователя считывая заголовок Accept-Language ✅
4. Если у вас нет переводов на другие языки - проверьте что ничего не ломается при использовании Google Translate (а ломается оно часто, особенно если у вас реакт, про это напишу отдельный пост)
Так же стоит избегать следующих практик:
1. Забыть добавить возможность изменить язык вручную (если есть переводы) не покидая страничку.
2. В случае выбора отличного от дефолтов языка - редиректить на другой сайт (например при выборе en языка на example.xy перекидывать на example.com)
3. Ререндерить всю страницу после каждого взаимодействия (делает авто перевод страниц около бесполезным)
4. Использовать лейблы дропдаунов в качестве значений отправляемых формой
MDN Web Docs
Accept-Language header - HTTP | MDN
The HTTP Accept-Language request header indicates the natural language and locale that the client prefers.
The server uses content negotiation to select one of the proposals and informs the client of the choice with the Content-Language response header.
Browsers…
The server uses content negotiation to select one of the proposals and informs the client of the choice with the Content-Language response header.
Browsers…
👍8👏5❤3🔥2
Признаюсь вам - я не очень шарю за базы данных. Я могу сделать запрос, написать какой-то простой sql, но вот проектировать базы это точно не то чем я люблю заниматься.
Если возможно использую базу как сервис, типа того же supabase.com.
А сегодня я узнал что они запилили бесплатный онлайн инструмент postgres.new, который позволяет таким хомячкам как я с легкостью задизайнить базу потягав прямоугольники и нажаловавшись AIшке.
Причем есть возможность эту базу потестить прямо в браузере благодаря pglite.dev (postgress на WASM)
Можете потыкать сами или посмотреть как это тыкают на Ютубе.
Если возможно использую базу как сервис, типа того же supabase.com.
А сегодня я узнал что они запилили бесплатный онлайн инструмент postgres.new, который позволяет таким хомячкам как я с легкостью задизайнить базу потягав прямоугольники и нажаловавшись AIшке.
Причем есть возможность эту базу потестить прямо в браузере благодаря pglite.dev (postgress на WASM)
Можете потыкать сами или посмотреть как это тыкают на Ютубе.
YouTube
I gave AI full control over my database (postgres.new)
Introducing database.build (formerly postgres.new), the in-browser Postgres sandbox with AI assistance.
https://database.build
https://pglite.dev
Features:
- Unlimited Postgres databases directly in your browser
- AI assistance
- Drag-and-drop CSV import…
https://database.build
https://pglite.dev
Features:
- Unlimited Postgres databases directly in your browser
- AI assistance
- Drag-and-drop CSV import…
👍9🔥4🎉2
А вы пользуетесь PWA (не клей, а устанавливаемые вэб приложения)
Anonymous Poll
3%
Первый раз слышу
34%
Слышал о таком, но не пользовался
17%
Раньше было
28%
У меня установлено одно такое
17%
У меня установлено больше чем одно приложение PWA
Одна деталь меня всегда занимает в js - все что касается ошибок (Errors) и исключений (Exceptions) в нашем коде перевернуто сверх на голову.
Для контекста - что есть что:
Error - это когда ваша приложение сломалось полностью, пишем в логи трейс и умираем. Например - закончилась оперативная память.
Exception - это когда случилась неприятность, но мы можем с этим что-то сделать или вообще проигнорировать. Например - мы не нашли лог файл в который раньше писали.
в JavaScript нету нормального разделения на ошибки и исключения. у нас есть только объект Error, который мы используем часто для того чтобы выбросить исключение и как то его обработать.
Но как найти где она там будет обработана? А вы точно catch вашему промису добавили?
В связи с этим я для себя выбрал практику в ситуациях где я ожидаю эксепшены которые должны быть обработаны (на практике это основное их отличие от ошибок) я возвращаю из функции массив.
Например.
Таким образом я всегда могу быть уверен (благодоря тсу) что я эту ошибку отловил и учел в коде выше.
В ситуациях где я хочу чтобы приложение завершило работу - я делаю throw Error(...)
Ну и напоследок пример очень странного кода который часто вижу и никогда не понимал. Что это дает и как ловить эту ошибку кто-нибудь знает?
Для контекста - что есть что:
Error - это когда ваша приложение сломалось полностью, пишем в логи трейс и умираем. Например - закончилась оперативная память.
Exception - это когда случилась неприятность, но мы можем с этим что-то сделать или вообще проигнорировать. Например - мы не нашли лог файл в который раньше писали.
в JavaScript нету нормального разделения на ошибки и исключения. у нас есть только объект Error, который мы используем часто для того чтобы выбросить исключение и как то его обработать.
Но как найти где она там будет обработана? А вы точно catch вашему промису добавили?
В связи с этим я для себя выбрал практику в ситуациях где я ожидаю эксепшены которые должны быть обработаны (на практике это основное их отличие от ошибок) я возвращаю из функции массив.
Например.
function someFn(data) {
if (!someCheck(data)) return [Error('Can not do something because....'), null]
// ...
return [null, something]
}Таким образом я всегда могу быть уверен (благодоря тсу) что я эту ошибку отловил и учел в коде выше.
В ситуациях где я хочу чтобы приложение завершило работу - я делаю throw Error(...)
Ну и напоследок пример очень странного кода который часто вижу и никогда не понимал. Что это дает и как ловить эту ошибку кто-нибудь знает?
const onClick = useCallback(() => {
...
throw Error(...)
}, [])
<div onClick={onClick} />👍6👏2