Self-hosted open source RSS readers

I think I’ve tried pretty much all of them. After the Google Reader-pocalypse, one of the primary requirements was that I could host it myself. Bonus points go to apps that have configurable keyboard navigation (“j” to open the next item must be distinct from “space” to just scroll down in the browser), as well as decent integration on mobile. Here’s a roundup of the ones I’ve tried.


Awesome platform, but way too big for someone looking to host their own personal solution. I tried upgrading it once and broke it. No idea what I did wrong or how to even figure out how why it wasn’t working. Seems very well designed for a massive multi-user operation, though, if you’ve got the Python chops to figure everything out. Newsblur website.


Commafeed is also a larger piece of software, but requires many fewer components than Newsblur. You need Java, some java tools like maven, a DB and of course more than a little bit of RAM.

TT-RSS (Tiny Tiny RSS)

Nice, but not as configurable as I’d like. This and the rest of the readers listed are written in PHP. There are three larger downsides to tt-rss:

  • I had quite a bit of trouble trying to get it to run from a subdirectory on Nginx. This is not necessarily specific to tt-rss, many apps are hard to config this way.
  • The primary developer is not friendly. He seems to take pleasure in ridiculing people in the support forums.
  • Although it’s supposed to be tiny, and the application part is, it requires Postgres or MySQL with InnoDB support. I would prefer something that uses less memory on the DB side, either MyISAM tables or better yet SQLite.


I ran SelfOSS for a while and liked it. However, I didn’t like the Android experience (what, no swipe?) so I went looking for something else.


I’m currently running FreshRSS and it’s really, really good. But I’m starting to get discouraged by a few nagging bugs and the lack of recent updates to the github repo.


I ran Miniflux for a short time a while back and my memory is a bit hazy on the experience (after a while RSS reader experiences tend to blend in with one another). I think I’m going to give it another shot. On his site, reading down the list of what Miniflux is not vs what it is makes me take heart. The developer is clearly trying to convey a no-BS attitude with his intentions for this app. One thing that gives me a spark of hope is that there was a new point release this month. I will update this post with any news with Miniflux.

Finding call-time pass by references in PHP.

While trying to move an older code base to a newer system and thus a newer version of PHP (5.3 -> 5.5), I knew that some of the code would need to be changed to avoid using some removed features. Specifically, I mean call-time pass by references. For those who don’t know, this is kind of a weird feature of earlier versions of PHP that allows one to call a function and pass any of the arguments by reference rather than the usual call by value if the caller prepends an argument variable with the “reference to” operator &.

So, to illustrate, normally this code won’t have side effects because of call by value:

However there will be side effects if the caller chooses pass by reference:

I thought a regex might be in order to find these guys and fix them:

but it was a naive idea, and this regex devolved (heh) to its current form before I realized I could just use the built-in linter to find the problem spots.


Scripted WordPress Upgrades

This command line interface for administering WordPress is called wp-cli. It’s pretty great.

I wrote a script to run from cron for updating a bunch of different WP installs in the same directory.

Fix for LFD error in syslog

I noticed that I was getting emails from LFD (part of the ConfigServer Firewall package) about failing to find some added check line it was sending to syslog.

The syslog message looks like this:
lfd[%d]: *SYSLOG CHECK* Failed to detect check line [%s] sent to SYSLOG

Of course I’ve replaced the pid with %d and the check string that it’s looking for with %s, since that will vary.

The fix is simple. Just like how you may need to adjust the path in /etc/csf/csf.conf to the real location of the ipset binary, you also may need to set where your SYSLOG messages are going. On an Ubuntu system, that means /var/log/syslog rather than /var/log/messages. Then just run csf -r to restart LFD with the new settings.

/var/log/messages appears in more than just csf.conf. Since /var/log/messages doesn’t exist on my system, I’m just going to symlink it to syslog and see what happens.

OK, I thought better of it and just modified csf.syslogs and csf.logfiles. I deleted that messages symlink in /var/log next. LFD was still being a little bitch after I restarted using csf -r, so I ran service lfd stop and then started it again.