bird

[header]

Это субжурнал для netch по тематике IT. Все вопросы - к оригиналу.
Заголовок журнала - из юморески журнала "Информатика и образование" района 1988 года. У кого есть экземпляр - киньте plz хотя бы скан пары страничек с ним :)
Комментарии к постингу скрываются, если хотите что-то написать лично.
bird

Безразличие к регистру - ошибка на миллиард долларов

Новая коллега осваивает работу с нашими продуктами. При этом у неё мак (целевая обстановка - Linux, полностью проверяется в виртуалке).
А у нас в репе в одном каталоге рядом registrar.cxx и Registrar.cxx.
Коротко:
1) head с явным указанием имени - показывает оба с разным содержимым.
2) ls пишет только один из них, Registrar.cxx.
3) "причем я клонила через XCode и в этой репе только с большой, а отдельно клонила через консоль и там только с маленькой"
"я хотела скопировать файл с маленькой буквы в папку где есть с большой, а он мне предложил его перезаписать"

В нормальных юниксах файлы не путаются. На винде хотя бы жёстко один файл. А тут то один, то два, и фиг поймёшь, от кого чего ожидать.

Переименуем, конечно, но повод обсудить в общем случае.

Стандартные аргументы в пользу регистронезависимости: облегчение человекочитаемости. Это миф: её путают с человекоозвучиваемостью. Регистр не должен быть важен, например, в имени человека (хотя и тут могут быть тонкости). Но я не знаю, в каком случае с экрана будет читаться что-то в шрифтах, которые не различают регистр. И совсем не понимаю, почему и зачем различие регистра считается важнее, чем 100500 других различий.

Почему такие FS различают «foo.docx», «foo.docx », «foо.docx» и «fo​o.docx» (кто увидит разницу?), но не различают «foo.docx» и «Foo.docx»? И что будет в случае İı (см. Turkey test)?

Или вот:

> А у винды есть таблица преобразований для того что бы большие и маленькие буквы не отличались и как прнято в Микрософт в разных местах эта таблица может отличаться. В консоли файл создаётся, а explorer — переименовать файл не может, то кавычки не такие и файл не найжде, то пробелы в начале или конце файла и амба.

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

Но что за повышенный бред на маке?

This entry was originally posted at https://netch80.dreamwidth.org/51446.html. Please comment there using OpenID.
bird

(no subject)

Всякие cv.notify() пробуждают одного ждущего. Всегда есть вариант notifyAll(), это понятно. Иногда есть вариант одним вызовом пробудить нескольких, это не очень понятно (ну разве что для случая одновременного добавления толстой пачки заданий в очередь). Но не видно другого: где-то важно пробуждение в FIFO порядке, а где-то полезнее в LIFO (особенно во всяких пулах нитей, когда лучше передать новую задачу самой последней из завершившихся - её состояние ещё закэшировано, и всё такое).

Ожидаю увидеть интерфейс типа:

notifyFirst(count = 1)
notifyLast(count = 1)
notifyAll()

но нигде такого не видел. Почему? This entry was originally posted at https://netch80.dreamwidth.org/50991.html. Please comment there using OpenID.
bird

braces...

Когда в C++ не хватило трёх видов скобок, на шаблоны применили <>. Выглядело в начале хорошо, но получилось в итоге ужасно (грабли парсинга знают все, кто писал на C++, C# и ещё куче потомков).
По-нормальному нужно наперёд придумать до десятка новых видов скобок и добавить их в Unicode, чтобы хватило на все извращения. Но нужен художник, чтобы придумать оригинально (в смысле отличия от букв-цифр, от старых скобок и друг от друга). У меня хватает фантазии только дорисовать колечки и завитушки.

Параллельно обсуждение в FB. This entry was originally posted at https://netch80.dreamwidth.org/50814.html. Please comment there using OpenID.
bird

(no subject)

Обновление фряхи потребовало спецдвижений, ибо:

# df /
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0s1a 771M 581M 128M 82% /

# ls -l /usr/bin/clang
-r-xr-xr-x 6 root wheel 70607108 Sep 5 00:02 /usr/bin/clang

===> usr.bin/clang/clang (install)
install -SCc -s -o root -g wheel -m 555 clang /usr/bin/clang
strip: creation of /usr/bin/INS@Mdos failed: No space left on device
install: strip command strip failed on /usr/bin/INS@Mdos

требовать двойного размера для strip от столь убойного бинаря это пять. косяков.

надо бы с ней радикально что-то решать, но лень и карантин... This entry was originally posted at https://netch80.dreamwidth.org/50375.html. Please comment there using OpenID.
finch

(no subject)

Убедился, что старое правило "своп не менее двух RAM" актуально и сейчас, и особенно для лаптопа, в котором всего 8GB оперативки. Было 8GB свопа, и я не успевал замечать, как всё выедалось браузерами и начинался тяжёлый OOM. С 24, надеюсь, тормоза придут раньше. Или при NVMe надо умножать на 5?

Это в продолжение предыдущей заметки про выжирание памяти... клин начинался таки с исчерпания свопа. This entry was originally posted at https://netch80.dreamwidth.org/50109.html. Please comment there using OpenID.
bird

(no subject)

На лаптопе открыть фейсбук почти гарантированно приводит к выжиранию всей памяти (даже OOM не помогает), так что сейчас стараюсь в него поменьше ходить. Единственная разница с домашним и рабочим десктопом - объём RAM: 8GB против 16 и 32. А цены на RAM не падают с 12-го года.
От того, что пишу на Питоне, начинаю чувствовать себя преступником. This entry was originally posted at https://netch80.dreamwidth.org/49736.html. Please comment there using OpenID.
bird

(no subject)

Consider a binary search tree (AVL, red-black, whatever). The goal "find the least key strictly greater than the specified one" ("upper_bound" in C++ STL, higherEntry//higherKey in Java, etc.) can be implemented in manner (Java-like pseudocode):

current = root;
bestsofar = null;
while (current != null) {
  if (example_key < current.key) {
    bestsofar = current;
    current = current.left;
  } else {
    current = current.right;
  }
}
// return for KV extracting
return bestsofar;


This can be improved with optimizations (e.g. C5 adds special processing case without comparings if found exact match), but the main principle remains that we use single pass from the root to a leaf.

But Java TreeMap implementation uses strange variant (the same at least in versions 8...13):

    Entry<K,V> p = root;
    while (p != null) {
        int cmp = compare(key, p.key);
        if (cmp < 0) {
            if (p.left != null)
                p = p.left;
            else
                return p;
        } else {
            if (p.right != null) {
                p = p.right;
            } else {
                Entry<K,V> parent = p.parent;
                Entry<K,V> ch = p;
                while (parent != null && ch == parent.right) {
                    ch = parent;
                    parent = parent.parent;
                }
                return parent;
            }
        }
    }
    return null;


so, in some cases it backtracks using "parent" link to find the place it started passing only left-side links before final right-side dead end. (Really, all 4 key-based inexact searches utilizes this way, with minor differences and mirrored conditions.)

What case is being optimized with this approach?

This entry was originally posted at https://netch80.dreamwidth.org/49623.html. Please comment there using OpenID.
  • Current Mood
    amused amused