Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 143

А что не так с


// Autogenerated, do not edit. All changes will be undone.

?

То что этот код не автосгенерирован, а написан человеком.
Почему вы так решили?
Встречал эту штуку в приколах, где написано что-то вроде: «Чтобы ваш код никто не трогал, добавьте в нее эту строчку».
На StackOverflow там ещё был комментарий на этот комментарий: «This seems to stop morons from messing my code...»
НЛО прилетело и опубликовало эту надпись здесь
Мы не на Пикабу, чтобы комментарии переводить. Общепринято, что язык комментариев — английский, не зависимо от того, для кого написан софт.
НЛО прилетело и опубликовало эту надпись здесь
Крупные конторы и так в курсе.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Справедливости ради, переведены были комментарии в коде, предназначенном для использования внешними людьми. Про внутренний код никто ничего не говорил.
Момент, где Яндекс кается за использование русских комментариев так же не нашел. Цитату приведете?
Цитирую: «каемся».
Нет вхождения такого слова на странице по вышеприведенной вами ссылке.
Я ссылок не приводил. Её надо через Яндекс искать самому.
А, это была попытка троллинга…
Интересное определения шутки. Каждому — своё.
Лови 1С-ника!

Что с 1С взять, если у них даже код на русском?

Тех, кто пишет комменты не на английском, надо бить до посинения.
Доводилось мне ковыряться в коде, который писали фрицы и итальянцы. В первом случае хватало магии, во втором — адские спагетти. И комменты на немецком и итальянском, соответственно. Разработка была для заказчиков, которые не розуміють ни по-немецки, не по-итальянски.
Я очень долго ругался и уйму времени потратил только на перевод комментов. В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «groß».

Сам пишу на английском.
НЛО прилетело и опубликовало эту надпись здесь
Это уровень nightmare :)
Встретил код с комментариями на корейском с побитой кодировкой!
Благо что строк кода мало и вообще это AI гомункула для игры Ragnarok Online — нет необходимости сидеть и разбираться, если не идет.

а я сейчас работаю с наукоёмким и низкоуровневым кодом (т.к. сложный и его нереально много) на японском — то ещё счастье, особенно мило что вместо взаимствований и кальки английских терминов всё термины написали исключительно на японском. т.е. не пиксель (pixeru) а 画素 и тд
ладно этот быдлокод разложен по полочкам, есть структура и есть документация и оформлен по самым суровым стандартам.

Вы бы определились — или «быдлокод», или «разложен и оформлен»…
Если каменты не на английском, то предполагается, что продукт дальше страны не пойдет. Так или иначе, на родном языке воспринимаются намного проще (при условии «толковости» написания).

объясняю на примере:
всё оформлено в строгом и едином кодестиле, не только для собственно программирования а ещё и для удобного документирования (типа доксигена и тд), чтоб гит давал минимум строк изменений и тд.
всё разложено по отдельным функциям, они в классы и методы, потом модули и тд.
но


  1. вызывается в итоге одна чудо функция в которую передаётся ВСЁ, десять типов изображений, все опции и все указатели на другие функции которые аккуратно и тчательно обёрнуты, но NULL или указатель не на ту функцию с другими параметрам передать можно хотя с++.
  2. функция нахождения медианы из 5 чисел — сотни строк аккуратнейшего кода (хотя во всех DSP и сигнальных либах это 30-40 строк и десять compare&swap)
  3. на каждый вид и размерность матрицы свои функции которые принимают (void *) БРРРР!!! холодный пот!!! ну и прочие миксы си и си++.
  4. зачем то умножения расписаны в деления и сдвиги, хотя целевая плис аппаратных умножителей содержит в 10 раз больше чем требуется даже этому быдлокоду.
С++ и целевая ПЛИС — балуетесь HLS? Как впечатления? Нет проблем с С++'овскими фишками?
О, тоже бывало. Но всё же лучше комментарии на корейском, чем вообще никаких, и код, кхм, нетривиальный.
А так больше документация на корейском попадается, либо переписка.
Буквально пару недель назад разбирал исходники, комментарии к которым были написаны на китайском в древней кодировке GB18030. Сами китайцы закатили глаза, пожелали удачи и умыли руки.
А я работал с японскими — веселые эмоджи :)
В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «groß».
А нужно просто пользовать вменяемые редакторы.

Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках. После моих правок он стан написан в четырёх кодировках… и я не о комментариях. Комментарии там, как раз, были вполне себе на английском.
А нужно просто пользовать вменяемые редакторы.
Спасибо, Кэп! Step 5, Step 7.

Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках.
Только один вопрос: зачем?!
Только один вопрос: зачем?!
Это был спеллчекер. На входе был, понятно, UTF-8 (XXI век, всё-такое), но дальше — оно перегонялось в однобайтовую кодировку (ядро было универсальным, но поддерживало только однобайтовые кодировки). windows-1252 для европейских языков, понятно, windows-1250 для центральной европы и, кажется, windows-1253 для греческого (вот тут могу соврать — давно дело было).

Ну а вишенкой на торте было наличие некоторого количество таблиц в коде (валидные символы для разных языков), символы, «нерелевантные» для текущего языка (как и символы не поддерживаемые в текущей кодировке) перегонялись в "?" плюс таблички с классификаторами (гласные/согласные/etc).

Ну и как понятно табличка для немецкого была в windows-1252, а для польского — в windows-1250… для русского, понятно, ещё windows-1251 добавился…

Всё в одном файле, да. Достаточно было этот файл в каком-нибудь новомодном Eclipse открыть и один пробел поставить — и всё, тесты начинали падать (да, несмотря на весь этот ужас с кодировками в остальном-то там всё неплохо было, unit-тесты, CI, вот это вот всё)…

Похоже, движок у этого спеллчекера — адское легаси..

Зато в TIA Portal'е немцы исправились, даже теги на русском создавать можно)

Но не нужно. Тэги на английском получаются короче и понятней, чем на русском)

Не спорю) Но вопрос стоял в перевариваемости продуктом разных языков.

TIA Portal во многих отношениях был шагом назад, только сейчас догоняют былое. Комменты на русском мы ещё в Step 7 писали (в России и для российских заказчиков).
даже теги на русском создавать можно)
А вот это ни за что и никогда.
С языками ещё одна подстава, актуальная для меня: из списка языков, которые можно добавить в проект, исчез иврит. Не сильно критично, выбираем какой-нибудь другой. Но неприятно. Из плюсов — больше не надо писать на иврите для панелей задом наперёд. Старые, под Flexible на WinCE, не поддерживали RTL.
одновременно написан в трёх кодировках
Но ведь английские буквы и всякие плюсы-минусы во всех кодировках в одном и том же месте? Или в коде были неанглийские?

Скажите это BOCU1 ,)

В коде были не английские. То есть было что-то в духе:
  switch (CurrentSpellcheckerLanguage) {
    case LanguageGerman:
      if (std::find_if(it1, it2, 'ß') {
       ...
      }
      break;
    case LanguagePolish:
      if (std::find_if(it1, it2, 'ł') {
       ...
      }
      break;
    case LanguageRussian:
      if (std::find_if(it1, it2, 'ш') {
       ...
      }
      break;
  }
И, соответственно вот эти вот 'ß', 'ł' и 'ш' — были в разных кодировках. Прямо внутри одной функции…

Насколько трудно кусок между case и break вынести в отдельный файл?
Или проще есть кактус?

Насколько трудно кусок между case и break вынести в отдельный файл?
В конце-концов это и сделали… когда ресурсы нашли.

До сих пор не знаю как к этому относится: код в результате стал сложнее и медленнее, но зато его можно редактировать Eclipse'ом не опасаясь всё уничтожить неловким движением. Ну и количество WTF'ов уменьшилось…
По-моему, еще проще было бы сделать что-то вроде
#define CODE_GERMAN_ESZETT = 223
#define CODE_RUSSIAN_SHA = 248
и сравнивать по коду символа
Ну как паллиатив — возможно. Но последний раз, когда я этот код видел правила вынесли во внешний файл специального формата, «типа понятного лингвистам»… правда правил новых там после этого за пару лет не добавилось… Но фиг его знает, может просто с лингвистами туго было…
Т.е. сама программа нормально работала с кодировками, только сам файл с данными был восьмибитным?

PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)
Т.е. сама программа нормально работала с кодировками
Как я уже писал: ядро у неё нормально работало с любой однобайтовой кодировкой — а языков там было… много.

PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)
А чем тут windows-1255 плох? Это бы как-то повлияло только на тех, кто поддержку иврита бы добавлял, остальные бы видели в этих местах разные свои буквы…
Тем, что к некоторой свистопляске с кодировкой добавляется свистопляска с RTL. Хотя, возможно, на уровне текстового файла это не влияет.
Я вижу немало минусов. Подозреваю, что минусующие никогда не работали с интернациональными проектами (когда среди заказчиков и исполнителей присутствуют носители более, чем одного языка).
Вот каталанские комментарии это было да, ладно какой-то популярный язык вроде итальянского, немецкого, а тут вообще редкий и сложный язык.
Мне попадалось немало комментариев на иврите :)

С немцами у меня была похожая история. Только там еще в комплекте шел модуль препроцессора для Java (который вызывался внутри ant-таски и переводил ключевые слова с немецкого на английский). Более того: имена классов, методов и переменных были тоже на немецком. УчитываяОсобенностиОнногоЯзыка оно действительно выглядело как нечто родное.

НЛО прилетело и опубликовало эту надпись здесь
Я думаю скорее имелось в виду, что «это прерывание никогда не должно случаться, если уж оно произойдёт, то только Бог сможет нам помочь».

Так что комментарий правильный…
НЛО прилетело и опубликовало эту надпись здесь
“if it does gods help us.” => «если случится, то да помогут нам боги»
Всё верно: это юссив.

Так нормально?


длинный длинный тому_назад; /* в далекой-далекой галактике */
#define давным long long
давным давно; /* в далекой-далекой галактике */

Undefined symbol «давно» :)
Эт-то что за наезды? Это — честный C++. Можете проверить.
Справедливости ради, один из комментариев по-русски звучит как влитой:
// Catching exceptions is for communists

// Отлавливать исключения - занятие для коммунистов
float boat;   // must be a float, otherwise it sinks.


// I can’t divide with zero, so I have to divide with something very similar 
result = number / 0.00000000000001


// no comments for you
// it was hard to write
// so it should be hard to read
НЛО прилетело и опубликовало эту надпись здесь
Получить почти бесконечность?..
такая проблема возникает в играх с геометрическими вычислениями, когда используется формула с делением, куда в делитель может попасть 0, при этом формула должна выдавать какое-то значение (а не вываливаться с ошибкой)

решение — делать перед вычислением
if(divider==0) return SomeSpecialResult

А разве стандарт float не позволяет делить на ноль? Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.

А разве стандарт float не позволяет делить на ноль?
Лучше бы не позволял.

Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.
+inf и -inf — ещё себя прилично ведут. Но nan
nan < 0false
nan > 0false
nan == 0false
nan != 0false
Разработчики, которые это извращение изобрели на stack overflow рассказывают сказки, но… звучит это примерно как «мины замедленного действия — это жутко круто, кишки намотанные на люстру — это просто восхитительно».

Дело в том, что если вы задумаетесь, то поймёте, что неявное предположение о том, что == — это отношение эквивалентности (в частности A == A для любого A), а <= — это отношение порядка (в частности если A < B — false, то A >= B — true) заложено в такое количество алгоритмов, что возврат из функции nan'а — это почти акт саботажа…

Одна из причин почему в rust разделили типажи Ord/PartialOrd и Eq/PartialEq это как раз ieee754

Справделивости ради в машинных инструкциях операции сравнения с NaN возвращают не False, а отдельное сотояние, которое можно понимать например как NaB (Not a Boolean. Термин не общепризнанный, но результату операции соответствуют 2 флага вместо одного, что дает нам третье состояние). Проблема в том, что это самое Not a Boolean никак не влазит в boolean, у которого только 2 состояния. Поэтому разработчики языка забили болт, и сказали, что это Not a Boolean кастится к False всегда, и не волнует.
Вы же в свою очередь можете разработать свой язык и компилтор, для которого результат сравнений больше/меньше/равно будет возвращать 3 состояния, и тогда проблема с nan == nan исчезнет.
Вот только не надо мне сказок про машинные инструкции сочинять, я с ними, как бы, каждый день сталкиваюсь. cmpss возвращает либо 0, либо -1, других вариантов нет. Или вы про ucomiss? Да — там для NaN отдельный флаг есть, но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false — при этом инструкция перехода может либо смотреть на флаги ZF/SF, либо на PF.

Так что мне придётся создавать не свой собственный компилятор, а свой собственный процессор — что гораздо сложнее и безумнее. Гораздо более разумное решение: при обнаружении nan прекращать вычисления вообще. Проще, надёжнее, быстрее.
Да, я в первую очередь про ucomiss, ибо именно его используют компиляторы при сравнении флоатов.
но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false
Дело в том, что его нужно в ряде случаев обязательно проверять. Иначе может оказаться, что любое число будет меньше и равно NaN. И компиляторы частенько проверяют оба флага, чтобы сгенерировать false.
Либо делитель вычисляется и может оказаться нулём, либо есть цель вызвать исключение.
Видел в одном из проектов, над которым довелось поработать, комментарий вроде «сейчас три часа ночи, я очень устал, а завтра сдавать проект» и дальше вёрстка на таблицах. Впрочем, и без того там хватало приколов, но это уже другая история.
Оказывается, у всех это было. И будет.
// Нужно обязательно дунуть, потому что если не дунуть, 
// то никакого чуда не произойдет...
// © Амаяк Акопян
// Please do not refactor, you probably won't optimize this better.

— в заголовке метода на 2000 с лишним строк. Ну, я его на сотню строк всё же сумел ужать.


// contrary to popular beliefs no magic is done here

— перед блоком, где выполнялось 15 битовых операций подряд. Код на Java.


// talk to the hand ★-★
Handler hand = new TerminationHandler();

— автор не поленился найти в Юникоде символ для очков, которые примерил Терминатор.

> — в заголовке метода на 2000 с лишним строк. Ну, я его на сотню строк всё же сумел ужать.

Вспомнился ассемблерный исходник тетриса для DOS, где бинарник получался размером ровно 2 Кб. Оно работало в текстовом режиме, я сумел туда дописать загрузку графики в знакогенератор, и удержаться в тех же 2 Кб.
Если мы говорим про один и тот же тетрис, то можно выкинуть в этом тетрисе строку копирайта и таблицу рекордов и ничего сложного. Но с таблицей рекордов есть фича — уложиться максимально близко к 64К-1, что тоже один из челленджей, так что такое выкидывание заметно меняет использование.
Нет, челлендж был именно в том, чтобы что-то добавить, ничего не выкидывая, уложившись при этом в тот же размер.

для вас рефакторинг это ужатие количества строк? тогда я бы до 1 ужал :-D

ну, там реально был алгоритм межсерверной синхронизации на полсотни шагов с состоянием, протаскиваемым с начала до конца. чисто механически порезать на куски можно было, но вот какой смысл? 23 переменных из метода в метод передавать — это уже слишком, даже если их в класс запаковать. а одним куском это было хотя бы с пятого раза читаемо.
Напомнило историю про русского, придумавшего формулу.
Правда, я бы не стал удалять таблицу сразу. Как минимум, запустил бы что-то вроде
SELECT COUNT(A)
FROM Table
WHERE B <> A*3
Кстати прикол именно такой таблицы — на некоторых реализациях результат будет вычисляться одинаковое время с точностью до тика.
Забавно было бы, если бы результатом этой оптимизации стал бы эфект гонки, который проявился только через полгода/год.
Т.е. возможны варианты, когда целочисленное умножение исполняется за переменное количество тиков, а SQL запрос к немаленькой таблице — за постоянное?
Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? Не думаю, что там это было актуально. А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения и не отлавливать потенциальные гонки.
> SQL запрос к немаленькой таблице
Это не обязательно таблица. Возможно просто внешняя память.

> Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? > Не думаю, что там это было актуально.
Мы наверно никогда не узнаем.

> А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения.
Согласен. Кстати, насколько я помню, некоторые платы реального времени именно так и работают.
Я видел другой вариант этой истории. Целочисленное умножение на 3 вычислялось слишком долго, поэтому использовали эту таблицу, потому что O(1). Но русский придумал формулу
B = (A << 1) + A // B = A * 3

Эта история лучше.
temporary i hope i hope?
Простите за зануду, но не нашел подтверждений для "Исходники Apollo 11". Исходники давно опубликовали на гитхабе chrislgarry/Apollo-11. Не в текущем master, ни в инициирующем комите #7 (6e8c67f53145375d48d8a1af8f85384d1b10ec51) не удалось найти ни одного вхождения по «anal», если и используется то вполне корректно как «analysis». Естественно самого комментария в коде нет. Возможно, конечно, он был на стадии разработки проекта, но что-то я в этом сильно сомневаюсь.
Подпись относится к тому, что над ней.

Я вот не знаю, как там у Apollo, а в нашей больничной БД названия всех таблиц и полей, имеющих отношение к лабораторным анализам, начинаются с ANAL_. Например, ANAL_DIR, ANAL_COMMON и т.п. В общем, всё через жо… Простите, через ANAL.

Когда вышестоящие товарищи захотели сократить слово «ANALOG(_INPUT)» я тоже предложил не маяться дурью и сократить до ANAL_IN.

А ещё лекарство есть — ANAL GIN :)
Либо легенда, либо процензурировали.
НЛО прилетело и опубликовало эту надпись здесь
Зря ноль перестали зачеркивать :)

Что именно Вы имеете в виду?
В командной строке и многих IDE по дефолту используются шрифты с зачёркнутым нулём.
Или Вы про хабр речь ведёте? В блоках кода действительно нули обычные… Ну, можете предложение кинуть админам хабра, чтобы со шрифтом поиграли для блоков кода.


int x = 0;  // обычный нолик :)
Эээ…

Серьёзно?
А у меня по-другому...



По настройкам в своём профиле пробежался, вроде как ничего не нашел по настройкам шрифтов… У Вас какой браузер/ОС, если не секрет? (у меня Mozilla/Win10)

Chrome/MacOS

Может быть, дефолтный шрифт в браузере разный?
У меня "Times New Roman" стоит. Может быть, у Вас "программерский" шрифт на дефолте?


UPD:
поменял дефолтный шрифт на "Consolas", ничего не изменилось :(
какая-то бага хабра, как думаете?

У меня просто стоит Menlo(специально не ставил, вообще в первый раз его вижу осознанно), который указан в стилях, он и используется, видимо — в нем нолик перечеркнутый.
У меня для вас плохие новости :) Хабр использует моноширинный системный шрифт. Ниже скриншот моей ОС:
image
А вот код стиля для шрифта исходников хабра:
font-family: Menlo, Monaco, 'Courier New', monospace

Предположу что вы читаете Хабр под Windows, а в Courier New ноль без зачеркивания.

Да, Вы правы :)
Я скачал и установил в системе шрифт Monaco, теперь блоки кода сменили вид и отображаются этим шрифтом.
Спасибо!

Черкнул в службу поддержки предложение пересмотреть список шрифтов в стилях…
Правда, не знаю, сочтут ли этот вопрос достойным рассмотрения — так-то невелика проблема

Мне кажется это плохая идея, тащить лигатуры в статьи. Все эти автозамены уместны в уютном, под себя настроенном, редакторе, а в статьях будут создавать лишь путаницу и вызывать множество вопросов. К тому же, они не всегда идеально работают. Использую FiraCode и иногда натыкаюсь на появление символов там, где я бы не хотел их видеть.

Так я и не предлагаю использовать его в статьях, только в блоках кода :)
Вот не надо лигатур на сайте, где могут быть не очень профессионалы — они разительно отличаются от того, что написано в любых руководствах и могут ввести в заблуждение. Я их и в редакторе-то не использую.
Вот не надо лигатур на сайте, где могут быть не очень профессионалы

Мы же вроде на сайте для профессионалов?
Тоже скачал и установил Monaco в ОС, но шрифт блоках кода на хабре не изменился ((( Пользуюсь Win7/Firefox

Проверьте название шрифта :)
У меня тоже первая попытка была неудачной, но это был шрифт "Monaco Plain".
Затем я поискал ещё, нашёл шрифт с точным названием "Monaco" и вот на нём уже всё заработало :)

нашёл оригинальный шрифт, установил, всё гуд. Спасибо, добрый человек.
НЛО прилетело и опубликовало эту надпись здесь
А у меня мало того, что нолик с палочкой, так еще и зачеркнут теперь!

А можно подписи к изображениям писать над самими изображениями? Я, конечно, понимаю — ЕСКД там, ГОСТ и все дела, но удобнее читать сверху-вниз всё-таки...

Извините, но это не статья, это куча надерганных из интернета скриншотов.
Тут самое ценное — обсуждение со своими примерами ;)
НЛО прилетело и опубликовало эту надпись здесь
В сорцах игрового движка Phaser
    // now draw those suckas!
    gl.drawElements(gl.TRIANGLES, this.currentBatchSize * 6, gl.UNSIGNED_SHORT, 0);


НЛО прилетело и опубликовало эту надпись здесь

Это юмористические комментарии в коде

Выдержки из исходников различных проектов. Чтиво для программистов в общем, нормальные люди не поймут. Поздравляю, вы — нормальный!
Достойное пополнение коллекции

    /*
        COME TO THE DARK SIDE!!!

                 _.-'~~~~~~`-._                                                    
                /      ||      \                                                   
               /       ||       \        
              |        ||        |                      
              | _______||_______ |                                                 
              |/ ----- \/ ----- \|                                                 
             /  (     )  (     )  \                                                
            / \  ----- () -----  / \                                               
           /   \      /||\      /   \                                              
          /     \    /||||\    /     \  
         /       \  /||||||\  /       \                                            
        /_        \o========o/        _\                                           
          `--...__|`-._  _.-'|__...--'                                             
                  |    `'    |                         

    */


Из заголовочной части одного очень заморочного модуля.
Если есть цель оскорбиться, то всегда можно найти, чем именно. Главное — поискать. Лично я бы просто не догадался до такой нумерологии.
Вот 0xDEADBEEF — другое дело.
Мёртвоамериканцы же обидятся, уберите это
Коровоамериканцы :)
MS-DOS Operating System:

А на скриншотах путь с Word 1.1
А для чего два раза комментарий с рикроллом (текстом и картинкой)?
Последнее прям вообще доставило… Есть у меня код в котором есть вот такие забавные методы PasteAnalExecute, DelAllAnalExecute, CopyAnalExecute

P.S. и это не софт для игрушек 18+
Как-то видел в продакшн-коде комментарий — большой (строк 15-20 в высоту, наверное) ASCII-костыль.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации