Let me put the most important thing right here in the first paragraph: you can keep using the comics aggregator the same way you always have, though you may need to recreate the bookmark you use to read comics (I’ve tried to preserve compatibility, but I’m not 100% sure I succeeded in all cases). Having said that, I’ve just added a ton of new functionality to the aggregator, and I think many users will probably want to take advantage of it, so please read on to find out what’s new and different.
Up-front beg: if you appreciate the comics aggregator in general and/or these changes in particular, please consider making a donation. See the “Donate” button to the right. Several users of the aggregator send me monthly donations. Just think about how good it would make you feel to do that! 😉
If a donation isn’t in the cards, then please consider at least leaving a comment below or sending me email letting me know you appreciate the aggregator. Those of us who build and maintain things like this for free really appreciate hearing from people who benefit from them.
Introducing… user accounts!
You can create an account on the aggregator and save your reading preferences into your account, such that whenever you visit the aggregator’s bare URL (i.e., https://comics.kamens.us/) while you’re logged in, it’ll automatically display your saved list of comics for today with your settings (e.g., width and height). No more ugly bookmarks to save!
To save your settings, you just create your account, select and display the comics you want, then click the “Save selections to account” button below the comics list. I hope to have built this in such a way that you can create your account and log in, then visit your old, saved bookmark to bring up the comics you read, then click the “Save selections” button, so you don’t have to manually reselect everything. If this doesn’t work, email me your old, saved bookmark and I’ll try to figure out what I got wrong and fix it.
This user account functionality has all the behavior you’ve come to expect from web sites with user accounts: sign-up and login links in the upper right corner, profile editing and logout links when you’re logged in, and a forgot-your-password link on the login page.
However, it also has some behavior you may not be used to, because I care about privacy and I don’t want to collect any more data about people than I need to provide the functionality people want. Specifically, although you are welcome to use your email address as your username, I am not saving your email address in any database and I couldn’t email you even if I wanted to. Instead, I am saving a one-way hash of whatever you choose as your username, and using that to look you up during login. Your username is stored in a cookie in your browser when you’re logged in, which is how I can display it, but it is not stored anywhere on my server.
As for why you would want to use your email address as your username, there are two reasons:
- If you don’t, then there’s no secure way to do a password reset if you forget your password. If your username isn’t a working email address and you forget your password, you’ll have to abandon your old account and create a new one.
- If you are one of the folks who reads Comics Kingdom comics through my aggregator, you need to have an aggregator account whose username matches the email address on your Comics Kingdom account.
IMPORTANT NOTE: User accounts which are not used for 30 days are deleted automatically. This is necessary for both private reasons (I don’t want to save even the minimal information I’m saving about users for longer than necessary) and because I can’t afford to have the aggregator take up ever-increasing storage space. However, if your account gets deleted the data are backed up for a year before they’re permanently purged, so you can email me if you’d like me to restore your account.
A bunch of other functional changes
While user account support is the big news, I’ve also made a bunch of other functional changes which I hope will make the aggregator more pleasant and useful for everyone.
Better header and footer links
(You may have already noticed this change since I rolled it out earlier than the others described here.)
The links at the top and bottom of the page are now more useful and clearer. In particular:
- The middle link no longer says “Today” (which may not be true!) and now includes the year.
- The middle link will now always accurately reproduce what’s currently displayed in the browser. I.e., since the link text is a date, the link underneath it will always display comics for that date, even if it’s loaded on a different date.
- There’s now a “fast-forward” link, “>>”, on the right, which is a dynamic link for the current date, so you can save that link and then visit it again at a later date to view the comics for that date, if you prefer to keep doing that rather than saving your list in an account.
Improvements to the list of available comics
(, but there’s an additional wrinkle I just rolled out, so keep reading.)
Previously, the list of all available comics was only displayed if no comics were displayed; once you were on a page with comics, the list went away, and if you wanted it back, you had to add “list=include” to your URL. Now, the list is always included on the page, though if there are any comics displayed the list is hidden and you have to click a button to reveal it. (This is another change you may have already noticed since I rolled it out earlier.)
Because the list of comics ia always available, the “include/omit” selectors next to the title for each displayed comic have been removed. You can just check and uncheck things in the list if you want to change which comics are displayed.
The list also now has a “Select All” checkbox above it that you can check to select all of the comics in the list, or uncheck to clear all the selections.
Sharing links are working again and are improved
At some point the functionality for getting a shortened link to the currently selected comics broke because The Bitly API version that the aggregator was using went away. I’m not sure when this happened, but I think it may have been as long ago as 2020, so I’m a bit surprised that nobody complained to me about it. Having said that, it’s working now, and the links that it generates are now more robust and shareable, so I’ve changed the button text from “get short link” to “get sharing link”.
The sharing link that is generated and displayed when you click this button exactly reproduces the comics visible on the screen on which the generated link is displayed. In other words, if you are viewing comics, and you select or deselect some of them in the list, and then you click the button, the resulting sharing link reflects your changed selections, not the comics that were displayed immediately before you clicked the button.
Better image scaling and layout
Image scaling, i.e., the “width” and “height” parameters you can set at the bottom of the page (and in your saved user settings!) are now smarter. Rather than absolute sizes they are maximum sizes, so you can specify both width and height and each image will be proportionally scaled so that it doesn’t exceed those dimensions.
Note that previously when you didn’t specify width or height the aggregator enforced a maximum height of 400 pixels on some images. This is no longer the case, so if you find some of the comics to be too large, you may want to specify width and/or height to limit them.
The aggregator now precalculates the dimensions of all images displayed on the page and tells the browser what size they are so the browser can lay out the page properly even before all the images have been downloaded. This means the layout no longer jumps around while images are loading.
Bookmarkable and sharing URLs are now shorter
Obviously although the reading URL is now really short if you set up a user account with your settings saved so you just need to visit https://comics.kamens.us/, the bookmarks with comic display information in them are also shorter now.
Support for “montage comics”
When I went recently to add the strip This Modern World to the aggregator, I discovered that it was different in an important way from all of the previously supported strips: rather than all of its panels being contained in a single image, each panel is a separate image. Some changes to the aggregator were necessary to support strips like this.
Better privacy for Comics Kingdom readers
Before this round of changes, I was storing the actual email addresses of Comics Kingdom readers in my database. I’m no longer doing that; the Comics Kingdom code has been revamped to use a hash just like the user account code.
This is also a privacy improvement because now Comics Kingdom readers can share links to comics in the aggregator without exposing their email addresses in the links.
It’s entirely possible that I’m the only person who actually uses the aggregator’s API functionality (if you’re using it I’d love to hear from you!), but just in case, you can now generate an API key on your user profile page and include it as a query parameter in your URLs when calling the API. This has two benefits:
- It uses your saved settings, i.e., the list of comics you want, so you don’t have to specify them in the URL.
- If you’re a Comics Kingdom reader, it gives you access to Comics Kingdom strips through the API.
Fixing broken comics and cleaning up defunct ones
Dry Bones and Mister Boffo, both of which were broken, are now working again. (Just a reminder that if a comic you read stops working, you should email me and tell me so I can fix it!)
The script is now smarter about knowing which days a couple of comics are published on so there are fewer “false negatives,” i.e., fewer instances about the script complaining that it can’t find a comic for a particular day when there actually shouldn’t be one.
A number of comics which are no longer being published have been removed:
- Bloom County
- The Boobiehatch
- Flash Forward
- Not Invented Here
- That’s Life
- Watch Your Head
Believe it or not, I first started working on the aggregator 22 years ago. As a result of all the incremental, gradual fixes and enhancements I’ve made since then, the code became more and more convoluted and difficult to maintain, so much so, in fact, that it would have been inconceivable to add something as large as user account support without first paying down some of the “technical debt.” I have therefore spent many hours restructuring the code and rewriting significant portions of it; it’s now much, much better, though certainly it’s not perfect. There’s only so much I can do, after all, since it’s written in Perl (nerd joke). If only I’d learned Python earlier.