Computation not construction: reconstructing images of rotating exoplanets from light intensity over time: 3 novel techniques to build cheaper big telescopes [youtube IAC talk]

on blog at

This "Large Instruments For Exoplanet Direct Imaging Studies beyond TMT/EELT/GMT" talk by Prof. J. R. Kuhn (IfA, Hawaii) is very cool but it reminds me a lot of Robert Charles Wilson's print scifi story, "Blind Lake". In it the near future telescopes don't really even perceive the sky anymore. The sky is the start but in terms of computation triggering but it's almost the least of the input compared to the the models and priors and arcane unknowable quantum-woo-woo which synthesize the detail of the resulting images. Not to imply there's any quantum woo-woo here. This is really cool science.

In this talk Kuhn makes the call for building a large multi-mirror optical interferometer to capture enough photons to do model-based time-series reconstruction of the surface features from light reflected off exoplanets. The proposed optical telescope is an interferometer, a donut of moderate size circular apertures, that are combined to form a speckle interference pattern. Each circular mirror in the donut has adaptive optics who's arbitrary phase shift can be found with neural networks then changed arbitrarily to create nulls in the combined UV coverage directly as a function of diffraction to act as a super low noise coronagraph.

Optical interfometry is tough and phase error kills. Normally to be big things have to be made super stiff. He argues that the telescope structure doesn't have to be built any more rigid than the amount of atmospheric turbulence they already correct. From this premise he suggests a bicycle wheel like tension and compression design to minimize weight when flex can just be adapted.

But even moderate size mirrors cost a lot and so do adaptive optics. To make this cheaper he shows a small scale implementation of a mirror made out of an extremely thin bit of non-ground, perfectly smooth glass. To create the phase needed locally to cancel out the local surface error + atmospheric surface error + wobbling error he shows an electroactive polymer that can be 3D printed onto the thin glass itself and under an applied electrical field (as a dieletric in a capacitor) it can pull on the local glass surface. Without a need to grind the mirror it can be extremely smooth and relatively cheap.

All together it seems like a powerful system for making a cheap big light bucket. But what strikes me most about it is that the information needed for the coronograph nulling is being derived from a seemingly nonsensical speckle pattern with lots of unknowns. They just throw a neural network at it and tell it to create some inversion function(s?) that takes incoherent speckle pattern information and somehow comes up with the mechanical phase error.

[comment on this post] Append "/@say/your message here" to the URL in the location bar and hit enter.

[webmention/pingback] Did you respond to this post? What's the URL?


Absolute positioning systems for autonomous land vehicles cannot work in cold climate winters.

on blog at

In cold climates in winter human drivers don't follow the official lane markings because they can't be seen. They follow the paths in the snow everyone else has packed down. These paths often diverge from the road markings. Any attempt to create an absolute positioning rather than vision based system like humans use is doomed to failure. No amount of technology injected into roads rather than cars will help because that's not how humans drive and humans are the priority users of the road transport system.

This doesn't just happen during and after snowfall. It's a permanent feature of side streets for months. It's not a transient effect. Regulation of autonomous land vehicles in cold climates will have to be different from temperate ones.

[comment on this post] Append "/@say/your message here" to the URL in the location bar and hit enter.

[webmention/pingback] Did you respond to this post? What's the URL?


Soldering a 2x2mm QFN as my first attempt at hot air. re: digitally tunable radio filter

on blog at

This is me finally picking back up a 2018 project to design flexible and cheap RF frontend filter for rtl-sdr dongles. I've had the parts laying around for years but never actually tried for fear of breaking the ICs. I only have 10. 9 now.

I put down the tac'y flux, then I put tiny bits of old temp solder using a tiny conical tube on each exposed pad. Some was overlapping but I cleaned it up with tweezer tips. Then I did hot air just above the melt temp till it resettled. At first the nozzle was too close and I blew away some solder but I think enough was left. Unfortunately, as you can see, I don't think the bottom pin flowed properly. It might be time to get a cheap hotplate or something so I can reflow things evenly without burning the ICs.

[comment on this post] Append "/@say/your message here" to the URL in the location bar and hit enter.

[webmention/pingback] Did you respond to this post? What's the URL?


A static, manual system for *receiving* webmentions (and pingback) with nginx

~Log HTTP POST data~

on blog at

I don't want to have any "moving parts" in my static website. I also don't want to have to rely on any third party services. To support webmentions (and pingback) all you really have to do is log HTTP POST request body. To do this with nginx you proxy it to itself so it thinks it's passing to a cgi script and define a custom log format to handle POSTs for the wemention endpoint location.

# /etc/nginx/nginx.conf for debian-style
http {
	# just the request body, hopefully source=...&target=...
	#log_format postdata $request_body;

	# extra info in csv
	log_format postdata '$time_local,$remote_addr,"$http_user_agent",$request_body';

The log output looks like whatever someone submits. But assuming it's webmentions with two variables it might be something like this,

10/Jan/2020:15:24:06 -0600,216.189.159.184,"Mozilla/5.0 (X11; Linux x86_64; rv:68.9) Gecko/20100101 Goanna/4.4 Firefox/68.9 PaleMoon/28.8.0",source=http%3A%2F%2Fadfadfafsdwut.html&target=http%3A%2F%2Fsuperkuh.com%2Fblog%2F2019-12-11-3.html
10/Jan/2020:22:35:37 -0600,192.168.1.1,"curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15",source=http://somedomain.net/iscommenting.html&target=http://superkuh.com/blog/2019gfdgdsgfdgsffd
10/Jan/2020:22:35:56 -0600,216.189.159.184,"Mozilla/5.0 (X11; Linux x86_64; rv:68.9) Gecko/20100101 Goanna/4.4 Firefox/68.9 PaleMoon/28.8.0",source=http%3A%2F%2Fwutwut.com%2Finthebutt&target=http%3A%2F%2Fsuperkuh.com%2Fblog%2F2020-01-10-1.html
# /etc/nginx/sites-enabled/default.conf for debian-style
# use $server_name instead of $binary_remote_addr IP match so the pool is for the whole server
limit_req_zone  $server_name  zone=webmention:1m   rate=2r/s;
...
server {
	...
	# use proxying to self to get the HTTP post variables.
	# https://stackoverflow.com/questions/4939382/logging-post-data-from-request-body
	location = /webmention {
		limit_req zone=webmention;
		client_max_body_size 7k;
		if ($request_method = POST) {
			access_log /var/log/nginx/postdata.log postdata;
			proxy_pass $scheme://127.0.0.1/logsink;
			break;
		}   
		return 204 $scheme://$host/serviceup.html;
	}
	location /logsink {
		#return 200;
		# use 204 instead of 200 so no 0 byte file is sent to browsers from HTTP forms.
		return 204;
	}

Then you can look at the log with your eyes at a later time and respond if you want to. Manually (using curl). Any including of their response in your page will just be from going there in a browser and copy/pasting or whatever. You could script that too but it seems like a hassle and open to abuse.

curl https://webmention.io/indiewebcamp/webmention -d "source=http://superkuh.com/blog/2020-01-10-1.html" -d "target=https://indieweb.org/static_site"

Or to me,

curl http://superkuh.com/webmention -d "source=http://yourdomain.net/wrote/a/response" -d "target=http://superkuh.com/blog/2020-01-10-1.html"

To make it easier to others I put an HTTP POST html form at the bottom of posts that points to my /webmention endpoint like shown below. The way I do this in nginx with HTTP 204 return code means, well, there's no response. It just happens silently. That's fine with me even if it confuses people. Feel free to play with this one and submit whatever strings you want. Webmentions, pingback xml, a perl script, ascii art, whatever.

As far as my tests go and using other's online testing tools my implemention and endpoint seems to be detected and I get the data in my logs. I'm redundantly putting the <link ... > webmention tags in all posts, at the top of the main indexes, and in my HTTP headers.

Since nginx is the only thing exposed and all it's doing is logging to disk and there's no increased dangers of exploits or abuse. The only real danger is someone trying to fill up the disk with lots of POSTs. But the log file size can be easily managed with system tools like logrotate and by limiting connections per second and max body size. At max it should be about ~900 MB of logs per day which triggers logrotate at the start of the next day and clears them.

[comment on this post] Append "/@say/your message here" to the URL in the location bar and hit enter.

[webmention/pingback] Did you respond to this post? What's the URL?


I am now a Disney princess.

on blog at 2020-01-04-1

Today while on a walk with a friend in the cold winter woods a cockatiel parrot flew down and landed on my head. It eventually moved down to my shoulder and stayed there seemingly content. It was obviously someone's distressed pet. It flew off on the walk back to find a temporary place for it and I assumed it would die of the cold later that night. So... I went back an hour later and managed to whistle, gesture, and coax it down on to my shoulder where it had no problem sitting for 15 minutes while I asked people in the area if they were missing a parrot (really). None were, of course, but one helpful group in a parking lot took a photo for me and posted it with my phone number on a local-centric 'lost items' forum. Meanwhile, I gave up and the parrot had no problem coming home with me on my shoulder in my car.

About an hour later, after I'd resigned myself to having to buy parrot food and start putting down newspaper, I received a call from the owners of the parrot. They'd seen the post and after giving them my address they said they'd be over in 30 minutes. A woman and her son arrived and confirmed it was their parrot. They'd lost it the day before, so it had managed to survive a night. It was a pretty happy reunion scene and I'm glad I took the time to save the bird.

The bird was super cute but given birds' pooping habits I think I was almost as relieved as they were it was going home.

[comment on this post] Append "/@say/your message here" to the URL in the location bar and hit enter.

[webmention/pingback] Did you respond to this post? What's the URL?