Reading view

Absolutely Trucking Mad, Part 5

I work as dispatch for a trucking company. One of my duties is to provide the closest truck driver for shipment. I get a call from a customer.

Customer: We can pay [generous amount] for this shipment, can you please check with your driver if that will be enough for him?”

I ask the driver:

Driver: “Yes, lock it down!”

Customer: “Alright, send your driver to the address.”

When the driver arrives at the address, he needs to wait for a couple of hours because they “made a mistake” with the paperwork. After asking them when they will be ready, only at the end do they tell him they sent their shipment with another courier for less money, and they didn’t even contact us. The driver tells me this and I call them asking for an explanation. They only said “sorry “and hung up.

Related:
Absolutely Trucking Mad, Part 4
Absolutely Trucking Mad, Part 3
Absolutely Trucking Mad, Part 2
Absolutely Trucking Mad

  •  

A-No-No-Tation

A client wants his dissertation laid out for print. It’s a pretty complicated task; it has tons of special characters and specific formatting, so I have lots of trouble with fixing all the little fails in the document.

One step before I am finished (and have already have been paid a fixed price – stupid me!), the publishers find out the author hasn’t even read the annotations of the second reviewer and it has almost a thousand mistakes left in the document that he just ignored. At this point, I have already worked hours for free just to finish this project.

The publishers and I tell him to give me the list with the mistakes, so I can fix them in the fragile, complicated, easy-to-destroy document. He refuses. We try to convince him for weeks. He refuses. We tell him if he does it himself, it will be more work for him, me, and the publishers and will result in a worse-looking book. He refuses.

Client: “I’ll pay 100 extra euros.”

Me: “That’s not even enough for three hours of work, and I will need eight to ten hours to fix what you will be ruining.”

The client goes on with doing whatever he’s doing and ignores me. When I get his document back, it will be h*** for almost no pay. Why can’t they just listen to the professionals?

  •  

Logo No Go

I work as a graphic designer at a sign shop that makes, well, signs. We also do some car decals and wraps from time to time, but mainly it’s large format signs, banners, channel letters, and so on.

This time it’s a client for some truck decals. They come in and we take measurements and photos of the existing graphics. They want the same exact decals that are there but larger, so that’s what I set up in a proof, set up pricing, and send it over to them. They approve the proof in the portal, which is time-stamped with his email showing it was approved and paid and everything. Seems like an easy job and super simple to do.

Fast forward to when I email him to get scheduled for installation. I tell them the decals are ready and list the dates for installation. They pick a date and time and we get them on the schedule. All of this is through email.

Client: “Can I see how the decals will look?”

Me: “Here’s a screenshot of the proof. This was the same one we sent over to you for approvals when the order was first placed and was approved by you. Let me know if you have questions.”

Client: “Let’s take this part of the sentence we have on there and move it. Also, in this other decal, I want the logo flipped so it’s facing the other way. Does that make sense?”

The logo part they are referring to is inside of the blue portion of a stylized American Flag. It’s cut out of the vinyl and flipping it would cause the logo to be backward from how it normally looks. The sentence was just cutting off a word and moving it elsewhere, which is super easy for production to do.

Me: “The sentence part is something we can accommodate. However, the decals were made once the proof was approved and are based on that. It looks like the proof was approved on [date] and we moved forward with that.”

Client: “I am not happy at all. I refuse to put the logo on my car backward.”

This logo is facing the right way all along. They wanted it flipped around and backward. 

Of course, now I go into a panic. I talk with my coworker, who works in the production room, and he’s like “yeah the decals are already made so we can’t do anything unless they buy a new one”. My boss isn’t there, as he’s out doing installs all day long, so it’s just me vs the client. I go back to my email and see that the client has emailed again. It hasn’t even been a few minutes.

Client: “Reimburse me my money or let’s get this right. I admit I didn’t look at the proof but approved it via the portal assuming you’d make it look EXACTLY how it looks like in the photos, which is why you took them.”

Once they said this, my panic instantly goes away. I know I have the trump card as I saved those photos from my phone to my work computer so I could reference them. I go back to the photos and took a look and, lo and behold, I did it right. The photo is even on the side of the truck the client had wanted it flipped on. I had mimicked it per their words when I spoke with them.

Me: “I did reference the photo and mimicked it when I was setting up this proof. Here’s the photo I referenced.” *Shows them the photo.*

Client: *Immediately apologetic.* “Oh. I’m sorry. I didn’t realize it was backward on my truck currently as well. I’ll still proceed with the install as is, but is it hard to order a new decal? If so, how much?”

In the end, the client came in and said to just install them as they are. They apologized for being a pain and didn’t like to be a complainer, which was nice of them. They said they were going to do some other decals once their new business got off the ground on this same truck, so we can make the change then.

  •  

They Need To Look Up "Professional" In A Dictionary

Me: “Hey, I’m glad I caught you. I’m calling about that request that I made five weeks ago. You never responded to any of my emails or voice messages. I’m just wondering what the status on that is?”

Client: “Well, the reason I didn’t respond was because your first email about it was unprofessional. We’re all professionals here, and I expect to be treated professionally. You really need to work on your communication skills, and I expect better from you if we’re going to continue working together.”

Me: “I’m looking at the whole email chain right now, and it seems fine to me. What seems wrong with it?”

Client: “Well, for starters, you could ask how my day’s been. Or you could put a joke at the bottom of the email. And you should really get rid of that line with all your company information at the bottom, it looks so unprofessional.”

  •  

Pretty Much What Most History Books Are Doing These Days

I’m designing a photographic history exhibit for a prestigious university. The project requires a series of panels that each depict a different decade, from the 1930s to the present.

Client: “You know, this is all great, but it could use a little more diversity. Right now, there are a lot of photos of all white men, and we don’t want to send the wrong message.”

Me: “Okay, that’s a reasonable request. I could pull some photos of your black student organizations and women’s center and add those to the panels showing the school’s more recent history.”

Client: “Actually, we’d love more diversity in the early panels too.”

Me: “What do you mean?”

Client: “Like this panel depicting the university in the 30s. All the photos are of white men!”

The school did not admit black students until the 1970s.

  •  

Web Design Is Not Safe As Houses

This story happened a few years ago. A friend refers me to his mother, a real estate agent who wants a new website for her business. I call her to set up an appointment.

Client: “So, what is your expertise in real estate?”

Me: “I’ve done two real-estate websites in the past, and they’ve been quite successful. I can provide you with a searchable database of listings where buyers can filter by price and other factors, as well as a homepage with featured listings, your bio, and anything else you’d like to include.”

Client: “Yes, but have you ever sold a house before?”

Me: “No.”

Client: “Why not?”

Me: “Because I’m not a real estate agent. I’m a web developer.”

Client: “So how do you expect to do a website for me if you don’t know anything about being a realtor?”

Me: “I know enough to build a website with a listing database which you can very easily populate with descriptions, photos, and any other info you wish to provide the buyers with. I can also provide other tools, such as a mortgage calculator and a lead-tracking system that allows potential buyers to contact you with listings they are interested in.”

Client: “I really don’t think you know what you’re doing. I think I’m going to have to pass and find someone who knows how to sell a house.”

Later, I discovered she had finished her website. On Geocities. Yellow background. 50pt font. Seemingly designed by a ‘real’ real estate agent…

  •  

Yeah, THAT Was The Unrealistic Part

Client: “We would like a drawing of a moose on skis.”

I send the art.

Client: “Why there were two feet on each ski?”

Me: “People ski on two skis and a moose has four feet so I put two on each ski.”

Client: “That is ridiculous!”

Me: “Which part? You’ll have to be more specific?”

Client: “Well, I’m pretty sure they don’t make skis that can accommodate two feet each!”

Me: “Right. That was a pretty big leap on my part, sorry.”

  •  

Deadlines: Emphasis On "Dead"

I’m a year and a half into the development of a new web application for managing complex data sets. Our boss has never been able to provide proper specifications for what he needs, just a flood of vague ideas with no real detail and constantly changing scope.

My job is to try and turn this into a comprehensible list of tasks that the dev team can actually follow. Each month, I have a planning session with the boss where we hash out the next period of work. Each session, I remind him that changing the scope means adding more time.

We agree and sign off the work to be delivered by the end of the month. So far, we’ve hit every deadline.

I thought we had a pretty good system in place until:

Boss: “I can’t believe we’re so far behind and how poorly you’ve managed this project.”

Me: “What do you mean? Haven’t we met all the agreed deadlines throughout the project?”

Boss: “I’ve made a spreadsheet of all the dates I wanted each feature done by. So far, you’ve missed every single one of them.”

Me: “Excuse me? We’ve always delivered what’s been agreed on time. Where have these new dates come from?”

Boss: “This is how long I thought the work should take and I made up my own timeline.”

Me: “I’ve never seen these dates before, let alone agreed to them. At a glance, many of them seem extremely optimistic.”

That’s business talk for “f****** mad”.

Me: “We agreed at the start this would be at least a three-year project.”

Boss: “Well, I decided it should take less time and you’re late. I’m going to have to pull the plug on this project if you can’t have everything wrapped up within the next month.”

I politely remind the boss that there was at least another year and a half of work left to complete the project. I’ll probably be looking for a new job shortly.

  •  

FreshRSS 1.19.1

Detailed tracked changes.

Full changelog:

  • Bug fixing
    • Fix some filters for automatic article actions (e.g., !pubdate:P3d) #4092
  • Features
    • New search operator on article IDs (useful to show a single article, extensions) #4058
      • Entry (article) ID: e:1639310674957894 or multiple entry IDs (or): e:1639310674957894,1639310674957893
  • UI
    • Fix left navigation with long category names #4055
    • Show My labels menu also when empty #4065
    • Improve category titles on global view #4059
    • Disable dynamic favicon for browser / extensions blocking canvas #4098
    • Minor UI and style improvements #4061, #4067, #4085
  • SimplePie
    • Manual update to SimplePie 1.5.8 #4113
  • Code improvements

  •  

FreshRSS 1.19.0

A few highlights:

  • Drop support for PHP 5.x (require PHP 7.0+) and initial support for PHP 8.1+
  • Drop support for Microsoft Internet Explorer (IE11)
  • New thumbnail and/or summary options for the normal view #3805
    image
  • New setting to automatically mark as read a new article if there is already one with the same title in the same feed
  • New setting to keep only a maximum number of unread articles in a given feed
  • Mobile view can access the configuration menus

Detailed tracked changes.

Full changelog:

  • Features
    • New thumbnail and/or summary options for the normal view #3805
    • New setting to automatically mark as read a new article if there is already one with the same title in the same feed #3303
    • New setting to keep only a maximum number of unread articles in a given feed #3303
    • New search operator based on custom labels, or not #3709
      • Search articles with label IDs: L:12,13,14 or label names: label:something or labels:"my label,my other label,🧪"
      • Search articles with any label: L:* or no label: !L:*
    • Add support for installable progressive web app (PWA) #3890
  • Bug fixing
    • Fix marking as read a label with SQLite and PostgreSQL #3711
    • Better fallback for feeds without title #3787
    • Fix auto-load articles in anonymous mode and global view #4082
    • Fix several typos found by PHPStan, including one affecting the cache of keep max unread articles #4019
    • Fix warning in Fever API #4056
    • Show no articles alert-box also in global view #4042, #3099
    • Fix theme selection when a theme has been deleted #3874
    • Fix keyboard shortcuts in anonymous mode #3945
    • Fix show password in settings #3966
    • Fix JavaScript warnings for non-validated users #3980
    • Fix drag & drop layout for subscriptions #3949
  • Security
    • Better error handling when a user does not exist (especially for API) #3751, #4084
    • Do not show Add new feed for anonymous users #4040
    • Do not show Mark as read / unread / favourite for anonymous users #3871, #3876
    • Do not show back link on error pages if the user does not have access #3765
    • Only show Back to RSS feeds when logged-in #3790
    • Fix for special characters in keyboard shortcuts #3922
    • Remove old workarounds with white space to prevent password autocompletion #3814
  • Compatibility
    • Require PHP 7.0+ (drop support for PHP 5.x) #3666
    • Drop support for Microsoft Internet Explorer (IE11) #3666
    • Fix some warnings with PHP 8.1+ #4012, #4018
    • Fix back-compatibility with Git 2.21- for automatic updates #3669
    • Fix JavaScript caching and compression for some Apache platforms #4075
  • Deployment
    • Docker: development image :oldest is now based on alpine:3.5 with PHP 7.0.33 and Apache 2.4.35 #3666
    • Docker: default image updated to Debian 11 Bullseye with PHP 7.4.25 and Apache 2.4.51 #3782
    • Docker: alternative image updated to Alpine 3.15 with PHP 8.0.14 and Apache 2.4.52 #3996
    • Docker: fix inclusion of .htaccess for ./p/themes/ folder #4074
    • Docker: only add the crontab when CRON_MIN is set #3927
    • Docker: move logic to disable FreshRSS updates #3973
    • Docker: allow mounting a volume for the cron file #3927
    • Images on Docker Hub are automatically scanned for software vulnerabilities
  • UI
  • Themes
    • Show search box for all themes in mobile view #4025
    • Fix alternative-dark theme to avoid bright elements #3774, #3806
    • Improve the contrast of message boxes for the Origine theme #3725
    • Uniformize the size of inputand select elements for the Origine theme #3727
    • Fix style of banner text for the Origine theme #3731
  • i18n
  • Extensions
    • Add system configuration for extension #3626
  • SimplePie
    • Merge from upstream, help with PHP 8.1+ #4011
    • Fallback to file extensions for enclosures not providing a media type #3861
  • Misc.
    • Implement GitHub Actions for continuous integration / automated testing 3920
    • Use ESLint instead of JSHint #3906
    • Improve .editorconfig and .stylelintrc #3895, #3912
    • Simplify Minz code with PHP 7 ?? operator #4020
    • Upgrade PHPMailer to 6.5.1 #3977
    • Added Raindrop.io as sharing option #3717
    • Delete outdated information regarding Firefox feed reader list #3822
  •  

FreshRSS 1.18.1

Note: Last release before dropping support for PHP 5 and Internet Explorer 11.

Changelog:

  • Features
    • Support standard HTTP 410 Gone by disabling (muting) gone feeds #3561
    • Make advanced feed options such as SSL available to non-admins #3612
  • API
  • UI
    • Allow Unicode for shortcuts #3548
  • Bug fixing
    • Fix database lock during refresh with MariaDB #3559
    • Fix database creation from CLI #3544
    • Fix: pdo_sqlite is optional except for export/import SQLite #3545
    • Fix import of JSON and TT-RSS files, especially with PHP 8 #3553
      • Allow import of more than 999 favourites/labelled articles even with SQLite
    • Fix additional SQL limits, especially for SQLite #3586
    • Fix search param encoding in user query #3541
    • Fix undefined variable & dead code when adding feed #3546
    • Fix missing translation in feed configuration #3554
    • Fix double escaping in feed filters #3563
    • Fix bugs in migration system #3589
    • Fix regression preventing showing startup errors #3590
    • Fix form redirection after erroneous user creation #3656
    • Fix JavaScript error during navigation when no article is selected #3655
    • Fix link to add feeds from the empty homepage #3650
    • Fix git update error message #3645
  • SimplePie
    • Fix regression about media attachments #3565
    • Fix regression about forcing HTTPS for enclosures #3568
    • Catch ValueError for loadHTML with PHP 8 simplepie#673
    • Provide access to latest HTTP status code simplepie#674
    • Fix wrong SimplePie type hint simplepie#678
    • Merge details from upstream PRs #3588, #3614
  • API
    • Compatibility with Web servers providing ORIG_PATH_INFO #3560
  • i18n
  • Code improvements:
    • Friendly constant syntax for Intellisense #3577
    • Fix several comments syntaxes #3615
    • Minor uniform stricter HTML #3616
    • Removed unused variable #3587
    • Provide action name in Minz controller exception #3624
    • New convenience method to extract multiline GET parameters from e.g. <textarea> #3629
  • Deployment
    • Automatically apply latest tag in git for the latest FreshRSS release #3524
  • Misc.
    • Remove legacy data/do-install.txt for triggering install process #3555
    • If using built-in git updates, automatically change to git edge branch if using old master or dev branch names #3589
  •  

FreshRSS 1.18.0

Changelog:

  • Features
    • Allow parallel requests #3096
      • Much faster manual feeds refresh
    • Reload full article content when an article has changed #3506
    • New share article link to clipboard #3330
    • Improved OPML import of feeds with multiple categories #3286
    • Add a content action parameter to work with CSS selector #3453
    • New cURL options per feed: proxy, cookie, user-agent #3367, #3494, #3516
    • Do not import feeds causing database errors (e.g. due to conflicting HTTP redirections) ##3347
  • UI
    • New option to remember open categories #3185
    • Remember the scroll position of the sidebar #3231
    • Feedback messages are now properly attached to a request, in case multiple tabs are open #3208
    • New user query configuration page #3366
    • Allow sorting and drag & drop in the list of user queries #3346, #3355
    • Change layout to add a subscription #3289
    • Change integration configuration page #3372
    • Improve author search when clicking on an author #3315
    • Allow typing a label name instead of selecting it #3213
    • Use same behaviour for labels than the option Show all articles in favourites #3472
    • Change naming from Tag management to Label management #3446
    • Sort options alphabetically in share menu #3331
    • Case-insensitive sort order of feeds in category settings #3466
    • Better compression of the images #3184
    • Fix minor jaggy motion of the sidebar #3266
    • Remove useless reset action in sharing configuration page #3365
    • Add autofocus on subscription page #3334
    • Fix contrast issue by enforcing black text in base theme #3196
    • Adjust brightness & contrast of images and videos in dark themes #3356
    • Improve menu bar of several themes for mobile view #3480, #3491
    • Fix dropdown menu for user queries with BlueLagoon and Screwdriver themes #3485
    • Upgrade to jQuery 3.6.0 for statistics #3501
  • Bug fixing
    • Fix the reloading of full article content with SQLite #3461
    • Fix the caching of an SQL prepared statement affecting the read state of updated articles #3500
    • Better handle expected article conflicts in database #3409
    • Fix SQL syntax error/warning when deleting temporary articles #3357
    • Fix login and refresh bugs in anonymous mode #3305
    • Fix i18n init #3249
    • Fix tag management #3292
    • Fix user queries with labels #3285
    • Fix loading of default actions for shortcuts #3394
    • Fix extensions when using CLI #3443
    • Fix translation CLI #3364
    • Allow searching for + sign #3489
    • Fix cURL version detection in install script #3519
  • Compatibility
    • Support PHP 8+ #3186, #3207, #3459, #3487
      • Note: needed for MySQL 8+ with default authentication settings
      • Change ZIP-handling method #3470
  • API
    • Supported by FocusReader (Android) #3478
    • Implement OPML import/export #3424
    • Add canonical field for fluent-reader, better compatibility InoReader #3391
    • Better compatibility with BazQux API #3320
    • Fix continuation token by ensuring it is a string (for Reeder) #3247
  • CLI
    • Add requirements check in relevant CLI #3410
  • Deployment
    • Possibility to auto-install via e.g. docker-compose #3353
      • New tolerance when the database is not available / up (yet) by trying a few times to connect
    • Docker: use Apache remoteip to log the client remote IP instead of the local proxy IP #3226
    • Docker: new environment variable LISTEN to change the internal Apache port when running in host network mode #3343
    • Docker: Alpine image updated to 3.13 with PHP 8.0.3 and Apache 2.4.46 #3375
      • Note: needed for MySQL 8+ with default authentication settings #3191
    • Docker default image (Debian 10 Buster) updated to PHP 7.3.27
    • New Docker development image based on alpine:edge to test the latest PHP 8+ version #3294
    • New Docker development image based on alpine:3.4 to test oldest supported PHP 5.6.36 version with Apache 2.4.43 #3274
    • Disable built-in update mechanism for new installations using Docker #3496
    • Check that PHP session is working during install #3430
  • Security
    • Auto-renew login cookie #3287
    • Remove referer check, already replaced by CSRF token #3432
    • Increase login cookie duration to 3 months by default #3170
    • Prevent click on login button until JavaScript is fully loaded #3275
    • Add toggle password visibility button on login form UI #3205
    • Better sanitize feed description #3222
    • Allow @-sign in database username (for Azure) #3241
    • Add username hint for permissions during install #3373
  • SimplePie
    • SimplePie prevent cache pollution #3502
    • Update to SimplePie 1.5.6 with PHP8 support #3469, #3206
    • Reduce memory consumption to handle very big feeds #3416
    • Replace ceil() by intval() for edge cases with PHP8 #3404
    • Strip HTML comments in feeds #3288
    • Minor fix of return type for broken feeds #3423
    • Fix images in enclosures without MIME type #3361
  • Extensions
    • New user maintenance hooks #3440
    • New hooks js_vars and nav_menu #3342
    • Add class autoload for extensions #3350
    • Add support for extension user files #3433
    • Add user configuration in extensions #3397
    • Add a method to retrieve a configuration value #3422
    • Search files for both core and third-party extensions #3413
    • Updated base extension class #3333, #3335
    • Refactor extension file script #3399
  • i18n
  • Code improvements
    • Improve FreshRSS system initialisation #3070
    • Improve session code during install #3276
    • Enforce phpcs (PHP_CodeSniffer) line length + whitespace #3488
      • Improve settings and applies to *.phtml, *.css, *.js as well
    • Fix superfluous Minz check during install #3302
    • Extract some classes to their own files #3301, #3298, #3297
    • Explicit git declaration of .png files as binary #3211
    • Remove Minz validation #3439
    • Explicit PDO::ERRMODE_SILENT #3048
    • Add constant for minimal PHP version #3369
    • Refactor requirements check during install #3368
  • Misc.
    • Check access rights to temp folder during install #3312
    • Ensure maximum integer for a date to avoid some database issues #3259
    • Upgrade PHPMailer to 6.3.0 #3457
    • Make our Travis greener by testing only our oldest and newest supported PHP versions #3492
  •  

FreshRSS 1.17.0

Changelog:

  • Features
    • New tag management page #3121
    • New page to add feeds and categories #3027
    • Add a way to disable/enable users #3056
  • Security
    • Add user auto-registration when using HTTP Basic authentication login method #3003
    • Fix special characters in user queries #3037
    • Hide feed credentials when adding a new feed #3099
    • Trim whitespace for feed passwords #3158
    • Updated PHPMailer library to 6.1.6 #3024
    • Add blogger.com to the default list of forced HTTPS #3088
  • UI
    • Show feed name and date inside the article (especially good on mobile) #3081
    • Add shortcut to control media elements (video, audio) #3036
    • New option to disable shortcuts #3114
    • Case-insensitive sort order of feeds in categories #3131
    • Use machine-readable <time datetime=""> for entry dates #3106
    • Add tooltips on entry icons #3115
    • Limit dropdown menus max-height #3102
    • Fix inline code tag contrast in Ansum and Mapco themes #3048, #3050
    • Fix login form in BlueLagoon and Screwdriver themes #3028
  • API
    • Supported by Fluent Reader (Windows, Linux, MacOS) #3140
    • Fix API quickadd #3051
    • Fix warning when adding a feed #3075
    • Work-around for common API address errors #3061
  • Compatibility
    • Add fall-backs for compatibility with OPMLs from The Old Reader #3071
    • Relaxed to allow underscore _ in feed addresses #3133
  • Deployment
    • Docker default image rebased on Debian 10 Buster, with Apache 2.4.38 and PHP 7.3.19 #3159
    • Docker: Alpine image updated to 3.12 with Apache/2.4.46 and PHP 7.3.21 #3025
    • Update example of Dockerfile #3108
  • CLI
    • Re-introduce --api_password option (vanished in 1.16.0) #3179
    • Modify shebang to be more portable #3038
  • Bug fixing
    • SimplePie: Fix compliance with HTTP 301 Moved Permanently #3180
  • i18n
    • Add language negotiation when the user is not logged in #3022
    • New United States English #3060
    • Improved British English #3068
    • Improved Dutch #3063
    • Improved Slovak #3020
    • Add a language reference when adding a new one #3044
    • Change how updating a key works #3072
    • Add missing translations #3034
  • Misc.
    • Return proper MIME type for favicons #3032
    • Add a migration system #2760
    • Makefile support for FreshRSS extensions #3042
    • Update rules to use Make syntax #3062
    • Refactor the export feature #3045
  •  

FreshRSS 1.16.1

Changelog:

  • Features
    • Add the possibility to filter by feed IDs #2892
      • like f:123 more-search or multiple feed IDs like f:123,234,345 more-search or an exclusion like !f:456,789 more-search
    • Show users last activity date #2936
    • Ability to follow HTML redirections when retrieving full article content #2985
  • API
    • New table of compatible clients #2942
    • Expose podcasts in API (used by e.g. FeedMe) #2898
    • Workaround for clients not sending a clean login request #2961
    • Relaxed detection of GReader short/long ID form (for Reeder) #2957
    • Fix warning with FeedReader #2947
    • Fix GReader string type for Usec fields #2935
    • Fix Fever integers type #2946
  • CLI
    • JSON output option for ./cli/user-info.php --json #2968
    • Add language and e-mail in ./cli/user-info.php #2958
    • Fix filenames for exported files #2932
  • UI
    • Access to feed configuration in mobile view #2938
    • Use standard loading="lazy" for favicons #2962
    • New option to control which categories to unfold #2888
    • Turn off autocapitalization in login fields #2907
    • Minor layout improvement of help labels #2911
    • Minor layout improvement of checkbox labels #2937
    • Fix styling of search input fields in Safari #2887
    • Fix styling of .stick elements in older Webkit browsers #2995
    • Use common CSS template for Alternative-Dark theme #3000
    • Upgrade to jQuery 3.5.1 for statistics #2982
  • Compatibility
    • Relax OPML parsing to allow importing not strictly-valid ones #2983
  • Deployment
    • Docker: Alpine image updated to PHP 7.3.17
    • Add reference documentation for using Apache as a reverse proxy #2919
    • Enforce Unix line endings when checking out via git #2879
  • Bug fixing
    • Fix regression when marking all articles as read, risking to mark newer articles as read #2909
    • Fix memory leak when using lib_phpQuery for full-content retrieval #3004
    • Fix preview of CSS selector to retrieve full article content #2993
    • Fix PostgreSQL install when user has limited connection rights #3013
    • Fix Docker make cron use FRESHRSS_ENV environment variable #2963
    • Fix e-mail validation bug for admins #2917
    • Fix some cases when WebSub-enabled feeds change address #2922
    • Fix ensuring that wrong login attempts generate HTTP 403 (e.g. for fail2ban) #2903
    • Fix archiving options layout in Edge #2906
    • Fix form in statistics for article repartition #2896
    • Fix double-HTML-encoding of category names in statistics #2897
    • Fix password reveal button during install #2999
    • Fix Makefile rules when PHP is not installed #3010
  • i18n
    • Improve Simplified Chinese #2891
    • Improve Dutch #3005
    • Reformat i18n files #2976
    • Add a Makefile rule to produce PO4A i18n files #3006
  • Misc.
    • Reduce memory consumption during feed refresh #2972, #2955
      • and improved logs containing memory consumption #2964
    • Reduce the risk of DB lock errors #2899
    • Update PHPMailer library to 6.1.5 #2980
    • Initial rules for Markdown linting #2880
    • Add a Makefile rule for linting #2996
    • Add a Makefile rule to refresh feeds #3014
  •  

FreshRSS 1.16.0

Changelog:

  • Features
    • Allow multiple users to have administration rights #2096
    • Preview the CSS rule to retrieve full article content #2778
    • Improve CSS selector ordering in the full-text retrieval (lib_phpQuery) #2874
      • Allow combining selectors with a comma such as #article .title, #article .content
    • New search option !date: allowing to exclude any date interval #2869
      • For instance !date:P1W (exlude articles newer than 1 week), !pubdate:2019, -date:2020-01-01/P5d, etc.
    • New option to show all articles in the favourites view #2434
    • Allow feed to be actualized just after being truncated #2862
    • Fallback to showing a GUID when an article title is empty #2813
  • API
    • Supported by Readrops (Android, open source) #2798
    • Improve consistency of the default category #2840
    • Return proper newestItemTimestampUsec #2853
    • Return HTTP/1.x 200 OK for an empty request, to ease discovery #2855
    • Add ability to customise dates shown in API #2773
    • Minor clearing of unused parameters #2816
  • Compatibility
    • Support PHP 7.4
  • Bug fixing
    • Fix regression causing a login bug in some situations related to e-mail login #2686
    • Fix regression in feed refresh when there are users whose e-mail is not verified #2694
    • Fix PostgreSQL install when using a username different than database name #2732
    • Fix error with advanced searches using SQLite #2777
    • Fix feed action filter when filtering on author: #2806
    • Fix warning in WebSub #2743
    • Fix environment variables COPY_LOG_TO_SYSLOG and FRESHRSS_ENV controlling logging #2745
    • Fix UI flickering when hovering over articles when authors are displayed #2701
    • Fix array error with PHP 7.4 #2780
    • Fix wrong foreach in applyFilterActions #2809
    • Fix encoding bug in lib_phpQuery when fetching the full content of HTML documents with a complex <head ...> #2864
    • Fix minor bug in “articles to display” configuration UI #2767
    • Fix sharing with Wallabag #2817
    • Fix UI background bug when hovering over a long title that overlaps the date #2755
  • UI
    • Better UI / client network performance (time to first byte) thanks to a data streaming pipeline with yield #2588
      • Improved buffering strategy accordingly, with a loading animation while waiting for the first articles to arrive (e.g. complex / slow search) #2845
      • To benefit from it, requires that the full Web stack allow efficient streaming / flushing of data. Check our reference Docker + Traefik documentation.
    • Support RTL (right-to-left) languages #2776
    • New keyboard shortcut Alt ⎇+r to mark previous articles as read #2843
    • In the statistics page, show feeds inactive for 1, 2, 3, 5 years #2827
    • Reset FreshRSS page scroll when restoring a browser session, to avoid inadvertently marking as read new articles #2842
    • Fix scrolling of labels dropdown #2727
    • Enlarge <audio> widgets to use the full width of the reading zone, to help navigation in e.g. podcasts #2875
    • Use <p> instead of <pre> to display <media:description> information #2807
    • Show language and e-mail address in the list of users #2703
    • Change logic when using shortcuts to navigate between feeds, in the case some are empty #2687
    • Option to show/hide favicons (e.g. to reduce the number of requests) #2821
    • Improve loader animation colour in the Dark theme #2753
  • SimplePie
    • Use distinct cache for feeds retrieved with #force_feed simplepie#643
      • Fix the issue of not being able to immediately try to add an invalid feed again #2524
    • Update to SimplePie 1.5.4 #2702, #2814
      • Require PHP 5.6+, and add PHP 7.4+ compatibility
      • Add Russian and German dates
      • Etc.
  • Deployment
    • Docker: Alpine image updated to 3.11 with PHP 7.3.16 and Apache 2.4.43 #2729
    • Move core extensions (shipped with FreshRSS) to their own directory, so that ./extensions/ is solely for third-party extensions #2837
      • This allows mounting ./extensions/ as a Docker volume, to ease adding third-party extensions
  • Extensions
    • New core extension to find feeds for Google Groups #2835
    • New hooks check_url_before_add and feed_before_actualize #2704
    • Execute the entry_before_display hook also through the API #2762
    • Allow extensions to change CSP (security) rules #2708
    • Expose the article ID in the share system (for a new e-mail sharing extension) #2707
  • i18n
  • Misc.
    • Improve logging of database errors #2734
    • Remove the min_posts_per_rss configuration, which made efficient buffering difficult #2588
    • Add a test target to Makefile #2725
    • Fix test suite #2721
    • Refactor request class #2373
    • Remove deprecated magic quotes logic #2698
  •  
❌