All streams
Search
Write a publication
Pull to refresh
56
0
Alexander @speshuric

Пользователь

Send message

Вот, кстати, нифига не "микро". Там код m_app->m_renderer->getActiveCamera() — то есть кроме переходов по указателям еще и вызов функции. Оно, конечно, теоретически может эта функция недетерминированная и выдаёт каждый раз разный результат, но тогда мне страшно за мозг программиста, которому с этим жить. А если нет, то это может стоить очень дорого.
Я в своё время (лет 10-12 назад) работу с выборками ADO через COM нехитрыми приёмами выноса подобных выражений ускорял в несколько раз.
А недетерминированные выражения в T-SQL выносил из запросов наружу менее года назад — фильтр по недетерминированному выражению (например, несколько сравнений с getdate() в запросе) может генерировать очень плохие планы запросов.

Калька с английского competency — в данном случае "правомочность". Не те, "которые компетентны", а те "которые правомочны".

Кроме того, что вы написали, есть еще такие "весёлые" вопросы:


  1. Что делать, если акции компании торгуются на рынке с free-float > 20% (как отсечь иностранных владельцев, если их много и они в сумме >20%)
  2. Что делать с сервисами P2P или децентрализованными, если у них нет одного владельца.
  3. Формально под действие можно подвести и платёжные сервисы (т.е. и VISA и PayPal и чёрта лысого)
  4. Формально под действие можно подвести любой сервис бронирования (билетов, жилья, туров — вы booking упомянули, а что насчёт Amadeus?) и продажи (AliExpress туда же).
  5. А как насчёт отнесения по "технологии обработки данных"?

Причём если попробовать придумать простые критерии (например, 10+М пользователей и не меньше 10% в РФ), то либо всё равно остаётся неприемлемый, на мой взгляд, collateral damage, либо слишком легко вывести из-под действия закона.

Всё еще хуже.


Сайт и (или) страница сайта в сети «Интернет», и (или) информационная система, и (или) программа для электронных вычислительных машин, использование которых предоставляет их владельцу возможность сбора информации о пользователях.

Туда вообще почти всё что угодно подходит. И ОС с телеметрией, и мессенджеры, и почтовые сервисы, и браузеры (vivaldi, chorme) и даже P2P сервисы. Не подходят только ядра открытых ОС (пока они их использование не "предоставляет их владельцу возможность сбора информации о пользователях") и библиотек. Туда формально можно отнести JetBrains (собирает же информацию, а для нас — платных пользователей — еще и не обезличенную). Легко можно отнести github, gitlab, gmail, aws, cloudflare, azure. Всё это отдано на откуп "правительственной комиссии", которая по предложению РКН принимает решение исходя из "оценки количества пользователей такого ресурса, объема и состава накапливаемой информации, ожидаемого эффекта от его реализации для развития в Российской Федерации информационной и коммуникационной инфраструктуры, технологий обработки данных".


Причём если попытаться придумать простые критерии (ну например 10+М пользователей и не менее 10% в РФ), то всё равно либо будет много попадать лишнего, либо легко вывести (снизив % количества пользователей РФ). Совершенно непонятно, что делать, если ресурс P2P — у него в принципе может не быть владельца.


Проблема уже не в том, что они на Яндекс покусились. Это как бы плохо, но это "целевое" действие закона. Здесь проблема не в целевом действии закона, а в побочных эффектах.

«хреллионов» вполне бы подошло
xxx: а знаете как увольняют хаскель-программиста? "собирай свои монадки и уматывай!"

Отсюда


ну, для этого отдельные 1с-ники пишут, например, внешние компоненты.

  1. Внешних компонент за последние лет 20 разработано на пару порядков меньше, чем хотелось бы. Они не особо стали кросс-платформенными (хотя стандарт это как бы позволяет). Нет ни серьёзных интеграционных решений, ни аналогов NumPy, ни аналитических компонент. Оглянитесь на Python, который достаточно близок по многим характеристикам к 1С — там всё это есть.
  2. Разработка внешней компоненты — сразу кратно растущий ценник. Тут начинают грустить не разработчики, а менеджеры и спонсоры. Разработка тиражируемой компоненты — умножайте еще на 10. Ну и самое главное — это уже вне 1С. Из пары дестяков хороших разработчиков в среднем найдётся, наверное 1-3, которые осилят. Потому что знают много не 1С-ного.
  3. Внешние компоненты ОЧЕНЬ многое сами по себе решить просто не в состоянии. Пара простых примеров:
    • Асинхронный ввод-вывод, реактивное программирование. Тут проблема в том, что для таких приёмов нужна мощная поддержка со стороны платформы (коллбэки банально), а её в нынешних версиях нет.
    • Серверный слушающий процесс. Ну, например, слушать UDP и отвечать, при наличии определённых сигналов — что-то делать с документами. Нет проблем написать такой листенер на большинстве языков (и даже есть способы связать с 1С). Но это вообще не про ВК. И не про 1С.

ЗЫ: ВК писал. И "старые", COM-овые, и "новые" "кроссплатформенные". Дизайн всех этих технологий явно пахнет 98-м годом :) Да и у всей платформы 1С сейчас груз архитектурных решений 2001-2006 годов с каждым годом всё заметнее.

Глобальное изменяемое состояние уровня приложения — безусловное зло. Но тут есть еще один момент, которого нет в статье. Есть несколько кейсов, когда глобальное состояние есть и с этим ничего не сделать:


  1. СУБД. Ладно, когда ваше приложение снаружи, вы хотя бы можете сделать вид, что это не ваше дело (на самом деле — нет). Но в финансах много legacy приложений, где основной код написан на PL/SQL или T-SQL. И вот это уже ад в аду.
  2. Когда вы пишете ОС или работаете с железом.
  3. Когда вы пишете своё (нагруженное) сложное приложение (ту же СУБД или что-то подобное)
  4. Когда вы пишете что-то общее уровня приложения. Например кэш (к упомянутой уже СУБД)
    Все эти случаи имеют много глобальных хранилищ состояний той или иной степени модульности и управляемости. Это сильно усложняет и разработку, и тестирование.

Да ладно бы так только с "чужеродными". У меня года три назад был казус. Решил я собрать на тот момент недавно вышедшие coreclr и corefx. А тогда и документации было меньше и процедура хрупкая и .net core вообще еще агукала. И если coreclr я таки смог запинать за вечер, то corefx где-то в недрах msbuild что-то куда-то не туда лез, в какой-то не тот путь из какой-то переменной окружения другого msbuild и так и не собрался. Да, я понимаю, что на компе стояло штуки 4 разных VS, гора всякого "околодотнетового" тулинга, а ОС изначально была установлена году в 2009.


В чистой вируталке, конечно, собралось на ура. Более того, в чистой Убунте — тоже легко собралось (решил попробовать пока пытался побороть Windows). Да-да, я видел это: дотнет, который в винде не собирается, а в Убунте с первого раза.

Как обрабатываются поля с timestamp?
Как обрабатываются триггера? А DDL? А Logon?
Как переносить BLOBы? А с учетом хранения в filestream?
Нормально ли обрабатываются дурацкие set ansi nulls off?
Что делать, если объекты содержат синтаксические ошибки?
… И еще вагон граблей

Threadripper вроде официально только 128ГиБ. Там, как минимум, по слотам DDR сложно больше: 8 слотов на юзерских MB. А nonECC планки DDR4 больше 16 пока отсутствуют на рынке.
Вот у Эпиков — да, до 2 ТиБ (не помню — на сокет или на сервер).

Да там уже и так хватает. Например, csc.exe, кажется, уже у всех есть в C:\Windows\Microsoft.NET\, как минимум (у меня их штук 20 по диску находится). А есть еще там же vbc и горы интерпретаторов (vbscript, powershell, jscript и прочей мелочи). Так что компилятором меньше, компилятором больше.

Фразу «Код, использованный в статье, открыт...» прочитал как «Кот, использованный в статье, открыт...» — задумался. Перечитал.

Несмотря на то что в статье даже упомянута NP-полнота, главная проблема статьи — решение локальной проблемы без математического взгляда на неё.
На самом деле решение сапёра не надо выводить из перебора и локальных правил, а наоборот, проще сформулировать и проанализировать саму задачу. В каждый момент времени игровое поле (открытые клетки с числами мин вокруг, закрытые и помеченные) представляет собой достаточно простую систему линейных уравнений (СЛАУ).


  • Каждая закрытая клетка — переменная x[i], которая может принимать значение 0 — нет мины, или 1 — есть мина.
  • Общее количество мин известно — N — вот у нас первое уравнение sum(x[i])=N
  • Каждая открытая клетка с нераскрытыми и непомеченными — ещё одно уравнение. Если в такой клетке указано, что вокруг a[j] мин, то для соседних x[i(j)] будет уравнение sum(x[i(j)])=a[j]
  • Помеченные клетки проще всего вычитать из соседних открытых.
  • Общее количество переменных не превышает количества клеток поля. Посмотрел сейчас — это всего 16*30=480 в режиме "Эксперт". Ну право же — даже банальным Гауссом можно чуть ли не на порядок большие СЛАУ решать. Но тут Гаусс почти не нужен, потому что...
  • … СЛАУ разреженная. В ней только одно уравнение со всеми переменными с коэффициентами 1. Все остальные — не более 8 переменных с коэффициентами 1.
  • А еще упрощает, что нам не нужно искать пространство решений, а достаточно найти точное значение только одной из переменных x[i]: если в этой переменной 0, то у нас появляется новое уравнение, а если 1, то одно уравнение становится проще.
  • А если даже ни одно точное решение переменных не найдено, то из коэффициентов СЛАУ можно достаточно легко можно получить значения для сравнения вероятности того, что там бомба.

Реально даже в середине игры будет получаться СЛАУ не более чем из 50 уравнений. Причем с кучей возможности оптимизаций (разреженная, коэффициенты 0 или 1, значения переменных допустимы только 0 и 1, свободные члены все кроме одного в 1..8, все уравнения, кроме одного — не более 8 переменных, часто матрица разваливается на отдельные кластеры).
Да, есть ситуации (как приведённая в статье 6х6 на 4-м рисунке), что в действительных числах решений много, а в {0, 1} только одно. Но такие ситуации легко диагностируются (неупрощаемая часть СЛАУ с большим количеством переменных), для небольших ситуаций можно использовать перебор. Кстати, в той картинке на 8 мин и 20 закрытых ячеек полный перебор — всего лишь 125970 вариантов.
Так что, NP-полнота на этих объёмах не делает ни жарко, ни холодно. Упомянутых ситуаций, в которых глобальный солвер не может закончить вычисления за разумный промежуток времени тут практически не может быть.


Я писал такое решение Сапёра очень-очень давно (году в 2001).

Написаны 1,2,3 и 4А. За «полтома» можно считать «Volume 1, Fascicle 1» (в русском переводе Том 1 выпуск 1) и 2 первые части того, что войдёт в 4B (если Д.К. успеет): «Volume 4, Fascicle 5» и «Volume 4, Fascicle 6» (русских переводов не видел).
И, да, когда я его первый раз читал, то он тоже был трёхтомник, а в книге «Язык программирования C++» Страуструпа шаблоны еще считались свежей фичей («Однако, шаблоны типа и обработка особых ситуаций относятся к самым последним расширениям языка, и возможно, что ваш транслятор их не содержит.»)
Ну нет же противоречия. «Никогда не вызывается» — как факт эксплуатации системы и «не может быть вызван» (плюс, говоря про стат. анализ, надо добавить «и это можно определить статическим анализом») — как характеристика кода. Два разных утверждения. Из второго следует первое, из первого второе — нет.

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

Позвольте не согласиться. Тут важен контекст.
Кнут, судя по текстам и интервью, перфекционист и дотошный зануда (это не оскорбление, а комплимент), причем с высокой самооценкой с определённым высокомерным снобизмом (оправданно). При всём перфекционизме он умудрился написать 4,5 тома, причем по полноте охвата темы аналогов нет. В качестве учебного пособия я могу этот четырёхтомник сравнить только с монументальным Ландау-Лившицем, но он не настолько пропитан занудством и перфекционизмом. Кнут, понимая, что он перфекционист и дотошный зануда пишет труд, который заведомо его переживёт. Несмотря на как бы "стремительное развитие" CS, он выделил тот слой, который будет устаревать очень-очень долго.
Предложение о поиске опечаток, мне кажется, несёт 3 идеи:


  1. Обещание, что ошибок немного.
  2. Шлифовка текста до состояния "оставить потомкам". Здесь есть добрая доля здорового тщеславия, но если капелька тщеславия помогла написать "Искусство программирования", то это оправданная цена.
  3. Ещё тема про опечатки — она не совсем про деньги, и, даже, возможно, не совсем про ошибки. Понимая, что книга не простая для чтения, но требует внимательного чтения Д. Кнут добавил элемент геймификации — ачивку за внимательность.
В .NET (структура BigInteger), в JDK (класс BigInteger), в V8 (тип BigInt) и в GNU MP (тип mpz_t) используется основание 2^32 (беззнаковое 32-битное целое). Написать arbitrary precision арифметику с большим основанием (напр. 2^64), наверное возможно (придётся использовать промежуточную 128-битную арифметику), но мне кажется, что на существующих процессорах весь выигрыш сожрётся затратами на обслуживание этой 128-битной арифметики. Ну и прощай переносимость, конечно.
Это же не про плавающую точку. Как, например, вы найдёте в логарифмах первые 20 чисел Мерсенна?

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity