Забавные факты о языках программирования/библиотеках/технологиях

В Java у SimpleDateFormat YYYY означает ISO 8601 week date.
Легко перепутать с обычным yyyy и получить странный результат.
https://rextester.com/HXO94718

import java.util.Date;
import java.text.SimpleDateFormat;

class WeekDateExample
{
    public static void main(String[] args)throws Exception {
        Date d = new SimpleDateFormat("dd.MM.yyyy").parse("30.12.2019");
        System.out.println(new SimpleDateFormat("dd.MM.YYYY").format(d)); // 30.12.2020
    }
}

Из-за этого вроде даже Твиттер падал.


А еще в фреймворке Spring для Java есть класс с именем AbstractSingletonProxyFactoryBean.


А в Haskell — tuple с аргументами a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1, a2, b2, c2, d2, e2, f2, g2, h2, i2, j2.

Хоть я Java и не знаю, но почему бы и нет? ИМХО, имя чёткое и подробно описывает сущность

Это здесь не аргументы. Это типы аргументов. То есть, грубо говоря, прописано, что tuple из 20 аргументов может иметь все 20 разного типа. А вот что все tuple прописаны явно - неожиданно. Значит, tuple из 1000 элементов без дополнительных танцев с бубном язык не позволяет…

1 лайк

Ну типа паттерн на паттерне и паттерном погоняет. :kolobokcrossing:
Ынтерпрайз! https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition

У него даже хештег в твиттере есть. https://twitter.com/hashtag/abstractsingletonproxyfactorybean

А, ты про название… надеюсь, я не сказал глупость ранее

Тут же просто fizz-bizz-задача?

ага, для любителей паттернов, кровавого ынтерпрайза и оверинжиниринга )

Ponos — библиотека для генерации нагрузок (тестирование пропускной способности сервисов).

Разработчики вроде из Швеции, и в Readme пишут, что это в честь древнегреческого бога. :trollface:

1 лайк

Странности Kotlin/(JVM?): сами создали проблему, сами добавили новый костыль чтоб её решить.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-published-api/index.html

Из public inline функций нельзя трогать не public (private, internal, …) элементы, потому что

This imposes certain risks of binary incompatibility caused by changes in the module that declares an inline function in case the calling module is not re-compiled after the change.

Но если добавить эту аннотацию к internal, то можно. :crazy_face:
Причем она делает элемент “effectively public”, так что непонятно почему б просто не сделать public.

Ну и имя аннотации: получается одновременно публичный и внутренний элемент. :confusedparrot:

До 2018 года GUI Докера для винды и ПО для мышей/клавиатур Razer не запускались вместе потому что в них был один и тот же баг скопированный из ответа на StackOverflow :joy:

Обе программы пытались через глобальный мъютекс предотвратить запуск более одного экземпляра себя.
Для создания мъютекса нужно какое-нибудь уникальное (но воспроизводимое этой программой) значение.
Обе программы были на .NET и там у каждой программы есть GUID.
Они пытались программно получать этот GUID, но вместо него получали GUID библиотеки самого .NET.

Assembly.GetExecutingAssembly().GetType().GUID

вместо, например,

Assembly assembly = Assembly.GetExecutingAssembly();
var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0];
var id = attribute.Value;

Я для такого обычно просто записывал в коде (литерал) какой-нибудь сгенерированный GUID. Тогда подобные баги невозможны :kolobokbatya:
Интересно, зачем было так делать, есть ли какие-то преимущества у такого способа :thinking:

1 лайк

В YAML для boolean зачем-то сделали кучу вариантов значений

y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

Из-за этого код Норвегии (NO) и север (N) внезапно превращаются в false, а код Онтарио (ON) в true (в YAML строки не обязательно заключать в кавычки). :joy:

noyaml

В YAML 1.2 (2009) вроде бы убрали это.

true | True | TRUE | false | False | FALSE

Ну так они(текстовые интерпретации) все перечисленные и есть логические. Логично и отнесли к булеанам :clkolcool:

Только вряд ли это много кому было нужно, зато подарили человечеству кучу незабываемых часов отладки.

Взял человек “более приятный JSON с комментами”, а он раз и такое подкинул. :clkolgirl_werewolf:

Кто-то даже сайт создал https://noyaml.com

Похоже что нужно. Этот феномен можно отнести к высказыванию лень двигатель прогресса. Так потихоньку и придем к микрофонной IDE.
Пробухтел в микрофон - не работает код. Оп-ля и отладчик провернул все что нужно.
Надиктовал - есть задание не знаю как начать. Оп-ля и IDE сваяла листинг.
:clkoldance2:

Но и JSON тоже далеко не торт. Автор впихивал спецификацию на визитку, но не уточнил кучу деталей, и даже не версионировал его (типа это просто алфавит и не надо в него ничего добавлять). В итоге куча разных спецификаций (тоже не идеальных) и парсеров.

И в том числе там Юникод, с которым тоже всё сложно.
http://replicated.cc/concepts/unicode — статья о том, что большая часть сложностей в Юникоде из-за мало кому нужных фич, мертвых языков и т.п.

The Pareto principle says 20% cost gives 80% value. Well. With Unicode, it is more like 99.999% of costs gives 0.001% of value. Or vice-versa.

Unicode belongs to the same family of interoperability standards as IP or HTTP or Ethernet. For such a standard to work, everyone in the world must be able to read and write it. Because that’s what it’s for! Such a standard must be 80/20 by design because it imposes costs on basically everyone. For every feature, we should ask whether it is worth imposing this cost on everybody in the world .

Exactly the same logic applies to any interoperability standard. A good standard is 80/20 and final.

Где-то глубоко в ядре винды есть функция, единственная задача которой — исправить имя какой-то Майкрософтовской Bluetooth мышки (удалить символ ®, который почему-то оказался там не в той кодировке).

https://twitter.com/XMPPwocky/status/1261130110003843073

Эксель прогнул ученых :slight_smile:

27 генов переименованы потому что Эксель заменял их на даты. SEPT1 стал SEPTIN1 и т.п.

Странная фигня.

Цитата #453530 – Цитатник Рунета

xxx: API РЖД тексты ошибок присылает капсом. При переводе в нижний регистр все возможные буквы оказываются латиницей.
yyy: в русскоязычных сообщениях об ошибках?)
xxx: Да, сообщения типа “ПО ЗАДАННЫМ ТРЕБОВАНИЯМ НЕТ СВОБОДНЫХ МЕСТ”. Делаешь lower case, получаешь
“по задаhhыm tpeбobahияm het cboбoдhыx mect”
yyy: o_O
xxx: Когда мы это нашли, то рабочий день тут же закончился, и мы всей командой пошли в бар.

https://twitter.com/mikeozornin/status/1371182460201996291

Ладно бы еще если бы все буквы были латинские, тогда можно было бы объяснить отсутствием поддержки кириллицы где-то. Но тут же встречаются и кириллические буквы. :thinking:
Разве что может быть сделали латиницу для тех букв, которые нормально в ней смотрятся (без Б —> 6, Я —> 9| и т.д.), чтоб хоть частично работало там, где не поддерживается кириллица.

Я специаально так делаю для регистрации в базе номеров авто приходящих на предприятие на погрузку. Все в капсе и одинаковые по написанию обязательно в латинице. А что бы искать потом без проблем по номеру, не взирая на то, как этот номер ввел бестолковый пользователь. Возможно и у них что-то там подобное, ну заодно через такой блок перекодировки и сообщения об ошибках прошли

Дык, буквы, которые в РФ сейчас допускаются в государственных регистрационных знаках (ГРЗ) , только такие и есть - только те, что имеют одинаковое написание в кириллице/латинице.

википедия

У нас тоже вроде так. Но можно ввести AE6040BB как латиницей, так и кириллицей, а можно и вперемешку. Кого и как угораздит, то и правильно с точки зрения пользователя. А еще изредка попадаются у древних грузовиков номера из прошлой жизни, с буквой Щ например )