I don't know what they did in VS2019 but there was clearly a ridiculous perf hit in many modules, especially Intellisense related.
While I sort of liked the AI-predictions, they introduced a serious lag in typing and every couple of seconds typing would nearly freeze. After I turned those off, typing became smoother but still slightly laggy (sort of like typing on a remote terminal on the other side of the world), and the predictions would pop up much slower than VS2017.
Lots of other perf issues like "Find in files" being 3x slower than in VS2017. Or adding a new class to a file wastes several seconds looking up templates somewhere. I saw dozens of bugs filed for these issues over the past few months and most were resolved as "Fixed" (allegedly) or "No repro" but in practice the IDE perf is still IMO unacceptable.
I had the same experience moving from visual studio 2017 to visual studio 2019. I tried disabling every possible IntelliSense related feature and there was always a small but perceptible amount of input latency that drove me crazy.
Eventually I was forced to switch over to jet brains rider and I haven't looked back since, which is a shame because I really enjoyed using the previous versions (2010, 2012, 2015, and 2017).
Yeah.. I mean, I understand metrics... but there are some things that just won't see broad complaints, but are indeed issues. Not everyone will be a squeaky wheel, doesn't mean those "less interaction" issues aren't meaningful/bad. Not to mention having to create yet another profile to even interact with the issues... if an issue is created, I won't always login even to give a +1/heart on something.
We've also run an app with 1 million+ users for a few years, and I can confirm that notifications are a wreck on both platforms, but IMO even more so on Android/FCM.
In fact most of our calculations show that we have never gone past 85% delivery of high-pri Android notifications to valid FCM tokens. By high-pri here we mean direct chat messages in an active 1-on-1 chat conversation. This has caused many users to abandon the app since they assume the system to be unreliable. One of the main reasons seems to be that many Android phone vendors have simply whitelisted WhatsApp, Facebook and a couple of famous apps and then dumped every single other app into some kind of "kill if in background and completely forget about it" bucket. In some cases it can be fixed by asking the users to wander deep into the phone settings and toggle some switches. We brought the delivery rate from the low 80s to 85% by literally buying a bunch of the phone models we had heard had issues and trying to repro what was happening then popping up custom instructions for users like "looks like you are running this kind of phone which in general will not deliver notifications, please go to settings -> blah". But the whole thing has been a gigantic game of cat and mouse which really shouldn't be in the hands of individual app developers. In many cases the FCM system does not return any error code.
I'd be curious to hear if anyone here has achieved 95%+ FCM delivery rates on Android apps.
Until last week I would have been confused by this, but last week my Pixel 4 broke.
While waiting for it to be repaired, I bought a cheap Chinese phone to use as a backup - not sure of the brand but it cost £200.
I don't know what the fuck they did to the operating system, but notifications are completely unreliable. I think there's possibly some aggressive app termination going on, maybe for battery or memory usage. Either way, most of the time I would only get a notification once I open the app. Some apps seem to be more reliable than others - maybe due to whitelisting as you say.
In hindsight, Google allowing these no-QA phones to use the Android branding was a big mistake.
Killing idle apps, including Services, is a feature in Android to conserve battery life and to give memory to Activities in more recent use. This might not be as noticeable on high-end-phones.
A lot of shitty written apps are not aware of this and think they can run some while loop in the background to poll their own backend 10 times per second. Eventually that will get killed.
The solution to this is the push apis, or for apps that truly need a background loop to present a persistent notification aka "foreground-service", so the user is aware something heavy is going on in the background. Hearing FCM, which is the suggested push solution, having delivery issues above is not very comfortable.
I'm developing an app with critical realtime notifications. Do you mind if I ask you a few questions?
1. Does your 85% delivery rate apply to FCM "notification messages" (displayed to user) or only to "data messages" (processed by app)?
2. Do some devices fail to deliver messages when your app is in the foreground? And does it happen often with US-based devices?
3. When the app is in the background, how long does it take for it to stop receiving notifications? I know the answer must vary by device.
4. How do you determine delivery rate of notification messages? I believe those are handled entirely by Android OS and app code runs only when they are tapped. I'm using Flutter and have not yet dug into the details of how Android processes and displays notifications.
5. Do you use FCM to deliver APNS messages?
6. How reliable are APNS messages to a foreground app for US users I'm considering launching iPhone-only.
My app helps people make appointments (dates). It uses notifications to remind users of their upcoming and imminent appointments. The backend detects when a user has not tapped a critical notification and sends them an SMS. This should reach the user even if they didn't see the notifications or they uninstalled the app without cancelling their appointments.
I also implemented real-time chat using FCM data messages with a slow poll fallback. If data messages are not reliable, then I will need to replace the slow poll with a realtime push service. That will be a significant cost in added complexity. I would like to put off that work.
I'm a solo bootstrapper. Working with Android and FCM has been daunting. Would you be interested in mentoring me a few hours a month? I can pay you. My email is in my profile.
There are some well-intended reasons for this, but unfortunately, they've resulted in many problems that don't have simple solutions.
To help increase battery life, both Apple and Google provide a standard notification backend that keeps a single background connection open for every device and routes notifications to the device. Google and Apple require the use of their systems for push notifications (APNS and FCM).
BUT... Google's services are blocked in mainland China. So, developers in that region have resorted to building their own push notification systems. No single standard has emerged, so apps may use several third-party FCM alternatives or entirely develop their own.
Inevitably if you live in China and you have hundreds of apps on your device, with each one waning to keep its own background connection open, your battery won't last more than a few hours.
As a result, OEMs in China modify the operating system on devices they sell to prevent apps from having background connections open. Users are expected to manually go into their settings and allow specific applications to keep connections open. Sometimes OEMs will have pre-set list of popular apps that are automatically included.
If one of these devices is sold outside of China, it sees FCM in the same way as any other background connection and kills it.
Now here's where it gets crazy:
1. Many devices sold on eBay and in other channels are devices that were intended to only be sold in China. The seller modifies the operating system to add Google's services to it and changes the default language to English. These devices tend to be particularly problematic because sellers intentionally mislabel them as international devices, even though they are still running a modified version of Android intended only for phones sold in China.
2. Many OEMs have chosen to keep some of their background connection killing logic even in devices sold outside of China. It's hard to say precisely why. Maybe they are competing for higher battery life, or perhaps they don't recognize the problems that it causes. This logic usually does some combination of either killing an app such that it can't wake up to receive a notification, or it interferes with the FCM connection to prevent any app from receiving notifications.
3. Building on #2 -- Many popular devices (e.g. modern Samsung phones) will ask users during the onboarding process if they want to "put apps to sleep after three days of not being used", and the option is "ON" by default. Users often don't realize that this setting will break apps that set background timers (e.g.: alarm apps) or that need to receive notifications.
4. The modifications made by these OEMs are often buggy. For example, user settings get reset after updates. Or the operating system seemingly randomly kills apps in such a way that prevents them from getting notifications.
5. Since OEMs often allow some popular apps to get around these restrictions, it creates an unfair situation between different companies. For example, Facebook might always work fine, but an up-and-coming social network will run into reliability issues.
6. In some cases, devices will appear to receive a push notification but will not display it to the end-user. This can be related to either power management preferences or OEM-specific "do not disturb" preferences.
(Disclosure: I'm one of the founders of OneSignal. We've been tracking and mitigating this problem by implementing "Delivery Confirmation", a feature that permits apps to send a webhook whenever the app displays notification so that developers can see the end-to-end delivery of each message and either retry their messages or use a different method of contacting the user)
Thank you for this! It seems like many apps on the growth path go through this same investigation, since we arrived at many of the same conclusions you did (down to calling our own webhooks from within onMessageReceived to retry, or figure out which kinds of devices had the most problems). We spent over a year on this before we hit what I think is our maximum achievable delivery rate of around 85% (short of repeatedly hassling users to go deep into their settings or forcing them to give us an e-mail/phone number to use as backup).
Our app isn't even enabled in China but the points you make in 1 and 2 mean that plenty of devices in South America, Africa, Asia (and even some in North America and Europe) run into these problems.
I think (5) above is a serious unfairness problem since many conversations turn to "I didn't get your notification, let's talk on Whatsapp instead" which affects retention. Now 10-15% failed notification deliveries might not seem like much but if you're talking to 4-5 people either individually or in a group chat then one of them is bound to pull you into a more "reliable" app.
Incidentally we've considered actually reaching out to those top phone providers and ask to be put on the whitelist; not sure if you or anybody on here has tried anything similar.
We've tried contacting OEMs about some of the more buggy behaviors we've seen related to their power optimization features. Unsurprisingly, even when we did get ahold of someone in the US who was senior enough to understand the problem, they had limited ability to influence the China-based operations of the company. Getting whitelisted seems nearly impossible unless you are a large company with a major presence in China and connections to the OEMs.
Google has hinted that they are working on something to improve the situation, but it's been years without resolution and the problem appears to have become worse instead of better.
Thanks for the link. I noticed some of these OEMs had started implementing their own "more reliable" PushKits, but I am guessing that the privacy implications are quite bad so it's basically a non-starter.
Yes. Also, for example, Huawei is not permitted to use Google Services on their new devices. As a result, they leverage a replacement called HMS and they replaced FCM with the HMS "Push Kit".
Privacy or not, it's the only way to send notifications to new Huawei devices that don't have FCM like the Huawei P40 that are sold worldwide. This isn't a niche issue -- Huawei was recently the #1 manufacturer of smartphones outside of China, surpassing both Apple and Samsung. Although this ranking has fallen as consumers have become aware of the lack of Google Services on these devices.
#3 shouldn't break normal apps (excluding these chinese notification solutions), it's clearly documented restrictions apps should adhere to on https://developer.android.com/guide/components/services, and https://developer.android.com/about/versions/oreo/background, with WorkManager and JobScheduler examples one should use instead. Are you saying OEMs go even deeper and interfere with these APIs rather than just stopping the background service and the process as they are allowed to, and some times must due to memory shortage?
I wouldn't be surprised if OEMs had nasty tricks going on but the dontkillmyapp.com doesn't even mention the existence of these APIs and instead try to promote some auto-start apps on boot workaround believing that the service must be running? Giving me very little confidence in the rest of what they are saying. A lot of it has become more aggressive since each release lately so that could explain confusion for old app developers.
I've been using it as a language learning app. I just join some channels in my target language and listen to various people's voices and accents and try to understand them. Every once in a while if I'm feeling brave I'll raise my hand and utter a couple of sentences. The topics are simple and often very repetitive, which makes it well suited for practicing languages.
The "regular" channels didn't feel very valuable to me after a week of use or so, and a lot of them seemed exclusively made for the purpose of gaining more followers (either on CH, IG or Twitter, etc.).
As a B2C app, we're also really confused by a bunch of them and are waiting to see if they will clarify or refactor it in a better way.
A lot of our entry fields fall under the "if you manually enter it we will use it to refine the results". Sure, you can put your age, or upload your picture to your profile if you want to. But you obviously don't have to.
But it's not clear if that is enough to pass the "optional disclosure" bar that they have which specifies: "Collection of the data occurs only in infrequent cases that are not part of your app’s primary functionality, and which are optional for the user." What is infrequent here, or how far are these features from the app's "primary functionality".
If we don't meet the optional disclosure bar it makes it sound like we're forcing users to give us all kinds of data. They also don't seem to obviously differentiate between data you collect for functionality and data that is used for advertising/third parties unless you click through to the details.
Yes, except OP being offered surgery for "ligament and tendon rerouting" as the solution to a problem the doctors spent just a few minutes understanding is the equivalent of your IT guy above suggesting the HR person open up their computer and reroute a bunch of wires, and take out a bunch of capacitors, to "see if it helps".
I will push back a little bit, because I'm curious to see if anyone has a good argument for why I'm wrong on this.
I would say that it's the equivalent of having the HR person mail their computer in, swapping out the motherboard, and mailing it back. This is, from my experience, what most IT departments actually do in this sort of situation. Maybe I'm wrong. I'm not an IT guy.
The surgeons proposed to directly fix the problem. I don't see a good alternative proposal for their team to make, given imperfect information about every patient.
What is a plausible mechanism for a real-world physician to intricately investigate every moment of every patient's personal life to get to the elemental root cause of every single illness? Someone would have to follow them around 24/7 with a video camera.
Thank for this discussion, it is really interesting to me!
The surgeon proposed what was probably the algorithmic way to fix the problem.
Given that the OP was having issues because of their heels, odds are that the surgery wouldn't have entirely fixed it and now the ligaments would have been unnecessarily tampered with by a surgeon whose thought was "we should totally reroute those ligaments that'll do it". OP mentioned she was a marathon runner, athletic and in her early thirties - what? did her ligaments suddenly get into a state where they needed rerouting? OK sure but why, why now, etc. I feel like even a non-medical professional could have gotten closer after talking to her for twenty minutes.
I am not a doctor obviously, but I have been to some good doctors and the "imperfect information" can significantly be improved if they actually make a more clever, targeted effort to inquire, rather than just casually prescribing surgery or heavy medication. Good doctors will talk to you, actually tell you what the "algorithm" prescribes and often tell you why they think it is not the case here. The best way I can describe the difference is like talking to a customer support bot vs talking to a customer support person.
I realize this is probably extinct now here in the US because of litigation and insurance requirements but it's still that way in many countries. I am certain that good, fluid doctors there beat the algorithmic approach hands down, whereas good doctors here may be capped and severely restrained by it.
There's a rough algorithm for non-gender-specific chronic pelvic pain on p.24.
But, yeah, there's over 100 pages in there on chronic pelvic pain in this document alone. Definitely a problem that's above my pay grade.
"The algorithm for diagnosing and treating CPP (Algorithm 1) has been developed to guide a physician through
the process from diagnosis to management. A physician should follow the lines by answering the appropriate
questions with yes or no. By doing this the clinician will end up at a box that refers to the chapter in this
guideline that contains all the information needed.
Because CPP is pain perceived in structures related to the pelvis, it is necessary to approach a
patient diagnosed with CPP as a chronic pain patient. Confining the diagnosis to a specific organ may overlook
multisystem functional abnormalities requiring individual treatment and general aspects of pain in planning
investigation and treatment. This idea is easily recognised in the algorithm where the division in specific
disease associated pain is made on one hand and pelvic pain syndrome on the other.
The algorithm also illustrates that the authors advocate early involvement of a multidisciplinary pain
team. In practice, this should mean that well-known diseases, e.g. ‘true’ cystitis and endometriosis, will be
diagnosed and treated early. If treating such conditions does not reduce symptoms, or such well-defined
conditions are not found, then further investigation may be necessary, depending on where the pain is
localised."
Dealing with some specialists feels like dealing with automated bots. They almost sound like they follow a script down to the letter. If A then prescribe B, then C. And almost never look at the big picture. And every symptom that happens they tend to shoehorn into their own specialization, and not realize that it might be an indication that the problem lies elsewhere.
In medicine there is a lot of emphasis placed behind evidence-based approaches. The alternative is an experience-based approach (the more fluid approach you're describing). The problem with experience-based approaches are that they're hard to evaluate since it's impossible to standardize, and they may open the provider up to risk of litigation. As a result, an evidence-based mindset may result in the algorithmic behavior you describe. We don't have a good codified way to standardize the practitioner's balance between evidence-based and experience-based, so it's a bit up in the air right now. Medicine is really, really hard to do well.
This is going to sound harsh but I feel it is true and inevitable.
If you are not using an experience-based approach you are not doing your job. People seek doctors precisely because they are supposed to have experience. Medical school is many years long precisely so you can build that experience.
If you just execute algorithms based on evidence you are a prime target for automation.
Those in my profession (software) will automate your role away and do it better and faster and more available and more reliable. Because you make it easy for us. We may be cursed to solve only 80% of any problem but if you solve even less, we still end up ahead.
My point, all of the interest and investment in AI diagnosis (IBM Watson comes to mind, but the field is decades old) is caused precisely by the poor practices in the medical field. It is of course naive to think we will solve medicine with software. But we only need to be better than average just like self driving cars are not aming to be perfect, just better than average.
Be a HUMAN doctor and we will need AGI to replace you. Be a robot and you will be replaced by an actual robot.
(note: I do not believe technology is the solution here. I am just a bit pissed after a doctor prescribed stuff without even touching or looking at an acquaintance.)
Not saying I disagree with your sentiment, but the idea behind evidence-based medicine is that it's effectiveness can be demonstrated through a randomized control trial.
Experience-based medicine cannot.
So, it's tricky because we want to identify those treatments that actually work based on objective clinical data, as well as those that clinicians have anecdotally found effective based on experience.
And do we want treatments that have been demonstrated to work, or treatments that are based on a provider's best judgement? That's not an easy question to answer.
The benefits of demonstrated effect are balanced with those you describe of the experience-based approach.
It's a gray area.
You just can't AI-away an ER doc (at least not with current tech). Something's got to interview, intubate, suture, palpate, and prescribe all those bleeding, festering, diabetic masses flowing into the ER like the tide of the Thames. Note the downside, an ER doc is a very exhausted, burned-out human, prone to error.
I'm sorry about your acquaintance, I'd be pissed too. You definitely have a right to be!
For the same exact issue, you can go to a cardio and get prescribed some cardio-related medication, go to a neuro and get prescribed neuro-related medication, etc. To a hammer everything is a nail.
I was put on antibiotics, beta blockers, topamax and a couple of more serious medication for what was ultimately just a vitamin D deficiency that they had been too narrow-sighted to try catching. I lost a lot of respect for the medical profession at that time.
I've been working with a cardiologist, a rheumatologist, and a pulmonologist all within UCSF, and as far as I can tell they're doing a great job coordinating with each other to treat my malady. For example, they've avoided ordering redundant scans in order to minimize my radiation exposure. I think I'm pretty lucky to have access to UCSF, and doubly so since I arbitrarily switched to a PPO insurance plan this year before I knew I had any problems. I'm feeling especially appreciative because my failed atrioventricular nerves started working again today! Apparently they've been giving me the right drugs.
While I'm reflecting on how lucky I am to live somewhere with great health care, here's a shameless plug for the company I work for, Zipline International. We're building a scalable platform for delivering life saving medical supplies to hard to reach places that wouldn't otherwise have access, based on really cool/boring because they're so reliable UAVs. We're definitely hiring on the embedded team, and I'm sure on all the other software teams as well. Our internal metrics are getting pretty mind blowing to follow, in terms of deliveries per day/cumulative distance flown per day/literal lives saved per day. I guarantee there's plenty of fun projects to work on!
Here is my story. A few years after coming to the US I started developing some neurological symptoms: confusion, dizziness, lightheadedness.
1. The GP first blamed it on dehydration and sent me home and told me to drink plenty of water. Went back a week later and she prescribed antibiotics thinking it was some kind of infection somewhere. "Let's just try the strongest antibiotics and see".
I did the full course despite some non-trivial side effects and was still not better, but at that point my heartbeat had gotten a bit faster from the whole situation so I was referred to a cardio.
2. Seeing a fast heartbeat, the cardiologist put me, a 24-year old at the time, on beta blockers. Two weeks later, still no improvement.
3. So I was referred to a neurologist. Did a brain MRI, did not find anything so he assumed it was some kind of epilepsy/migraine combo and put me on something called topamax. Mind you, all these prescriptions were given to me within 10-15 minutes of seeing those doctors. Topamax had its own side effects and my health at that point had spiraled out of control. Reported the side effects to the neuro and he thought he'd give me one more medication to counter the other medication's side effects.
When I went back to the GP they said the whole thing was probably caused by "stress".
4. I just stopped all medication, got sick leave from my job, and went back to my home country for a couple of months. I asked my old family doctor to just do a general check-up and see if anything was up. Within weeks my situation had magically started to improve.
Turned out my vitamin D levels were at 7 (forgot the unit, but the minimum was like 30).
None of the doctors thought about it, every doctor had arrogantly assumed that the problem could only be from their own field (neuro assumed it was neurological, cardio assumed it was cardiac), and literally none of them put the slightest amount of effort into looking at the whole picture. This was in one of the most affluent areas and those were supposedly some of the "good" doctors. I am still convinced that a machine trained model would have performed significantly better than these people since they were literally like bots following a rule book.
Side corollary, if you are from a sunny country and move to a state or country in Northern latitudes, keep in mind that vitamin D deficiency can slowly creep on you and basically turn you into a moron. This should be a PSA.
I think it's a great story, and provides a lot of points to think about. I only question the way you think of the physician's role. I think arrogance is not exactly what's going on here.
Confusion, dizziness, lightheadedness are tremendously vague symptoms, and the workup for dizziness alone is extensive.
Put yourself in the doctor's shoes. Here is an article from the American Academy of Family Physicians on how to work-up a patient who presents with dizziness.
It's not that simple, and there are lots, and lots of things that could be going on. How do you know for sure that your symptoms were caused by Vitamin D? I don't see any evidence that confusion, dizziness, lightheadedness are common presenting symptoms of vitamin D deficiency at all. According to the Cleveland Clinic, those aren't presenting symptoms of Vitamin D deficiency. Therefore, an AI wouldn't be any more likely to catch it than a real person.
There's nothing in your comment that makes me think your symptoms weren't caused by Carbon Monoxide poisoning from running a heater in your less-than-sunny place of residence. Or maybe it's eye-strain from sitting inside staring at a computer too long. Or neck issues from sitting at a computer for too long. Or maybe you really were dehydrated, and for some reason you drink more fluids in your home country. Maybe you're smoking too much weed. Or maybe you're depressed by being away from home. Or maybe you were doing a lot of cocaine and didn't mention it. Maybe you had a stroke. Or you have early-onset dementia, or sleep apnea, or a psychological problem, or an aneurysm, or any one of a million things.
Medicine is hard. There are a lot of variables. The human body and its environment isn't a perfectly-reducible system you can step-through in an IDE. The only point I'm trying to make is that doctors are trying to figure out exactly what is going on inside of an incredibly complex system that is heavily influenced by the external environment, and they can't always conjure up a precise answer immediately.
Arrogance because the GP, neuro and cardio all made completely different diagnoses (conveniently from within their field of expertise) based on 15 minute visits and prescribed non-trivial medications. Putting a 24-year old on beta blockers, topamax, cipro and a couple more I had to stop on day 2, just to see if that fixes it, sends you down a spiral of side effects that make the original symptom far murkier.
Even if the algorithmic approach is accurate for 80% of cases, the suggestions it gives you for the 20% makes treatment extremely frustrating. If you are in those 20% then treatment by an experienced, more fluid doctor is night and day. Unfortunately, there seem to be fewer of those in the US than in other countries, probably because of litigation risk you mentioned before.
I think you have a really, valid point and part of that is also probably a consequence of the structure of the healthcare system itself:
"Although the United States is renowned for its leadership in biomedical research, its cutting-edge medical technology, and its hospitals and specialists, problems with ensuring Americans’ access to the system and providing quality care have been a long-standing concern of policy makers and the public (Berwick et al., 2008; Brook, 2011b; Fineberg, 2012). Higher mortality rates from diseases, and even from transportation-related injuries and homicides, may be traceable in part to failings in the health care system."
National Research Council (US); Institute of Medicine (US); Woolf SH, Aron L, editors. U.S. Health in International Perspective: Shorter Lives, Poorer Health. Washington (DC): National Academies Press (US); 2013. 4, Public Health and Medical Care Systems. Available from: https://www.ncbi.nlm.nih.gov/books/NBK154484/
We're much better at moonshots, that just keeping most folks healthy.
I got back to normal after about a month of supplements and sunlight. It happened to me again a couple of years later to a much lesser degree since I had just forgotten about supplements and then once again was resolved the same way.
Don’t confuse correlation and causation. Maybe you were going to get better anyway and it just coincided with the supplements. Maybe the second time was something completely different.
I did X and now I feel better is completely meaningless without some quantitative supporting evidence providing a link between the two.
There’s a reason why the double blind trial is the gold standard of medical proof.
You may of course have this evidence, I’m just commenting on what’s written in this comment.
A billion people are vitamin D deficiency. Many are asymptomatic.
Did you have a viral illness causing your symptoms and it got better? Was it the vitamin D? It is hard to say. Some supporting evidence would be you had a previously normal vitamin D level back at your old GP.