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

В 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