?

Log in

No account? Create an account

Discreet · and · not · discrete.


Do you want to crack jokes about it or do you want me to go?

Recent Entries · Archive · Friends · Profile

* * *
Мама была "в отпуске" 6 дней. ;)

Мы с Васей были вдвоём.

* * *
Как выяснилось, я неправильно помню историю ParSci и Tweag.

Поэтому прошу не обращать внимание на мои замечания по поводу Tweag в предыдущем посте.

* * *
Если у вас есть алгоритм на графах, попробуйте сформулировать его в терминах линейной алгебры и матрицы смежности. Например, clustering coefficients вычисляются через третью степень матрицы смежности с небольшой обработкой. Включая и алгоритм вычисления обновлений для изменений матрицы смежности.

Это приводит к простой возможности разделить данные на несколько машин, а также к возможности использовать разные эффективные алгоритмы работы с матрицами, включая оптимизированные алгоритмы умножения матриц (см. hypersparse matrix multiplication и SUMMA).

Здесь мы подходим к необходимости распознавать алгоритмы, записанные пользователем в DSL на циклах, допустим. Ну, это уже было украдено до нас, неоднократно.

Вся индустрия ПО о-ши-ба-ет-ся, особенно, та часть которая "я _________ (датасайнтист/доктор/инженер/финансист - подчеркнуть или вписать), а не программист". Как я уже рассказывал, Amgen обратился в ParSci за решением задачи корректности анализа статистических данных - треть медицинских статей содержала ошибки типа "у эксперимента 1 p=0.04, у эксперимента 2 p=0.038, поэтому мы считаем доказанной гипотезу эксперимента 2" (прямое сравнение p-значений). По идее, отрубив возможность сравнивать p значения напрямую (нет реализации Ord), мы, типами, ограничивали бы возможность допущения ошибок такого типа, получая из Хаскельного кода структуру анализа эксперимента и получения выводов. Они заказали у ParSci библиотеку подключения к R, для использования уже отлаженных и оптимизированных алгоритмов с улучшенными типами, но, как известно, работа ушла на сторону и появился Tweag (если я правильно понимаю).

В дни моего использования Data.IntMap он не был завязан на конкретное представление целого, как ключа. Поэтому его можно было перепилить под меньшее целое (например, 32 бита) и это радикально увеличивало производительность - и мусора меньше, и с кешем получше и, если это кто ещё не знал, 64-битная платформа лучше работает с 32-битными значениями. Поэтому разреженные матрицы связности я хранил в IntMap (IntMap a), что, в сумме позволило обогнать код на Си (clustering coefficients) в десять (10) раз по скорости.

Почему так?

Потому, что IntMap уже сортированные. И их пересечение имеет сложность O(n). При анализе безмасштабных графов вы в обязательном порядке зайдёте на узел со связностью O(количество узлов графа) - так уж устроены эти графы.

Код на Си использовал несортированное представление связности узла - он сперва копировал в буфер, потом сортировал и после выполнял пересечение для сортированных представлений. То есть, при старте с пустого графа выполнялось O(N) сортировок сложностью O(NlogN) для пересечений и O(N) вставок. В сумме сложность была O(N^2logN). При использовании сортированного представления на IntMap мы получаем O(NlogN) сложность вставок и O(N^2) сложность пересечений. Разница на графе в 16 миллионов узлов получилась в десять раз - то есть, код на Хаскеле был медленный (должно было получиться 24 раза), но всё равно быстрее Си.

Что самое приятное, я всё это проделал "не приходя в сознание" - взял сперва Data.Map, потом Data.IntMap, потом поменял ключ в IntMap и вуаля! получил довольно быстро работающую программу.

Вот, вроде, и всё.

PS
История с Tweag уточняется. Может быть, я неправильно помню.
* * *
Современное состояние дел с программированием на Haskell чрезвычайно и требует скорейшего вмешательства высших сил.

Наличие cabal файлов и составление проектов из них, вкупе с текущей реализацией самого cabal, делает невозможным программирование с исследованием (exploratory programming). Потому, что вы, сделав cabal (new-)repl в текущем проекте, не можете простым образом загрузить файл из проекта, который использован в зависимостях вашего проекта.

В переводе на русский, если ваш проект содержит ссылку на проект abanamat с Control.Abanamat, который использует Funck.Russian из проекта funcking-i18n, то вы не можете выполнить ":m Funck.Russian" напрямую - надо переходить в другой проект. Таким образом, для понимания работы требуется больше движений, чем надо.

Так же, cabal местами чрезвычайно "последовательный". Из недавнего - я ждал порядка 15 минут окончания выполнения тестов happy, а ещё через некоторое время - окончание тестов alex, тоже заметные минуты. В это время ничего не собиралось. Ну, и даже на ноутбуке с 16Г памяти надо ограничивать параллельность оного кабала - иначе вы в обязательном порядке напоритесь на работу нескольких сборщиков (ld - он долгий!) одновременно, что вызовет откачку памяти и неработоспособность системы в целом. Приятная такая вишенка на торте.

Теперь перейдём к определению зависимостей внутри пакетов. На самом деле никого не интересует, какая версия у пакета. Интересна функциональность. Есть ли у функции sdL из пакета butic второй параметр с типом Zefirity, или нет? А что, если в версии 0.1 он был, потом, в версиях с 0.2.3 до 183.7.15.144 включительно его не было, а в версии 192.6 он снова появился? Надо ли мне ограничивать версии пакетов с помощью связей вида butic >= 192.6 || butic < 0.2.3? Или мне надо указать, что в sdL второй параметр должен иметь тип Zefirity? Или, вообще, "вот такой тест должен выполняться".

Я очень странно себя чувствую. Вроде бы, по всем ощущениям не Хаскель начала 2000-х, но, почему-то, я всё равно продуктивен. Но от ощущения "я мог бы и больше" избавиться не удаётся.
* * *
"что следует переводить как: "В целом я не против, вот только в мире этом я ковбой из анекдота о Неуловимом Джо - как и он я никому не нужен на...".

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



Я не раз наталкивался на это рассуждение об ордах влюбленных, которые атакует объект, которому их любовь совсем не нужна.
Я не претендую на всеведение, но кажется, тут вкралась ошибка в определении. Молодой человек ( мужчина) или девушка ( женщина) позиционирующая себя так:
- Я тебя люблю, хочу сделать счастливым (ой) и обязательно этого добьюсь!-
одержима не любовью, а некоей сверхидеей. Он ( она) несет замысел жизни ( условно:для двоих) от которого может впоследствии и отказаться, если партнер будет играть свою роль не так, как написано в сценарии или просто потому, что устал или увлекся каким-то другим замыслом.*


В нем напрочь отсутствует то, что есть даже в человека смотрящем на цветок:
1 Желание просто смотреть и радоваться.
2. Желание сохранять покой, чтобы ничего не поломать.
3. Желание учиться помогать этому цветку правильно расти , и только потом что-то делать.
4. Готовность устраниться, если он поймет, что его роль в этом деле нулевая.
Если человек говорит мне, что он решил положить меня в основание задуманного им здания "счастья", а потом выясняется, что меня для этого нужно обтесать, чтобы я хорошо лежал, то называть все это любовью как минимум некорректно.

* Отдельной главой идет месть режиссера счастья тому актеру, который плохо играл свою роль в пьесе о счастье, она ( месть) может растянуться на десятилетия, замечу.
И это очень на любителя.

Впрочем, такие феномены все ж таки не имеют промышленного значения, и куда более распространена ситуация, с которой начинается цитата. И в конце концов, " атака любовью" это в сущности просто ее разновидность.
Раневская говорила об этом : " Все любят, а в аптеку сходить некому". Впрочем, при наличии возможности курьерской доставки на дом при помощи аптечного приложения это решается, но не влияет на главный месседж.
Трагизм которого, в свою очередь, в жизни сильно разбавляться простой готовностью людей смотреть друг другу в глаза , здороваться, говорить " как дела" и прочая, прочая.
(Хорошие привычки лучше хороших принципов.)
Проблема в том, что индивидуумам, которым " люди не нужны", легче застрелиться, чем вот так взять , ни с того ни с сего кому-то " как дела" сказать.
А их много. И никто ведь им не расскажет, что с ними что-то не так.
* * *
* * *
Принял участи в телеграммном обсуждение под заголовком Haskell.

Покинул последнее по следующим причинам:

1. слишком часто отвлекался на обсуждение само по себе;
2. слишком часто принимал участие в обсуждении чего-то, что не могло принести пользу читателям;
3. мой комментарий со смыслом "используя Хаскель, как средство обучения, можно узнать много нового и, в результате, получать большую зарплату" был расценён некоторыми участниками обсуждения, как известный мем "сперва добейся" и даже появились призывы к бану.

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

Я думаю принести пользу как-то ещё.
* * *
  • Kак известно, советские художники были очень разными и писали, как хотели. Причём, гораздо более отрыто, чем ангажированные западные мастера, постоянно думавшие о хлебе насущном. Наш мастер был где-то даже свободнее - мог рисовать плакаты и афиши с «Фантомасом разбушевался», а для себя и друзей создавать нечто-нечто, попивая 777 и болтая о Kафке с Джойсом. Нашла тут картину совершенно стивено_кинговскую. Заворожило. И название - доставляет.

    Read more...Collapse )
  • * * *
    https://golosptic.livejournal.com/1593611.html про подключение С400 к Натовским системам свой-чужой.
    * * *
    Отменил подписку.

    Причина отмены - в России нет последнего сезона Элементарно, а не так давно не было и первых трёх сезонов. Это, практически, единственный сериал, который я на нём смотрел, ибо выбор очень невелик. Хорошей Драки нет, нет и моего любимого Менталиста.

    Я, также, сделал заход на несколько собственных творений вышеупомянутой конторы. До Вельветовой Пилы я не добрался, правда, однако ВСЕ произведения страдали гнустностью и/или невниманием к деталям.

    Например, взрыв в произведении "про деяния Брейвика" не разнёс в куски козырёк, под которым стоял фургончик со взрывчаткой и огонь или дым не обтекал столь взрывоустойчивую часть здания.

    (вот здесь на десятой секунде начинается показ модели того, о чём я говорю - это очень дешево)

    В Праймале худрук гонял ответственных за настройку в хвост и в гриву, поскольку скорость дыма от горящей машины была в районе десятков метров в секунду - "так дым из трубы завода валит, а от костра, как тут, едва метр в секунду будет". Другой руководитель проекта бегал по коридорчику с часами, замеряя скорость бега человека с препятствиями и без.

    А здесь многомиллиардная компания выбирает сценарий, в котором в Минске, как в Нью Йорке, поезда ходят прямо мимо окон далеко не первого этажа, для проходной сцены.

    Поскольку я не смотрел Netflix вот уже месяц, пришёл к выводу, что он мне не нужен.
    * * *
    ...тем лучше.

    Ядра строят протеины в мышцах и запасённые в юности ядра продолжают жить всю оставшуюся жизнь, облегчая восстановление.

    * * *
    * * *

    Previous