Jul. 27th, 2012
http://pontu.eenet.ee/player/kalakotkas.html
Папаша кормит; цыплята совсем обнаглели, чуть не из-под клюва вырывают
Папаша кормит; цыплята совсем обнаглели, чуть не из-под клюва вырывают
(no subject)
Jul. 27th, 2012 11:14 amДумаю, с чего начать, с комонады или с сопряженных... давайте-ка сначала пример с комонадой.
Итак, в предыдущей серии мы брали категории C=Set и D=Set×Set - множества и пары множеств, и два функтора,
Первый функтор - диагональ, он множеству сопоставляет пару, состоящую из двух экземпляров оного, а второй паре множеств сопоставляет декартово произведение; и эти функторы были сопряжены,
У функтора
Напомню, что стрелка
Заданы две функции,
Так что наш функтор
Думаю, понятно как определить
Ну а теперь к монадам и сопряженным функторам.
Вот давайте вообще начнём с монады
Определим алгебру над монадой: это объект
Я тут для простоты выбросил много скобок... ну что вы хотите, я же скальшик а не лиспщик.
Категория алгебр над монадой
Из алгебр, понятное дело, есть забывающий функтор
Откуда сопряженность,
- которая всё и объясняет.
Итак, взяв любую сопряженную пару, можно построить монаду, а по монаде - сопряженную пару (свободный, забывающий). Очевидно, что монада, соответствующая этой паре, и есть исходная монада; но одной монаде могут соответствовать много разных сопряженных пар (их целая категория); пара (свободный, забывающий) - предельный случай. Вот другой предельны случай - категория Клейсли.
Возьмём монаду
; все стрелки исходной категории превращаются в
.
Так что имеется вложение
Эту сопряженность можно выразить как
но, по определению C
Определим
Для монады
Для монады
Сказать мне вроде на эту тему больше нечего, если не подскажут, чего ещё добавить. Какие-нибудь специфические монады с комонадами?
Итак, в предыдущей серии мы брали категории 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
имеется левый сопряженный функтор FT:
C →
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
определяется через 

Так что имеется вложение
IT:
C →
CT
; и к нему я хочу построить левый сопряженный, чтобы было KT ⊣ IT
.Эту сопряженность можно выразить как
f: ITX → Y | <====> | ?: X → KTY |
но, по определению C
T
, это всё равно что задатьf: X → TY | <====> | ?: X → KTY |
Определим
KTY = TY
- и на этом всё.Для монады
Option
в множествах категорией Клейсли будет категория множеств и частичных функций, а категорией алгебр - категория множеств с выделенной точкой.Для монады
X2
в множествах категорией Клейсли будет категория множеств и пар функций, а категорией алгебр - категория множеств с заданной бинарной операцией.Сказать мне вроде на эту тему больше нечего, если не подскажут, чего ещё добавить. Какие-нибудь специфические монады с комонадами?
открытие типа
Jul. 27th, 2012 02:34 pmОбнаружил, что у меня тут на маке бегает апачи сервер; его надо было только открыть через систем преференсы - и заверте. Оказывается, у меня есть index.html; потвикал его, чтоб там хотя б моя фамилия была, вставил полезные линки, и, собственно, зачем я всё это затевал - букмарклет, чтобы автоматизировать уже доставшее меня ручное тестирование. Блин, типа у меня нет времени нормальные тесты починить (знакомая пестня), давай после билда перед коммитом тыкай вручную; да я что, раб на галерах. Кончилось моё терпение.
Так как используем мы скалалифт, то обычный рекордер не годится, айди у форм каждый раз другие, нужен интеллигентный. Один где-то есть за 500 баксов, но мне морока с ним разбираться, да и не верю. Напишу-ка я свой на моём втором любимом языке. На джаваскрипте.
Кликнул на букмарклет, он всё типа и делает. Особенно хорошо для аджакса, когда документ не меняется.
Всё, понеслась.
Так как используем мы скалалифт, то обычный рекордер не годится, айди у форм каждый раз другие, нужен интеллигентный. Один где-то есть за 500 баксов, но мне морока с ним разбираться, да и не верю. Напишу-ка я свой на моём втором любимом языке. На джаваскрипте.
Кликнул на букмарклет, он всё типа и делает. Особенно хорошо для аджакса, когда документ не меняется.
Всё, понеслась.
(небылица пока билдица)
Jul. 27th, 2012 03:08 pmПрактически каждый человек считает себя слегонца поблагороднее и получше, чисто в моральном отношении, чем большинство окружающих его людей. Вот, скажем, ты альфа-самец, тебе всё положено, всякая самка на тебя должна обращать почтительное внимание, и все эти лузеры должны делиться.
Так ты ж не хапаешь всё подряд; даже то, что положено, ты выбираешь с определённой совестливостью, делишься с теми, кому бог не дал ума, таланта, способностей, просто настоящих мужских качеств. Они, конечно, завидуют все - ну потому что нравственность-то у них не всегда на высоте, надо быть поснисходительней (но и не спускать когда совсем уже зарвутся, ставить их на место).
Ну или ты бета; тебе эти надутые альфа-идиоты пофиг, ты живёшь своей интересной жизнью, велосипед, горы, солнышко лесное, экология, органическая еда, справедливость во всём мире; конечно ты немножко свысока смотришь и на тупых футболистов, и на тех несчастных, что ну просто никак не возьмут себя в руки и не перестанут зависеть от чужого мнения; ты выше всего этого.
Ну или ты тонко чувствуешь Боль Вселенной и понимаешь, что совершенства нет; не то чтобы тебя все обижают; тебя невозможно обидеть, так как ты лучше знаешь и себе цену и какое ты в сущности ничтожество (но тсс); но тебе приходится с этим жить, и ты мужественно преодолеваешь, если и поступаясь моральными принципами, так во имя высших ценностей, и прежде всего - единства собственной натуры, которую никто никогда не увидит - как никто никогда не видел, к примеру, твоей голой жопы.
Я это к чему.
Когда мы, ветераны СССР, перебираем, к примеру, какая сволочь стучала, а кто был благородный герой, мы не всегда адекватно понимаем мотивацию.
Взять хоть шпионов. Вот Владимир Ипполитович Ветров.
Генерал КГБ, через которого проходили все ворованные микросхемы и программы. Поделившийся информацией с Францией (а та - с США). Так что года с 82-го в ЦРУ развилась целая промышленность по поставке советским шпионам дефектных микросхем, компьютеров и программ.
Нам в КБ, наверное, тоже такая хрень доставалась, но мы всё равно все драйвера переделывали, а в ОС ошибки исправляли, так что мы этого не ощущали. А где полы паркетные, там тоже не ощущали, но по другой причине.
Кстати, и целую цепь смертей генеральных секретарей тоже можно смело валить на Ветрова и ЦРУ, т.к. медицина-то тоже на импортные компьютеры полагалась, а там бага.
ЦРУ и до сих пор грузит Иран и ему подобных всякими искусственными багами, ботами и вирусами; это уже лет тридцать.
Но это ладно, я не про ЦРУ.
Ветров, он не был Враг Советской Власти. Он не был и Поборником Западных Ценностей. Его просто обидели - коррупция же, она и в КГБ; его Незаслуженно Обошли. И он решил показать всем кузькину мать - и показал. С его помощью Рейган победил СССР.
Так я что хочу сказать. Вот эти все стукачи, они же тоже, по большей части, не из Любви к Родине, Партии и Лично Генеральному Секретарю - а наоборот, из мести всякой сволочи, что мешала им занять руководящие позиции. Это только лузеры, если им мешают, они встанут и уйдут, а настоящие герои борются с применением любых средств. Кто может водородной бомбой грозить - грозит водородной бомбой; кто может испортить жизнь врагам на работе, оставаясь невидимым борцом невидимого фронта - тот идёт в стукачи. Не Америка же, чтобы браться за полуавтоматическое оружие, если всё не так, как надо.
(техническая вставка: только что мышкой перенёс букмарклет со страницы в одном окне на страницу в другом. смешно.)
Когда-то мы втроём в нашем стартапе начинали строить Систему - я, Гриша и Валера. Типа все равны были. Но мы с Гришей были программисты, а Валера - так, "технолог", советы горазд давать, а как что сделать конкретное - так увы. Бумажки писать мастер. И вот он пописывал бумажки, а мы с Гришей дело делали. Алгоритмы разрабатывали... да, алгоритм-то разработать, оно вроде программировать не надо, можно и так, на бумажке - но что-то тоже не очень.
Ну потом я там стал "главным конструктором"; Гришу, как еврея, никуда не продвигали (как мне один гебист сказал - это евреи создают прецеденты антисемитизма - ну и то, не продвигали-то его именно евреи; а зря, из Гриши вышел бы прекрасный начальник; добрейшей души человек, и умный). А Валера как-то в сторонке сидел, и ему это было обидно.
И вот однажды в контору пришел гебист, вербовать слабых духом; выбрал почему-то для вербовки меня и Валеру. Откуда это известно? Да у нас деревня; слухи только так.
Я посмеялся (нет, не в лицо; в лицо я его смутил другим), рассказал всем, о ком он расспрашивал - короче, болтун, интереса для гебни не представляет; а Валера никому не сказал.
Так у нас в отделе появился штатный стукач. От него было, по слухам, много вреда; с перестройкой он ушел и пропал навсегда; никто не знает, где он теперь, и жив ли. Да все им брезговали, так чего уж там.
Был ещё нештатный, но над ним и так все смеялись, и Галича с Солженицыным ему не показывали; но им никто не брезговал, прикольный был пацан, полуцыган. Сплетнями делился по-дружески со всеми, у кого от кого ребёнок, кто к кому от кого ушел и т.п.
Так ты ж не хапаешь всё подряд; даже то, что положено, ты выбираешь с определённой совестливостью, делишься с теми, кому бог не дал ума, таланта, способностей, просто настоящих мужских качеств. Они, конечно, завидуют все - ну потому что нравственность-то у них не всегда на высоте, надо быть поснисходительней (но и не спускать когда совсем уже зарвутся, ставить их на место).
Ну или ты бета; тебе эти надутые альфа-идиоты пофиг, ты живёшь своей интересной жизнью, велосипед, горы, солнышко лесное, экология, органическая еда, справедливость во всём мире; конечно ты немножко свысока смотришь и на тупых футболистов, и на тех несчастных, что ну просто никак не возьмут себя в руки и не перестанут зависеть от чужого мнения; ты выше всего этого.
Ну или ты тонко чувствуешь Боль Вселенной и понимаешь, что совершенства нет; не то чтобы тебя все обижают; тебя невозможно обидеть, так как ты лучше знаешь и себе цену и какое ты в сущности ничтожество (но тсс); но тебе приходится с этим жить, и ты мужественно преодолеваешь, если и поступаясь моральными принципами, так во имя высших ценностей, и прежде всего - единства собственной натуры, которую никто никогда не увидит - как никто никогда не видел, к примеру, твоей голой жопы.
Я это к чему.
Когда мы, ветераны СССР, перебираем, к примеру, какая сволочь стучала, а кто был благородный герой, мы не всегда адекватно понимаем мотивацию.
Взять хоть шпионов. Вот Владимир Ипполитович Ветров.

Генерал КГБ, через которого проходили все ворованные микросхемы и программы. Поделившийся информацией с Францией (а та - с США). Так что года с 82-го в ЦРУ развилась целая промышленность по поставке советским шпионам дефектных микросхем, компьютеров и программ.
Нам в КБ, наверное, тоже такая хрень доставалась, но мы всё равно все драйвера переделывали, а в ОС ошибки исправляли, так что мы этого не ощущали. А где полы паркетные, там тоже не ощущали, но по другой причине.
Кстати, и целую цепь смертей генеральных секретарей тоже можно смело валить на Ветрова и ЦРУ, т.к. медицина-то тоже на импортные компьютеры полагалась, а там бага.
ЦРУ и до сих пор грузит Иран и ему подобных всякими искусственными багами, ботами и вирусами; это уже лет тридцать.
Но это ладно, я не про ЦРУ.
Ветров, он не был Враг Советской Власти. Он не был и Поборником Западных Ценностей. Его просто обидели - коррупция же, она и в КГБ; его Незаслуженно Обошли. И он решил показать всем кузькину мать - и показал. С его помощью Рейган победил СССР.
Так я что хочу сказать. Вот эти все стукачи, они же тоже, по большей части, не из Любви к Родине, Партии и Лично Генеральному Секретарю - а наоборот, из мести всякой сволочи, что мешала им занять руководящие позиции. Это только лузеры, если им мешают, они встанут и уйдут, а настоящие герои борются с применением любых средств. Кто может водородной бомбой грозить - грозит водородной бомбой; кто может испортить жизнь врагам на работе, оставаясь невидимым борцом невидимого фронта - тот идёт в стукачи. Не Америка же, чтобы браться за полуавтоматическое оружие, если всё не так, как надо.
(техническая вставка: только что мышкой перенёс букмарклет со страницы в одном окне на страницу в другом. смешно.)
Когда-то мы втроём в нашем стартапе начинали строить Систему - я, Гриша и Валера. Типа все равны были. Но мы с Гришей были программисты, а Валера - так, "технолог", советы горазд давать, а как что сделать конкретное - так увы. Бумажки писать мастер. И вот он пописывал бумажки, а мы с Гришей дело делали. Алгоритмы разрабатывали... да, алгоритм-то разработать, оно вроде программировать не надо, можно и так, на бумажке - но что-то тоже не очень.
Ну потом я там стал "главным конструктором"; Гришу, как еврея, никуда не продвигали (как мне один гебист сказал - это евреи создают прецеденты антисемитизма - ну и то, не продвигали-то его именно евреи; а зря, из Гриши вышел бы прекрасный начальник; добрейшей души человек, и умный). А Валера как-то в сторонке сидел, и ему это было обидно.
И вот однажды в контору пришел гебист, вербовать слабых духом; выбрал почему-то для вербовки меня и Валеру. Откуда это известно? Да у нас деревня; слухи только так.
Я посмеялся (нет, не в лицо; в лицо я его смутил другим), рассказал всем, о ком он расспрашивал - короче, болтун, интереса для гебни не представляет; а Валера никому не сказал.
Так у нас в отделе появился штатный стукач. От него было, по слухам, много вреда; с перестройкой он ушел и пропал навсегда; никто не знает, где он теперь, и жив ли. Да все им брезговали, так чего уж там.
Был ещё нештатный, но над ним и так все смеялись, и Галича с Солженицыным ему не показывали; но им никто не брезговал, прикольный был пацан, полуцыган. Сплетнями делился по-дружески со всеми, у кого от кого ребёнок, кто к кому от кого ушел и т.п.
spent some quality time with js today
Jul. 27th, 2012 06:16 pmvar 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!")