Forwarded from ITmozg
Обнаружены шахматы для DOS… 1980 года
Недавно обнаружилась дискета с 86-DOS (QDOS) самой ранней из ныне известных версий предтечи PC-DOS и MS-DOS, на которой оказались шахматы. Вот о них и пойдёт речь.
Сами по себе шахматные программы, появлявшиеся с разной периодичностью с середины 1950-х, уже были не в диковинку. Да и в самом 1980-м выпущено под различные платформы с полдесятка. Однако PC-совместимые ПК и DOS для таковых появились в августе 1981-го, в то время как системная дискета с шахматами датируется годом ранее. Вначале шахматы достались в виде com-файла, вытянутого из памяти портируемого мультисистемного эмулятора SIMH, и дальше вопроса с выбором цвета фигур не работали. В связи с чем возникло предположение, что без перекомпиляции не смогут нормально запускаться. А образ дискеты стандарнтыми средствами вроде WinImage, UltraISO, Disk Manager не открывался, и не монтировался в DOSBox. Затем специалистом было осуществлено посекторное копирование игры (chess.com, 6400 байт) и документации (chess.doc, 896 байт) из образа дискеты. И вдруг оказалось, что без проблем запускается под MS-DOS 2.11 и 3.31 в эмуляторе 86Box, MS-DOS Player, NTVDM, FreeDOS и DOSBox-X, хотя и не работает в обычном DOSBox.
https://habr.com/ru/articles/786234/
👉 @itmozg
Недавно обнаружилась дискета с 86-DOS (QDOS) самой ранней из ныне известных версий предтечи PC-DOS и MS-DOS, на которой оказались шахматы. Вот о них и пойдёт речь.
Сами по себе шахматные программы, появлявшиеся с разной периодичностью с середины 1950-х, уже были не в диковинку. Да и в самом 1980-м выпущено под различные платформы с полдесятка. Однако PC-совместимые ПК и DOS для таковых появились в августе 1981-го, в то время как системная дискета с шахматами датируется годом ранее. Вначале шахматы достались в виде com-файла, вытянутого из памяти портируемого мультисистемного эмулятора SIMH, и дальше вопроса с выбором цвета фигур не работали. В связи с чем возникло предположение, что без перекомпиляции не смогут нормально запускаться. А образ дискеты стандарнтыми средствами вроде WinImage, UltraISO, Disk Manager не открывался, и не монтировался в DOSBox. Затем специалистом было осуществлено посекторное копирование игры (chess.com, 6400 байт) и документации (chess.doc, 896 байт) из образа дискеты. И вдруг оказалось, что без проблем запускается под MS-DOS 2.11 и 3.31 в эмуляторе 86Box, MS-DOS Player, NTVDM, FreeDOS и DOSBox-X, хотя и не работает в обычном DOSBox.
https://habr.com/ru/articles/786234/
👉 @itmozg
👍7❤3⚡2
Нужно ли хранить пароли самостоятельно?
При разработке приложений, требующих аутентификации пользователей, мы должны задаться вопросом: стоит ли хранить пароли пользователей в наших системах? Несмотря на удобство, самостоятельное хранение паролей создает значительные риски для безопасности.
В идеале мы должны стремиться к тому, чтобы по возможности не заниматься хранением паролей самостоятельно. Некоторые альтернативные подходы включают в себя:
- использование сторонних служб аутентификации (например, OAuth) для обработки входа в систему.
- Использование федеративного управления идентификацией и единого входа (SSO) для минимизации использования паролей.
Если самостоятельное хранение паролей неизбежно, примите дополнительные меры предосторожности.
Не делайте этого:
- Хранить пароли в формате обычного текста
- Хешировать пароли без соли
ДЕЛАЙТЕ:
- Солить + хэшировать пароли перед хранением с помощью криптографических функций
- Следуйте отраслевым стандартам, таким как OWASP, для реализации соления и хэширования.
- Правильно проверяйте попытки входа в систему, сравнивая хэши вводимых паролей с хранимыми хэшами по времени.
Предпочтительнее отказаться от хранения самоизменяющихся паролей. Но при необходимости соление и хеширование паролей может помочь снизить риски.
👉 @bookflow
При разработке приложений, требующих аутентификации пользователей, мы должны задаться вопросом: стоит ли хранить пароли пользователей в наших системах? Несмотря на удобство, самостоятельное хранение паролей создает значительные риски для безопасности.
В идеале мы должны стремиться к тому, чтобы по возможности не заниматься хранением паролей самостоятельно. Некоторые альтернативные подходы включают в себя:
- использование сторонних служб аутентификации (например, OAuth) для обработки входа в систему.
- Использование федеративного управления идентификацией и единого входа (SSO) для минимизации использования паролей.
Если самостоятельное хранение паролей неизбежно, примите дополнительные меры предосторожности.
Не делайте этого:
- Хранить пароли в формате обычного текста
- Хешировать пароли без соли
ДЕЛАЙТЕ:
- Солить + хэшировать пароли перед хранением с помощью криптографических функций
- Следуйте отраслевым стандартам, таким как OWASP, для реализации соления и хэширования.
- Правильно проверяйте попытки входа в систему, сравнивая хэши вводимых паролей с хранимыми хэшами по времени.
Предпочтительнее отказаться от хранения самоизменяющихся паролей. Но при необходимости соление и хеширование паролей может помочь снизить риски.
👉 @bookflow
👍7⚡1
Forwarded from Kotlin
KMP Library Wizard
Теперь можно в два клика создать KMP проект
https://terrakok.github.io/kmp-web-wizard/
✍️ @kotlin_lib
Теперь можно в два клика создать KMP проект
https://terrakok.github.io/kmp-web-wizard/
✍️ @kotlin_lib
⚡3👍1
Как мы случайно стали одной из крупнейших ИТ-компаний Дагестана
Всё началось с квартиры, на окне которой было написано «Магазин электроники». Через 10 лет мы развились до гипермаркета, занялись бытовой техникой, начали обучать собственные команды разработки (что довольно сложно делать в Дагестане), а через 20 лет занялись логистическими системами для собственных курьеров, доставляющих продукты.
Но давайте вернёмся в славный 2003 год, когда к нам заходили только гики. Тогда ещё не было айфонов, поэтому люди играли на компьютерах. Хитами были GTA: Vice city, Morrowind, только вышли Stronghold: Crusader, четвёртые Герои, вторая Готика, на полки ехал Warcraft III и где-то далеко в Исландии рождалась Eve Online, а довольно известный мод для Half-Life получил обновление 1.6. Но все играли одиночные кампании. Нужен был не быстрый интернет, а быстрая видеокарта хотя бы с 32 Мб встроенной памяти.
Компьютеры продавало несколько магазинов, но мы нашли нишу. Мы не держали склад и не вмораживали свои деньги, а именно находили всё нужное, везли и делали сборку. Уже прошли те золотые годы, когда звуковуха ESS могла не встать в систему, потому что ей не хочется, но подбор и сборка всё ещё оставались слегка шаманскими.
Получилось, что аудитория дагестанских гиков дала нам отличный старт. Задумываясь об этом сейчас, могу сказать, что это не должно было сработать, но почему-то получилось.
https://habr.com/ru/companies/05-ru/articles/786434/
👉 @bookflow
Всё началось с квартиры, на окне которой было написано «Магазин электроники». Через 10 лет мы развились до гипермаркета, занялись бытовой техникой, начали обучать собственные команды разработки (что довольно сложно делать в Дагестане), а через 20 лет занялись логистическими системами для собственных курьеров, доставляющих продукты.
Но давайте вернёмся в славный 2003 год, когда к нам заходили только гики. Тогда ещё не было айфонов, поэтому люди играли на компьютерах. Хитами были GTA: Vice city, Morrowind, только вышли Stronghold: Crusader, четвёртые Герои, вторая Готика, на полки ехал Warcraft III и где-то далеко в Исландии рождалась Eve Online, а довольно известный мод для Half-Life получил обновление 1.6. Но все играли одиночные кампании. Нужен был не быстрый интернет, а быстрая видеокарта хотя бы с 32 Мб встроенной памяти.
Компьютеры продавало несколько магазинов, но мы нашли нишу. Мы не держали склад и не вмораживали свои деньги, а именно находили всё нужное, везли и делали сборку. Уже прошли те золотые годы, когда звуковуха ESS могла не встать в систему, потому что ей не хочется, но подбор и сборка всё ещё оставались слегка шаманскими.
Получилось, что аудитория дагестанских гиков дала нам отличный старт. Задумываясь об этом сейчас, могу сказать, что это не должно было сработать, но почему-то получилось.
https://habr.com/ru/companies/05-ru/articles/786434/
👉 @bookflow
👍10👎7😁3
Подборка Telegram каналов для программистов
Системное администрирование 📌
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux
https://t.iss.one/tikon_1 Новости высоких технологий, науки и техники💡
https://t.iss.one/mir_teh Мир технологий (Technology World)
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.iss.one/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python Rus
Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр
Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
Чат программистов📌
https://t.iss.one/developers_ru
Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов
https://t.iss.one/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.iss.one/UchuEnglish Английский с нуля
Математика 📌
https://t.iss.one/Pomatematike Канал по математике
Excel лайфхак📌
https://t.iss.one/Excel_lifehack
Системное администрирование 📌
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux
https://t.iss.one/tikon_1 Новости высоких технологий, науки и техники💡
https://t.iss.one/mir_teh Мир технологий (Technology World)
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.iss.one/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python Rus
Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр
Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
Чат программистов📌
https://t.iss.one/developers_ru
Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов
https://t.iss.one/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.iss.one/UchuEnglish Английский с нуля
Математика 📌
https://t.iss.one/Pomatematike Канал по математике
Excel лайфхак📌
https://t.iss.one/Excel_lifehack
👍1
Осваиваем 3-рублёвые микроконтроллеры PADAUK
Тайваньская фирма Padauk по праву считается производителем самых дешевых корпусных микроконтроллеров. Большим функционалом они не обременены, но несложные задачки для простых устройств могут выполнять.
На Хабре публиковалось несколько обзоров, где можно ознакомится с характеристиками и линейкой производителя. Даташиты можно найти на официальном сайте Padauk.
Простые восьмиразрядные микроконтроллеры от именитых фирм теперь или недоступны или имеют негуманный цениик. Одна из возможных замен — микроконтроллеры Padauk. В их линейке есть и однократно и многократно программируемые. Ниже в статье поэтапно расскажу как сделать программатор, создать свой первый проект и прошить «Hello world».
Надо сказать, что фирменные программаторы от производителя тоже доступны, но цена их колеблется около 100 сами знаете чего. Самодельный обойдется значительно дешевле и позволит прошивать большое число микроконтроллеров.
Программатор разработан и поддерживается сообществом FreePDK. Все необходимые файлы выложены на Гитхабе. Эта статья основана на серии видео от EEVblog по той же тематике, там в пяти частях всё рассказано. Я всё повторял за автором. Но лично мне проще работать с текстом и картинками.
https://habr.com/ru/companies/timeweb/articles/786266/
👉 @bookflow
Тайваньская фирма Padauk по праву считается производителем самых дешевых корпусных микроконтроллеров. Большим функционалом они не обременены, но несложные задачки для простых устройств могут выполнять.
На Хабре публиковалось несколько обзоров, где можно ознакомится с характеристиками и линейкой производителя. Даташиты можно найти на официальном сайте Padauk.
Простые восьмиразрядные микроконтроллеры от именитых фирм теперь или недоступны или имеют негуманный цениик. Одна из возможных замен — микроконтроллеры Padauk. В их линейке есть и однократно и многократно программируемые. Ниже в статье поэтапно расскажу как сделать программатор, создать свой первый проект и прошить «Hello world».
Надо сказать, что фирменные программаторы от производителя тоже доступны, но цена их колеблется около 100 сами знаете чего. Самодельный обойдется значительно дешевле и позволит прошивать большое число микроконтроллеров.
Программатор разработан и поддерживается сообществом FreePDK. Все необходимые файлы выложены на Гитхабе. Эта статья основана на серии видео от EEVblog по той же тематике, там в пяти частях всё рассказано. Я всё повторял за автором. Но лично мне проще работать с текстом и картинками.
https://habr.com/ru/companies/timeweb/articles/786266/
👉 @bookflow
👍2
❤️🙏 Путь к мечте: как инвалидность не помешала стать разработчиком и продолжить борьбу за здоровье
Автор «Библиотеки программиста» Станислав Герасимов, инвалид с детства, получил диплом в IT, хочет построить карьеру, поправить здоровье и найти хороших друзей.
Меня зовут Станислав Герасимов, 31 год, я разработчик. Хочу рассказать свою жизненную историю и о том, как я, преодолевая трудности и преграды, шел и иду к своим мечтам — стать профессиональным разработчиком и поправить здоровье.
При рождении врачи повредили мне головной мозг, занесли инфекцию и сказали маме, что я умру. Мама от меня не отказалась. После клинической смерти я выжил и мог бы остаться инвалидом, прикованным к постели. Мама, бабушка и дедушка приложили максимум усилий, чтобы я стал нормальным человеком, лечили меня где только можно.
https://bookflow.ru/put-k-mechte-kak-invalidnost-ne-pomeshala-stat-razrabotchikom-i-prodolzhit-borbu-za-zdorove/
👉 @bookflow
Автор «Библиотеки программиста» Станислав Герасимов, инвалид с детства, получил диплом в IT, хочет построить карьеру, поправить здоровье и найти хороших друзей.
Меня зовут Станислав Герасимов, 31 год, я разработчик. Хочу рассказать свою жизненную историю и о том, как я, преодолевая трудности и преграды, шел и иду к своим мечтам — стать профессиональным разработчиком и поправить здоровье.
При рождении врачи повредили мне головной мозг, занесли инфекцию и сказали маме, что я умру. Мама от меня не отказалась. После клинической смерти я выжил и мог бы остаться инвалидом, прикованным к постели. Мама, бабушка и дедушка приложили максимум усилий, чтобы я стал нормальным человеком, лечили меня где только можно.
https://bookflow.ru/put-k-mechte-kak-invalidnost-ne-pomeshala-stat-razrabotchikom-i-prodolzhit-borbu-za-zdorove/
👉 @bookflow
❤13👍2💔2
Embox отправляется на Vostok
Как, наверное, многие на хабре знают, мы в проекте Embox любим запускаться на отечественных процессорах.
Эта статья – своеобразный (расширенный) анонс того, что Embox перенесен на микроконтроллеры еще одного производителя микроэлектроники в РФ. Речь идет о технологической платформе «Vostok» от ООО «Новатор» базирующейся на микроконтроллерах ГК «Элемент».
https://habr.com/ru/articles/777302/
👉 @bookflow
Как, наверное, многие на хабре знают, мы в проекте Embox любим запускаться на отечественных процессорах.
Эта статья – своеобразный (расширенный) анонс того, что Embox перенесен на микроконтроллеры еще одного производителя микроэлектроники в РФ. Речь идет о технологической платформе «Vostok» от ООО «Новатор» базирующейся на микроконтроллерах ГК «Элемент».
https://habr.com/ru/articles/777302/
👉 @bookflow
👍6💩1
Не нужно блокировать кнопки
Одна из наиболее распространенных проблем доступности, которую я нахожу (и исправляю) в проектах своих клиентов – это динамическое блокирование кнопок в формах после отправки последних. Сегодня я хотел бы рассказать, почему разработчики так делают, почему это не работает и что нужно делать вместо этого. Давайте разбираться!
Почему разработчики деактивируют кнопки
По моим наблюдениям, паттерн используется для того, чтобы исключить возможность повторной отправки формы в процессе ожидания, пока обрабатывается первая. Часто случается, что нужно дождаться ответа API и на это требуется несколько секунд; нежелательно, чтобы пользователь успел отослать еще одну форму, пока система не закончит реагировать на предыдущую.
При блокировании button еще раз нажать на кнопку не получится.
Почему этот паттерн не работает
Начнем с того, что он не делает того, на что рассчитан. Одно то, что кнопка блокирована, не означает, что отправить форму становится невозможно. Можно перейти на какое-нибудь из полей формы, нажать на клавишу enter или return – и форма будет отправлена.
Но, помимо этого, метод никуда не годится с точки зрения доступности. Элементы с атрибутом disabled не могут принимать на себя фокус, а это создает путаницу для тех, кто использует скринридеры или перемещается по вебсайтам при помощи клавиатуры.
Если кнопка находится в фокусе в тот момент, когда вы задаете ей атрибут disabled (скажем, пользователь только что нажал на нее, чтобы отправить форму), то фокус переходит с нее на элемент document. Человека со скринридером это собьет с толку – он окажется совершенно в другой части страницы.
То есть, если обобщить сказанное, этот способ не помогает вам достичь поставленной цели и вдобавок портит опыт определенному сегменту ваших пользователей.
Более удачный способ
Что же тогда делать? Лично я предпочитаю добавлять атрибут для элемента form, а затем убирать его, когда все необходимые действия с формой будут произведены. Всякий раз, когда происходит событие submit, в первую очередь проводится проверка на наличие атрибута. Если он в наличии, я прерываю обработчик событий, чтобы предотвратить многократную отправку формы.
Таким образом, фокус на элементах формы сохраняется, никаких проблем с доступностью не возникает, дублирование форм предотвращается, а также блокируется возможность отправить форму путем ввода команд клавишами в других полях.
Вдобавок вы можете придать элементам особый «деактивированный» вид при помощи CSS-селектора [data-submitting]…
Не забывайте также включать ARIA live region и отображать оповещения о статусе обработки формы на протяжении всего процесса.
👉 @bookflow
Одна из наиболее распространенных проблем доступности, которую я нахожу (и исправляю) в проектах своих клиентов – это динамическое блокирование кнопок в формах после отправки последних. Сегодня я хотел бы рассказать, почему разработчики так делают, почему это не работает и что нужно делать вместо этого. Давайте разбираться!
Почему разработчики деактивируют кнопки
По моим наблюдениям, паттерн используется для того, чтобы исключить возможность повторной отправки формы в процессе ожидания, пока обрабатывается первая. Часто случается, что нужно дождаться ответа API и на это требуется несколько секунд; нежелательно, чтобы пользователь успел отослать еще одну форму, пока система не закончит реагировать на предыдущую.
form.addEventListener('submit', function (event) {
// Don't let the form reload the page
event.preventDefault();
// Get the submit button and disable it
let btn = form.querySelector('button');
btn.addAttribute('disabled', '');
// Do more form stuff...
// re-enable the button after the API responds
btn.removeAttribute('disabled');
});
При блокировании button еще раз нажать на кнопку не получится.
Почему этот паттерн не работает
Начнем с того, что он не делает того, на что рассчитан. Одно то, что кнопка блокирована, не означает, что отправить форму становится невозможно. Можно перейти на какое-нибудь из полей формы, нажать на клавишу enter или return – и форма будет отправлена.
Но, помимо этого, метод никуда не годится с точки зрения доступности. Элементы с атрибутом disabled не могут принимать на себя фокус, а это создает путаницу для тех, кто использует скринридеры или перемещается по вебсайтам при помощи клавиатуры.
Если кнопка находится в фокусе в тот момент, когда вы задаете ей атрибут disabled (скажем, пользователь только что нажал на нее, чтобы отправить форму), то фокус переходит с нее на элемент document. Человека со скринридером это собьет с толку – он окажется совершенно в другой части страницы.
То есть, если обобщить сказанное, этот способ не помогает вам достичь поставленной цели и вдобавок портит опыт определенному сегменту ваших пользователей.
Более удачный способ
Что же тогда делать? Лично я предпочитаю добавлять атрибут для элемента form, а затем убирать его, когда все необходимые действия с формой будут произведены. Всякий раз, когда происходит событие submit, в первую очередь проводится проверка на наличие атрибута. Если он в наличии, я прерываю обработчик событий, чтобы предотвратить многократную отправку формы.
form.addEventListener('submit', function (event) {
// Don't let the form reload the page
event.preventDefault();
// If the form is already submitting, do nothing
if (form.hasAttribute('data-submitting')) return;
// Add the [data-submitting] attribute to stop multiple submissions
form.setAttribute('data-submitting', '');
// Do more form stuff...
// Remove the [data-submitting] attribute
form.removeAttribute('data-submitting');
});Таким образом, фокус на элементах формы сохраняется, никаких проблем с доступностью не возникает, дублирование форм предотвращается, а также блокируется возможность отправить форму путем ввода команд клавишами в других полях.
Вдобавок вы можете придать элементам особый «деактивированный» вид при помощи CSS-селектора [data-submitting]…
[data-submitting] button {
opacity: 0.8;
}Не забывайте также включать ARIA live region и отображать оповещения о статусе обработки формы на протяжении всего процесса.
👉 @bookflow
👍11👎1
Действительно ли C++ — лучший язык, чтобы выстрелить себе в ногу?
В 2023 году одной из главных IT-новостей стала публикация гайда от Агентства национальной безопасности (NSA) США, в котором языки С/C+ признавались «опасными» и требующими перехода на «безопасные» C#, Go, Java, Ruby и Swift.
В этой статье я с позиции Security Champion в KasperskyOS, собственной микроядерной операционной системе «Лаборатории Касперского», расскажу, так ли плохо обстоят дела с безопасностью в С++ на самом деле, а также разберу различные подходы к митигации описанных проблем, которые современная индустрия предлагает для решения данного вопроса.
https://habr.com/ru/companies/kaspersky/articles/787586/
👉 @bookflow
В 2023 году одной из главных IT-новостей стала публикация гайда от Агентства национальной безопасности (NSA) США, в котором языки С/C+ признавались «опасными» и требующими перехода на «безопасные» C#, Go, Java, Ruby и Swift.
В этой статье я с позиции Security Champion в KasperskyOS, собственной микроядерной операционной системе «Лаборатории Касперского», расскажу, так ли плохо обстоят дела с безопасностью в С++ на самом деле, а также разберу различные подходы к митигации описанных проблем, которые современная индустрия предлагает для решения данного вопроса.
https://habr.com/ru/companies/kaspersky/articles/787586/
👉 @bookflow
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Что такое Обработка данных?
Это относится к сбору, обработке и анализу данных для извлечения полезных исследовательских или информационных выводов. Включает в себя преобразование сырых данных в удобный для анализа и использования формат с использованием различных инструментов, методов и алгоритмов. Обработка данных может принимать множество форм, включая пакетную обработку, обработку в реальном времени и потоковую обработку. При пакетной обработке большие объемы данных обрабатываются одновременно, часто ночью или в периоды низкой активности, в то время как обработка в реальном времени включает в себя обработку данных по мере их поступления.
Есть несколько этапов, включенных в обработку данных:
1. Сбор данных: Первый шаг в обработке данных - сбор данных. Это может быть выполнено различными методами, такими как опросы, сенсоры, парсинг веб-страниц и использование API.
2. Очистка данных: Сырые данные, собранные из различных источников, часто содержат ошибки, дубликаты и пропущенные значения. Очистка данных включает в себя выявление и коррекцию этих ошибок для обеспечения точности и последовательности данных.
3. Трансформация: После очистки данные нужно преобразовать в формат, удобный для анализа. Это может включать в себя агрегацию данных, преобразование типов данных или нормализацию данных.
4. Анализ: После трансформации данных следующим шагом является их анализ. Это может быть выполнено с использованием различных статистических и машинно-обучающих методов для извлечения идей и паттернов из данных.
5. Визуализация: Визуализация данных включает в себя представление анализированных данных в визуальном формате, таком как диаграммы, графики или карты, чтобы помочь заинтересованным сторонам понимать и интерпретировать полученные исследования.
👉 @bookflow
Это относится к сбору, обработке и анализу данных для извлечения полезных исследовательских или информационных выводов. Включает в себя преобразование сырых данных в удобный для анализа и использования формат с использованием различных инструментов, методов и алгоритмов. Обработка данных может принимать множество форм, включая пакетную обработку, обработку в реальном времени и потоковую обработку. При пакетной обработке большие объемы данных обрабатываются одновременно, часто ночью или в периоды низкой активности, в то время как обработка в реальном времени включает в себя обработку данных по мере их поступления.
Есть несколько этапов, включенных в обработку данных:
1. Сбор данных: Первый шаг в обработке данных - сбор данных. Это может быть выполнено различными методами, такими как опросы, сенсоры, парсинг веб-страниц и использование API.
2. Очистка данных: Сырые данные, собранные из различных источников, часто содержат ошибки, дубликаты и пропущенные значения. Очистка данных включает в себя выявление и коррекцию этих ошибок для обеспечения точности и последовательности данных.
3. Трансформация: После очистки данные нужно преобразовать в формат, удобный для анализа. Это может включать в себя агрегацию данных, преобразование типов данных или нормализацию данных.
4. Анализ: После трансформации данных следующим шагом является их анализ. Это может быть выполнено с использованием различных статистических и машинно-обучающих методов для извлечения идей и паттернов из данных.
5. Визуализация: Визуализация данных включает в себя представление анализированных данных в визуальном формате, таком как диаграммы, графики или карты, чтобы помочь заинтересованным сторонам понимать и интерпретировать полученные исследования.
👉 @bookflow
👍5⚡1
«Отучаем» WinFXNet от жадности (часть 1)
Предыстория
В сфере АСУ ТП инженерам по работе приходится не только писать ПО, но и использовать готовое ПО от производителей оборудования. В связи с санкциями, многие поставщики покинули РФ, а оборудование и ПО необходимо продолжать эксплуатировать дальше.
В данной статье будет расмотрена WinFXNet - программа производителя Schneider Electric (ESMI) для конфигурирования станций пожарной сигнализации серии Esmi FX. К сожалению, из-за санкций, ключ USB Esmi FX FFS00393016 приобрести нельзя, а он, в свою очередь, имеет встроенный таймер, который настроен на 4-летний период. У многих данный ключ по времени уже закончился, плюс скоро закончится и лицензия на само ПО (файл формата lic). Поэтому достаем дизассемблеры и посмотрим, можно ли обойти данную защиту.
Disclaimer: Данная заметка написана в ознакомительных целях и не является руководством к действиям. Хотя, понимая всю безвыходность данной ситуации, как временное решение имеет право на жизнь, но решать только вам. Статья написана как туториал, поэтому постараюсь детально описать все шаги поиска нужных мест в программе.
https://habr.com/ru/articles/790564/
👉 @bookflow
Предыстория
В сфере АСУ ТП инженерам по работе приходится не только писать ПО, но и использовать готовое ПО от производителей оборудования. В связи с санкциями, многие поставщики покинули РФ, а оборудование и ПО необходимо продолжать эксплуатировать дальше.
В данной статье будет расмотрена WinFXNet - программа производителя Schneider Electric (ESMI) для конфигурирования станций пожарной сигнализации серии Esmi FX. К сожалению, из-за санкций, ключ USB Esmi FX FFS00393016 приобрести нельзя, а он, в свою очередь, имеет встроенный таймер, который настроен на 4-летний период. У многих данный ключ по времени уже закончился, плюс скоро закончится и лицензия на само ПО (файл формата lic). Поэтому достаем дизассемблеры и посмотрим, можно ли обойти данную защиту.
Disclaimer: Данная заметка написана в ознакомительных целях и не является руководством к действиям. Хотя, понимая всю безвыходность данной ситуации, как временное решение имеет право на жизнь, но решать только вам. Статья написана как туториал, поэтому постараюсь детально описать все шаги поиска нужных мест в программе.
https://habr.com/ru/articles/790564/
👉 @bookflow
⚡3👍2💩1
Что такое Bug Bounty и почему корпорации платят за поиск ошибок?
Bug Bounty — это программа вознаграждения за найденные ошибки в программном обеспечении или на сайтах компаний.
Почему корпорации это делают? Потому что если кто-то найдет ошибку и сообщит об этом, компания может быстро исправить баг, прежде чем кто-то им злоупотребит.
Это помогает сохранить данные и защищает от реальных хакеров. Кроме того, такие программы позволяют привлечь талантливых людей, которые могут помочь им стать еще более безопасными.
Есть ли у российских корпораций Bug Bounty? Да, для крупных IT-компаний это обычная практика. Недавно как раз Яндекс обновил свою программу, подняв вознаграждение за критическую находку до миллиона рублей (!) Тестить можно даже новые устройства: Станцию Дуо Макс, Миди и ТВ Станции.
👉 @bookflow
Bug Bounty — это программа вознаграждения за найденные ошибки в программном обеспечении или на сайтах компаний.
Почему корпорации это делают? Потому что если кто-то найдет ошибку и сообщит об этом, компания может быстро исправить баг, прежде чем кто-то им злоупотребит.
Это помогает сохранить данные и защищает от реальных хакеров. Кроме того, такие программы позволяют привлечь талантливых людей, которые могут помочь им стать еще более безопасными.
Есть ли у российских корпораций Bug Bounty? Да, для крупных IT-компаний это обычная практика. Недавно как раз Яндекс обновил свою программу, подняв вознаграждение за критическую находку до миллиона рублей (!) Тестить можно даже новые устройства: Станцию Дуо Макс, Миди и ТВ Станции.
👉 @bookflow
👍1
Каково это, создавать язык программирования сегодня?
«Эта книга – классика. Относитесь к ней бережно».
Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему её вернул.
Вышла эта книжка в 1986 году. В те времена создание компиляторов было крайне сложной задачей, требовавшей обладания различными навыками в области компьютерных наук в целом и программирования в частности. Теперь, почти четыре десятилетия спустя, этой задачей занимаюсь я. Насколько сложна она сегодня? Приглашаю вместе разобрать процесс создания языка и посмотреть, насколько современные инструменты его упростили.
https://habr.com/ru/companies/ruvds/articles/790868/
original https://blog.whimslab.io/how-much-work-does-it-take-to-build-a-programming-language-784a6868f4e9
👉 @bookflow
«Эта книга – классика. Относитесь к ней бережно».
Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему её вернул.
Вышла эта книжка в 1986 году. В те времена создание компиляторов было крайне сложной задачей, требовавшей обладания различными навыками в области компьютерных наук в целом и программирования в частности. Теперь, почти четыре десятилетия спустя, этой задачей занимаюсь я. Насколько сложна она сегодня? Приглашаю вместе разобрать процесс создания языка и посмотреть, насколько современные инструменты его упростили.
https://habr.com/ru/companies/ruvds/articles/790868/
original https://blog.whimslab.io/how-much-work-does-it-take-to-build-a-programming-language-784a6868f4e9
👉 @bookflow
👍2
Как я поменял профессию: из тканевой инженерии в adult-индустрию
Если ты DevOps, который работает с adult‑проектами, то твой типичный «взрослый контент» будет выглядеть примерно так.
Одна из самых традиционных тем на Хабре — это внезапные карьерные перемещения из различных профессий в IT и обратно. У меня, вот, чудесный коллега — профессиональный мясник с соответствующим образованием. Мониторинг настраивает как боженька и умеет убедительно отстаивать свою точку зрения. Образование позволяет.
Меня тоже можете принимать в свои ряды людей со странной сменой профессии. Как многие помнят по моим старым постам — я изначально врач, который свернул в направлении фундаментальной науки и тканевой инженерии. Все вот эти развлечения со стволовыми клетками, выращиванием органов в биореакторах и прочими нетиповыми экспериментальными задачами. И вот тут меня внезапно позвали на собеседование в крупный телеком… Короче, очнулся я уже будучи DevOps в компании, которая занимается сложными проектами, некоторые из которых про adult‑видео. Ну вот те самые специальные обучающие фильмы для взрослых, которые двигатель прогресса. С петабайтами отданного трафика, набегами миллионов пользователей и прочими радостями.
Работает у нас это примерно так — у бизнеса наступает момент, когда приходит осознание, что все. Приехали. Инфраструктура работает, вроде бы все в порядке, но построена на костылях, которые заботливо укладывали три поколения сотрудников назад. Документации нет, как все это работает — никто не помнит. Если сервер сдохнет, воскресить в случае чего никто не сможет.
И вот где‑то в этот момент обычно появляемся мы с командой WiseOps и начинаем перебирать по винтику все археологические слои кода, архитектуры и бизнес‑логики. У нас уже есть несколько десятков клиентов и три из них про видеоконтент.
Предлагаю перейти под кат, а я попробую рассказать, как выглядит вся эта индустрия глазами врача/био‑инженера/DevOps.
https://habr.com/ru/companies/wiseops/articles/791774/
👉 @bookflow
Если ты DevOps, который работает с adult‑проектами, то твой типичный «взрослый контент» будет выглядеть примерно так.
Одна из самых традиционных тем на Хабре — это внезапные карьерные перемещения из различных профессий в IT и обратно. У меня, вот, чудесный коллега — профессиональный мясник с соответствующим образованием. Мониторинг настраивает как боженька и умеет убедительно отстаивать свою точку зрения. Образование позволяет.
Меня тоже можете принимать в свои ряды людей со странной сменой профессии. Как многие помнят по моим старым постам — я изначально врач, который свернул в направлении фундаментальной науки и тканевой инженерии. Все вот эти развлечения со стволовыми клетками, выращиванием органов в биореакторах и прочими нетиповыми экспериментальными задачами. И вот тут меня внезапно позвали на собеседование в крупный телеком… Короче, очнулся я уже будучи DevOps в компании, которая занимается сложными проектами, некоторые из которых про adult‑видео. Ну вот те самые специальные обучающие фильмы для взрослых, которые двигатель прогресса. С петабайтами отданного трафика, набегами миллионов пользователей и прочими радостями.
Работает у нас это примерно так — у бизнеса наступает момент, когда приходит осознание, что все. Приехали. Инфраструктура работает, вроде бы все в порядке, но построена на костылях, которые заботливо укладывали три поколения сотрудников назад. Документации нет, как все это работает — никто не помнит. Если сервер сдохнет, воскресить в случае чего никто не сможет.
И вот где‑то в этот момент обычно появляемся мы с командой WiseOps и начинаем перебирать по винтику все археологические слои кода, архитектуры и бизнес‑логики. У нас уже есть несколько десятков клиентов и три из них про видеоконтент.
Предлагаю перейти под кат, а я попробую рассказать, как выглядит вся эта индустрия глазами врача/био‑инженера/DevOps.
https://habr.com/ru/companies/wiseops/articles/791774/
👉 @bookflow
👍2
Я мыслю MOV EAX, 1
Чем больше усилий ты прикладываешь, тем лучше это у тебя получается. Программирование не исключение, и чтобы с уверенностью сказать: "Я могу написать это" нужно много работать. Эта статья о том с какого языка начать путь в программировании и о том как понять принципы работы компьютера на низком уровне.
https://habr.com/ru/articles/721420/
👉 @bookflow
Чем больше усилий ты прикладываешь, тем лучше это у тебя получается. Программирование не исключение, и чтобы с уверенностью сказать: "Я могу написать это" нужно много работать. Эта статья о том с какого языка начать путь в программировании и о том как понять принципы работы компьютера на низком уровне.
https://habr.com/ru/articles/721420/
👉 @bookflow
👍4