Jump to content

TSP

Clients
  • Posts

    6,674
  • Joined

  • Last visited

  • Days Won

    9

Reputation Activity

  1. Agree
    TSP got a reaction from JohnCourt in New Spam Prevention Features   
    The "Geolocation based registration filtering" sounds good, but maybe you could also provide an option to flip it to a whitelist? So you can choose a global setting that'll apply when a geolocation filter entry for the country is not present, and then you'll add the countries that should be treated differently/whitelisted instead.
  2. Like
    TSP got a reaction from DamonT in New Spam Prevention Features   
    The "Geolocation based registration filtering" sounds good, but maybe you could also provide an option to flip it to a whitelist? So you can choose a global setting that'll apply when a geolocation filter entry for the country is not present, and then you'll add the countries that should be treated differently/whitelisted instead.
  3. Like
    TSP got a reaction from wegorz23 in Bug: guests not getting ?do=getLastComment links on latest reply timestamp   
    I think it's good SEO-improvements is done, but in this case I feel it's at the expense of guest user experience. Why can't this be solved with indicating nofollow or adding it to robots.txt? If the link is not gonna take you to what you expect as a guest, then why have it be a link for them in the first place.
  4. Like
    TSP reacted to MMXII in [4.7.11] Account deletion request: No options what to do with the user's content?   
    When approving an account deletion request, the message says:
    "Please confirm that you want to delete %s. The member's content will be left in the database, but flagged as Guest content."
    What does this mean exactly? Will the content show up under an anonymous guest post, a post under the original username with an added "(Guest)" to it? And why is there no option to delete the user's content?
    When deleting an account manually, we get all sorts of options. If that is really missing here, then I suggest you add this to account deletion requests.
  5. Like
    TSP got a reaction from SeNioR- in Standalone web-app, iOS: should give feedback page is loading   
    It seems the only way to get push alerts on iOS is to choose "Standalone" as the display mode in the manifest.
    Problem I see is that if any page in the community takes a bit long too load, it looks to the user as if nothing is happening. In the standard Safari iOS browser you can see the loading indication under the address bar that pops up when you click something, but nothing like that appears in a standalone web-app. 
    Obviously slow loading times should be investigated and resolved, but I feel there should still be some feedback from the UI that loading is in progress, otherwise the user will just try to click multiple times. 
    I'm not sure if there's something that could be added to the manifest to resolve this, or if you could work on something else, but I think you should investigate some UX improvement here.
  6. Agree
    TSP got a reaction from Dreadknux in Standalone web-app, iOS: should give feedback page is loading   
    It seems the only way to get push alerts on iOS is to choose "Standalone" as the display mode in the manifest.
    Problem I see is that if any page in the community takes a bit long too load, it looks to the user as if nothing is happening. In the standard Safari iOS browser you can see the loading indication under the address bar that pops up when you click something, but nothing like that appears in a standalone web-app. 
    Obviously slow loading times should be investigated and resolved, but I feel there should still be some feedback from the UI that loading is in progress, otherwise the user will just try to click multiple times. 
    I'm not sure if there's something that could be added to the manifest to resolve this, or if you could work on something else, but I think you should investigate some UX improvement here.
  7. Like
    TSP got a reaction from Princess Celestia in Standalone web-app, iOS: should give feedback page is loading   
    It seems the only way to get push alerts on iOS is to choose "Standalone" as the display mode in the manifest.
    Problem I see is that if any page in the community takes a bit long too load, it looks to the user as if nothing is happening. In the standard Safari iOS browser you can see the loading indication under the address bar that pops up when you click something, but nothing like that appears in a standalone web-app. 
    Obviously slow loading times should be investigated and resolved, but I feel there should still be some feedback from the UI that loading is in progress, otherwise the user will just try to click multiple times. 
    I'm not sure if there's something that could be added to the manifest to resolve this, or if you could work on something else, but I think you should investigate some UX improvement here.
  8. Haha
    TSP reacted to Matt Finger in April Release Chat: Rescheduled!   
    Same. I actually read notifications now instead of pretend I didn't see emails
  9. Like
    TSP got a reaction from SeNioR- in Bug: guests not getting ?do=getLastComment links on latest reply timestamp   
    I think it's good SEO-improvements is done, but in this case I feel it's at the expense of guest user experience. Why can't this be solved with indicating nofollow or adding it to robots.txt? If the link is not gonna take you to what you expect as a guest, then why have it be a link for them in the first place.
  10. Like
    TSP got a reaction from SeNioR- in Change default action when deleting member   
    Can the default action when deleting a member be changed from Delete to Leave? 
    In our case it will always be "Leave" and "Continue to attribute" (we change member name to random string before deleting)
     
  11. Like
    TSP got a reaction from SeNioR- in Bug with PHP 8.1 and reporting when restricted moderator with full forum access   
    Ok, looks like this one has already been resolved. 
    Sorry
     
  12. Like
    TSP got a reaction from SeNioR- in Cache keys can conflict if both Data\Store and Data\Cache utilize Redis   
    After upgrading the server of one of our communities from PHP 7.4 to 8.1 I found the following error message popping up a lot: 
    TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given in /www/system/Data/Cache.php:151 This was caused by some custom code being referenced in a custom theme which requested a value with \IPS\Data\Cache::getWithExpire. This is how that function looks currently: 
    <?php public function getWithExpire( $key, $fallback=FALSE ) { if ( !isset( $this->$key ) ) { throw new \OutOfRangeException; } $data = $this->$key; if( \count( $data ) and isset( $data['value'] ) and isset( $data['expires'] ) ) { // ... } else { unset( $this->$key ); throw new \OutOfRangeException; } } After some debugging I found that $data was indeed a string, and thus can't be counted. My first thought was that you should change from \count( $data ) to \is_array( $data ) in this function, which I still think you should, but the next mystery was to figure out why it would be a string, since you always expect it to be an array, and I used the regular storeWithExpire to save to Cache.

    I found the culprit to be former abundance of caution, or what might have been a good reason at the time I implemented it (many many years ago): My code would first request the cache key from \IPS\Data\Cache::getWithExpire. If it didn't find it saved in Cache or it was expired, it would move on to check \IPS\Data\Store, with a 1/15 chance of unsetting it in \IPS\Data\Store to prevent the value from "never" being updated. If it didn't find it in any of them, then it would request the value from an external source and save it to both Data\Cache and Data\Store.
    But if both methods utilizes Redis, then it means the second method will just overwrite the cache entry that the first one saved. Data\Cache stores an array to the cache key in Redis, but then Data\Store would immediately overwrite the same cache entry with a string. 
    You can reproduce with this code: 
    <?php require_once 'init.php'; $cacheKey = 'storeItPlease3'; $saveToCache = 'Hello world :-) | ' . date(DATE_RFC2822); $expire = \IPS\DateTime::ts( time() + 60 ); try { $cached = \IPS\Data\Cache::i()->getWithExpire( $cacheKey, TRUE ); echo $cached . "\n"; } catch ( \OutOfRangeException $e ) { try { $cached = \IPS\Data\Store::i()->{$cacheKey}; echo "Found in store: {$cached}\n"; if ( rand(1, 15) == 15 ) { unset(\IPS\Data\Store::i()->{$cacheKey}); } } catch(\OutOfRangeException $e2) { echo "Couldn't find in Data\Store!\n"; } echo "Didn't find {$cacheKey}. Write it!\n"; \IPS\Data\Cache::i()->storeWithExpire( $cacheKey, $saveToCache, $expire, TRUE ); \IPS\Data\Store::i()->{$cacheKey} = $saveToCache; } While I understand this kind of situation arising being rare and you probably don't expect people using both methods simultaneously like this, I thought I would still make you aware of it in case you encounter similar reported issues in the future and maybe make some changes to your code. Having a key name be the same in both Store and Cache could also happen by accident, although I guess the chance is rare.
     
    Consider use is_array() rather than, or in addition to count() in \IPS\Data\Cache::getWithExpire (Do you even need that first check, maybe it's enough with the isset()-calls?)
      Consider prepending or appending to the cache key for one of the storage methods to differentiate entries in Redis saved by Store and Cache
    (Alternatively document that one shouldn't use a key for Store that's already used by Cache or vice versa)
  13. Like
    TSP got a reaction from Afrodude in Cache keys can conflict if both Data\Store and Data\Cache utilize Redis   
    After upgrading the server of one of our communities from PHP 7.4 to 8.1 I found the following error message popping up a lot: 
    TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given in /www/system/Data/Cache.php:151 This was caused by some custom code being referenced in a custom theme which requested a value with \IPS\Data\Cache::getWithExpire. This is how that function looks currently: 
    <?php public function getWithExpire( $key, $fallback=FALSE ) { if ( !isset( $this->$key ) ) { throw new \OutOfRangeException; } $data = $this->$key; if( \count( $data ) and isset( $data['value'] ) and isset( $data['expires'] ) ) { // ... } else { unset( $this->$key ); throw new \OutOfRangeException; } } After some debugging I found that $data was indeed a string, and thus can't be counted. My first thought was that you should change from \count( $data ) to \is_array( $data ) in this function, which I still think you should, but the next mystery was to figure out why it would be a string, since you always expect it to be an array, and I used the regular storeWithExpire to save to Cache.

    I found the culprit to be former abundance of caution, or what might have been a good reason at the time I implemented it (many many years ago): My code would first request the cache key from \IPS\Data\Cache::getWithExpire. If it didn't find it saved in Cache or it was expired, it would move on to check \IPS\Data\Store, with a 1/15 chance of unsetting it in \IPS\Data\Store to prevent the value from "never" being updated. If it didn't find it in any of them, then it would request the value from an external source and save it to both Data\Cache and Data\Store.
    But if both methods utilizes Redis, then it means the second method will just overwrite the cache entry that the first one saved. Data\Cache stores an array to the cache key in Redis, but then Data\Store would immediately overwrite the same cache entry with a string. 
    You can reproduce with this code: 
    <?php require_once 'init.php'; $cacheKey = 'storeItPlease3'; $saveToCache = 'Hello world :-) | ' . date(DATE_RFC2822); $expire = \IPS\DateTime::ts( time() + 60 ); try { $cached = \IPS\Data\Cache::i()->getWithExpire( $cacheKey, TRUE ); echo $cached . "\n"; } catch ( \OutOfRangeException $e ) { try { $cached = \IPS\Data\Store::i()->{$cacheKey}; echo "Found in store: {$cached}\n"; if ( rand(1, 15) == 15 ) { unset(\IPS\Data\Store::i()->{$cacheKey}); } } catch(\OutOfRangeException $e2) { echo "Couldn't find in Data\Store!\n"; } echo "Didn't find {$cacheKey}. Write it!\n"; \IPS\Data\Cache::i()->storeWithExpire( $cacheKey, $saveToCache, $expire, TRUE ); \IPS\Data\Store::i()->{$cacheKey} = $saveToCache; } While I understand this kind of situation arising being rare and you probably don't expect people using both methods simultaneously like this, I thought I would still make you aware of it in case you encounter similar reported issues in the future and maybe make some changes to your code. Having a key name be the same in both Store and Cache could also happen by accident, although I guess the chance is rare.
     
    Consider use is_array() rather than, or in addition to count() in \IPS\Data\Cache::getWithExpire (Do you even need that first check, maybe it's enough with the isset()-calls?)
      Consider prepending or appending to the cache key for one of the storage methods to differentiate entries in Redis saved by Store and Cache
    (Alternatively document that one shouldn't use a key for Store that's already used by Cache or vice versa)
  14. Like
    TSP reacted to Matt in October developer's blog out now   
    Hi all,
    Just a note to say that the October developer's blog is out now. It has a little information about our holiday release schedule and a new developer working with us!
  15. Like
    TSP got a reaction from SeNioR- in \IPS\CACHING_LOG: Can't open dialogs/more information on all entries   
    I activated the \IPS\CACHING_LOG to debug some issues, but I noticed that I could only open the dialog/modal for the top ones, the cache entries near the bottom I was unable to open the dialog for. 
    Looking into the HTML, the issue seems to be caused by a sudden change in the naming style of the div that's referenced by data-ipsDialog-content. See the attached image: 

    For the working items (that brings up the dialog) the form of the name is #elCachingLog<timestamp>_<id>_menu, but then it suddenly changes to #elCachingLog<timestamp>,<id>_menu (It uses , instead of _ between the timestamp and id)
  16. Like
    TSP got a reaction from SeNioR- in PHP8 will be the minimum version from November 2022   
    This is what I would've done. I was in a similar situation as you, but I got us upgraded from 4.5 to 4.7.3 last week. This week I'm in the process of upgrading our servers to PHP 8.1.
    Then I might try to update to 4.7.4 sometime next week. 
    So download 4.7.3 now from the client area and do a manual upgrade on PHP 7.4. Then update to PHP 8 and then update to 4.7.4++
  17. Agree
    TSP got a reaction from 13. in Moderation History on items, filtering out editing of ones own comments   
    Hi, 
    On topics with a lot of replies the moderator history log can contain a lot of edited comments. Could you consider automatically filter out editing actions where the author of the post and the member editing the post is the same?
    Or let us be able to filter out these editing actions of ones own posts manually, by providing a checkbox we can check, or something.
    While you're at it, you could even consider introducing more filter options for this tool. For example being able to choose which actions to show. (multi-checkbox)
    But I think the most useful filter option, that makes the most sense, is to filter out moderation actions where an account edits one of their own comments. 
    This is one example from our community:

    Thank you for the consideration. 
  18. Thanks
    TSP reacted to Daniel F in Caching and views/hits increase   
    There’s a great way to utilize the cloudflare workers for the guest page counts, so that the page count is increased even if the guest gets only the cached page and the original request never makes it to your own server. 
    It’s going to take some time, but I’ll share the instructions ( or app) in few weeks 
  19. Haha
    TSP got a reaction from Matt in PHP8 will be the minimum version from November 2022   
    I didn't know November only lasts two weeks this year 🙀
    Which dates gets thrown under the bus?
  20. Haha
    TSP got a reaction from Jim M in PHP8 will be the minimum version from November 2022   
    I didn't know November only lasts two weeks this year 🙀
    Which dates gets thrown under the bus?
  21. Haha
    TSP reacted to Marc Stridgen in PHP8 will be the minimum version from November 2022   
    Whichever happen to be the coldest. We will let you know 😄 
  22. Haha
    TSP got a reaction from Daniel F in PHP8 will be the minimum version from November 2022   
    I didn't know November only lasts two weeks this year 🙀
    Which dates gets thrown under the bus?
  23. Like
    TSP got a reaction from Kjell Iver Johansen in IPS 4: Norwegian Translation (Norsk, bokmål)   
    Har oppdatert språkpakken for 4.7.
  24. Agree
    TSP got a reaction from Percival in Option to automatically follow content anonymously   
    When you specifically choose to follow content you get the option to choose whether you follow it anonymously or not. 
    However, when you follow content automatically because you reply it's always followed publicly. Maybe implement a setting members can choose together with the other notification settings on what should be the default behaviour. 
  25. Like
    TSP got a reaction from Ibai in Are all notifications marked as read when bell is clicked?   
    I've also received this feedback from multiple members and communities, that members find it confusing they are all marked as unread when opening the notifications. 
    Has there been any more discussion on this internally?
×
×
  • Create New...