Well fuck and the degrees of belief.

on blog at

[attention conservation notice: this is just me venting anxieties about the pandemic]

Seriously. Fuck.

There are many types of believing. You can "believe" in religion but for most people it doesn't really effect their actual behavior. And even if it does at some level it's not like military generals out there are planning for what to do if god intervenes. It's a belief but it isn't held in the same context as other beliefs.

Back in 2005 I learned about the vulnerability of the health care system to viral pandemics. I believed in them and it scared the shit out of me. I was embarrassed later for doing typical "prepper" things like buying a 3 month food supply and rotating it, buying boxes of n95 masks, etc. I believed, but I didn't really anticipate anything concretely out of h5n1 influenza despite my obsession that well crossed the border into mental pathology.

At first I talked to everyone around me about it. There was serious danger. Not saying anything would be like not saying, "There's a bear behind you." But this was obviously not received well and for good reason. I slowly stopped with this negative feedback. I just did things quietly. Then years passed and nothing happened, and nothing happend, and something happened (2009 swine flu) but it was all okay. I eventually, thankfully, became convinced by others and the lack of realization that it wasn't a realistic scenario. That was good. I couldn't really function believing otherwise. I stopped rotating food and gradually forgot about my anxieties.

Now this. The nightmare that I had every night and day for 5 years but painstakingly moved past is real, or at least part of it is. The rest is excruciatingly uncertain. It's surreal and terrifying. I hadn't had an anxiety attack in almost a decade till yesterday at the grocers seeing my fears in everyone else for the first time.

And I don't even get to fucking say "I told you so." because I stopped believing. I never really believed.

[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?


Businesses only accepting interactions from corporate people is the death of volition for human persons

on blog at

You hear about on the news every month now. $x store is opening a location that allows shoppers to buy without human interaction, without a checkout. Restaurants are slowly but steadily being replaced by food trucks which won't take your order unless you pay with a credit card first, no cash allowed. Browsers and search engines both are starting to refuse to display websites that don't exist on the whim of some leased SSL cert saying you're part of the established corporate order. Soon no businesses will accept interacting directly with human persons. All transactions, all interaction, will require a third party corporation (one whom is almost certainly extracting rent) to do the transaction for you.

It's so fast, so easy, so convenient. All the complexity and awkwardness is hidden from the human persons and their life is easier. But a chain around your neck is still a chain no matter how long you make it. Human person motives and corporate person motives rarely align and in the future when there's a disagreement it's clear who's going to make the decisions about what is allowed and what is not: the corporate people everyone loves and depends on.

[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?


The pandemic stirs old memories: an over-the-counter tamiflu synthesis from when influenza was the big worry

on blog at

The potential for reinfection after being sick with SARS-CoV-2019 has me a little unsettled. I hope it's just a idiosyncratic case.

I had a bit of a freak-out back around 2005 when I learned about influenza pandemics and H5N1. I did all the things from buying basic supplies (and rotating food for years) to working with a friend online (over AIM w/trillian) to come up with an over-the-counter route to synthesize oseltamivir (tamiflu).

For example the starting material, furan, can be sourced from corn cobs (furfural from corncobs, 2-furancarboxylic acid from furfural, furan from 2-furancarboxylic acid). Or, far more feasibly, just extracted from it's use as a solvent from a commercial product. The current pandemic reminds me of that fun but wasted effort. It's presented below so someone might get a kick out of it.

OTC Oseltamiver Synthesis
By Chris The Great, 2006

This document has not yet been tested to ensure that it works as presented.

Step One: Synthesis of A
Methyl acrylate (2.78mol) is added to furan (3.95mol) and cooled to -10*C.  AlCl3 in DCM (1.15mol in 1-5M conc.) is added slowly with stirring, keeping the temperature below -10*C.  The mixture is then cooled with a cold water bath and stirred for 2 hours.  The mixture is added to 1000ml of saturated sodium bicarbonate solution, and the precipitate is filtered out.  The aqeous layer is extracted twice with 250ml DCM, and the organic layers are combined and dried over anhydrous sodium sulfate.  The solvent is distilled away and the product purified by silica gel column chromatography to give the desired product in 38.6% yield (1.07mol).

Step Two: Synthesis of B
A (1.07mol) is added to NaOH (1.65mol, 3 to 15M concentration) in water with stirring, maintaining a temperature of 5*C.  The mixture is allowed to warm up over a period of 30 minutes with stirring, and stirred at room temperature for 2 hours.  HCl (310ml of 31% sol.) is added to adjust the pH to below 1, and then the mixture is extracted 4 times with 200ml of DCM.  The combined organic layers are dried with Na2SO4, and solvent evaporated and the product recrystallized from ethyl acetate to give the desired product in 87.5% yield (0.936mol).

Step Three: Synthesis of C
B (0.936mol) is dissolved into 850ml water, and NaHCO3 (0.936mol) is added slowly, with stirring to control the foaming.  After foaming ceases, bromine (0.936mol) is added dropwise with stirring, and then the mixture is stirred at room temperature for 2 hours.  The mixture is extracted with 400ml ethyl acetate, washed with 100ml thiosulfate solution (to remove unreacted bromine) and dried with Na2SO4.  The solvent is distilled away and the product purfied by recrystallizing from ethyl acetate, giving the desired product in 89.6% yeild (0.84mol)

Step Four: Synthesis of D
Potassium hydroxide (2.5mol) is dissolved into dimethylacetamide (1000ml) and methanol (150ml), and C (0.84mol) is added slowly as the mixture is heated to a gentle reflux.  It is stirred under reflux for 3 hours, then ethyl iodide (1.6mol) is added and the mixture stirred under reflux for another 3 hours.  To the mixture is added HCl (300ml 31%) and the solution extracted with ethyl acetate (250ml) eight times.  The organic layer is washed with saturated brine and dried with Na2SO4.  The solvent is distilled away and the product purified by recrystallization to give the desired product in 95.9% yield (0.804mol).

Step Five: Synthesis of E
A solution of sodium methoxide (0.9mol) in tetrahydrofuran (500ml) is cooled to -30*C, and D (0.804mol) in tetrahydrofuran (500ml) is added dropwise with stirring.  After the addition, the mixture is stirred at 30*C for 1hr.  To the mixture is added acetic anhydride (1.05mol) and the mixture is stirred at room temperature for 3hr.  To the reaction mixture is added saturated ammonium chloride (1000ml), and the mixture is extracted with ethyl acetate (800ml).  The organic layer is dried (Na2SO4) and the solvent distilled away.  The product is recrystallized (ethyl acetate) to give the desired product in 80.0% yeild (0.644mol).

Step Six: Synthesis of F
E (0.644mol) is dissolved into 3-pentanol (600ml) at reflux, and AlCl3 (0.7mol) is slowly added with stirring.  The mixture is stirred at reflux for 1 hour, and then allowed to cool to room temperature.  A saturated solution of NaHCO3 is added (1000ml), and the mixture is extracted with 750ml DCM, washed with saturated brine (750ml) and dried with Na2SO4.  The solvent is distilled away and the product recrystallized (DCM) to give the desired product in 81.2% yield (0.522mol)

Step Seven: Synthesis of G
F (0.522mol) is dissolved in DCM (750ml) and triethylamine (0.78mol) is added.  The mixture is stirred at room temperature for 5 min. and then cooled to 0*C.  To the mixture is added tosyl chloride (0.78mol) and the mixture is stirred at room temperature for 1hr.  The reaction mixture is washed with saturated sodium bicarbonate solution (1500ml), saturated brine (750ml) and then dried with sodium sulfate.  The solvent is distilled off, and the crude product recrystallized from DCM to give G in 97.3% yeild (0.508mol).

Step Eight: Synthesis H
G (0.508mol) is dissolved in ethanol (1000ml) at reflux, and potassium carbonate (0.25mol) is added with stirring.  The mixture is stirred at gentle reflux for 1.5 hours, and then cooled to room temperature.  Saturated ammonium chloride solution (1000ml) is added.  The mixture is extracted with DCM (750ml), washed with saturated brine (1000ml) and dried (Na2SO4).  The solvent is distilled away and the crude product recrystallized from DCM to give H in 98.5% yeild (0.5mol).

Step Nine: Synthesis of I
H (0.5mol), sodium azide (0.6mol) and ammonium chloride (0.6mol) are dissolved into water (70ml) and ethanol (250ml), and refluxed for 8 hours.  Aqeous NaHCO3 (105ml of 8% solution) is added and the ethanol distilled in vacuum.  The aqeous residue is extracted with ethyl acetate (250ml), the extract washed with water (125ml).  The wash is back extracted with 125ml of ethyl acetate and the combined organic extracts washed with brine (125ml), dried over Na2SO4, filtered and concentrated in vacuum to give I as a dark brown oil in 102% yield (0.512mol)

Step Ten: Synthesis of J
Step One:
J (0.512mol) and ammonium chloride (1.2mol) are dissolved into ethanol (1500ml), and zinc (0.7mol) is added and the mixture refluxed for 30 minutes.  The solvent is distilled off to give Ib, which is used directly in the next step.
Step Two:
Tosysl Chloride (1.13mol) is added portionwise at room temperature to a stirred mixture of Ib (from the step one), K2CO3 (2.5mol) in acetonitrile (1000ml) and stirred for 6hr.  Toluene (2500ml) is added, the solid is filtered off and the solvent evaporated to give J in approx 80-90% yeild.  It is used directly in the next step without purification.

Step Eleven: Synthesis of K
J (0.494mol), sodium azide (1.2mol) and ammonium chloride (1.2mol) in dimethylacetamide (400ml) is heated to 80-85*C for 5 hours.  NaHCO3 (50mmol) in water (250ml) is added, and the mixture extracted with hexanes (6x250ml).  The combined hexane extracts are concentrated to 1200ml, and 250ml DCM is added, followed by 1100ml NaHCO3 8% solution and acetic anhydride (0.6mol).  The mixture is stirred at room temperature for an hour, and then the aqeous layer is removed.  The organic phases are concentrated in vacuum to 430g total weight), dissolved in ethyl acetate (50ml).  The mixture is cooled and K crystallizes out and is collected by filtering.  The crystals are washed with cold 15% ethyl acetate in hexane (250ml) and dried in a vacuum at room temperature, to give K in 55% yield (0.272mol). [may be slighly higher, ie 60%]

Step Twelve: Synthesis of L (oseltamivir freebase)
K (0.272mol) is dissolved into ethanol (600ml) along with ammonium chloride (0.64mol).  Zinc (0.36mol) is added and the mixture refluxed for 30 minutes.  The precipitate is filtered out, giving L in 98% yeild (0.266mol).  [90-95% more likely]

Step Thirteen: Synthesis of Oseltamivir Phosphate
L (0.266mol) is dissolved in acetone (1000ml) and treated with phosphoric acid (85%, 0.266mol) in absolute ethanol (300ml).  The mixture is cooled, and after 12 hours the precipitate is filtered out to give oseltamivir phosphate in 75% yield (0.2mol, 82g). A second crop of presumably lower purity crystals can be obtained by concentrated the solution and collecting a second crop of product.

[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?


Actual nano-amp perpetual electrical currents in resistive permanent magnets at some scales in some arrangements because of weird quantum stuff.

on blog at

Today in my RSS feeds an APS paper summary came up called, "Heat Flows in a Circle Without Gradients. It was about this ring of spaced ring oscillators that supported both mechanical excitation modes and phonon modes but where phonon excitations flowed around forever. It's interesting but more interesting was the offhand comment in support of infinite currents saying,

Undriven flows do occur in nature, as evidenced by persistent electric currents in permanent magnets and superconductors.

At first I thought they might be talking analogy, like spins as currents or electron "orbits", or something, but no, the wikipedia article, https://en.wikipedia.org/wiki/Persistent_current#In_resistive_conductors talks about real nanoamp currents physically existing. And then that leads to any even weirder rabbit hole.

I feel like that I can normally ignore quantum physics when doing radio and electromagnetics work. I don't do a lot of polarization stuff and quantum effects normally average out in imprecise many-sample systems. But apparently at specific mesoscopic length scales the quantum stuff I don't understand actually starts coupling to electromagnetic excitation modes. But the gist is that there's a neutral AC oscillation normally and applying an external magnetic bias to these magnetic material rings creates an internal asymmetry causing an perpetual tiny electrical current to flow.

This type of persistent current is a mesoscopic low temperature effect: the magnitude of the current becomes appreciable when the size of the metallic system is reduced to the scale of the electron quantum phase coherence length and the thermal length. Persistent currents decrease with increasing temperature and will vanish exponentially above a temperature known as the Thouless temperature. This temperature scales as the inverse of the circuit diameter squared.

And it does so in regions where there should be both zero electric and magnetic field the https://en.wikipedia.org/wiki/Aharonov-Bohm_effect. It's apparently strong philosophical support for the mathematical formalisms of the electric and magnetic potentials (as opposed to fields) as *real* physical things and beyond that delocalized physical things.

The Aharonov-Bohm effect, sometimes called the Ehrenberg-Siday-Aharonov-Bohm effect, is a quantum mechanical phenomenon in which an electrically charged particle is affected by an electromagnetic potential, despite being confined to a region in which both the magnetic field B and electric field E are zero. The underlying mechanism is the coupling of the electromagnetic potential with the complex phase of a charged particle's wave function, and the Aharonov-Bohm effect is accordingly illustrated by interference experiments.

[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?


Web security fetishism where it isn't required does more harm than good.

on blog at

There are two mutually exclusive views of the web. As a set of protocols set to allow individual humans to share information about things they love and the web as a set of protocols to make a living.

Profit motivated web presences want views, they want attention, they need nine 9s uptime, need to be able to do monetary transactions absolutely securely, and they want to be an application not a document. They live and die on the eternal wave of walled garden's recommendation engines because that's the network effect and that's where money flows. It doesn't matter if this means extremely high barriers to entry because money solves everything.

Individuals' websites are freeform presentations about the things that person is interested in. They are the backyard gardens of the mind and the most important thing is lowering the friction from thought to posting. There's no need to get tons of traffic instantly (or ever), they're mostly time insensitive.

Year by year browsers' evolution into another OS are creating new barriers to entry for those wishing to host personal website. Just one tiny example of this is browsers (and search engines, and etc) requiring HTTPS and not just SSL certs but only certs with lifetimes less than 1 year. All this piles on, destroys access to old web content, and generally creates cyber gentrification. With the WC3 now marginalized and corporate run web standards groups (ie whatwg) setting the protocols there may soon come a time where it's infeasible to run a website without relying on a third party entity to do some part of it for you.

[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?

█▓▒░ Comments ░▒▓█
20:54:11, Tue Feb 25, 2020 : /blog/blog.html/, Re: web security fetishism. Without HTTPS, an adversary can man-in-the-middle your connection and do all kinds of nasty things, from surveillance, to denying access, to altering the content, to running arbitrary javascript exploits against users' browsers. Given that certbot is free and now auto-renews your certificate for you on most platforms, I can't say that it is an especially high barrier to rule out this class of attacks, which may not be a personal threat to you, but can have severe consequences for the vulnerable. And although it does require trust in a 3rd party, which is not ideal, everybody is better off with it than without it.

re: random commenter above, as you can see from this site of mine I do like and use HTTPS. But I think HTTP has a valuable and essential place beside it. Going only HTTPS is bad. Going HTTP and HTTPS is great. Browsers and search engines punishing, hiding, and demonizing HTTP sites in their listings or notifications does more damage than then some potential downgrade attacks.

Reliance on third parties is also a bad idea. Sure, letsencrypt is great, but it's also causing extreme centralization of the web since it's so nice. The .org situation shows that no matter how benevolent and longstanding institutions that have power will be corrupted. And no matter how "easy" it is, acme2 is not a simple protocol. There's tons of complexity hidden behind that "easy" that has to be supported over time and changing software stacks.


Memory is two different systems both operating in parallel at the same instant of perception.

on blog at

Memory is two different systems both operating in parallel at the same instant of perception.

There's the short term awareness as encoded in the ~40 Hz cortico-thalamo-cortical loops of active cortical neuronal populations. The binding in time of different types of cortical processing at the thalamic relays and stimuli representation are essential to, if probably not all of, conscious awareness.

There's also the long term encoding in the entorhinal cortex (3 layers transitions from the 5 of cortex to hippocampus "simplicity") and hippocampus which itself is a multiple component system encoding different properties of the new experience relative to existing memory and relations. There is "pattern separation" about encoding distinct new properties of some experience and "pattern completion" which encodes in terms of the past to extract meaning in terms of known relations. And both of these are referenced through two spatial coordinate systems (especially in CA3). The meaning is all in terms of place.

Distinguishing between things (pattern separation) and seeing how things are the same (pattern completion).

During sleep the spatial coordinate system "paths" of the day are revisited in activation backwards in time and the specific episodic and spatially referential memories of the hippocampal formation are generalized in reference to thalamo-cortical loops.

Recall of memory later depends on self-reinforcement of thalamo-cortical loops populations. Over time memories which a person holds as truths can actually shift based on their own biases and other associations which help form/hold that memory.

Consciousness is the turbulence of prediction that tries to minimize itself.

[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?


Solder wick that doesn't suck: soak it in flux

on blog at
<superkuh> I've never had solder wick that wasn't shitty.
<superkuh> Does such a thing exist?
<OdinYggd> Flux core.
<OdinYggd> aka make the entire flux dish hot, put the braid in the liquid flux, then let it cool
<OdinYggd> ONce you pull it out the entire braid will have flux throughout, and will actually wick up properly

[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?


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?