Normal view

FreshRSS 1.24.1

5 June 2024 at 10:35

This is a bug-fix release for the 1.24.0 release, addressing several regressions.

A few highlights ✨:

  • New button to export OMPL of a category
  • Many bug fixes

This release has been made by @Alkarex, @math-GH, and newcomers @ramazansancar, @robinmetral

Full changelog:

  • Features
    • New button to export OMPL of a category #6519
    • Better git error messages in built-in Web update #6496
  • Bug fixing
    • Fix regression HTTP GET curl options #6492
    • Fix regression of mark as read if an identical title already exists #6536, #6543
    • Fix connection to PostgreSQL databases with uppercase letters #6482
    • Fix UI regression hover over title while having the navigation buttons in mobile view #6486
    • Fix UI for some drag & drops #6505, #6508
  • i18n
  • Misc.

FreshRSS 1.24.0

23 May 2024 at 04:54

A few highlights ✨:

  • New shareable user query mechanism to share lists of articles by HTML, RSS, OPML
    • Deprecates RSS sharing with master token
  • New CLI for database backup & restore
  • New JSON scraping mode to consume JSON data and JSON Feeds
  • New support for HTTP POST
  • New option to automatically add labels to incoming articles
  • New button to download a feed configuration as OPML
  • Many bug fixes

This release has been made by several contributors: @aledeg, @Alkarex, @andris155, @CilgaIscan, @cn-tools, @den13501, @eta-orionis, @Frenzie, @FromTheMoon85, @gmgall, @hkcomori, @jakopo87, @laxmanpradhan, @loviuz, @math-GH, @MayMeow, @OctopusET, @PedroPMS, @roughnecks, @soniyaprasad77, @th0mcat, @thomasrenes, @tiborepcek, @wolfpld, @yzqzss, @zukizukizuki
and several newcomers @eta-orionis, @gmgall, @hkcomori, @jakopo87, @jgtorcal, @krm-shrftdnv, @laxmanpradhan, @loviuz, @PedroPMS, @roughnecks, @soniyaprasad77, @th0mcat, @zukizukizuki

Full changelog:

  • Features
    • New shareable user query mechanism to share list of articles by HTML, RSS, OPML #6052
      • Deprecates RSS sharing with master token
    • New JSON scraping mode to consume JSON data #5662, #6317,
      #6369, #6476
    • New support for JSON Feeds #5662
    • New support for HTTP POST #5662
    • New options to automatically add labels to incoming articles #5954
    • New button to download a feed configuration as OPML #6312
    • Web scraping support more encodings such as EUC-JP #6112
    • Web scraping support password-protected queries (refactor some cURL options and use CURLOPT_USERPWD) #6177
    • Web scraping HTTP GET allow UTF-8 even when charset is far from top #6271
    • Allow manual refresh of disabled feeds #6408
    • Allow multiple authors on enclosures #6272
    • New system option in data/config.php for number of feeds to refresh in parallel from UI #6124
  • CLI
  • API
    • New compatible app Read You #4633, #6050
    • Reduce API memory consumption #6137
    • Allow negative feed IDs for future special cases #6010
    • Only return OK for requests without query parameters #6238
  • Bug fixing
    • Better account for some edge cases for cron and automatic labels during feed refresh #6117
    • Better support for thumbnails in RSS feeds #5972
    • Auto-update PostgreSQL or MariaDB / MySQL databases for column details changes since FreshRSS 1.21.0 #6279
      • For SQLite, DB update require running ./cli/db-backup.php ; ./cli/db-restore.php --force-overwrite
    • Fix SQLite import of exports produced before FreshRSS 1.20.0 #6450
    • Fix SQLite release handle to fix deleting users on Microsoft Windows #6285
    • Fix to allow admins to create user even when there are Terms Of Service #6269
    • Fix updating the uncategorized category deletes the title #6073
    • Fix disable master authentication token #6185
    • Fix CSS selector preview #6423
    • Fix CSS selector encoding #6426
    • Fix export of CSS selector in OPML of individual feeds #6435
    • Fix OPML import of CURLOPT_PROXYTYPE #6439
    • Fix favicon with protocol-relative URLs have duplicate slashes #6068
    • Fix feed TTL+muted logic #6115
    • Fix apply mark as read to updated articles too #6334
    • Fix ZIP export on systems with custom temp folder #6392
    • Fix number of posts per page during paging #6268
    • Fix clipboard sharing UI #6301
    • Fix shortcut for clipboard sharing #6277
    • Fix user-query filter display #6421
  • SimplePie
  • Security
    • Replace iframe allow attribute #6274
  • Deployment
    • Disable unused PHP modules in our Debian-based Docker image #5994
  • UI
  • i18n
  • Extensions
    • Sanitize parsing list of extensions names and version number #6016,
      #6155, Extensions#214, #6186
    • Apply filter actions such as mark as read after the entry_before_insert hook for extensions #6091
    • New developer command to test all third-party extensions Extensions#228, #6273
      • composer run-script phpstan-third-party
    • New function Minz_Extension::amendCsp() for extensions to modify HTTP headers for Content Security Policy #6246
    • New property FreshRSS_Entry::isUpdated() for extensions to know whether an entry is new or updated #6334
  • Compatibility
    • Fix PHP 7.4 compatibility for automated tests #6038, #6039
    • Fix PHP 8.2+ compatibility for e-mails #6130
    • Use PHP 8.3+ #[\Override] #6273
  • Misc.

FreshRSS 1.23.1

31 December 2023 at 08:32

This is a bug-fix release for the 1.23.0 release, addressing several regressions.

This release has been made by @Alkarex, @andris155, @math-GH, @yzqzss, @zhzy0077

Full changelog:

  • Bug fixing
    • Fix crash regression with the option Max number of tags shown #5978
    • Fix crash regression when enabling extensions defined by old FreshRSS installations #5979
    • Fix crash regression during export when using MySQL #5988
    • More robust assignment of categories to feeds #5986
    • Fix base_url being cleared when saving settings #5992
    • Fix unwanted button in UI of update page #5999
  • Deployment
    • Exclude more folders with .dockerignore #5996
  • i18n
    • Improve simplified Chinese #5977
    • Improve Hungarian #6000

FreshRSS 1.23.0

31 December 2023 at 08:32

A few highlights ✨:

  • New Important feeds group in the main view, with corresponding new priority level for feeds #5782
    • Entries from important feeds are not marked as read during scroll, during focus, nor during Mark all as read
  • Add filter actions (auto mark as read) at category level and at global levels #5942
  • Increase SQL fields length to maximum possible #5788, #5570
  • Many bug fixes

Breaking changes 💥:

  • Require PHP 7.4+
  • Soft require Apache 2.4+ (but repair minimal compatibility with Apache 2.2)
  • Use GitHub Actions to build Docker images, offering architectures amd64, arm32v7, arm64v8 with automatic detection #5808
    • So no -arm suffix anymore
  • Upgraded extensions require FreshRSS 1.23.0+ Extensions#181

This release has been made by several contributors: @Alkarex, @ColonelMoutarde, @FireFingers21, @Frenzie, @kasimircash, @andris155, @b-reich, @foux, @jaden, @jan-vandenberg, @joestump, @jtracey, @mark-monteiro, @martinrotter, @math-GH, @passbe

Full changelog:

  • Features
    • New Important feeds group in the main view, with corresponding new priority level for feeds #5782
      • Entries from important feeds are not marked as read during scroll, during focus, nor during Mark all as read
    • Add filter actions (auto mark as read) at category level and at global levels #5942
    • Improve reliability of Max number of articles to keep unread #5905
    • New option to mark entries as read when focused from keyboard shortcut 5812
    • New display option to hide My labels in article footers #5884
    • Add support for more thumbnail types in feeds enclosures #5806
    • Support for favicons with non-absolute paths #5839
    • Increase SQL (VARCHAR) text fields length to maximum possible #5788
    • Increase SQL date fields to 64-bit to be ready for year 2038+ #5570
  • Compatibility
    • Require PHP 7.4+, and implement typed properties #5720
    • Require Apache 2.4+ (but repair minimal compatibility with Apache 2.2) #5791, #5804
  • Bug fixing
    • Fix regression in Docker CRON_MIN if any environment variable contains a single quote #5795
    • Improve filtering of cron environment variables #5898
    • Fix the TRUSTED_PROXY environment variable used in combination with trusted sources #5853
    • Fix regression in marking as read if an identical title already exists #5937
    • Fix JavaScript regression in label dropdown #5785
    • Fix regression when renaming a label #5842
    • Fix API for adding feed with a title #5868
    • Fix regression in UI of update page #5802
    • Fix XPath encoding #5912
    • Fix notifications, in particular during login #5959
  • Deployment
    • Use GitHub Actions to build Docker images, offering architectures amd64, arm32v7, arm64v8 with automatic detection #5808
    • Docker alternative image updated to Alpine 3.19 with PHP 8.2.13 and Apache 2.4.58 #5383
  • Extensions
    • Upgrade extensions code to PHP 7.4+ #5901, #5957
    • Breaking change: upgraded extensions require FreshRSS 1.23.0+ Extensions#181
    • Pass FreshRSS version to JavaScript client side for extensions #5902
    • Add GitHub Actions and PHPStan for automatic testing of the Extensions repository Extensions#185
  • API
    • Improve handling of new lines in enclosure descriptions (e.g., YouTube video descriptions) #5859
  • Security
    • Avoid printing exceptions in favicons #5867
    • Remove unneeded execution permissions on some files #5831
  • UI
    • Ensure that enough articles are loaded on window resize #5815
    • Improve Nord theme #5885
    • Do not show message Add some feeds #5827
    • Various UI and style improvements #5886
  • i18n
    • Fix font priority for languages using Han characters #5930
    • Improve Dutch #5796
    • Improve Hungarian #5918
  • Misc.

FreshRSS 1.22.1

30 October 2023 at 13:54

This release contains mostly some bug fixes for the recent 1.22.0.
This version 1.22.x is also the last to support PHP 7.2 before requiring PHP 7.4+.

A few highlights ✨:

  • Fix regression in extensions translations (i18n)
  • Better identification of proxied client IP
  • Better support of environment variables in K8s setups
  • And more!

This release has been made by several contributors: @Alkarex, @Frenzie, @MHketbi, @XtremeOwnageDotCom, @math-GH, @mossroy

Full changelog:

  • Bug fixing
    • Fix regression in i18n English fallback for extensions #5752
    • Fix identification of thumbnails #5750
    • OpenID Connect compatibility with colon : in OIDC_SCOPES #5753, #5764
    • Avoid a warning on non-numeric TRUSTED_PROXY environment variable #5733
    • Better identification of proxied client IP with RemoteIPInternalProxy in Apache #5740
  • Deployment
    • Export all environment variables to cron (to allow custom environment variables such as for Kubernetes) #5772
    • Docker: Upgraded Alpine dev image freshrss/freshrss:newest to PHP 8.3 #5764
  • Compatibility
    • Test compatibility with PHP 8.3 #5764
  • UI
  • i18n
    • Better i18n string for feed submenu for mark as read #5762
    • Improve Dutch #5759
  • Misc.
    • Move to GitHub Actions for our GitHub Pages #5681
    • Update dev dependencies and use stylelint-stylistic #5766

FreshRSS 1.22.0

27 October 2023 at 16:32

In this release, besides adding some initial support for OpenID Connect, the focus has been on increasing the quality rather than adding new features (which will have more focus again in the next release).
This version 1.22.x is also the last to support PHP 7.2 before requiring PHP 7.4+.

A few highlights ✨:

  • Add support for OpenID Connect (only in our Debian-based Docker image for x86_64, not Alpine, and not ARM) through libapache2-mod-auth-openidc. See our documentation
  • Rework trusted proxies
  • Improve scaling with many feeds and long processes, reduce database locks
  • Fix many bugs and regressions
  • Improve themes Origine (also with automatic dark mode), Nord, etc.
  • Several UI / UX improvements
  • New languages Hungarian, Latvian, Persian
  • Docker default image updated to Debian 12 Bookworm with PHP 8.2
  • Increase our code base from PHPStan level 5 to level 7
  • And more!

This release has been made by several contributors: @Alkarex, @Alwaysin, @ColonelMoutarde, @Exerra, @FromTheMoon85, @LleanaRuv, @Marjani, @NaeiKinDus, @Rufubi, @V-E-O, @aaronschif, @acbgbca, @aledeg, @andris155, @becdetat, @belidzs, @kemayo, @kgraefe, @marienfressinaud, @math-GH, @msdlr, @obrenckle, @otaconix, @robertdahlem, @sad270, @samc1213, @squaregoldfish, @vrachnis, @witchcraze, @yubiuser, @zhaofengli

Full changelog:

  • Features
    • Add support for OpenID Connect (only in our default Debian-based Docker image for x86_64, not Alpine) through libapache2-mod-auth-openidc
      #5351, #5463, #5481,
      #5523, #5646
    • Allow sharing in anonymous mode #5261
    • Support Unix socket for MySQL / MariaDB #5166
    • Use proxy settings also for fetching favicons #5421
    • Add mutual exclusion semaphore for better scaling of actualize script #5235
    • Better reporting of XPath failures #5317
    • Add sharing with Buffer.com #5286
    • Add sharing with Omnivore #5477
    • Improve sharing with Linkding #5433
    • Do not automatically update feeds after import, to better support multiple imports #5629
    • Compatibility for servers disabling set_time_limit() #5675
    • New configuration constant CLEANCACHE_HOURS #5144
  • Bug fixing
    • Fix cache refresh #5562
    • Fix and improvement of hash of articles using load full content #5576
    • Fix case of falsy GUIDs #5412
    • Fix and improve JSON export/import #5332, #5626
    • Fix enclosures in RSS output #5540
    • Fix parenthesis escaping bug in searches #5633
    • Fix regression in Fever API enclosures #5214
    • Fix regression in Fever API mark-all-as-read #5185
    • Fix regression in OPML export of single feeds #5238
    • Fix warning during OPML export with empty attributes #5559
    • Fix extensions in actualize script #5243
    • Fix link to configuration (system or user) for extensions #5394
    • Fix mark as read upon gone option in some conditions #5315,
      #5382, #5404
    • Fix mark selection as unread #5367
    • Fix warning in articles repartition statistics #5228
    • Fix count entries with some databases #5368
    • Fix MariaDB database size calculation #5655
    • Fix feed position attribute #5203
    • Fix warning when tagging entries #5221
    • Fix labels in anonymous mode #5650
    • Fix bug not allowing strings for tags in XPath #5653
    • Fix get and order when saving user query #5515
    • Fix search using user queries #5669
    • Fix regression of access to logs even when auto-update is disabled #5577
    • Fix access to Apache logs from Dev Container #5660
    • Fix malformed HTTP header in case of internal fatal error #5699
    • Fix rare exception for HTML notifications #5690
  • UI
    • New option to display website name and/or favicon of articles #4969
    • Support <meta name="theme-color" .../> #5105
    • Config user settings in slider #5094
    • Improve theme selector #5281, #5688
    • Improve share to clipboard with animation and icon #5295
    • Allow share to clipboard even for localhost and without HTTPS #5606
    • Feedback when tag with same name as category already exists #5181
    • Show base URL in configuration #5656, #5657
    • Show Terms of Service in config menu #5215
    • Show Terms of Service in footer #5222
    • Improve about page #5192
    • Improve update page #5420, #5636,
      #5647
    • Improve Step 1 of install process #5350
    • Improve Global view on mobile #5297
    • Reduce network overhead for Global view #5496
    • Fix Global view: Stick the article to the top when opened #5153
    • Fix configuration views that are using a slider #5469
    • Fix highlight next/prev article while using shortcuts #5211
    • Fix regression in statistics column name % of total #5232
    • Fix macOS feed title meta-click behaviour #5492
    • Improve themes
    • Delete previously deprecated themes: BlueLagoon, Screwdriver #5374,
      #5694
    • Various UI and style improvements #5147, #5216,
      #5303, #5304, #5397,
      #5398, #5400, #5603,
      #5695
  • Security
    • Rework trusted proxies (especially with Docker) #5549
    • Automatic trusted sources during install #5358
    • Show remote IP address in case of HTTP Basic Auth error #5314
  • Deployment
    • Docker listen on all interfaces by default, including IPv6 #5180
    • Docker default image updated to Debian 12 Bookworm with PHP 8.2.7 and Apache 2.4.57 #5461
    • Docker alternative image updated to Alpine 3.18 with PHP 8.1.23 and Apache 2.4.58 #5383
    • Docker quiet Apache a2enmod #5464
    • Docker: Add DATA_PATH to cron env #5531
  • i18n
  • Extensions
    • Fix fallback to English for extensions #5426
    • Allow deep-link to extension configuration #5449
    • New extension hook entry_auto_read #5505, #5561
    • Simplify extension method #5234
    • Remove obsolete core extensions Google Group and Tumblr #5457
  • SimplePie
    • Fix error_reporting for PHP 8.1+ #5199
  • Misc.

FreshRSS 1.21.0

8 March 2023 at 09:31

A few highlights ✨:

  • Require PHP 7.2+ (drop support for PHP 7.0 and 7.1) #4848
  • New XML+XPath mode for fetching XML documents when there is no RSS/ATOM feed #5076
  • Better support of feed enclosures (image / audio / video attachments) #4944
  • User-defined time-zone #4906
  • New CLI script cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001
  • Mark some themes as tentatively deprecated: BlueLagoon, Flat, Screwdriver #4807
    • 🙋 Reach out if you disagree, especially if you are interested in helping maintaining one of them
  • Many UI improvements

This release has been made by several new contributors @axeleroy, @hippothomas, @mincerafter42, @sad270, @zhzy0077, in addition to our regular contributors @Alkarex, @ColonelMoutarde, @Frenzie, @myuki, @aledeg, @marienfressinaud, @math-GH, @miicat, @nicofrand, @yzqzss ... Thank you!

Detailed tracked changes.

Full changelog:

  • Features
    • New XML+XPath mode for fetching XML documents when there is no RSS/ATOM feed #5076
    • Better support of feed enclosures (image / audio / video attachments) #4944
    • User-defined time-zone #4906
    • Improve HTML+XPath mode by allowing HTML content #4878
    • Search only on full tag names and not on parts of tag names #4882
    • Allows searching for parentheses with \( or \) #4989
    • Firefox-compatible sharing service for mailto: links for webmail services #4680
    • Add sharing to archive.org #5096
    • Increase max HTTP timeout to 15 minutes #5074
  • Compatibility
    • Require PHP 7.2+ (drop support for PHP 7.0 and 7.1) #4848
    • Workaround disabled openlog() or syslog() #5054
  • Deployment
    • Docker default image (Debian 11 Bullseye) updated to PHP 7.4.33
    • Docker: alternative image updated to Alpine 3.17 with PHP 8.1.16 and Apache 2.4.55 #4886
    • More uniform time-zone behaviour #4903, #4905
    • New CLI script cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001
    • New CLI script cli/access-permissions.sh to help apply file permissions correctly #5062
    • Improve file permissions on ./extensions/ #4956
    • Update Apache mime type font/woff #4894
    • Re-added a git latest branch (instead of a tag) to track the latest FreshRSS stable releases #5148
  • Bug fixing
    • Fix allow disabling curl proxy for specific feed, when proxy is defined globally #5082
    • NFS-friendly is_writable() checks #4780
    • Fix error handling when updating feed URL #5039
    • Fix feed favicon after editing feed URL #4975
    • Fix allow Ctrl+Click to open Manage feeds in new tab #4980
    • Fix empty window opened when pressing space after page load #5146
    • Fix keep current view when searching #4981
    • Fix mobile view: scroll main area again after closing slider #5092
    • Fix change confirmation when leaving sharing service config #5098
    • Fix sharing to Lemmy #5020
  • Security
    • API avoid logging passwords CVE-2023-22481
    • Remove execution rights on some files not needing it #5065
    • More robust application of file access permissions #5062
  • UI
  • Themes
  • i18n
  • SimplePie
    • No URL Decode for enclosure links #768
    • Fix case of multiple RSS2.0 enclosures #769
    • Sanitize thumbnail URL #770
    • Use single constant for default HTTP Accept header #784
  • Misc.

FreshRSS 1.20.1

14 November 2022 at 08:26

A few highlights ✨:

  • Focusing mostly on bug-fixes of 1.20.0
  • Several UI / themes improvements
  • Improved and new translations (Greek, Indonesian)

Detailed tracked changes.

Full changelog:

  • Features
    • Add support for custom XPath date/time format #4703
    • Add default redirect when authenticating #4778
    • Force default user before rendering login page #4620
  • API
    • Minor Google Reader API improvements #4763
  • Bug fixing
    • Fix SQL transaction rollbacks during auto-update #4622
    • Fix opcache bug during Web update #4629, update.freshrss.org#4
    • Fix export bug #4822
    • Fix OPML import of special feed attributes #4708
    • Fix JavaScript bug with remembering opened categories #4827
    • Fix curlopt options for HTML+XPath #4759
    • Fix charset bug for HTML+XPath #4623
    • Fix HTML-encoding of CSS selectors #4707, #4823
    • Fix some broken author links #4743
    • Fix show settings page after adding new feed #4631
    • Fix login page when user does not exist #4621
    • Fix feed manage link on stats page #4768
    • Fix minor layout bugs #4830
    • Fix minor UI bugs with Safari #4643
  • UI
    • Change some default settings related to marking articles as read #4736
    • Improve scrollbar when slider is open #4692
    • Improve Subscription Management: Show the category position number #4679
    • Improve Reader view: Mark article as read while scrolling #4652
    • Improve sharing / integration page #4774
    • Improve article summary text cut #4666
    • Improve HTML semantics for some boxes #4665
    • Change dynamic OPML icon #4673, #4810
    • Improve box layout for global view #4791
    • Improve logs layout #4594
    • Improve Feed configuration: number of articles #4625
    • Improve drop-down menus #4597
    • Show tile with explanation when hovering empty feeds #4617
    • Added bottom nav padding for iOS #4741
  • Themes
  • i18n
  • Compatibility
    • Compatibility PHP 8.1+ strip_tags() #4688
    • Fix GLOB_BRACE is not available on all platforms #4628
  • Deployment
    • Docker default image (Debian 11 Bullseye) updated to PHP 7.4.33
    • Docker: alternative image (Alpine 3.16) updated to PHP 8.0.25
  • Misc.
    • Added Linkding as a sharing method #4721
    • Exclude .git/ from tests #4824
    • Exclude extensions/ from eslint and stylelint tests #4606
    • Update GitHub Actions version #4717

FreshRSS 1.20.0

10 September 2022 at 10:02

A few highlights ✨:

  • New Web scraping feature HTML+XPath for Web pages without any RSS/ATOM feed #4220
  • Add support for Dynamic OPML #4407
  • New search engine supporting (nested) parentheses, also with negation #4378
  • Allow many (50k+) feeds #4347 and other performance improvements
  • New option to exclude some DOM elements with a CSS Selector when retrieving an article full content #4501
  • New option to automatically mark as read gone articles #4426
  • 2 new themes and plenty of UI improvements
  • Supported by Fluent Reader Lite client on Android and iOS #4595
  • Several bug fixes
  • 1.20.x will be the last release(s) to support PHP 7.0 before requiring PHP 7.2+

Detailed tracked changes.

Full changelog:

  • Features
    • New Web scraping feature HTML+XPath for Web pages without any RSS/ATOM feed #4220
    • Add support for Dynamic OPML #4407
      • Subscriber: Ability for a category to be dynamically populated with a list of feeds provided by a remote OPML
      • Publisher: Ability to dynamically export a FreshRSS view (all, feed, category) into a dynamic OPML
    • New search engine supporting (nested) parentheses #4378, #4503
      • (author:Alice OR intitle:hello) (author:Bob OR intitle:world)
      • also with negation: !((author:Alice intitle:hello) OR (author:Bob intitle:world))
      • and supporting calling user queries from the search field by name: search:"My query" or search:QueryA, or by ID: S:3
    • Allow many (50k+) feeds #4347
      • Note: only for new users or after an export/import or a manual database update
      • See also #4357, #4353,
        #4417, #4502
    • New option to exclude some DOM elements with a CSS Selector when retrieving an article full content #4501
    • New option to automatically mark as read gone articles #4426
    • New OPML export/import of some proprietary FreshRSS attributes #4342
    • Tolerate the import of some invalid OPML files #4591
    • New feed settings to allow cookies and HTTP redirects #4470
    • Performance: Easier text search indexes for fast searches with PostgreSQL #4505
      • The indexes must be manually added for now. Using GIN pg_trgm
    • Easier definition of default user queries for new users in data/config-user.custom.php #4360
    • New sharing through standard Web Share API #4271
    • New sharing with Xing, Reddit, Pinterest, WhatsApp #4270
    • New sharing with archive.today #4530
  • SimplePie
  • Bug fixing
    • Fix last update & archive logic (especially for very long feeds, for which some old items were marked as unread) #4422
    • Fix regression with Fever API on 32-bit platforms #4201
    • Fix read-when-same-title bug #4206
    • Fix some search expressions such as "ab cd" and ab-cd #4277
    • Fix auto-load of more articles when using shortcuts #4532
    • Fix space shortcut #4581
    • WebSub: Use hash instead of base64 to handle long URLs #4282
    • Fix handling of authors with ampersand & #4287
    • Fix lazy loading images containing a quote ' in the address #4330
    • Fix database size calculation for PostgreSQL #4249
    • Fix HTTP root redirection in some cases (trailing slash with a proxy) #4167
    • Fix htmlspecialchars() warnings with PHP 8.1+ #4411
    • Fix OPML category encoding #4427
    • Fix one category of favicon update problem #4358
    • Fix rare mark-as-read bug #4456
    • Add missing extension hook freshrss_user_maintenance in CLI #4495
    • Rename conflicting function errorMessage() which exists on some platforms #4289
    • Fix remain of bookmarklet #4240
  • UI
    • Performance: Automatic simplification of layout for 1000+ feeds #4357
    • Performance: New option icons-as-emojis #4353
    • Manage feed configuration using a dynamic slider view #4226, #4297, #4394
    • New option for custom HTML logo/title in the main Web UI view #4369
    • Show errored, empty, muted feeds in statistics #4276
    • Improve configuration of registration form #3932
    • Improve subscription list drag & drop #3953
    • Improve extension manager #4181
    • Improve idle feeds list #4192
    • Improve feed link in normal view #4006
    • Improve browser notification for unread message #4193
    • Improve notification banner #4023
    • Improve new article banner #4037
    • Improve pagination + load more button #4125
    • Improve log view #4204
    • Improve unread articles counter in normal view #4166
    • Automatically set the category when adding a feed from an existing category #4333
    • Better PWA colours for mobile #4254
    • Improve article footer #4306
    • Various UI and style improvements #4205, #4212, #4218,
      #4238, #4455, #4298,
      #4383, #4452, #4455,
      #4466, #4471, #4472,
      #4474, #4498, #4502,
      #4504, #4558, #4546,
      #4541
  • Themes
  • Extensions
    • Allow extensions using entry_before_insert to change entry->isRead() #4331
  • i18n
  • API
  • Deployment
    • Docker: Performance: entrypoint fix buffering, problematic when importing large OPMLs during install #4417
    • Docker default image (Debian 11 Bullseye) updated to PHP 7.4.30 and Apache 2.4.54
    • Docker: alternative image updated to Alpine 3.16 with PHP 8.0.22 and Apache 2.4.54 #4391
      • Add PHP extensions php-openssl (used by PHPMailer) and php-xml (used by SimplePie) #4420
    • Docker: Upgraded dev image freshrss/freshrss:newest to PHP 8.2 #4420
    • Include PHP extensions in Composer for easier automated deployment #4497
    • Improved trimming of base_url to avoid some common configuration bugs, especially via Docker / CLI #4423
  • CLI
    • Allow empty DB prefix #4488
  • Compatibility
  • Security
    • Improved error page, properly returning HTTP 500 and CSP #4465
  • Misc.

FreshRSS 1.19.2

4 February 2022 at 09:27

A few highlights:

  • Improve dropdown menus on mobile view #4141, #4128
  • Fix regression regarding keeping read state after seeing favourites / labels #4178
  • Lots of code improvements, including improved support of PHP 8.1
  • And more!

Detailed tracked changes.

Full changelog:

  • Bug fixing
    • Fix regression regarding keeping read state after seeing favourites / labels #4178
    • Fix migration system on Synology and systems adding custom files to folders #4163
    • Fix wrong dropdown triangle UI for labels #4174
    • Fix minor UI bugs #4169, #4189, #4188
    • Fix minor SCSS details for the themes Ansum and Mapco #4146
  • UI
    • Improve dropdown menus on mobile view #4141, #4128
    • Improve menu icons #4004
  • Features
    • Support JSON import with date in milliseconds (e.g., Feedly) #4186
  • Deployment
    • Docker: development image :newest updated to PHP 8.1.1 and Apache 2.4.52 #3666
  • i18n
    • Improve i18n CLI #4131
    • Use typographic quotes #4133
    • Improve message regarding forced feeds #4145
    • Improve Czech #4151
    • Improve English #4161
  • Misc.
    • Increase PHPStan to level 5 for code quality, also fixing several PHP 8.1 warnings #4110, #4123, #4119, #4182
    • Clean temporary files generated by automated tests #4177
    • Add automated spell checking of the code using typos #4138, #4134
    • Enforce code style opening brace on same line in PHPCS #4122
    • Remove broken GitHub Action automatically adding the latest tag to git #4135

Absolutely Trucking Mad, Part 5

18 January 2022 at 05:00

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

17 January 2022 at 05:00

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

16 January 2022 at 09:00

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

15 January 2022 at 09:00

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

14 January 2022 at 05:00

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

12 January 2022 at 05:00

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

11 January 2022 at 05:00

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.”

❌