Полностью согласен по поводу IDN, это надуманная отговорка. Между xn--e1afmkfd.xn--e1aybc и xn--e1afmkfd.xn--e-7tbbc разницы нет, оба выглядят одинаково бессмысленно.
Можно было пойти простым и эффективным путём — просто записать строки в LMDB, открыв базу данных с флагом MDB_NOSYNC. На Python это делается почти элементарно:
import lmdb
env = lmdb.open('dbenv', map_size=1024*1024*1024*32, sync=False)
for line in map(str.strip, open('file.txt').readlines()):
if line:
k, v = line.split(':')
with env.begin(write=True) as txn:
txn.put(k.encode(), v.encode())
env.sync()
Вы так говорите «табличный лукап», как будто это что-то плохое.
Как будто.
Да, поместится в L1 и будет работать быстро, увеличивая давление на кеш. Если положить на одну чашу весов два предсказуемых if, а на вторую — переход по таблице 384 байта, то я не ручаюсь, что из этого будет быстрее. Надо проверять.
На всякий случай приведу нормальный перевод The Zen of Python:
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать правила.
При этом практичность важнее безупречности.
Ошибки никогда не должны замалчиваться.
Если не замалчиваются явно.
Встретив двусмысленность, отбрось искушение угадать.
Должен существовать один — и, желательно, только один — очевидный способ сделать это.
Хотя он поначалу может быть и не очевиден, если вы не голландец.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем прямо сейчас.
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно, хороша.
Пространства имён — отличная вещь! Давайте будем делать их больше!
Как вы обеспечиваете «No crash recovery needed. No maintenance is required.» без WAL?
Если коротко, в LMDB используется CoW, из-за чего при падении процесса отпадает необходимость в транзакционном журнале — больше не нужна "перемотка" транзакций с контрольной точки. В то же время, отсутствие WAL затрудняет реализацию репликации.
А я один на последних билдах (в пределах двух недель или месяца) испытываю достаточно частое зависание браузера в Windows?
Не один. На моей Windows 7 SP1 после обновления вивальди случилось так, что иногда он начинает жрать 100% ЦП и закрывать его приходится через диспетчер задач) Я так и не смог выяснить, что это было.
Затем, чтобы быть уверенным в исходе событий. Потому что если я пишу функцию умножающие числа я не знаю как она себя поведет при умножении килограммов на мандарины. И самое главное, я не хочу об этом думать.
Умножение килограммов на мандарины это проблема слабой типизации и неявных преобразований, а не проблема динамической типизации как таковой. В JavaScript можно сделать [] * "abcdef", но Python этого не разрешит.
Или я параноик или члены консорциума W3C попросту продались лоббистам из медиакорпораций.
Не параноик. W3C был сожран WHATWG, который контроллируется конгломератом из Google, Apple, Mozilla и Microsoft. Теперь W3C больше не занимается публикацией собственных спецификаций, вся работа происходит на полях WHATWG. https://www.opennet.ru/opennews/art.shtml?num=50764
Единый интерфейс. Реализация приложения отделена от сервиса, который оно предоставляет. То есть пользователь знает, что оно делает и как с ним взаимодействовать, но как именно оно это делает не имеет значения. При изменении приложения, интерфейс остаётся прежним, и клиентам не нужно подстраиваться.
Развиваемому вместе с HTTP Роем Филдингом, REST'у было предназначено использовать HTTP 1.1, в качестве транспорта.
Не было. REST как архитектурный стиль не ограничивает приложение конкретным протоколом, о чем сам Филдинг писал как в диссертации, так и позже в своем блоге.
Недавно — это около часа. Я бы не писал, если бы вчера не столкнулся с этим. Название не гуглилось (его ещё вспомнить надо), хотя статья на зеркале itnan.ru уже была.
Полностью согласен по поводу IDN, это надуманная отговорка. Между
xn--e1afmkfd.xn--e1aybcиxn--e1afmkfd.xn--e-7tbbcразницы нет, оба выглядят одинаково бессмысленно.Нет биндинга для Python. Я уже несколько раз натыкаюсь на MDBX (и поставил звезду за труды), в связи с чем у меня два вопроса:
Можно было пойти простым и эффективным путём — просто записать строки в LMDB, открыв базу данных с флагом MDB_NOSYNC. На Python это делается почти элементарно:
Как будто.
Да, поместится в L1 и будет работать быстро, увеличивая давление на кеш. Если положить на одну чашу весов два предсказуемых if, а на вторую — переход по таблице 384 байта, то я не ручаюсь, что из этого будет быстрее. Надо проверять.
Вызов __ctype_b_loc происходит до цикла. Он возвращает таблицу, по которой уже происходит лукап при каждой итерации.
На всякий случай приведу нормальный перевод The Zen of Python:
Если коротко, в LMDB используется CoW, из-за чего при падении процесса отпадает необходимость в транзакционном журнале — больше не нужна "перемотка" транзакций с контрольной точки. В то же время, отсутствие WAL затрудняет реализацию репликации.
Есть неплохая бумага от автора LMDB по внутреннему устройству этой базы данных.
http://www.lmdb.tech/media/20130406-LOADays-LMDB.pdf
Вместе с Gevent будет.
Не один. На моей Windows 7 SP1 после обновления вивальди случилось так, что иногда он начинает жрать 100% ЦП и закрывать его приходится через диспетчер задач) Я так и не смог выяснить, что это было.
Strong typing != static typing. Это не одно и то же.
Умножение килограммов на мандарины это проблема слабой типизации и неявных преобразований, а не проблема динамической типизации как таковой. В JavaScript можно сделать
[] * "abcdef", но Python этого не разрешит.https://www.infoq.com
InfoQ — статьи и новости из мира IT от профессионалов для профессионалов. Публикации рецензируются)
Не параноик. W3C был сожран WHATWG, который контроллируется конгломератом из Google, Apple, Mozilla и Microsoft. Теперь W3C больше не занимается публикацией собственных спецификаций, вся работа происходит на полях WHATWG.
https://www.opennet.ru/opennews/art.shtml?num=50764
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5
https://ru.wikipedia.org/wiki/REST#4._Единообразие_интерфейса
https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Не было. REST как архитектурный стиль не ограничивает приложение конкретным протоколом, о чем сам Филдинг писал как в диссертации, так и позже в своем блоге.
CRUD не является частью ограничений ни REST, ни HTTP.
Включая, но не ограничиваясь. Метод POST предназначен для передачи данных на сервер с целью дальнейшей обработки — он используется для любых действий, которые не нужно стандартизировать в рамках HTTP. До RFC 5789 он был единственным легальным способом вносить частичные изменения.
https://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
https://tools.ietf.org/html/rfc7231#section-4.3.3
Есть отличная статья, которая рассказывает о сетевой механике в Source. Затрагиваются такие проблемы, как интерполяция, лагокомпенсация, предсказание ввода. https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking:ru
Недавно — это около часа. Я бы не писал, если бы вчера не столкнулся с этим. Название не гуглилось (его ещё вспомнить надо), хотя статья на зеркале itnan.ru уже была.
Ещё раз. Это не работает для недавно удаленных статей.)
Это так не работает для статей, которые были удалены недавно. На всякий случай https://itnan.ru
Не подскажете хоть одно такое зеркало?)
Костная проводимость звука не зашумляет слух.
https://ru.wikipedia.org/wiki/Костная_проводимость