Комментарии 73
Осторожно! phpDoc
/**
* Class Iin
* @package App\Classes\Support
*
* Класс проверки иин для казахстана
*
* ИИН содержит 12 цифр из которых
* первые 6 цифр - дата рождения [гг-мм-дд]
* 7-я цифра - пол и век (нечетные цифры - муж, четные женский)
* 1,2 - 19 век
* 3,4 - 20 век
* 5,6 - 21 век
* 7,8,9,0 - зарезирвированны на будущее
* 8 - 11 регистрационный гос номер
* и 12 - контрольный разряд
*
* Иин проверяесться по контрольной сумме через две последовательности
* Сперва каждая цифра иин, кроме последней умножается на цифру из 1-й последовательности и суммируется
* Результат делиться на 11 и если он от 0 до 9 и соотвествует 12-й цифре иин то иин верен,
* если результат 0 - иин не верен, если результат 10 - то проверка продолжается по второй последовательности
* Если результат проверки по всторой последовательности от 1 до 9 и равен 12-й цифре иин - то иин верен иначе проверка
* заканчивается и иин не верный.
*
* UPD - Хьюстон у нас проблемы - некоторые безответственные работники цонов делают неверные иин с 7,8 и 9 цифрой для 22 и 23 века.
* В итоге люди для системы как из 23 века а сами из 21 или 20 - так что пока не настал 22 и 23 век их разряды будут для 20 века.
* Не люблю костыли но работники цонов такие работники - а менеджеры и клиенты недовольны, так что придеться
*
Результат делиться на 11шайтанама…
«Число делится на 11, если сумма цифр, которые стоят на четных местах, равна сумме цифр, стоящих на нечетных местах, либо отличается от неё на 11.»
Если N = (сумма цифр на чётных местах) — (сумма цифр на нечётных местах) кратно 11.
Это так-то просто. 1 сравнимо с 1 по модулю 11 — дальше не буду это уточнять, модуль всегда 11. 10 сравнимо с -1. 100 — с 1, 1000 — с -1 и так далее. То есть мы можем построить некоторую сумму, включив туда разряды 1, 100, 10000 и так далее со знаком плюс, а 10, 1000, 100000 и так далее — со знаком минус, и так построенная сумма будет сравнима с исходным числом. Если, в частности, она сравнима с 0 (то есть равна 0, +-11, +-22 и так далее), то и исходное число кратно 11.
Теперь осталось только заметить, что если эта сумма сравнима с 0, то и противоположное ей число (1, 100, 10000 с минусом, 10, 1000, 100000 с плюсом) тоже будет сравнимо с 0 по модулю 11. То есть если нас интересует только делимость исходного числа на 11 (а не величина остатка) — то мы можем сказать «сложи цифры на чётных местах и вычти цифры на нечётных» или «сложи цифры на нечётных местах и вычти цифры на чётных», не заботясь о том, с какой стороны человек начнёт цифры считать.
А иногда корпоративные стандарты написания кода заставляют делать что-то, что не поддаётся внутренней логике разработчика.
const int TEN=10; // As if the value of 10 will fluctuate...
Конечно, если так называть константы, то не увидишь в этом логики. Нормальными и полезными были бы названия: MAX_STUDENT_COUNT, SUCCESS_CODE, MAIN_GATE_ID, etc.
Извиняюсь за занудство в юмористическом посте)
Потому что это не столько TEN, сколько RADIX
В указанном месте она берётся из массива:
public static final BigDecimal TEN =
zeroThroughTen[10];
А перед этим она записывается в массив — и не выглядит как просто число:
// Cache of common small BigDecimal values.
private static final BigDecimal zeroThroughTen[] = {
...
new BigDecimal(BigInteger.TEN, 10, 0, 2),
};
Перефразируя Марка Твена, "мой дедушка на смертном одре взял с меня обещание не репостить этот сборник смешных комментариев в коде, потому что уже тогда он был с бородой."
Последний раз вроде бы было в ноябре: https://m.habr.com/post/343168/
про бородатые шуткиИди про бородатую корову или лошадь: плохая корова, старая, изнурённая лошадь.
Уважаемый Сопровождающий! Когда Вы закончили свою попытку «оптимизировать» этот процесс и поняли, насколько чудовищной была эта ошибка, увеличьте последующий счётчик в назидание тем, кто придёт за Вами.
Обязательно возьму на вооружение.
… блоки должны быть выравняны на четыре байта, .... Наверное, всё-таки, выравнены.
Комментарий, встреченный в одном популярном модуле, распространяемом на коммерческой основе (не буду называть компанию-разработчика):
//Вася, убери эту х****, и будет счастье.
И из серии
//магия, не трогать
Как то столкнулись с ситуацией, что 1С упорно отказывалась присваивать значение переменной с первого раза, пришлось продублировать строку и добавить комментарий.
int[] unlinkinPark; //массив точек, которые должны быть убраны из рассмотрения на следующем шаге работы алгоритма.
В том проекте было много всего забавного, но не всё пройдёт цензуру)
Чаще всего это касается случаев, когда нужно рефакторить 150 кб файл index.php, в котором находится все — классы, контроллеры, запросы в БД, шаблоны, реклама, настройки, но нет возможности переписывать на фреймворк из-за нерентабельности разработки; проблема читаемости этих файлов решается хотя бы вынесением разметки в несколько view-файлов и созданием уровня абстракции над базой данных, чтобы убрать сложные MySQL-запросы с главного файла в отдельные методы и поцепить на это все PDO с подстановкой строк для защиты.
int currentMonth;
// А я оптимист!
long currentYear;
// nobody interested in my errors :(
// написал, но осуждаю
перед генерацией исключения:
// ошибка, которая никогда не произойдет:
-- name, ты зачем эту фигню здесь написал?
Потом в следующем комите либо фигня убиралась, либо добавлялось объяснение:
-- name, ты зачем эту фигню здесь написал?
-- потому что гладиолус
// When I wrote this, only God and I understood what I was doing
// Now, God only knows
Пожалуй это один из самых злободневных, когда что-то действительно сложное выдумываешь, то в сам момент все понимаешь и осознаешь, а вот потом все улетучивается.
/*
* Generic driver for memory-mapped GPIO controllers.
*
* Copyright 2008 MontaVista Software, Inc.
* Copyright 2008,2010 Anton Vorontsov <cbouatmailru@gmail.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* ....``.```~~~~````.`.`.`.`.```````'',,,.........`````......`.......
* ...`` ```````..
* ..The simplest form of a GPIO controller that the driver supports is``
* `.just a single "data" register, where GPIO state can be read and/or `
* `,..written. ,,..``~~~~ .....``.`.`.~~.```.`.........``````.```````
* `````````
___
_/~~|___/~| . ```~~~~~~ ___/___\___ ,~.`.`.`.`````.~~...,,,,...
__________|~$@~~~ %~ /o*o*o*o*o*o\ .. Implementing such a GPIO .
o ` ~~~~\___/~~~~ ` controller in FPGA is ,.`
`....trivial..'~`.```.```
* ```````
* .```````~~~~`..`.``.``.
* . The driver supports `... ,..```.`~~~```````````````....````.``,,
* . big-endian notation, just`. .. A bit more sophisticated controllers ,
* . register the device with -be`. .with a pair of set/clear-bit registers ,
* `.. suffix. ```~~`````....`.` . affecting the data register and the .`
* ``.`.``...``` ```.. output pins are also supported.`
* ^^ `````.`````````.,``~``~``~~``````
* . ^^
* ,..`.`.`...````````````......`.`.`.`.`.`..`.`.`..
* .. The expectation is that in at least some cases . ,-~~~-,
* .this will be used with roll-your-own ASIC/FPGA .` \ /
* .logic in Verilog or VHDL. ~~~`````````..`````~~` \ /
* ..````````......``````````` \o_
* |
* ^^ / \
*
* ...`````~~`.....``.`..........``````.`.``.```........``.
* ` 8, 16, 32 and 64 bits registers are supported, and``.
* . the number of GPIOs is determined by the width of ~
* .. the registers. ,............```.`.`..`.`.~~~.`.`.`~
* `.......````.```
*/
linux/v4.4.153/source/drivers/gpio/gpio-generic.c
Потом разок почитал и понял, что ни разу не остроумный.
И перестал.
И всем советую.
String fakeAnswer = "{ \"isError\" : \"unknown\" }";
try {
reader = new JSONObject(fakeAnswer);
} catch (JSONException e2) {
//Абсолютно маловероятно
e2.printStackTrace();
reader = new JSONObject();
}
Уважаемый Сопровождающий!
без последующей линии
Алелуйя
новая эра переводов на хабре — теперь с гуглотранслейтом, но без мозга!
P.S. Я уже видел перевод этих «смешных историй» на хабре.
https://habr.com/post/343168/
и т.д. через кнопку поиска.
Надеюсь это чему-нибудь научило заказчика. Была история в одной фирме, что как обычно бизнес использовал "быдлокод как инструмент" и в итоге задолбавшись отлавливать баги свалил не один человек а целая комманда из 20 опытных разработчиков. После этого наняли вторую комманду и мало того чтобы их завлечь начали раздавать опционы, в итоге и эта комманда свалила. Только с третьей коммандой контора смогла выделить ресурсы и терпение на рефакторинг и теперь вроде бы у них все хорошо.
//Переписать А когда спустя пару лет лезешь в этот самый «новый метод», который за годы начал вызываться из кучи других разных мест, с мыслями: «Руки бы оторвать тому, кто это написал» и видишь свою фамилию и скромное «переписать»…
// проверка правильности переменных==танцы с бубнами
//обрабатываем попытки получить отрицательные значения времени
//если образовалось марсианско/нептунианское время
//конец танцев с бубнами
из этого же проекта
//Вызываю базу! Где там этот хренов Оракл?!!!
// не забыть обрубить соединение базу и сессию прибить по-сильнее, а то найдется
переменные в другом проекте:
$bredmarketologa
$dreem_in_summer_night
Иногда попадается не только в комментариях: например, в документации QEMU
Lines should be 80 characters; try not to make them longer.
...
Rationale:
- Some people like to tile their 24" screens with a 6x4 matrix of 80x24
xterms and use vi in all of them. The best way to punish them is to
let them keep doing it.
...
А в Firefox какое-то время назад были параметры для включения экспериментального и "ваще экспериментального" WebRender:
gfx.webrender.enabled
gfx.webrendest.enabled
А что-то тогда нетривиальное было задано.
Короче, через плечо я увидела на размер экрана нарисованную псевдокодом кирпичную стену, в самом центре которой был обозначен метод решения задачи: «Бился головой сюда».
10 лет прошло, а я все и тот случай помню, и время от времени саму тянет такой комментарий от всего сердца где-то оставить.
Комментарии в коде как способ самовыражения