I want to see optimal reduction without brackets and croissants.

Modify interaction rules, change data attached to abstraction, application, and fan nodes, even play with global state if needed. Just get it done without introducing any more agents except those three.

Is it possible? I don't know, let's find out!
У меня тут экзист... в общем, кризис среднего возраста. Были поводы. Пока было солнце, море и пиво две недели, думал, что пройдет. Не прошло. Вокруг какая-то сплошная хуита творится. Нашел какие-то online social support groups. Открыл, посмотрел и закрыл. Только хуже стало. Одни уроды и дебилы. Те же самые, что и в жизни. А где взять глобус с неуродами и недебилами, неизвестно. Уроды и дебилы - депрессия - еще больше уроды и дебилы - еще больше депрессия... Это замкнутый круг какой-то!

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

Короче, надо просто всех убить, и все.

Command line

  • POSIX (XCU "Shell & Utilities"): vi(1), awk(1), make(1), bc(1), sed(1), grep(1), sort(1), uniq(1), tee(1), wc(1), etc.
  • GNU Screen (useful to echo exec screen -xR >>~/.profile on a remote host)
  • Git: git-grep(1), git-stash(1), git-bisect(1), etc.
  • Ledger (useful for optimizing both finances and time)
  • Taskwarrior (TODO manager, highly recommended)
  • drive (one of CLIs for Google Drive)
  • Jekyll (generates static websites from markdown)

Web

Chrome OS

  • Google Keep (quite convenient for grocery lists)
  • Google Drive (directly accessible in Chrome OS' Files)
  • Secure Shell (the main SSH client for Chrome OS, supports SFTP in Files and SSH bookmarks, type ssh name@example.com in the address field)
  • Wolfram Alpha (type = universe age in planck times in the address field)

Disclaimer: I'm celebrating five years as a Chromebook user.

Here is one way to profile calendars:

  1. Export calendars in iCalendar format.
  2. Check out this Awk script:

    function parse(dt)
    {
    	Y = substr(dt, 1, 4);
    	M = substr(dt, 5, 2);
    	D = substr(dt, 7, 2);
    	h = substr(dt, 10, 2);
    	m = substr(dt, 12, 2);
    	s = substr(dt, 14, 2);
    
    	return Y "/" M "/" D " " h ":" m ":" s;
    }
    
    /^BEGIN:VEVENT/ {
    	dtstart = "";
    	dtend = "";
    	summary = "";
    }
    
    /^DTSTART:/ {
    	sub(/\r$/, "");
    	sub(/^DTSTART:/, "");
    	dtstart = parse($0);
    }
    
    /^DTEND:/ {
    	sub(/\r$/, "");
    	sub(/^DTEND:/, "");
    	dtend = parse($0);
    }
    
    /^SUMMARY:/ {
    	sub(/\r$/, "");
    	sub(/^SUMMARY:/, "");
    	gsub(/  */, " ");
    	summary = $0;
    }
    
    /^END:VEVENT/ {
    	if (dtstart && dtend && summary) {
    		print "i " dtstart " " prefix summary;
    		print "o " dtend;
    	}
    }
    

  3. Have the Ledger utility installed:
    sudo apt install ledger # or whatever
  4. Convert the exported ICS files to timelog format:
    awk -f ics2tc.awk *.ics >timelog.tc
  5. Generate various reports from timelog, for example:
    ledger -f timelog.tc b -S -T
  6. Optionally specify a prefix:
    awk -f ics2tc.awk -v prefix=Work: Work.ics >Work.tc
  7. Or even create a Makefile like this:

    TIMELOGS = Anna.tc David.tc
    
    all: $(TIMELOGS)
    
    clean:
    	-rm -f $(TIMELOGS)
    
    .SUFFIXES: .ics .tc
    
    .ics.tc:
    	awk -f ics2tc.awk -v prefix=$*: $< >$@
    

  8. ?????
  9. PROFIT!!1oneone

<svg xmlns="http://www.w3.org/2000/svg"
	viewBox="0,0 5,5"
	fill="#8080ff">
<path d="M0,0 L5,0 L5,2 L4,2 L4,1 L1,1
	L1,4 L4,4 L4,3 L5,3 L5,5 L0,5 Z" />
<path d="M2,2 L2,3 L3,3 L3,2 Z">
<animateMotion begin="mouseover" restart="whenNotActive"
	dur="2s"
	calcMode="spline"
	keyPoints="0; .5; .5; 1"
	keyTimes="0; .36; .64; 1"
	keySplines=".5 0 .5 1; 0 0 1 1; .5 0 .5 1"
	path="M0,0 L2,0 Z" />
</path>
</svg>

Я понял. Надо просто переместить:

  • феминисток - в Саудовскую Аравию;
  • борцов с изменением климата - в Китай;
  • антивакцинаторов - в Африку;
  • коммунистов, социалистов и прочих леваков - в Россию;
  • мечтающих о возвращении Сталина - в лагеря;
  • борцов за признание Палестины - в Палестину.

А также:

  • обложить стопроцентным налогом на наследство приверженцев этой идеи;
  • посадить за расизм применяющих закон в зависимости от расы нарушителя;
  • отправить в газовую камеру тех, кому наплевать на базовые права человека;
  • снять замки и забрать ключи у борцов за открытые границы;
  • запретить распространять свои гены противникам ГМО;
  • поселить лобковых вшей на лобок защитникам прав животных.

Ну и так далее. Теоремой Геделя навеяло.

Большие новости!

Я доделал needed reduction на веревочках, почистил лямбду от уродской waiting construct, сделал closed reduction дефолтным алгоритмом и обновил браузерную демку. Там теперь есть бесконечная прокрутка для дебага. Зацените рюшечки:

https://codedot.github.io/lambda/

Приятно иметь калькулятор в браузере, который одновременно печатает полную βη-нормальную форму для любого бестипового λK-терма и при этом считает 10 2 2 1 в цифрах Черча за долю секунды на моем Хромбуке.

Напомню, что 21024 примерно в (1017)4 раз больше, чем гиперобъем пространства-времени всей наблюдаемой вселенной с момента большого взрыва в планковских единицах измерения, в наши дни имеющий порядок (1060)4 планковских единиц.

Вот.
I am currently working on implementing needed reduction for interaction nets. To do that, I first needed to refactor a lot of somewhat ugly fast-written code in inet-lib. At some point, I changed retrieving an element from an array to .pop() from .shift(), just because in JavaScript the former happens to be a cheaper operation than the latter.

Many commits later, I decided to play with the program a little bit and compare performance between .shift()ing and .pop()ing. Boom! The program appeared to be broken. Even worse, invariance of the queue that is represented by that array with respect to the order in which it is processed is the whole point of interaction nets, namely the property of strong confluence also known as the one-step diamond property. I thought I fucked up hard.

First, I took a look at git-blame(1) for the line of code that calls .pop(), and found the corresponding commit. Then, I marked its parent commit as good with git-bisect(1). After a few steps, git-bisect(1) found the first bad commit.

Evidently, the problem had something to do with indirection applied by non-deterministic extension of interaction nets. And it did not take more than a couple of minutes to figure out a simple one-liner fix.

Overall, it took less than half an hour from finding a bug to fixing it which I first thought would take hours if not days. To me, it looks like yet another evidence that the idea of git-bisect(1) is totally genius. So, thanks again, Linus!

P. S. Free advice: when making commits, it is always useful to keep in mind 1) a possible need to git-grep(1) some lines of code later, and 2) almost inevitable need to deal with bugs which is a lot easier when commits are suitable for git-bisect(1).

Most Popular Tags

Syndicate

RSS Atom

August 2017

S M T W T F S
  12345
6789101112
13141516171819
20212223 2425 26
2728293031  
Powered by Dreamwidth Studios