long long ago; /* in a galaxy far far away */
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`---'\___
// .' \\| |// '.
// / \\||| : |||// // / _||||| -:- |||||- // | | \\\ - /// | |
// | \_| ''\---/'' |_/ |
// \ .-\__ '-' ___/-. /
// ___'. .' /--.--\ `. .'___
// ."" '< `.___\_<|>_/___.' >' "".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-'=====
// `=---='
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// ???? ??BUG
//
«Слава богу, багов нет»
#define TRUE FALSE //Happy debugging suckers
//
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 42
// Magic. Do not touch.
Коммент к AngularJS.
Коммент к исходникам Quake III Arena.
view-source:http://theoatmeal.com/
Резюме Сергея Брина
/* Stupid CSS hack because IE sucks */
На сайте microsoft.com
На сайте Amazon.com
На сайте Amazon.com
Welcome to Flickr — Photo Sharing
Home of the Mozilla Project
Flipkart
.
_
_._ _..._ .-', _.._(`))
'-. ` ' /-._.-' ',/
) \ '.
/ _ _ | | a a / |
\ .-. ;
'-('' ).-' ,' ;
'-; | .'
\ \ /
| 7 .__ _.-\ | | | ``/ /` /
/,_| | /,_/ /
/,_/ '`-'
"...just crawl it."
MS-DOS Operating System:
Source: Farts and f-bombs: see the hidden jokes in Microsoft's early code
Запись в .EXE file:
If you can read this, you too could become a great hacker!
Source Code of SpankBang
Вебсайт анимэшки.
/**
* For the brave souls who get this far: You are the chosen ones,
* the valiant knights of programming who toil away, without rest,
* fixing our most awful code. To you, true saviors, kings of men,
* I say this: never gonna give you up, never gonna let you down,
* never gonna run around and desert you. Never gonna make you cry,
* never gonna say goodbye. Never gonna tell a lie and hurt you.
*/
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
// Autogenerated, do not edit. All changes will be undone.
// sometimes I believe compiler ignores all my comments
// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public.
// drunk, fix later
Catch (Exception e) {
//who cares?
}
/*
* You may think you know what the following code does.
* But you dont. Trust me.
* Fiddle with it, and youll spend many a sleepless
* night cursing the moment you thought youd be clever
* enough to "optimize" the code below.
* Now close this file and go play with something else.
*/
//This code sucks, you know it and I know it.
//Move on and call me an idiot later.
// If this comment is removed the program will blow up
//Dear future me. Please forgive me.
//I can’t even begin to express how sorry I am.
options.BatchSize = 300; //Madness? THIS IS SPARTA!
// I have to find a better job
// Catching exceptions is for communists
// Houston, we have a problem
// If I from the future read this I’ll back in time and kill myself.
// This is crap code but it’s 3 a.m. and I need to get this working
//Mr. Compiler, please do not read this.
B FUBAR # OK, I give up. Halt & take a dump!
/* don't ask, don't touch */
/* If you are reading this, I want you to know that I am probably on some kind of FBI watch-list because I googled “how to kill all children while leaving the parents alive”. So yeah, Linux is brutal */
/* ^ ^
* \______ ______/
* \ * \ / * /
* ----- ------ /---- * || -< Boo! |
* /__\ \----/
* \______________/
* \/\/\/\/\/\/\/
* ------------
*/
/*
This following code is a work of fiction. Variables, methods, classes and interfaces are either the products of the author’s imagination or used in a fictitious manner. Any resemblance to actual persons's code, living, dead or in coma is purely coincidental.
*/
/*
*
* ARRRRRRRRRRRRRRRRRRRRRR!
*
*
* | | |
* )_) )_) )_)
* )___))___))___)
* )____)____)_____) * _____|____|____|____\\\__
*---------\ /---------
* ^^^^^ ^^^^^^^^^^^^^^^^^^^^^
* ^^^^ ^^^^ ^^^ ^^
* ^^^^ ^^^
*
*
*/
// somedev1 - 6/7/02 Adding temporary tracking of Login screen
// somedev2 - 5/22/07 Temporary my ass .
//If you have reached here, you're probably doing something wrong.
//Increase the counter when you have tried hard to optimize this code and failed.
//total_hours_wasted=21
// No comments, as it was hard to code, it should be hard to understand.
//f**k the customers.
/* Please work */
//Hey John, please fix the errors.
//Hey Abraham, please fix the errors.
//Abraham says F**k you both .
/*
The CEO of the company (and my former boss) sold the company
leaving me free to comment the code as I should have. The
former CEO of the company will be referred to as Dip Shit, or DS for short.
DS thinks he is a software developing genius. Unfortunately for
me (the maintenance programmer) I spent too much time cleaning
up Dip's Shit.
DS is a daredevil developer. Like Evel Knievel his code uses
the GOTO statement frequently jumping daringly from a code
module into the middle of an IF...THEN structure in a different
module that has nothing to do with the first module.
Speaking of IF structures DS loves them. He has no idea what a
CASE or SWITCH logic block is. Instead, I get to play code
archaeologist, and dig though a massively nested (and un-
indented) IF...THEN...ELSE logic blocks.
DS thinks of himself as clever, and this shows though with the
variable names he chooses:
global i=0;
global dateMyWife = 1;
datesAreAFruit = '12/12/98';
giveDatesToMyWife = datesAreAFruit + dateMyWife;
if (someStuid)
{
giveDatesToMyWife = false;
}
// Ryan. Why does this sometimes crash?
if (giveDatesToMyWife) goto :hotTub
// Well, DS because you changed giveDatesToMyWife data type,
(also, adding an integer to the string -- which the compiler
warned you about)... Anyway in a weakly typed language you
obtained drain bramage by conditionally changing the data type
from a string to a Boolean, so that when the
if(giveDatesToMyWife) executes, when the variable is a string
the program correctly crashes -- because a string is not a
conditional bool type. Also, since someStuid is global, the
invisible pink unicorn only knows where this value is set, or
where and in what modules it gets changed.
DS only knows how to scope variables as global. Stating when he
"tried using local, or private, my programs would always error
with variable not found error, so it's just easier to make
everything a global."
I could go on, but as you dig though this flying-spaghetti-
monster nightmare code you will see what I mean.
*/
var c = 0,
safeCounter;
...
safeCounter = function () {
...
c++; // this is not subliminal
...
},
...
int x; // x is an int
int y; // y is an int
int z; // z is an int
/* more code here ... */
if (x) // do something here
return x;
else if (x == 0) // do something else here
return y;
else // do something entirely different
return z;
Коммент в исходниках VMWare:
//This exception should never happen, if it does gods help us.
И все же ЭТО однажды случилось, и бог не помог...
Has the Large Hadron Collider destroyed the world yet?
Исходники Apollo 11
И напоследок, крик души:
# Stop using anal as a variable!
# Wherever I look I see anal this and anal that!
# So please stop.
# Use analyze or xbvvzr or whatever and not anal_insert or anal_check
P.S.
// I'm sorry.
Комментарии (128)
3dcryx
26.11.2017 01:40Почему коментарии без соответсвующего кода?
Почему не перевели комментарии?lam0x86
26.11.2017 02:33Мы не на Пикабу, чтобы комментарии переводить. Общепринято, что язык комментариев — английский, не зависимо от того, для кого написан софт.
3dcryx
26.11.2017 03:43Оон оно как, не знал. А кем кстати "общепринято"? Может стоит уведомить все крупные конторы об этом правиле?
Anarions
26.11.2017 03:47Крупные конторы и так в курсе.
3dcryx
26.11.2017 04:53Яндекс, 1С, Сбертех как-то пропустили мимо ушей. Хотя это наверно недостаточно крупные.
sumanai
26.11.2017 05:02Яндекс исправляет на английские и кается. 1С стыдно поминать, Сбертех… Тоже.
TheKnight
26.11.2017 05:23-1Справедливости ради, переведены были комментарии в коде, предназначенном для использования внешними людьми. Про внутренний код никто ничего не говорил.
Момент, где Яндекс кается за использование русских комментариев так же не нашел. Цитату приведете?
Muzzy0
26.11.2017 11:05Тех, кто пишет комменты не на английском, надо бить до посинения.
Доводилось мне ковыряться в коде, который писали фрицы и итальянцы. В первом случае хватало магии, во втором — адские спагетти. И комменты на немецком и итальянском, соответственно. Разработка была для заказчиков, которые не розуміють ни по-немецки, не по-итальянски.
Я очень долго ругался и уйму времени потратил только на перевод комментов. В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «gro?».
Сам пишу на английском.F0iL
26.11.2017 11:23Вспоминаю попавшуюся часть проекта с комментариями на корейском. Тоже весело было.
TheKnight
26.11.2017 12:21Встретил код с комментариями на корейском с побитой кодировкой!
Благо что строк кода мало и вообще это AI гомункула для игры Ragnarok Online — нет необходимости сидеть и разбираться, если не идет.
Mirn
26.11.2017 12:40а я сейчас работаю с наукоёмким и низкоуровневым кодом (т.к. сложный и его нереально много) на японском — то ещё счастье, особенно мило что вместо взаимствований и кальки английских терминов всё термины написали исключительно на японском. т.е. не пиксель (pixeru) а ?? и тд
ладно этот быдлокод разложен по полочкам, есть структура и есть документация и оформлен по самым суровым стандартам.Free0N
26.11.2017 16:08+1Вы бы определились — или «быдлокод», или «разложен и оформлен»…
Если каменты не на английском, то предполагается, что продукт дальше страны не пойдет. Так или иначе, на родном языке воспринимаются намного проще (при условии «толковости» написания).Mirn
26.11.2017 16:38объясняю на примере:
всё оформлено в строгом и едином кодестиле, не только для собственно программирования а ещё и для удобного документирования (типа доксигена и тд), чтоб гит давал минимум строк изменений и тд.
всё разложено по отдельным функциям, они в классы и методы, потом модули и тд.
но
- вызывается в итоге одна чудо функция в которую передаётся ВСЁ, десять типов изображений, все опции и все указатели на другие функции которые аккуратно и тчательно обёрнуты, но NULL или указатель не на ту функцию с другими параметрам передать можно хотя с++.
- функция нахождения медианы из 5 чисел — сотни строк аккуратнейшего кода (хотя во всех DSP и сигнальных либах это 30-40 строк и десять compare&swap)
- на каждый вид и размерность матрицы свои функции которые принимают (void *) БРРРР!!! холодный пот!!! ну и прочие миксы си и си++.
- зачем то умножения расписаны в деления и сдвиги, хотя целевая плис аппаратных умножителей содержит в 10 раз больше чем требуется даже этому быдлокоду.
Korogodin
26.11.2017 22:31+1С++ и целевая ПЛИС — балуетесь HLS? Как впечатления? Нет проблем с С++'овскими фишками?
AnutaU
26.11.2017 13:56О, тоже бывало. Но всё же лучше комментарии на корейском, чем вообще никаких, и код, кхм, нетривиальный.
А так больше документация на корейском попадается, либо переписка.
SergBell
27.11.2017 06:46Буквально пару недель назад разбирал исходники, комментарии к которым были написаны на китайском в древней кодировке GB18030. Сами китайцы закатили глаза, пожелали удачи и умыли руки.
khim
26.11.2017 17:26+1В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «gro?».
А нужно просто пользовать вменяемые редакторы.
Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках. После моих правок он стан написан в четырёх кодировках… и я не о комментариях. Комментарии там, как раз, были вполне себе на английском.Muzzy0
26.11.2017 18:13А нужно просто пользовать вменяемые редакторы.
Спасибо, Кэп! Step 5, Step 7.
Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках.
Только один вопрос: зачем?!khim
26.11.2017 20:27+3Только один вопрос: зачем?!
Это был спеллчекер. На входе был, понятно, UTF-8 (XXI век, всё-такое), но дальше — оно перегонялось в однобайтовую кодировку (ядро было универсальным, но поддерживало только однобайтовые кодировки). windows-1252 для европейских языков, понятно, windows-1250 для центральной европы и, кажется, windows-1253 для греческого (вот тут могу соврать — давно дело было).
Ну а вишенкой на торте было наличие некоторого количество таблиц в коде (валидные символы для разных языков), символы, «нерелевантные» для текущего языка (как и символы не поддерживаемые в текущей кодировке) перегонялись в "?" плюс таблички с классификаторами (гласные/согласные/etc).
Ну и как понятно табличка для немецкого была в windows-1252, а для польского — в windows-1250… для русского, понятно, ещё windows-1251 добавился…
Всё в одном файле, да. Достаточно было этот файл в каком-нибудь новомодном Eclipse открыть и один пробел поставить — и всё, тесты начинали падать (да, несмотря на весь этот ужас с кодировками в остальном-то там всё неплохо было, unit-тесты, CI, вот это вот всё)…
romansur
27.11.2017 00:46Зато в TIA Portal'е немцы исправились, даже теги на русском создавать можно)
Muzzy0
27.11.2017 09:47TIA Portal во многих отношениях был шагом назад, только сейчас догоняют былое. Комменты на русском мы ещё в Step 7 писали (в России и для российских заказчиков).
даже теги на русском создавать можно)
А вот это ни за что и никогда.
С языками ещё одна подстава, актуальная для меня: из списка языков, которые можно добавить в проект, исчез иврит. Не сильно критично, выбираем какой-нибудь другой. Но неприятно. Из плюсов — больше не надо писать на иврите для панелей задом наперёд. Старые, под Flexible на WinCE, не поддерживали RTL.
alix_ginger
26.11.2017 18:16одновременно написан в трёх кодировках
Но ведь английские буквы и всякие плюсы-минусы во всех кодировках в одном и том же месте? Или в коде были неанглийские?khim
26.11.2017 20:36+2В коде были не английские. То есть было что-то в духе:
И, соответственно вот эти вотswitch (CurrentSpellcheckerLanguage) { case LanguageGerman: if (std::find_if(it1, it2, '?') { ... } break; case LanguagePolish: if (std::find_if(it1, it2, 'l') { ... } break; case LanguageRussian: if (std::find_if(it1, it2, 'ш') { ... } break; }
'?'
,'l'
и'ш'
— были в разных кодировках. Прямо внутри одной функции…Deosis
27.11.2017 08:13Насколько трудно кусок между case и break вынести в отдельный файл?
Или проще есть кактус?khim
27.11.2017 12:44Насколько трудно кусок между case и break вынести в отдельный файл?
В конце-концов это и сделали… когда ресурсы нашли.
До сих пор не знаю как к этому относится: код в результате стал сложнее и медленнее, но зато его можно редактировать Eclipse'ом не опасаясь всё уничтожить неловким движением. Ну и количество WTF'ов уменьшилось…
alix_ginger
27.11.2017 12:58+1По-моему, еще проще было бы сделать что-то вроде
и сравнивать по коду символа#define CODE_GERMAN_ESZETT = 223 #define CODE_RUSSIAN_SHA = 248
khim
28.11.2017 04:09-1Ну как паллиатив — возможно. Но последний раз, когда я этот код видел правила вынесли во внешний файл специального формата, «типа понятного лингвистам»… правда правил новых там после этого за пару лет не добавилось… Но фиг его знает, может просто с лингвистами туго было…
Muzzy0
27.11.2017 10:03Т.е. сама программа нормально работала с кодировками, только сам файл с данными был восьмибитным?
PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)khim
27.11.2017 12:49Т.е. сама программа нормально работала с кодировками
Как я уже писал: ядро у неё нормально работало с любой однобайтовой кодировкой — а языков там было… много.
PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)
А чем тут windows-1255 плох? Это бы как-то повлияло только на тех, кто поддержку иврита бы добавлял, остальные бы видели в этих местах разные свои буквы…Muzzy0
27.11.2017 14:22Тем, что к некоторой свистопляске с кодировкой добавляется свистопляска с RTL. Хотя, возможно, на уровне текстового файла это не влияет.
Muzzy0
27.11.2017 09:51Я вижу немало минусов. Подозреваю, что минусующие никогда не работали с интернациональными проектами (когда среди заказчиков и исполнителей присутствуют носители более, чем одного языка).
manok
26.11.2017 01:43+1float 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
fatronix
26.11.2017 10:55А зачем надо было делить на ноль?)
Zoolander
26.11.2017 12:18+1такая проблема возникает в играх с геометрическими вычислениями, когда используется формула с делением, куда в делитель может попасть 0, при этом формула должна выдавать какое-то значение (а не вываливаться с ошибкой)
решение — делать перед вычислением
if(divider==0) return SomeSpecialResultKvanTTT
26.11.2017 14:40+2А разве стандарт float не позволяет делить на ноль? Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.
khim
26.11.2017 17:52А разве стандарт float не позволяет делить на ноль?
Лучше бы не позволял.
Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.
+inf
и-inf
— ещё себя прилично ведут. Ноnan
…
nan < 0
— false
nan > 0
— false
nan == 0
— false
nan != 0
— false
Разработчики, которые это извращение изобрели на stack overflow рассказывают сказки, но… звучит это примерно как «мины замедленного действия — это жутко круто, кишки намотанные на люстру — это просто восхитительно».
Дело в том, что если вы задумаетесь, то поймёте, что неявное предположение о том, что==
— это отношение эквивалентности (в частностиA == A
для любогоA
), а<=
— это отношение порядка (в частности еслиA < B
— false, тоA >= B
— true) заложено в такое количество алгоритмов, что возврат из функцииnan
'а — это почти акт саботажа…grossws
26.11.2017 19:19Одна из причин почему в rust разделили типажи Ord/PartialOrd и Eq/PartialEq это как раз ieee754
MrShoor
26.11.2017 21:38+1Справделивости ради в машинных инструкциях операции сравнения с NaN возвращают не False, а отдельное сотояние, которое можно понимать например как NaB (Not a Boolean. Термин не общепризнанный, но результату операции соответствуют 2 флага вместо одного, что дает нам третье состояние). Проблема в том, что это самое Not a Boolean никак не влазит в boolean, у которого только 2 состояния. Поэтому разработчики языка забили болт, и сказали, что это Not a Boolean кастится к False всегда, и не волнует.
Вы же в свою очередь можете разработать свой язык и компилтор, для которого результат сравнений больше/меньше/равно будет возвращать 3 состояния, и тогда проблема с nan == nan исчезнет.khim
26.11.2017 22:02+1Вот только не надо мне сказок про машинные инструкции сочинять, я с ними, как бы, каждый день сталкиваюсь. cmpss возвращает либо 0, либо -1, других вариантов нет. Или вы про ucomiss? Да — там для NaN отдельный флаг есть, но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false — при этом инструкция перехода может либо смотреть на флаги ZF/SF, либо на PF.
Так что мне придётся создавать не свой собственный компилятор, а свой собственный процессор — что гораздо сложнее и безумнее. Гораздо более разумное решение: при обнаруженииnan
прекращать вычисления вообще. Проще, надёжнее, быстрее.MrShoor
28.11.2017 04:43Да, я в первую очередь про ucomiss, ибо именно его используют компиляторы при сравнении флоатов.
но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false
Дело в том, что его нужно в ряде случаев обязательно проверять. Иначе может оказаться, что любое число будет меньше и равно NaN. И компиляторы частенько проверяют оба флага, чтобы сгенерировать false.
Muzzy0
27.11.2017 10:04Либо делитель вычисляется и может оказаться нулём, либо есть цель вызвать исключение.
untilx
27.11.2017 13:16+1Видел в одном из проектов, над которым довелось поработать, комментарий вроде «сейчас три часа ночи, я очень устал, а завтра сдавать проект» и дальше вёрстка на таблицах. Впрочем, и без того там хватало приколов, но это уже другая история.
MuratovTM
26.11.2017 02:10+1// Нужно обязательно дунуть, потому что если не дунуть, // то никакого чуда не произойдет... // © Амаяк Акопян
PastorGL
26.11.2017 03:40// 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();
— автор не поленился найти в Юникоде символ для очков, которые примерил Терминатор.
mistergrim
26.11.2017 08:56> — в заголовке метода на 2000 с лишним строк. Ну, я его на сотню строк всё же сумел ужать.
Вспомнился ассемблерный исходник тетриса для DOS, где бинарник получался размером ровно 2 Кб. Оно работало в текстовом режиме, я сумел туда дописать загрузку графики в знакогенератор, и удержаться в тех же 2 Кб.evilgeek
27.11.2017 00:47+1Если мы говорим про один и тот же тетрис, то можно выкинуть в этом тетрисе строку копирайта и таблицу рекордов и ничего сложного. Но с таблицей рекордов есть фича — уложиться максимально близко к 64К-1, что тоже один из челленджей, так что такое выкидывание заметно меняет использование.
mistergrim
27.11.2017 08:01Нет, челлендж был именно в том, чтобы что-то добавить, ничего не выкидывая, уложившись при этом в тот же размер.
Interreto
26.11.2017 14:35+1для вас рефакторинг это ужатие количества строк? тогда я бы до 1 ужал :-D
PastorGL
26.11.2017 22:17+1ну, там реально был алгоритм межсерверной синхронизации на полсотни шагов с состоянием, протаскиваемым с начала до конца. чисто механически порезать на куски можно было, но вот какой смысл? 23 переменных из метода в метод передавать — это уже слишком, даже если их в класс запаковать. а одним куском это было хотя бы с пятого раза читаемо.
Muzzy0
27.11.2017 10:12Напомнило историю про русского, придумавшего формулу.
Правда, я бы не стал удалять таблицу сразу. Как минимум, запустил бы что-то вроде
SELECT COUNT(A)
FROM Table
WHERE B <> A*3dimkss
27.11.2017 20:43Кстати прикол именно такой таблицы — на некоторых реализациях результат будет вычисляться одинаковое время с точностью до тика.
Забавно было бы, если бы результатом этой оптимизации стал бы эфект гонки, который проявился только через полгода/год.Muzzy0
28.11.2017 10:28Т.е. возможны варианты, когда целочисленное умножение исполняется за переменное количество тиков, а SQL запрос к немаленькой таблице — за постоянное?
Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? Не думаю, что там это было актуально. А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения и не отлавливать потенциальные гонки.dimkss
28.11.2017 10:56> SQL запрос к немаленькой таблице
Это не обязательно таблица. Возможно просто внешняя память.
> Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? > Не думаю, что там это было актуально.
Мы наверно никогда не узнаем.
> А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения.
Согласен. Кстати, насколько я помню, некоторые платы реального времени именно так и работают.
zenn
26.11.2017 09:06Простите за зануду, но не нашел подтверждений для "Исходники Apollo 11". Исходники давно опубликовали на гитхабе chrislgarry/Apollo-11. Не в текущем master, ни в инициирующем комите #7 (6e8c67f53145375d48d8a1af8f85384d1b10ec51) не удалось найти ни одного вхождения по «anal», если и используется то вполне корректно как «analysis». Естественно самого комментария в коде нет. Возможно, конечно, он был на стадии разработки проекта, но что-то я в этом сильно сомневаюсь.
VezhLos
26.11.2017 14:36+1Я вот не знаю, как там у Apollo, а в нашей больничной БД названия всех таблиц и полей, имеющих отношение к лабораторным анализам, начинаются с ANAL_. Например, ANAL_DIR, ANAL_COMMON и т.п. В общем, всё через жо… Простите, через ANAL.
Muzzy0
27.11.2017 09:55Когда вышестоящие товарищи захотели сократить слово «ANALOG(_INPUT)» я тоже предложил не маяться дурью и сократить до ANAL_IN.
А ещё лекарство есть — ANAL GIN :)
fatronix
26.11.2017 10:38//DNA - Because fuck you and your magic numbers being all over the codebase. #define DNA_BLOCK_SIZE 3
askv
26.11.2017 10:43Зря ноль перестали зачеркивать :)
yizraor
26.11.2017 11:12Что именно Вы имеете в виду?
В командной строке и многих IDE по дефолту используются шрифты с зачёркнутым нулём.
Или Вы про хабр речь ведёте? В блоках кода действительно нули обычные… Ну, можете предложение кинуть админам хабра, чтобы со шрифтом поиграли для блоков кода.
int x = 0; // обычный нолик :)
vvzvlad
26.11.2017 13:38Эээ…
yizraor
26.11.2017 14:04Серьёзно?
А у меня по-другому...
По настройкам в своём профиле пробежался, вроде как ничего не нашел по настройкам шрифтов… У Вас какой браузер/ОС, если не секрет? (у меня Mozilla/Win10)
vvzvlad
26.11.2017 14:06Chrome/MacOS
yizraor
26.11.2017 14:08Может быть, дефолтный шрифт в браузере разный?
У меня "Times New Roman" стоит. Может быть, у Вас "программерский" шрифт на дефолте?
UPD:
поменял дефолтный шрифт на "Consolas", ничего не изменилось :(
какая-то бага хабра, как думаете?vvzvlad
26.11.2017 14:21У меня просто стоит Menlo(специально не ставил, вообще в первый раз его вижу осознанно), который указан в стилях, он и используется, видимо — в нем нолик перечеркнутый.
AreD
26.11.2017 14:26У меня для вас плохие новости :) Хабр использует моноширинный системный шрифт. Ниже скриншот моей ОС:
А вот код стиля для шрифта исходников хабра:
font-family: Menlo, Monaco, 'Courier New', monospace
Предположу что вы читаете Хабр под Windows, а в Courier New ноль без зачеркивания.yizraor
26.11.2017 14:41Да, Вы правы :)
Я скачал и установил в системе шрифт Monaco, теперь блоки кода сменили вид и отображаются этим шрифтом.
Спасибо!yizraor
26.11.2017 14:48+1Черкнул в службу поддержки предложение пересмотреть список шрифтов в стилях…
Правда, не знаю, сочтут ли этот вопрос достойным рассмотрения — так-то невелика проблемаBeppeGrillo
27.11.2017 15:03Вообще, раз это сайт для профессионалов, следует использовать профессиональный шрифт с лигатурами типа github.com/tonsky/FiraCode
/CC msdos9 AreD vvzvlad askv Boomburumfaiwer
27.11.2017 15:29Мне кажется это плохая идея, тащить лигатуры в статьи. Все эти автозамены уместны в уютном, под себя настроенном, редакторе, а в статьях будут создавать лишь путаницу и вызывать множество вопросов. К тому же, они не всегда идеально работают. Использую FiraCode и иногда натыкаюсь на появление символов там, где я бы не хотел их видеть.
vvzvlad
27.11.2017 16:18Вот не надо лигатур на сайте, где могут быть не очень профессионалы — они разительно отличаются от того, что написано в любых руководствах и могут ввести в заблуждение. Я их и в редакторе-то не использую.
msdos9
27.11.2017 10:40Тоже скачал и установил Monaco в ОС, но шрифт блоках кода на хабре не изменился ((( Пользуюсь Win7/Firefox
yizraor
27.11.2017 18:30Проверьте название шрифта :)
У меня тоже первая попытка была неудачной, но это был шрифт "Monaco Plain".
Затем я поискал ещё, нашёл шрифт с точным названием "Monaco" и вот на нём уже всё заработало :)
yarric
26.11.2017 11:02+1А можно подписи к изображениям писать над самими изображениями? Я, конечно, понимаю — ЕСКД там, ГОСТ и все дела, но удобнее читать сверху-вниз всё-таки...
Aquahawk
26.11.2017 12:42const { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, } = require('ReactNative'); module.exports = __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugTool;
https://github.com/facebook/react-native/blob/678a7f3c39e495db602e90e994894051eb7aab10/Libraries/Renderer/shims/ReactDebugTool.js
PravdorubMSK
26.11.2017 13:10Тонкий юмор, присущий лишь задротам. Даже не знаешь, плакать или смеяться.
DrLivesey
26.11.2017 13:54#define TRUE FALSE //Happy debugging suckers
Это слишком просто, здесь есть на много больше интересного.
pankraty
26.11.2017 16:35+1Достойное пополнение коллекции
/* COME TO THE DARK SIDE!!! _.-'~~~~~~`-._ / || \ / || \ | || | | _______||_______ | |/ ----- \/ ----- \| / ( ) ( ) \ / \ ----- () ----- / \ / \ /||\ / \ / \ /||||\ / \ / \ /||||||\ / \ /_ \o========o/ _\ `--...__|`-._ _.-'|__...--' | `' | */
Из заголовочной части одного очень заморочного модуля.
Shchvova
26.11.2017 17:37Кому интересно, pterodactyl.me когда-то редиректил сюда theoatmeal.com/comics/ptero
AkshinM
26.11.2017 18:25есть еще такая
Вотarch1tect0r
27.11.2017 11:51Последнее прям вообще доставило… Есть у меня код в котором есть вот такие забавные методы PasteAnalExecute, DelAllAnalExecute, CopyAnalExecute
P.S. и это не софт для игрушек 18+
shomnest
28.11.2017 14:02+1Из Вики ru.wikipedia.org/wiki/RMI
int q=centralWarehouse.getQuantity("SuperSucker 100 Vacuum Cleaner");
ZyXI
А что не так с
?
lopatoid
То что этот код не автосгенерирован, а написан человеком.
Survtur
Почему вы так решили?
Amenothis
Встречал эту штуку в приколах, где написано что-то вроде: «Чтобы ваш код никто не трогал, добавьте в нее эту строчку».
dipsy
На StackOverflow там ещё был комментарий на этот комментарий: «This seems to stop morons from messing my code...»