thunderbird / thunderbird-android

Thunderbird for Android – Open Source Email App for Android (fka K-9 Mail)
https://thunderbird.net/
Apache License 2.0
10.49k stars 2.49k forks source link

Specific message crashes k9 #4398

Closed callmemagnus closed 4 years ago

callmemagnus commented 4 years ago

Sorry for the blurry summary, as I'm not sure about the core reason for the crash, I didn't really know what to put. Feel free to update it to something more specific.

Expected behavior

The Message List should show the message (see below)

Actual behavior

If the message is in the "should be visible" message -> the app crashes. If the message is lower in the list, I scroll to that message -> the app crashes

Steps to reproduce

  1. Have the message in the message list (see below)
  2. open the message list and scroll to the message (the scroll depends on the possition of the message in the list.

Environment

K-9 Mail version: 5.600 from google play store

Android version: 9 (LineageOS)

Account type (IMAP, POP3, WebDAV/Exchange): IMAP account

Logs

When the crash occurs the following appears in the log:

--------- beginning of crash
12-23 10:46:15.714  7247  7247 E AndroidRuntime: FATAL EXCEPTION: main
12-23 10:46:15.714  7247  7247 E AndroidRuntime: Process: com.fsck.k9, PID: 7247
12-23 10:46:15.714  7247  7247 E AndroidRuntime: java.lang.ArrayIndexOutOfBoundsException: length=142; index=142
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.text.TextLine.measure(TextLine.java:343)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.text.TextLine.metrics(TextLine.java:298)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.text.Layout.measurePara(Layout.java:2118)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.text.Layout.getDesiredWidthWithLimit(Layout.java:196)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.TextView.onMeasure(TextView.java:8511)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.View.measure(View.java:23190)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1168)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.LinearLayout.onMeasure(LinearLayout.java:706)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.View.measure(View.java:23190)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.View.measure(View.java:23190)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1187)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.LinearLayout.onMeasure(LinearLayout.java:706)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.View.measure(View.java:23190)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.ListView.setupChild(ListView.java:2150)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.ListView.makeAndAddView(ListView.java:2055)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.ListView.fillDown(ListView.java:786)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.ListView.fillGap(ListView.java:750)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5235)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.ListView.trackMotionScroll(ListView.java:1971)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4779)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.Choreographer.doFrame(Choreographer.java:693)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.os.Handler.handleCallback(Handler.java:873)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:99)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:193)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6718)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
12-23 10:46:15.714  7247  7247 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
12-23 10:46:15.732  3685  4821 W ActivityManager:   Force finishing activity com.fsck.k9/.activity.MessageList
12-23 10:46:15.747  7247  7247 I Process : Sending signal. PID: 7247 SIG: 9
12-23 10:46:15.890  3685  3710 W libprocessgroup: kill(-7247, 9) failed: No such process
12-23 10:46:15.893  3685  6249 I WindowManager: WIN DEATH: Window{781af65 u0 com.fsck.k9/com.fsck.k9.activity.MessageList}
12-23 10:46:15.895  3685  4599 I ActivityManager: Process com.fsck.k9 (pid 7247) has died: fore TOP 
12-23 10:46:15.900  3685  4599 W ActivityManager: Scheduling restart of crashed service com.fsck.k9/.service.PushService in 1000ms
12-23 10:46:15.902  3685  6360 I WindowManager: WIN DEATH: Window{a8c0457 u0 com.fsck.k9/com.fsck.k9.activity.Accounts}
12-23 10:46:15.918  3495  3564 W SurfaceFlinger: Attempting to set client state on removed layer: com.fsck.k9/com.fsck.k9.activity.MessageList#0
12-23 10:46:15.918  3495  3564 W SurfaceFlinger: Attempting to destroy on removed layer: com.fsck.k9/com.fsck.k9.activity.MessageList#0
12-23 10:46:15.937  3685  3710 W libprocessgroup: kill(-7247, 9) failed: No such process
12-23 10:46:15.939  3685  3717 W ActivityManager: setHasOverlayUi called on unknown pid: 7247
12-23 10:46:15.948  3474  3474 I Zygote  : Process 7247 exited due to signal (9)
12-23 10:46:15.979  3685  3710 W libprocessgroup: kill(-7247, 9) failed: No such process
12-23 10:46:15.979  3685  3710 I libprocessgroup: Successfully killed process cgroup uid 10130 pid 7247 in 89ms

After making some tests, I was able to find out that one message seems to be the source of the problem. If I remove the message from the folder, clear message in k9 and sync again, the problem disappears.

Some notes about the message:

(I know I might not need to be worried about a SPAM but this one is not, another topic for my to fix on my side)

Source of the message in my box

Return-Path: <bounce-mc.us2_5318802.3171293-9c8e2fdb89@mail165.atl81.rsgsv.net>
Delivered-To: my.email@domain.test
Received: from mail.domain.test
    by mail.domain.test with LMTP
    id iFg+C49o5F14TwAAT5kBKQ
    (envelope-from <bounce-mc.us2_5318802.3171293-9c8e2fdb89@mail165.atl81.rsgsv.net>)
    for <my.email@domain.test>; Mon, 02 Dec 2019 02:27:43 +0100
Received: from localhost (localhost [127.0.0.1])
    by mail.domain.test (Postfix) with ESMTP id 1A0CF486161
    for <my.email@domain.test>; Mon,  2 Dec 2019 02:27:43 +0100 (CET)
X-Virus-Scanned: Yes
X-Spam-Flag: YES
X-Spam-Score: 5.893
X-Spam-Level: *****
X-Spam-Status: Yes, score=5.893 tagged_above=-1000 required=5
    tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,
    HEADER_FROM_DIFFERENT_DOMAINS=0.5, HTML_MESSAGE=0.75,
    MIME_QP_LONG_LINE=0.001, RAZOR2_CF_RANGE_51_100=2.43,
    RAZOR2_CHECK=1.729, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001,
    SPF_PASS=-0.5, URIBL_GREY=1.084] autolearn=no autolearn_force=no
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=198.2.129.165; helo=mail165.atl81.rsgsv.net; envelope-from=bounce-mc.us2_5318802.3171293-9c8e2fdb89@mail165.atl81.rsgsv.net; receiver=<UNKNOWN> 
Authentication-Results: mail.domain.test; dmarc=none (p=none dis=none) header.from=perf.email
Authentication-Results: mail.domain.test;
    dkim=pass (1024-bit key; unprotected) header.d=perf.email header.i=hi@perf.email header.b="aqtlj3rj";
    dkim-atps=neutral
X-Greylist: delayed 929 seconds by postgrey-1.36 at mail; Mon, 02 Dec 2019 02:27:39 CET
Received: from mail165.atl81.rsgsv.net (mail165.atl81.rsgsv.net [198.2.129.165])
    by mail.domain.test (Postfix) with ESMTPS id 94EA0486160
    for <my.email@domain.test>; Mon,  2 Dec 2019 02:27:39 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=perf.email; s=k1;
    t=1575249127; i=hi@perf.email;
    bh=drt1w48tDj3EPOPh2ELYikANA9doOdrIY4x/+UNFGdg=;
    h=Subject:From:Reply-To:To:Date:Message-ID:List-ID:List-Unsubscribe:
     Content-Type:MIME-Version;
    b=aqtlj3rj5Ab522GzLqN7xelMLYDvdBEePkHqc594dFS9mGnwAa7aALBZpuquqy1vN
     6QpOU1Jq4rQ7/W62bljCjy5ke+/h5HtUr9lgo1Rezil0FXMx7mYHYoq0M+hdTW1eVx
     pm0im2CmSy6FLnaFAzcaPFWNriHSFUZ/jxq4azYA=
Subject: =?UTF-8?Q?[SPAM]=E2=9A=A1=EF=B8=8F37:=C2=A0Mitigate?= the performance
    impact of live chat, how Discord made their iOS app faster, React
    hooks for data prefetching and more.
From: =?utf-8?Q?Perf.email=20by=20Calibre?= <hi@perf.email>
Reply-To: =?utf-8?Q?Perf.email=20by=20Calibre?= <hi@perf.email>
To: =?utf-8?Q?=20?= <my.email@domain.test>
Date: Mon,  2 Dec 2019 01:12:01 +0000
Message-ID: <9067434ef642e9c92aa7453d2.9c8e2fdb89.20191202011153.8347427c05.9b4973cb@mail165.atl81.rsgsv.net>
X-Campaign: mailchimp9067434ef642e9c92aa7453d2.8347427c05
X-campaignid: mailchimp9067434ef642e9c92aa7453d2.8347427c05
X-Report-Abuse: Please report abuse for this campaign here: https://mailchimp.com/contact/abuse/?u=9067434ef642e9c92aa7453d2&id=8347427c05&e=9c8e2fdb89
X-MC-User: 9067434ef642e9c92aa7453d2
Feedback-ID: 5318802:5318802.3171293:us2:mc
List-ID: 9067434ef642e9c92aa7453d2mc list <9067434ef642e9c92aa7453d2.937105.list-id.mcsv.net>
X-Accounttype: pd
List-Unsubscribe: <https://calibreapp.us2.list-manage.com/unsubscribe?u=9067434ef642e9c92aa7453d2&id=7cba5dc7bd&e=9c8e2fdb89&c=8347427c05>, <mailto:unsubscribe-mc.us2_9067434ef642e9c92aa7453d2.8347427c05-9c8e2fdb89@mailin.mcsv.net?subject=unsubscribe>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
Content-Type: multipart/alternative; boundary="_----------=_MCPart_1702819158"
MIME-Version: 1.0

This is a multi-part message in MIME format

--_----------=_MCPart_1702819158
Content-Type: text/plain; charset="utf-8"; format="fixed"
Content-Transfer-Encoding: quoted-printable

https://perf.email/?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAI=
L_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-834=
7427c05-1247077837

** Performance
Newsletter
------------------------------------------------------------

** Issue 37
------------------------------------------------------------

** Editor=E2=80=99s Note
------------------------------------------------------------

It=E2=80=99s exciting to see the rise of technologies focused on speed. Bu=
t many rely on the emergence of 5G and HTTP/3 to be the panacea to perform=
ance headaches. Nothing more wrong.

To quote William Gibson=2C =E2=80=9Dthe future is already here=E2=80=94it=
=E2=80=99s just not evenly distributed=E2=80=9D. The global digital divide=
 is always there.

Our customers and users of the Internet will always operate in the context=
 relevant to their socioeconomic status=2C and that often vastly differs f=
rom our own.

Speed is always relevant.

=E2=80=94 Karolina

** article
------------------------------------------------------------
https://calibreapp.com/blog/fast-live-chat?utm_source=3DPerf.email&utm_cam=
paign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_=
term=3D0_7cba5dc7bd-8347427c05-1247077837

** Mitigate the performance impact of live chat
------------------------------------------------------------

In his article=2C Calibre=E2=80=99s platform developer=2C Michael Dijkstra=
 (https://twitter.com/micdijkstra?utm_source=3DPerf.email&utm_campaign=3D8=
347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_=
7cba5dc7bd-8347427c05-1247077837)  describes how to mitigate the high=
 performance cost of using live chat tools on your sites. With his open so=
urce component=2C react live chat loader (https://github.com/calibreapp/re=
act-live-chat-loader?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMA=
IL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-83=
47427c05-1247077837) =2C you=E2=80=99ll be able to significantly impr=
ove Lighthouse Performance Score and Time to Interactive.
How we improved the performance of our live chat by 30% =E2=86=92 (https:/=
/calibreapp.com/blog/fast-live-chat?utm_source=3DPerf.email&utm_campaign=
=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=
=3D0_7cba5dc7bd-8347427c05-1247077837)
------------------------------------------------------------

** tools
------------------------------------------------------------
https://swr.now.sh/?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAI=
L_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-834=
7427c05-1247077837

** Make your interfaces fast with data refetching
------------------------------------------------------------

SWR (stale while revalidate) is a React Hooks library for remote data fetc=
hing that helps with making interfaces feel fast and responsive. Thanks to=
 folks at Zeit (https://twitter.com/zeithq?utm_source=3DPerf.email&utm_cam=
paign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_=
term=3D0_7cba5dc7bd-8347427c05-1247077837) =2C you can manage updatin=
g data in the background=2C without disrupting the user experience.
SWR: React Hooks for Remote Data Fetching =E2=86=92 (https://swr.now.sh/?u=
tm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01=
_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837)
------------------------------------------------------------

** case study
------------------------------------------------------------
https://blog.discordapp.com/how-discord-achieves-native-ios-performance-wi=
th-react-native-390c84dcd502?utm_source=3DPerf.email&utm_campaign=3D834742=
7c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5=
dc7bd-8347427c05-1247077837

** How Discord sped up their app load by 2 seconds
------------------------------------------------------------

In this excellent case study=2C Miguel Gaeta (https://twitter.com/mrkcsc?u=
tm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01=
_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837)  explains how Discord implemented a range of optimisations to their Re=
act Native iOS app=2C proving that no amount of milliseconds dropped is wo=
rthless. Focusing on battery life and providing a 60fps experience on olde=
r iPhones (5=2C 6 and XS) the article features quite a handful of actionab=
le strategies.
How Discord achieves native iOS performance with React Native =E2=86=92 (h=
ttps://blog.discordapp.com/how-discord-achieves-native-ios-performance-wit=
h-react-native-390c84dcd502?utm_source=3DPerf.email&utm_campaign=3D8347427=
c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5d=
c7bd-8347427c05-1247077837)
------------------------------------------------------------

** article
------------------------------------------------------------
https://alistapart.com/article/responsible-javascript-part-3/?utm_source=
=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&ut=
m_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837

** Effectively manage third party JavaScript
------------------------------------------------------------

Jeremy Wagner (https://jeremy.codes/?utm_source=3DPerf.email&utm_campaign=
=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=
=3D0_7cba5dc7bd-8347427c05-1247077837) is back with his Responsible J=
avaScript series. This time=2C he focuses on one of the biggest offenders=
 nowadays=E2=80=94third party code=2C providing actionable strategies to p=
revent performance regressions and manage external tools in the long run.
Responsible JavaScript: Part III =E2=86=92 (https://alistapart.com/article=
/responsible-javascript-part-3/?utm_source=3DPerf.email&utm_campaign=3D834=
7427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7c=
ba5dc7bd-8347427c05-1247077837)
------------------------------------------------------------

** talk
------------------------------------------------------------
https://www.slideshare.net/AnnieSullivan9/monitoring-and-metrics-in-chrome=
-196438420/7?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPA=
IGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05=
-1247077837

** Learn the ins and outs of performance monitoring
------------------------------------------------------------

In her talk=2C Annie Sullivan (https://twitter.com/anniesullie?utm_source=
=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&ut=
m_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837) descr=
ibes what characterises useful performance metrics and explains when perfo=
rmance monitoring is effective. A goldmine of performance knowledge=2C usu=
ally only known to the few working on tooling.
Lessons learned from performance monitoring in Chrome =E2=86=92 (https://w=
ww.slideshare.net/AnnieSullivan9/monitoring-and-metrics-in-chrome-19643842=
0?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12=
_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837)
------------------------------------------------------------

** article
------------------------------------------------------------
https://simonhearne.com/2019/2020-predictions/?utm_source=3DPerf.email&utm=
_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&=
utm_term=3D0_7cba5dc7bd-8347427c05-1247077837

** What speed technologies to watch for in 2020
------------------------------------------------------------

Simon Hearne (https://twitter.com/SimonHearne?utm_source=3DPerf.email&utm_=
campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&u=
tm_term=3D0_7cba5dc7bd-8347427c05-1247077837) offers a high-level ove=
rview of what technologies are likely to change the face of performance in=
 the upcoming year. It=E2=80=99s important to remember the context of not=
 only the devices we access the Web from but also slow adoption of fast ne=
tworks like 5G.
Six Web Performance Technologies to Watch in 2020 =E2=86=92 (https://simon=
hearne.com/2019/2020-predictions/?utm_source=3DPerf.email&utm_campaign=3D8=
347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_term=3D0_=
7cba5dc7bd-8347427c05-1247077837)
------------------------------------------------------------

** Spread the word about perf.email
------------------------------------------------------------

We=E2=80=99d love to see more people reading perf.email (https://perf.emai=
l/?utm_source=3DPerf.email&utm_campaign=3D8347427c05-EMAIL_CAMPAIGN_2019_1=
2_01_11_01&utm_medium=3Demail&utm_term=3D0_7cba5dc7bd-8347427c05-1247077837) ; if you=E2=80=99d like to help=E2=80=94forward this email to a fr=
iend=2C tweet=2C or shout from a rooftop. It goes a long way. =E2=9C=8C=F0=
=9F=8F=BB
------------------------------------------------------------

** Brought to you by
------------------------------------------------------------

=E2=99=A0 Calibre (https://calibreapp.com/?utm_source=3DPerf.email&utm_cam=
paign=3D8347427c05-EMAIL_CAMPAIGN_2019_12_01_11_01&utm_medium=3Demail&utm_=
term=3D0_7cba5dc7bd-8347427c05-1247077837) . Make the web fast for ev=
eryone.

Calibre
149A Brunswick street
Fizroy=2C Victoria 3065
Australia

Update your profile (https://calibreapp.us2.list-manage.com/profile?u=3D90=
67434ef642e9c92aa7453d2&id=3D7cba5dc7bd&e=3D9c8e2fdb89)

Unsubscribe (https://calibreapp.us2.list-manage.com/unsubscribe?u=3D906743=
4ef642e9c92aa7453d2&id=3D7cba5dc7bd&e=3D9c8e2fdb89&c=3D8347427c05)

View in a browser (https://mailchi.mp/perf.email/37?e=3D9c8e2fdb89)
--_----------=_MCPart_1702819158
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www=
=2Ew3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head><meta name=3D"twitter:image:src" content=3D"https://gallery.mailch=
imp.com/9067434ef642e9c92aa7453d2/images/e28db34d-194c-4582-94f4-11020f3c5=
73d.png"><meta name=3D"twitter:description" content=3D"Mitigate the perfor=
mance impact of live chat=2C how Discord made their iOS app faster=2C Reac=
t hooks for data prefetching=2C speed predictions for 2020 and more."><met=
a name=3D"twitter:title" content=3D"Issue 37 of Performance Newsletter"><m=
eta name=3D"twitter:card" content=3D"summary_large_image"><meta property=
=3D"og:type" content=3D"article"><meta property=3D"og:description" content=
=3D"Mitigate the performance impact of live chat=2C how Discord made their=
 iOS app faster=2C React hooks for data prefetching=2C speed predictions f=
or 2020 and more."><meta property=3D"og:image" content=3D"https://gallery.=
mailchimp.com/9067434ef642e9c92aa7453d2/images/e28db34d-194c-4582-94f4-110=
20f3c573d.png"><meta property=3D"og:title" content=3D"Issue 37 of Performa=
nce Newsletter"><meta property=3D"og:url" content=3D"http://eepurl.com/gLx=
8on">
    <meta name=3D"viewport" content=3D"width=3Ddevice-width">
    <meta http-equiv=3D"content-type" content=3D"text/html; charset=3DUTF-=
8">

  <style type=3D"text/css">
=09=09img{
=09=09=09border:none;
=09=09=09-ms-interpolation-mode:bicubic;
=09=09=09max-width:100%;
=09=09}
=09=09body{
=09=09=09background-color:#ffffff;
=09=09=09font-family:-apple-system=2CBlinkMacSystemFont=2C"Segoe UI"=2CRob=
oto=2CHelvetica=2CArial=2Csans-serif=2C"Apple Color Emoji"=2C"Segoe UI Emo=
ji"=2C"Segoe UI Symbol";
=09=09=09-webkit-font-smoothing:antialiased;
=09=09=09font-size:17px;
=09=09=09line-height:1.5;
=09=09=09color:#5e5e5e;
=09=09=09margin:0;
=09=09=09padding:0;
=09=09=09-ms-text-size-adjust:100%;
=09=09=09-webkit-text-size-adjust:100%;
=09=09}
=09=09table{
=09=09=09border-collapse:separate;
=09=09=09mso-table-lspace:0;
=09=09=09mso-table-rspace:0;
=09=09=09table-width:fixed;
=09=09=09width:100%;
=09=09}
=09=09table td{
=09=09=09font-family:-apple-system=2CBlinkMacSystemFont=2C"Segoe UI"=2CRob=
oto=2CHelvetica=2CArial=2Csans-serif=2C"Apple Color Emoji"=2C"Segoe UI Emo=
ji"=2C"Segoe UI Symbol";
=09=09=09font-size:17px;
=09=09=09vertical-align:top;
=09=09}
=09=09.body{
=09=09=09background-color:#ffffff;
=09=09=09width:100%;
=09=09}
=09=09.container{
=09=09=09display:block;
=09=09=09margin:40px auto !important;
=09=09=09max-width:600px;
=09=09=09width:600px;
=09=09}
=09=09.logo{
=09=09=09margin-bottom:30px;
=09=09}
=09=09.footer{
=09=09=09clear:both;
=09=09=09text-align:center;
=09=09=09width:100%;
=09=09}
=09=09.footer td=2C.footer p=2C.footer span=2C.footer a{
=09=09=09color:#5e5e5e;
=09=09=09font-size:14px;
=09=09=09text-align:center;
=09=09}
=09=09.footer a{
=09=09=09text-decoration:underline;
=09=09}
=09=09.m0{
=09=09=09margin:0;
=09=09}
=09=09.mt0{
=09=09=09margin-top:0;
=09=09}
=09=09.mb0{
=09=09=09margin-bottom:0;
=09=09}
=09=09.perfemail-logo{
=09=09=09text-decoration:none;
=09=09=09clear:both;
=09=09}
=09=09.perfemail-logo img{
=09=09=09height:30px;
=09=09=09width:27px;
=09=09=09margin:0 10px 30px 0;
=09=09=09padding:0;
=09=09=09float:left;
=09=09}
=09=09.perfemail-logo h4{
=09=09=09color:#3057f4;
=09=09=09margin:0;
=09=09}
=09=09p{
=09=09=09font-size:17px;
=09=09=09line-height:1.5;
=09=09=09margin-bottom:30px;
=09=09}
=09=09h2=2Ch4{
=09=09=09font-weight:bold;
=09=09=09margin-bottom:30px;
=09=09=09line-height:1.2;
=09=09}
=09=09h2{
=09=09=09color:#2b2b2b;
=09=09}
=09=09h4{
=09=09=09text-transform:uppercase;
=09=09=09letter-spacing:1px;
=09=09=09color:#2b2b2b;
=09=09=09font-size:14px;
=09=09=09margin-bottom:20px;
=09=09}
=09=09a{
=09=09=09color:#3057f4;
=09=09=09text-decoration:none;
=09=09}
=09=09.article-section h4{
=09=09=09margin-top:30px;
=09=09}
=09=09.article-section a{
=09=09=09color:#3057f4;
=09=09=09text-decoration:none;
=09=09}
=09=09.article-section img:not(:empty){
=09=09=09margin-bottom:30px;
=09=09}
=09=09.article-link{
=09=09=09font-weight:bold;
=09=09=09margin-bottom:30px;
=09=09=09display:block;
=09=09}
=09=09.editors-note{
=09=09=09padding:30px;
=09=09=09background-color:#f0f3fe;
=09=09=09border-bottom:2px solid #3057f4;
=09=09}
=09=09.issue-number{
=09=09=09color:#3057f4;
=09=09=09margin:0;
=09=09=09text-align:right;
=09=09}
=09=09hr{
=09=09=09border:0;
=09=09=09border-bottom:2px solid #cfd8fc;
=09=09}
=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] p=2Ctable[class=3Dbody] ul=2Ctable[class=3Dbo=
dy] ol=2Ctable[class=3Dbody] td=2Ctable[class=3Dbody] span=2Ctable[clas=
s=3Dbody] a{
=09=09=09font-size:14px !important;
=09=09}

}=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] h2{
=09=09=09line-height:1.25;
=09=09}

}=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] .container{
=09=09=09padding:0 !important;
=09=09=09width:100% !important;
=09=09}

}=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] .main{
=09=09=09padding:0 15px;
=09=09}

}=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] .editors-note{
=09=09=09padding:30px 15px !important;
=09=09}

}=09@media only screen and (max-width: 620px){
=09=09table[class=3Dbody] .img-responsive{
=09=09=09height:auto !important;
=09=09=09max-width:100% !important;
=09=09=09width:auto !important;
=09=09}

}=09@media all{
=09=09.ExternalClass{
=09=09=09width:100%;
=09=09}

}=09@media all{
=09=09.ExternalClass=2C.ExternalClass p=2C.ExternalClass span=2C.ExternalC=
lass font=2C.ExternalClass td=2C.ExternalClass div{
=09=09=09line-height:100%;
=09=09}

}=09@media all{
=09=09.apple-link a{
=09=09=09color:inherit !important;
=09=09=09font-family:inherit !important;
=09=09=09font-size:inherit !important;
=09=09=09font-weight:inherit !important;
=09=09=09line-height:inherit !important;
=09=09=09text-decoration:none !important;
=09=09}

}</style><!--[if !mso]><!--><link href=3D"https://fonts.googleapis.com/cs=
s?family=3DRoboto:400=2C400i=2C700=2C700i" rel=3D"stylesheet"><!--<![endi=
f]--></head>
  <body style=3D"background-color: #ffffff;font-family: -apple-system=2CBl=
inkMacSystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csan=
s-serif=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&qu=
ot;Segoe UI Symbol&quot;;-webkit-font-smoothing: antialiased;font-size: 17=
px;line-height: 1.5;color: #5e5e5e;margin: 0;padding: 0;-ms-text-size-adju=
st: 100%;-webkit-text-size-adjust: 100%;"><div itemscope=3D"" itemtype=3D"=
http://schema.org/EmailMessage"><div itemprop=3D"publisher" itemscope=3D""=
 itemtype=3D"http://schema.org/Organization"><meta itemprop=3D"name" conte=
nt=3D"Calibre"><link itemprop=3D"url" content=3D"https://calibreapp.com"><=
/div><div itemprop=3D"about" itemscope=3D"" itemtype=3D"http://schema.org/=
Offer"><link itemprop=3D"image" href=3D"https://gallery.mailchimp.com/9067=
434ef642e9c92aa7453d2/images/e28db34d-194c-4582-94f4-11020f3c573d.png"></d=
iv></div>
    <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" class=3D"body"=
 style=3D"border-collapse: separate;mso-table-lspace: 0;mso-table-rspace:=
 0;table-width: fixed;width: 100%;background-color: #ffffff;">
      <tr>
        <td class=3D"container" style=3D"font-family: -apple-system=2CBlin=
kMacSystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-=
serif=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot=
;Segoe UI Symbol&quot;;font-size: 17px;vertical-align: top;display: block;=
max-width: 600px;width: 600px;margin: 40px auto !important;">
          <!-- START CENTERED WHITE CONTAINER -->
          <table class=3D"main" style=3D"border-collapse: separate;mso-tab=
le-lspace: 0;mso-table-rspace: 0;table-width: fixed;width: 100%;">
            <tr>
              <td style=3D"font-family: -apple-system=2CBlinkMacSystemFont=
=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-serif=2C&quot;=
Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Segoe UI Symb=
ol&quot;;font-size: 17px;vertical-align: top;">
                <div class=3D"editors-note" mc:label=3D"editors_note" styl=
e=3D"padding: 30px;background-color: #f0f3fe;border-bottom: 2px solid #305=
7f4;">
                  <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0"=
 style=3D"border-collapse: separate;mso-table-lspace: 0;mso-table-rspace:=
 0;table-width: fixed;width: 100%;">
                    <tr>
                      <td style=3D"font-family: -apple-system=2CBlinkMacSy=
stemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-serif=
=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Sego=
e UI Symbol&quot;;font-size: 17px;vertical-align: top;">
                        <div class=3D"perfemail-logo" style=3D"text-decora=
tion: none;clear: both;">
                          <a href=3D"https://calibreapp.us2.list-manage.co=
m/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Df3357c22ac&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;">
                            <img src=3D"https://gallery.mailchimp.com/9067=
434ef642e9c92aa7453d2/images/58061992-69a4-4cbe-aeee-d0842a3d28a3.png" alt=
=3D"Calibre Performance Newsletter" border=3D"0" width=3D"27" height=3D"30=
" style=3D"border: none;-ms-interpolation-mode: bicubic;max-width: 100%;he=
ight: 30px;width: 27px;margin: 0 10px 30px 0;padding: 0;float: left;"></a>
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #3057f4;font-size: 14px;margin: 0;">Performance<br>Newsletter</h4>
                          </div>
                        </td>
                        <td style=3D"font-family: -apple-system=2CBlinkMac=
SystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-seri=
f=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Seg=
oe UI Symbol&quot;;font-size: 17px;vertical-align: top;">
                          <h4 class=3D"issue-number" style=3D"font-weight:=
 bold;margin-bottom: 20px;line-height: 1.2;text-transform: uppercase;lette=
r-spacing: 1px;color: #3057f4;font-size: 14px;margin: 0;text-align: right;=
">Issue 37</h4>
                        </td>
                      </tr>
                      <tr>
                        <td colspan=3D"2" style=3D"font-family: -apple-sys=
tem=2CBlinkMacSystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CAri=
al=2Csans-serif=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quo=
t;=2C&quot;Segoe UI Symbol&quot;;font-size: 17px;vertical-align: top;">
                          <h4 style=3D"font-weight: bold;margin-bottom: 20=
px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color: #=
2b2b2b;font-size: 14px;">Editor=E2=80=99s Note</h4>
                          <p class=3D"mt0" style=3D"font-size: 17px;line-h=
eight: 1.5;margin-bottom: 30px;margin-top: 0;">It&rsquo;s exciting to see=
 the rise of technologies focused on speed. But many rely on the emergence=
 of 5G and HTTP/3 to be the panacea to performance headaches. Nothing more=
 wrong.<br>
<br>
To quote&nbsp;William Gibson=2C &rdquo;the future is already here&mdash;it=
&rsquo;s just not evenly distributed&rdquo;. The global digital divide is=
 always there.<br>
<br>
Our customers and users of the Internet will always operate in the context=
 relevant to their socioeconomic status=2C and that often vastly differs f=
rom our own.<br>
<br>
Speed is <em>always</em> relevant.</p>
                          <p class=3D"m0" style=3D"font-size: 17px;line-he=
ight: 1.5;margin-bottom: 30px;margin: 0;">=E2=80=94 Karolina</p>
                        </td>
                      </tr>
                    </table>
                  </div>
                </td>
              </tr>
              <!-- START MAIN CONTENT AREA -->
              <tr>
                <td style=3D"font-family: -apple-system=2CBlinkMacSystemFo=
nt=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-serif=2C&quo=
t;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Segoe UI Sy=
mbol&quot;;font-size: 17px;vertical-align: top;">
                  <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0"=
 style=3D"border-collapse: separate;mso-table-lspace: 0;mso-table-rspace:=
 0;table-width: fixed;width: 100%;">
                    <tr>
                      <td style=3D"font-family: -apple-system=2CBlinkMacSy=
stemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-serif=
=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Sego=
e UI Symbol&quot;;font-size: 17px;vertical-align: top;">

                        </td>
                      </tr>
                      <tr>
                        <td style=3D"font-family: -apple-system=2CBlinkMac=
SystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-seri=
f=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Seg=
oe UI Symbol&quot;;font-size: 17px;vertical-align: top;">
                          <div class=3D"article-section" mc:repeatable=3D"=
repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"0">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">article</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Dc481f50b57&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/e2=
8db34d-194c-4582-94f4-11020f3c573d.png" alt=3D"How we improved the perform=
ance of our live chat by 30%" border=3D"0" style=3D"margin: 0;padding: 0;b=
order: none;-ms-interpolation-mode: bicubic;max-width: 100%;" class=3D"art=
icle-image"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">Mitigate the performance impact of=
 live chat</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;">In his article=2C Calibre&rsquo;s platform developer=
=2C&nbsp;<a href=3D"https://calibreapp.us2.list-manage.com/track/click?u=
=3D9067434ef642e9c92aa7453d2&id=3Dce1d6258c7&e=3D9c8e2fdb89" target=3D"_b=
lank" style=3D"color: #3057f4;text-decoration: none;">Michael Dijkstra</a>=
&nbsp;describes how to mitigate the high performance cost of using live ch=
at tools on your sites. With his open source component=2C <a href=3D"https=
://calibreapp.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d=
2&id=3D40d18c2cdc&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057=
f4;text-decoration: none;">react live chat loader</a>=2C you&rsquo;ll be a=
ble to significantly improve Lighthouse Performance Score and Time to Inte=
ractive.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Dca57a=
684fe&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">How we=
 improved the performance of our live chat by 30% &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div><div class=3D"article-section" mc:repeat=
able=3D"repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"1">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">tools</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D50ef67b68d&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/6b=
b7f38f-c365-498a-95e6-6514c3ff7fcc.jpg" alt=3D"React Hooks for Remote Data=
 Fetching" border=3D"0" style=3D"margin: 0;padding: 0;border: none;-ms-int=
erpolation-mode: bicubic;max-width: 100%;" class=3D"article-image"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">Make your interfaces fast with dat=
a refetching</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;">SWR (stale while revalidate) is a React Hooks library=
 for remote data fetching that helps with making interfaces feel fast and=
 responsive. Thanks to folks at <a href=3D"https://calibreapp.us2.list-man=
age.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D1db63d7d8c&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"=
>Zeit</a>=2C you can manage updating data in the background=2C without dis=
rupting the user experience.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Dee16c=
30d34&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">SWR:&n=
bsp;React Hooks for Remote Data Fetching &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div><div class=3D"article-section" mc:repeat=
able=3D"repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"2">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">case study</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D90adeea266&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/b4=
f88934-f538-4534-a872-a4c443e0e9a6.jpg" alt=3D"How Discord achieves native=
 iOS performance with React Native" border=3D"0" style=3D"margin: 0;paddin=
g: 0;border: none;-ms-interpolation-mode: bicubic;max-width: 100%;" class=
=3D"article-image"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">How Discord sped up their app load=
 by 2 seconds</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;">In this excellent case study=2C&nbsp;<a href=3D"https=
://calibreapp.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d=
2&id=3Dc87be995c3&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057=
f4;text-decoration: none;">Miguel Gaeta</a>&nbsp;explains how Discord impl=
emented a range of optimisations to their React Native iOS app=2C proving=
 that no amount of milliseconds dropped is worthless. Focusing on battery=
 life and providing a 60fps experience on older iPhones (5=2C 6 and XS) th=
e article features quite a handful of actionable strategies.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Db9775=
a2525&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">How Di=
scord achieves native iOS performance with React Native &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div><div class=3D"article-section" mc:repeat=
able=3D"repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"3">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">article</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D1a18f45098&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/09=
d8f31d-7d01-4f52-8782-e1b72a1857f8.jpg" alt=3D"Responsible JavaScript: Par=
t III" border=3D"0" style=3D"margin: 0;padding: 0;border: none;-ms-interpo=
lation-mode: bicubic;max-width: 100%;" class=3D"article-image"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">Effectively manage third party Jav=
aScript</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;"><a href=3D"https://calibreapp.us2.list-manage.com/tra=
ck/click?u=3D9067434ef642e9c92aa7453d2&id=3D580a908a03&e=3D9c8e2fdb89" ta=
rget=3D"_blank" style=3D"color: #3057f4;text-decoration: none;">Jeremy Wag=
ner</a> is back with his Responsible JavaScript series. This time=2C he fo=
cuses on one of the biggest offenders nowadays&mdash;third party code=2C p=
roviding actionable strategies to prevent performance regressions and mana=
ge external tools in the long run.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D3c692=
6d633&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">Respon=
sible JavaScript: Part III &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div><div class=3D"article-section" mc:repeat=
able=3D"repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"4">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">talk</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D2c1bbbbcca&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/50=
c58ca2-63e2-40ff-a144-e454ae01c072.jpg" alt=3D"Monitoring and metrics in c=
hrome" border=3D"0" style=3D"margin: 0;padding: 0;border: none;-ms-interpo=
lation-mode: bicubic;max-width: 100%;" class=3D"article-image"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">Learn the ins and outs of performa=
nce monitoring</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;">In her talk=2C&nbsp;<a href=3D"https://calibreapp.us2=
=2Elist-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Dc282d45150=
&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoratio=
n: none;">Annie Sullivan</a> describes what characterises useful performan=
ce metrics and explains when performance monitoring is effective. A goldmi=
ne of performance knowledge=2C usually only known to the few working on to=
oling.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D01b7f=
8ea79&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">Lesson=
s learned from performance monitoring in Chrome &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div><div class=3D"article-section" mc:repeat=
able=3D"repeat_2" mc:label=3D"article_section" mc:repeatindex=3D"5">
                            <h4 style=3D"font-weight: bold;margin-bottom:=
 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;color=
: #2b2b2b;font-size: 14px;margin-top: 30px;">article</h4>
                            <a href=3D"https://calibreapp.us2.list-manage.=
com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D39036f98cb&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-decoration: none;"><im=
g src=3D"https://gallery.mailchimp.com/9067434ef642e9c92aa7453d2/images/1b=
a7bf53-a46e-40e4-99d3-ba1a2a84fde5.jpg" alt=3D"Six Web Performance Technol=
ogies to Watch in 2020" border=3D"0" style=3D"margin: 0;padding: 0;border:=
 none;-ms-interpolation-mode: bicubic;max-width: 100%;" class=3D"article-i=
mage"></a>
                            <h2 style=3D"font-weight: bold;margin-bottom:=
 30px;line-height: 1.2;color: #2b2b2b;">What speed technologies to watch f=
or in 2020</h2>
                            <p style=3D"font-size: 17px;line-height: 1.5;m=
argin-bottom: 30px;"><a href=3D"https://calibreapp.us2.list-manage.com/tra=
ck/click?u=3D9067434ef642e9c92aa7453d2&id=3D43c8d14753&e=3D9c8e2fdb89" ta=
rget=3D"_blank" style=3D"color: #3057f4;text-decoration: none;">Simon Hear=
ne</a> offers a high-level overview of what technologies are likely to cha=
nge the face of performance in the upcoming year. It&rsquo;s important to=
 remember the context of not only the devices we access the Web from but a=
lso slow adoption of fast networks like 5G.</p>
                              <a href=3D"" class=3D"article-link" style=3D=
"color: #3057f4;text-decoration: none;font-weight: bold;margin-bottom: 30p=
x;display: block;"></a><a class=3D"article-link" href=3D"https://calibreap=
p.us2.list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D1842d=
2ab2e&e=3D9c8e2fdb89" target=3D"_blank" style=3D"color: #3057f4;text-deco=
ration: none;font-weight: bold;margin-bottom: 30px;display: block;">Six We=
b Performance Technologies to Watch in 2020 &rarr;</a>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </div>
                          </td>
                        </tr>
                        <tr>
                          <td style=3D"font-family: -apple-system=2CBlinkM=
acSystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-se=
rif=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;S=
egoe UI Symbol&quot;;font-size: 17px;vertical-align: top;">
                            <div class=3D"article-section" mc:label=3D"">
                              <h4 style=3D"font-weight: bold;margin-bottom=
: 20px;line-height: 1.2;text-transform: uppercase;letter-spacing: 1px;colo=
r: #2b2b2b;font-size: 14px;margin-top: 30px;">
                                Spread the word about perf.email
                              </h4>
                              <p style=3D"font-size: 17px;line-height: 1.5=
;margin-bottom: 30px;">
                                We=E2=80=99d love to see more people readi=
ng
                                <a href=3D"https://calibreapp.us2.list-man=
age.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3D64e1ed25da&e=3D9c8e2fdb89" style=3D"color: #3057f4;text-decoration: none;">perf.email</a>; i=
f you=E2=80=99d
                                  like to help=E2=80=94forward this email=
 to a friend=2C tweet=2C=C2=A0or
                                  shout from a rooftop. It goes a long way=
=2E =E2=9C=8C=F0=9F=8F=BB
                                </p>
                              </div>
                              <hr style=3D"border: 0;border-bottom: 2px so=
lid #cfd8fc;">
                            </td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                    <!-- END MAIN CONTENT AREA -->
                  </table>
                  <!-- START FOOTER -->
                  <div class=3D"footer" style=3D"clear: both;text-align: c=
enter;width: 100%;">
                    <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0=
" style=3D"border-collapse: separate;mso-table-lspace: 0;mso-table-rspace:=
 0;table-width: fixed;width: 100%;">
                      <tr>
                        <td style=3D"font-family: -apple-system=2CBlinkMac=
SystemFont=2C&quot;Segoe UI&quot;=2CRoboto=2CHelvetica=2CArial=2Csans-seri=
f=2C&quot;Apple Color Emoji&quot;=2C&quot;Segoe UI Emoji&quot;=2C&quot;Seg=
oe UI Symbol&quot;;font-size: 14px;vertical-align: top;color: #5e5e5e;text=
-align: center;">
                          <div>
                            <h4 class=3D"mb0" style=3D"font-weight: bold;m=
argin-bottom: 0;line-height: 1.2;text-transform: uppercase;letter-spacing:=
 1px;color: #2b2b2b;font-size: 14px;">Brought to you by</h4>
                            <p class=3D"mt0" style=3D"font-size: 14px;line=
-height: 1.5;margin-bottom: 30px;margin-top: 0;color: #5e5e5e;text-align:=
 center;">
                              =E2=99=A0 <a href=3D"https://calibreapp.us2.=
list-manage.com/track/click?u=3D9067434ef642e9c92aa7453d2&id=3Db55bd56a96&=
e=3D9c8e2fdb89" style=3D"color: #5e5e5e;text-decoration: underline;font-s=
ize: 14px;text-align: center;">Calibre</a>. Make the
                              web fast for everyone.
                            </p>
                            <p style=3D"font-size: 14px;line-height: 1.5;m=
argin-bottom: 30px;color: #5e5e5e;text-align: center;"><div class=3D"vcard=
"><span class=3D"org fn">Calibre</span><div class=3D"adr"><div class=3D"st=
reet-address">149A Brunswick street</div><span class=3D"locality">Fizroy</=
span>=2C <span class=3D"region">Victoria</span>  <span class=3D"postal-cod=
e">3065</span> <div class=3D"country-name">Australia</div></div><br><a hre=
f=3D"https://calibreapp.us2.list-manage.com/vcard?u=3D9067434ef642e9c92aa7=
453d2&id=3D7cba5dc7bd" class=3D"hcard-download">Add us to your address boo=
k</a></div> </p>
                            <p class=3D"m0" style=3D"font-size: 14px;line-=
height: 1.5;margin-bottom: 30px;margin: 0;color: #5e5e5e;text-align: cente=
r;">
                              <a href=3D"https://calibreapp.us2.list-manag=
e.com/profile?u=3D9067434ef642e9c92aa7453d2&id=3D7cba5dc7bd&e=3D9c8e2fdb89"=
 style=3D"color: #5e5e5e;text-decoration: underline;font-size: 14px;text-a=
lign: center;">Update your profile</a>
                            </p>
                            <p class=3D"m0" style=3D"font-size: 14px;line-=
height: 1.5;margin-bottom: 30px;margin: 0;color: #5e5e5e;text-align: cente=
r;">
                              <a href=3D"https://calibreapp.us2.list-manag=
e.com/unsubscribe?u=3D9067434ef642e9c92aa7453d2&id=3D7cba5dc7bd&e=3D9c8e2fdb89&c=3D8347427c05" style=3D"color: #5e5e5e;text-decoration: underline;font=
-size: 14px;text-align: center;">Unsubscribe</a>
                            </p>
                            <p class=3D"m0" style=3D"font-size: 14px;line-=
height: 1.5;margin-bottom: 30px;margin: 0;color: #5e5e5e;text-align: cente=
r;">
                              <a href=3D"https://mailchi.mp/perf.email/37?=
e=3D9c8e2fdb89" style=3D"color: #5e5e5e;text-decoration: underline;font-size=
: 14px;text-align: center;">View in a browser</a>
                            </p>
                          </div>
                        </td>
                      </tr>
                    </table>
                  </div>
                  <!-- END FOOTER -->
                  <!-- END CENTERED WHITE CONTAINER -->
                </td>
              </tr>
            </table>
          <img src=3D"https://calibreapp.us2.list-manage.com/track/open.ph=
p?u=3D9067434ef642e9c92aa7453d2&id=3D8347427c05&e=3D9c8e2fdb89" height=3D=
"1" width=3D"1"></body>
</html>
--_----------=_MCPart_1702819158--
cketti commented 4 years ago

Works for me. The crash happens inside the TextView UI widget that is part of the system. Chances are this is a LineageOS specific issue.

callmemagnus commented 4 years ago

I was afraid of that. And as my phone is not part anymore of their supported devices... I'm left here crying...

maffe commented 4 years ago

I also get an ArrayIndexOutOfBoundsException at android.text.TextLine.measure(TextLine.java:343) on a bq Aquaris X2 Pro (Android 9, patch level 2019-12-05, official version, not rooted) when trying to open K9-Mail 5.600 from Google Play Store. Currently I cannot open K9-Mail at all. I will have to use another system to delete the causing mail.

cketti commented 4 years ago

I'm happy to look at pull requests working around this bug. But short of some external contribution I don't see this crash being fixed.