Как стать автором
Обновить

Комментарии 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-таски и переводил ключевые слова с немецкого на английский). Более того: имена классов, методов и переменных были тоже на немецком. УчитываяОсобенностиОнногоЯзыка оно действительно выглядело как нечто родное.

Коммент в исходниках VMWare:
//This exception should never happen, if it does gods help us.
И все же ЭТО однажды случилось, и бог не помог..


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

Так что комментарий правильный…
gods ну никак не может перевестись как Бог.

То что вы написали должно писатся как: God would help us.
“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

Эта история лучше.
Исходники Apollo 11 — the best
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);


//Why i rewrite this again…
НЛО прилетело и опубликовало эту надпись здесь

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

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

    /*
        COME TO THE DARK SIDE!!!

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

    */


Из заголовочной части одного очень заморочного модуля.
есть еще такая
Вот

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

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

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

Публикации

Истории