helvede.net is one of the many independent Mastodon servers you can use to participate in the fediverse.
Velkommen til Helvede, fediversets hotteste instance! Vi er en queerfeministisk server, der shitposter i den 9. cirkel. Welcome to Hell, We’re a DK-based queerfeminist server. Read our server rules!

Server stats:

159
active users

#endif

0 posts0 participants0 posts today
Thierry Laurion<p><span class="h-card" translate="no"><a href="https://mas.to/@libreleah" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>libreleah</span></a></span> <span class="h-card" translate="no"><a href="https://mas.to/@mkukri" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>mkukri</span></a></span> </p><p>Both Heads and lbmk permit to apply patches on top of a coreboot fork. </p><p>The difference between the two here is that lbmk builds the tree, clean, for each boards, where Heads applies the patches to a fork once, and each board reuses fork build artifacts;, building board specifics in a board specific artifact directory. That permits crossgcc, being the buildstack of each coreboot fork version to be built once, and also repro build issues upstream, economizing both disk space, cpu resource for user and CI.</p><p>In Heads goal of building fully functional roms, CI can build and stitch reproducible roms for each commit for end users to download directly from CI, for each commit, and see if a comit broke a built, for each commit. CI cache is reused, so that we don't waste CI resources either.</p><p>In the case of t480, the patch was made with lbmk in mind, not coreboot nor Heads, and breaks other thinkpads in coreboot upstream, trying to not only build for t480 but make sure t480 patchset doesn't break other boards. In this case, it breaks all other thinkpads, so prevent Heads from merging the PR. What you propose here is for libreboot and Heads to maintain a patchset not merged upstream; it might suit libreboot mindset, being more bleeding edge, and minifree, selling the t480, but not Heads. Heads tries to stay as close as possible to upstream forks, and pushes upstream projects to merge patches. Its long, not easy, but the right thing to do. The patches stays in a patch dir for everyone to see, per software version. In this case, patches/coreboot-24.12/*</p><p>I tried to apply the following patch without success instead of commenting thermal.asl</p><p>+diff --git a/src/ec/lenovo/h8/acpi/ec.asl b/src/ec/lenovo/h8/acpi/ec.asl<br>+index bc54d3b..a0408c8 100644<br>+--- a/src/ec/lenovo/h8/acpi/ec.asl<br>++++ b/src/ec/lenovo/h8/acpi/ec.asl<br>+@@ -331,7 +331,13 @@ Device(EC)<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "sleepbutton.asl"<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "lid.asl"<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "beep.asl"<br>++<br>++<a href="https://infosec.exchange/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> CONFIG_BOARD_LENOVO_T480<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "thermal.asl"<br>++<a href="https://infosec.exchange/tags/else" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>else</span></a><br>++//#include "thermal.asl"<br>++<a href="https://infosec.exchange/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a><br>++<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "systemstatus.asl"<br>+ <a href="https://infosec.exchange/tags/include" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>include</span></a> "thinkpad.asl"<br>+ }</p><p>Other non t480 fail to build, and I have no more time to spend on this. The community is interested, tried to reach libreboot and were seen as spammers.</p><p>Please fix your patchset upstream. People saw the t480 being "supported by coreboot" in a talk. People didn't understand it was a WiP patchset under coreboot. And here we are. 24.12 was december 2024 "release", there will be another one in 25.03... I do not have time to maintain patches on top of patches, Leah. My focus is not to be a coreboot distribution. My focus is to deliver reproducible roms to users needing accessible security, and improve that UX. There is no grub/seabios under Heads, my focus is to make upstream do the right thing and participate upstream, and make contributors participate upstream. Here, you stated loud and clear tha libreboot comes first before coreboot, I respect that. But the t480 patchset is the one too from upstream. That upstream patch needs to build, and then will be merged and then you won't have to maintain it either. And others will fix audio issues, nvidia etc. Otherwise its silo work, and i'm not interested in that anymore</p><p>---</p><p>Yes, there is different coreboot forks specified in a central place: modules/coreboot. </p><p>And there, the buildsystem says if it can reuse crossgcc of another fork to fasten builds for each commit. The idea here is that the user building one board, or multiple boards will get the same result, but CI building multiple boards based on the same fork will speed up builds massively.</p><p>d16 will move to fam15h fork from other community effort. I mentor now, I don't try to do everything myself. Just as here, trying tto collaborate with you so you fix what was brought up upstream. But up to now, you are upstream for t480.</p><p>The goal here was not to compare our buildsystems, simply stating that the patchset upstream will never be merged if it causes regressions building other boards. Libreboot can do what it wants, but needs to respect how coreboot works. Their CI does the same, and make sure that building a commit for a board won't break others. In current case, it breaks others and needs to be updated.</p><p>This needs to be fixed upstream at <a href="https://review.coreboot.org/c/coreboot/+/83274" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">review.coreboot.org/c/coreboot</span><span class="invisible">/+/83274</span></a></p>
Craig Hockenberry<p>Good news: there's code for it:</p><p><a href="https://mastodon.social/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> ZAHL<br><a href="https://mastodon.social/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> ZAHL 0<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>Bad news: XOR-ing a value with 0 isn't going to help. It's a NOP.</p><p>And it's intentional, for example:</p><p>ts ^= ZAHL; /* hehe */</p><p>I can’t reverse engineer the real value of ZAHL without knowing the original timestamp.</p><p>It might be possible to do an exhaustive search, but time_t is a long long and my time is short short.</p><p>So no blog.fefe.de for Tapestry. Sorry!</p><p>3/3</p>
Christian Beer<p>If you ask me, we all should not use ! like this:</p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> !os(macOS<br> ... <br><a href="https://mastodon.social/tags/else" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>else</span></a><br> ... do macOS things<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>The ! can be overlooked easily as it's only very thin... also why not just turn it around:</p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> os(macOS)<br> ... do macOS things<br><a href="https://mastodon.social/tags/else" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>else</span></a><br> …<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p>
lambdageek<p><span class="h-card" translate="no"><a href="https://mastodon.social/@mcc" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>mcc</span></a></span> </p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> false<br>Console.WriteLine("Hello false");<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a><br><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> true<br>Console.WriteLine("Hello true");<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>printed hello true.</p><p>adding a DefineConstants for false<br>1. wasn't an error 😠 <br>2. still only printed "hello true"</p>
mcc<p>I am in C#. I wish to create an <a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a>…<a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a> block that will always be false. I say "<a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> false". This will:</p><p>- Erase the code because "false" is not a defined symbol<br>- Keep the code because "false" is a keyword<br>- Keep or not keep depending on whether a command to define false was sent to the c# compiler</p><p>?</p><p>Here's some documentation. It doesn't help with this question</p><p><a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives#conditional-compilation" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">learn.microsoft.com/en-us/dotn</span><span class="invisible">et/csharp/language-reference/preprocessor-directives#conditional-compilation</span></a></p>
witch_t *navi<pre><code>#ifdef ENABLE_TRADITIONAL_ACTIVATION /* Kill the spawned process, since it sucks * (not sure this is what we want to do, but * may as well try it for now) */ if (pending_activation-&gt;babysitter) _dbus_babysitter_kill_child (pending_activation-&gt;babysitter); <a class="hashtag" href="https://social.vlhl.dev/tag/endif" rel="nofollow noopener noreferrer" target="_blank">#endif</a> </code></pre><p>why is this so funny to me</p>
Fluor<p><span class="h-card" translate="no"><a href="https://mastodon.social/@mcc" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>mcc</span></a></span> true but really it was nothing more than</p><p><a href="https://wetdry.world/tags/ifdef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifdef</span></a> vsh<br>[vsh code]<br><a href="https://wetdry.world/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p><a href="https://wetdry.world/tags/ifdef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifdef</span></a> fsh<br>[fsh code]<br><a href="https://wetdry.world/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>so really nothing crazy here, it just allows you to have everything in one file instead of having to jump between 2 (though now that you point it out, not having the ability to set breakpoints is kind of an issue here)</p>
наб<p><span class="h-card" translate="no"><a href="https://social.treehouse.systems/@grawity" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>grawity</span></a></span> my anonymous dump from vetusware (that calls it "This is AT&amp;T's swan song of UNIX, SYSVr4. The base platform here is the i386." but doesn't mention XENIX) doesn't know of any others, sys/stat.h dated 1993-01-26 says</p><p><a href="https://101010.pl/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> !defined(_POSIX_SOURCE)<br><a href="https://101010.pl/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> S_IFNAM 0x5000 /* XENIX special named file */<br><a href="https://101010.pl/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> S_INSEM 0x1 /* XENIX semaphore subtype of IFNAM */<br><a href="https://101010.pl/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> S_INSHD 0x2 /* XENIX shared data subtype of IFNAM */<br><a href="https://101010.pl/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a> /* !defined(_POSIX_SOURCE) */</p><p>it's just really surprising because this is a whole new File Type. that i've never before seen and will likely never see and is undocumented in my SysVr4 manuals from AT&amp;T. that API is also missing. but i suppose that's expected if it's a XENIX thing</p>
Ariadne Conill 🐰:therian:<p><span class="h-card" translate="no"><a href="https://hachyderm.io/@dalias" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>dalias</span></a></span> <span class="h-card" translate="no"><a href="https://social.treehouse.systems/@ska" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>ska</span></a></span> oh, sure, but that isn’t incompatible with what i am saying, which is that platform-specific abstractions for code which actually needs it (such as parallel I/O) are a good thing over ifdef hell.</p><p>though i have also seen in code:</p><p><a href="https://social.treehouse.systems/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> !defined(__GLIBC__) &amp;&amp; defined(__linux__) &amp;&amp; !defined(__ANDROID__)<br># define MUSL (1)<br><a href="https://social.treehouse.systems/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>so i am not sure we have succeeded here as much as we would like to believe we have</p>
Begasus<p><a href="https://mastodon.social/tags/KTimer" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>KTimer</span></a> 24.02.2 also working fine on <a href="https://mastodon.social/tags/HaikuOS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HaikuOS</span></a>, to bad <a href="https://mastodon.social/tags/KDE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>KDE</span></a> insists on forcing DBusService into the applications, patching it out works fine enough though for Haiku though (mostly).<br>Dirty patch (for checking):<br> // KDBusService service;</p><p>Proper patch (for packaging):<br> <a href="https://mastodon.social/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> Q_OS_HAIKU<br> KDBusService service;<br> <a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p>
Ariadne Conill 🐰:therian:<pre><code>#if !defined(__XEN__) &amp;&amp; !defined(__XEN_TOOLS__)<br>#error "domctl operations are intended for use by node control tools only"<br>#endif <br></code></pre><p>thanks, i hate it</p>
jacquelines 🌟<p><a href="https://chaos.social/tags/ifdef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifdef</span></a> __cplusplus<br>extern "C" {<br><a href="https://chaos.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p>
Hidde van der Ploeg<p>If Self._printChanges() was your best friend debugging <a href="https://mastodon.design/tags/SwiftUI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SwiftUI</span></a> views. </p><p>Go ahead and try the new Self._logChanges() instead!</p><p>var body: some View {<br><a href="https://mastodon.design/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> DEBUG<br> let _ = Self._logChanges()<br><a href="https://mastodon.design/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a><br> // … rest of view body …<br> }</p><p>It does the exact same thing but logs at the info level to the "com.apple.SwiftUI" which is cleaner (and easier to filter) in your console ✨</p><p>*In Xcode 15.1 and up</p>
Paul Haddad :tapbots_logo:<p><span class="h-card"><a href="https://mastodon.social/@marcoarment" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>marcoarment</span></a></span> I mean you can work around at least one of those.</p><p><a href="https://tapbots.social/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> let<br><a href="https://tapbots.social/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> let __auto_type const<br><a href="https://tapbots.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p><a href="https://tapbots.social/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> var<br><a href="https://tapbots.social/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> var __auto_type<br><a href="https://tapbots.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p>
Simon B. Støvring<p>Wrapping iOS-specific code in</p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> os(iOS) &amp;&amp; !os(xrOS)<br>...<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>does the trick. That solves my need but it isn't intuitive for me that the compiler allows an overlap between the platforms.</p><p>Thanks for the help <span class="h-card" translate="no"><a href="https://mstdn.social/@adamwulf" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>adamwulf</span></a></span>! 🙏</p>
Simon B. Støvring<p>Code wrapped in</p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> os(iOS)<br>...<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>*is* included when compiling for visionOS but code wrapped in</p><p><a href="https://mastodon.social/tags/if" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>if</span></a> os(xrOS)<br>...<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>is *not* included when compiling for iOS.</p><p>This makes it tricky to manage platform-specific code 🧐</p>
mattst88 :gentoo:<p>I rebuild Mesa with assertions enabled and rerun the unit test... and it passes. Huh?</p><p>I rebuild without assertions, assuming I made some kind of mistake. Unit test fails again.</p><p>I confirm that the allocations are properly aligned when Mesa is built with assertions and unaligned when built without assertions. So I'm not going crazy, but WTF?</p><p>Then I spot this in the definition of the `gc_block_header` struct (which `gc_alloc_size` allocates):</p><p>&gt; <a href="https://fosstodon.org/tags/ifndef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifndef</span></a> NDEBUG<br>&gt; unsigned canary;<br>&gt; <a href="https://fosstodon.org/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>Oh.</p>
Studio 8502 :verified:<p>Not-So-Stupid C Tricks: Preprocessor Basics</p><p>This one is especially for C newbies. I suppose most of you will already know it, so feel free to ignore it.</p><p>You probably know this bit of C:</p><pre><code>#define PI 3.14159<br></code></pre><p>which makes PI a preprocessor symbol that is replaced at compile time with its value. Great, that's good to have, and we all use it a lot. But what if you need a compile time symbol with a default value, but you want to be able to change it at compile time without altering the source code?</p><p>Here's how you do it:</p><pre><code>#ifndef MY_SYMBOL<br>#define MY_SYMBOL 0xCAFEBEEF<br>#endif<br></code></pre><p>What this does is, the preprocessor will check if MY_SYMBOL is already defined, and only define it with the source code if it's not. You can override it at compile time by passing the compiler the <code>-DMY_SYMBOL=whatever</code> argument, usually tucked into your CFLAGS variable via Make.</p>
screwlisp<p><span class="h-card"><a href="https://mastodon.sdf.org/@zoerhoff" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>zoerhoff</span></a></span> <span class="h-card"><a href="https://mastodon.social/@amszmidt" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>amszmidt</span></a></span> on this note, change m 's line 90 &lt;&lt;&lt; to &lt; for /bin/sh (as on openbsd current) the other change I needed to make was to add a missing function prototype to usim's tv.c . I just wedged the tv_write() function prototype at the top of the file rather than putting it in the header. After which usim appeared to build happily. I didn't think about how it relates to the tv.h <a href="https://mastodon.sdf.org/tags/IFNDEF" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IFNDEF</span></a> USIM_TV_H .. extern void tv_write(uint32_t, uint32_t); .. <a href="https://mastodon.sdf.org/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a> prototype. I should think more ;p</p>
Krishean Draconis<p><span class="h-card"><a href="https://mastodon.social/@bagder" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>bagder</span></a></span> to build <a href="https://mastodon.social/tags/trurl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>trurl</span></a> with msvc you need to define strncasecmp with something like</p><p><a href="https://mastodon.social/tags/ifdef" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ifdef</span></a> _MSC_VER<br><a href="https://mastodon.social/tags/define" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>define</span></a> strncasecmp _strnicmp<br><a href="https://mastodon.social/tags/endif" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>endif</span></a></p><p>And a few minor changes to the perl tests</p><p>test.pl: replace single quotes with double quotes on lines 22,23,24<br>my <span class="h-card"><a href="https://mastodon.social/@out" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>out</span></a></span> = ($^O eq 'MSWin32')?`.\\trurl.exe $i 2&gt;nul`:`./trurl $i 2&gt;/dev/null`;</p><p>Similar line for <span class="h-card"><a href="https://mastodon.social/@out" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>out</span></a></span> in test-json.pl</p><p>There might be better ways to do any of this, it's just what I did to get it to work</p>