ActivityPub Viewer

A small tool to view real-world ActivityPub objects as JSON! Enter a URL or username from Mastodon or a similar service below, and we'll send a request with the right Accept header to the server to view the underlying object.

Open in browser →
{ "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "Hashtag": "as:Hashtag", "sensitive": "as:sensitive", "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" }, "movedTo": { "@id": "as:movedTo", "@type": "@id" }, "toot": "http://joinmastodon.org/ns#", "featured": { "@id": "toot:featured", "@type": "@id" }, "Emoji": "toot:Emoji", "blurhash": "toot:blurhash", "votersCount": "toot:votersCount", "schema": "http://schema.org#", "PropertyValue": "schema:PropertyValue", "value": "schema:value", "ostatus": "http://ostatus.org#", "conversation": "ostatus:conversation" } ], "type": "Note", "id": "https://chrichri.ween.de/o/c9527f3186f848eb90e32d0c1ecd1c26", "attributedTo": "https://chrichri.ween.de", "content": "<p>Follow-up to <a href=\"https://chrichri.ween.de/o/289704403f2f4abea071c3d9cc9f2ab8\">this note</a>.</p>\n<p>Dragan had asked me to do <strong>repeated power-cycle tests</strong> with different kernel versions using the patched dtb for <a href=\"https://chrichri.ween.de/t/rockpro64\" class=\"mention hashtag\" rel=\"tag\">#<span>RockPro64</span></a> to make sure the kernel <a href=\"https://chrichri.ween.de/t/oops\" class=\"mention hashtag\" rel=\"tag\">#<span>oops</span></a> wouldn&#x27;t still be an issue.</p>\n<p>I learned that cutting the power of the device could kill the <a href=\"https://chrichri.ween.de/t/lpddr4\" class=\"mention hashtag\" rel=\"tag\">#<span>LPDDR4</span></a> <a href=\"https://chrichri.ween.de/t/ram\" class=\"mention hashtag\" rel=\"tag\">#<span>RAM</span></a>. This is documented in the specification referenced on the <a href=\"https://wiki.pine64.org/wiki/ROCKPro64#Datasheets_for_Components_and_Peripherals\">RockPro64 wiki page</a> for <a href=\"https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf\">Micron LPDDR4 Mobile LPDDR4 Datasheet</a> as stated on page 37 in <em>Uncontrolled Power-Off</em>:</p>\n<blockquote>\n<p>An uncontrolled power-off sequence can occur a maximum of 400 times over the life of the device.</p>\n</blockquote>\n<p>I never had heard about this before! <strong>Cutting power without shutdown can kill my RAM?</strong></p>\n<h3>show dmesg and shutdown</h3>\n<p>To get all the debugging information I needed I wanted the system after booting to print <code>dmesg</code> to the serial console, wait a short time and then actually shutdown.</p>\n<pre><code>\nroot:~# cat /root/bin/dmesg_and_shutdown.sh\r\n#!/bin/bash\r\n# a small script that outputs dmesg to serial\r\n# console, waits 20 seconds and shuts down\r\ndmesg > /dev/ttyS2\r\n# show a message how to stop this script and wait 20 seconds\r\necho \"Will shutdown in 20 seconds - to stop me call 'pkill dmesg_and_shut'\" > /dev/ttyS2\r\nsleep 20\r\necho \"shutdown -h\" > /dev/ttyS2\r\nshutdown -h now\r\n# a cronjob that runs after each boot\r\nroot:~# crontab -l\r\n@reboot /root/bin/dmesg_and_shutdown.sh\r\n\n</code></pre>\n<h3>powercycle the board</h3>\n<p>I took the time needed for a complete cycle of booting, showing dmesg, waiting and shutting down: well below 2 minutes.</p>\n<p>To automate the power cycle I used an <a href=\"https://chrichri.ween.de/t/esp8266\" class=\"mention hashtag\" rel=\"tag\">#<span>esp8266</span></a> based power switch made by <a href=\"https://chrichri.ween.de/t/sonoff\" class=\"mention hashtag\" rel=\"tag\">#<span>Sonoff</span></a> (Powr2) running <a href=\"https://github.com/letscontrolit/ESPEasy\">ESP Easy</a> (mega-20210503).</p>\n<p><a href=\"https://chrichri.ween.de/t/espeasy\" class=\"mention hashtag\" rel=\"tag\">#<span>ESPeasy</span></a> offers a simple scripting language I used to powercycle after 120 seconds of being switched on:</p>\n<pre><code>\nOn System#Boot do\r\n gpio,12,0\r\n gpio,13,1\r\nendon\r\n\r\nOn button#button_state do\r\n if [blue_led#blue_led_state]=1\r\n gpio,13,0\r\n timerSet,1,2\r\n else\r\n gpio,13,1\r\n gpio,12,1\r\n timerSet,1,0\r\n timerSet,2,0\r\n endif\r\nendon\r\n\r\nOn Rules#Timer=1 do\r\n gpio,12,0\r\n timerSet,2,1\r\nendon\r\n\r\nOn Rules#Timer=2 do\r\n gpio,12,1\r\n timerSet,1,2\r\nendon\r\n\n</code></pre>\n<p>Pressing the button on the Sonoff device toggles between:</p>\n<ul>\n<li>blue led off: timers disabled, relay on permanently</li>\n<li>blue led on: timers switch the relay off for 5 seconds, on for 120 seconds and then repeat</li>\n</ul>\n<h3>logging</h3>\n<p><code>minicom</code> logged the serial output to a file.</p>\n<p>Further down the <a href=\"https://chrichri.ween.de/t/rabbithole\" class=\"mention hashtag\" rel=\"tag\">#<span>RabbitHole</span></a> I went when looking at the resulting logfile…</p>\n", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://chrichri.ween.de/followers" ], "published": "2025-03-10T13:47:34Z", "context": "https://chrichri.ween.de/contexts/4736389d8b4948c5a7a5ffd9386af2f3", "conversation": "https://chrichri.ween.de/contexts/4736389d8b4948c5a7a5ffd9386af2f3", "url": "https://chrichri.ween.de/o/c9527f3186f848eb90e32d0c1ecd1c26", "tag": [ { "href": "https://chrichri.ween.de/t/rockpro64", "name": "#rockpro64", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/oops", "name": "#oops", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/lpddr4", "name": "#lpddr4", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/ram", "name": "#ram", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/esp8266", "name": "#esp8266", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/sonoff", "name": "#sonoff", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/espeasy", "name": "#espeasy", "type": "Hashtag" }, { "href": "https://chrichri.ween.de/t/rabbithole", "name": "#rabbithole", "type": "Hashtag" } ], "summary": null, "inReplyTo": null, "sensitive": false, "attachment": [] }