Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://stackapps.com/feeds

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:re="http://purl.org/atompub/rank/1.0">
  3.    <title type="text">Recent Questions - Stack Apps</title>
  4.    <link rel="self" href="https://stackapps.com/feeds" type="application/atom+xml" />
  5.    <link rel="alternate" href="https://stackapps.com/questions" type="text/html" />
  6.    <subtitle>most recent 30 from stackapps.com</subtitle>
  7.    <updated>2024-04-25T10:00:23Z</updated>
  8.    <id>https://stackapps.com/feeds</id>
  9.    <creativeCommons:license>https://creativecommons.org/licenses/by-sa/4.0/rdf</creativeCommons:license>
  10.    <entry>
  11.        <id>https://stackapps.com/q/10539</id>
  12.        <re:rank scheme="https://stackapps.com">1</re:rank>
  13.        <title type="text">Looking for an app that allows me to view interesting unanswered questions on SE sites using UserId</title>
  14.            <category scheme="https://stackapps.com/tags" term="support" />
  15.        <author>
  16.            <name>CrSb0001</name>
  17.            <uri>https://stackapps.com/users/122265</uri>
  18.        </author>
  19.        <link rel="alternate" href="https://stackapps.com/questions/10539/looking-for-an-app-that-allows-me-to-view-interesting-unanswered-questions-on-se" />
  20.        <published>2024-04-01T15:12:58Z</published>
  21.        <updated>2024-04-03T08:52:35Z</updated>
  22.        <summary type="html">
  23.            &lt;p&gt;I am interested in finding interesting unanswered questions on different SE sites using my UserId.&lt;/p&gt;&#xA;&lt;p&gt;While I am aware of &lt;a href=&quot;https://data.stackexchange.com/stackoverflow/query/4038/find-interesting-unanswered-questions&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; SEDE query that exists, the problem with it is that it seems that with larger sites, or when a user hasn&#x27;t participated in 20&#x2B; tags(?)&lt;sup&gt;1&lt;/sup&gt;, the query times out.&lt;/p&gt;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does there exist an app for this? Or would I need to create an app/is there no need for there to be an app for this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If I would need to create an app, I could do that (learning Javascript shouldn&#x27;t be that difficult), or if there&#x27;s no need, I could just fork the query and work on optimizing the script.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;&lt;sup&gt;1&lt;/sup&gt;Maybe that&#x27;s why the query times out when I put in my UserId when searching on SO? It seems to work with Jon Skeet&#x27;s UserId, but I&#x27;m not really sure.&lt;/sup&gt;&lt;/p&gt;&#xA;
  24.        </summary>
  25.    </entry>
  26.    <entry>
  27.        <id>https://stackapps.com/q/10537</id>
  28.        <re:rank scheme="https://stackapps.com">2</re:rank>
  29.        <title type="text">Fix for network filter deletions</title>
  30.            <category scheme="https://stackapps.com/tags" term="script" />
  31.        <author>
  32.            <name>VLAZ</name>
  33.            <uri>https://stackapps.com/users/62199</uri>
  34.        </author>
  35.        <link rel="alternate" href="https://stackapps.com/questions/10537/fix-for-network-filter-deletions" />
  36.        <published>2024-03-25T14:24:15Z</published>
  37.        <updated>2024-03-26T14:11:50Z</updated>
  38.        <summary type="html">
  39.            &lt;h2&gt;Description&lt;/h2&gt;&#xA;&lt;h3&gt;Problem&lt;/h3&gt;&#xA;&lt;p&gt;See the report: &lt;a href=&quot;https://meta.stackexchange.com/questions/324759/cant-delete-the-filter-called-my-filter&quot;&gt;Can&#x27;t delete the filter called My Filter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In short, deleting a filter redirects the browser to the page to immediately create a new filter, therefore you can never get rid of filters.&lt;/p&gt;&#xA;&lt;h3&gt;Fix&lt;/h3&gt;&#xA;&lt;p&gt;Override what the deletion button does. Clicking it would now handle the deletion correctly by hitting the link to delete a filter &lt;em&gt;without&lt;/em&gt; following the redirection.&lt;/p&gt;&#xA;&lt;h2&gt;Installation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PurpleMagick/se_userscript-fix-network-filter-deletion/raw/main/src/se-network-filters-deletion-fixed.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;Direct install (GitHub)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PurpleMagick/se_userscript-fix-network-filter-deletion&quot; rel=&quot;nofollow noreferrer&quot;&gt;See the code on GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(For instructions how to install userscripts: &lt;a href=&quot;https://stackapps.com/tags/script/info&quot;&gt;see the tag wiki here&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;// ==UserScript==&#xA;// @name            Stack Exchange - fix filter deletion&#xA;// @namespace       https://github.com/PurpleMagick/&#xA;// @description     Deleting a filter redirects to the new filter page, thus you never get rid of filters&#xA;// @author          VLAZ&#xA;// @version         1.0.0&#xA;//&#xA;// @match           https://stackexchange.com/filters/*&#xA;//&#xA;// @grant           none&#xA;// ==/UserScript==&#xA;&#xA;(function() {&#xA;    main();&#xA;&#xA;    function main() {&#xA;        //handle coming in with a delete ID set&#xA;        const searchParams = new URLSearchParams(location.search);&#xA;        if (searchParams.has(&amp;quot;delete&amp;quot;)) //delete and exit&#xA;            return deleteFilter(createDeleteLinkFromFilterId(searchParams.get(&amp;quot;delete&amp;quot;)));&#xA;&#xA;        const deleteButton = document.querySelector(&amp;quot;#yes&amp;quot;);&#xA;&#xA;        //nothing to delete&#xA;        if (!deleteButton)&#xA;            return;&#xA;&#xA;        const deleteLink = deleteButton.href;&#xA;&#xA;        //set the ID to delete to allow opening in new tab/window&#xA;        deleteButton.href = createActionURL(deleteLink);&#xA;&#xA;        //if directly clicked, just perform the deletion immediately&#xA;        deleteButton.addEventListener(&amp;quot;click&amp;quot;, (e) =&amp;gt; {&#xA;            e.preventDefault();&#xA;            deleteFilter(deleteLink);&#xA;        });&#xA;    }&#xA;&#xA;    function deleteFilter(deleteLink) {&#xA;        const firstFilter = document.querySelector(&amp;quot;#sideBar .filters ul:nth-of-type(1) li:nth-child(1) .filter-name a&amp;quot;);&#xA;&#xA;        fetch(deleteLink, { redirect: &amp;quot;manual&amp;quot; })&#xA;            .then(() =&amp;gt; location.href = firstFilter.href);&#xA;    }&#xA;&#xA;    function createDeleteLinkFromFilterId(filterId) {&#xA;        return `https://stackexchange.com/filters/delete/${filterId}`;&#xA;    }&#xA;&#xA;    function extractFilterIdFromDeleteLink(deleteLink) {&#xA;        const url = new URL(deleteLink);&#xA;        const pathSegments = url.pathname.split(&amp;quot;/&amp;quot;);&#xA;        return pathSegments[pathSegments.length - 1];&#xA;    }&#xA;&#xA;    function createActionURL(deleteLink) {&#xA;        const actionURL = new URL(location.href);&#xA;        actionURL.searchParams.set(&amp;quot;delete&amp;quot;, extractFilterIdFromDeleteLink(deleteLink));&#xA;        return actionURL.toString();&#xA;    }&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  40.        </summary>
  41.    </entry>
  42.    <entry>
  43.        <id>https://stackapps.com/q/10536</id>
  44.        <re:rank scheme="https://stackapps.com">0</re:rank>
  45.        <title type="text">PLACEHOLDER - Obsidian Digital Garden plus Eleventy Serverless OAuth demo</title>
  46.            <category scheme="https://stackapps.com/tags" term="app" />
  47.            <category scheme="https://stackapps.com/tags" term="website" />
  48.        <author>
  49.            <name>Wicket</name>
  50.            <uri>https://stackapps.com/users/105187</uri>
  51.        </author>
  52.        <link rel="alternate" href="https://stackapps.com/questions/10536/placeholder-obsidian-digital-garden-plus-eleventy-serverless-oauth-demo" />
  53.        <published>2024-03-24T02:22:16Z</published>
  54.        <updated>2024-03-27T17:53:00Z</updated>
  55.        <summary type="html">
  56.            &lt;!-- thumbnail: https://example.com/some-image.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: website --&gt;&#xA;&lt;!-- excerpt: Demo of Obsidian Digital Garden plus Eleventy Serverless OAuth --&gt;&#xA;&lt;h2&gt;Screenshot / Code Snippet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O4QXL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O4QXL.png&quot; alt=&quot;Stack Overflow user infortion displayed on Obisidian Digital Garden plugin plus Eleventy Serverless generated webpage&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;This is a &lt;em&gt;proof of concept&lt;/em&gt; / &amp;quot;minimal, complete, verifiable example&amp;quot; of adding the Eleventy Serverless plugin to an instance of Obisidian Digital Garden&#x27;s (ODG) template repo for using a Stack Overflow account to &lt;strong&gt;log in&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;ODG is a community plugin for &lt;a href=&quot;https://obsidian.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;Obsidian&lt;/a&gt;, a cross-platform note-taking app that uses markdown for note files.&lt;/p&gt;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;TBD&lt;/p&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Website: &lt;a href=&quot;https://demo-dg-oauth.netlify.app&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://demo-dg-oauth.netlify.app&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;GitHub Repository: &lt;a href=&quot;https://github.com/rubenrivera/demo-dg-oauth&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rubenrivera/demo-dg-oauth&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;Web Browsers: Chrome, Firefox, Safari. Other web browsers like Brave and Edge might work too.&lt;/p&gt;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&lt;p&gt;I created this app using several tools.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GitHub&lt;/li&gt;&#xA;&lt;li&gt;Netlify&lt;/li&gt;&#xA;&lt;li&gt;Eleventy&lt;/li&gt;&#xA;&lt;li&gt;Node.js&lt;/li&gt;&#xA;&lt;li&gt;Nunjucks&lt;/li&gt;&#xA;&lt;li&gt;JavaScript&lt;/li&gt;&#xA;&lt;li&gt;HTML&lt;/li&gt;&#xA;&lt;li&gt;SCSS&lt;/li&gt;&#xA;&lt;li&gt;CSS&lt;/li&gt;&#xA;&lt;li&gt;SVG&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Highlights&lt;/h2&gt;&#xA;&lt;p&gt;The repository &lt;a href=&quot;https://github.com/rubenrivera/demo-dg-oauth&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rubenrivera/demo-dg-oauth&lt;/a&gt; could be forked, but if you want to do &amp;quot;from scratch&amp;quot;, below are the &amp;quot;not so broad&amp;quot; steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Deploy a site using the &lt;strong&gt;Deploy to Netlify&lt;/strong&gt; button from the &lt;strong&gt;Obsidian Digital Garden&lt;/strong&gt; community plugin documentation. If you want to run this from anywhwere, grab the site URL.&lt;/li&gt;&#xA;&lt;li&gt;Register the app on stackapps.com. Get the &lt;strong&gt;client ID&lt;/strong&gt;, &lt;strong&gt;client secret&lt;/strong&gt;, and &lt;strong&gt;key&lt;/strong&gt;. For local development/testing, set &lt;strong&gt;localhost&lt;/strong&gt; as the OAuth domain.&lt;/li&gt;&#xA;&lt;li&gt;Add the &lt;strong&gt;client id&lt;/strong&gt;, &lt;strong&gt;client secret&lt;/strong&gt; and &lt;strong&gt;key&lt;/strong&gt; from the previous step as environment variables to the site settings on Netlify.&lt;/li&gt;&#xA;&lt;li&gt;Add the Eleventy Serverless plugin to &lt;code&gt;userSetup.js&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add the authentication files from the Eleventy Serverless OAuth demo (&lt;code&gt;Netlify/functions/dynamic/index.js&lt;/code&gt;, &lt;code&gt;Netlify/functions/Utils/*&lt;/code&gt;, &lt;code&gt;Netlify/functions/auth-before.js&lt;/code&gt; and &lt;code&gt;Netlify/functions/auth-callback.js&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Add &lt;code&gt;index.njk&lt;/code&gt; and &lt;code&gt;secure.njk&lt;/code&gt; from the Eleventy Serverless OAuth demo to &lt;code&gt;/src/site/&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Edit the files from the previous steps.&lt;/li&gt;&#xA;&lt;li&gt;Edit &lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;netlify.toml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Install the modules required by the Eleventy Serverles  OAuth demo (&lt;code&gt;cookie&lt;/code&gt;, &lt;code&gt;simple-outh2&lt;/code&gt; and &lt;code&gt;node-fetch&lt;/code&gt;). Tip use  &lt;code&gt;npm ci&lt;/code&gt; instead of &lt;code&gt;npm install&lt;/code&gt; / &lt;code&gt;npm i&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;To run locally, install &lt;code&gt;netlify-cli&lt;/code&gt;, then run &lt;code&gt;netlify link&lt;/code&gt; once to run the serverless functions on Netlify servers. Then run &lt;code&gt;netlify dev&lt;/code&gt; on the project root directory to build and run a local web hosting server. Wait for the &lt;strong&gt;Netlify CLI&lt;/strong&gt; to give a message including the URL to be used, i.e., &lt;code&gt;http://localhost:8888&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I used Chrome for testing locally. Safari blocks cookies despite setting a Safari profile to allow cookies and tracking. My other Safari profiles with no settings changes related to cookies / privacy work fine when opening the website from the Netlify servers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;[Workaround] An error occurs when the Serverless function tries to write the favicon using the ODG &lt;code&gt;src/site/_includes/layouts/index.njk&lt;/code&gt; / &lt;code&gt;src/site/_includes/layouts/note.njk&lt;/code&gt; templates for &lt;code&gt;src/site/index.njk&lt;/code&gt; and &lt;code&gt;src/site/secure.njk&lt;/code&gt;. Edit &lt;code&gt;/src/site/_includes/components/pageheader.njk&lt;/code&gt; to add a condition to &amp;quot;favicons&amp;quot; run only on the build phase (not when generating pages by the Serverless functions).&lt;/li&gt;&#xA;&lt;li&gt;[Workaound] An error occurs when the dynamic Serverless function tries to parse markdown notes, including images. Added the parts of &lt;code&gt;.eleventy.js&lt;/code&gt; and the  property copy &lt;code&gt;{from: &amp;quot;.cache&amp;quot;, to: &amp;quot;tmp/.cache&amp;quot; }&lt;/code&gt; to `netlify/functions/dynamic/index.js&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1&gt;Issues&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I am having problems testing the dynamic serverless functions locally. I have not found how to reproduce an error thrown by the deployment process to the production run by Netlify with the &amp;quot;basic&amp;quot; local development environment. I think that I might have to use a local user without writing permissions to the local directory &lt;code&gt;/dist&lt;/code&gt; and use it to &lt;code&gt;netlify dev&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Related&lt;/h1&gt;&#xA;&lt;h2&gt;Other posts from me&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/10533/105187&quot;&gt;PLACEHOLDER - Jard&amp;#237;n Digital de Rub&amp;#233;n&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/10534/105187&quot;&gt;PLACEHOLDER: Propose Stack Overflow / Stack Exchange as OAuth provider to demo-eleventy-serverless-oautn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Other websites that use Stack Overflow / Stack Exchange OAuth&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/7661/105187&quot;&gt;RankOverflow: A website to calculate your Stack Overflow reputation rank in all leagues&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Update&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Moved &lt;code&gt;index.njk&lt;/code&gt; and &lt;code&gt;secure.njk&lt;/code&gt; to src/site/dynamic directory.&lt;/li&gt;&#xA;&lt;li&gt;Moved login/logout buttons to a custom component for the header slot.&lt;/li&gt;&#xA;&lt;li&gt;Moved &amp;quot;References&amp;quot; section to a custom component for the &lt;code&gt;afterContent&lt;/code&gt; slot.&lt;/li&gt;&#xA;&lt;li&gt;Added notes from the Obsidian Digital Garden plugin repository&#x27;s test vault.&lt;/li&gt;&#xA;&lt;li&gt;Added cookie consent by adapting a few files taken from &lt;a href=&quot;https://github.com/osano/cookieconsent&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/osano/cookieconsent&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;
  57.        </summary>
  58.    </entry>
  59.    <entry>
  60.        <id>https://stackapps.com/q/10534</id>
  61.        <re:rank scheme="https://stackapps.com">1</re:rank>
  62.        <title type="text">Propose Stack Overflow / Stack Exchange as OAuth provider to demo-eleventy-serverless-oauth</title>
  63.            <category scheme="https://stackapps.com/tags" term="app" />
  64.            <category scheme="https://stackapps.com/tags" term="users" />
  65.            <category scheme="https://stackapps.com/tags" term="oauth2" />
  66.            <category scheme="https://stackapps.com/tags" term="website" />
  67.        <author>
  68.            <name>Wicket</name>
  69.            <uri>https://stackapps.com/users/105187</uri>
  70.        </author>
  71.        <link rel="alternate" href="https://stackapps.com/questions/10534/propose-stack-overflow-stack-exchange-as-oauth-provider-to-demo-eleventy-serve" />
  72.        <published>2024-03-23T15:39:45Z</published>
  73.        <updated>2024-04-09T14:05:31Z</updated>
  74.        <summary type="html">
  75.            &lt;!-- thumbnail: https://i.stack.imgur.com/4QizM.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: website --&gt;&#xA;&lt;!-- excerpt: This is about a GitHub fork of a static website generator demo to add Stack Exchange / Stack Overflow as a *proof of concept* --&gt;&#xA;&lt;h2&gt;Screenshot / Code Snippet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4QizM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4QizM.png&quot; alt=&quot;Login with Stack Overflow - Eleventy Serverless OAuth Demo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2I1m9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2I1m9.png&quot; alt=&quot;Secure page - Eleventy Serverless OAuth Demo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;Eleventy is a static website generator. On version 1 it added support for severless functions. During the beta, the Eleventy maintainer created a demo for using serverles functions to add OAuth support to a static site including Netlify, GitHub and others but not Stack Exchange / Stack Overflow as OAuth providers. This is about a fork of the demo repo to add Stack Exchange / Stack Overflow as a &lt;em&gt;proof of concept&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;TBD&lt;/p&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;Website: &lt;a href=&quot;https://serene-bonbon-b699e0.netlify.app/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://serene-bonbon-b699e0.netlify.app/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;Web browsers: Chrome, Firefox, Safari. Other browsers like Brave and Edge might work to.&lt;/p&gt;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&lt;p&gt;I created this website / repo from the main branch of &lt;a href=&quot;https://github.com/11ty/demo-eleventy-serverless-oauth&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/11ty/demo-eleventy-serverless-oauth&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Node.js&lt;/li&gt;&#xA;&lt;li&gt;GitHub&lt;/li&gt;&#xA;&lt;li&gt;Netlify&lt;/li&gt;&#xA;&lt;li&gt;Eleventy&lt;/li&gt;&#xA;&lt;li&gt;Nunjucks&lt;/li&gt;&#xA;&lt;li&gt;JavaScript&lt;/li&gt;&#xA;&lt;li&gt;HTML&lt;/li&gt;&#xA;&lt;li&gt;CSS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Highlights&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Stack Exchange Authentication uses &lt;a href=&quot;https://stackoverflow.com&quot;&gt;https://stackoverflow.com&lt;/a&gt; as the token host.&lt;/li&gt;&#xA;&lt;li&gt;To get the user data, use &lt;a href=&quot;https://api.stackexchange.com&quot;&gt;https://api.stackexchange.com&lt;/a&gt;, including the &lt;strong&gt;access token&lt;/strong&gt; taken from the OAuth flow and the &lt;strong&gt;key&lt;/strong&gt; from the app registration.&lt;/li&gt;&#xA;&lt;li&gt;To get the access token, I&#x27;m using &lt;a href=&quot;https://stackoverflow.com/oauth/access_token/json&quot;&gt;https://stackoverflow.com/oauth/access_token/json&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;I added the &lt;strong&gt;client id&lt;/strong&gt; and &lt;strong&gt;client secret&lt;/strong&gt; to the Netlify environment variables as instructed on the referred demo&#x27;s README.md and the &lt;strong&gt;key&lt;/strong&gt; above. I added several if statements to handle using Stack Exchange as an OAuth provider and adapted &lt;code&gt;secure.njk&lt;/code&gt; to handle the Stack Exchange user profile data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;My Learning Outcomes&lt;/h1&gt;&#xA;&lt;p&gt;The demo uses the simple-outh2 Node.js package to authenticate and retrieve the user profile data. There is no need to use this library to get the Stack Exchange user profile. The built-in fetch method introduced in Node.js version 18 can handle this request.&lt;/p&gt;&#xA;&lt;h1&gt;Related Stack Exchange Questions&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://es.stackoverflow.com/q/617408/65&quot;&gt;C&#xF3;mo usar simple-oauth2 para obtener el access_token en la autenticaci&#xF3;n de Stack Overflow&lt;/a&gt;&#xA;The question title is in Spanish, as it was posted on Stack Overflow en espa&#xF1;ol. As there haven&#x27;t been any comments or answers yet, I will offer a bounty, and maybe later, I will post a similar question on Stack Overflow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Now&lt;/h1&gt;&#xA;&lt;p&gt;I paused the work on this repo to focus on my &lt;em&gt;&lt;a href=&quot;https://stackapps.com/q/10533/105187&quot;&gt;jard&#xED;n digital&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I will keep this post here for a while.&lt;/p&gt;&#xA;&lt;h1&gt;Roadmap&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Clean the code.&lt;/li&gt;&#xA;&lt;li&gt;Make a PR into the depo repo owned by 11ty (GitHub user).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1&gt;Related&lt;/h1&gt;&#xA;&lt;h2&gt;&lt;a href=&quot;/questions/tagged/app&quot; class=&quot;post-tag required-tag&quot; title=&quot;show questions tagged &amp;#39;app&amp;#39;&quot; aria-label=&quot;show questions tagged &amp;#39;app&amp;#39;&quot; rel=&quot;tag&quot; aria-labelledby=&quot;tag-app-tooltip-container&quot; data-tag-menu-origin=&quot;Unknown&quot;&gt;app&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/10533/105187&quot;&gt;PLACEHOLDER - Jard&amp;#237;n Digital de Rub&amp;#233;n&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;&lt;a href=&quot;/questions/tagged/support&quot; class=&quot;post-tag required-tag&quot; title=&quot;show questions tagged &amp;#39;support&amp;#39;&quot; aria-label=&quot;show questions tagged &amp;#39;support&amp;#39;&quot; rel=&quot;tag&quot; aria-labelledby=&quot;tag-support-tooltip-container&quot; data-tag-menu-origin=&quot;Unknown&quot;&gt;support&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/4132/105187&quot;&gt;Stack Exchange OAuth2, explicit access-token response format does not adhere to RFC6749 standard&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/8398/105187&quot;&gt;How to register a Stack App with explicit OAuth 2.0 flow to a third party site?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;
  76.        </summary>
  77.    </entry>
  78.    <entry>
  79.        <id>https://stackapps.com/q/10533</id>
  80.        <re:rank scheme="https://stackapps.com">2</re:rank>
  81.        <title type="text">Jard&#xED;n Digital de Rub&#xE9;n</title>
  82.            <category scheme="https://stackapps.com/tags" term="app" />
  83.            <category scheme="https://stackapps.com/tags" term="website" />
  84.        <author>
  85.            <name>Wicket</name>
  86.            <uri>https://stackapps.com/users/105187</uri>
  87.        </author>
  88.        <link rel="alternate" href="https://stackapps.com/questions/10533/jard%c3%adn-digital-de-rub%c3%a9n" />
  89.        <published>2024-03-20T19:51:09Z</published>
  90.        <updated>2024-04-09T14:54:27Z</updated>
  91.        <summary type="html">
  92.            &lt;!-- thumbnail: https://i.stack.imgur.com/SQ1wx.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: website --&gt;&#xA;&lt;!-- excerpt: Personal digital garden to include, among other things, a selection of questions and answers from Stack Exchange.  --&gt;&#xA;&lt;h2&gt;Screenshot / Code Snippet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jxUEJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jxUEJ.png&quot; alt=&quot;https://i.stack.imgur.com/SQ1wx.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;Jard&#xED;n Digital de Rub&#xE9;n is a &lt;strong&gt;digital garden&lt;/strong&gt; having Spanish as the primary language. Some notes might be written in English.&lt;/p&gt;&#xA;&lt;p&gt;One of the uses will be to publish drafts and slight changes to Stack Exchange questions and answers. It&#x27;s &amp;quot;a companion&amp;quot; to Stack Exchange editor and chatrooms.&lt;/p&gt;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;TBD&lt;/p&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;URL: &lt;a href=&quot;https://jardindigital.rubenrivera.mx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://jardindigital.rubenrivera.mx&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;Web browsers: Chrome, Firefox, Safari. Other browsers might work too (Brave, Edge)&lt;/p&gt;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&lt;p&gt;I created this website with the help of several tools. See the following section for details.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;Content is written using Markdown. The website is hosted in Netlify and linked to a private GitHub repository created from the Obsidian Digital Garden template.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://obsidian.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;Obsidian&lt;/a&gt;&lt;/strong&gt; for Mac is used as the content editor, and the &lt;strong&gt;Obsidian Digital Garden plugin&lt;/strong&gt; is used to publish markdown files and linked images to the web.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;em&gt;Obsidian Digital Garden&lt;/em&gt; template (ODGT) uses &lt;strong&gt;Eleventy&lt;/strong&gt;. It is set to be deployed by default on &lt;a href=&quot;https://vercel.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vercel&lt;/a&gt;. Still, I used the automatic deployment to &lt;a href=&quot;https://netlifly.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Netlify&lt;/a&gt; (clicking a button included on the corresponding plugin documentation) because I&#x27;m using code that requires this. See the following bullet. The ODG includes some &amp;quot;end-user&amp;quot; mechanisms :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;/src/helpers/userSetup.js&lt;/code&gt; to add additional Eleventy plugins.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;/src/helpers/userUtils.js&lt;/code&gt; will be used to add calculated data to be used on user-defined components.&lt;/li&gt;&#xA;&lt;li&gt;User-defined components should be added to &lt;code&gt;src/site/_includes/components/user/&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;User-defined style should be added to &lt;code&gt;src/site/styles/user/&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;User-defined client-side JavaScript should be added to &lt;code&gt;src/site/scripts/&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The GitHub repository supporting this site uses code that I taken and adapted from &lt;a href=&quot;https://github.com/11ty/demo-eleventy-serverless-oauth&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/11ty/demo-eleventy-serverless-oauth&lt;/a&gt; to use Stack Overflow / Stack Exchange (SO/SE) as an OAuth provider. This code requires Netlify. An &lt;a href=&quot;https://github.com/11ty/demo-eleventy-serverless-oauth/issues/13&quot; rel=&quot;nofollow noreferrer&quot;&gt;issue&lt;/a&gt; proposed adding SO/SE as a new OAuth provider, including the broad steps. A pull request might be created later.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Additional Eleventy plugins&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Internationalization&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eleventy Internationalization&lt;/li&gt;&#xA;&lt;li&gt;Eleventy Plugin Internationalization (translation and dictionary for labels and stock text.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Eleventy Serverless&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A variant of markdown-it-task-checkbox crafted/adapted by me for using alternate checkboxes like in Kepano&#x27;s Minimal Theme for Obsidian.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Customized code&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;src/site/notes/notes.11tydata.js&lt;/code&gt; file from the Obsidian Digital Garden is one of the customized files. In this case, it was edited to support the Eleventy Serverless plugin.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;require(&amp;quot;dotenv&amp;quot;).config();&#xA;const settings = require(&amp;quot;../../helpers/constants&amp;quot;);&#xA;&#xA;const allSettings = settings.ALL_NOTE_SETTINGS;&#xA;&#xA;module.exports = {&#xA;  eleventyComputed: {&#xA;    layout: (data) =&amp;gt; {&#xA;      if (data.tags.indexOf(&amp;quot;gardenEntry&amp;quot;) != -1) {&#xA;        return &amp;quot;layouts/index.njk&amp;quot;;&#xA;      }&#xA;      return &amp;quot;layouts/note.njk&amp;quot;;&#xA;    },&#xA;    permalink: (data) =&amp;gt; {&#xA;      if (data.tags.indexOf(&amp;quot;gardenEntry&amp;quot;) != -1) {&#xA;        return {&#xA;          dynamic: &amp;quot;/&amp;quot;&#xA;        };&#xA;      }&#xA;      return data.permalink || undefined;&#xA;    },&#xA;    settings: (data) =&amp;gt; {&#xA;      const noteSettings = {};&#xA;      allSettings.forEach((setting) =&amp;gt; {&#xA;        let noteSetting = data[setting];&#xA;        let globalSetting = process.env[setting];&#xA;&#xA;        let settingValue =&#xA;          noteSetting || (globalSetting === &amp;quot;true&amp;quot; &amp;amp;&amp;amp; noteSetting !== false);&#xA;        noteSettings[setting] = settingValue;&#xA;      });&#xA;      return noteSettings;&#xA;    },&#xA;    &amp;quot;eleventyExcludeFromCollections&amp;quot;: (data) =&amp;gt; {&#xA;      if (data.tags.indexOf(&amp;quot;gardenEntry&amp;quot;) != -1) {&#xA;        return true;&#xA;      }&#xA;    }&#xA;  },&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Another customized file from the same repository template is &lt;code&gt;src/site/_includes/component/pageheader.njk&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&#xA;&amp;lt;script src=&amp;quot;https://fastly.jsdelivr.net/npm/mermaid@9.4.0/dist/mermaid.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&amp;lt;script&amp;gt;&#xA;    mermaid.initialize({&#xA;        startOnLoad: true,&#xA;    });&#xA;&amp;lt;/script&amp;gt;&#xA;&amp;lt;script src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/prism.min.js&amp;quot; integrity=&amp;quot;sha512-hpZ5pDCF2bRCweL5WoA0/N1elet1KYL5mx3LP555Eg/0ZguaHawxNvEjF6O3rufAChs16HVNhEc6blF/rZoowQ==&amp;quot; crossorigin=&amp;quot;anonymous&amp;quot; referrerpolicy=&amp;quot;no-referrer&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&amp;lt;script src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/autoloader/prism-autoloader.min.js&amp;quot; integrity=&amp;quot;sha512-sv0slik/5O0JIPdLBCR2A3XDg/1U3WuDEheZfI/DI5n8Yqc3h5kjrnr46FGBNiUAJF7rE4LHKwQ/SoSLRKAxEA==&amp;quot; crossorigin=&amp;quot;anonymous&amp;quot; referrerpolicy=&amp;quot;no-referrer&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;{%include &amp;quot;components/calloutScript.njk&amp;quot;%}&#xA;&#xA;&amp;lt;script src=&amp;quot;https://fastly.jsdelivr.net/npm/force-graph@1.43.0/dist/force-graph.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;&amp;lt;script defer src=&amp;quot;https://fastly.jsdelivr.net/npm/@alpinejs/persist@3.11.1/dist/cdn.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&amp;lt;script src=&amp;quot;https://fastly.jsdelivr.net/npm/alpinejs@3.11.1/dist/cdn.min.js&amp;quot; defer&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/themes/prism-okaidia.min.css&amp;quot; integrity=&amp;quot;sha512-mIs9kKbaw6JZFfSuo&#x2B;MovjU&#x2B;Ntggfoj8RwAmJbVXQ5mkAX5LlgETQEweFPI18humSPHymTb5iikEOKWF7I8ncQ==&amp;quot; crossorigin=&amp;quot;anonymous&amp;quot; referrerpolicy=&amp;quot;no-referrer&amp;quot;/&amp;gt;&#xA;&amp;lt;script src=&amp;quot;https://fastly.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.min.js&amp;quot; crossorigin=&amp;quot;anonymous&amp;quot; referrerpolicy=&amp;quot;no-referrer&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;&amp;lt;script src=&amp;quot;https://polyfill.io/v3/polyfill.min.js?features=es6&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&amp;lt;link href=&amp;quot;/styles/digital-garden-base.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;{%-if meta.themeStyle%}&#xA;    &amp;lt;link href=&amp;quot;/styles/obsidian-base.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;    &amp;lt;link href=&amp;quot;{{meta.themeStyle}}&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;{% else %}&#xA;    &amp;lt;link href=&amp;quot;/styles/style.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;{%endif%}&#xA;&#xA;&amp;lt;link href=&amp;quot;/styles/custom-style.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;{%- for style in dynamics.styles -%}&#xA;&amp;lt;link href=&amp;quot;{{style}}&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&#xA;{%- endfor -%}&#xA;{% if eleventy.serverless %}&#xA;&#xA;{% else %}&#xA;{% favicons &#x27;./src/site/favicon.svg&#x27;, appleIconBgColor=&#x27;#123&#x27; %}&#xA;{% endif %}&#xA;{% if metatags %}&#xA;    {% for name, content in metatags %}&#xA;        &amp;lt;meta name=&amp;quot;{{ name }}&amp;quot; content=&amp;quot;{{ content }}&amp;quot;&amp;gt;&#xA;    {% endfor %}&#xA;{% endif %}&#xA;&#xA;{% if meta.styleSettingsCss %}&#xA;    &amp;lt;style&amp;gt;&#xA;        {{ meta.styleSettingsCss | safe }}&#xA;    &amp;lt;/style&amp;gt;&#xA;{% endif %}&#xA;&amp;lt;style&amp;gt;&#xA;&amp;lt;/style&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1&gt;Roadmap&lt;/h1&gt;&#xA;&lt;h2&gt;Now&lt;/h2&gt;&#xA;&lt;p&gt;I&#x27;m working on making the login with Stack Exchange accounts work.&lt;/p&gt;&#xA;&lt;h2&gt;Other goals&lt;/h2&gt;&#xA;&lt;p&gt;The idea is to use a &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Network-attached_storage&quot; rel=&quot;nofollow noreferrer&quot;&gt;network attached storage&lt;/a&gt;&lt;/strong&gt; (NAS) as the primary host and use a hosting service like Netlify if the NAS fails or is under maintenance.&lt;/p&gt;&#xA;&lt;p&gt;Publish &amp;quot;rocks&amp;quot; (notes that no longer be updated) to a WordPress site or as a PDF to file hosting service like Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;Share notes privately to selected Stack Exchange accounts, i.e., a site&#x27;s community moderator team.&lt;/p&gt;&#xA;&lt;p&gt;Add a comments feature using the user&#x27;s selected Stack Exchange site profile.&lt;/p&gt;&#xA;&lt;p&gt;Reuse code from &lt;a href=&quot;https://stackapps.com/q/9730/105187&quot;&gt;Export to Google Docs&#x2122; companion&lt;/a&gt; for importing posts from Stack Exchange directly into the Obsidian vault.&lt;/p&gt;&#xA;&lt;h1&gt;Resources&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/garden-history&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Brief History &amp;amp; Ethos of the Digital Garden&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Update&lt;/h1&gt;&#xA;&lt;p&gt;If you go to &lt;a href=&quot;https://jardindigital.rubenrivera.mx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://jardindigital.rubenrivera.mx&lt;/a&gt; you will see two login sections, one for using Stack Exchange and another for using other providers.&lt;/p&gt;&#xA;&lt;p&gt;The website already supports login using GitHub, but I need help making the login with Stack Exchange work properly. The code taken from the demo-eleventy-serverless-oauth uses simple-outh2 node package, I haven&#x27;t found how to use it with the Stack Exchange Authentication.&lt;/p&gt;&#xA;&lt;p&gt;The Obsidian Digital Garden uses the Axios Node.js package, so I used it to make the API calls to &lt;a href=&quot;https://stackoverflow.com&quot;&gt;https://stackoverflow.com&lt;/a&gt; and &lt;a href=&quot;https://api.stackexchange.com&quot;&gt;https://api.stackexchange.com&lt;/a&gt;. Still, I need help with adapting the demo-eleventy-serverless-oauth for my use case. The problem is somewhere in the cookie handling or passing the response from /me to the Stack Exchange API endpoint to Eleventy Global Data.&lt;/p&gt;&#xA;&lt;p&gt;I&#x27;m working on creating a &lt;em&gt;minimal, complete, verifiable example&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Done&lt;/strong&gt;: Fork &lt;a href=&quot;https://github.com/11ty/demo-eleventy-serverless-oauth&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/11ty/demo-eleventy-serverless-oauth&lt;/a&gt; and adapt it to support having Stack Overflow / Stack Exchange as an OAuth provider. See &lt;a href=&quot;https://stackapps.com/q/10534/105187&quot;&gt;Propose Stack Overflow / Stack Exchange as OAuth provider to demo-eleventy-serverless-oauth&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Done&lt;/strong&gt;: Make a &amp;quot;minimal, complete, verifiable example&amp;quot; of adding Eleventy Serverless to a copy of the Obisidian Digital Garden GitHub repository template, using Stack Overflow as an OAuth provider. For further details, see &lt;a href=&quot;https://stackapps.com/q/10536/105187&quot;&gt;PLACEHOLDER - Obsidian Digital Garden plus Eleventy Serverless OAuth demo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Related&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackapps.com/q/10503/105187&quot;&gt;Backpack: Download all of your questions and answers across all SE sites as Markdown files&lt;/a&gt;&lt;br /&gt;&#xA;This other &lt;a href=&quot;/questions/tagged/app&quot; class=&quot;post-tag required-tag&quot; title=&quot;show questions tagged &amp;#39;app&amp;#39;&quot; aria-label=&quot;show questions tagged &amp;#39;app&amp;#39;&quot; rel=&quot;tag&quot; aria-labelledby=&quot;tag-app-tooltip-container&quot; data-tag-menu-origin=&quot;Unknown&quot;&gt;app&lt;/a&gt; written in Python might help add all the posts to the Obsidian vault feeding a digital garden.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;
  93.        </summary>
  94.    </entry>
  95.    <entry>
  96.        <id>https://stackapps.com/q/10527</id>
  97.        <re:rank scheme="https://stackapps.com">3</re:rank>
  98.        <title type="text">SO Link-only Parser: Parse Stack Overflow for potentially link-only answers</title>
  99.            <category scheme="https://stackapps.com/tags" term="app" />
  100.            <category scheme="https://stackapps.com/tags" term="answers" />
  101.            <category scheme="https://stackapps.com/tags" term="python" />
  102.        <author>
  103.            <name>Trenton McKinney</name>
  104.            <uri>https://stackapps.com/users/124216</uri>
  105.        </author>
  106.        <link rel="alternate" href="https://stackapps.com/questions/10527/so-link-only-parser-parse-stack-overflow-for-potentially-link-only-answers" />
  107.        <published>2024-03-13T01:49:45Z</published>
  108.        <updated>2024-03-27T20:54:06Z</updated>
  109.        <summary type="html">
  110.            &lt;p&gt;The provided Python script is designed to identify potentially &amp;quot;link-only&amp;quot; answers on Stack Overflow for a specified time period and set of tags. It does this by leveraging the Stack Exchange API to fetch questions and their associated answers, applying certain criteria to determine if an answer is primarily composed of links. Here&#x27;s a breakdown of its functionality:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration and Constants&lt;/strong&gt;: The script starts by importing necessary libraries and setting up constants such as the number of days in a month, body length limit for an answer to be considered link-only, page size for API requests, and log level. It also specifies tags to filter the questions by and the date range for the search.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logging Setup&lt;/strong&gt;: It configures logging to record the process, including found link-only answers, to a log file named according to the specified start and end dates.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Date Range Processing&lt;/strong&gt;: A generator function &lt;code&gt;month_range&lt;/code&gt; is defined to iterate over each month within the specified date range, facilitating the handling of the Stack Exchange API&#x27;s time window limitations.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration File Loading&lt;/strong&gt;: The script loads an external configuration file that contains the API key needed to authenticate requests to the Stack Exchange API.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Requests&lt;/strong&gt;: Using a loop, the script sends requests to the Stack Exchange API to retrieve questions within the specified date range, filtered by the provided tags. For each month in the range, it processes questions page by page until all questions have been fetched.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Link-only Answer Identification&lt;/strong&gt;: For each question, it checks if there are answers and then filters these answers based on criteria for being considered potentially link-only. This includes the presence of &amp;quot;http&amp;quot; in the body (excluding links from &lt;code&gt;https://i.stack.imgur.com&lt;/code&gt;), absence of &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; tags, and a body length below a certain limit. Each identified link-only answer&#x27;s URL is constructed and logged, and the link is added to a list for further processing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error Handling and Rate Limiting&lt;/strong&gt;: The script includes error handling for request failures and respects the API&#x27;s rate limiting by sleeping for the amount of time specified in the &lt;code&gt;backoff&lt;/code&gt; field of the API response, if present.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;: Finally, the script prints the number of identified link-only answers. Although there&#x27;s commented-out code that suggests an intention to open these links in a web browser, this functionality is not enabled in the provided version of the script.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This tool aims to assist in moderating content by identifying answers that might not meet the community&#x27;s standards for quality and completeness, specifically targeting answers that may rely too heavily on links without providing sufficient context or explanation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/trenton3983/stack_overflow/tree/master/Tools&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stack Overflow Tools on GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;import requests&#xA;import json&#xA;from datetime import datetime, timedelta&#xA;import configparser&#xA;import time&#xA;import webbrowser&#xA;import logging&#xA;from pathlib import Path&#xA;&#xA;&#xA;# Load the constants configuration file&#xA;constants = configparser.ConfigParser()&#xA;&#xA;# Define the relative path to the config file&#xA;constants_file_path = Path(__file__).parent / &amp;quot;so_linkonly_parser_config.ini&amp;quot;&#xA;&#xA;# Read the config file&#xA;constants.read(constants_file_path)&#xA;&#xA;# Access the constants&#xA;DAYS_IN_MONTH = constants.getint(&#x27;DEFAULT&#x27;, &#x27;DAYS_IN_MONTH&#x27;)&#xA;BODY_LENGTH_LIMIT = constants.getint(&#x27;DEFAULT&#x27;, &#x27;BODY_LENGTH_LIMIT&#x27;)&#xA;PAGE_SIZE = constants.getint(&#x27;DEFAULT&#x27;, &#x27;PAGE_SIZE&#x27;)&#xA;LOG_LEVEL = constants.get(&#x27;DEFAULT&#x27;, &#x27;LOG_LEVEL&#x27;)&#xA;tags = constants.get(&#x27;DEFAULT&#x27;, &#x27;TAGS&#x27;)&#xA;start_date = constants.get(&#x27;DEFAULT&#x27;, &#x27;START_DATE&#x27;)&#xA;end_date = constants.get(&#x27;DEFAULT&#x27;, &#x27;END_DATE&#x27;)&#xA;&#xA;# Set up logging&#xA;logging.basicConfig(&#xA;    filename=f&amp;quot;./logs/{start_date}_{end_date}_link_only.log&amp;quot;, level=LOG_LEVEL&#xA;)&#xA;&#xA;&#xA;def month_range(start_date, end_date):&#xA;    &amp;quot;&amp;quot;&amp;quot;Generate start and end dates for each day in the range.&amp;quot;&amp;quot;&amp;quot;&#xA;    while start_date &amp;lt; end_date:&#xA;        yield start_date, start_date &#x2B; timedelta(days=1)&#xA;        start_date &#x2B;= timedelta(days=2)&#xA;&#xA;&#xA;# Get the current script&#x27;s directory&#xA;current_dir = Path(__file__).parent&#xA;&#xA;# Define the relative path to the config file&#xA;config_file_path = current_dir / &amp;quot;..&amp;quot; / &amp;quot;..&amp;quot; / &amp;quot;config_api.ini&amp;quot;&#xA;&#xA;# Load the configuration file&#xA;config = configparser.ConfigParser()&#xA;&#xA;# Read the config file&#xA;config.read(config_file_path)&#xA;&#xA;# Get the API key from the configuration file&#xA;api_key = config.get(&amp;quot;stackapps&amp;quot;, &amp;quot;key&amp;quot;)&#xA;&#xA;# Define the API endpoint for questions&#xA;questions_url = &amp;quot;https://api.stackexchange.com/2.3/questions&amp;quot;&#xA;&#xA;# Define the start and end dates&#xA;start_date = datetime.strptime(start_date, &amp;quot;%Y-%m-%d&amp;quot;)&#xA;end_date = datetime.strptime(end_date, &amp;quot;%Y-%m-%d&amp;quot;)&#xA;&#xA;# Create a list to store the links&#xA;links = []&#xA;&#xA;for start_date_month, end_date_month in month_range(start_date, end_date):&#xA;    # Convert the dates to Unix timestamp&#xA;    start_date_unix = int(start_date_month.timestamp())&#xA;    end_date_unix = int(end_date_month.timestamp())&#xA;&#xA;    # Log start_date_str&#xA;    logging.info(&#xA;        f&amp;quot;Start Date: {start_date_month.strftime(&#x27;%Y-%m-%d&#x27;)}, End Date: {end_date_month.strftime(&#x27;%Y-%m-%d&#x27;)}&amp;quot;&#xA;    )&#xA;&#xA;    page = 1&#xA;    while True:&#xA;        # Define the parameters for the API request&#xA;        params = {&#xA;            &amp;quot;order&amp;quot;: &amp;quot;desc&amp;quot;,&#xA;            &amp;quot;sort&amp;quot;: &amp;quot;creation&amp;quot;,&#xA;            &amp;quot;tagged&amp;quot;: tags,  # Search for posts with these tags&#xA;            &amp;quot;fromdate&amp;quot;: start_date_unix,&#xA;            &amp;quot;todate&amp;quot;: end_date_unix,&#xA;            &amp;quot;site&amp;quot;: &amp;quot;stackoverflow&amp;quot;,&#xA;            &amp;quot;filter&amp;quot;: &amp;quot;!-*jbN-o8P3E5&amp;quot;,&#xA;            &amp;quot;key&amp;quot;: api_key,&#xA;            &amp;quot;page&amp;quot;: page,&#xA;            &amp;quot;pagesize&amp;quot;: PAGE_SIZE,&#xA;        }&#xA;&#xA;        try:&#xA;            # Send the API request&#xA;            response = requests.get(questions_url, params=params)&#xA;            data = json.loads(response.text)&#xA;&#xA;            # If no items are returned, we&#x27;ve reached the end of the results&#xA;            if not data[&amp;quot;items&amp;quot;]:&#xA;                break&#xA;&#xA;            # For each question, parse the &#x27;answers&#x27; key directly&#xA;            for question in data[&amp;quot;items&amp;quot;]:&#xA;                # Check if the question has answers&#xA;                if &amp;quot;answers&amp;quot; in question:&#xA;                    # Filter for answers that may primarily be link-only and exclude links from https://i.stack.imgur.com&#xA;                    link_only_answers = [&#xA;                        item&#xA;                        for item in question[&amp;quot;answers&amp;quot;]&#xA;                        if &amp;quot;http&amp;quot; in item[&amp;quot;body&amp;quot;]&#xA;                        and &amp;quot;https://i.stack.imgur.com&amp;quot; not in item[&amp;quot;body&amp;quot;]&#xA;                        and &amp;quot;&amp;lt;code&amp;gt;&amp;quot; not in item[&amp;quot;body&amp;quot;]&#xA;                        and len(item[&amp;quot;body&amp;quot;]) &amp;lt; BODY_LENGTH_LIMIT&#xA;                    ]&#xA;&#xA;                    if link_only_answers:&#xA;                        logging.info(f&amp;quot;Question ID: {question[&#x27;question_id&#x27;]}&amp;quot;)&#xA;                        # Log the link-only answers&#xA;                        for answer in link_only_answers:&#xA;                            link = f&amp;quot;https://stackoverflow.com/a/{answer[&#x27;answer_id&#x27;]}&amp;quot;&#xA;                            logging.info(&#xA;                                f&amp;quot;Answer ID: {answer[&#x27;answer_id&#x27;]}, Link: {link}&amp;quot;&#xA;                            )&#xA;                            # Add the link to the list&#xA;                            links.append(link)&#xA;            logging.info(f&#x27;Remaining Quota: {data[&amp;quot;quota_remaining&amp;quot;]}&#x27;)&#xA;            if &amp;quot;backoff&amp;quot; in data:&#xA;                time.sleep(data[&amp;quot;backoff&amp;quot;])&#xA;&#xA;            # Increment the page number for the next request&#xA;            page &#x2B;= 1&#xA;&#xA;        except requests.exceptions.RequestException as e:&#xA;            logging.error(f&amp;quot;Request failed: {e}&amp;quot;)&#xA;            time.sleep(5)&#xA;&#xA;# print the number of links&#xA;print(f&amp;quot;Number of link-only answers: {len(links)}&amp;quot;)&#xA;&#xA;# Open the links in a browser&#xA;# for link in links:&#xA;#     webbrowser.open(link)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;so_linkonly_parser_config.ini&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;TAGS&lt;/code&gt; can be multiple tags separated by a &lt;code&gt;;&lt;/code&gt;, such as &lt;code&gt;python;matplotlib&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;[DEFAULT]&#xA;DAYS_IN_MONTH = 32&#xA;BODY_LENGTH_LIMIT = 500&#xA;PAGE_SIZE = 100&#xA;LOG_LEVEL = INFO&#xA;TAGS = python&#xA;START_DATE = 2024-01-01&#xA;END_DATE = 2024-01-31&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;config_api.ini&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;[stackapps]&#xA;client_id = ...&#xA;client_secret = ...&#xA;key = ...&#xA;redirect_uri = https://stackoverflow.com/oauth/login_success&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  111.        </summary>
  112.    </entry>
  113.    <entry>
  114.        <id>https://stackapps.com/q/10517</id>
  115.        <re:rank scheme="https://stackapps.com">4</re:rank>
  116.        <title type="text">Fix for the network search pagination</title>
  117.            <category scheme="https://stackapps.com/tags" term="script" />
  118.        <author>
  119.            <name>VLAZ</name>
  120.            <uri>https://stackapps.com/users/62199</uri>
  121.        </author>
  122.        <link rel="alternate" href="https://stackapps.com/questions/10517/fix-for-the-network-search-pagination" />
  123.        <published>2024-02-25T20:47:48Z</published>
  124.        <updated>2024-03-12T12:14:21Z</updated>
  125.        <summary type="html">
  126.            &lt;h2&gt;Description&lt;/h2&gt;&#xA;&lt;h3&gt;Problem&lt;/h3&gt;&#xA;&lt;p&gt;See the report &lt;a href=&quot;https://meta.stackexchange.com/questions/359216/pagination-on-stackexchange-com-search-is-broken&quot;&gt;Pagination on stackexchange.com search is broken&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The pagination in the global search is broken. It only shows 15 results even when the page size is set to something different. Moreover, it loses the page size. Yet, the page count at the bottom seems to use a different page size than 15, so with many results, you would not see the last page(s) unless you navigate to them manually.&lt;/p&gt;&#xA;&lt;h3&gt;Fix&lt;/h3&gt;&#xA;&lt;p&gt;The page size should be hard set in the query parameters in the URL. That forces the pagination to work correctly.&lt;/p&gt;&#xA;&lt;p&gt;Thus:&lt;/p&gt;&#xA;&lt;p&gt;If there is no page size in the URL, you are redirected to the same page but with the page size set. This will be set to 15 as that is what the default is. This works on going to the stackexchange.com/search page or visiting any search query.&lt;/p&gt;&#xA;&lt;p&gt;The page navigation buttons will also now &amp;quot;remember&amp;quot; the correct page size (rather than losing it).&lt;/p&gt;&#xA;&lt;h2&gt;Installation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PurpleMagick/se_network-search-pagination-fix/raw/main/dist/se-network-search-pagination-fixed.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;Direct install (GitHub)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PurpleMagick/se_network-search-pagination-fix&quot; rel=&quot;nofollow noreferrer&quot;&gt;See the code on GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;// ==UserScript==&#xA;// @name            Stack Exchange - fix network search pagination&#xA;// @namespace       https://github.com/PurpleMagick/&#xA;// @description     Network search pagination is broken and does not count pages correctly. This is a fix&#xA;// @author          VLAZ&#xA;// @version         1.0.0&#xA;//&#xA;// @match           https://stackexchange.com/search*&#xA;//&#xA;// @grant           none&#xA;// ==/UserScript==&#xA;&#xA;let __webpack_exports__ = {};&#xA;&#xA;// CONCATENATED MODULE: ./src/paginationParametersHelpers.ts&#xA;function retrievePagesize() {&#xA;    const searchParams = new URLSearchParams(window.location.search);&#xA;    return Number(searchParams.get(&amp;quot;pagesize&amp;quot;) ?? 15);&#xA;}&#xA;function createCorrecURL(href, pagesize) {&#xA;    const url = new URL(href);&#xA;    url.searchParams.set(&amp;quot;pagesize&amp;quot;, String(pagesize));&#xA;    return url;&#xA;}&#xA;&#xA;// CONCATENATED MODULE: ./src/index.ts&#xA;&#xA;function main() {&#xA;    const perPage = retrievePagesize();&#xA;    const searchParams = new URLSearchParams(window.location.search);&#xA;    if (searchParams.has(&amp;quot;pagesize&amp;quot;) === false) {&#xA;        window.location.href = createCorrecURL(window.location.href, perPage).href;&#xA;        return;&#xA;    }&#xA;    document.querySelectorAll(&amp;quot;.pager a&amp;quot;)&#xA;        .forEach(el =&amp;gt; {&#xA;            el.href = createCorrecURL(el.href, perPage).href;&#xA;        });&#xA;}&#xA;main();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  127.        </summary>
  128.    </entry>
  129.    <entry>
  130.        <id>https://stackapps.com/q/10513</id>
  131.        <re:rank scheme="https://stackapps.com">5</re:rank>
  132.        <title type="text">Stackexchange oauth2.0 is suddenly failing</title>
  133.            <category scheme="https://stackapps.com/tags" term="support" />
  134.            <category scheme="https://stackapps.com/tags" term="bug" />
  135.            <category scheme="https://stackapps.com/tags" term="status-review" />
  136.            <category scheme="https://stackapps.com/tags" term="oauth2" />
  137.        <author>
  138.            <name>Leart Beqiraj</name>
  139.            <uri>https://stackapps.com/users/117778</uri>
  140.        </author>
  141.        <link rel="alternate" href="https://stackapps.com/questions/10513/stackexchange-oauth2-0-is-suddenly-failing" />
  142.        <published>2024-02-16T01:14:47Z</published>
  143.        <updated>2024-02-19T14:01:51Z</updated>
  144.        <summary type="html">
  145.            &lt;p&gt;No changes in stack apps or my code, it was working fine for a while, suddenly it stopped working now.&lt;/p&gt;&#xA;&lt;p&gt;I get &amp;quot;&lt;strong&gt;InternalOAuthError: Failed to obtain access token&lt;/strong&gt;&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;After more details inspection, I came to conclusion that CloudFlare is blocking my requests due to security measures. Why is CloudFlare perceiving my requests as harmful/not trusted?&lt;/p&gt;&#xA;&lt;p&gt;I have my application deployed in Azure Virtual Machine. So it&#x27;s Azure External IP and it is under a .com domain name.&lt;/p&gt;&#xA;&lt;p&gt;Additional information I get this:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html lang=\&amp;quot;en-US\&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;head&amp;gt;&#xA;  &amp;lt;title&amp;gt;Just a moment...&amp;lt;/title&amp;gt;&#xA;  &amp;lt;meta http-equiv=\&amp;quot;Content-Type\&amp;quot; content=\&amp;quot;text/html; charset=UTF-8\&amp;quot;&amp;gt;&#xA;  &amp;lt;meta http-equiv=\&amp;quot;X-UA-Compatible\&amp;quot; content=\&amp;quot;IE=Edge\&amp;quot;&amp;gt;&#xA;  &amp;lt;meta name=\&amp;quot;robots\&amp;quot; content=\&amp;quot;noindex,nofollow\&amp;quot;&amp;gt;&#xA;  &amp;lt;meta name=\&amp;quot;viewport\&amp;quot; content=\&amp;quot;width=device-width,initial-scale=1\&amp;quot;&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;window._cf_chl_opt.cOgUHash = location.hash === &#x27;&#x27; &amp;amp;&amp;amp; location.href.indexOf(&#x27;#&#x27;) !== -1 ? &#x27;#&#x27; : location.hash;&#xA;window._cf_chl_opt.cOgUQuery = location.search === &#x27;&#x27; &amp;amp;&amp;amp; location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf(&#x27;?&#x27;) !== -1 ? &#x27;?&#x27; : location.search;&#xA;if (window.history &amp;amp;&amp;amp; window.history.replaceState) {&#xA;  var ogU = location.pathname &#x2B; window._cf_chl_opt.cOgUQuery &#x2B; window._cf_chl_opt.cOgUHash;&#xA;  history.replaceState(null, null, \&amp;quot;\\/oauth\\/access_token?__cf_chl_rt_tk=-1708042411-0.0-4071\&amp;quot; &#x2B; window._cf_chl_opt.cOgUHash)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;[Edit]: After more tests, I found out that I can&#x27;t even do a HTTP GET request to Stack Overflow Website from my Azure Virtual Machine due to the same message.&lt;/p&gt;&#xA;&lt;p&gt;So even &amp;quot;curl https://stackoverflow.com&amp;quot; fails with the &amp;quot;Just a moment...&amp;quot;&lt;/p&gt;&#xA;
  146.        </summary>
  147.    </entry>
  148.    <entry>
  149.        <id>https://stackapps.com/q/10512</id>
  150.        <re:rank scheme="https://stackapps.com">2</re:rank>
  151.        <title type="text">Expand Code to Fullscreen on StackExchange Site</title>
  152.            <category scheme="https://stackapps.com/tags" term="script" />
  153.            <category scheme="https://stackapps.com/tags" term="moderation" />
  154.        <author>
  155.            <name>138 Aspen</name>
  156.            <uri>https://stackapps.com/users/117777</uri>
  157.        </author>
  158.        <link rel="alternate" href="https://stackapps.com/questions/10512/expand-code-to-fullscreen-on-stackexchange-site" />
  159.        <published>2024-02-15T12:45:24Z</published>
  160.        <updated>2024-02-15T13:02:32Z</updated>
  161.        <summary type="html">
  162.            &lt;h1&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Script practice.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Toggle Fullscreen on Hover&lt;/strong&gt;: When users hover over a code block, a &#x27;Fullscreen&#x27; button appears. Clicking this button will expand the code block to fill the entire screen, facilitating easier reading and analysis of the code without distractions from other page content.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clean Exit from Fullscreen&lt;/strong&gt;: When the user exits fullscreen mode, the code block returns to its original state without any leftover styling or class changes, ensuring the page remains as it was before the script&#x27;s interaction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Code&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;// ==UserScript==&#xA;// @name          Expand Code to Fullscreen on StackExchange Site&#xA;// @namespace    http://tampermonkey.net/&#xA;// @author      aspen138&#xA;// @version      0.1&#xA;// @description  Toggle fullscreen for code blocks on hover&#xA;// @match      *://*.stackexchange.com/*&#xA;// @match          *://stackapps.com/questions/*&#xA;// @match          *://stackapps.com/review/*&#xA;// @match          *://stackapps.com/search*&#xA;// ...&#xA;// ...&#xA;// @grant        none&#xA;// @license    MIT&#xA;// ==/UserScript==&#xA;&#xA;&#xA;(function() {&#xA;    &#x27;use strict&#x27;;&#xA;&#xA;    // Function to inject styles&#xA;    function addStyles() {&#xA;        const style = document.createElement(&#x27;style&#x27;);&#xA;        style.type = &#x27;text/css&#x27;;&#xA;        style.innerHTML = `&#xA;            .code-wrapper {&#xA;                position: relative;&#xA;            }&#xA;            .fullscreen-btn {&#xA;                position: absolute;&#xA;                top: 0;&#xA;                right: 0;&#xA;                z-index: 10;&#xA;                padding: 4px 8px;&#xA;                background-color: #eee;&#xA;                border: none;&#xA;                cursor: pointer;&#xA;                border-radius: 4px;&#xA;                font-size: 12px;&#xA;                display: none;&#xA;            }&#xA;            .fullscreen-btn:hover {&#xA;                background-color: #ddd;&#xA;            }&#xA;            .code-wrapper:hover .fullscreen-btn {&#xA;                display: block;&#xA;            }&#xA;            /* Fullscreen specific styles */&#xA;            .code-wrapper.fullscreen {&#xA;                background: white; /* Change this to the desired background color */&#xA;                color: black; /* And this to the desired text color */&#xA;                width: 100%;&#xA;                height: 100%;&#xA;                overflow: auto; /* This allows scrolling */&#xA;                margin: 0;&#xA;                padding: 20px; /* Or however much padding you want */&#xA;            }&#xA;            /* Ensure syntax highlighting styles have enough specificity */&#xA;            .code-wrapper.fullscreen .hljs {&#xA;                display: block;&#xA;                overflow-x: auto;&#xA;                padding: 0.5em;&#xA;                color: inherit;&#xA;                background: inherit;&#xA;            }&#xA;        `;&#xA;        document.head.appendChild(style);&#xA;    }&#xA;&#xA;    // Function to toggle fullscreen for the specific code block&#xA;    function toggleFullScreen(codeWrapper) {&#xA;        if (!document.fullscreenElement &amp;amp;&amp;amp; codeWrapper.requestFullscreen) {&#xA;            codeWrapper.requestFullscreen().then(() =&amp;gt; {&#xA;                codeWrapper.classList.add(&#x27;fullscreen&#x27;);&#xA;                // Copy all classes from &amp;lt;code&amp;gt; to the wrapper&#xA;                codeWrapper.querySelector(&#x27;code&#x27;).classList.forEach(cls =&amp;gt; {&#xA;                    codeWrapper.classList.add(cls);&#xA;                });&#xA;            });&#xA;        } else if (document.fullscreenElement &amp;amp;&amp;amp; document.exitFullscreen) {&#xA;            document.exitFullscreen().then(() =&amp;gt; {&#xA;                codeWrapper.classList.remove(&#x27;fullscreen&#x27;);&#xA;                // Remove the copied classes from the wrapper&#xA;                codeWrapper.querySelector(&#x27;code&#x27;).classList.forEach(cls =&amp;gt; {&#xA;                    codeWrapper.classList.remove(cls);&#xA;                });&#xA;            });&#xA;        }&#xA;    }&#xA;&#xA;    // Function to create a fullscreen button for each code block&#xA;    function addFullscreenButtons() {&#xA;        document.querySelectorAll(&#x27;pre code&#x27;).forEach((code) =&amp;gt; {&#xA;            // Check if the code block is already wrapped with the code-wrapper&#xA;            let wrapper = code.closest(&#x27;.code-wrapper&#x27;);&#xA;            if (!wrapper) {&#xA;                wrapper = document.createElement(&#x27;div&#x27;);&#xA;                wrapper.classList.add(&#x27;code-wrapper&#x27;);&#xA;                // Move the classes from &amp;lt;code&amp;gt; to the wrapper&#xA;                code.classList.forEach(cls =&amp;gt; {&#xA;                    if (cls !== &#x27;hljs&#x27;) { // Avoid moving the &#x27;hljs&#x27; class&#xA;                        wrapper.classList.add(cls);&#xA;                    }&#xA;                });&#xA;                code.parentNode.insertBefore(wrapper, code);&#xA;                wrapper.appendChild(code);&#xA;            }&#xA;&#xA;            // Create and append the fullscreen button if not already there&#xA;            if (!wrapper.querySelector(&#x27;.fullscreen-btn&#x27;)) {&#xA;                const btn = document.createElement(&#x27;button&#x27;);&#xA;                btn.textContent = &#x27;Fullscreen&#x27;;&#xA;                btn.classList.add(&#x27;fullscreen-btn&#x27;);&#xA;                btn.addEventListener(&#x27;click&#x27;, () =&amp;gt; toggleFullScreen(wrapper));&#xA;                wrapper.appendChild(btn);&#xA;            }&#xA;        });&#xA;    }&#xA;&#xA;    // Wait for the DOM to be fully loaded&#xA;    window.addEventListener(&#x27;load&#x27;, function() {&#xA;        addStyles();&#xA;        // Call addFullscreenButtons with a delay to allow syntax highlighting to process&#xA;        setTimeout(addFullscreenButtons, 0);&#xA;    });&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://update.greasyfork.org/scripts/487378/Expand%20Code%20to%20Fullscreen%20on%20StackExchange%20Site.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;GreasyFork backup, Click to install&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Bugs, requests&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now(2024-02-15 UTC&#x2B;8) the script can not deal with syntax highlight well, any help would be appreciated.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can post bugs or requests in &lt;a href=&quot;https://greasyfork.org/scripts/487378-expand-code-to-fullscreen-on-stackexchange-site/feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;the greasyfork script feedback&lt;/a&gt; or answer &lt;a href=&quot;https://stackapps.com/questions/10512/expand-code-to-fullscreen-on-stackexchange-site&quot;&gt;this question itself&lt;/a&gt;.&lt;/p&gt;&#xA;
  163.        </summary>
  164.    </entry>
  165.    <entry>
  166.        <id>https://stackapps.com/q/10511</id>
  167.        <re:rank scheme="https://stackapps.com">4</re:rank>
  168.        <title type="text">Show Deleted Answers at head for Stack Exchange</title>
  169.            <category scheme="https://stackapps.com/tags" term="script" />
  170.            <category scheme="https://stackapps.com/tags" term="moderation" />
  171.        <author>
  172.            <name>138 Aspen</name>
  173.            <uri>https://stackapps.com/users/117777</uri>
  174.        </author>
  175.        <link rel="alternate" href="https://stackapps.com/questions/10511/show-deleted-answers-at-head-for-stack-exchange" />
  176.        <published>2024-02-12T11:34:54Z</published>
  177.        <updated>2024-02-27T12:48:24Z</updated>
  178.        <summary type="html">
  179.            &lt;h1&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Script practice.&lt;/p&gt;&#xA;&lt;p&gt;To view your own deleted answers/questions on a Stack Exchange account, you always need to scroll all the way down to see the &amp;quot;Deleted answers&amp;quot; tag. I&#x27;ve written a script to address this issue. &lt;del&gt;If you, like me, don&#x27;t want to press the Home/End keys&lt;/del&gt;&lt;/p&gt;&#xA;&lt;h1&gt;How it works&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J3AjR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J3AjR.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/39hr6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/39hr6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://update.greasyfork.org/scripts/475785/Show%20Deleted%20Answers%20at%20head%20for%20StackExchange.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;GreasyFork backup, Click to install&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Bugs, requests&lt;/h1&gt;&#xA;&lt;p&gt;You can post bugs or requests in &lt;a href=&quot;https://greasyfork.org/scripts/475785-show-deleted-answers-at-head-for-stackexchange/feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;the GreasyFork script feedback&lt;/a&gt; or answer &lt;a href=&quot;https://stackapps.com/questions/10511/show-deleted-answers-at-head-for-stackexchange&quot;&gt;this question itself&lt;/a&gt;.&lt;/p&gt;&#xA;
  180.        </summary>
  181.    </entry>
  182.    <entry>
  183.        <id>https://stackapps.com/q/10507</id>
  184.        <re:rank scheme="https://stackapps.com">14</re:rank>
  185.        <title type="text">AI generated content should NOT be allowed on Stack Apps</title>
  186.            <category scheme="https://stackapps.com/tags" term="feature-request" />
  187.            <category scheme="https://stackapps.com/tags" term="status-completed" />
  188.            <category scheme="https://stackapps.com/tags" term="meta" />
  189.        <author>
  190.            <name>rene</name>
  191.            <uri>https://stackapps.com/users/18722</uri>
  192.        </author>
  193.        <link rel="alternate" href="https://stackapps.com/questions/10507/ai-generated-content-should-not-be-allowed-on-stack-apps" />
  194.        <published>2024-02-08T21:00:21Z</published>
  195.        <updated>2024-03-26T18:05:23Z</updated>
  196.        <summary type="html">
  197.            &lt;p&gt;On February 14th, 2024 a new &lt;a href=&quot;https://meta.stackexchange.com/questions/396626&quot;&gt;network-wide policy on AI-generated content&lt;/a&gt; goes into effect.&lt;/p&gt;&#xA;&lt;p&gt;The de-facto default is that AI-generated content should follow the citation rules that already exist. In the announcement of this policy it is stated:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sites that have &#x2014; before February 14th &#x2014; made the Community Management Team aware of their superseding site policy on the matter that disallows this content instead of requiring it to be cited will have a different template that instead reflects that policy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since Stack Apps is its own &lt;a href=&quot;/questions/tagged/meta&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;meta&amp;#39;&quot; aria-label=&quot;show questions tagged &amp;#39;meta&amp;#39;&quot; rel=&quot;tag&quot; aria-labelledby=&quot;tag-meta-tooltip-container&quot;&gt;meta&lt;/a&gt; site, this question is a poll (upvote = I agree, downvote = I disagree - hence the &lt;a href=&quot;/questions/tagged/feature-request&quot; class=&quot;post-tag required-tag&quot; title=&quot;show questions tagged &amp;#39;feature-request&amp;#39;&quot; aria-label=&quot;show questions tagged &amp;#39;feature-request&amp;#39;&quot; rel=&quot;tag&quot; aria-labelledby=&quot;tag-feature-request-tooltip-container&quot;&gt;feature-request&lt;/a&gt; tag).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Do not allow AI generated content on Stack Apps&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Additional considerations can be discussed in comments / answers.&lt;/p&gt;&#xA;
  198.        </summary>
  199.    </entry>
  200.    <entry>
  201.        <id>https://stackapps.com/q/10503</id>
  202.        <re:rank scheme="https://stackapps.com">3</re:rank>
  203.        <title type="text">Backpack: Download all of your questions and answers across all SE sites as Markdown files</title>
  204.            <category scheme="https://stackapps.com/tags" term="app" />
  205.        <author>
  206.            <name>mhdadk</name>
  207.            <uri>https://stackapps.com/users/120681</uri>
  208.        </author>
  209.        <link rel="alternate" href="https://stackapps.com/questions/10503/backpack-download-all-of-your-questions-and-answers-across-all-se-sites-as-mark" />
  210.        <published>2024-01-28T12:26:18Z</published>
  211.        <updated>2024-03-21T12:15:58Z</updated>
  212.        <summary type="html">
  213.            &lt;!-- thumbnail: https://example.com/some-image.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: app --&gt;&#xA;&lt;!-- excerpt: Download all of your questions and answers across all SE sites as Markdown files. --&gt;&#xA;&lt;h3&gt;Screenshot / Code Snippet&lt;/h3&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/A8a7p.png&quot; width=&quot;350&quot; /&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Jtejw.png&quot; width=&quot;350&quot; /&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/jnGMl.png&quot; width=&quot;350&quot; /&gt;&#xA;&lt;h3&gt;About&lt;/h3&gt;&#xA;&lt;p&gt;This app is used to download a user&#x27;s questions and answers across all Stack Exchange (SE) sites that they are registered for. The questions and answers are downloaded in the form of Markdown files, as shown in the screenshots above. The purpose of this app is to obtain a backup of all questions and answers for a user.&lt;/p&gt;&#xA;&lt;p&gt;This app consists of a Python script that makes use of the &lt;a href=&quot;https://api.stackexchange.com/&quot;&gt;SE API&lt;/a&gt;. To start using this app, follow the instructions &lt;a href=&quot;https://github.com/mhdadk/stack-exchange-backup/blob/main/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;MIT License&lt;/p&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;Follow the instructions at the GitHub repository &lt;a href=&quot;https://github.com/mhdadk/stack-exchange-backup&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;PC, Mac, and Linux&lt;/p&gt;&#xA;&lt;h3&gt;Contact&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/mhdadk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mahmoud Abdelkhalek&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Code&lt;/h3&gt;&#xA;&lt;p&gt;Code can be found &lt;a href=&quot;https://github.com/mhdadk/stack-exchange-backup&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;
  214.        </summary>
  215.    </entry>
  216.    <entry>
  217.        <id>https://stackapps.com/q/10502</id>
  218.        <re:rank scheme="https://stackapps.com">0</re:rank>
  219.        <title type="text">PLACEHOLDER - stack apps development</title>
  220.            <category scheme="https://stackapps.com/tags" term="app" />
  221.            <category scheme="https://stackapps.com/tags" term="placeholder" />
  222.        <author>
  223.            <name>Muhammad Naeem</name>
  224.            <uri>https://stackapps.com/users/121886</uri>
  225.        </author>
  226.        <link rel="alternate" href="https://stackapps.com/questions/10502/placeholder-stack-apps-development" />
  227.        <published>2024-01-27T22:38:55Z</published>
  228.        <updated>2024-02-07T20:24:12Z</updated>
  229.        <summary type="html">
  230.            &lt;p&gt;Working on A Stack Overflow client development website.&lt;/p&gt;&#xA;
  231.        </summary>
  232.    </entry>
  233.    <entry>
  234.        <id>https://stackapps.com/q/10494</id>
  235.        <re:rank scheme="https://stackapps.com">1</re:rank>
  236.        <title type="text">Does there exist an app that allows me to download all of my questions and answers on all SE sites?</title>
  237.            <category scheme="https://stackapps.com/tags" term="support" />
  238.        <author>
  239.            <name>mhdadk</name>
  240.            <uri>https://stackapps.com/users/120681</uri>
  241.        </author>
  242.        <link rel="alternate" href="https://stackapps.com/questions/10494/does-there-exist-an-app-that-allows-me-to-download-all-of-my-questions-and-answe" />
  243.        <published>2024-01-14T08:41:13Z</published>
  244.        <updated>2024-02-27T15:06:00Z</updated>
  245.        <summary type="html">
  246.            &lt;p&gt;I&#x27;m interested in downloading a backup of all my questions and answers on all Stack Exchange sites in the form of markdown files. I&#x27;m already aware of &lt;a href=&quot;https://data.stackexchange.com/stackoverflow/query/1529864/all-my-posts-on-the-se-network-with-markdown-and-html-content-plus-editors-and-s&quot; rel=&quot;nofollow noreferrer&quot;&gt;this SE data explorer query&lt;/a&gt;, but this downloads all of my questions and answers into a CSV file. I&#x27;m also aware of &lt;a href=&quot;https://stackapps.com/q/1890/120681&quot;&gt;this question&lt;/a&gt; that was asked over 10 years ago, but I did not see any recent answers. Does there exist an app that does this? Or would I need to make one?&lt;/p&gt;&#xA;
  247.        </summary>
  248.    </entry>
  249.    <entry>
  250.        <id>https://stackapps.com/q/10471</id>
  251.        <re:rank scheme="https://stackapps.com">0</re:rank>
  252.        <title type="text">PLACEHOLDER - YaSupport</title>
  253.            <category scheme="https://stackapps.com/tags" term="app" />
  254.            <category scheme="https://stackapps.com/tags" term="placeholder" />
  255.        <author>
  256.            <name>YaSupport</name>
  257.            <uri>https://stackapps.com/users/85821</uri>
  258.        </author>
  259.        <link rel="alternate" href="https://stackapps.com/questions/10471/placeholder-yasupport" />
  260.        <published>2023-11-23T04:28:43Z</published>
  261.        <updated>2024-02-13T16:48:40Z</updated>
  262.        <summary type="html">
  263.            &lt;p&gt;The App is for providing support for Yandex Map apps and libs.&lt;/p&gt;&#xA;&lt;p&gt;Our company provides an API for working with our maps: &lt;a href=&quot;https://yandex.com/maps-api/docs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://yandex.com/maps-api/docs&lt;/a&gt;. We want to help users find answers to questions they ask on the Stack Overflow platform.&#xA;We have our own app for the support team and would like to publish their comments and responses on your sites directly from this app via the Stack Overflow API.&lt;/p&gt;&#xA;
  264.        </summary>
  265.    </entry>
  266.    <entry>
  267.        <id>https://stackapps.com/q/10422</id>
  268.        <re:rank scheme="https://stackapps.com">5</re:rank>
  269.        <title type="text">Toasty: A better chat antifreeze bot</title>
  270.            <category scheme="https://stackapps.com/tags" term="app" />
  271.            <category scheme="https://stackapps.com/tags" term="chatbot" />
  272.        <author>
  273.            <name>Ginger</name>
  274.            <uri>https://stackapps.com/users/91091</uri>
  275.        </author>
  276.        <link rel="alternate" href="https://stackapps.com/questions/10422/toasty-a-better-chat-antifreeze-bot" />
  277.        <published>2023-09-24T18:09:46Z</published>
  278.        <updated>2024-04-11T16:48:01Z</updated>
  279.        <summary type="html">
  280.            &lt;!-- thumbnail: https://files.ginger.rto.community/unlisted/toasty-thumb.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: antifreeze --&gt;&#xA;&#xA;&lt;h3&gt;About&lt;/h3&gt;&#xA;&lt;p&gt;Toasty is an antifreeze bot for the Stack Exchange chat system. It automatically sends messages in low-activity rooms to keep the system from freezing them for inactivity. Toasty is usable by any user with at least 200 network-wide reputation through its intuitive web interface.&lt;/p&gt;&#xA;&lt;p&gt;Caveats:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Toasty currently only supports &lt;a href=&quot;https://chat.stackexchange.com&quot;&gt;https://chat.stackexchange.com&lt;/a&gt;, not &lt;a href=&quot;https://chat.meta.stackexchange.com&quot;&gt;https://chat.meta.stackexchange.com&lt;/a&gt; or &lt;a href=&quot;https://chat.stackoverflow.com&quot;&gt;https://chat.stackoverflow.com&lt;/a&gt;. Support for the other two sites is planned to be added soon.&lt;/li&gt;&#xA;&lt;li&gt;Toasty cannot antifreeze rooms that its bot user cannot access; this realistically means that the following cannot be antifrozen:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Private rooms&lt;/li&gt;&#xA;&lt;li&gt;Rooms that are already frozen&lt;/li&gt;&#xA;&lt;li&gt;Gallery rooms that Toasty is not allowed to access&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;For Gallery rooms, Toasty&#x27;s &lt;a href=&quot;https://codegolf.stackexchange.com/users/119710/toasty&quot;&gt;bot user&lt;/a&gt; must be allowed to send messages. If Toasty is unable to antifreeze a room, an error will be logged under the Runs tab on the room info page.&lt;/li&gt;&#xA;&lt;li&gt;&lt;s&gt;Due to an oversight with how rooms are stored, owners of a room that is being antifreezed by Toasty will not see the room in their room list unless they added it themself. (They will still be able to access and edit the room by going to its page directly.) This is planned to be fixed soon.&lt;/s&gt; &lt;br&gt; &lt;strong&gt;This issue is now fixed.&lt;/strong&gt; However, newly added ROs will need to wait for up to 24 hours for the bot to update its stored room list.&lt;/li&gt;&#xA;&lt;li&gt;Moderators may not be automatically granted the mod role upon creating an account due to an issue with how modship is checked. This is planned to be fixed soon. If you are a moderator and have not been automatically granted the mod role, ping Ginger in &lt;a href=&quot;https://chat.stackexchange.com/rooms/148706/i-cant-believe-its-not-botter&quot;&gt;the Toasty chatroom&lt;/a&gt;. This &lt;em&gt;may&lt;/em&gt; also cause users with 200&#x2B; reputation on only a few sites to be erroneously denied from creating an account, although this has not happened yet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The antifreeze jobs run daily, at a randomly selected time within a 3-hour window centered on UTC midnight.&lt;/p&gt;&#xA;&lt;h3&gt;Screenshot:&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/unHNA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/unHNA.jpg&quot; alt=&quot;A screenshot of Toasty&#x27;s index page&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Website&lt;/h3&gt;&#xA;&lt;p&gt;Find Toasty at &lt;a href=&quot;https://toasty.ginger.rto.community&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://toasty.ginger.rto.community&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Contact:&lt;/h3&gt;&#xA;&lt;p&gt;Toasty was written entirely by me, Ginger. You can discuss it in its &lt;a href=&quot;https://chat.stackexchange.com/rooms/148706/i-cant-believe-its-not-botter&quot;&gt;dedicated chatroom&lt;/a&gt;, which is also linked to in the footer.&lt;/p&gt;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;Toasty is licensed under the Mozilla Public License 2.0.&lt;/p&gt;&#xA;&lt;h3&gt;Code&lt;/h3&gt;&#xA;&lt;p&gt;Toasty is written in Python (backend) and TypeScript (frontend), and uses &lt;a href=&quot;https://github.com/GingerIndustries/sechat/tree/v2&quot; rel=&quot;nofollow noreferrer&quot;&gt;sechat&lt;/a&gt; to communicate with chat. You can find the source at &lt;a href=&quot;https://github.com/GingerIndustries/toasty&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/GingerIndustries/toasty&lt;/a&gt;.&lt;/p&gt;&#xA;
  281.        </summary>
  282.    </entry>
  283.    <entry>
  284.        <id>https://stackapps.com/q/10400</id>
  285.        <re:rank scheme="https://stackapps.com">2</re:rank>
  286.        <title type="text">Bug Bridger - A stack overflow mobile app to solve all of your questions</title>
  287.            <category scheme="https://stackapps.com/tags" term="app" />
  288.            <category scheme="https://stackapps.com/tags" term="android" />
  289.            <category scheme="https://stackapps.com/tags" term="stackoverflow" />
  290.        <author>
  291.            <name>brijen Makawana</name>
  292.            <uri>https://stackapps.com/users/113849</uri>
  293.        </author>
  294.        <link rel="alternate" href="https://stackapps.com/questions/10400/bug-bridger-a-stack-overflow-mobile-app-to-solve-all-of-your-questions" />
  295.        <published>2023-09-05T05:37:21Z</published>
  296.        <updated>2024-04-11T05:15:11Z</updated>
  297.        <summary type="html">
  298.            &lt;!-- thumbnail: https://example.com/some-image.png --&gt;&#xA;&lt;!-- version: 1.0 --&gt;&#xA;&lt;!-- tag: a-tag-on-the-post --&gt;&#xA;&lt;!-- excerpt: Up to 200 characters of excerpt --&gt;&#xA;&lt;h2&gt;Screenshot / Code Snippet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XR6b6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XR6b6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PRuve.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PRuve.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/844Fy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/844Fy.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KjEGb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KjEGb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6LCU6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6LCU6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Discover featured questions effortlessly on the home tab, elegantly presented in card format.&lt;/li&gt;&#xA;&lt;li&gt;Each question card provides essential details such as the question title, description, tags, and key statistics like view count, answer count, and votes.&lt;/li&gt;&#xA;&lt;li&gt;Get insights into the user who posted the question, with the option to tap for in-depth user information, including their name, joining date, reputation, and badges.&lt;/li&gt;&#xA;&lt;li&gt;Effortlessly search for specific questions using the search bar, complete with advanced search filters and sorting options for tailored results.&lt;/li&gt;&#xA;&lt;li&gt;Simply tap on any question card to access the dedicated question screen, offering comprehensive information about the question and all associated answers.&lt;/li&gt;&#xA;&lt;li&gt;Enjoy proper code and text formatting with Markdown support, ensuring readability of coding blocks.&lt;/li&gt;&#xA;&lt;li&gt;Quickly identify accepted answers for optimal problem-solving.&lt;/li&gt;&#xA;&lt;li&gt;If a question lacks an answer, our AI feature generates solutions directly.&lt;/li&gt;&#xA;&lt;li&gt;Explore the entire Stack Overflow repository, including both questions and answers, with a single button press.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.brijenmakwana.BugBridger&quot; rel=&quot;nofollow noreferrer&quot;&gt;Download from here on Play Store&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;BugBridger app works on &lt;strong&gt;Android&lt;/strong&gt; smartphones.&lt;/p&gt;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Brijen Makwana&lt;/strong&gt; created this app. You can see his &lt;a href=&quot;https://github.com/BrijenMakwana&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt; profile.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;This mobile app is built with these tech stacks:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;React Native&lt;/li&gt;&#xA;&lt;li&gt;Expo&lt;/li&gt;&#xA;&lt;li&gt;Typescript&lt;/li&gt;&#xA;&lt;li&gt;tamagui&lt;/li&gt;&#xA;&lt;li&gt;expo-router&lt;/li&gt;&#xA;&lt;li&gt;Stack Exchange API&lt;/li&gt;&#xA;&lt;li&gt;Shopify Flashlist&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the &lt;strong&gt;code&lt;/strong&gt; on this &lt;a href=&quot;https://github.com/BrijenMakwana/BugBridger&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub repo&lt;/a&gt;&lt;/p&gt;&#xA;
  299.        </summary>
  300.    </entry>
  301.    <entry>
  302.        <id>https://stackapps.com/q/10395</id>
  303.        <re:rank scheme="https://stackapps.com">1</re:rank>
  304.        <title type="text">Revision diff view</title>
  305.            <category scheme="https://stackapps.com/tags" term="script" />
  306.            <category scheme="https://stackapps.com/tags" term="posts" />
  307.            <category scheme="https://stackapps.com/tags" term="revisions" />
  308.        <author>
  309.            <name>user3840170</name>
  310.            <uri>https://stackapps.com/users/77981</uri>
  311.        </author>
  312.        <link rel="alternate" href="https://stackapps.com/questions/10395/revision-diff-view" />
  313.        <published>2023-08-30T17:55:32Z</published>
  314.        <updated>2024-04-21T13:29:24Z</updated>
  315.        <summary type="html">
  316.            &lt;p&gt;When visiting an individual post revision page, this script adds buttons that allow switching to a view showing how the revision differed from the previous one, just like on a full post history page.&lt;/p&gt;&#xA;&lt;p&gt;Test cases:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/revisions/76506701/2&quot;&gt;https://stackoverflow.com/revisions/76506701/2&lt;/a&gt;, &lt;a href=&quot;https://stackoverflow.com/revisions/76506506/2&quot;&gt;https://stackoverflow.com/revisions/76506506/2&lt;/a&gt; (and &lt;a href=&quot;https://meta.stackoverflow.com/q/425259/3840170&quot;&gt;inspiration&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;title-only edit: &lt;a href=&quot;https://stackoverflow.com/revisions/76909851/4&quot;&gt;https://stackoverflow.com/revisions/76909851/4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;tag-only edit: &lt;a href=&quot;https://retrocomputing.stackexchange.com/revisions/27531/6&quot;&gt;https://retrocomputing.stackexchange.com/revisions/27531/6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;both-only edit: &lt;a href=&quot;https://stackoverflow.com/revisions/40649044/2&quot;&gt;https://stackoverflow.com/revisions/40649044/2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;edits that change the mark-up, but not rendered text: &lt;a href=&quot;https://meta.stackexchange.com/revisions/328422/5&quot;&gt;https://meta.stackexchange.com/revisions/328422/5&lt;/a&gt;, &lt;a href=&quot;https://meta.stackexchange.com/revisions/393030/5&quot;&gt;https://meta.stackexchange.com/revisions/393030/5&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pretty hacky; some scraping involved.  May break as the site is updated.  Consider this script an elaborate feature request (&lt;a href=&quot;https://meta.stackexchange.com/q/234033/620615&quot;&gt;viz&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// ==UserScript==&#xA;// @name     Stack Exchange: revision diff view&#xA;// @grant    none&#xA;// @run-at   document-start&#xA;// @match    https://*.stackexchange.com/*&#xA;// @match    https://*.superuser.com/*&#xA;// @match    https://*.stackoverflow.com/*&#xA;// @match    https://*.mathoverflow.net/*&#xA;// @match    https://*.serverfault.com/*&#xA;// @match    https://*.askubuntu.com/*&#xA;// @match    https://stackapps.com/*&#xA;// @exclude  https://chat.stackexchange.com/*&#xA;// @exclude  https://api.stackexchange.com/*&#xA;// @exclude  https://data.stackexchange.com/*&#xA;// @exclude  https://openid.stackexchange.com/*&#xA;// @exclude  https://area51.stackexchange.com/*&#xA;// @exclude  https://stackexchange.com/*&#xA;// @exclude  https://contests.stackoverflow.com/*&#xA;// @exclude  /^https?:\/\/winterbash\d{4,}\.stackexchange\.com\//&#xA;// ==/UserScript==&#xA;&#xA;// we scrape the DOM instead of using api.stackexchange.com so that&#xA;// this works even for deleted revisions which the user has the privilege&#xA;// of viewing&#xA;&#xA;const getRevisionUuid = async (postId, revNum) =&amp;gt; {&#xA;  const fetchDOM = (url) =&amp;gt; new Promise((ok, ko) =&amp;gt; {&#xA;    const xhr = new XMLHttpRequest();&#xA;    xhr.responseType = &#x27;document&#x27;;&#xA;    xhr.onload = () =&amp;gt; {&#xA;      ok(xhr.response);&#xA;    };&#xA;    xhr.onerror = (ev) =&amp;gt; {&#xA;      ko(ev);&#xA;    };&#xA;    xhr.onabort = (ev) =&amp;gt; {&#xA;      ko(ev);&#xA;    };&#xA;    xhr.open(&#x27;GET&#x27;, url);&#xA;    xhr.send(null);&#xA;  });&#xA;&#xA;  const REV_SELECTOR = &#x27;button.js-revision-expander&#x27;;&#xA;&#xA;  const getRevNum = (node) =&amp;gt;&#xA;    node.querySelector(&#x27;.fs-headline1&#x27;).textContent;&#xA;&#xA;  const scanButton = (revisionsDom) =&amp;gt; {&#xA;    for (const node of revisionsDom.querySelectorAll(REV_SELECTOR)) {&#xA;      if (getRevNum(node) === revNum)&#xA;        return node.dataset.guid;&#xA;    }&#xA;    return null;&#xA;  };&#xA;&#xA;  const revsPage1 = await fetchDOM(new URL(`/posts/${postId}/revisions`, location));&#xA;&#xA;  let m;&#xA;&#xA;  if (m = scanButton(revsPage1))&#xA;    return m;&#xA;&#xA;  const revsPage1Revs = revsPage1.querySelectorAll(REV_SELECTOR);&#xA;  const revsPerPage = revsPage1Revs.length;&#xA;&#xA;  // the revision count can also be read from the viewed revision&#x27;s page&#xA;  // (#content &amp;gt; .subheader:first-child &#x2B; * &amp;gt; .fs-headline1),&#xA;  // but it&#x27;s only in locale-dependent text and requires the page to be fully loaded&#xA;  // and we need to know the number of revisions per history page anyway&#xA;&#xA;  const revLast = getRevNum(revsPage1Revs[0]);&#xA;&#xA;  const page = 1 &#x2B; Math.floor((revLast - revNum) / revsPerPage);&#xA;&#xA;  const revsPageN = await fetchDOM(&#xA;    new URL(`/posts/${postId}/revisions?page=${page}`, location));&#xA;&#xA;  if (m = scanButton(revsPageN))&#xA;    return m;&#xA;}&#xA;&#xA;const contentLoaded = new Promise((ok, ko) =&amp;gt; {&#xA;  switch (document.readyState) {&#xA;    case &#x27;complete&#x27;:&#xA;    case &#x27;interactive&#x27;:&#xA;      ok();&#xA;      return;&#xA;    default:&#xA;      document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&amp;gt; ok(), { once: true });&#xA;  }&#xA;});&#xA;&#xA;const loadScript = url =&amp;gt; new Promise((ok, ko) =&amp;gt; {&#xA;  const script = document.createElement(&#x27;script&#x27;);&#xA;  script.src = url;&#xA;  script.onload = () =&amp;gt; {&#xA;    ok();&#xA;  };&#xA;  script.onerror = (ev) =&amp;gt; {&#xA;    ko(ev);&#xA;  };&#xA;  document.head.appendChild(script);&#xA;  script.remove();&#xA;});&#xA;&#xA;const html = (() =&amp;gt; {&#xA;  const html = function html(pieces, ...values) {&#xA;    if (new.target)&#xA;      return Reflect.construct(String, arguments, new.target);&#xA;    return new html(&#xA;      String.raw({ raw: pieces }, ...values.map(&#xA;        s =&amp;gt; s instanceof html&#xA;        ? s&#xA;                : `${s}`.replaceAll(/[&amp;lt;&amp;gt;&amp;amp;&amp;quot;]/ug, c =&amp;gt; `&amp;amp;#${c.charCodeAt(0)};`))));&#xA;  }&#xA;  html.prototype = Object.create(String.prototype);&#xA;  return html;&#xA;})();&#xA;&#xA;(async () =&amp;gt; {&#xA;  const rxPathnameRev = /^\/revisions\/(\d&#x2B;)\/(\d&#x2B;)$/u;&#xA;&#xA;  let m;&#xA;  if (!(m = rxPathnameRev.exec(location.pathname)))&#xA;    return;&#xA;&#xA;  const [, postId, revNum] = m;&#xA;&#xA;  // do not load if revision number is 1&#xA;  if (revNum === &#x27;1&#x27;)&#xA;    return;&#xA;&#xA;  (async () =&amp;gt; {&#xA;&#xA;    try {&#xA;      // should suffice as the Stack Exchange scripts are synchronous&#xA;      await contentLoaded;&#xA;      await loadScript(`//cdn.sstatic.net/Js/revisions.${unsafeWindow.StackExchange.options.locale}.js`);&#xA;      unsafeWindow.styleCode ??= unsafeWindow.Function(&#x27;&#x27;);&#xA;      unsafeWindow.StackExchange.revisions.init();&#xA;    } catch (e) {&#xA;      console.warn(`[RDV] revisions.${unsafeWindow.StackExchange.options.locale}.js not loaded:`, e);&#xA;    }&#xA;&#xA;  })();&#xA;&#xA;  const revUuid = await getRevisionUuid(postId, revNum);&#xA;  if (!revUuid) {&#xA;    console.error(`[RDV] revision ${revNum} of post ${postId} not found`);&#xA;    return;&#xA;  }&#xA;  console.info(`[RDV] revision ${revNum} of post ${postId} identified as ${revUuid}`)&#xA;&#xA;  const resp = await fetch(new URL(`/revisions/${postId}/${revUuid}/diff?full=false`, location));&#xA;  const frag = document.createRange().createContextualFragment(await resp.text());&#xA;&#xA;  const fragDiffs = frag.querySelector(&#x27;.diffs&#x27;);&#xA;&#xA;  const fragTabs = (() =&amp;gt; {&#xA;    const fragTabs = frag.querySelector(&#x27;.js-diff-choices&#x27;);&#xA;    &#xA;    if (!fragTabs) {&#xA;      // probably a (tag-and/or-title)-only edit&#xA;&#xA;      fragDiffs.insertAdjacentHTML(&#x27;beforebegin&#x27;, html`&#xA;        &amp;lt;div class=&amp;quot;mb24&amp;quot;&amp;gt;&#xA;            &amp;lt;div class=&amp;quot;js-diff-choices s-btn-group&amp;quot;&#xA;          role=&amp;quot;tablist&amp;quot;&#xA;          data-controller=&amp;quot;s-navigation-tablist&amp;quot;&#xA;          aria-label=&amp;quot;Comparison modes&amp;quot;&amp;gt;&#xA;                &amp;lt;button&#xA;                type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot;&#xA;              class=&amp;quot;s-btn s-btn__muted s-btn__xs action&amp;quot;&#xA;              id=&amp;quot;tab-${revUuid}-Mini&amp;quot;&#xA;              aria-controls=&amp;quot;panel-${revUuid}-Mini&amp;quot;&#xA;              tabindex=&amp;quot;0&amp;quot; title=&amp;quot;Show the edits of the title and/or tag list&amp;quot;&amp;gt;&#xA;                  Title and/or tag diff&#xA;                &amp;lt;/button&amp;gt;&#xA;          &amp;lt;/div&amp;gt;&#xA;        &amp;lt;/div&amp;gt;&#xA;      `);&#xA;      &#xA;      fragDiffs.insertAdjacentHTML(&#x27;afterbegin&#x27;, html`&#xA;        &amp;lt;div&#xA;            id=&amp;quot;panel-${revUuid}-Mini&amp;quot; role=&amp;quot;tabpanel&amp;quot;&#xA;          aria-labelledby=&amp;quot;tab-${revUuid}-Mini&amp;quot;&#xA;          class=&amp;quot;js-diff-panel mb16 d-none&amp;quot;&amp;gt;&#xA;        &amp;lt;/div&amp;gt;&#xA;      `);&#xA;      &#xA;      const container = fragDiffs.firstElementChild;&#xA;      while (container.nextSibling)&#xA;        container.appendChild(container.nextSibling);&#xA;      &#xA;      return fragDiffs.previousElementSibling.querySelector(&#x27;.js-diff-choices&#x27;);&#xA;    }&#xA;    &#xA;    return fragTabs;&#xA;  })();&#xA;&#xA;  for (const node of fragTabs.querySelectorAll(&#x27;:scope &amp;gt; [role=&amp;quot;tab&amp;quot;]&#x27;)) {&#xA;    node.classList.remove(&#x27;is-selected&#x27;);&#xA;    node.removeAttribute(&#x27;aria-selected&#x27;);&#xA;  }&#xA;&#xA;  for (const node of fragDiffs.querySelectorAll(&#x27;:scope &amp;gt; [role=&amp;quot;tabpanel&amp;quot;]&#x27;)) {&#xA;    node.classList.add(&#x27;d-none&#x27;);&#xA;  }&#xA;&#xA;  fragTabs.insertAdjacentHTML(&#x27;afterbegin&#x27;, html`&#xA;    &amp;lt;button&#xA;      id=&amp;quot;tab-${revUuid}-Contents&amp;quot;&#xA;      role=&amp;quot;tab&amp;quot;&#xA;      class=&amp;quot;s-btn s-btn__muted s-btn__xs action is-selected&amp;quot;&#xA;      tabindex=&amp;quot;-1&amp;quot;&#xA;      title=&amp;quot;Show just this revision&#x27;s contents, no diff against the previous revision&amp;quot;&#xA;      aria-controls=&amp;quot;panel-${revUuid}-Contents&amp;quot;&#xA;      aria-selected=&amp;quot;true&amp;quot;&amp;gt;Contents only&amp;lt;/button&amp;gt;&#xA;  `);&#xA;&#xA;  fragDiffs.insertAdjacentHTML(&#x27;afterbegin&#x27;, html`&#xA;    &amp;lt;div&#xA;      id=&amp;quot;panel-${revUuid}-Contents&amp;quot;&#xA;      role=&amp;quot;tabpanel&amp;quot;&#xA;      class=&amp;quot;js-diff-panel mb16&amp;quot;&#xA;      aria-labelledby=&amp;quot;tab-${revUuid}-Contents&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#xA;  `);&#xA;  const baseDest = fragDiffs.firstElementChild;&#xA;&#xA;  await contentLoaded;&#xA;&#xA;  let anchor = document.querySelector(`&#xA;    #content &amp;gt; h1.fs-title,&#xA;    #content &amp;gt; .s-prose&#xA;  `).previousSibling;&#xA;  const limit = document.querySelector(&#x27;#content &amp;gt; .jc-end&#x27;);&#xA;&#xA;  for (;;) {&#xA;    const node = anchor;&#xA;    if (node === limit)&#xA;      break;&#xA;    anchor = anchor.nextSibling;&#xA;    baseDest.appendChild(node);&#xA;  }&#xA;&#xA;  document.querySelector(&#x27;#content&#x27;).insertBefore(&#xA;    frag,&#xA;    limit&#xA;  );&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  317.        </summary>
  318.    </entry>
  319.    <entry>
  320.        <id>https://stackapps.com/q/10180</id>
  321.        <re:rank scheme="https://stackapps.com">5</re:rank>
  322.        <title type="text">Calling SE APIs with Nushell (basic overview)</title>
  323.            <category scheme="https://stackapps.com/tags" term="library" />
  324.        <author>
  325.            <name>NotTheDr01ds</name>
  326.            <uri>https://stackapps.com/users/83484</uri>
  327.        </author>
  328.        <link rel="alternate" href="https://stackapps.com/questions/10180/calling-se-apis-with-nushell-basic-overview" />
  329.        <published>2023-07-25T23:32:54Z</published>
  330.        <updated>2024-02-28T07:04:25Z</updated>
  331.        <summary type="html">
  332.            &lt;p&gt;While I still prefer a more &amp;quot;traditional&amp;quot; shell for day-to-day use, I&#x27;m finding &lt;a href=&quot;https://www.nushell.sh&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nushell&lt;/a&gt;&#x27;s structured data capabilities to be a fantastic companion to the SE API (among others).  It&#x27;s been months since I&#x27;ve used &lt;code&gt;jq&lt;/code&gt; for processing JSON REST results.&lt;/p&gt;&#xA;&lt;p&gt;Starting with a simple example:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;# Get the last 100 questions posted on Stack Overflow&#xA;&amp;gt; let res = (http get &amp;quot;https://api.stackexchange.com/questions?pagesize=100&amp;amp;site=stackoverflow&amp;quot;)&#xA;# Will error if you are out of quota - Append a key param if needed&#xA;&#xA;&amp;gt; $res.items.title | first 5&#xA;&#x256D;&#x2500;&#x2500;&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256E;&#xA;&#x2502; 0 &#x2502; Same Framework for multiple target and different destinations                 &#x2502;&#xA;&#x2502; 1 &#x2502; Unable to control full screen menu bar visibility on MacOS using CLI defaults &#x2502;&#xA;&#x2502; 2 &#x2502; How should MqttClient lifecycle be managed?                                   &#x2502;&#xA;&#x2502; 3 &#x2502; Auth0 External Provider                                                       &#x2502;&#xA;&#x2502; 4 &#x2502; Passing a function to a react-router action in TypeScript?                    &#x2502;&#xA;&#x2570;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256F;&#xA;&#xA;&amp;gt; $res.quota_remaining&#xA;167&#xA;&#xA;&amp;gt; $res&#xA;# Will print the data (truncate based on screen width) in a table format&#xA;&#xA;&amp;gt; $res | explore&#xA;# Will enter a data explorer view where you can scroll and drill down into data&#xA;# For example, select the &amp;quot;items&amp;quot; column and hit &amp;lt;Enter&amp;gt; to drill down to the questions themselves&#xA;&#xA;# What key/value pairs (columns) are available in the result?&#xA;&amp;gt; $res | columns&#xA;&#x256D;&#x2500;&#x2500;&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256E;&#xA;&#x2502; 0 &#x2502; items           &#x2502;&#xA;&#x2502; 1 &#x2502; has_more        &#x2502;&#xA;&#x2502; 2 &#x2502; quota_max       &#x2502;&#xA;&#x2502; 3 &#x2502; quota_remaining &#x2502;&#xA;&#x2570;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256F;&#xA;&#xA;# What key/value pairs (columns) are available for items?&#xA;&amp;gt; $res.items | columns&#xA;&#x256D;&#x2500;&#x2500;&#x2500;&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256E;&#xA;&#x2502;  0 &#x2502; tags                  &#x2502;&#xA;&#x2502;  1 &#x2502; owner                 &#x2502;&#xA;&#x2502;  2 &#x2502; post_state            &#x2502;&#xA;&#x2502;  3 &#x2502; is_answered           &#x2502;&#xA;&#x2502;  4 &#x2502; view_count            &#x2502;&#xA;&#x2502;  5 &#x2502; answer_count          &#x2502;&#xA;&#x2502;  6 &#x2502; score                 &#x2502;&#xA;&#x2502;  7 &#x2502; last_activity_date    &#x2502;&#xA;&#x2502;  8 &#x2502; creation_date         &#x2502;&#xA;&#x2502;  9 &#x2502; question_id           &#x2502;&#xA;&#x2502; 10 &#x2502; content_license       &#x2502;&#xA;&#x2502; 11 &#x2502; link                  &#x2502;&#xA;&#x2502; 12 &#x2502; title                 &#x2502;&#xA;&#x2502; 13 &#x2502; posted_by_collectives &#x2502;&#xA;&#x2502; 14 &#x2502; closed_date           &#x2502;&#xA;&#x2502; 15 &#x2502; closed_reason         &#x2502;&#xA;&#x2502; 16 &#x2502; last_edit_date        &#x2502;&#xA;&#x2502; 17 &#x2502; accepted_answer_id    &#x2502;&#xA;&#x2570;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256F;&#xA;&#xA;# Which questions were about Python?&#xA;&amp;gt; $res.items | filter {|question| &amp;quot;python&amp;quot; in $question.tags} |  select title link&#xA;&#x256D;&#x2500;&#x2500;&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256E;&#xA;&#x2502; # &#x2502;                                title                                 &#x2502;                                                       link                                                       &#x2502;&#xA;&#x251C;&#x2500;&#x2500;&#x2500;&#x253C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x253C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2524;&#xA;&#x2502; 0 &#x2502; Python Mypy fails on Decorator                                       &#x2502; https://stackoverflow.com/questions/76766815/python-mypy-fails-on-decorator                                      &#x2502;&#xA;&#x2502; 1 &#x2502; How do I find the key with the highest value in a python dictionary? &#x2502; https://stackoverflow.com/questions/76766810/how-do-i-find-the-key-with-the-highest-value-in-a-python-dictionary &#x2502;&#xA;&#x2502; 2 &#x2502; How to insert a Python script into a website with DJango?            &#x2502; https://stackoverflow.com/questions/76766795/how-to-insert-a-python-script-into-a-website-with-django            &#x2502;&#xA;&#x2502; 3 &#x2502; Beautifulsoup append ignores namespace (xml)                         &#x2502; https://stackoverflow.com/questions/76766794/beautifulsoup-append-ignores-namespace-xml                          &#x2502;&#xA;&#x2502; 4 &#x2502; Http api not giving updated response                                 &#x2502; https://stackoverflow.com/questions/76766744/http-api-not-giving-updated-response                                &#x2502;&#xA;&#x2502; 5 &#x2502; What type hint should I use to specify a set of functions            &#x2502; https://stackoverflow.com/questions/76766740/what-type-hint-should-i-use-to-specify-a-set-of-functions           &#x2502;&#xA;&#x2502; 6 &#x2502; can someone explain this append() part of a for loop?                &#x2502; https://stackoverflow.com/questions/76766707/can-someone-explain-this-append-part-of-a-for-loop                  &#x2502;&#xA;&#x2502; 7 &#x2502; How to make it faster?                                               &#x2502; https://stackoverflow.com/questions/76766684/how-to-make-it-faster                                               &#x2502;&#xA;&#x2502; 8 &#x2502; Changing Pandas Period to another frequency                          &#x2502; https://stackoverflow.com/questions/76766650/changing-pandas-period-to-another-frequency                         &#x2502;&#xA;&#x2502; 9 &#x2502; PFX certificate with Selenium with python                            &#x2502; https://stackoverflow.com/questions/76766634/pfx-certificate-with-selenium-with-python                           &#x2502;&#xA;&#x2570;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x256F;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For comparison, some Bash/curl/jq equivalents:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt; res=`curl -o - &amp;quot;https://api.stackexchange.com/questions?pagesize=100&amp;amp;site=stackoverflow&amp;amp;sort=creation&amp;quot; | gunzip`&#xA;&#xA;&amp;gt; echo $res | jq &#x27;.items[0:5][].title&#x27;&#xA;&amp;quot;Strange data prepending incoming WebSocket data. What is the cause?&amp;quot;&#xA;&amp;quot;Why does nothing happen when i try to multiple two variables?&amp;quot;&#xA;&amp;quot;How can I test functions that node-redis using vitest?&amp;quot;&#xA;&amp;quot;Create a Piece-Wise Regression in ggplot2 (R) with multiple &amp;amp;#39;knots&amp;amp;#39;&amp;quot;&#xA;&amp;quot;feeding continuous stdin using bash script&amp;quot;&#xA;&#xA;&amp;gt; echo $res | jq &#x27;.quota_remaining&#x27;&#xA;143&#xA;&#xA;&amp;gt; echo $res | jq &#x27;keys&#x27;&#xA;[&#xA;  &amp;quot;has_more&amp;quot;,&#xA;  &amp;quot;items&amp;quot;,&#xA;  &amp;quot;quota_max&amp;quot;,&#xA;  &amp;quot;quota_remaining&amp;quot;&#xA;]&#xA;&#xA;# Note that this is slightly different from Nushell, in that Nushell will show *all*&#xA;# columns from all results, whereas this will only show the keys from the first result&#xA;&amp;gt; echo $res | jq &#x27;.items[0] | keys&#x27;&#xA;[&#xA;  &amp;quot;answer_count&amp;quot;,&#xA;  &amp;quot;content_license&amp;quot;,&#xA;  &amp;quot;creation_date&amp;quot;,&#xA;  &amp;quot;is_answered&amp;quot;,&#xA;  &amp;quot;last_activity_date&amp;quot;,&#xA;  &amp;quot;link&amp;quot;,&#xA;  &amp;quot;owner&amp;quot;,&#xA;  &amp;quot;post_state&amp;quot;,&#xA;  &amp;quot;question_id&amp;quot;,&#xA;  &amp;quot;score&amp;quot;,&#xA;  &amp;quot;tags&amp;quot;,&#xA;  &amp;quot;title&amp;quot;,&#xA;  &amp;quot;view_count&amp;quot;&#xA;]&#xA;&#xA;# Which questions were about Python?&#xA;&amp;gt; echo $res | jq -r &#x27;.items[] | select(.tags[] | contains (&amp;quot;python&amp;quot;)) | .title, .link&#x27;&#xA;feeding continuous stdin using bash script&#xA;https://stackoverflow.com/questions/76766988/feeding-continuous-stdin-using-bash-script&#xA;Dijkstra&amp;amp;#39;s algorithm while moving through a maze&#xA;https://stackoverflow.com/questions/76766972/dijkstras-algorithm-while-moving-through-a-maze&#xA;numba: parallelize a nested for loop with a cartopy function in it&#xA;https://stackoverflow.com/questions/76766960/numba-parallelize-a-nested-for-loop-with-a-cartopy-function-in-it&#xA;How to avoid lack of convergence while using PassiveAggressiveClassifier for online learning?&#xA;https://stackoverflow.com/questions/76766958/how-to-avoid-lack-of-convergence-while-using-passiveaggressiveclassifier-for-onl&#xA;Opencv camera is available ret returns true, but frame is still empty, is there any fix?&#xA;https://stackoverflow.com/questions/76766956/opencv-camera-is-available-ret-returns-true-but-frame-is-still-empty-is-there&#xA;Remove pushpin on Bing Maps API using Python requests&#xA;https://stackoverflow.com/questions/76766949/remove-pushpin-on-bing-maps-api-using-python-requests&#xA;Why key parameters in Python has to be &amp;amp;quot;so complicated&amp;amp;quot;?&#xA;https://stackoverflow.com/questions/76766948/why-key-parameters-in-python-has-to-be-so-complicated&#xA;Plotting points on a HSV color wheel&#xA;https://stackoverflow.com/questions/76766947/plotting-points-on-a-hsv-color-wheel&#xA;Solving Sudoku with Gurobipy for Inequality&#xA;https://stackoverflow.com/questions/76766946/solving-sudoku-with-gurobipy-for-inequality&#xA;Solving Sudoku with Gurobipy for Inequality&#xA;https://stackoverflow.com/questions/76766946/solving-sudoku-with-gurobipy-for-inequality&#xA;How to open files outside of the django project?&#xA;https://stackoverflow.com/questions/76766934/how-to-open-files-outside-of-the-django-project&#xA;how to create kedro catalog entry &#x2B; custom DataSet init method with values from credentials.yml&#xA;https://stackoverflow.com/questions/76766933/how-to-create-kedro-catalog-entry-custom-dataset-init-method-with-values-from&#xA;Adding a tkinter scrollbar to a treeview without any space&#xA;https://stackoverflow.com/questions/76766918/adding-a-tkinter-scrollbar-to-a-treeview-without-any-space&#xA;Pandas Ethnicity Count/Percentage&#xA;https://stackoverflow.com/questions/76766907/pandas-ethnicity-count-percentage&#xA;SQLite3 can&amp;amp;#39;t open database in Flask server&#xA;https://stackoverflow.com/questions/76766884/sqlite3-cant-open-database-in-flask-server&#xA;How to display a variable from a different file to the screen with PyQt5&#xA;https://stackoverflow.com/questions/76766870/how-to-display-a-variable-from-a-different-file-to-the-screen-with-pyqt5&#xA;compare two file and get only diffe name&#xA;https://stackoverflow.com/questions/76766869/compare-two-file-and-get-only-diffe-name&#xA;Why does my pygbag pygame application have laggy sound?&#xA;https://stackoverflow.com/questions/76766845/why-does-my-pygbag-pygame-application-have-laggy-sound&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  333.        </summary>
  334.    </entry>
  335.    <entry>
  336.        <id>https://stackapps.com/q/9723</id>
  337.        <re:rank scheme="https://stackapps.com">0</re:rank>
  338.        <title type="text">Error calling Stack Overflow Teams API using Python requests library</title>
  339.            <category scheme="https://stackapps.com/tags" term="support" />
  340.            <category scheme="https://stackapps.com/tags" term="write-access" />
  341.            <category scheme="https://stackapps.com/tags" term="stack-overflow-for-teams" />
  342.        <author>
  343.            <name>Shadae</name>
  344.            <uri>https://stackapps.com/users/105922</uri>
  345.        </author>
  346.        <link rel="alternate" href="https://stackapps.com/questions/9723/error-calling-stack-overflow-teams-api-using-python-requests-library" />
  347.        <published>2023-05-07T04:15:21Z</published>
  348.        <updated>2024-02-01T07:09:26Z</updated>
  349.        <summary type="html">
  350.            &lt;p&gt;I&#x27;m trying to call a PUT/DELETE request using the Stack Overflow Teams API in Python, but I&#x27;m encountering errors. &lt;em&gt;As an FYI, I have a working PAT that allows me to make get requests for articles and questions.&lt;/em&gt; Specifically, I&#x27;m trying to create an article, update an article, and delete an article using the API, but the PUT/DELETE requests don&#x27;t seem to be working. When I try to run the code, I get an error message that says &lt;em&gt;&lt;strong&gt;&amp;quot;no method found with this name&lt;/strong&gt;&lt;/em&gt;&amp;quot; or &lt;em&gt;&lt;strong&gt;{&amp;quot;error_id&amp;quot;:400,&amp;quot;error_message&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;error_name&amp;quot;:&amp;quot;bad_parameter&amp;quot;}&lt;/strong&gt;&lt;/em&gt;. The title might be the issue, but I don&#x27;t think it goes against the requirements (string, 5 character&#x2B; length)&lt;/p&gt;&#xA;&lt;p&gt;I have tried running the API calls using Python&#x27;s requests module, and I have checked that my authentication token is correct. I have also tried adjusting the order of the payload and double-checking that the headers are correct. However, I&#x27;m still getting errors.&lt;/p&gt;&#xA;&lt;p&gt;Here&#x27;s my code (sanitized for privacy):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import json&#xA;import os&#xA;import requests&#xA;from markdown_it import MarkdownIt&#xA;&#xA;def create_article(title, access_token):&#xA;    headers = {&#xA;        &amp;quot;X-API-Access-Token&amp;quot;: access_token,&#xA;        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;&#xA;    }&#xA;    data = {&#xA;        &amp;quot;title&amp;quot;: title,&#xA;        &amp;quot;body&amp;quot;: &amp;quot;TEST&amp;quot;,&#xA;        &amp;quot;tags&amp;quot;: &amp;quot;REDACTED&amp;quot;,&#xA;        &amp;quot;article_type&amp;quot;: &amp;quot;knowledge-article&amp;quot;,&#xA;        &amp;quot;filter&amp;quot;: &amp;quot;default&amp;quot; &#xA;    }&#xA;    json_data = json.dumps(data)&#xA;    api_url = &amp;quot;https://api.stackoverflowteams.com/2.3/articles/add?team=[TEAM_NAME]&amp;quot;&#xA;    response = requests.post(api_url, headers=headers, data=json_data)&#xA;    print(f&amp;quot;API response status: {response.status_code}&amp;quot;)&#xA;    print(f&amp;quot;API response text: {response.text}&amp;quot;)&#xA;    &#xA;    return response.json()&#xA;&#xA;&#xA;def delete_article(access_token, artId):&#xA;    headers = {&#xA;        &amp;quot;X-API-Access-Token&amp;quot;: access_token,&#xA;        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;&#xA;    }&#xA;    data = {&#xA;        &amp;quot;id&amp;quot;: artId&#xA;    }&#xA;    json_data = json.dumps(data)&#xA;    api_url = f&amp;quot;https://api.stackoverflowteams.com/2.3/articles/{artId}/delete?team=[TEAM_NAME]&amp;quot;&#xA;    response = requests.delete(api_url, headers=headers, data=json_data)&#xA;    print(f&amp;quot;API response status: {response.status_code}&amp;quot;)&#xA;    print(f&amp;quot;API response text: {response.text}&amp;quot;)&#xA;    &#xA;    return response.json()&#xA;&#xA;def import_single_wiki_to_teams(input_directory, access_token, test_file):&#xA;    input_file = os.path.join(input_directory, test_file)&#xA;&#xA;    if os.path.isfile(input_file):&#xA;        with open(input_file, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&#xA;            content = f.read()&#xA;&#xA;        html_content = convert_md_to_html(content)&#xA;    #   title = os.path.splitext(test_file)[0]&#xA;        title = &amp;quot;TeArticle&amp;quot;&#xA;        print(f&amp;quot;Title from OS is: {title!r}&amp;quot;)&#xA;&#xA;        response = create_article(&#x27;Test Article&#x27;, access_token)  # Use the title and html_content variables&#xA;        print(response)&#xA;    else:&#xA;        print(f&amp;quot;File not found: {input_file}&amp;quot;)&#xA;&#xA;&#xA;input_directory = PATH&#xA;access_token = [REDACTED]&#xA;test_file = &amp;quot;FILE_NAME&amp;quot;&#xA;import_single_wiki_to_teams(input_directory, access_token, test_file)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;
  351.        </summary>
  352.    </entry>
  353.    <entry>
  354.        <id>https://stackapps.com/q/9420</id>
  355.        <re:rank scheme="https://stackapps.com">4</re:rank>
  356.        <title type="text">Padding missing between thumbnails and other app/script information</title>
  357.            <category scheme="https://stackapps.com/tags" term="bug" />
  358.            <category scheme="https://stackapps.com/tags" term="status-review" />
  359.            <category scheme="https://stackapps.com/tags" term="meta" />
  360.            <category scheme="https://stackapps.com/tags" term="design" />
  361.        <author>
  362.            <name>Glorfindel</name>
  363.            <uri>https://stackapps.com/users/34061</uri>
  364.        </author>
  365.        <link rel="alternate" href="https://stackapps.com/questions/9420/padding-missing-between-thumbnails-and-other-app-script-information" />
  366.        <published>2022-05-30T17:01:19Z</published>
  367.        <updated>2024-02-09T09:49:55Z</updated>
  368.        <summary type="html">
  369.            &lt;p&gt;On the &lt;a href=&quot;https://stackapps.com/?tab=apps&quot;&gt;Apps&lt;/a&gt; and &lt;a href=&quot;https://stackapps.com/?tab=scripts&quot;&gt;Scripts&lt;/a&gt; tabs, the thumbnails and the rest of the information touch each other:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/z8VON.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;https://web.archive.org/web/20170301031410/http://stackapps.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;didn&#x27;t use to be the case&lt;/a&gt;, could you please re-add some padding?&lt;/p&gt;&#xA;
  370.        </summary>
  371.    </entry>
  372.    <entry>
  373.        <id>https://stackapps.com/q/9058</id>
  374.        <re:rank scheme="https://stackapps.com">6</re:rank>
  375.        <title type="text">Save the waffles! Bringing back custom 404 pages to Stack Exchange</title>
  376.            <category scheme="https://stackapps.com/tags" term="script" />
  377.            <category scheme="https://stackapps.com/tags" term="images" />
  378.            <category scheme="https://stackapps.com/tags" term="typescript" />
  379.        <author>
  380.            <name>Oleg Valter is with Ukraine</name>
  381.            <uri>https://stackapps.com/users/78873</uri>
  382.        </author>
  383.        <link rel="alternate" href="https://stackapps.com/questions/9058/save-the-waffles-bringing-back-custom-404-pages-to-stack-exchange" />
  384.        <published>2021-07-29T23:03:41Z</published>
  385.        <updated>2024-02-06T10:28:20Z</updated>
  386.        <summary type="html">
  387.            &lt;!-- thumbnail: https://i.stack.imgur.com/mklYl.png --&gt;&#xA;&lt;!-- version: 2.0.0 --&gt;&#xA;&lt;!-- tag: images --&gt;&#xA;&lt;!-- excerpt: The userscript brings back custom 404 page images to sites of the Stack Exchange network --&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As per Aaron&#x27;s &lt;a href=&quot;https://meta.stackexchange.com/a/368048/786798&quot;&gt;answer&lt;/a&gt;, the change is &lt;strong&gt;temporarily&lt;/strong&gt; reverted due to the backlash, so the userscript is not necessary for now. To compensate for the loss in usefulness, I decided to add per-site user overrides (since 0.3.0) and allow it to work on the current 404 pages (since 0.4.0).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Screenshot / Code Snippet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WdT8u.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WdT8u.png&quot; alt=&quot;Meta Stack Overflow 404 page&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Custom user overrides:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xqupd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xqupd.png&quot; alt=&quot;Meta Stack Overflow 404 page with user override&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sub&gt;The image is &amp;quot;The Black Beast of Aaaaaargghh&amp;quot; from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Monty_Python_and_the_Holy_Grail&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Monty Python and the Holy Grail&amp;quot;&lt;/a&gt; film, 1975&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;The userscript brings back custom 404 pages to the Stack Exchange network replacing the lifeless corporate warning icon with community-specific images while preserving the updated layout. Currently supported communities (some 404 pages were never indexed by archive.org, so if you know of the missing 404 images, please let me know):&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Community&lt;/th&gt;&#xA;&lt;th&gt;Image&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Stack Overflow&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/okzBE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/okzBE.png&quot; width=&quot;80&quot; alt=&quot;Stack Overflow 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Meta Stack Overflow&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/0i2to.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0i2to.png&quot; width=&quot;80&quot; alt=&quot;Meta Stack Overflow 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Ask Ubuntu&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/KopoQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KopoQ.png&quot; width=&quot;80&quot; alt=&quot;Ask Ubuntu 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Super User&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/hMfYx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hMfYx.png&quot; width=&quot;80&quot; alt=&quot;Super User 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;English Language Learners&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/cQLRt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cQLRt.png&quot; width=&quot;80&quot; alt=&quot;English Language Learners 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Code Review&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/R4Tgd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R4Tgd.png&quot; width=&quot;80&quot; alt=&quot;Code Review 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Unix &amp;amp; Linux&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/XQRh5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XQRh5.png&quot; width=&quot;80&quot; alt=&quot;UNIX 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Sci-Fi&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/UR35t.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UR35t.png&quot; width=&quot;80&quot; alt=&quot;Sci-Fi 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Math&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/bHpU1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bHpU1.png&quot; width=&quot;80&quot; alt=&quot;Math 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Server Fault&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/W7VMk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W7VMk.png&quot; width=&quot;80&quot; alt=&quot;Server Fault 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Ask Different&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/fCIaP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fCIaP.png&quot; width=&quot;80&quot; alt=&quot;Apple 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Cross Validated&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/BqaS0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BqaS0.png&quot; width=&quot;80&quot; alt=&quot;Cross Validated 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Arqade&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/C4jC1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C4jC1.png&quot; width=&quot;80&quot; alt=&quot;Arqade 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Mi Yodeya&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/048MA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/048MA.png&quot; width=&quot;80&quot; alt=&quot;Mi Yodeya 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Home Improvement&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/C4P5L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C4P5L.png&quot; width=&quot;80&quot; alt=&quot;Home Improvement 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Cooking&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/kSX5n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kSX5n.png&quot; width=&quot;80&quot; alt=&quot;Cooking 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Crypto&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/2hyIe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2hyIe.png&quot; width=&quot;80&quot; alt=&quot;Crypto 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Webmasters&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z8Y2o.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z8Y2o.png&quot; width=&quot;80&quot; alt=&quot;Webmasters 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Chemistry&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/SwIib.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SwIib.png&quot; width=&quot;80&quot; alt=&quot;Chemistry 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Raspberry Pi&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/A02um.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A02um.png&quot; width=&quot;80&quot; alt=&quot;Raspberry Pi 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Emacs&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/KUafD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KUafD.png&quot; width=&quot;80&quot; alt=&quot;Emacs 404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Database Administrators&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/ly6am.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ly6am.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Graphic Design&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/FwQQL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FwQQL.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Android Enthusiasts&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/kgFiY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kgFiY.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Movies &amp;amp; TV&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/wCrM9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wCrM9.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Software Recommendations&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/BqikQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BqikQ.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Academia&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/l10yz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l10yz.png&quot; width=&quot;80&quot; alt=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&lt;h3&gt;Change Log&lt;/h3&gt;&#xA;&lt;p&gt;v0.3.0 introduces per-site user overrides and a configuration modal accessed by clicking on a &amp;quot;404&amp;quot; button added to the main site menu:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1mgi5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1mgi5.png&quot; alt=&quot;site menu with config button added&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The modal allows you to change the image source for each of the sites with custom 404 pages (ability to add sites to the list coming soon) - it will be loaded instead of the default image:&lt;/p&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/HyhVs.gif&quot; width=&quot;800&quot; alt=&quot;configuration modal feature&quot; /&gt;&#xA;&lt;p&gt;Since v0.8.0, there is a small icon next to each of the configuration labels - clicking on one takes you to the corresponding 404 page:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uQnqW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uQnqW.png&quot; alt=&quot;config item with icon link&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since v1.1.1, there the configuration modal supports custom header text as well:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VCpf1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VCpf1.png&quot; alt=&quot;config item with custom header input&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Day-to-day changes:&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Version&lt;/th&gt;&#xA;&lt;th&gt;Updates&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.6.0&lt;/td&gt;&#xA;&lt;td&gt;options menu item is added for logged out users (or those without an account on a community) too&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.6.1&lt;/td&gt;&#xA;&lt;td&gt;Added explicit support for the &lt;a href=&quot;https://www.greasespot.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Greasemonkey&lt;/a&gt; userscript manager&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.7.0&lt;/td&gt;&#xA;&lt;td&gt;Made modal draggable and made configuration modal load even on unsupported sites&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.8.0&lt;/td&gt;&#xA;&lt;td&gt;Added quick links to 404 pages of each of the supported site&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.9.0&lt;/td&gt;&#xA;&lt;td&gt;Added true cross-site configuration for Tampermonkey users&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0.10.0&lt;/td&gt;&#xA;&lt;td&gt;Added DBA, Android Enthusiasts and Graphic Design defaults&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1.0.0&lt;/td&gt;&#xA;&lt;td&gt;Deferred image replacement till &amp;quot;load&amp;quot; event; first major version&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1.1.1&lt;/td&gt;&#xA;&lt;td&gt;Added &amp;quot;Page not found&amp;quot; user overrides&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1.2.0&lt;/td&gt;&#xA;&lt;td&gt;Added Software Recs, Academia, and Movies &amp;amp; TV defaults&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;2.0.0&lt;/td&gt;&#xA;&lt;td&gt;Switched to userscript manager-agnostic &lt;a href=&quot;https://www.npmjs.com/package/@userscripters/storage&quot; rel=&quot;nofollow noreferrer&quot;&gt;storage&lt;/a&gt;; fixed config item broken by recent UI updates&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&lt;h3&gt;License&lt;/h3&gt;&#xA;&lt;p&gt;The script is licensed under the &lt;a href=&quot;https://spdx.org/licenses/GPL-3.0-or-later&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPL-3.0-or-later&lt;/a&gt; license.&lt;/p&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/userscripters/bring-back-404/raw/master/dist/modern/index.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;Install&lt;/a&gt; | &lt;a href=&quot;https://github.com/userscripters/bring-back-404/raw/master/dist/modern/index.min.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minified&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The script &lt;em&gt;doesn&#x27;t need&lt;/em&gt; a userscript manager to work (but includes necessary headers).&lt;/p&gt;&#xA;&lt;p&gt;Note that overrides are available &lt;strong&gt;cross-site&lt;/strong&gt; only in userscript managers due to the nature of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy&quot; rel=&quot;nofollow noreferrer&quot;&gt;same-origin policy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;Version number means &amp;quot;last tested on&amp;quot;:&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Chrome&lt;/th&gt;&#xA;&lt;th&gt;Opera&lt;/th&gt;&#xA;&lt;th&gt;Firefox&lt;/th&gt;&#xA;&lt;th&gt;Edge&lt;/th&gt;&#xA;&lt;th&gt;IE&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&#x2714; 92.0.4515.107&lt;/td&gt;&#xA;&lt;td&gt;&#x2714; 77.0.4054.203&lt;/td&gt;&#xA;&lt;td&gt;&#x2714; 89.0&lt;/td&gt;&#xA;&lt;td&gt;&#x2714; 92.0.902.55&lt;/td&gt;&#xA;&lt;td&gt;no&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Userscript managers:&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Greasemonkey&lt;/th&gt;&#xA;&lt;th&gt;Tampermonkey&lt;/th&gt;&#xA;&lt;th&gt;Violentmonkey&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&#x2714; 4.11&lt;/td&gt;&#xA;&lt;td&gt;&#x2714; 31&lt;/td&gt;&#xA;&lt;td&gt;?&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&lt;p&gt;Author: &lt;a href=&quot;https://stackoverflow.com/users/11407695/oleg-valter&quot;&gt;Oleg Valter&lt;/a&gt;&#xA;&lt;br&gt;Organization: &lt;a href=&quot;https://github.com/userscripters&quot; rel=&quot;nofollow noreferrer&quot;&gt;UserScripters&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please, submit bug reports &lt;a href=&quot;https://github.com/userscripters/bring-back-404/issues&quot; rel=&quot;nofollow noreferrer&quot;&gt;on the source repository&lt;/a&gt;.&#xA;&lt;br&gt;Before adding a new one, please check if it hasn&#x27;t been raised before.&lt;/p&gt;&#xA;&lt;p&gt;You can also &lt;a href=&quot;https://chat.stackoverflow.com/rooms/214345/userscript-newbies-and-friends&quot;&gt;drop by to chat&lt;/a&gt;, we are a friendly bunch.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/userscripters/bring-back-404/blob/master/src/index.ts&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source code&lt;/a&gt; written in TypeScript.&lt;/p&gt;&#xA;&lt;p&gt;Contributions are welcome, you can always &lt;a href=&quot;https://github.com/userscripters/bring-back-404/pulls&quot; rel=&quot;nofollow noreferrer&quot;&gt;submit a PR here&lt;/a&gt;.&lt;/p&gt;&#xA;
  388.        </summary>
  389.    </entry>
  390.    <entry>
  391.        <id>https://stackapps.com/q/8892</id>
  392.        <re:rank scheme="https://stackapps.com">9</re:rank>
  393.        <title type="text">Stack Exchange One-Click Reviews</title>
  394.            <category scheme="https://stackapps.com/tags" term="script" />
  395.            <category scheme="https://stackapps.com/tags" term="review" />
  396.        <author>
  397.            <name>gparyani</name>
  398.            <uri>https://stackapps.com/users/27674</uri>
  399.        </author>
  400.        <link rel="alternate" href="https://stackapps.com/questions/8892/stack-exchange-one-click-reviews" />
  401.        <published>2021-03-22T06:21:52Z</published>
  402.        <updated>2024-02-26T20:07:40Z</updated>
  403.        <summary type="html">
  404.            &lt;!-- version: 1.1 --&gt;&#xA;&lt;!-- tag: review --&gt;&#xA;&lt;!-- excerpt: Review items on Stack Exchange by simply clicking on the review action, rather than having to select and choose Submit --&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;The new UI for reviews introduced in early 2021 requires two clicks to submit reviews for an item: once to select the action, and a second time to submit the review. By contrast, the previous UI simply required a single click on an action button to submit a review.&lt;/p&gt;&#xA;&lt;p&gt;Some users prefer the old behavior of simply having one click to submit a review. This script removes the requirement for a second click on the Submit button, and makes it so that clicking on a review action will immediately submit the review, restoring the former behavior of the old queue layout.&lt;/p&gt;&#xA;&lt;h3&gt;Notes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To discourage robo-reviewing, there is a slight delay baked into the script: if you click on a review action too early, it will simply select the button without submitting the review.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gitcdn.xyz/repo/gparyani/2bcc29740ab0da5fe38eff84e2a45efd/raw/d548b0b9a7a9480471d7888fa1ce64ea9462be14/oneclickreview.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link to install the user script&lt;/a&gt;. You will need to have a user script manager extension installed in your browser, such as Tampermonkey or Violentmonkey.&lt;/p&gt;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&lt;p&gt;Tested with Tampermonkey on Microsoft Edge (new Chromium-based version) on Windows. Haven&#x27;t tested with other browsers or user script managers, but should work with other platforms too.&lt;/p&gt;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gparyani/2bcc29740ab0da5fe38eff84e2a45efd&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source code&lt;/a&gt;&lt;/p&gt;&#xA;
  405.        </summary>
  406.    </entry>
  407.    <entry>
  408.        <id>https://stackapps.com/q/8369</id>
  409.        <re:rank scheme="https://stackapps.com">7</re:rank>
  410.        <title type="text">StackedOff - an offline StackExchange indexer and search engine</title>
  411.            <category scheme="https://stackapps.com/tags" term="app" />
  412.            <category scheme="https://stackapps.com/tags" term="data-dump" />
  413.            <category scheme="https://stackapps.com/tags" term="offline" />
  414.        <author>
  415.            <name>Ben</name>
  416.            <uri>https://stackapps.com/users/61575</uri>
  417.        </author>
  418.        <link rel="alternate" href="https://stackapps.com/questions/8369/stackedoff-an-offline-stackexchange-indexer-and-search-engine" />
  419.        <published>2019-07-08T16:20:36Z</published>
  420.        <updated>2024-03-06T20:42:29Z</updated>
  421.        <summary type="html">
  422.            &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hwsmp.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hwsmp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;StackedOff is an offline Stack Exchange site indexer and search engine. It&#x27;s intended use is for people who wish to access Stack Exchange Network site(s), e.g. stackoverflow.com, but do not have a reliable internet service.&#xA;StackedOff uses the &#x27;stack dump&#x27; data files made public by the Stack Exchange Network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;StackedOff is available for free under MIT license here: &lt;a href=&quot;https://github.com/tools4j/stacked-off&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/tools4j/stacked-off&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some screenshots:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Search:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OoLTH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OoLTH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question view&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g1684.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g1684.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Selecting a site to index:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4pCBn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4pCBn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;
  423.        </summary>
  424.    </entry>
  425.    <entry>
  426.        <id>https://stackapps.com/q/6652</id>
  427.        <re:rank scheme="https://stackapps.com">8</re:rank>
  428.        <title type="text">Hide the Stack Exchange sidebar</title>
  429.            <category scheme="https://stackapps.com/tags" term="support" />
  430.            <category scheme="https://stackapps.com/tags" term="script-request" />
  431.            <category scheme="https://stackapps.com/tags" term="style" />
  432.        <author>
  433.            <name>XZS</name>
  434.            <uri>https://stackapps.com/users/36584</uri>
  435.        </author>
  436.        <link rel="alternate" href="https://stackapps.com/questions/6652/hide-the-stack-exchange-sidebar" />
  437.        <published>2015-10-30T00:38:37Z</published>
  438.        <updated>2024-03-19T20:29:40Z</updated>
  439.        <summary type="html">
  440.            &lt;p&gt;I would like to gain some screen estate when viewing Stack Exchange sites. The sidebar seldom shows information I need.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I know most help content displayed when composing questions.&lt;/li&gt;&#xA;&lt;li&gt;Most related answers are found by the same search that already brought me to the question I am currently viewing, so I already have them open in other browser tabs anyways.&lt;/li&gt;&#xA;&lt;li&gt;Hot Network Questions always distracts me to &lt;a href=&quot;http://scifi.stackexchange.com&quot;&gt;scifi&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I know there is a &lt;a href=&quot;https://userstyles.org/&quot; rel=&quot;noreferrer&quot;&gt;userstyle&lt;/a&gt; to &lt;a href=&quot;https://userstyles.org/styles/111692/stackexchange-remove-hot-network-questions-widget&quot; rel=&quot;noreferrer&quot;&gt;hide the &lt;em&gt;Hot Network Questions&lt;/em&gt;&lt;/a&gt; and one that &lt;a href=&quot;https://userstyles.org/styles/111859/hide-the-sidebar-on-unix-stackexchange-com&quot; rel=&quot;noreferrer&quot;&gt;completely removes the sidebar&lt;/a&gt; leaving an ugly hole where it once was. Is it possible to hide it and have the question, list, or whatever content takes the main part of the page expand to claim its place?&lt;/p&gt;&#xA;
  441.        </summary>
  442.    </entry>
  443.    <entry>
  444.        <id>https://stackapps.com/q/3712</id>
  445.        <re:rank scheme="https://stackapps.com">2</re:rank>
  446.        <title type="text">Is there a difference between the API search and the search from within the site?</title>
  447.            <category scheme="https://stackapps.com/tags" term="discussion" />
  448.            <category scheme="https://stackapps.com/tags" term="api-v2" />
  449.            <category scheme="https://stackapps.com/tags" term="search" />
  450.        <author>
  451.            <name>James Mertz</name>
  452.            <uri>https://stackapps.com/users/4961</uri>
  453.        </author>
  454.        <link rel="alternate" href="https://stackapps.com/questions/3712/is-there-a-difference-between-the-api-search-and-the-search-from-within-the-site" />
  455.        <published>2012-10-15T17:17:28Z</published>
  456.        <updated>2024-03-24T20:05:55Z</updated>
  457.        <summary type="html">
  458.            &lt;p&gt;I&#x27;m curious if the search results from the API is calculated the same way as the searches from within the sites themselves?&lt;/p&gt;&#xA;&lt;p&gt;Is there a difference between the two?  If so, what are the differences?&lt;/p&gt;&#xA;
  459.        </summary>
  460.    </entry>
  461.    <entry>
  462.        <id>https://stackapps.com/q/3211</id>
  463.        <re:rank scheme="https://stackapps.com">3</re:rank>
  464.        <title type="text">StackScraper - export questions as JSON or HTML</title>
  465.            <category scheme="https://stackapps.com/tags" term="script" />
  466.            <category scheme="https://stackapps.com/tags" term="javascript" />
  467.            <category scheme="https://stackapps.com/tags" term="coffeescript" />
  468.        <author>
  469.            <name>Jeremy</name>
  470.            <uri>https://stackapps.com/users/4112</uri>
  471.        </author>
  472.        <link rel="alternate" href="https://stackapps.com/questions/3211/stackscraper-export-questions-as-json-or-html" />
  473.        <published>2012-03-05T22:57:16Z</published>
  474.        <updated>2024-01-27T14:05:20Z</updated>
  475.        <summary type="html">
  476.            &lt;p&gt;&lt;!-- excerpt: Adds download options to Stack Exchange questions. --&gt;&#xA;&lt;!-- tag: script --&gt;&#xA;&#xA;&lt;!-- version: 0.2.6 --&gt;&#xA;&lt;!-- thumbnail: https://i.stack.imgur.com/zFJeI.png --&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;StackScraper is a user script that adds HTML and JSON export options to each question. The JSON loosely resembles the API format and includes the HTML and markdown bodies of all posts, as well as their comments and vote counts (if you have permission to view them). The HTML displays the content similarly to Stack Exchange and includes the necessary attribution. Comments are included, but initially hidden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DTRmi.png&quot; width=&quot;300&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, here are the &lt;a href=&quot;https://s3.amazonaws.com/23e9f5/87d65ee1-05e9-44aa-bdca-7aed385d27f3%23question-3126096.json&quot; rel=&quot;nofollow noreferrer&quot;&gt;JSON&lt;/a&gt; and &lt;a href=&quot;https://s3.amazonaws.com/23e9f5/2d615e2a-f8e2-45df-9263-67d5cd17c35b%23question-3126096.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;HTML&lt;/a&gt; dumps of &lt;a href=&quot;//stackoverflow.com/q/3126096&quot;&gt;a deleted question&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://s3.amazonaws.com/23e9f5/2d615e2a-f8e2-45df-9263-67d5cd17c35b%23question-3126096.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V24Lt.png&quot; width=&quot;300&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Released under the &lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT Open Source License&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Installation&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/extensions/stackscraper/raw/gh-pages/stackscraper.user.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Click here&lt;/strong&gt;&lt;/a&gt; to install or update StackScraper.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Platforms&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Chrome, probably&lt;/li&gt;&#xA;&lt;li&gt;Mozilla Firefox &#x2B; &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Greasemonkey&lt;/a&gt;, possibly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Not well-tested yet.)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;StackScraper was written by me, Jeremy Banks. Feedback and bug reports can be posted as comments or answers below.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Code&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;StackScraper was written in &lt;a href=&quot;http://coffeescript.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CoffeeScript&lt;/a&gt;. You can view or contribute to the source &lt;a href=&quot;https://github.com/extensions/stackscraper&quot; rel=&quot;nofollow noreferrer&quot;&gt;here on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;
  477.        </summary>
  478.    </entry>
  479.    <entry>
  480.        <id>https://stackapps.com/q/1672</id>
  481.        <re:rank scheme="https://stackapps.com">7</re:rank>
  482.        <title type="text">Application marketing ideas</title>
  483.            <category scheme="https://stackapps.com/tags" term="discussion" />
  484.            <category scheme="https://stackapps.com/tags" term="marketing" />
  485.        <author>
  486.            <name>Adam Wright</name>
  487.            <uri>https://stackapps.com/users/5</uri>
  488.        </author>
  489.        <link rel="alternate" href="https://stackapps.com/questions/1672/application-marketing-ideas" />
  490.        <published>2010-10-06T20:01:15Z</published>
  491.        <updated>2024-01-26T12:35:02Z</updated>
  492.        <summary type="html">
  493.            &lt;p&gt;As I prepare to ship v1.1 of &lt;a href=&quot;http://sixtoeightapp.com&quot; rel=&quot;noreferrer&quot;&gt;Six to Eight&lt;/a&gt;, I&#x27;m curious as to what ideas other people might have for Stack Exchange app marketing. How do we reach Stack Exchange users without either annoying them with spammy messages or spending a fortune (or, indeed, anything beyond time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Six to Eight has been about as successful as I&#x27;d hoped so far. I&#x27;ve shipped around 1000 copies: around 450 on the day it first hit the App Store and Jeff tweeted it, 150 when it came 3rd in the SE API competition, then a steady trickle at about 50 new downloads a week. I&#x27;m happy, but I think there&#x27;re more users out there who might like it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My only real ideas so far are posting on the meta sites, which I&#x27;ve rejected as being too spam like. I guess I could buy Stack Exchange ad space, but I&#x27;ve got no marketing budget for a free app. I like to encourage users to spread the word, especially to the audience on the new Stack Exchanges, but I don&#x27;t know how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How are other developers promoting their work, and what can I do to encourage more adoption?&lt;/p&gt;&#xA;
  494.        </summary>
  495.    </entry>
  496.    <entry>
  497.        <id>https://stackapps.com/q/359</id>
  498.        <re:rank scheme="https://stackapps.com">2</re:rank>
  499.        <title type="text">Retrieving a post with a specific ID</title>
  500.            <category scheme="https://stackapps.com/tags" term="feature-request" />
  501.            <category scheme="https://stackapps.com/tags" term="status-completed" />
  502.            <category scheme="https://stackapps.com/tags" term="api" />
  503.        <author>
  504.            <name>Dave DeLong</name>
  505.            <uri>https://stackapps.com/users/448</uri>
  506.        </author>
  507.        <link rel="alternate" href="https://stackapps.com/questions/359/retrieving-a-post-with-a-specific-id" />
  508.        <published>2010-05-29T19:38:01Z</published>
  509.        <updated>2024-03-08T07:59:54Z</updated>
  510.        <summary type="html">
  511.            &lt;p&gt;According to &lt;a href=&quot;https://stackapps.com/questions/299&quot;&gt;this question (and its answer)&lt;/a&gt;, questions and answers are using the same index to determine their ID.  In other words:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Question with ID #1&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Answer with ID #2&lt;/li&gt;&#xA;&lt;li&gt;Answer with ID #3&lt;/li&gt;&#xA;&lt;li&gt;Answer with ID #4&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Question with ID #5&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Because the 3 answers consumed 3 ids, it is impossible for a question to have ID #2, #3, or #4.  This is the behavior as defined in the question linked to above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this is not reflected in the API.  In some cases, you must know the type of a post in order to request information about it.  For example, if you want to request the comments of a particular post, you must use either &lt;code&gt;/questions/{id}/comments&lt;/code&gt; or &lt;code&gt;/answers/{id}/comments&lt;/code&gt;.  It would be really wonderful if I could just use &lt;code&gt;/posts/{id}/comments&lt;/code&gt; and not have to rely on knowing the post type in order to retrieve its comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty please?&lt;/p&gt;&#xA;
  512.        </summary>
  513.    </entry>
  514.    <entry>
  515.        <id>https://stackapps.com/q/83</id>
  516.        <re:rank scheme="https://stackapps.com">162</re:rank>
  517.        <title type="text">StackApplet &#x2014; Bringing Stack Exchange Notifications to Your Desktop [Large scale rewrite in progress]</title>
  518.            <category scheme="https://stackapps.com/tags" term="app" />
  519.            <category scheme="https://stackapps.com/tags" term="notifier" />
  520.            <category scheme="https://stackapps.com/tags" term="windows" />
  521.            <category scheme="https://stackapps.com/tags" term="linux" />
  522.        <author>
  523.            <name>Nathan Osman</name>
  524.            <uri>https://stackapps.com/users/18</uri>
  525.        </author>
  526.        <link rel="alternate" href="https://stackapps.com/questions/83/stackapplet-bringing-stack-exchange-notifications-to-your-desktop-large-scale" />
  527.        <published>2010-05-20T23:30:54Z</published>
  528.        <updated>2024-04-23T19:31:22Z</updated>
  529.        <summary type="html">
  530.            &lt;p&gt;&lt;!-- thumbnail: https://i.stack.imgur.com/u60AX.png --&gt;&#xA;&lt;!-- version: 1.6alpha --&gt;&#xA;&lt;!-- tag: linux --&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h2&gt;Rewrite In Progress&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;I am currently in the process of completely rewriting this application from scratch. The code for the old version was an absolute disaster, written nearly four years ago when I first started learning Python. The new version will be written in Python 3 and use PyQt5.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Unfortunately I don&#x27;t have a timeline on this new version but a rough guess for an early release would be early July 2014. Eventually I hope to get an actual stable release ready for Ubuntu 14.10 (Utopic) in October. Windows builds will be released when time permits.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(I will also add a link to the project page on GitHub once I am a little bit further into this.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Screenshot&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mRgnq.png&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;StackApplet is a small status icon that sits in your desktop&#x27;s notification area and alerts you to events that happen to your accounts. You will receive notifications about new answers, comments and reputation changes. All Stack&amp;nbsp;Exchange sites are supported. The application is written in Python and the preferences page uses JavaScript.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;License&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot; rel=&quot;noreferrer&quot;&gt;MIT License&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Download&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Packages are available for the latest stable release (1.5.2):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Microsoft Windows, get the &lt;a href=&quot;https://launchpad.net/stackapplet/&#x2B;download&quot; rel=&quot;noreferrer&quot;&gt;EXE installer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Debian&quot; rel=&quot;noreferrer&quot;&gt;Debian&lt;/a&gt;-based distributions, get the &lt;a href=&quot;https://launchpad.net/stackapplet/&#x2B;download&quot; rel=&quot;noreferrer&quot;&gt;DEB installer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Red_Hat_Linux&quot; rel=&quot;noreferrer&quot;&gt;Red Hat&lt;/a&gt;-based distributions, get the &lt;a href=&quot;https://launchpad.net/stackapplet/&#x2B;download&quot; rel=&quot;noreferrer&quot;&gt;RPM installer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://launchpad.net/stackapplet/&#x2B;download&quot; rel=&quot;noreferrer&quot;&gt;Generic archive&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Platform&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Windows XP/Vista/7/8 &lt;strong&gt;or&lt;/strong&gt; a Linux distribution with &lt;a href=&quot;http://en.wikipedia.org/wiki/PyGTK&quot; rel=&quot;noreferrer&quot;&gt;PyGTK&lt;/a&gt; installed.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Contact&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I can be reached at admin@quickmediasolutions.com.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Source&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Available on &lt;a href=&quot;http://en.wikipedia.org/wiki/Launchpad_%28website%29&quot; rel=&quot;noreferrer&quot;&gt;Launchpad&lt;/a&gt;: &lt;a href=&quot;http://launchpad.net/stackapplet&quot; rel=&quot;noreferrer&quot;&gt;http://launchpad.net/stackapplet&lt;/a&gt;&lt;/p&gt;&#xA;
  531.        </summary>
  532.    </entry>
  533. </feed>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=https%3A//stackapps.com/feeds

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda