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.
{
"@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'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": []
}