<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[LnBlog]]></title>
    <link>https://lnblog.skepticats.com/</link>
    <description><![CDATA[A flexible file-base weblog]]></description>
    <lastBuildDate>2026-04-05T00:56:51+00:00</lastBuildDate>
    <managingEditor>pageer@skepticats.com (Peter Geer)</managingEditor>
    <language>en-US</language>
    <generator>https://lnblog.skepticats.com/?v=2.3.3</generator>
    <item>
      <title><![CDATA[LnBlog 2.3.3 - No Need for Updates]]></title>
      <link>https://lnblog.skepticats.com/entries/2026/04/lnblog-2-3-3-no-need-for-updates.php</link>
      <description><![CDATA[<p>Hey, look, there's another release!&nbsp; And it's only been two and a half years!&nbsp; You can grab it from the <a href="https://lnblog.skepticats.com/content/download/">download page</a>.</p>
<p>This release was prompted by a <a href="https://www.openbugbounty.org/reports/4497064/">report of a potential cross-site scripting vulnerability</a>.&nbsp; It was a legitimate bug, although I'm not sure how easy it would be to exploit.&nbsp; Still, it seemed worth fixing.&nbsp; That took me all of five minutes.&nbsp;&nbsp;</p>
<p>The next two or three hours of this effort was updating dependencies that had vulnerabilities (and breaking changes), fixing the Github pipeline, and then integrating things into my dev branch.&nbsp; That's what happens when you don't update anything for two and a half years: Things work great until you need to touch <em>literally anything</em>.</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Sun, 05 Apr 2026 00:56:51 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2026/04/lnblog-2-3-3-no-need-for-updates.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2026/04/04_2056/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.3.2 - No Need for Ports]]></title>
      <link>https://lnblog.skepticats.com/entries/2023/10/lnblog-2-3-2-no-need-for-ports.php</link>
      <description><![CDATA[<p>A new patch release is up.&nbsp; You can get it from the <a href="https://lnblog.skepticats.com/content/download/">download page</a>.</p>
<p>This one <a href="https://github.com/pageer/lnblog/issues/54">fixes a small but significant bug</a>, reported by <a href="https://github.com/atomGit">atomGit</a> via Github.&nbsp; There was an issue with the CSRF protection code where it did not properly account for URLs with a port in them.&nbsp; So if you tried to run LnBlog with a PHP test server on a non-standard port, the initial setup page would return a 400 Bad Request error.&nbsp; Sadly, there was nothing particularly subtle or interesting about this bug - it's just something I didn't account for.&nbsp; The CSRF code was blissfully unaware that a URL or hostname could contain a port.&nbsp; This led to trying to compare an HTTP_HOST header with a port in it, e.g. <code>localhost:8081</code> to a call to <code>parse_url($_SERVER['HTTP_ORIGIN'], PHP_URL_HOST)</code>, which explicitly discards the port.</p>
<p>While I was at it, I also updated the defaults for the userdata path when the LnBlog directory is the server's document root.&nbsp; This is because the normal default is to have userdata and LnBlog in the same directory, but right now LnBlog assumes that the userdata directory will be web-accessible.&nbsp; So in that case, the default is now to put userdata inside of LnBlog, like in the "good ol' days".</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Sun, 08 Oct 2023 22:49:38 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2023/10/lnblog-2-3-2-no-need-for-ports.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2023/10/08_1849/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.3.1 - No need for pagination]]></title>
      <link>https://lnblog.skepticats.com/entries/2022/10/lnblog-2-3-1-no-need-for-pagination.php</link>
      <description><![CDATA[<p>Welp, it's time for a patch release.&nbsp; This is a minor one, though.&nbsp; It only fixes two small, but highly visible and annoying bugs:</p>
<ol>
<li>The internal version number was wrong.&nbsp; This was version 2.3.0, but internally, LnBlog thought it was still 2.2.0.&nbsp; That's because I forgot to update the version number in the config file.&nbsp; This is not the first time I've done this, sadly, so I added a step to the build script to check that the build version matches the config file, which should keep this from happening again.</li>
<li>The move of the entry-fetching code from the main Blog domain object to a repository object broke pagination because of the way the "has more entries" check worked.&nbsp; That meant that the next/previous links never showed up at the bottom of the page, which was annoying.</li>
</ol>
<p>That's it - nothing earth shattering here.&nbsp; You can grab the new version from the <a href="https://lnblog.skepticats.com/content/download/">download page</a>.</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Fri, 21 Oct 2022 15:50:46 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2022/10/lnblog-2-3-1-no-need-for-pagination.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2022/10/21_1150/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.3.0 - No Need for RSS]]></title>
      <link>https://lnblog.skepticats.com/entries/2022/09/lnblog-2-3-0-no-need-for-rss.php</link>
      <description><![CDATA[<p>It's that time again - time for a new LnBlog release!&nbsp; I'm averaging about one a year at this point, which isn't too bad considering how little time I get to work on it. &nbsp;As usual, you can grab it from the <a href="https://lnblog.skepticats.com/content/download/">download page</a> or from the <a href="https://github.com/pageer/lnblog">GitHub page</a>.</p>
<p>Anyway, this release comes with several new features and some caveats.&nbsp; While perhaps not earth-shattering, some of the changes are fairly substantial.&nbsp;&nbsp;</p>
<p>But first, a compatibility warning:&nbsp;<strong>PHP versions prior to 7.4 are no longer supported</strong>.&nbsp; That's right, we're moving into the "modern" era and making PHP 7.4 or greater a hard dependency.&nbsp; So if you're still on 7.3, sorry, but the new release won't work.&nbsp; But on the other hand, 7.3 has also reached end-of-life and no longer even gets security updates, so you probably shouldn't be running it anyway.&nbsp; Also, updating to 7.4 means I can start using more fancy new language features.</p>
<p>As a side-note, the above also means that if you installed from source, or want to do an in-place upgrade by pulling from the Git repo, you'll need to do a "composer install --no-dev" to update the dependencies.</p>
<p>Anyway, on to the changes. One of the big ones is that the RSS support has been completely revamped.&nbsp; The old plugins were, frankly, crappy and half-baked, and had lain mostly untouched for over a decade.&nbsp; So I ripped them out and replaced them with a new, unified RssManagement plugin.&nbsp; In the process, I pulled all the actual feed generation logic out of plugins and into the core.&nbsp; This allows us to leverage that to support additional export formats.&nbsp; So in addition to the WordPress export that we added in the last release, we can now do all the formats that we generate feeds in.&nbsp; This also made it much easier to add new feed formats, so in addition to RSS 1.0 and RSS 2.0, <strong>we can now create Atom feeds</strong> as well!</p>
<p style="text-align: center;"><a href="2022-09-16T17-41-47-162Z.png"><img src="https://lnblog.skepticats.com/entries/2022/09/16_1400/2022-09-16T17-41-47-162Z-small.png" alt="2022-09-16T17-41-47-162Z-small.png" /></a><br />The new RssManagement plugin settings.</p>
<p>Note that because we now have a new RSS plugin, you'll probably need to reconfigure the RssManagement plugin to match any customizations you had previously.&nbsp; However, this time the config is all in one place.&nbsp; So as you can above, there is now one config screen to choose what feed types to generate, where they appear, and what the sidebar panel looks like.&nbsp; There are also some links to manually purge and recreate feed files (caveat: the UI needs a little work...).&nbsp; These are useful if you decide to disable a particular format or want to migrate from RSS to Atom.</p>
<p>In addition to this, there are also some improvements to the post editor.&nbsp; Instead of just supplying a couple of presets, you now have the ability to specify a full config object for TinyMCE.&nbsp; That means you can customize the menus, toolbars, etc. to your liking.&nbsp; (Of course, you'll need to look at the TinyMCE documentation to figure out the settings you want, but at least you can change them.)</p>
<p>We've also got some new changes to make dealing with post attachments easier.&nbsp; The first is that you can now upload an attachment from the clipboard.&nbsp; So you can copy an image from the web and paste it into the editor page with ctrl+V (or cmd+V if you're one of <em>those</em> people).&nbsp; This will now actually upload the clipboard data and create an image attachment (note: you'll have to click outside of the actual editor box, otherwise TinyMCE will intercept the past).&nbsp; We've also added controls next to the listed attachments that will insert links directly in the editor.&nbsp; So once the attachment is uploaded, all you need to do to insert it at the cursor location is click the icon next to it in the attachment list.&nbsp; When combined with the auto-scaling feature, I find that this takes nearly all of the friction out of adding image to your posts.&nbsp; But that's just me.</p>
<p>Anyway, here's the official list of issues resolved in this release.&nbsp; Enjoy!</p>
<ul>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/47" data-error-text="Failed to load title" data-id="1000997331" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/47" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/47/hovercard">#47</a> Improve RSS support (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/44" data-error-text="Failed to load title" data-id="974141232" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/44" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/44/hovercard">#44</a> Make TinyMCE editor configurable (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/43" data-error-text="Failed to load title" data-id="952076671" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/43" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/43/hovercard">#43</a> Better display of publication queue (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/42" data-error-text="Failed to load title" data-id="952075646" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/42" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/42/hovercard">#42</a>&nbsp;Support for "paste to upload" (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/39" data-error-text="Failed to load title" data-id="937448409" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/39" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/39/hovercard">#39</a>&nbsp;Encapsulation for controller logic (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/38" data-error-text="Failed to load title" data-id="937425009" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/38" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/38/hovercard">#38</a>&nbsp;Improve image quality for auto-scaling (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/37" data-error-text="Failed to load title" data-id="936258498" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/37" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/37/hovercard">#37</a>&nbsp;Move LBCode editor markup to a plugin (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/36" data-error-text="Failed to load title" data-id="936257845" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/36" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/36/hovercard">#36</a>&nbsp;Insert attachment links in editor (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/35" data-error-text="Failed to load title" data-id="936256404" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/35" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/35/hovercard">#35</a>&nbsp;Add cache busting for JS/CSS files (bug)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/33" data-error-text="Failed to load title" data-id="925289062" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/33" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/33/hovercard">#33</a>&nbsp;Manage files for profiles (enhancement)</li>
<li><a class="issue-link js-issue-link" href="https://github.com/pageer/lnblog/issues/32" data-error-text="Failed to load title" data-id="925288405" data-permission-text="Title is private" data-url="https://github.com/pageer/lnblog/issues/32" data-hovercard-type="issue" data-hovercard-url="/pageer/lnblog/issues/32/hovercard">#32</a>&nbsp;TinyMCE not loading on generic file editor (bug)</li>
</ul>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Fri, 16 Sep 2022 18:00:23 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2022/09/lnblog-2-3-0-no-need-for-rss.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2022/09/16_1400/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.2.0 - No Need to Start Over]]></title>
      <link>https://lnblog.skepticats.com/entries/2021/06/lnblog-2-2-0-no-need-to-start-over.php</link>
      <description><![CDATA[<p>It's here!&nbsp; We have a new LnBlog release, not quite a year after the last one.&nbsp; By current standards, that's fast and furious.</p>
<p>Anyway, this release actually has some new and interesting (at least to me) features.&nbsp; &nbsp;You can grab a copy from the <a href="https://lnblog.skepticats.com/download/content/">download page</a> or the <a href="https://github.com/pageer/lnblog/releases">GitHub release page</a>.&nbsp; &nbsp; Note that this release will require an upgrade of any existing blogs.&nbsp; Also note that this release changes the way URLs are calculated, so you'll need to visit the admin page to go through the initial setup again.&nbsp; If your blogs don't show up after that, you may need to re-register them from the admin page.</p>
<p>Now, on to the changes in this version.&nbsp; And there's actually quite a few of them - and some pretty substantial ones, too.&nbsp; Not bad for one guy developing it on an extremely-part-time basis.&nbsp; In fact, the app is starting to look and work fairly well, if I do say so myself.&nbsp; But anyway, here's what you need to know:</p>
<ul>
<li>First, I finally fixed the stupid, ugly layout of the various forms.&nbsp; They now use a standard vertical layout rather than the old, uneven, "I'm too lazy to style this" one.&nbsp; I know this doesn't sound like a big deal, and it really isn't (I mean, I did it in like an hour), but it's been a long-standing issue and it made the entire app look crappy.</li>
<li>Another small but noteworthy change, the "DisableComments" plugin is now configured to disable TrackBacks on all entries by default.&nbsp; Related to this, disabling TrackBacks on an entry will now disable all TrackBack-related UI elements.&nbsp; Of course, you can still change that setting in the plugin configuration, but I don't even <em>remember</em> the last time I saw mention of TrackBacks on a blog, so I figured it was time to turn that stuff off.</li>
<li>Now the big one - import from WordPress!&nbsp; This feature allows you to take a WordPress extended RSS export file and import it into LnBlog.&nbsp; You can either import the data into an existing blog, or create a new one based on the export file.&nbsp; This is the first iteration, and it has some limitations, but it works.&nbsp; The biggest limitations are that the import process will <em>not</em> import media items and it will not touch the contents of the posts - everything is treated as raw HTML, so you're on your own as far as any WordPress markup magic.&nbsp; (Note that if you keep the media files for your WordPress installation at the old URL, they should still work.&nbsp; Alternatively, you can set up a mapping on your web server or just edit the URLs in the export file before you do the import.)&nbsp; However, the process will import pages as LnBlog articles, published posts, draft posts, comments, and pingbacks.&nbsp; You also have the option to import user accounts for any username in the export that doesn't already exist in LnBlog.&nbsp; The import will attempt to map the WordPress usernames to LnBlog usernames and default to the blog owner if the username can't be found.</li>
<li>Here's one you'll definitely notice - the addition of the <a href="http://aehlke.github.io/tag-it/">Tag-It</a> widget.&nbsp; This is now used in a couple of places, but the most obvious is the entry editor.&nbsp; So instead of the text-box with the ghetto JS drop-down for selecting tags, we have an actual decent-looking widget.</li>
<li>Another noticeable feature is an auto-scaler for uploaded images.&nbsp; In the collapsible file list for the upload box, we now have a little icon next to images that you can click to auto-generate a scaled version.&nbsp; There are only a few pre-set choices for size, but it's a convenient way to create thumbnails or scale down high-def pictures.</li>
<li>Now the under-the-hood changes.&nbsp; First, blog data upgrades can now be done from the command line.&nbsp; Just run <code>php cli.php --upgrade</code> to upgrade all your blogs in one shot, or supply a blog ID to do just one.</li>
<li>Second, third-party JavaScript libraries have moved from whatever random CDN I could find to local files.&nbsp; These are collected and put in the "third-party" directory by the build process.&nbsp; Part of the blog upgrade process now includes making sure each blog has a references to these files.&nbsp; (By this, I just mean that the upgrade gets around cross-domain JS issues by copying or symlinking this directory into any blog that's on a different domain than the LnBlog directory.)</li>
<li>Lastly, and most importantly, I completely changed the way LnBlog tries to deal with path and URL mapping.&nbsp; The old version used some hair-brained and convoluted rules to try to auto-detect what path mapped to what URL.&nbsp; This was fine...when it worked.&nbsp; The problem was that it didn't work often enough, and when it failed, the failures were opaque and hard to diagnose.&nbsp; So instead of that, LnBlog now requires you to explicitly tell it what path and URL each blog will have.&nbsp; It also requires you to explicitly tell it the path and URL of the LnBlog installation and your userdata folder.&nbsp; Of course, the UI will present you with reasonable defaults that you can edit if desired.&nbsp; For blogs, it will even update these when you change the blog ID you enter (note: the "blog ID" is just a string identifying the blog - usually, it's just the name of the blog's folder).&nbsp; I know this is a little bit of a pain, in that it adds some extra boxes to think about, but it shouldn't be too bad.&nbsp; And it makes the URL resolution much more reliable.</li>
<li>One last note: Because of the above change to the URL and directory mapping, LnBlog will now generate a <code>pathconfig.php</code> file&nbsp;<em>inside</em> the LnBlog install directory.&nbsp; So when upgrading, you may have to copy this file to the new version.&nbsp; (Yes, I know this violates the whole "put everything in userdata" rule I had, but since it now stores the path to userdata, that obviously wasn't going to work.)&nbsp; This file now stores the paths and URLs to your LnBlog install, your userdata folder, and each of your blogs.&nbsp; However, that's <em>all</em> it stores.&nbsp; So this file is critical to LnBlog working, but if anything happens to this file, there's nothing in it that can't be recreated through the admin page UI.&nbsp; Just delete the broken file, go to the admin page to regenerate the basics, and then re-register each of your blogs.</li>
</ul>
<p>Here's the list of GitHub issues closed in this release:</p>
<ul>
<li>Cannot edit URL of current blog (<a href="https://github.com/pageer/lnblog/issues/14">#14</a>)</li>
<li>Better subdomain resolution (<a href="https://github.com/pageer/lnblog/issues/15">#15</a>)</li>
<li>Auto sitemap broken for subdomains (<a href="https://github.com/pageer/lnblog/issues/17">#17</a>)</li>
<li>RSS links shown when plugin disabled (<a href="https://github.com/pageer/lnblog/issues/18">#18</a>)</li>
<li>Add tag widget (<a href="https://github.com/pageer/lnblog/issues/19">#19</a>)</li>
<li>Include files for third-party JavaScript (<a href="https://github.com/pageer/lnblog/issues/20">#20</a>)</li>
<li>Import from WordPress (<a href="https://github.com/pageer/lnblog/issues/25">#25</a>)</li>
<li>Comment delete link broken (<a href="https://github.com/pageer/lnblog/issues/26">#26</a>)</li>
<li>Auto-scale feature (<a href="https://github.com/pageer/lnblog/issues/27">#27</a>)</li>
<li>Upgrade from command-line (<a href="https://github.com/pageer/lnblog/issues/29">#29</a>)</li>
</ul>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Sun, 13 Jun 2021 01:28:23 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <category><![CDATA[Features]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2021/06/lnblog-2-2-0-no-need-to-start-over.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2021/06/12_2128/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.1.0 - No Need for a Crappy Mobile Experience]]></title>
      <link>https://lnblog.skepticats.com/entries/2020/07/LnBlog_2_1_0_-_No_Need_for_a_Crappy_Mobile_Experience.php</link>
      <description><![CDATA[<p>Hot on the heels of <a href="../../entries/2019/02/LnBlog_2_0_0_-_No_Need_for_Regularity.php">LnBlog 2.0.0 a mere year and five months ago</a>, release 2.1.0 is here!&nbsp; This one includes a bunch of quality-of-life and usability improvements, including some basic support for responsive layout, editor improvements, and a less crappy interface to change plugin load order (which tool me like half an hour, so I'm not sure why I didn't do that years ago).&nbsp; This release also includes entry pagination for the main blog page which, again, didn't take that much work and is a basic feature I should have implemented years ago.</p>
<p>Another new feature is the introduction of a task queue.&nbsp; This is a glorified way of referring to a command-line script that reads a JSON file and does stuff based on what it contains.&nbsp; The idea is that you can just run this via a cron job or similar task scheduling system.&nbsp; Right now it's only used for scheduled publication, but it will be useful in the future for other things.&nbsp; Configuring it as a cron job is currently optional, but highly recommended (if you don't, the back-end of the script will just run on every request to the main page).&nbsp; To set up the "cron" functionality, create an entry in your crontab (or wherever you create your cron entries) that runs: php /path/to/lnblog/cli.php --cron.&nbsp; Then add the line <code>USE_CRON_SCRIPT = true</code> to your <code>userdata/userconfig.cfg</code> file.&nbsp; (Note: if you prefer to use userconfig.php, you can add the constant definition there instead.)</p>
<p>We also have several security enhancements in this release, including login attempt throttling and CSRF protection.&nbsp; Again, both long overdue.&nbsp; The list of tickets with Github links is included below.&nbsp; There's probably a bunch of other undocumented stuff I fixed and forgot about too.</p>
<p>You can grab the zip file from the <a href="../../content/download/">download page</a>.&nbsp; As usual, the upgrade process is to just to move the old directory, extract the zip file, and copy your userdata (and any other custom files) into the new directory.&nbsp; Or, if you moved userdata up one level (which you should), just move the old directory and extract the new one.&nbsp; I think we're close to the point where nothing that you should care about is stored in the actual application directory, but I can't swear to it.</p>
<p>Also, you'll need to run a "blog upgrade" for each of your blogs from the admin page.&nbsp; As always, it's wise to backup all your data before upgrading.&nbsp; Remember, there's no warranty on this - if it breaks, you get to keep both parts.</p>
<p>Anywho, here's the ticket list.</p>
<ul>
<li>Responsive layout (<a href="https://github.com/pageer/lnblog/issues/11">enhancement #11</a>)</li>
<li>Drag-and-drop plugin loading (<a href="https://github.com/pageer/lnblog/issues/4">enhancement #4</a>)</li>
<li>Auto-save for post editor (<a href="https://github.com/pageer/lnblog/issues/1">enhancement #1</a>)</li>
<li>Paginated browsing (<a href="https://github.com/pageer/lnblog/issues/5">enhancement #5</a>)</li>
<li>Asynchronous task runner (<a href="https://github.com/pageer/lnblog/issues/6">enhancement #6</a>)</li>
<li>Deprecate file writing config (<a href="https://github.com/pageer/lnblog/issues/13">enhancement #13</a>)</li>
<li>CSRF protection (<a href="https://github.com/pageer/lnblog/issues/2">enhancement #2</a>)</li>
<li>Login attempt throttling (<a href="https://github.com/pageer/lnblog/issues/3">enhancement #3</a>)</li>
<li>Make IP locking of session tokens optional (<a href="https://github.com/pageer/lnblog/issues/10">enhancement #10</a>)</li>
<li>Password reset feature (<a href="https://github.com/pageer/lnblog/issues/9">enhancement #9</a>)</li>
<li>Image and other links for drafts don't work in TinyMCE (<a href="https://github.com/pageer/lnblog/issues/12">bug #12</a>)</li>
<li>Some file editor links don't work (<a href="https://github.com/pageer/lnblog/issues/8">bug #8</a>)</li>
</ul>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Sat, 04 Jul 2020 19:26:55 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2020/07/LnBlog_2_1_0_-_No_Need_for_a_Crappy_Mobile_Experience.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2020/07/04_1526/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 2.0.0 - No Need for Regularity]]></title>
      <link>https://lnblog.skepticats.com/entries/2019/02/LnBlog_2_0_0_-_No_Need_for_Regularity.php</link>
      <description><![CDATA[<p>Wow, three and a half years since the last release.&nbsp; That's kind of a long time.&nbsp; But on the other hand, seeing how this was my very first PHP project (back in the PHP 4 days), and I've now been writing PHP professionally for over a decade, it's a small miracle that it still works at all.</p>
<p>Anyway, there have actually been quite a few changes since the last release, although many of them have been under the hood.&nbsp; Basically, I've been using LnBlog as a test bed to practice refactoring legacy code.&nbsp; So I've done a bunch of restructuring, adding unit tests, fixing bugs, and generally trying to simplify things.&nbsp; Among the bigger updates were removing most of the wrapper pages and reworking the post publication process.&nbsp; There's a lot still to do, but the code is gradually getting better.</p>
<p>Since this is a major version, there are some feature additions as well.&nbsp; Here's the full list of <a href="https://tracker.skepticats.com/lnblog/roadmap#roadmap_milestone_5">items in the milestone</a>, but the big ones are support for sending and receiving <a href="https://www.w3.org/TR/webmention/">Webmentions</a> (they show up as Pingbacks, which are essentially the same thing anyway) and support for listing and deleting files attached to blogs and entries.</p>
<p>Note that my justification for calling this version 2 is that I'm requiring a data upgrade for older blogs, like this one.&nbsp; So if you have entries with the old "current.htm" data files, the blog needs to be upgraded.&nbsp; (Note: I am probably the only person in the world to whom this applies.)&nbsp; This release adds support to the "blog upgrade" process on the admin page to migrate those files to the newer XML format.&nbsp; The next release will remove support for the old file formats.</p>
<p>So feel free to check it out.&nbsp; As usual, you can get the zip archive from the <a href="https://lnblog.skepticats.com/content/download/">download page</a>.&nbsp; If you're so inclined, you can also grab the source <a href="http://hg.skepticats.com/lnblog">directly from Mercurial</a>.&nbsp; You should be able to just drop it on your server, run <code>composer install</code>, and point a browser to the URL.</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Fri, 22 Feb 2019 04:42:57 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2019/02/LnBlog_2_0_0_-_No_Need_for_Regularity.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2019/02/21_2342/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 1.3.0 - No Need For Tenchi Muyo References]]></title>
      <link>https://lnblog.skepticats.com/entries/2015/08/LnBlog_1_3_0_-_No_Need_For_Tenchi_Muyo_References.php</link>
      <description><![CDATA[<p>Hey, look at that - another release!&nbsp; And just a little over a year since the previous one.&nbsp;</p>
<p>There's not really much to this.&nbsp; It's mostly under-the-hood improvements and cleanup, along with a few bug fixes.&nbsp; I also played around with the edit form and added support for writing posts in Markdown.&nbsp; But honestly, I just wanted to get a release out before trying to make bigger under-the-hood changes.&nbsp; I know, not very exciting, but I just didn't want too many changes piling up.</p>
<p>Anywho, the installable ZIP archive is on the <a href="https://lnblog.skepticats.com/content/download/">download page</a> and the list of changes is <a href="http://tracker.skepticats.com/lnblog/issues/find/saved_search/2/search/1">on the isue tracker</a>.&nbsp; The full source is available from the Mercurial repository linked from the project page.&nbsp; Please report any bugs.</p>
<p>Have fun!</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Thu, 13 Aug 2015 04:22:45 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2015/08/LnBlog_1_3_0_-_No_Need_For_Tenchi_Muyo_References.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2015/08/13_0022/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 1.2.0 - No Need to Give Up]]></title>
      <link>https://lnblog.skepticats.com/entries/2014/06/LnBlog_1_2_0_-_No_Need_to_Give_Up.php</link>
      <description><![CDATA[<p>Hey, look!&nbsp; It's another LnBlog release!&nbsp; And only two years since the last one!&nbsp; Boy, Pete sure knows how to keep those improvements coming, doesn't he?</p>
<p>So...yeah.&nbsp; Here's another release.&nbsp; Development isn't anywhere close to what I'd call "active", but I'm still using this thing for my own site and I'm still maintaining it.&nbsp; In fact, I'm still adding the occasional feature.</p>
<p>The most visible change is probably that the HTML editor plugin is now inclued and enabled by default.&nbsp; So instead of writing posts in a dialect of BBCode, you can just use the TinyMCE WYSIWYG HTML editor.&nbsp; Note that the editor is implemented as an update to the old TinyMCE plugin, served via the free CDN.&nbsp; So if you <em>want</em> to write your HTML in a text area, you can just disable the plugin.&nbsp; And if you want to write your posts in LBCode, you can still set the markup mode as normal and the editor will be disabled.&nbsp; There are also a bunch of other fixes in this release - the list of tickets is available <a href="http://tracker.skepticats.com/lnblog/issues/find/saved_search/1/search/1">here</a>.</p>
<p>You can grab a copy of the latest version from the <a href="https://lnblog.skepticats.com/entries/2014/06/08_2214/../../../../content/download/">traditional download page</a> (complete with checksums and GPG signature).&nbsp; The recent releases are also linked to from the <a href="http://tracker.skepticats.com/lnblog/releases">project issue tracker</a>, which has been switched from MantisBT to The Bug Genie and includes things like a "releases" page, planning pages, and so forth.&nbsp; You can also use the tracker to file reports for any bugs you happen to see.&nbsp; Anonymous reports are disabled due to spam, so you'll need to either create an account or log in via OpenID.</p>
<p>Enjoy!</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Mon, 09 Jun 2014 02:14:01 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2014/06/LnBlog_1_2_0_-_No_Need_to_Give_Up.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2014/06/08_2214/comments/</comments>
    </item>
    <item>
      <title><![CDATA[LnBlog 1.1 - No Need for Users]]></title>
      <link>https://lnblog.skepticats.com/entries/2012/02/LnBlog_1_1_-_No_Need_for_Users.php</link>
      <description><![CDATA[<p>Wow, it happened again!  Another release!</p><p>This version has a few minor feature additions.  Mostly just small stuff that I wanted.  Honestly, it&#039;s not like I have any users, so at this point it&#039;s really just releasing the source to code I&#039;m writing for myself.</p><p>Anyway, this release includes things like the ability to schedule a draft for future publication, the ability to set the main page of a blog to be an article (rather than having the list of articles as the main page), a new &quot;author bio&quot; sidebar plugin, and some various bug fixes.  You can see the changelog <a href="http://tracker.skepticats.com/changelog_page.php?version_id=5">here</a> and download the code <a href="https://lnblog.skepticats.com:443/content/download/">here</a>.</p>]]></description>
      <author><![CDATA[pageer@skepticats.com (Peter Geer)]]></author>
      <pubDate>Mon, 13 Feb 2012 00:16:21 +0000</pubDate>
      <category><![CDATA[Release]]></category>
      <guid isPermalink="true">https://lnblog.skepticats.com/entries/2012/02/LnBlog_1_1_-_No_Need_for_Users.php</guid>
      <comments>https://lnblog.skepticats.com/entries/2012/02/12_1916/comments/</comments>
    </item>
  </channel>
</rss>
