Ссылки в текстовых блоках GitHub теперь по умолчанию будут подчёркнутыми. Это гарантирует, что ссылки легко отличить от обычного текста. При желании можно вернуться к старой системе отображения. Компания делает это в рамках продвижения доступности на платформе GitHub.
Прочитал тут заметку про красоту замыканий и у меня появились смутные сомнения по поводу того, как появилось эта, в разных смыслах, положительных и отрицательных (я не к тому, чтобы встать на какую-то сторону, я за разумное разнообразие), хитрая техника построения кода.
В большинстве языков является естественным распространение области видимости переменных из внешнего блока во все внутренние блоки кода. Приведу пример, чтобы не было сомнений (псевдо-код намеренно нарушает синтаксис известных мне языков, чтобы не быть отнесенным явно к одному из них):
Function(type par)
{//outer block(see“inner block”father)
Int X = 123;
If(par == someConst)
{//inner block
We can use X here!
}
}
Определение для Лямбда-функции тоже создает внутренний блок кода:
Action Function(type par)
{//outer block (see “inner block” father)
Int X = 123;
If(par == someConst)
goto Label; //we need goto just to escape definition of extra inner block
Return lambda=>
{// inner block
some code that uses X in the block
};
Label:
We can still use X here!
}
Интересно! Это только мне кажется, что передача переменных из окружающего кода в код Лямбда-функции, ВОЗМОЖНО, изначально была ошибкой при разработке компилятора, когда стандартный способ распространения области видимости переменных по недосмотру применили к вновь появившимся инлайн реализациям функций? Но потом кто-то нашел применение такой возможности и, как это часто бывает, «Бага»(bug) превратилась в «Фичю» (feature)?
LofiTray - любая онлайн-трансляция в фоновом режиме в Вашей панели задач!
Для нетерпеливых: инструкция ниже, а так же на гитхабе проекта
Предыстория:
Привет Хабр! На днях я лично столкнулся с проблемой: для комфортной работы люблю включать известный стрим на Lofi girlи работать под фоновую музыку, но каждый раз открывать его в браузере, занимать им лишнюю вкладку и занимать немало ресурсов ради фоновой вкладки.
Так родилась идея для проекта и несколько месяцев не доходили руки. На прошлой неделе меня угораздило приболеть и освободившиеся 3 вечера я посветил LofiTray (tray - так обычной называют значки на панели задач)
Что это такое вообще?
- Это утилита для виндовс. Она позволяет включать/выключать, а также выбирать трансляции с YouTube. Функционал минимальный, покрывающий выполнение конкретной задачи - играть музон на фоне и не более.
А это не вирус?
- Нет, не вирус. Для всеобщего спокойствия, проверил через VirusTotal. Можете проверить установщик/распакованную программу (лежит в папке dist в репозитории), да хоть сам проект с гитхаба.
Как скачать?
- По кнопке в инструкции на ГитХабе. Продублирую эти 2 пункта здесь:
Если у Вас не установлен VLC media player, установите его перед загрузкой LofiTray. С помощью API этого плеера программа воспроизводит трансляцию в фоновом режиме
Скачайте и запустите установщик LofiTray ?скачать?
В ближайших планах починить отображение ошибок в windows 11. А в дальнейших - добавить полноценное gui-меню, так как уже есть запросы от друзей
Поскольку на Хабре нет механизма оповещения об обновлениях статьи, решил написать про это пост.
Если вам посчастливилось одними из первых увидеть мою последнюю статью Глубина кроличьей норы: бинарная граница и ABI C++, то возможно, вы захотите к ней вернуться, когда узнаете что я добавил в неё несколько важных уточнений, которые перечислены в секции UPD (среди минорных исправлений пунктуационных ошибок и т.п.):
15.10.23:
Добавил разьяснение про то, почему при переходе бинарной границы не стоит рассчитывать на copy elision. Ссылка на уточнение тут.
Расскажите своё мнение: на чём актуально писать более-менее крупную софтину под windows?
Работаю в проекте, нужна программа контроля доступа сотрудникам. БД + GUI + работа с устройством (перезаписывалка RFID меток). Проект - студенчесский стартап, так что пишем сами, не используем интеграции с крупными решениями.
Встал вопрос на чём писать. У меня компетенций в равной степени хватает на QT + C++, .NET + C# или Electron + js. Поэтому сложно определиться, важна скорость разработки и количество гайдов. По скорости выигрывает electron, а по гайдам .net.
По особенностям - много различных по содержанию окон, возможность работы с usb устройствами.
Если Вы шарите в современной разработке программ под виндовс, дайте, пожалуйста, своё мнение, с удовольствием пообщаюсь в комментах.
Заранее спасибо!
P.S. Надеюсь не вызвал постом ощущение что я не желаю думать свой бОшкой, просто есть внутренний крик души, подумал, почему бы не посоветоваться с умными хабрятами)
NorrCompetition 2.0.2 – компонент голосований за фото и видео на Joomla 5
Вышла новая версия NorrCompetition версии 2.0.2 – популярного компонента для организации конкурсов и голосований на платформе Joomla. Ключевой особенностью данной версии является совместимость с Joomla 5 и PHP 8.2. Начиная с этой версии, NorrCompetition можно установить на Joomla 5 без плагина обратной совместимости. Разработчики делают все возможное, чтобы предоставлять качественные услуги и постоянно работают над улучшением продуктов.
Кроме этого, версия идет со следующими улучшениями:
Опция для отключения Open Graph разметки, генерируемой компонентом (это может быть полезно, если на вашем сайте есть другой системный плагин, который генерирует Open Graph, и вам нужно избегать дублирования тегов).
Впервые NorrCompetition был выпущен в 2015 году и с тех пор продукт прошел путь до функционального решения с множеством настроек. Вы можете создавать фото, видео и простые конкурсы.
Всех с днём программиста! В этом посте я расскажу о сегодняшнем празднике.
День программиста - это профессиональный праздник, который отмечают в России по указу Медведева с 2009 года. В качестве даты для этого праздника был выбран 256-ой день года, это значит, что дата этого праздника плавающая в високосный год это 13 сентября, как например в это году (2023), а в следующем году - 12 сентября.
Число 256 для даты праздника было выбранное не просто так, вы уже возможно заметили что это 28. Это количество различных значений, которые можно выразить с помощью восьмиразрядного байта. Ну и ещё это самая большая степень двойки, которое помещается в году.
Сегодня 256-й день года, а это значит, что пришла пора поздравлять программистов с профессиональным праздником!
Поздравляем всех программистов Россельхозбанка и его дочерних компаний, а также коллег из других организаций. Желаем поменьше багов, побольше удачных идей, интересных проектов, доброго тимлида и отлаженных процессов!
Сегодняшняя дата выбрана не случайно! Это 256-й день в году. Сакральное число для IT-шников. Желаем всем дальнейшего развития и продвижения до 256-го уровня и выше. Как известно, совершенству нет предела. Поэтому дарим полезный подарок, который поможет прокачать ваши hard- и soft-skills — записи выступлений докладчиков конференции TestDriven Conf, которых ещё не было в открытом доступе.
Компания Microsoft выпустила версию 17.6.4 Visual Studio 2022 с исправлением ошибки утилизации ресурсов процессора при последовательном запуске нескольких тестовых проектов.
Ошибка была связана с постоянным опросом данных через testhost, в новой версии этот баг исправлен. Кроме того, в новой версии устранена проблема зависания IDE при сохранении файла C ++.
Подробнее обо всех исправлениях читайте на сайте разработчика.
Поучаствуйте плиз в опросе как вы проводите кодревью (если вы разработчик). Мне это нужно для презентации к митапу. Потом поделюсь статистикой, инсайтами и презентацией. Спасибо!
Недавно в очередной раз одернул своего джуна, когда он хотел написать такое
if (someVar != null) {
...
} else {
throw new NullpointerException()
}
Да, руками кидать NPE - это дичь. Но мне не нравится сам факт броска исключения посреди разухабистого бизнес процесса. От меня сразу же следует вопрос: это так и должно быть по спеке? Не должно. А значит - разработчик халтурит. Он или не разобрался в бизнес-процессе сам, или не напряг аналитика/лида/архитектора и не выяснил, что система должна делать в исключительной ситуации. throw здесь означает: "ой все, пусть оно как-нибудь само".
Лично мои правила по исключениям в Java/Kotlin:
Перед очередным throw ответь на 2 вопроса: а) кто адресат этого сообщения? б) что адресат должен сделать при получении? Нет ответов - не кидай исключение, а вместо этого лучше разберись в процессе.
Располагай весь кидающий исключения код компактно и предсказуемо. Например, пусть исключения кидают только валидаторы на входе хэндлеров, но не сервисы и не репозитории.
Пиши код как конечный автомат. Абсолютно любая дичь на входе должна быть ожидаема алгоритмом и должна приводить к чему-то на выходе, но не к истерике "ой, все".
Если чувствуешь в себе силы джедая, то изучи функциональный подход к обработке ошибок через алгебраические типы данных
Любое исключение в логах или в Sentry - повод не только исправить баг, но и поработать над собой
Рефакторинг — это изменение с сохранением поведения. Также, пишут что это именно небольшое изменение, а большое — это реинжиниринг. Я бы скорее акцентировал внимание, что это изменение в замкнутой области.
Основное отличие от переписывания — внесённые изменения не требуют менять смежные модули, которые не подвергались рефакторингу.
Примерно как ремонт квартиры — после ремонта окна и двери стоят на том же месте, несущие стены и коммуникации не затронуты, а внутри стало приятнее.
И тут же признаки того, что рефакторинг пошёл не по плану:
Забыли какой‑то ранее работающий функционал.
Полезли ошибки в других местах.
При правильном планировании и последовательном проведении рефакторинга допустить такие ошибки довольно сложно.
План работ определяет область для изменений и её границы, в результате получаем набор точек (методов), которые останутся неизменными. Это границы изменяемого кода.
Если внешние обращения изменяются, иногда бывает полезным новый код писать отдельно от старого, и главная фишка тут в том, что можно по готовности переключать пограничные точки со старого кода на новый. А перед удалением старого кода ещё раз проверить, что весь старый код отключили и ничего не упустили.
Таким образом, в каждый момент времени код сохраняет свою работоспособность и не теряет связанности.
Если вы хотя бы раз собирали набор Lego по приложенной схеме, вы помните основное правило: всё нужно делать строго последовательно и аккуратно. Допущенная ошибка где-то в середине конструкции может привести к тому, что вам придётся разбирать все последующие верхние уровни, чтобы её исправить.
Это же правило действует и при сборке мебели. Бывали ли у вас такие случаи, когда после сборки у вас оставалась какая-нибудь неиспользованная деталь? Вспомните, как сложно вернуться к тому шагу, где её нужно было использовать: придётся последовательно отменять все последующие шаги.
Программисты задумчиво дебажат старый код
Суть метода Lego заключается в том, чтобы всё сразу делать максимально внимательно и правильно: писать код, конструировать систему, сочинять текст, собирать тумбочку. Конечно, это не обезопасит вас от ошибок.
Применение этого метода может потребовать больше времени и усилий. Он не вписывается в проекты, где основная философия разработки — это склепать на коленке кое-как работающий код. Но сколько времени уйдёт на рефакторинг такого кода, например, через полгода?
На практике применение метода Lego означает, что вы не оставляете после себя черновиков, костылей, заплаток и подпорок. Если уж взялись писать процедуру, то на выходе выдаёте красивый, проверенный, полностью работающий код. И никаких «To do» и технического долга. Возможно, потом придётся переписать или дополнить процедуру, но с учётом текущей версии условий она написана идеально.