All streams
Search
Write a publication
Pull to refresh
632
0
Тагир Валеев @tagir_valeev

Программист

Send message
Разумеется, можно. Только для этого нужно время и деньги.
Хм. И впрямь проглядел. Как-то оно неочевидно. Спасибо.
Всегда задавался вопросом, почему для загрузки XLS и XLSX там абсолютно разное API. Неужели нельзя было унифицировать интерфейсы? Ну или хотя бы сделать унифицированную обёртку над существующими интерфейсами.
А какой конкретно алгоритм скрывается под «векторным перерендерингом»? Как я понимаю, если я вывожу текст на экран мобилы, то на телеке он будет красивеньким и гладеньким? А если я кино включил?
> Зелёными стрелками показаны уже подписанные соглашения, а красными — судебные разбирательства.

Не пожалели вы дейтеранопов
Не только для дебага полезно. У нас был пример, что разработчик вычитал форму из XML в HashMap в виде HashMap<String, UIControl>, где ключ — это идентификатор контрола потом много где использовал её для быстрого получения контрола по идентификатору, но не озаботился тем, что порядок контролов не сохранился. Замена HashMap на LinkedHashMap в одном месте позволила исправить проблему, не трогая кучу готового кода.
Ссылку на Дзюри не ту поставил.
Берут, хотя и нечасто. Навскидку — в Alien-9 главную героиню озвучивала Ихата Дзюри в 12-13 лет (примерно на год старше героини). Рыбку Понё и Нару Юиэ упомянули. В «Усаги Дроп» главную героиню озвучивала Мацуура Аю (ей сейчас 10).

Вообще для озвучки мультиков используют детей вполне успешно и в других странах. Вспомнить Сандро Ианотту, который в пять лет озвучил немаленькую роль Томми в полнометражке «Звезда Лауры». Да и у нас — Алина Кукушкина с успехом озвучивает Машу в «Маше и Медведе». А Жихарку помните? Думаете, взрослые бы справились лучше? :-)
Мой любимый Far при удалении нескольких непустых каталогов выдаёт аж три предупреждения.
Первичный запрос на удаление:

Подтверждение удаления нескольких элементов:

Подтверждение удаления непустых папок:

(нужно нажать Tab+Enter).
Любые из этих подтверждений можно отключить. Однажды я случайно чуть не грохнул недельную работу, нажимая по инерции Shift+Delete, Enter, Enter, Tab, но перед последним Enter'ом всё же опомнился, что я делаю что-то не то. Поэтому я никогда не отключаю эти подтверждения. Чем больше вопросов, тем больше времени подумать.
Доводы за кнопку «отмена» однобоки. Да, безусловно, это важный и нужный элемент интерфейса и про него многие говорят. Но этот метод не универсален. Если действие предполагает уничтожение данных, оно ещё и подразумевает увеличение свободного места для новых данных. В этом случае добавление функции «отмена» по сути дела испортит действие: мы всё удалили, а место не появилось, потому что для работы этой функции данные нужно продолжать хранить. Тогда потребуется сделать специальную кнопку «очистить буфер отмены» (что-то вроде «очистить корзину»), после нажатия которой ресурсы действительно освободятся, но с другой стороны восстановить уже ничего будет нельзя. И мы снова возвращаемся к изначальной проблеме. Человек, желающий освободить ресурсы, сперва выполнит действие на уничтожение данных, затем выполнит действие на очистку буфера отмены. По большому счёту это то же подтверждение. Для функции «очистить корзину», заметьте, Ctrl+Z не работает.
Пост вроде в блоге C++, в ветке комментариев C не упоминался, так что вопрос скорее «а при чём тут C?» :-) Сомневаюсь, что даже продвинутый code assist подскажет, что первым параметром cond должен идти булев аргумент, потому что явно в макросе это нигде не сказано (а в inline-функции будет сказано). Пусть знатоки плюсовых IDE подскажут. Контроль типов на этапе написания кода существенно ускоряет работу и освобождает голову для более важных вещей. У меня, к примеру, благодаря code assist, ошибки компиляции практически никогда не встречаются, экономя мне время на лишние запуски компиляции.
Просто спросил, холивар не подразумевался :-)
Вот интересно, как различные системы code-assist с макросами дружат? Даже конкретно на этом примере. Определят ли они возвращаемый тип этого макроса, чтобы на этапе написания кода отследить несоответствие типов (скажем, результат cond() подаётся параметром в функцию)? Проверят ли, что тип второго и третьего аргумента должен совпадать? Выдадут ли всплывающую подсказку по типам аргументов cond()? Всё-таки в плане контроля типов шаблонированная inline-функция кажется надёжнее.
Кроме того, PVS-Studio на этот пример также промолчит :-)
Спасибо за детальное объяснение правила. Интересно, у вас все комментарии на русском? :-)
Верно. Но, согласитесь, пример довольно искусственный :-) Если A равно B, то обе ветки тернарного оператора тоже равны, поэтому выражение сводится к
bool Z = X && !B;
Можно, наверно, выдумать что-то более приближенное к реальности, но в своей практике я не припомню примеров, чтобы тернарный оператор требовался в чисто булевом выражении.
Неиспользуемая переменная тоже вполне законна, но компилятор выдаёт варнинг :-)
Любопытно, что в Java из-за более строгой системы типов такой проблемы не возникает:

Интересно, распознавание таких вещей в плюсах на уровне компилятора (выдача варнинга) ничему не противоречит? GCC -Wall -Wextra молчит на такую строчку.
Я считаю, рефакторинг просто должен быть сопутствующим элементом работы, а не превращаться в самоцель. К примеру, я читаю старый код, который мне надо понять или изменить для решения насущной задачи. В этом коде я замечаю: использование устаревших API, непараметризованные контейнеры (код написан в до-генериковую эпоху), ветки кода, переставшие быть актуальными, реализованный вручную бинарный поиск, хотя есть прекрасные библиотечные функции, старые соглашения по именованию переменных. Я беру и переделываю в ходе чтения кода. У меня нет цели выкосить весь устаревший API из проекта или вставить генерики сразу везде. Я устраиваю маленькую уборку в отдельном классе и получаю чистенький класс, с которым приятно работать. Это занимает совсем немного времени. Возможно, в этом классе уже прибирались до меня, и он не совсем в страшном состоянии. Кроме того, меняя код, я пойму его лучше, чем если буду просто читать. Да, можно что-нибудь сломать, если не всё покрыто тестами. Я этого не боюсь. Если я что-то меняю, изменённый код будет работать не хуже старого, либо я сам быстро замечу проблему. Если случается, что я ошибся, это нестрашно: волков бояться — в лес не ходить.

В результате мы не имеем 100% хорошего кода, но держим неплохую планку. С одной стороны каждый день код чуть-чуть устаревает и кто-нибудь пишет немного изначально плохого кода. С другой стороны, кто-нибудь улучшает какой-то маленький кусочек. Интегрально процентов 70 кода в проекте в любой момент мне нравится.
Слыхал мнение, что lol — это бэкроним. Это вполне корректное слово в нидерландском с близким смыслом. Вполне вероятно, нидерландские интернетчики его стали употреблять, другие подхватили, а расшифровку придумали уже позднее.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity