Jul. 27th, 2012

juan_gandhi: (Default)
Переслегин


"Для верующего совершенное Pussy Riot духовное преступление хуже убийства. В Христианских государствах за богохульство казнили. "

Яко благ и человеколюбец.
juan_gandhi: (Default)
http://pontu.eenet.ee/player/kalakotkas.html

Папаша кормит; цыплята совсем обнаглели, чуть не из-под клюва вырывают
juan_gandhi: (Default)
Думаю, с чего начать, с комонады или с сопряженных... давайте-ка сначала пример с комонадой.

Итак, в предыдущей серии мы брали категории C=Set и D=Set×Set - множества и пары множеств, и два функтора, Δ(X) = (X,X) и Π((X,Y)) = X×Y.

Первый функтор - диагональ, он множеству сопоставляет пару, состоящую из двух экземпляров оного, а второй паре множеств сопоставляет декартово произведение; и эти функторы были сопряжены, Δ ⊣Π.

У функтора Δ на самом деле есть не только правый сопряженный, Δ ⊣Π, но и левый, Σ ⊣Δ. Что это за функтор такой? Давайте не надеятся на чудо, а просто его построим. Нам нужно, чтобы по (f1,f2): (Y1,Y2) &: ; (X,X) мы могли взаимно-ознозначно получать &alphal(f1,f2): Σ(Y1,Y2) → X.

Напомню, что стрелка (f1,f2) в Set×Set - это просто пара обычных стрелок (функций) в Set.

Заданы две функции, f1: Y1 → X и f1: Y1 → X. Что это нам даёт? Это нам даёт, взаимно-однозначно, функцию из непересекающегося объединения: Y1 ∐ Y2 → X.

Так что наш функтор Σ - это просто объединение двух компонент. Ну а так как он левый сопряженный к Δ, то композиция ΔΣ, которая для множества X возвращает X ∐X, является комонадой.

Думаю, понятно как определить ε: X.т∐X → X; а δ: X ∐ X → X ∐ X ∐ X ∐ X, как и во вчерашнем примере, складывает первую компоненту слева в первую компоненту справа, а последнюю - в последнюю.

Ну а теперь к монадам и сопряженным функторам.

Вот давайте вообще начнём с монады T: C → C, со всеми её монадическими законами (единица, умножение, ассоциативность умножения и единичность единицы).

Определим алгебру над монадой: это объект A и стрелка a: T(A) → A, обладающая правильными свойствами. А именно:
         


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

Категория алгебр над монадой T в категории C обозначается CT.

Из алгебр, понятное дело, есть забывающий функтор UT. в категорию C - просто забудем, что есть какое-то действие. К этому забывающему функтору UT имеется левый сопряженный функтор FTC → CT, строящий по объекту X свободную алгебру, которая на самом деле выглядит так: μX: TTX → TX.

Откуда сопряженность, FT ⊣ FT? Если есть алгебра b: TB →B, и f: A → B, то имеет место коммутативная диаграмма


- которая всё и объясняет.

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

Возьмём монаду T: C → C и построим на её основе новую категорию, CT, состоящую из тех же объектов, что и исходная категория, но с добавлением стрелок. А именно, всякая стрелка f: :X → TY в C будет стрелкой f: :X → Y в CT. (Это, к примеру, если у нас монада Option, то теперь стрелками будут все частичные функции.) Композиция f;g определяется через ; все стрелки исходной категории превращаются в .

Так что имеется вложение ITC → CT; и к нему я хочу построить левый сопряженный, чтобы было KT ⊣ IT.

Эту сопряженность можно выразить как
f: ITX → Y  <====>  ?: X → KTY

но, по определению CT, это всё равно что задать
f: X → TY  <====>  ?: X → KTY


Определим KTY = TY - и на этом всё.

Для монады Option в множествах категорией Клейсли будет категория множеств и частичных функций, а категорией алгебр - категория множеств с выделенной точкой.

Для монады X2 в множествах категорией Клейсли будет категория множеств и пар функций, а категорией алгебр - категория множеств с заданной бинарной операцией.

Сказать мне вроде на эту тему больше нечего, если не подскажут, чего ещё добавить. Какие-нибудь специфические монады с комонадами?
juan_gandhi: (Default)
Обнаружил, что у меня тут на маке бегает апачи сервер; его надо было только открыть через систем преференсы - и заверте. Оказывается, у меня есть index.html; потвикал его, чтоб там хотя б моя фамилия была, вставил полезные линки, и, собственно, зачем я всё это затевал - букмарклет, чтобы автоматизировать уже доставшее меня ручное тестирование. Блин, типа у меня нет времени нормальные тесты починить (знакомая пестня), давай после билда перед коммитом тыкай вручную; да я что, раб на галерах. Кончилось моё терпение.

Так как используем мы скалалифт, то обычный рекордер не годится, айди у форм каждый раз другие, нужен интеллигентный. Один где-то есть за 500 баксов, но мне морока с ним разбираться, да и не верю. Напишу-ка я свой на моём втором любимом языке. На джаваскрипте.

Кликнул на букмарклет, он всё типа и делает. Особенно хорошо для аджакса, когда документ не меняется.

Всё, понеслась.
juan_gandhi: (Default)
Практически каждый человек считает себя слегонца поблагороднее и получше, чисто в моральном отношении, чем большинство окружающих его людей. Вот, скажем, ты альфа-самец, тебе всё положено, всякая самка на тебя должна обращать почтительное внимание, и все эти лузеры должны делиться.

Так ты ж не хапаешь всё подряд; даже то, что положено, ты выбираешь с определённой совестливостью, делишься с теми, кому бог не дал ума, таланта, способностей, просто настоящих мужских качеств. Они, конечно, завидуют все - ну потому что нравственность-то у них не всегда на высоте, надо быть поснисходительней (но и не спускать когда совсем уже зарвутся, ставить их на место).

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

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

Я это к чему.

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

Взять хоть шпионов. Вот Владимир Ипполитович Ветров.

Генерал КГБ, через которого проходили все ворованные микросхемы и программы. Поделившийся информацией с Францией (а та - с США). Так что года с 82-го в ЦРУ развилась целая промышленность по поставке советским шпионам дефектных микросхем, компьютеров и программ.

Нам в КБ, наверное, тоже такая хрень доставалась, но мы всё равно все драйвера переделывали, а в ОС ошибки исправляли, так что мы этого не ощущали. А где полы паркетные, там тоже не ощущали, но по другой причине.

Кстати, и целую цепь смертей генеральных секретарей тоже можно смело валить на Ветрова и ЦРУ, т.к. медицина-то тоже на импортные компьютеры полагалась, а там бага.

ЦРУ и до сих пор грузит Иран и ему подобных всякими искусственными багами, ботами и вирусами; это уже лет тридцать.

Но это ладно, я не про ЦРУ.

Ветров, он не был Враг Советской Власти. Он не был и Поборником Западных Ценностей. Его просто обидели - коррупция же, она и в КГБ; его Незаслуженно Обошли. И он решил показать всем кузькину мать - и показал. С его помощью Рейган победил СССР.

Так я что хочу сказать. Вот эти все стукачи, они же тоже, по большей части, не из Любви к Родине, Партии и Лично Генеральному Секретарю - а наоборот, из мести всякой сволочи, что мешала им занять руководящие позиции. Это только лузеры, если им мешают, они встанут и уйдут, а настоящие герои борются с применением любых средств. Кто может водородной бомбой грозить - грозит водородной бомбой; кто может испортить жизнь врагам на работе, оставаясь невидимым борцом невидимого фронта - тот идёт в стукачи. Не Америка же, чтобы браться за полуавтоматическое оружие, если всё не так, как надо.

(техническая вставка: только что мышкой перенёс букмарклет со страницы в одном окне на страницу в другом. смешно.)

Когда-то мы втроём в нашем стартапе начинали строить Систему - я, Гриша и Валера. Типа все равны были. Но мы с Гришей были программисты, а Валера - так, "технолог", советы горазд давать, а как что сделать конкретное - так увы. Бумажки писать мастер. И вот он пописывал бумажки, а мы с Гришей дело делали. Алгоритмы разрабатывали... да, алгоритм-то разработать, оно вроде программировать не надо, можно и так, на бумажке - но что-то тоже не очень.

Ну потом я там стал "главным конструктором"; Гришу, как еврея, никуда не продвигали (как мне один гебист сказал - это евреи создают прецеденты антисемитизма - ну и то, не продвигали-то его именно евреи; а зря, из Гриши вышел бы прекрасный начальник; добрейшей души человек, и умный). А Валера как-то в сторонке сидел, и ему это было обидно.

И вот однажды в контору пришел гебист, вербовать слабых духом; выбрал почему-то для вербовки меня и Валеру. Откуда это известно? Да у нас деревня; слухи только так.

Я посмеялся (нет, не в лицо; в лицо я его смутил другим), рассказал всем, о ком он расспрашивал - короче, болтун, интереса для гебни не представляет; а Валера никому не сказал.

Так у нас в отделе появился штатный стукач. От него было, по слухам, много вреда; с перестройкой он ушел и пропал навсегда; никто не знает, где он теперь, и жив ли. Да все им брезговали, так чего уж там.

Был ещё нештатный, но над ним и так все смеялись, и Галича с Солженицыным ему не показывали; но им никто не брезговал, прикольный был пацан, полуцыган. Сплетнями делился по-дружески со всеми, у кого от кого ребёнок, кто к кому от кого ушел и т.п.
juan_gandhi: (Default)

var nextExec = Date.now()

function inaSec(fun) {
  nextExec += 1000
  var dt = nextExec - Date.now()
  setTimeout(fun, dt)
}

function reportWhenDone(message) {
  inaSec(function(){alert(message)})
}


Идея такая, что надо типа паузы делать.
Достаточно одной переменной, чтобы устроить что-то вроде очереди.
function equals(value) {
  return function(x) { return x.value == value }
}
    clickSubmit(equals("Save"))
    clickSubmit(toggler("Policy Engine [PE]"))
    clickSubmit(toggler("Policy Engine (Storage) [SE]"))
    clickSubmit(toggler("Domain Storage Engine [DSE]"))
    reportWhenDone("now we are at bootconfig!")

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

August 2025

S M T W T F S
      12
3456789
10 11 12 13141516
171819 20212223
2425 26272829 30
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 2nd, 2025 03:18 pm
Powered by Dreamwidth Studios