https://maybecoding.bearblog.devmaybecoding2026-04-26T07:04:16.243832+00:00maybecodinghiddenpython-feedgenThanks for visiting my blog! If you'd like to get in touch, please use the message box below. I'll try to reply by posting an answer on this page 🙂
<input...https://maybecoding.bearblog.dev/frogtab-update-improved-keyboard-shortcuts-and-new-offline-version/Frogtab update: Improved keyboard shortcuts and new offline version2025-04-12T15:44:17.918381+00:00maybecodinghidden<p><a href="proxy.php?url=https%3A%2F%2Ffrogtab.com" target='_blank'>Frogtab</a> is a browser-based task manager that helps me prioritize my daily work. I recently released the following changes:</p>
<ul>
<li>You can now use <strong>Ctrl+X</strong> or <strong>⌘+X</strong> to cut tasks, even if no text is selected.</li>
<li>You can now use <strong>Ctrl+A</strong> or <strong>⌘+A</strong> to select all tasks, even if your cursor isn't in the task editor.</li>
</ul>
<p>I also updated Frogtab Local, the version of Frogtab that you can run on your computer:</p>
<ul>
<li>Replaced the <code>frogtab</code> command (provided by the Linux snap) by an entirely new <code>frogtab</code> command. Instead of starting Frogtab Local, <code>frogtab</code> now sends tasks to Frogtab. To start Frogtab Local, run <code>frogtab start</code>.</li>
<li>Published a Python package that also provides the new <code>frogtab</code> command, as an alternative to the Linux snap.</li>
<li>Auto-backup is now enabled by default.</li>
<li>Removed the ability customize backup methods with Python code. You can use the new <code>frogtab</code> command to control the location of the Frogtab backup file. To learn more, run <code>frogtab help</code>.</li>
</ul>
<p>To get Frogtab Local, <a href="proxy.php?url=https%3A%2F%2Fsnapcraft.io%2Ffrogtab">install the Linux snap</a> or <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Ffrogtab%2Fblob%2Fmain%2Flocal%2FREADME.md%23frogtab-local">install the Python package</a>.</p>
<hr />
<p>It's been a while (6 months!) since I last posted about Frogtab. I haven't had a huge amount of time to work on it - but the app itself has been pretty stable for a while now. The new version of Frogtab Local is also much closer to "finished", so I'm not planning any major updates in the near future.</p>
<p>As usual, please <a href="proxy.php?url=https%3A%2F%2Fmaybecoding.bearblog.dev%2F">let me know</a> if you find Frogtab useful, or if you have any other feedback. Thank you so much to everyone who has reached out with notes of support ☺️</p>
Frogtab is a browser-based task manager that helps me prioritize my daily work. I recently released some new features.2025-04-12T15:26:00+00:00https://maybecoding.bearblog.dev/frogtab-update-refreshed-menu-and-improved-keyboard-navigation-new/Frogtab update: Refreshed menu and improved keyboard navigation2024-10-18T23:48:03.085131+00:00maybecodinghidden<p>In the latest update to Frogtab, I've adjusted the menu so that <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fachievements" target='_blank'>Achievements</a> always appears. Previously, Achievements only appeared if the feature was enabled. I've also reorganized the docs for Achievements to make it easier to learn how to complete tasks.</p>
<p>While I was updating the menu, I removed Send to Frogtab from the menu. You can still access Send to Frogtab at <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fsend" target='_blank'>frogtab.com/send</a> - I removed it from the menu because Send to Frogtab is intended for when you aren't already looking at Frogtab.</p>
<p>Lastly, I've made sure that every part of Frogtab can be used without a mouse. If you find anything that behaves in an unexpected way, please let me know!</p>
Frogtab is a browser-based task manager that helps me prioritize my daily work. I've recently adjusted the navigation menu and made sure that every part of Frogtab can be used without a mouse2024-10-18T23:48:03.078703+00:00https://maybecoding.bearblog.dev/making-a-command-line-tool-for-your-frogtab-personal-link/Making a command-line tool for your Frogtab personal link2024-12-26T14:26:41.383572+00:00maybecodinghidden<p><a href="proxy.php?url=https%3A%2F%2Ffrogtab.com" target='_blank'>Frogtab</a> is a browser-based task manager I built to help me stay organized at work.
Frogtab can't sync data between devices, but it's possible to register for a personal link that you can use to send tasks to Frogtab from any device.</p>
<p>This post explains how to send tasks to Frogtab via a terminal instead of your personal link.</p>
<div id="customize">
<p>
To customize this post for your personal link, enter your personal link:
</p>
<input id="link-box" type="text" placeholder="Your personal link…">
<p>
If you don't have a personal link, see <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fhelp%23registering-for-a-personal-link" target="_blank">Registering for a personal link</a>.
</p>
</div>
<h2 id=prerequisites>Prerequisites</h2><p>You'll need a UNIX-like environment (e.g., macOS or a Linux distribution) with the following commands:</p>
<ul>
<li><code>gpg</code> (GnuPG) - If you don't have GnuPG, see <a href="proxy.php?url=https%3A%2F%2Fgnupg.org%2Fdownload%2Findex.html" target='_blank'>https://gnupg.org/download/index.html</a></li>
<li><code>curl</code> - If you don't have curl, see <a href="proxy.php?url=https%3A%2F%2Fcurl.se%2Fdownload.html" target='_blank'>https://curl.se/download.html</a></li>
<li><code>jq</code> - If you don't have jq, see <a href="proxy.php?url=https%3A%2F%2Fjqlang.github.io%2Fjq%2Fdownload%2F" target='_blank'>https://jqlang.github.io/jq/download/</a></li>
</ul>
<h2 id=step-1-import-your-public-key-into-gnupg>Step 1 - Import your public key into GnuPG</h2><ol>
<li><p>Download your public key:</p>
<div class="highlight"><pre><span></span>curl https://frogtab.com/key_00ee411a-5702-4c8d-ac35-74cf7376acb7.asc > frogtab.asc
</pre></div>
<p>where <code>00ee411a-5702-4c8d-ac35-74cf7376acb7</code> is the ID from your personal link.</p>
</li>
<li><p>Import the key:</p>
<div class="highlight"><pre><span></span>gpg --import frogtab.asc
</pre></div>
<p>GnuPG displays the message <code>public key "Frogtab (4c0-c38)" imported</code>.</p>
</li>
<li><p>Change the trust level of the key:</p>
<div class="highlight"><pre><span></span>gpg --edit-key "Frogtab (4c0-c38)"
gpg> trust
gpg> 5
gpg> quit
</pre></div>
<p>Setting trust level 5 enables GnuPG to use the key without asking you for confirmation each time.</p>
</li>
</ol>
<p>Here's a demo of the procedure<span id="demo-info"></span>:</p>
<script src="proxy.php?url=https%3A%2F%2Fasciinema.org%2Fa%2F675812.js" id="asciicast-675812" async="true"></script>
<h2 id=step-2-make-a-tool-to-send-tasks-to-frogtab>Step 2 - Make a tool to send tasks to Frogtab</h2><ol>
<li><p>Create a file called <em>send.sh</em> with the following contents:</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/sh</span>
<span class="nv">ID</span><span class="o">=</span><span class="s2">"00ee411a-5702-4c8d-ac35-74cf7376acb7"</span>
<span class="nv">KEY</span><span class="o">=</span><span class="s2">"Frogtab (4c0-c38)"</span>
<span class="nv">TASK</span><span class="o">=</span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span>
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span>-z<span class="w"> </span><span class="s2">"</span><span class="nv">$TASK</span><span class="s2">"</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Error: No task"</span><span class="w"> </span>><span class="p">&</span><span class="m">2</span>
<span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<span class="k">fi</span>
<span class="nv">ENCRYPTED_TASK</span><span class="o">=</span><span class="s2">"</span><span class="k">$(</span><span class="nb">echo</span><span class="w"> </span><span class="s2">"</span><span class="nv">$TASK</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>gpg<span class="w"> </span>--armor<span class="w"> </span>--encrypt<span class="w"> </span>--recipient<span class="w"> </span><span class="s2">"</span><span class="nv">$KEY</span><span class="s2">"</span><span class="k">)</span><span class="s2">"</span>
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="nv">$?</span><span class="w"> </span>-ne<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Error: gpg error"</span><span class="w"> </span>><span class="p">&</span><span class="m">2</span>
<span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<span class="k">fi</span>
<span class="nv">POST_URL</span><span class="o">=</span>https://frogtab.com/open/post-add-message
<span class="nv">POST_TYPE</span><span class="o">=</span><span class="s2">"Content-Type: application/json"</span>
<span class="nv">POST_BODY</span><span class="o">=</span><span class="s2">"</span><span class="k">$(</span>jq<span class="w"> </span>-n<span class="w"> </span>--arg<span class="w"> </span>p1<span class="w"> </span><span class="s2">"</span><span class="nv">$ID</span><span class="s2">"</span><span class="w"> </span>--arg<span class="w"> </span>p2<span class="w"> </span><span class="s2">"</span><span class="nv">$ENCRYPTED_TASK</span><span class="s2">"</span><span class="w"> </span><span class="s1">'{user_id: $p1, message: $p2}'</span><span class="k">)</span><span class="s2">"</span>
curl<span class="w"> </span>-s<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>-H<span class="w"> </span><span class="s2">"</span><span class="nv">$POST_TYPE</span><span class="s2">"</span><span class="w"> </span>-d<span class="w"> </span><span class="s2">"</span><span class="nv">$POST_BODY</span><span class="s2">"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$POST_URL</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-e<span class="w"> </span><span class="s1">'.success == true'</span><span class="w"> </span>><span class="w"> </span>/dev/null
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="nv">$?</span><span class="w"> </span>-ne<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Error: Unable to send task"</span><span class="w"> </span>><span class="p">&</span><span class="m">2</span>
<span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<span class="k">fi</span>
</pre></div>
</li>
<li><p>Run <code>chmod +x send.sh</code> to make <em>send.sh</em> executable.</p>
</li>
</ol>
<p>You can then send tasks to Frogtab by running <em>send.sh</em>.
For example:</p>
<div class="highlight"><pre><span></span>./send.sh "Record a new product demo"
</pre></div>
<script>
function delayForUX(f) {
return Promise.all([
f(),
new Promise(resolve => window.setTimeout(resolve, 1500))
]);
}
function escapeHTML(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const domCustomize = document.getElementById("customize");
const domLinkBox = document.getElementById("link-box");
const domDemoInfo = document.getElementById("demo-info");
domCustomize.addEventListener("input", async () => {
const personalLink = domLinkBox.value;
const matches = personalLink.match(/send#([0-9a-f-]{36})(\/[^\/]*)?$/);
if (matches === null) {
// Input doesn't match the format of a personal link
return;
}
await delayForUX(() => {});
domLinkBox.value = "";
domCustomize.innerHTML = "<p>⏳ Customizing…</p>";
const serverBase = personalLink.substring(0, personalLink.length - matches[0].length);
const userID = matches[1];
let userDetails = null;
await delayForUX(async () => {
try {
const frogtab = await import(`${serverBase}open/sdk.js?sha1=b15ab6c77a2cb98395776c59080fba310def08de`);
userDetails = await frogtab.getUserDetails(userID);
}
catch (err) {}
});
if (userDetails === null) {
// Couldn't get user details from personal link
domCustomize.innerHTML = "<p>❌ Unable to customize</p>";
return;
}
const samples = document.querySelectorAll("code, pre");
for (const sample of samples) {
sample.innerHTML = sample.innerHTML.replaceAll("https://frogtab.com/", escapeHTML(serverBase));
sample.innerHTML = sample.innerHTML.replaceAll("00ee411a-5702-4c8d-ac35-74cf7376acb7", escapeHTML(userID));
sample.innerHTML = sample.innerHTML.replaceAll("Frogtab (4c0-c38)", escapeHTML(userDetails.pgpPublicKeyID));
}
domCustomize.innerHTML = `<p>👍 Customized for personal link with ID <code>${escapeHTML(userID)}</code></p>`;
domDemoInfo.innerHTML = " (not customized for your personal link)";
});
</script>
Explains how to send tasks to Frogtab from a terminal instead of using your personal link2024-10-18T12:12:00+00:00https://maybecoding.bearblog.dev/frogtab-dev-plan-october-2024/Frogtab dev plan October 20242024-10-18T12:43:59.578065+00:00maybecodinghidden<p>I'm planning to release several improvements later this month:</p>
<ul>
<li><p><strong>Send to Frogtab</strong> – I'm removing <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fsend" target='_blank'>Send to Frogtab</a> from the menu. The main purpose of Send to Frogtab is to enable you to capture tasks without revealing your inbox, so it doesn't really make sense to open Send to Frogtab via the menu.</p>
<p>Also, for a first-time user exploring the menu and clicking through to Send to Frogtab, there's no obvious reason for Send to Frogtab to exist. To summarize, it's a niche feature, and I don't think it belongs in the menu.</p>
</li>
<li><p><strong>Achievements</strong> – I'm reorganizing the help page so that the Achievements feature is explained in a more approachable way. Currently, the docs for Achievements bury the simple method of completing tasks (<strong>⌘+K</strong> or <strong>Ctrl+K</strong>) inside a discussion of the more complicated method (text-based commands that begin with "x").</p>
<p>I'm rewriting the "Tracking your completed tasks" topic so that it leads with the simple method and I'm moving the more complicated method to a new topic called "Completion commands".</p>
<p>As well as making Achievements more approachable, I want to make it more discoverable. So I'm giving Achievements a spot in the menu, regardless of whether the feature is enabled. Currently, Achievements only appears in the menu if the feature is enabled.</p>
</li>
<li><p><strong>Keyboard navigation</strong> – Keyboard support in Frogtab has always been a mixed bag. There are keyboard shortcuts for most task-management actions, but many navigation actions (e.g., opening the menu) require a mouse. I want to do better on accessibility, and keyboard navigation feels like a great place to start. I'm making sure that every part of Frogtab can be used without a mouse.</p>
</li>
</ul>
<p>Other things I'm working on this month:</p>
<ul>
<li><p>The next version of Frogtab Local will include a way to stop Frogtab Local via your browser. This will be useful if you've set Frogtab Local to run at startup and want to stop it for some reason.</p>
</li>
<li><p>I'm working on a blog post that will explain how to send tasks to Frogtab via a terminal instead of your personal link. Look out for that later in October 🎃</p>
</li>
</ul>
A summary of what I'm working on in October 20242024-10-10T06:59:00+00:00https://maybecoding.bearblog.dev/frogtab-wrap-up-july-2024/Frogtab wrap-up July 20242024-07-30T22:39:11.940098+00:00maybecodinghidden<p>Released:</p>
<ul>
<li><p>On Linux, you can install Frogtab Local as a snap instead of installing it from source. See <a href="proxy.php?url=https%3A%2F%2Fsnapcraft.io%2Ffrogtab" target='_blank'>Frogtab Local in the Snap Store</a> or read my <a href="proxy.php?url=https%3A%2F%2Fmaybecoding.bearblog.dev%2Frunning-the-frogtab-task-manager-on-ubuntu%2F">full explanation of how to set up Frogtab Local on Ubuntu</a></p>
</li>
<li><p>Support for self-hosting Frogtab on your own server, which enables you to use your own server for the Frogtab front-end and for personal links. See the <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Ffrogtab%23self-hosting-frogtab" target='_blank'>instructions in GitHub</a></p>
</li>
<li><p>Support for configuring Frogtab Local to use your self-hosted server for personal links (instead of frogtab.com). To configure Frogtab Local, set the <code>registration_server</code> variable in <em>config.py</em> to the URL of your server</p>
</li>
</ul>
<p>In development:</p>
<ul>
<li>Support for self-hosting Frogtab via a Docker container. It's working on my computer, but I need to do more testing before I'm happy to call this ready. You can check out progress at <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Fspike-frogtab-docker" target='_blank'>spike-frogtab-docker</a>. This is my first time using Docker in a project, so any tips/feedback would be very helpful!</li>
</ul>
A summary of development work on the Frogtab task manager at the end of July 20242024-07-30T22:39:11.934628+00:00https://maybecoding.bearblog.dev/frogtab-dev-plan-july-2024/Frogtab dev plan July 20242024-07-22T22:20:07.436152+00:00maybecodinghidden<p>Things I'd like to do by the end of this month:</p>
<ol>
<li><p>Write a non-technical post about how to install <a href="proxy.php?url=https%3A%2F%2Fsnapcraft.io%2Ffrogtab" target='_blank'>Frogtab Local</a> on Ubuntu and have it run at login</p>
</li>
<li><p>Frogtab Local v1.05:</p>
<ul>
<li><p>Add an option in <em>config.py</em> that specifies the registration server. Right now, you need to modify a bunch of HTML files if you want to point to a self-hosted registration server</p>
</li>
<li><p>Add doc comments in <em>config.py</em> about the various options</p>
</li>
<li><p>Update the <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Ffrogtab%2Fblob%2Fmain%2Flocal%2FREADME.md" target='_blank'>README</a> to explain how to specify the registration server using <em>config.py</em>. Add similar instructions to the docs for the Linux snap</p>
</li>
<li><p>Link to the Ubuntu tutorial from the docs for the Linux snap</p>
</li>
<li><p>Figure out how/where to include a changelog for the Linux snap</p>
</li>
</ul>
</li>
<li><p>Experiment with dockerizing the self-hostable server and report back here 📝</p>
</li>
</ol>
Notes to self2024-07-22T22:05:00+00:00https://maybecoding.bearblog.dev/frogtab-update-installable-and-self-hostable-versions/Frogtab update: Installable and self-hostable versions2024-07-19T09:54:20.215920+00:00maybecodinghidden<p>A quick post to share some things that I've been working on recently:</p>
<ul>
<li><p>I wanted automatic backups to work in all browsers - currently only Chromium-based browsers support the necessary APIs. So I made a version of Frogtab that runs on localhost and lets me control how data is backed up. I'm calling it "Frogtab Local" 🐸</p>
<p>If you use Linux, you can <a href="proxy.php?url=https%3A%2F%2Fsnapcraft.io%2Ffrogtab" target='_blank'>install Frogtab Local from the Snap Store</a>. Otherwise, you can <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Ffrogtab%2Freleases" target='_blank'>download and run the latest release</a>.</p>
<p>Frogtab Local doesn't include a registration server. So if you register for a personal link, your device will still be registered with frogtab.com. If you'd like to self-host the entirety of Frogtab, read on…</p>
</li>
<li><p>I reorganized my code to make it easier to self-host a copy of frogtab.com. If you're interested in setting up your own instance of Frogtab, including a registration server, take a look at the <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fdwilding%2Ffrogtab%23self-hosting-frogtab" target='_blank'>instructions in GitHub</a>.</p>
</li>
</ul>
<p>If you run into any issues, please <a href="proxy.php?url=https%3A%2F%2Fmaybecoding.bearblog.dev%2F">let me know</a> - thanks!</p>
Frogtab is a browser-based task manager I'm building to help keep me focused on my day-to-day priorities. You can now run Frogtab on your computer or self-host Frogtab on your own server.2024-07-19T09:52:00+00:00https://maybecoding.bearblog.dev/scenes-from-beijing/Scenes from Beijing2024-05-31T06:01:07.530513+00:00maybecodinghidden<p>Some of my favorite 北京 scenes from the past year</p>
<p><strong>Taoranting Park, June</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717131369-0.jpeg" alt="maybecoding" /></p>
<p><strong>Qianmen, August</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717131511-0.jpeg" alt="maybecoding" /></p>
<p><strong>World Grape Expo Garden, August</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717131738-0.jpeg" alt="maybecoding" /></p>
<p><strong>Nanhaizi Park, September</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717131826-0.jpeg" alt="maybecoding" /></p>
<p><strong>Tongrentang, September</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717132059-0.jpeg" alt="maybecoding" /></p>
<p><strong>Wangfujing, October</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134156-0.jpeg" alt="maybecoding" /></p>
<p><strong>Testing booths - Olympic Forest Park, October</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134220-0.jpeg" alt="maybecoding" /></p>
<p><strong>Capital Airport, December</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134312-0.jpeg" alt="maybecoding" /></p>
<p><strong>Miaoying Temple, January</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134406-0.jpeg" alt="maybecoding" /></p>
<p><strong>Liangma River, January</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134479-0.jpeg" alt="maybecoding" /></p>
<p><strong>Outer City Watchtower (SE corner), April</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134803-0.jpeg" alt="maybecoding" /></p>
<p><strong>En route to <a href="proxy.php?url=https%3A%2F%2Fmaybecoding.bearblog.dev%2Fexploring-beijing-with-photos%2F">Lugouqiao</a> - Fengtai Railway Station, May</strong>
<img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1717134916-0.jpeg" alt="maybecoding" /></p>
2024-05-31T06:00:08.081479+00:00https://maybecoding.bearblog.dev/exploring-beijing-with-photos/Exploring Beijing (with photos)2024-05-22T04:34:34.530571+00:00maybecodinghidden<p>One afternoon last week I decided to visit Lugouqiao, aka Marco Polo Bridge. You can read about the bridge and its significance here:</p>
<ul>
<li><a href="proxy.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FMarco_Polo_Bridge" target='_blank'>https://en.wikipedia.org/wiki/Marco_Polo_Bridge</a></li>
<li><a href="proxy.php?url=https%3A%2F%2Fherschelian.wordpress.com%2F2012%2F06%2F24%2Flugouqiao-the-marco-polo-bridge%2F" target='_blank'>https://herschelian.wordpress.com/2012/06/24/lugouqiao-the-marco-polo-bridge/</a></li>
</ul>
<p>The subway has expanded in recent years, making the bridge quite easy to reach. It's located at the end of Line 16 (Wanpingcheng), which I picked up at Fengtai railway station.</p>
<p>The bridge:</p>
<p><img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1716351873-0.jpeg" alt="maybecoding" /></p>
<p>And its surroundings:</p>
<p><img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1716352358-0.jpeg" alt="maybecoding" /></p>
<p><img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1716352380-0.jpeg" alt="maybecoding" /></p>
<p>After spending some time at the bridge, I decided that I'd cycle to Line 14 for the return leg.</p>
<p>The final station of Line 14 (Zhangguozhuang):</p>
<p><img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1716352401-0.jpeg" alt="maybecoding" /></p>
<p>I spotted a hill just beyond the station and wondered whether it would provide an impressive view of the city. Well… it turns out the hill isn't very high, despite what my legs experienced… but the view of the station was interesting:</p>
<p><img src="proxy.php?url=https%3A%2F%2Fbear-images.sfo2.cdn.digitaloceanspaces.com%2Fmaybecoding-1716351980-0.jpeg" alt="maybecoding" /></p>
<p>And if you look closely, you can see the <a href="proxy.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCentral_Radio_%2526_TV_Tower" target='_blank'>TV Tower</a> in the far distance!</p>
2024-05-22T04:26:27.085454+00:00https://maybecoding.bearblog.dev/frogtab-update-track-your-completed-tasks/Frogtab update: Track your completed tasks!2024-04-30T02:57:01.016280+00:00maybecodinghidden<p>One of the most enjoyable things about building <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com" target='_blank'>Frogtab</a> has been the opportunity to develop features that make Frogtab more satisfying for other people to use.</p>
<p>Over the past few months, I've been working with my friend to make it possible to track completed tasks in Frogtab. It's taken some back-and-forth to get the feature working well - I wanted a solution that would honor the text-based nature of Frogtab - so I'm very pleased to report that the feature is now live!</p>
<p>To enable the feature, go to <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fhelp%23tracking-your-completed-tasks" target='_blank'>Tracking your completed tasks</a> in the docs, then click <strong>Enable Achievements</strong>.</p>
<p>After you've enabled the feature, you can mark a task as complete by writing "x " in front of the task and pressing Enter. This approach was inspired by the <a href="proxy.php?url=http%3A%2F%2Ftodotxt.org%2F" target='_blank'>todo.txt</a> format for text-based task management. Your completed tasks will show up on the <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fachievements" target='_blank'>Achievements</a> page.</p>
<p>Check out this quick demo and <a href="proxy.php?url=https%3A%2F%2Ffrogtab.com%2Fhelp%23tracking-your-completed-tasks" target='_blank'>the docs</a> to learn more - and please let me know if you have any feedback!</p>
<video width="720" height="704" controls>
<source src="proxy.php?url=https%3A%2F%2Fdwilding.github.io%2Fmaybecoding%2Fcompleted-tasks.webm" type="video/webm">
</video>
Frogtab is a browser-based task manager I'm building to help keep me focused on my day-to-day priorities. I've recently added a new feature that enables you to track your completed tasks.2024-04-30T02:55:27.703379+00:00