Pull to refresh
35
0
Илья Сазонов @poxvuibr

Software developer

Send message

Во-первых, подход с генерацией ключей в базе данных затрудняет или делает невозможным использование некоторых паттернов проектирования. Например, общий подход к идемпотентности заключается в создании идентификатора на клиенте и отправке его в запросе. Это позволяет легко устранять дублирование и гарантирует, что вы не вставите один и тот же объект дважды, так как легко обнаружить повторяющиеся запросы на вставку. Такой подход обычно невозможен с идентификаторами, сгенерированными базой данных.

Давайте не будем валить в одну кучу тёплое и мягкое. Есть ПОСТОЯННЫЙ идентификатор (с точки зрения хранящейся на сервере информации - идентификатор экземпляра сущности с неограниченным временем актуальности). Который отвечает за контроль уникальности. Есть ОДНОРАЗОВЫЙ идентификатор (с весьма ограниченным временем актуальности, для которого не возбраняется дублирование за пределами разумного периода времени). Который отвечает за одноразовость. Для первого - генерируем идентификатор на сервере и там же используем. Для второго - генерируем случайный идентификатор на клиенте (причём связанный с сеансом клиента, а не сеансом обращения клиента к серверу) и передаём серверу для контроля на предмет повторности выполнения. Так что такой подход невозможен с идентификаторами, сгенерированными базой данных потому, что базе данных в принципе не нужна генерация этого идентификатора. Её задача проверить обращение клиента на повторность - а для этого как раз нужен идентификатор от клиента, причём максимально вероятно обеспечивающий глобальную уникальность. Да, сервер может - но вот оно ему надо? да и затраты сервера на генерацию и передачу - не многовато ли за в общем никому не нужную унификацию этих идентификаторов?

Во-втроых, это усложняет код INSERT, поскольку вы должны убедиться, что возвращаете сгенерированные идентификаторы. EntityFramework под капотом назначает ID сущностям после вставки, но в случае с Dapper вам придётся делать это самим.

SQL-код INSERT не усложняется ни на копейку. И ему в принципе не надо в чём-то убеждаться - ну просто потому что СУБД (1) в принцип не может не сгенерировать идентификатор (2) в принципе не может сгенерировать повторно одно и то же значение. Да, возвращать ему тоже ничего не надо (ну за исключением случаев, когда текст запроса требует) - если клиенту потребуется, он спросит. А если какие-то там прослойки у себя под капотом содержат дополнительный код, который потенциально способен породить описанную проблему, или даже такого кода не содержат - то при чём тут СУБД-то? у неё как раз всё в порядке. Жалуйтесь на кривую прокладку.

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

Да, такая проблема частично есть. Но с ней вполне успешно борются, причём на уровне СУБД. Предзаказ идентификаторов, кэш идентификаторов... Кроме того, сравнивать по скорости/времени генерацию идентификатора, происходящую целиком и полностью в памяти сервера, и вставку записей, требующую достаточно медленных дисковых операций (да даже в случае SSD всё равно по сравнению с работой чисто в памяти - медленных, просто масштаб разницы не столь велик), надо с очень большой осторожностью.

Проблемы в репликации - да, тоже есть. Но тоже проблемы решаемые. А проблемы при масштабировании так и вовсе не проблемы. Особенно при наличии узла-координатора, пусть и динамического. Просто надо не вдруг в процессе эксплуатации обнаружить, что требуется описанное масштабирование и возникли проблемы. Для того же BIGINT раздавать диапазоны размером в INT можно до скончания века - и они не успеют кончиться.

Резюмируя - лично я так и остался не убеждённым в том, что GUID имеет ну хоть какое-то преимущество по сравнению с автогенерируемым INT / BIGINT значением.

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

Да там ничего сложного (PCRE2):

^([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.(?1)\.(?1)\.(?1)$

Прошел год с момента написания статьи. До сих пор пользуюсь в работе, ежедневно. У меня основные комбинации такие:

  • Win-1 - рабочий чат Slack

  • Win-2 - браузер

  • Win-3 - IDE

  • Win-4 - редактор текстов Obsidian, где хранятся мои заметки и планируется работа (аналог org-mode для Emacs)

  • Win-M - почта Thunderbird

  • Win-F - файловый менеджер

  • F1 - терминал xfce4-terminal --drop-down. Но он прописан не через showwin

  • Первые четыре дублируются на клавиатуре - Win + (S)lack, J-Firefox, K-IDE, (O)bsidian. Чаще пользуюсь цифрами, но иногда и так.

Когда (или если) вы добавите ссылки на дела, выигранные в суде — этот совет перестанет быть теоретическим

Найти ссылки не так уж сложно.

В своё время на форуме banki.ru много ссылок постил пользователь "Дмитрий 29" за что ему большое спасибо (я после чтения его постов был подготовлен, правильно написал обращение в банк и банк без вопросов вернул мне деньги по всё тому же 161-ФЗ стоило мне лишь заикнуться в разговоре с руководителем отделения о желании пойти в суд).

Вот навскидку только из его постов
https://www.banki.ru/forum/?PAGE_NAME=message&FID=504&TID=218316&MID=7725747#message7725747
https://www.banki.ru/forum/?PAGE_NAME=message&FID=504&TID=218316&MID=7725792#message7725792
https://www.banki.ru/forum/?PAGE_NAME=message&FID=504&TID=218316&MID=8270030#message8270030
https://www.banki.ru/forum/?PAGE_NAME=message&FID=61&TID=380446&MID=8272133#message8272133


А вот парочка свежих (из Консультанта), которые проскакивали там же, на склянках
https://pastebin.com/rzpzZjSc
https://pastebin.com/xD34FRST

Там тред такой
>>>нет универсальных ценностей
>>есть инстинкты
>инстинктов нет

То есть имеется в виду как раз отсылка к авторитету в виде учебника биологии, что мол, это не личная позиция автора, а за ним целая гора в виде учебника биологии, которая сообщает тебе о том, чтО ты любить обязан, а если не любишь, то ты либо врешь, либо не совсем человек.
UFO landed and left these words here

Есть у нас клиенты, у которых кодовые базы на порядок больше нашей. Соответственно у них имеются специфические проблемы с производительностью IDE, которые не возникают больше ни у кого. Мы с ними тесно взаимодействуем и решаем эти проблемы точечно. Это к вопросу о том, что мы не интересуемся реальными проблемами пользователей (где-то в другой ветке кто-то такое утверждал).

Конечно, если в целом окружающий код императивный, то лучше сделать if и return/break.

Ну то есть вы понимаете, что вопрос не в умении или не умении map/flatMap, а в том, какая у нас вообще задача и какой код вокруг? Просто вы так написали, будто готовы уволить любого, кто isPresent() в коде напишет.


ifPresent — это уныло. Мы можем находиться во вложенном if/while/for, тогда это не поможет. Если же у нас несколько проверок на null подряд, то будет opt1.ifPresent(x -> opt2.ifPresent(y -> opt3.ifPresent( -> {...}))). Ну и, конечно, замена if(opt.isPresent()) на opt.ifPresent() не делает код лучше в 99% случаев. Он не становится более функциональным, менее зависимым от сайд-эффектов, при этом его становится сложнее отлаживать в пошаговом отладчике, удлиняются стектрейсы и т. д.


Я вообще делаю обычно так:


V v = computeOptional().orElse(null);
if (v != null) {
  ... используем v
}

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

К сожалению, без этого параметра запись зависает на 100% и не отдает флешку. Если ее выдернуть, данные покрашатся.
Понаблюдайте за иостат, либо поставьте коньки, они умеют показывать активность в красивых гафиках, вы увидите что процесс продолжается и он не завис, а что что долго ждать придётся это да, но можно ускорить попросив (принудив) систему немедленно слить всё что в кэше на носители, выполняется командой sync (может даже не обычный пользук), в этом случае придётся немного подождать (если много мелких файлов, ждать чуть больше) но обычно можете сами рассчитать приблизительно время по средней скорости. на дрянных флэшках это порядка 4.5мб в секунду, делим размер копируемого и получаем время, засекаем и убеждаемся что всё скопировано за это время. Но изменение грязных блоков, это вынуждение ОС выполнять сброс кэша при достижении указанного порога, оно плохо влияет на производительность дисковой подсистемы. Так что эта палочка на двух кноцах, легче настроить параметры мантирования с указанием что на плохие флешки подключенные к указанному порту выполнять прямую запись )) а на шикарные можно и блоками побольше ))

Но это я как инжеНегра говорю, мне удобно так =) Хотя я согласен с вами, что по умолчанию нужны средние настройки которые будут адекватны на большинстве ПК. Но тут уже либо ждать когда ваш дистрибутив созреет, либо настроить самому, либо сделать флешку/сд с нужными вам пред настройками и ставить с неё, либо сменить дистрибутив на более адекватный =)
Тоже обратил внимание.

Так вот, я слышал, что близ египетского Навкратиса родился один из древних богов тех мест, которому посвящена птица, называемая ибисом. А самому божеству имя было Тевт. Он первый изобрел число, счет, землемерие, звездочетство, вдобавок игру в шашки и в кости, а также и письмена. Царем над всем Египтом был тогда Тамус в великом городе верхней области, который греки называют египетскими Фивами, а его самого богом Аммоном. Придя к царю, Тевт показал свои искусства и сказал, что их надо передать остальным египтянам. Царь спросил, какую пользу приносит каждое из них. Тевт стал объяснять, а царь, смотря по тому, говорил ли Тевт, по его мнению, хорошо или нет, кое-что порицал, а кое что хвалил.

Когда же дошел черед до письмен, Тевт сказал: «Эта наука, царь, сделает египтян более мудрыми и памятливыми, так как найдено средство для памяти и мудрости». Царь же сказал: «Искуснейший Тевт, один бывает способен порождать предметы искусства, а другой — судить, какая в них доля вреда или выгоды для тех, кто намеревается ими пользоваться. Вот и сейчас ты, отец письмен, из-за благорасположения к ним сказал как раз обратное их значению.

В душах научившихся им они вызовут забывчивость, так как здесь не упражняется память: доверяясь письму, припоминать станут внешне — по посторонним знакам, а не внутренне — сами от себя. Стало быть, ты нашел средство не для памяти, а для припоминания. Ты даешь ученикам видимость мудрости, но не истину. Они у тебя будут многое знать понаслышке, без изучения, и будут казаться многознающими, оставаясь в большинстве невеждами и трудными для общения; они сделаются мнимомудрыми вместо мудрых».


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

bugzilla.kernel.org/show_bug.cgi?id=196729
bugzilla.kernel.org/show_bug.cgi?id=199763
www.reddit.com/r/linux/comments/94u116/gnulinux_on_12gb_ram_tablets_how_it_really_works

Причину этой проблемы пытались выяснить разные люди в разное время, но до конца она так до сих пор и не устранена.

Давайте я просто сошлюсь на лекцию Михаила Никитина, с гистограммой, показывающей, что откуда взялось: Происхождение эукариотной клетки. Гистограмма показывает, что из расположенных сейчас в ядре генов те, которые отвечают за белковый синтез и репликацию, пришли от архей (*), а вот как раз метаболизм весь от бактерий. А спустя небольшое время там похожий слайд, который расписывает, от каких бактерий, и преимущественно от альфапротеобактерий. На те же гистограммы ссылается и Дмитрий Леонтьев в лекции "Об эукариогенезе по-взрослому".
Если правда посмотреть эти лекции внимательно и почитать книжку Никитина (бесплатно можно взять на Всенауке), то гликолиз-то как раз уже был у предковой археи (или она его позаимствовала от других бактерий, не предков митохондрий).


Автономности очень немного, вы не можете скажем взять митохондрию одного вида и поместить в клетки другого, также и деление митохондрий происходит по исключительно инициативе хозяина; тут даже нет аналога "рака", т.е. неизвестны случаи, чтобы митохондрии вдруг "вспомнили", что они на самом деле бактерии и начали бесконтрольно делиться; сборка мембранных и других комплексов, вплоть до белков комплекса репликации ДНК митохондрий происходит в цитоплазме и только потом импортируется в строму. Короче, они реально стали органеллой, хотя эндосимбиотическое происхождение никто не отрицает.


(*) вообще говоря, далее в лекции Никитина утверждается, что происхождение линейной организации генома, ядра как обособленного компартмента, появление кэпирования РНК и процесс репликации скорее не просто архейное, а результат воздействия вируса на архею: сначала этот вирус таким способом "портил" рибосомы хозяина, чтобы они синтезировали только его белки по его кэпированым РНК, а потом постепенно перетаскал к себе все гены хозяина, разучился разрушать клетку и стал ядром с линейным геномом, а схема с кэпированием РНК так и осталась.

Вот только у IDE после подобных упражнений начнутся проблемы. И придется после этого писать для нее плагин. И скорее всего, это будет плагин для IDEA, который тоже нужно будет поддерживать. Кому-тот придется расширять файлы синтаксиса для vim, а синтакстическим плагинам вима тоже голову будет переодически сносить. Так что если что-то подобное иметь, то из из коробки либо не иметь вовсе.

Для IDEA (точнее, для JVM и всех Java-приложений) есть волшебная опция -Dsun.java2d.xrender=true
Меня, во всяком случае, она выручила. Если правильно понимаю, суть в том, что по умолчанию Swing рисует всё попиксельно (а X11 передаёт это не как картинку, а как огромный, почти несжимаемый набор команд), а с данной опцией протокол X11 используется «как надо», более эффективно
Моя ныне любимая книга — Worth The Candle by Alexander Wales (ещё в процессе написания). Это веб-фикшн, когда пишут и выкладывают онлайн, частями.
Из известных представителей жанра (в порядке моих личных симпатий)
Worm
Harry Potter and methods of rationality
Mother Of Learning
Unsong
Practical Guide to Evil
Wandering Inn
UFO landed and left these words here
Хотел еще пару лет назад написать статью про thermald, но как-то забыл. Он крутой, он отслеживает показатели разных сенсоров и реагирует на их изменение так, как его настроят. Может, например, замедлять процессор, чтобы температура корпуса не превышала какого-то заданного значения, может регулировать обороты кулера в зависимости от нагрузки, если Embedded Controller не лучшим образом управляет ими.

Ух-х.


Господа, я так сильно горю, что продублирую свой комментарий к аналогичной новости и тут.


(Вдруг кто-то сидит с этой проблемой и даже о ней не знает)


Черт бы с ним с отпечатком.
Почините проблему троттлинга на intel процессорах!


Ее признали уже сколько… два года назад?
Выпустили фиксы на 2-3 своих ноутбука, а для остальных воз и ныне там:


https://docs.google.com/document/d/1MsqSYt0f_vU72pGGTWueeEgTBzd-HIz4ODHLmNOv16o/edit


Мой T480 "сертифицирован" убунтой и тем не менее на нем есть эта проблема из-за отсутствия драйверов.


У меня в голове не укладывается, КАК ТАК вообще.


Благо есть воркараунд aka "грязный хак" (даже несколько), инструкция к которому доступна по ссылке выше.

UFO landed and left these words here

Information

Rating
Does not participate
Date of birth
Registered
Activity