Jump to content


KT Walrus

  • Content Count

  • Joined

  • Last visited


About KT Walrus

  • Rank
    Community Regular
  • Birthday 11/11/2014

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. You could use an app template like https://www.webviewgold.com to create an app for iOS and Android. I don't know how well it works, but I think their app template supports push notifications and other native app features.
  2. I would start by adding a Service Worker to the ICS JavaScript. This would allow for efficient caching of posts and lists of posts. In the end, ICS4 is mostly about posts and lists of posts. For my ICS4 custom apps, the posts visible to the user can be pre-fetched (like email mailbox messages) to be read offline. My apps only publish posts once a day so acting like an email app is very desirable. Sync the posts when app is online and don't use HTTP requests when browsing (except to fetch attachments and other page elements not in the cache). Next, I would work on adding "Add to Home Screen" support to help users discover the PWA app. Not much sense in providing PWA apps only for those savvy enough to install them unprompted. Maybe ICS4 already has good support in this area? Also, the ICS4 default theme needs more work to make the PWA for ICS feel like a well-designed native app.
  3. Yes. My focus is on PWA for mobile since it is critical that any website have a mobile app these days, but desktop will eventually follow because the APIs for PWA are browser APIs and not specific to the OS (mobile or desktop).
  4. Yes. PWA is a mobile app that still runs with its own browser (so it looks like a native app). You can even place your PWA in the app store (branded for your site) to make installation easier. Currently, on iOS, you "install" PWAs by visiting a website that has a PWA and doing "Add to Home Screen" in the Sharing menu. I'm not an Android user, but I think Chrome even prompts you to "install" a site's PWA when you first browse it. If you want to try PWA on your iPhone (or Android phone), try out Twitter's PWA. Just browse to the website in Safari (or Chrome) and "Add to Home Screen". It is well done. Twitter's native app is probably based on the same PWA technologies only the native app isn't restricted in what JavaScript can do. BTW, PWAs aren't a single technology but a collection of web APIs in a browser. The apps are designed to be "progressive" in that if the browser doesn't support a particular API, the app will still work (only probably not as full featured to those using a Chrome-based browser). Safari only has partial PWA support at this point, but iOS 12.2 made some decent gains towards fuller PWA support.
  5. Are you actively working on adding enough PWA features to have a good user experience on iOS and Android devices? I've been playing around with Twitter's PWA on iPhone and it is almost indistinguishable from their native app (with only a few differences that I've detected). In fact, the Twitter PWA app does a better job at displaying lists of posts/users than the Invision default theme on my iPhone. It is super fast due to the caching service worker in the PWA and feels almost like a good native app should (even though Safari still has a ways to go to add the support for PWAs that Chrome on Android enjoys). I need a good mobile experience for my site and something close to Twitter's PWA would be very welcome. When will we see PWA added to ICS4?
  6. Read/write separation isn't the same as read-only access to the database from user HTTP requests. Separating the writes asynchronously wouldn't help much unless you separate out the whole transaction (e.g., run _createMember()) asynchronously in an admin task on behalf of the currently logged-in member. There is still a possibility for a hacker to find a hole to execute an update query they craft, but it does make it more unlikely (since only the admin task has permission to update tables in the database). You could extend this further to have multiple admin mysql users so the specific mysql user that only has update permissions on the tables the transaction is supposed to execute. This would provide even greater security as most transactions would not allow promoting a member to the admin group (which is the holy grail for hackers, I'd think). So, @bfarber, I argue that the benefits of this proposal to make IPS5 transaction safe and asynchronous (out of the HTTP request processing) out-weigh the small re-factoring of PHP code required.
  7. Consider re-organizing PHP code that updates the database so that these updates can be performed asynchronously and not by HTTP while the user waits for the page to load. For example, the _createMember() function called during registration could be executed asynchronously (including sending the verification email). Some existing code may have to change to make all database writes done asynchronously (for example, showing the post immediately after queuing the database updates might not have been committed yet to the database, so the UX might have to change slightly to show a "post is being moderated" and should be approved in a few minutes). This reorganization of database updates has the following advantages: These PHP functions can be executed by a system task and doesn't slow down the page loads waiting on all the updates to complete. If all database writes are off-loaded to a system task (except maybe those in the ACP), the mysql database user needs only read-only permissions to the database (making IPS5 even less vulnerable to unauthorized database writes and read-only MySQL slaves may be utilized to add reliability and application performance). The admin could configure their installation to use RabbitMQ (or even Redis) to queue these system tasks for execution by one or more PHP workers. Each individual task could be marked as "may be executed in parallel" or "must be executed serially". Parallel execution probably wouldn't be necessary except for the busiest sites. The PHP workers would normally execute these tasks within a few seconds of being queued (especially if multiple PHP workers configured). The entire set of database writes can be applied to the database in a single SQL transaction (using BEGiN/COMMIT statements surrounding the call to the PHP function) instead of using AUTOCOMMIT for each individual query. Using SQL transactions properly is better for database integrity and for database replication (used by sites that require High Availability). Many other minor advantages not detailed above. Using asynchronous tasks to perform all database updates also would permit doing other functions asynchronously (like sending notifications, queuing outgoing emails, even possibly invalidating a Redis cache only when data in the cache needs to be updated due to database changes to particular rows in a table). More and more features in the suite might be done asynchronously over time (like video and audio transcoding, etc).
  8. It is super easy to embed mp3 files by using HTML5 <audio> tag. Don't know why IPS hasn't done this already. The suite embeds video using the HTML5 <video> tag though. Note that you need an HTML5 Audio/Video player to provide adaptive streaming of video (HLS or DASH) which is really a requirement for any site with lots of video.
  9. Don't forget about Desktop PWA support as well. Really want my users to only use the PWA app in the future after downloading the app from their first visit to my site. And, the UI should make the experience as good as the underlying platform support can make it. I want my users to think my site is an app and not just a bookmark in their browser. Bookmarks can quickly get forgotten and it isn't that great for long term engagement. An app with SMS notifications is hard to forget about unless they explicitly delete the app or block the notifications.
  10. I'm asking that version 5 have as much support for both desktop and mobile PWAs. The lack of native apps for my website is a real impediment to user growth and PWA technology will probably be fully supported on all platforms by the time version 5 ships. I hope this is a very high priority at IPS for version 5. Here are some Google links about PWAs: Overview Desktop PWAs Progressive Web App Checklist
  11. I don't know much about Vue.js but when I watched a few YouTube videos to learn more, it seemed like it might fit well into the templating system and make junior coders like me more productive mixing HTML, CSS, and Javascript in the same page. And, IPS5 seems like the only opportunity to make such a big change like this. I really want IPS5 code to be pushed to the edge (either on the user's device or supporting Cloudflare Workers). I can see that there is a chance that PWA apps will eventually be as nice as native apps on mobile devices within a year or two (if Apple finally gets onboard) and you need to write most of the user's interactions with your website in JS (and cache data locally) to do it. For the site that I'm working on, it would be good to be able to cache the latest 1000 topics (for index lists), a latest threads in the unread activity stream and the mini-profiles of the most recent 1000 members locally within the browser and use that cache for building various lists/pages just like an email client syncs messages/indexes locally when it periodically syncs with an IMAP server. This makes email apps very responsive while IPS4 is not as good a UX on mobile. Reading your mail is instantaneous, but browsing forums is not (especially when not on Wi-Fi where network latency is usually very high).
  12. Please consider using Vue.js in 5.0. This framework would integrate well into the theme templates to move more processing into the browser and is very user-friendly to work with.
  13. Turns out that the company behind tus.io are implementing a very nice looking photo and video uploader called Uppy at https://uppy.io. This open source project appears to be in very active development, but looks very interesting and maybe something to replace Plupload: After playing around with this, I think it will be great for uploading photos and videos on my site since it supports uploading from Google Drive, Dropbox, Webcam, and other places users might have their videos and not just on their devices.
  14. I am working on using Cloudflare Stream for user videos on my site. Cloudflare Stream uses tus to upload the large video files to Cloudflare. I searched the web for a tus client implemented in PHP so I could add support for uploading video files to Cloudflare to my ICS4 apps. I found ankitpokhrel/tus-php GitHub repos that implements both a PHP tus server and a PHP tus client. Researching this further led me to tus.io where you can find out everything about this protocol including an official implementation of a Javascript tus client at the tus/tus-js-client GitHub repo. Cloudflare and Vimeo apparently use tus. Seems to me that IPS should consider adding a tus file uploader/client/server to ICS4. Tus could possibly replace the existing Plupload JS, or maybe add a large file video/photo upload page available from a link in the user menu labeled "Upload Media...". This would give the user the ability to upload very large files similar to Plupload's Queue Widget using tus which apparently has full support for things like checksums, pause, and resume on a page that would allow the user to upload multiple files in batch (where the user identifies the files to upload upfront, starts the uploading process with the ability to suspend/resume/cancel if needed). Hopefully, IPS devs can look into adding tus for file uploads in a future version of the suite and possibly deprecating Plupload or making it an admin choice as to which JS to use for file uploading by users.
  15. I support this idea. Also, on mobile, it would be nice to increase the default font-size for pages. This would help a bunch for those with less than 20/20 vision, myself included. I hate having to zoom the page to read text comfortably since the entire width of the page no longer shows in the viewport (leading to a bunch of swiping left and right). Perhaps a Switch to Dark mode and an increase default font-size could be added to the hamburger menu to quickly control these theme settings by the user.
  • Create New...