На об'екте есть столовая, но нас туда не пускают, т.к. мы всего лишь арендаторы. Тем не менее, арендаторы могут сделать заказ. Эти заказы развозят по территории на машине. И нам стучат в окно. Мы открываем, нам выдают из машины еду.
Смотрю я на это и думаю -- это же мак-авто наоборот!
Ну, начнём с того, что наличие таких условий -- это само по себе плохой код, потому что его сложно понять. Тем не менее, иногда условия выполнения участков кода действительно бывают заковыристые. Может быть, есть какое-то системное решение для упрощения сложных условий, но я такого не знаю. Что всё-таки можно сделать?
1. Если в условиях только флаги, то надо рефакторить всё в конечный автомат -- в этом я убедился на практике. А если там кроме флагов ещё есть диапазоны значений, вызовы функций, проверки вариантов опций? Не знаю. Может быть, это всё тоже приводимо к конечному автомату.
2. Но я хотел написать про минорное упрощение. Нужно записывать условия в столбик. Я давно так делаю. Но недавно я обнаружил, что записывать в столбик можно по-разному. Можно написать:
Я всегда использовал первый вариант, но убедился, что он неудобен. Логическая операция находится в конце строки, её надо постоянно искать глазами. А концы у каждой строки находятся в разном месте. Если расположить оператор в начале, то, во-первых, будет понятнее, что происходит, а во-вторых, можно для удобства дублировать оператор и в конце предыдущей строке, но уже в комментарии, типа //&& .
Но насчёт дублирования я пока не уверен, т.к. никогда так не делал.
3. Есть ещё один метод, назначить каждому условию в выражении отдельную логическую переменную.
bool b1=(flag1==True); bool b2=(flag2==False); bool b3=(function_call(a,b,c,d)>0);//скобки необязательны, но пусть будут на всякий случай if(b1&&b2&&b3)
Какие есть особенности у этого метода? Во-первых, если удастся дать условиям краткие понятные имена, а не b1, b2, b3, то это действительно упростит читаемость. Если имена будут условными, то упрощение тоже будет условным. Во-вторых, упрощается отладка, поскольку вы получаете непосредственный доступ к частям логического выражения, а обычно такого доступа нет, т.к. условие выполняется в отладчике как одна строка.
Остановился на заправке в зоне парковки. ТУТ ЖЕ ко мне подошёл мужчина нерусской национальности. Я думал, будет денег просить. Потому что такое бывало уже не раз. Но всё оказалось куда интереснее.
Он предложил купить у него смартфон. Какой -- я не посмотрел, но в коробочке, а не просто ворованный.
Я так удивился, что закричал: "ЧТОООО?", а потом поднял стекло и уехал.
Периодически натыкаюсь в ютьюбе на видосы по строительной тематике. Там строители нарушают ТБ, иногда с последствиями. За всем этим наблюдает мужик в каске и очках, при этом корчит гримасы ужасания и офигения. Я хотел выяснить, кто это. Но мои поисковые способности меня подвели. Спустя некоторое время я узнал ответ случайно, прочитав комментарии к какому-то другому видео.
Его зовут Adam Rose.
Тем не менее, жанр строительных видео появился не в ютьюбе, а гораздо раньше. И об этом я узнал (вспомнил) тоже случайно. В "Ну, Погоди" есть сцена на стройке. И сделана она в лучших традициях. Можете сами убедиться:
Когда реакции только появились, я думал, что это бесполезная фиговина. Но потом оказалось, что это довольно удобно. В больших чатах это, например, уменьшает число сообщений. При личной переписке можно тоже ответить в два клика, а не писать текст.
Тем не менее, пользоваться реакциями не всегда легко. Бесплатных реакций сейчас чуть больше 70 штук. Они расположены в сетке. Но их порядок каждый раз разный! Я подозреваю, что реакции сортируются по числу употреблений, хотя правила какие-то странные.
Ну и вот, ты лезешь в список реакций чтобы найти нужную и... не находишь. Просматриваешь список ещё раз, снова нет. Но она должна быть.
На третий раз всё-таки видишь, где она.
Ну и вот. Располагать частые реакции/смайлики в начале -- это полезно. Но тогда уж оставьте их дубликат в фиксированной сетке! Тогда все остальные реакции не сползут, и можно будет их легко находить.
Анонимное комментирование временно отключено. Тут две причины: 1. Сейчас идёт очередная спам-атака на старые посты. 2. С середины ноября в дайари сломались "последние комментарии", из-за чего мой удалятор комментариев не видит не только спам, но и нормальные комментарии.
В результате этого я могу удалять спам только вручную и только в момент его обнаружения. Это неудобно.
Вот какая система безопасности на одном предприятии.
Удалённые сотрудники получают доступ к корпоративным ресурсам через впн. При этом впн общесистемный, поэтому через этот впн идёт доступ не только к корпоративным ресурсам, а вообще ко всем.
На стороне предприятия работает интеллектуальная система безопасности, которая проверяет, кто и куда обращается. У неё свои списки запрещённых адресов.
Если пользователь пытается обратиться к запрещённому адресу, то запрос, разумеется, блокируется. Но это не всё. При таком обращении сразу блокируется вся учётная запись. Далее необходимо об'яснить ИБ, почему ты обращался к этому адресу.
Загвоздка в том, что на компьютере, которым активно пользуются, за годы накапливается большое количество программ, которые могут обращаться куда угодно. И это приводит к неожиданным срабатываниям системы защиты.
При такой политике работы для доступа необходимо держать дома отдельный чистый компьютер, на котором будет установлено только самое необходимое ПО, о котором известно, что оно никуда не обращается. И пользоваться интернетом с этого компа тоже не следует. Потому что неизвестно, какие адреса система сочтёт запрещёнными.
В новостях про упавшие самолёты почему-то часто встречается приписка о том, что пилоты пытались отвести самолёт от городской застройки и, таким образом, спасли жизни людей на земле. Я не пилот, но такой тезис вызывает у меня сомнения.
Если самолёт предусматривает систему катапультирования, парашюты и т.п., то можно себе представить, что у пилотов был выбор -- пилотировать до конца или бросить самолёт. Тогда да, можно оценивать их поведение с такой точки зрения.
Но если самолёт пассажирский или малолитражный?
Если речь идёт про "отведение самолёта от городской застройки", то скорее всего у нас ситуация по типу "отказ всех двигателей, самолёт управляем, планирует". Эта ситуация, безусловно, нештатная. Но типовая. Несмотря на то, что шанс погибнуть в такой ситуации высок, есть определённый алгоритм действий -- направленный на выживание. Надо искать место для посадки! И, конечно же, городская застройка НЕ входит в список мест для посадки.
Поэтому я не знаю, зачем дописывать, что пилоты не хотели садиться в застройку. Конечно не хотели. Сесть на ровное и пустое место -- это не только в интересах жителей, но и в интересах самих пилотов.
Профессиональное ПО всегда такое -- ты оказываешься перед пультом управления космическим кораблём. Чё делать -- непонятно. Но потом проходит час, пять часов... "ага, вот что это было". "Ну, в принципе, довольно логично устроено".
Я глубоко не копался и делал, в целом, простейшие вещи. Тем не менее, мне показалось, что блендер сложнее и неудобнее, чем Компас. Но у них несколько разное предназначение.
Что не понравилось: 1. Низко контрастный интерфейс. Чёрный текст на тёмно-сером фоне виден очень плохо. Особенно со включённым сглаживанием. 2. Гугление проблем показывает, что одна и та же проблема может иметь разнообразный генезис. И отвечающие начинают гадать, почему рендер показывает серый фон. Это означает, что программа сама не распознаёт проблему и не подсказывает пути решения. У меня, например, рендер ничего не показывал, потому что был неправильно настроен клип камеры. Но. ОКАЗЫВАЕТСЯ, что у камеры для рендера есть один клип, а у "камеры, которая вращается мышкой" есть другой клип совсем в другом месте. И я настраивал не тот клип. 3. Примитивы забывают о том, что они примитивы, после первичного создания. Поэтому если понял, что у тора неправильное соотношение большого и малого радиусов или неправильное разбитие на полигоны, то нельзя это просто поменять. Надо либо использовать трансформации "на общих основаниях", либо пересоздавать об'ект.
К сожалению, сделать в Компасе абсолютно всё -- нельзя. Будем прорываться.
Я вожу машину не первый год, и множество раз оказывался в ситуациях, близких к аварийным. Если одна и та же ситуация происходит несколько раз, значит я недостаточно осторожен. Надо пересматривать систему.
И вот пример.
Машина едет передо мной, начинает мигать поворотником. Я вижу, где она собирается повернуть, и прогнозирую её дальнейшие действия. Что она плавно затормозит, потом сделает поворот на низкой скорости. Но уже не первый раз прогноз не сбывается. Вместо этого происходит следующее.
Машина тормозит, начинает поворот, но не заканчивает его. Машина совершает полную остановку, а её зад всё ещё находится в моей полосе. То есть, передо мной неожиданно возникает стационарное препятствие.
Причины этому могут быть разные. Однажды на Профсоюзной машина заехала в зону для разворота (там таких много), но предыдущая машина была грузовиком, поэтому две машины в карман просто не влезли. В другой раз, на днях, я ехал по рыхлому снегу. Машина передо мной, как я потом увидел на регистраторе, не смогла вовремя затормозить перед поворотом и в'ехала в бордюр. Не мог вовремя затормозить и я, чтобы остановиться. Вместо этого я вырулил и об'ехал её слева. Это был опасный манёвр, т.к. во второй полосе могла быть другая машина. Я, конечно, проверил, но если бы ДТП произошло, я бы 100% был признан виновником.
По нашей судебной практике обязанность соблюдать дистанцию лежит на заднем водителе, а передний может тормозить так, как ему хочется. Это означает, что дистанция, которую я соблюдаю, на самом деле недостаточна для безопасной езды. Лааадно уж, все так едут, да ещё поближе, чем я. Но тут дело в том, что резкое торможение и полная остановка в "обычном" потоке -- ситуация редкая. А вот полная остановка перед поворотом мне встречается регулярно. Ну и если я вижу, что машина собирается делать поворот, то надо закладываться не на "оптимальную" траекторию езды, а на худшую, т.е. начинать заранее тормозить в расчёте на полную остановку.
Сестра: Я же налоги заплатила! Я: Ого! Первый раз заплатила из собственных средств, с зарплаты! Сестра: Нет. В прошлом году тоже сама платила. Я же в библиотеке работала. Я: Блин. Я про это забыл. Сестра: Я тоже иногда хочу об этом забыть...
Вместо микроволновки, у которой таймер крутится не в ту сторону, купили новую. У неё только кнопки. И я припух. Пока инструкцию не прочитал, находился в недоумении. Чувствую себя лохом, что не понял, как ей пользоваться. Хотя чья это проблема? Моя? Или микроволновки?
В общем, как выбирать мощность, я нашёл. Но если после этого нажать старт, ничего не происходит. Если нажать "таймер", то мощность сбрасывается. Если сразу нажать старт, то разогрев начинается, но на 100% мощности.
ОКАЗАЛОСЬ. 1. Кнопка "таймер" запускает таймер, который просто пикает после того, как время вышло. Он ничего не запускает и не останавливает. 2. Процесс запуска на половинной мощности выглядит так: а) выбор мощности кнопкой "мощность" б) нажать "старт" в) выбрать время нажатием кнопок ВВЕРХ и ВНИЗ г) нажать "старт" ещё раз
Потому что второе назначение кнопки "старт" -- это "подтвердить".
С кнопочными микроволновками я не работал, только с ручечными. Скажите, это стандартный алгоритм работы для кнопочных?
А почему ручки удобнее -- потому что можно выставить время и мощность одним движением, а не тыкать много раз.
У коллеги с работы его дети забирали наушники, чтобы попользоваться. Чтобы это прекратить, он перепаял раз'ём на 6,3 мм. Потому что в его технике такие гнёзда имелись...
Оказывается, с 2021 года в магазинах не обязательно наличие "книги отзывов и предложений". Тем не менее, когда коллега такую книгу попросил в пункте Озона, её выдали. Но книга была не проштампована и не пронумерована...
Ситуация была в том, что он делал возврат повреждённого товара, ему сотрудник всё пропикал, а когда он уже дома открыл профиль Озона, оказалось, что возвращал он 5 единиц, а отображается, что он вернул только 4...
Недостаток Озона тут заключается в том, что покупатель не только не получает документов о полученных/возвращённых товарах, но и даже не видит, что там сотрудник переключает на экране. Если бы список дублировался со стороны покупателя, несоответствие можно было бы обнаружить сразу.
Если при добавлении функционала в программу приходится вносить массовые правки, то у программы плохая архитектура. И тем не менее, массовые правки вносить иногда приходится.
Чтобы уменьшить время последующей отладки я советую вот что: после внесения всех правок и первичной проверки на компиляцию надо не сразу начинать отлаживать, а надо все исправленные места ещё раз просмотреть долгим вдумчивым взглядом.
Потому что при массовых правках легко пропустить что-нибудь по невнимательности. А поиск этих пропусков будет гораздо быстрее, если сделать его сразу.
Одна из проблем, которая может возникнуть -- это поиск всех исправленных мест. Тут есть три варианта: 1. Все места для правок могут быть уже помечены ещё до начала (например, вы исправляете поведение программы при определённом значении какой-либо опции, и сравнение с этим значением есть во всех исправленных местах). 2. Можно вручную помечать все места, куда вносятся правки, но делать это надо было заранее 3. Система контроля версий.
Бусты каналу могут давать только премиум-пользователи. У них есть обычно 4 буста, которые они могут дать одному или нескольким каналам. Если у канала достаточное число бустов, канал получает "левел-ап", что даёт некоторые условно-бесполезные функции. Одна из них -- разрешение кастумных реакций под постами. При этом чем больше уровень, тем больше реакций разрешено.
Число бустов, необходимых для левел-апа, вычисляет динамически на основании текущего числа подписчиков. И пересчитывается регулярно. Это означает, что уровень канала не является постоянной величиной не только в сторону роста, но и в сторону сокращения.
Если вдруг от канала отпишется много человек, но все не-премиум, то канал может получить левел-ап! И, что важнее, наоборот. Если канал набирает аудиторию, ему требуется всё больше бустов для поддержания существующего уровня. Но новая, даже премиум-аудитория, не будет отдавать сразу бусты. По-тому что -- та дам! -- их бусты уже потрачены на какие-то другие каналы.
И начинается -- "а давайте добавим мне бустов, чтобы вернуть такую-то кастумную реакцию". Ну, народ добавляет. И тут есть два момента. 1. То, что народ добавил, было раньше отдано другим каналам, а теперь отобрано. В длинной перспективе это означает, что число каналов с уровнем ограничено общим количеством премиум-акканунтов. Дополнительные каналы либо будут перетягивать бусты с тех, которые менее интересны подписчикам, либо останутся без уровня. 2. Админы вынуждены делать периодическую попрошайку, потому что без неё пользователи не догадаются, что какая-то там реакция пропала.
Интересно, насколько был продуман разработчиками баланс этой фичи?
Давно не запускал (ресурсоёмких) комп. игр. Запустил. И чувствую, что-то не то. Тормозит невероятно. Мышка перескакивает. Может, 5 фпс?
Это что такое? Да, компьютеру больше 5 лет. Но и игра скорее инди, а не ААА. И тут у меня появляется невероятная догадка.
Дело было в нейронках.
Когда я ставил эксперименты с ComfyUI, я обнаружил, что во время генерации у меня лагает изображение на мониторе. Более удивительным оказалось то, что при доступе через удалёнку никаких лагов не было. Таким образом, я понял, что видеокарта не справляется с двумя задачами сразу. Я переключил видеовыход на встроенное видеоядро процессора, а видеокарту заставил заниматься исключительно нейронкой. И лаги на мониторе пропали.
(дополнение: лаги были только в ComfyUI; при работе с генерацией текста через llama.cpp всё было отлично, хотя видеопамяти обе системы жрут одинаково, только ComfyUI постоянно выгружает и загружает модели, а llama.cpp держит всё вместе)
Ну и вот. Я оставил монитор на встроенном видеоядре, т.к. для текущих задач этого хватало. Было это пару месяцев назад. А теперь, когда я запустил игру, выяснилось, что для игры встроенного ядра уже не хватает. Поскольку на текущий момент я не экспериментировал с нейронками, я переключил видеовыход обратно на видеокарту. И получил многократный прирост производительности. То есть, тормозить перестало.
Это непонятный момент. Я полагал, что встроенное видеоядро (i7-7700) имеет производительность уровня GeForce 1030. Но по ощущениям прирост получился ~десятикратный. При этом 1070 и 1030 имеют разницу всего в 5 раз согласно каким-то там бенчмаркам из интернета.
То есть, либо игра использует какие-то особые функции, которые встроенное ядро не поддерживает вовсе, либо оно примерно в 2 раза слабее, чем я полагал.
Сестра говорит: прикрути уголки к стенке, а то на столе стоят коробки с шурупами и мешают. Я: Я могу убрать коробки с шурупами прямо сейчас. Сестра: Не, не надо. Если ты их уберёшь, ты уголки к стенке никогда не прикрутишь.
***
Я: Посмотри ту серию аниме, а то мне флешка нужна. Сестра: Я могу её скопировать, и флешку вернуть. Я: Не, не надо. Если ты её скопируешь, ты её никогда не посмотришь.
***
Родители в натянутых отношениях. Когда сестра переехала ко мне, папа захотел переехать в её комнату.
Мама: Не, ты сначала уберись в нашей комнате, а только потом переезжай. Потому что если ты переедешь, не убравшись, ты эту помойку больше никогда не уберёшь, а мне в ней жить.