<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        >
<channel>
  <title>asgaard</title>
  <description></description>
  <link>https://blog.asgaard.co.uk/2021/1</link>
  <lastBuildDate>Tue, 12 May 26 17:23:54 +0000</lastBuildDate>
  <language>en</language>
  <count>4</count>
  <offset>0</offset>
      <item>
    <title>Are app store reviews reliable?</title>
    <link>https://blog.asgaard.co.uk/app-store-reviews-reliable</link>
    <pubDate>Fri, 29 Jan 21 11:05:57 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/app-store-reviews-reliable</guid>
    <description><![CDATA[
<p>
Are app store reviews reliable? Well, anyone who knows anything about app store reviews, or online reviews in general, knows the answer is no. App reviews are gamed by developers and the overall rating generally corresponds to how much the developer games the system rather than anything useful.
<p>
But that&#039;s not really what prompted me to write this.
<p>
There is an internet drama being played out between Reddit&#039;s <a href='https://reddit.com/r/wallstreetbets'>WallStreetBets</a> (WSB) and some hedge funds. WSB has pumped up the price of Gamestop stock, which has led to various hedge funds losing a huge amount of money. This should be fine - the hedge funds were gambling on something that didn&#039;t happen, and they knew the risks.
<p>
However, in response to this, some platforms have restricted the trading of Gamestop stocks. This infuriated a lot of people who were investing in Gamestop stocks, as the platforms&#039; behaviour influenced the price of the stock.
<p>
Predictably, a lot of people started leaving one-star reviews on the Play Store, and, for ex[...]]]></description>
    <content:encoded><![CDATA[
<p>
Are app store reviews reliable? Well, anyone who knows anything about app store reviews, or online reviews in general, knows the answer is no. App reviews are gamed by developers and the overall rating generally corresponds to how much the developer games the system rather than anything useful.
<p>
But that&#039;s not really what prompted me to write this.
<p>
There is an internet drama being played out between Reddit&#039;s <a href='https://reddit.com/r/wallstreetbets'>WallStreetBets</a> (WSB) and some hedge funds. WSB has pumped up the price of Gamestop stock, which has led to various hedge funds losing a huge amount of money. This should be fine - the hedge funds were gambling on something that didn&#039;t happen, and they knew the risks.
<p>
However, in response to this, some platforms have restricted the trading of Gamestop stocks. This infuriated a lot of people who were investing in Gamestop stocks, as the platforms&#039; behaviour influenced the price of the stock.
<p>
Predictably, a lot of people started leaving one-star reviews on the Play Store, and, for example, Robinhood&#039;s rating plunged from around 4.2 to 1 star.
<p>
Unpredictably, <a href='https://www.theverge.com/2021/1/28/22255245/google-deleting-bad-robinhood-reviews-play-store'>Google has since removed hundreds of thousands of one star reviews from Robinhood</a>, restoring their original rating of 4.2. Google has questions to answer about why they&#039;re deleting reviews that voice legitimate user complaints.
<p>
Personally I think it&#039;s time we dumped store ratings. They&#039;re artificial and unhelpful at the best of times, and if app stores are going to artificially manipulate them then they&#039;re completely without use.]]></content:encoded>
  </item>
      <item>
    <title>The Amazon App Store is not great</title>
    <link>https://blog.asgaard.co.uk/amazon-app-store</link>
    <pubDate>Sun, 03 Jan 21 18:45:58 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/amazon-app-store</guid>
    <description><![CDATA[
<p>
Today, I was trying to get <a href='https://asgaard.co.uk/wellburrito'>Wellburrito</a> onto the Amazon App Store.
<p>
I didn&#039;t expect it to pass validation first time because it has dependencies on a few Google services that I wasn&#039;t sure existed on Amazon devices. I expected it to fail with a message saying this, and then we&#039;d have to discuss whether or not to launch a limited version of it with those dependencies removed.
<p>
That didn&#039;t happen.
<p>
What actually happened was that it failed validation with the following message:<blockquote>
Your app submission does not meet one or more of our acceptance criteria for some or all targeted devices. Failure reason(s) are listed below:

We are unable to test your app as it does not function as intended. The app exits/ force closes/ freezes/ displays an error message after being launched. Please fix the issue and re-submit the app.
</blockquote>
<p>
This is a resoundingly unhelpful message. We&#039;re not going to randomly change our code and hope it passes validation. Why doesn&#039;t Amazon include the logcat output so[...]]]></description>
    <content:encoded><![CDATA[
<p>
Today, I was trying to get <a href='https://asgaard.co.uk/wellburrito'>Wellburrito</a> onto the Amazon App Store.
<p>
I didn&#039;t expect it to pass validation first time because it has dependencies on a few Google services that I wasn&#039;t sure existed on Amazon devices. I expected it to fail with a message saying this, and then we&#039;d have to discuss whether or not to launch a limited version of it with those dependencies removed.
<p>
That didn&#039;t happen.
<p>
What actually happened was that it failed validation with the following message:<blockquote>
Your app submission does not meet one or more of our acceptance criteria for some or all targeted devices. Failure reason(s) are listed below:

We are unable to test your app as it does not function as intended. The app exits/ force closes/ freezes/ displays an error message after being launched. Please fix the issue and re-submit the app.
</blockquote>
<p>
This is a resoundingly unhelpful message. We&#039;re not going to randomly change our code and hope it passes validation. Why doesn&#039;t Amazon include the logcat output so we can see what the crash actually is? 
<p>
As such, Wellburrito will not be available through Amazon for the foreseeable future.]]></content:encoded>
  </item>
      <item>
    <title>Wellburrito</title>
    <link>https://blog.asgaard.co.uk/Wellburrito-mood-tracking-app</link>
    <pubDate>Fri, 01 Jan 21 19:57:44 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/Wellburrito-mood-tracking-app</guid>
    <description><![CDATA[
<p>
I&#039;m very pleased that we have released the first public version of Wellburrito. 
<p>
Wellburrito is more than just a mood tracking app, it&#039;s a full wellbeing app focusing on mood and custom metric tracking as well as cognitive behavioural therapy (CBT) exercises. 
<p>
Technically, Wellburrito is developed using the Ionic framework. Data is intentionally stored purely locally on the device, i.e. without a server, for the user&#039;s privacy. For this we use an SQLite database, which is optionally backed up to Google Drive on a regular schedule. Android does actually take care of restoring the database on app reinstallation through Google Play, as well, if the user has it enabled, via <a href='https://developer.android.com/guide/topics/data/backup'>Android&#039;s auto-backup feature</a>.
<p>
On the mid to long term roadmap is reducing dependency on things beyond our control that aren&#039;t really of the quality or flexibility we&#039;d like. For example, we&#039;d like to expand the reminders system such that users can interact directly with reminders. When a medication remi[...]]]></description>
    <content:encoded><![CDATA[
<p>
I&#039;m very pleased that we have released the first public version of Wellburrito. 
<p>
Wellburrito is more than just a mood tracking app, it&#039;s a full wellbeing app focusing on mood and custom metric tracking as well as cognitive behavioural therapy (CBT) exercises. 
<p>
Technically, Wellburrito is developed using the Ionic framework. Data is intentionally stored purely locally on the device, i.e. without a server, for the user&#039;s privacy. For this we use an SQLite database, which is optionally backed up to Google Drive on a regular schedule. Android does actually take care of restoring the database on app reinstallation through Google Play, as well, if the user has it enabled, via <a href='https://developer.android.com/guide/topics/data/backup'>Android&#039;s auto-backup feature</a>.
<p>
On the mid to long term roadmap is reducing dependency on things beyond our control that aren&#039;t really of the quality or flexibility we&#039;d like. For example, we&#039;d like to expand the reminders system such that users can interact directly with reminders. When a medication reminder comes up, we&#039;d like to be able to press a little &quot;Yes, I&#039;ve taken it&quot; button. When the mood journal reminder comes up, it&#039;d be good if the user could select a mood within the reminder. Those things are currently not possible because the reminders library we&#039;re using doesn&#039;t support it. Unfortunately, getting the control we need means writing our own library. 
<p>
Similarly, we&#039;d like charts to better fit with the look and feel and branding of the app, but we&#039;ve pushed the current charting solution to its boundaries.
<p>
There are a few little things like this which seem like relatively small features but require a large amount of work. We&#039;ve pushed these back to a future version for the moment, in favour of getting something functional in front of users.
<p>
In terms of features, we&#039;d also like to implement much deeper analysis. Currently we have superficial analysis and reporting of trends and correlations, but there is <em>a lot</em> more we could do with this. Again, this is a &#039;version 2&#039; feature. 
<p>
You can read more about the <a href='https://asgaard.co.uk/wellburrito'>Wellburrito wellbeing, mood tracking and mindfulness app</a> on the official page.
<p>
You can download the <a href='https://asgaard.co.uk/wellburrito'>Wellburrito wellbeing app</a> on <a href='https://play.google.com/store/apps/details?id=uk.co.asgaard.wellbeing'>Google Play</a>.]]></content:encoded>
  </item>
      <item>
    <title>Ionic Native</title>
    <link>https://blog.asgaard.co.uk/ionic-native</link>
    <pubDate>Fri, 01 Jan 21 10:21:58 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/ionic-native</guid>
    <description><![CDATA[
<p>
Ionic is a framework for developing mobile apps. I&#039;ve completed a few successful projects using Ionic. I like Ionic. I think that as far as cross platform mobile development goes, Ionic is pretty good.
<p>
Ionic was built on Cordova, and has been gradually moving away from it with Capacitor. I like Capacitor better than Cordova. I think they&#039;ve done a really good job.
<p>
Ionic Native is a set of Cordova plugins that they&#039;ve provided a wrapper for. If you look at the list, it looks very impressive. If you try to use any of them, though, it&#039;s a toss up as to whether you end up with something production standard. Some of the plugins there shouldn&#039;t be on the list because they&#039;re just broken.
<p>
The Local Notification plugin is a good example of this. Currently, it&#039;s pointing at the underlying Cordova plugin version 0.9.0-beta2. At the time of writing, this is around three years old. The most recent version is 15 months old. So not only is the plugin not actively maintained, we&#039;[...]]]></description>
    <content:encoded><![CDATA[
<p>
Ionic is a framework for developing mobile apps. I&#039;ve completed a few successful projects using Ionic. I like Ionic. I think that as far as cross platform mobile development goes, Ionic is pretty good.
<p>
Ionic was built on Cordova, and has been gradually moving away from it with Capacitor. I like Capacitor better than Cordova. I think they&#039;ve done a really good job.
<p>
Ionic Native is a set of Cordova plugins that they&#039;ve provided a wrapper for. If you look at the list, it looks very impressive. If you try to use any of them, though, it&#039;s a toss up as to whether you end up with something production standard. Some of the plugins there shouldn&#039;t be on the list because they&#039;re just broken.
<p>
The Local Notification plugin is a good example of this. Currently, it&#039;s pointing at the underlying Cordova plugin version 0.9.0-beta2. At the time of writing, this is around three years old. The most recent version is 15 months old. So not only is the plugin not actively maintained, we&#039;re also out of date even by the plugin&#039;s standards. 
<p>
Unfortunately it doesn&#039;t work very well on modern Android operating systems. Trying to schedule a repeating notification causes the plugin to go into an infinite loop until the OS steps in and kills it, so the workaround is to set a notification with a large &#039;count&#039;. This causes very slow interaction with the notification in future, presumably because the operating system is dealing with a notification instance per count. This is something you can work around by scheduling, say, 100 days in advance and making sure your app reschedules when you&#039;re getting close to the end of the 100 days. You shouldn&#039;t have to do this, but it&#039;s an option.
<p>
However, there&#039;s a much more serious problem in that the plugin can&#039;t schedule notifications that persist past the device rebooting. There are a few use cases where this may be acceptable, but for a general notification system, this is a deal-breaking limitation that you don&#039;t find out about until testing (and physically testing notifications is tedious and error prone enough already).
<p>
Then there&#039;s the in app purchases plugin. The IAP plugin is bizarre. When dealing with subscriptions, there is no way of simply querying whether the user owns a subscription, because the &#039;owned&#039; field isn&#039;t reliable. When the plugin starts up, a subscription goes through a variety of states, but always starts with owned = false. Maybe it reaches owned = true, maybe it doesn&#039;t. The point is that owned = false is never a useful piece of information because there&#039;s no guarantee it&#039;s correct. This means that there is no completely reliable way of determining whether a user&#039;s subscription has expired. You have to look at the subscription billing period and be aware of when it may have expired, and if you go a certain length of time with successful communication with the plugin but without seeing owned = true you then assume that it must have expired. This is absurd, and I would be extremely surprised if the underlying billing library exposes subscription information in this way.
<p>
Ionic should not be providing wrappers (and exposure) for these plugins unless they meet a certain standard. It&#039;s a waste of developers&#039; time to attempt to use sub-standard plugins and will fuel a perception that it&#039;s difficult to achieve production quality software using Ionic.
<p>
Update: Another one - <a href='https://ionicframework.com/docs/native/native-audio'>Ionic Native Audio</a> doesn&#039;t work with Capacitor because it hard codes audio assets as existing within the www/ directory. In Capacitor, this directory has been named public/ so the plugin can&#039;t find any of your audio assets. Again, why is this being advertised by Ionic, with Capacitor instructions?
<p>
See also <a href='https://markwatkinson.com/posts/ionic-cordova-quality'>Ionic Native quality issues</a>.]]></content:encoded>
  </item>
  </channel>
</rss>