<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Comficker</title>
    <description>The latest articles on DEV Community by Comficker (@enshunt).</description>
    <link>https://dev.to/enshunt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F900157%2Fd1fa160d-e9bd-4975-ae5f-42fbaf9de221.png</url>
      <title>DEV Community: Comficker</title>
      <link>https://dev.to/enshunt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/enshunt"/>
    <language>en</language>
    <item>
      <title>Mobile App Trends</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Sat, 27 Jun 2026 16:36:46 +0000</pubDate>
      <link>https://dev.to/enshunt/mobile-app-trends-2lni</link>
      <guid>https://dev.to/enshunt/mobile-app-trends-2lni</guid>
      <description>&lt;h1&gt;
  
  
  Mobile App Trends
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Executive summary
&lt;/h2&gt;

&lt;p&gt;The global mobile app market in 2026 is large, mature, and still growing, but growth has shifted from raw user acquisition toward monetization, retention, and product depth. On a &lt;strong&gt;broad software-market definition&lt;/strong&gt;, Grand View Research estimates the global mobile application market at &lt;strong&gt;$252.9 billion in 2023&lt;/strong&gt; and projects &lt;strong&gt;$626.4 billion by 2030&lt;/strong&gt; at a &lt;strong&gt;14.3% CAGR&lt;/strong&gt;. On a &lt;strong&gt;store-economy definition&lt;/strong&gt; focused on consumer spend via major app stores, Sensor Tower reports &lt;strong&gt;$167 billion&lt;/strong&gt; in in-app purchases and paid-app revenue across iOS and Google Play in &lt;strong&gt;2025&lt;/strong&gt;, up &lt;strong&gt;10.6% year over year&lt;/strong&gt;; Q1 2026 data indicate the market is tracking modestly higher again, suggesting a &lt;strong&gt;rough 2026 run-rate in the high-$170 billions&lt;/strong&gt;, although that estimate should be treated as directional because methodologies vary across sources. Apple’s App Store ecosystem separately facilitated &lt;strong&gt;$1.4 trillion in billings and sales in 2025&lt;/strong&gt;, showing how much economic activity sits outside direct app-store commissions, especially in physical goods and services.&lt;/p&gt;

&lt;p&gt;Three structural shifts stand out. First, &lt;strong&gt;non-game apps now drive most revenue growth&lt;/strong&gt;, with AI, productivity, entertainment, photo/video, and subscriptions outpacing the more mature games market. AppTweak’s 2025 category data show &lt;strong&gt;Games&lt;/strong&gt; still leading by both downloads and revenue, but &lt;strong&gt;Productivity&lt;/strong&gt; was the fastest-growing major revenue category, while Sensor Tower says &lt;strong&gt;non-gaming app IAP revenue surpassed games for the first time in 2025&lt;/strong&gt;. Second, &lt;strong&gt;Android remains the volume platform while iOS remains the value platform&lt;/strong&gt;: Android held about &lt;strong&gt;68%&lt;/strong&gt; of global mobile OS usage in May 2026, but Apple captured the larger share of store spend and broader platform monetization. Third, &lt;strong&gt;privacy and competition rules are reshaping growth tactics&lt;/strong&gt;: ATT, Google’s Privacy Sandbox, DMA-driven billing changes in Europe, and new developer verification requirements are forcing more first-party data, better onboarding, and more diversified monetization.&lt;/p&gt;

&lt;p&gt;For app publishers, the strategic implication is straightforward: the old playbook of “scale installs, then optimize later” is weakening. The winning playbook in 2026 is &lt;strong&gt;ASO plus paid acquisition discipline, activation-focused onboarding, subscription and hybrid monetization, localized product pages, AI-powered product loops, and stronger analytics tied to cohort retention and payback&lt;/strong&gt;. Publishers that can raise Day-1 activation, increase session quality rather than just session count, and match monetization model to category economics will outperform those that keep chasing broad top-of-funnel growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Market size and regional shape
&lt;/h2&gt;

&lt;p&gt;Two definitions of “market size” matter, and mixing them causes confusion. The &lt;strong&gt;broader mobile application market&lt;/strong&gt; includes software value generated across categories and is estimated by Grand View at &lt;strong&gt;$252.89 billion in 2023&lt;/strong&gt;, with a forecast of &lt;strong&gt;$626.39 billion in 2030&lt;/strong&gt;. Another industry estimate from Fortune Business Insights places the market at &lt;strong&gt;$298.40 billion in 2025&lt;/strong&gt; and &lt;strong&gt;$330.02 billion in 2026&lt;/strong&gt;, with Asia Pacific holding &lt;strong&gt;52.92%&lt;/strong&gt; of the market in 2025. By contrast, the &lt;strong&gt;store-economy measure&lt;/strong&gt; counts app-store consumer spend only; Sensor Tower reports &lt;strong&gt;$167 billion in 2025&lt;/strong&gt; across iOS and Google Play, while AppTweak estimates &lt;strong&gt;$150.5 billion&lt;/strong&gt; for 2025 using a different category-level methodology. The right way to read these numbers is that the broader software market is materially larger than direct store spend, and source-to-source differences partly reflect scope and taxonomy rather than contradictory direction.&lt;/p&gt;

&lt;p&gt;Historical growth also shows why the market now feels more mature. App Annie/data.ai reported about &lt;strong&gt;$143 billion&lt;/strong&gt; in app consumer spend in 2020, &lt;strong&gt;$170 billion&lt;/strong&gt; in 2021, and &lt;strong&gt;$167 billion&lt;/strong&gt; in 2022, with downloads rising to &lt;strong&gt;230 billion&lt;/strong&gt; in 2021 and &lt;strong&gt;255 billion&lt;/strong&gt; in 2022 under its then-standard cross-store methodology. Sensor Tower’s more recent framing emphasizes that &lt;strong&gt;2025 revenue grew much faster than downloads&lt;/strong&gt;, which rose only &lt;strong&gt;0.8%&lt;/strong&gt; while IAP revenue rose &lt;strong&gt;10.6%&lt;/strong&gt;. That is the clearest signal that the market is no longer primarily an acquisition story; it is a monetization and engagement story.&lt;/p&gt;

&lt;p&gt;This chart combines Grand View’s 2023 and 2030 estimates with Fortune Business Insights’ 2025 and 2026 estimates, so it is best read as a triangulated market outlook rather than a single-source audited time series. The direction is consistent across both sources: double-digit annual growth, with the largest weight in Asia Pacific.&lt;/p&gt;

&lt;p&gt;Regionally, the market is bifurcated between &lt;strong&gt;high-value mature markets&lt;/strong&gt; and &lt;strong&gt;high-volume emerging markets&lt;/strong&gt;. Sensor Tower says the &lt;strong&gt;United States remained the largest market by revenue, at nearly $60 billion in 2025&lt;/strong&gt;, while Western Europe also posted strong contribution to growth. At the other end, &lt;strong&gt;India&lt;/strong&gt; remains the scale outlier: it rebounded to &lt;strong&gt;25.5 billion app downloads in 2025&lt;/strong&gt;, and Q1 2026 revenue there surpassed &lt;strong&gt;$300 million&lt;/strong&gt;, up &lt;strong&gt;33% year over year&lt;/strong&gt;, helped by AI and short-drama apps. Fortune’s broader-market view also places &lt;strong&gt;Asia Pacific&lt;/strong&gt; clearly ahead, at &lt;strong&gt;$157.94 billion in 2025&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For publishers, the risk is applying one-market assumptions globally. North America, Japan, the UK, and parts of Western Europe still justify premium subscriptions and higher LTV expectations, while India, Brazil, Southeast Asia, and parts of LATAM tend to reward Android-first distribution, ads, payments integration, and lower-friction onboarding. The strategic recommendation is to build &lt;strong&gt;regional monetization lanes&lt;/strong&gt; instead of one global pricing stack: premium and annual-plan emphasis in high-spend markets, hybrid monetization and localized payments in scale markets, and separate ASO creative for each cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Categories and platforms
&lt;/h2&gt;

&lt;p&gt;Category economics are now more important than category size. In 2025, &lt;strong&gt;Games&lt;/strong&gt; remained the largest category by downloads and by revenue, but the categories right behind it tell the real story: &lt;strong&gt;Entertainment, Finance, Productivity, Shopping, Social, and Photo &amp;amp; Video&lt;/strong&gt; all operate with very different monetization physics. Downloads are broad-based; revenue is concentrated.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Top categories by downloads in 2025&lt;/th&gt;
&lt;th&gt;Downloads&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;th&gt;Top categories by revenue in 2025&lt;/th&gt;
&lt;th&gt;Revenue&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Games&lt;/td&gt;
&lt;td&gt;33.0B&lt;/td&gt;
&lt;td&gt;29.9%&lt;/td&gt;
&lt;td&gt;Games&lt;/td&gt;
&lt;td&gt;$73.5B&lt;/td&gt;
&lt;td&gt;48.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Entertainment&lt;/td&gt;
&lt;td&gt;10.1B&lt;/td&gt;
&lt;td&gt;9.1%&lt;/td&gt;
&lt;td&gt;Entertainment&lt;/td&gt;
&lt;td&gt;$19.5B&lt;/td&gt;
&lt;td&gt;13.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Finance&lt;/td&gt;
&lt;td&gt;6.7B&lt;/td&gt;
&lt;td&gt;6.0%&lt;/td&gt;
&lt;td&gt;Productivity&lt;/td&gt;
&lt;td&gt;$9.1B&lt;/td&gt;
&lt;td&gt;6.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Productivity&lt;/td&gt;
&lt;td&gt;6.0B&lt;/td&gt;
&lt;td&gt;5.4%&lt;/td&gt;
&lt;td&gt;Photo &amp;amp; Video&lt;/td&gt;
&lt;td&gt;$8.8B&lt;/td&gt;
&lt;td&gt;5.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Shopping&lt;/td&gt;
&lt;td&gt;5.8B&lt;/td&gt;
&lt;td&gt;5.2%&lt;/td&gt;
&lt;td&gt;Social&lt;/td&gt;
&lt;td&gt;$6.2B&lt;/td&gt;
&lt;td&gt;4.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Social&lt;/td&gt;
&lt;td&gt;4.6B&lt;/td&gt;
&lt;td&gt;4.2%&lt;/td&gt;
&lt;td&gt;Lifestyle&lt;/td&gt;
&lt;td&gt;$5.4B&lt;/td&gt;
&lt;td&gt;3.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;3.9B&lt;/td&gt;
&lt;td&gt;3.6%&lt;/td&gt;
&lt;td&gt;Health &amp;amp; Fitness&lt;/td&gt;
&lt;td&gt;$4.9B&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Photo &amp;amp; Video&lt;/td&gt;
&lt;td&gt;3.5B&lt;/td&gt;
&lt;td&gt;3.2%&lt;/td&gt;
&lt;td&gt;Dating&lt;/td&gt;
&lt;td&gt;$4.6B&lt;/td&gt;
&lt;td&gt;3.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Health &amp;amp; Fitness&lt;/td&gt;
&lt;td&gt;3.3B&lt;/td&gt;
&lt;td&gt;3.0%&lt;/td&gt;
&lt;td&gt;Education&lt;/td&gt;
&lt;td&gt;$3.8B&lt;/td&gt;
&lt;td&gt;2.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Travel&lt;/td&gt;
&lt;td&gt;2.9B&lt;/td&gt;
&lt;td&gt;2.6%&lt;/td&gt;
&lt;td&gt;Finance&lt;/td&gt;
&lt;td&gt;$0.4B&lt;/td&gt;
&lt;td&gt;0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source dataset: AppTweak Market Intelligence, global, App Store + Google Play, full-year 2025.&lt;/p&gt;

&lt;p&gt;The table shows four important trends. &lt;strong&gt;Games&lt;/strong&gt; still dominate, but not absolutely. &lt;strong&gt;Entertainment&lt;/strong&gt; is now large on both demand and spend. &lt;strong&gt;Productivity&lt;/strong&gt; is the standout monetization winner, with &lt;strong&gt;79.3% YoY revenue growth&lt;/strong&gt; in 2025, which aligns with the rise of AI copilots, work utilities, and subscription willingness for daily-use tools. &lt;strong&gt;Finance&lt;/strong&gt; demonstrates the opposite pattern: huge download volume, but very low direct revenue, because much of its value is monetized outside app-store IAP.&lt;/p&gt;

&lt;p&gt;Leading company examples fit this pattern. On the download side, AppTweak says &lt;strong&gt;ChatGPT led the world in 2025 with 845.3 million downloads&lt;/strong&gt;, ahead of Instagram and TikTok, showing that AI utilities can now out-acquire social incumbents. On engagement and scale, Sensor Tower says ChatGPT became the fastest app ever to hit &lt;strong&gt;1 billion downloads&lt;/strong&gt; and later reached &lt;strong&gt;1 billion monthly active users&lt;/strong&gt; on mobile according to Sensor Tower data reported by Reuters. On revenue, Business of Apps says &lt;strong&gt;TikTok remained the top-grossing app in 2025&lt;/strong&gt; with about &lt;strong&gt;$3.3 billion&lt;/strong&gt; in IAP, while games such as Honor of Kings and major streaming apps continued to anchor spend.&lt;/p&gt;

&lt;p&gt;Platform share is best understood in three layers: device usage, app downloads, and app revenue.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Android / Google Play&lt;/th&gt;
&lt;th&gt;iOS / App Store&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Global mobile OS usage, May 2026&lt;/td&gt;
&lt;td&gt;~68.0% Android&lt;/td&gt;
&lt;td&gt;~31.9% iOS&lt;/td&gt;
&lt;td&gt;Android is still the distribution default globally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025 store consumer spend&lt;/td&gt;
&lt;td&gt;~$49B Google Play&lt;/td&gt;
&lt;td&gt;~$117B App Store&lt;/td&gt;
&lt;td&gt;iOS users monetize far better in aggregate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qualitative download pattern&lt;/td&gt;
&lt;td&gt;Majority of installs globally&lt;/td&gt;
&lt;td&gt;Smaller install base&lt;/td&gt;
&lt;td&gt;Google Play wins scale; App Store wins value&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources note that Android/OS share and app-store spend are different lenses and should not be conflated.&lt;/p&gt;

&lt;p&gt;Android’s scale advantage still matters for user acquisition, network effects, and emerging-market reach, but iOS retains the stronger monetization profile, especially for subscriptions, premium productivity, finance, and higher-income geographies. The risk for publishers is optimizing only for volume. The better recommendation is to use &lt;strong&gt;Android for distribution and test velocity&lt;/strong&gt;, then use &lt;strong&gt;iOS for price discovery, subscription optimization, and premium creative&lt;/strong&gt;—unless your core geography is already iOS-heavy.&lt;/p&gt;

&lt;h2&gt;
  
  
  User behavior and monetization
&lt;/h2&gt;

&lt;p&gt;User behavior in 2026 is intense but selective. Sensor Tower says consumers spent &lt;strong&gt;5.3 trillion hours in apps in 2025&lt;/strong&gt;, while time-spent growth and downloads both slowed in mature markets. That combination means users are not abandoning mobile; they are consolidating around fewer, higher-value apps. Sensor Tower also says consumers are now using &lt;strong&gt;30+ apps per month&lt;/strong&gt;, and average daily time is roughly &lt;strong&gt;3.6 hours&lt;/strong&gt; in recent market summaries.&lt;/p&gt;

&lt;p&gt;Retention remains the hardest problem in mobile. UXCam’s 2026 benchmark synthesis, based on AppsFlyer, Adjust, data.ai, and UXCam data, puts &lt;strong&gt;median Day-1 retention at 25%&lt;/strong&gt;, &lt;strong&gt;Day-7 at 8%&lt;/strong&gt;, and &lt;strong&gt;Day-30 at 4%&lt;/strong&gt; across all categories. Strong performers run materially above that, especially in social, finance, productivity, and streaming. Productivity apps, for example, can reach &lt;strong&gt;12–18% Day-30 retention&lt;/strong&gt; in strong cohorts, while gaming and ecommerce are typically much lower.&lt;/p&gt;

&lt;p&gt;Session quality differs sharply by vertical. Adjust’s 2026 preview shows &lt;strong&gt;casual game session length at 25.92 minutes&lt;/strong&gt; after a &lt;strong&gt;15% increase&lt;/strong&gt;, while &lt;strong&gt;finance app sessions averaged 7.18 minutes&lt;/strong&gt; and rose &lt;strong&gt;8%&lt;/strong&gt; in 2025. In shopping, shorter sessions can still be healthy if conversion rises, because they may reflect faster purchase completion rather than lower engagement. This is why publishers should stop using a single engagement KPI across all categories.&lt;/p&gt;

&lt;p&gt;DAU/MAU, or stickiness, is similarly contextual. Mixpanel’s 2026 benchmarking across &lt;strong&gt;12,000+ companies and 3.7 trillion events&lt;/strong&gt; shows 2025 stickiness around &lt;strong&gt;20–23% for ecommerce&lt;/strong&gt;, &lt;strong&gt;20–36% for banking/fintech depending on region&lt;/strong&gt;, and &lt;strong&gt;21–37% for AI products&lt;/strong&gt;, with LATAM often higher than North America in daily habit formation. For mobile publishers, the implication is not that every app should target 50%+ stickiness; rather, you should benchmark against your &lt;strong&gt;usage cadence&lt;/strong&gt;. Daily-utility apps should optimize DAU/MAU. Episodic apps should prioritize repeat purchase, weekly activity, or subscription renewal instead.&lt;/p&gt;

&lt;p&gt;Monetization models are diverging, not converging. Apple and Google both provide strong first-party support for &lt;strong&gt;one-time IAP&lt;/strong&gt;, &lt;strong&gt;consumables&lt;/strong&gt;, &lt;strong&gt;auto-renewing subscriptions&lt;/strong&gt;, and promoted purchases. Apple emphasizes &lt;strong&gt;promoted in-app purchases&lt;/strong&gt;, &lt;strong&gt;custom product pages&lt;/strong&gt;, and rich pricing controls for subscriptions; Google Play emphasizes Billing, subscriptions, in-app products, and new commerce programs. Apple’s Small Business Program still offers &lt;strong&gt;15% commission&lt;/strong&gt; for eligible developers under &lt;strong&gt;$1 million&lt;/strong&gt; in proceeds, and Google is expanding billing-choice programs in selected markets.&lt;/p&gt;

&lt;p&gt;Subscriptions are still the strongest non-game monetization engine, but they are becoming more category-specific. RevenueCat’s 2026 subscription report covers &lt;strong&gt;115,000+ apps&lt;/strong&gt;, &lt;strong&gt;$16 billion&lt;/strong&gt; in revenue, and &lt;strong&gt;1+ billion transactions&lt;/strong&gt;, while AppsFlyer’s subscription-marketing report says Android is rising and that the next subscriber is increasingly coming from &lt;strong&gt;India, LATAM, and the Middle East&lt;/strong&gt;. That suggests subscription growth is broadening geographically, not only deepening in the US and Europe. At the same time, ad-led and hybrid models remain critical for markets and categories where willingness to pay is lower.&lt;/p&gt;

&lt;p&gt;Rewarded advertising remains one of the healthiest ad formats because it aligns a clear user action with a clear reward. Google says rewarded ads let users earn in-app rewards for watching &lt;strong&gt;video ads, playable ads, and surveys&lt;/strong&gt;, and AdMob’s playbook emphasizes placement and opt-in design quality. AppsFlyer’s 2026 monetization framing also points toward &lt;strong&gt;hybrid monetization&lt;/strong&gt;—combining ads and IAP/subscriptions—as a major future pattern, particularly where publishers need both reach and depth.&lt;/p&gt;

&lt;p&gt;The main risk here is monetization-model mismatch. Finance, commerce, and utility apps often over-index on subscription before they have enough daily value; gaming publishers sometimes underuse rewarded ads or web stores; media apps often price too uniformly across countries. The recommendation is to choose model by &lt;strong&gt;behavioral frequency and willingness to pay&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
frequent utility → subscription-first;&lt;br&gt;&lt;br&gt;
broad entertainment or gaming → hybrid IAP + ads;&lt;br&gt;&lt;br&gt;
episodic commerce/finance → low-friction free core + partner/transaction economics outside store billing where permitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Store dynamics and growth levers
&lt;/h2&gt;

&lt;p&gt;App store optimization is becoming more operational and more measurable. Apple’s App Store Connect now explicitly supports &lt;strong&gt;keywords, localized metadata, up to 10 screenshots and 3 previews per language, product page optimization, custom product pages, in-app events, and promoted in-app purchases&lt;/strong&gt;. Google Play Console similarly emphasizes &lt;strong&gt;store listing optimization, A/B tests, market insights, acquisition analysis, and Android vitals&lt;/strong&gt;. In other words, both stores now expect publishers to treat the store page as an actively managed conversion funnel, not a one-time listing.&lt;/p&gt;

&lt;p&gt;Benchmarks show the funnel still has room to improve. AppTweak found that in the US in 2025, average store-page conversion was &lt;strong&gt;8.56% on the App Store&lt;/strong&gt; and &lt;strong&gt;16.15% on Google Play&lt;/strong&gt;, while the average App Store &lt;strong&gt;install rate from search/browse impressions&lt;/strong&gt; was &lt;strong&gt;3.8%&lt;/strong&gt;. That means most apps still leak substantial demand before install. The App Store’s structure also makes creative especially important because users can install directly from search and browse results without opening the full product page.&lt;/p&gt;

&lt;p&gt;Featuring still matters, but the selection logic differs by store. Apple’s ecosystem remains more editorial and storytelling-oriented, while Google Play places heavier weight on technical quality, performance, compatibility, and trust signals. AppTweak’s featuring guide notes that Apple nominations are often most effective when submitted &lt;strong&gt;4–6 weeks ahead&lt;/strong&gt; of launches or updates; it also notes that Google Play’s editorial consideration is narrower and more quality-gated. Appfigures tracks featuring because it still influences chart position, impressions, and long-tail credibility.&lt;/p&gt;

&lt;p&gt;Store supply is tightening, especially on Google Play. Apple’s 2025 App Store Transparency Report lists &lt;strong&gt;2,172,472 apps&lt;/strong&gt;, &lt;strong&gt;9.1 million submissions reviewed&lt;/strong&gt;, and &lt;strong&gt;166,899 apps removed&lt;/strong&gt; in 2025. Google says it prevented &lt;strong&gt;2.36 million&lt;/strong&gt; policy-violating apps from being published in 2024 and banned &lt;strong&gt;158,000+&lt;/strong&gt; bad developer accounts. Independent market tracking has also shown a major reduction in Play Store app count since early 2024, driven by stricter review, testing, and anti-spam measures. For high-quality publishers, that is more opportunity than threat: less clutter means better discovery if your app is strong enough to survive the filter.&lt;/p&gt;

&lt;p&gt;Strategically, publishers should treat store growth as a compound system: &lt;strong&gt;ASO metadata + creative testing + featuring eligibility + ratings/reviews + technical quality + localized pages&lt;/strong&gt;. Apple custom product pages are especially valuable for channel- and audience-specific creative because they can map to ad routes, different features, and even organic keyword strategies. The highest-return recommendation is to move from one default store page to &lt;strong&gt;a portfolio of intent-matched landing pages&lt;/strong&gt; by geography, campaign, and use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology and developer stack
&lt;/h2&gt;

&lt;p&gt;AI is no longer a feature layer; it is becoming mobile infrastructure. Sensor Tower says generative AI was the defining mobile growth driver of 2025, and its 2026 AI report says global time spent on generative AI apps is projected to rise from &lt;strong&gt;17.2 billion hours in H1 2025&lt;/strong&gt; to &lt;strong&gt;36 billion hours in H1 2026&lt;/strong&gt;. It also reports that AI mobile-app revenue expanded from &lt;strong&gt;under $60 million in Q1 2023&lt;/strong&gt; to &lt;strong&gt;$1.9 billion in Q1 2026&lt;/strong&gt;, and Reuters reported that ChatGPT’s app reached &lt;strong&gt;1 billion monthly active users&lt;/strong&gt; in June 2026. That is no longer niche behavior; it is mainstream mobile infrastructure.&lt;/p&gt;

&lt;p&gt;AR/VR remains important but selective. Apple positions &lt;strong&gt;ARKit&lt;/strong&gt; and &lt;strong&gt;RealityKit&lt;/strong&gt; as core frameworks for large-scale AR experiences on iOS and iPadOS, while Google’s &lt;strong&gt;ARCore&lt;/strong&gt; supports Android, iOS, Unity, and web experiences with motion tracking, environmental understanding, and light estimation. The important trend is not mass AR adoption across all categories; it is the steady integration of AR into high-intent use cases such as commerce, education, design, and location-aware utilities.&lt;/p&gt;

&lt;p&gt;On connectivity, GSMA says &lt;strong&gt;5G connections surpassed 2.7 billion at the end of 2025&lt;/strong&gt;, and its Mobile Economy 2026 outlook says &lt;strong&gt;80% of global mobile connections will be 5G by 2030&lt;/strong&gt;. GSMA also forecasts &lt;strong&gt;5.6 billion 5G connections by 2030&lt;/strong&gt;, with a strong shift toward standalone 5G. For app publishers, the practical implications are lower tolerance for latency, rising video and real-time collaboration expectations, and better economics for cloud-assisted and AI-assisted workflows.&lt;/p&gt;

&lt;p&gt;PWAs and instant experiences continue to matter where friction is expensive. Google’s web.dev defines Progressive Web Apps as installable web apps that deliver a more integrated, reliable experience from a single web codebase, and Android’s Instant Apps framework continues to support lightweight try-before-install patterns. PWAs still do not replace native for every category, but they are strategically useful for top-of-funnel acquisition, markets with lower-end devices, and functions that users need occasionally rather than habitually.&lt;/p&gt;

&lt;p&gt;Edge computing is still an enabling layer more than a mainstream app feature, but its relevance is rising with AI and 5G. GSMA highlights edge AI and edge computing as ways to reduce bandwidth and cloud costs, improve resilience in low-connectivity settings, and strengthen privacy by keeping more processing local or near-local. That matters most for latency-sensitive use cases such as streaming, gaming, AR, computer vision, and on-device intelligence.&lt;/p&gt;

&lt;p&gt;The developer framework landscape is settling into clearer roles:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;th&gt;Main strengths&lt;/th&gt;
&lt;th&gt;Main trade-offs&lt;/th&gt;
&lt;th&gt;Publisher takeaway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flutter&lt;/td&gt;
&lt;td&gt;Consumer apps needing one codebase across mobile/web/desktop&lt;/td&gt;
&lt;td&gt;Single codebase, native compilation, strong UI control, broad platform reach&lt;/td&gt;
&lt;td&gt;Dart hiring pool is smaller; larger binaries and platform-specific edge cases can matter&lt;/td&gt;
&lt;td&gt;Strong for design-heavy, cross-platform products with limited native-team scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native&lt;/td&gt;
&lt;td&gt;Teams with deep JavaScript/React talent and fast iteration needs&lt;/td&gt;
&lt;td&gt;Large talent pool, mature ecosystem, improving performance under New Architecture&lt;/td&gt;
&lt;td&gt;Bridge/compatibility complexity historically; some native modules still require care&lt;/td&gt;
&lt;td&gt;Still strong for product-led teams already invested in React; migration to New Architecture is now strategic, not optional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SwiftUI&lt;/td&gt;
&lt;td&gt;Apple-only or Apple-first apps&lt;/td&gt;
&lt;td&gt;Best alignment with Apple platform APIs, strong native UX, concise declarative UI&lt;/td&gt;
&lt;td&gt;Apple ecosystem only; not cross-platform&lt;/td&gt;
&lt;td&gt;Best for premium iOS/iPadOS/macOS experiences where Apple UX quality is core to the brand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kotlin Multiplatform&lt;/td&gt;
&lt;td&gt;Shared business logic with native UI, especially Android-first organizations&lt;/td&gt;
&lt;td&gt;Native performance, reusable core code, production-ready shared logic, optional shared UI with Compose Multiplatform&lt;/td&gt;
&lt;td&gt;Architectural complexity; iOS team still needed for native polish unless sharing UI&lt;/td&gt;
&lt;td&gt;Best for firms wanting code reuse without giving up native performance or platform-specific UX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The main risk in framework choice is choosing for ideology instead of operating model. If UX differentiation, camera, AR, payments, and platform-native polish matter most, native or KMP-heavy approaches win. If time-to-market and code reuse dominate, Flutter or React Native is often superior. The best recommendation is to align framework choice to &lt;strong&gt;org design, talent pool, and product risk&lt;/strong&gt;, not trendiness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy, regulation, adtech, and investment
&lt;/h2&gt;

&lt;p&gt;The post-ATT environment has made measurement harder and first-party product strength more important. Apple’s App Tracking Transparency requires user permission for cross-app tracking, while Google’s Privacy Sandbox on Android is building privacy-preserving approaches to ads measurement and targeting. Both changes reduce blind dependence on user-level ad identifiers and shift advantage toward publishers with strong onboarding, owned audiences, better cohort analytics, and durable product value.&lt;/p&gt;

&lt;p&gt;The regulatory layer is now directly affecting monetization design. In the EU, Apple’s DMA compliance changes introduced new business terms, alternative distribution options, and fee restructuring, while Google in June 2026 expanded billing-choice programs that let eligible developers offer alternative billing or link out to external purchase flows in selected markets. The European Commission’s DMA enforcement explicitly requires that app developers be able to steer users to outside offers. These changes do not eliminate app-store economics, but they clearly widen the monetization design space.&lt;/p&gt;

&lt;p&gt;Adtech is also re-centering around performance, programmatic, and mobile. IAB says &lt;strong&gt;programmatic advertising revenue reached $134.8 billion in 2024&lt;/strong&gt;, up &lt;strong&gt;18%&lt;/strong&gt;, and the digital advertising industry reached &lt;strong&gt;nearly $300 billion in 2025&lt;/strong&gt;. EMARKETER notes that &lt;strong&gt;nearly two-thirds of digital ad spend in 2025&lt;/strong&gt; will be delivered on mobile devices. For app publishers, that means mobile ad demand is still structurally healthy even as targeting mechanics change. The opportunity is less about broad ad volume than about better inventory packaging, better contextual signals, rewarded/video formats, and hybrid monetization models tied to engagement and LTV.&lt;/p&gt;

&lt;p&gt;On investment and M&amp;amp;A, consolidation and specialization are both rising. Sensor Tower acquired &lt;strong&gt;data.ai in 2024&lt;/strong&gt; and &lt;strong&gt;AppMagic in 2026&lt;/strong&gt;, consolidating mobile intelligence. In gaming, Scopely closed its acquisition of &lt;strong&gt;Niantic’s games business&lt;/strong&gt; in May 2025, bringing Pokémon GO and other titles into its portfolio, while AppLovin completed the sale of its mobile gaming business to &lt;strong&gt;Tripledot&lt;/strong&gt; in 2025. These are not isolated deals; they reflect a broader pattern in which scaled operators are buying audience, analytics, and live-ops capability rather than building everything organically.&lt;/p&gt;

&lt;p&gt;The risk for publishers is regulatory fragmentation and monetization whiplash: rules differ by geography, attribution quality is uneven, and fee structures are in flux. The strategic recommendation is to build a more resilient revenue stack: &lt;strong&gt;first-party lifecycle CRM, subscription billing sophistication, optional web billing where permitted, hybrid ads + IAP for the right categories, and country-specific compliance playbooks&lt;/strong&gt;. Publishers that treat compliance as product strategy—not just legal overhead—will move faster than those that bolt it on later.&lt;/p&gt;

&lt;p&gt;This timeline captures the sequence that matters operationally most for publishers: privacy shock, measurement adaptation, regulatory opening, and a shift toward hybrid, retention-led monetization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategic implications for app publishers
&lt;/h2&gt;

&lt;p&gt;The strongest evidence in the market points to five practical moves. First, publishers should optimize for &lt;strong&gt;activation before scaling paid acquisition&lt;/strong&gt;. With median Day-30 retention around &lt;strong&gt;4%&lt;/strong&gt;, weak onboarding turns paid growth into a leak. Second, publishers should align monetization to category physics: productivity and AI can support subscriptions; games and broad entertainment often need hybrid IAP + ad models; finance and commerce should not force app-store monetization where the model does not fit. Third, teams should localize harder: price, creatives, landing pages, and even platform priority should differ by region. Fourth, publishers should upgrade measurement around &lt;strong&gt;cohort retention, DAU/MAU where relevant, renewal, and time-to-value&lt;/strong&gt;, instead of relying on installs and aggregate MAU alone. Fifth, app-store presence itself should be run like a performance channel, with product page testing, feature-specific pages, and seasonal editorial planning.&lt;/p&gt;

&lt;p&gt;A good rule of thumb for the 2026 market is this: &lt;strong&gt;distribution is abundant, attention is scarce, and monetization belongs to products that become routines&lt;/strong&gt;. The categories gaining fastest are not merely entertaining or useful; they are building daily or weekly habits, or they are reducing friction so dramatically that users will pay to save time. That is why AI copilots, entertainment services, wallets, and workflow apps are outperforming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open questions and limitations
&lt;/h2&gt;

&lt;p&gt;This report uses the best available public sources, but there are three meaningful data limitations. First, &lt;strong&gt;market-size definitions differ&lt;/strong&gt;: some sources measure the broader mobile-software market, while others measure only app-store consumer spend; those numbers should not be compared as if they were identical. Second, &lt;strong&gt;historical series from 2020–2022 and later Sensor Tower/AppTweak series are not perfectly methodological matches&lt;/strong&gt;, so directional trend is more reliable than exact year-to-year comparability across all sources. Third, &lt;strong&gt;true global averages for session length, retention, and DAU/MAU do not exist in one canonical primary-source dataset&lt;/strong&gt;; the most useful benchmarks are category- and region-specific ranges drawn from analytics providers such as Adjust, AppsFlyer, UXCam, and Mixpanel.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>flutter</category>
      <category>react</category>
    </item>
    <item>
      <title>HTML Canvas cheat sheet</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Fri, 06 Oct 2023 03:26:44 +0000</pubDate>
      <link>https://dev.to/enshunt/html-canvas-cheat-sheet-48pg</link>
      <guid>https://dev.to/enshunt/html-canvas-cheat-sheet-48pg</guid>
      <description>&lt;p&gt;Certainly! Here's an &lt;a href="https://simplecheatsheet.com/"&gt;HTML Canvas cheat sheet&lt;/a&gt; that covers some of the commonly used methods and properties:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Canvas Setup:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Create a canvas element --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"myCanvas"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Get the canvas element in JavaScript --&amp;gt;&lt;/span&gt;
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Drawing Shapes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Draw a rectangle&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closePath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Draw a circle&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;startAngle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;endAngle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anticlockwise&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closePath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Draw a line&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;moveTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lineTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closePath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Text Manipulation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fontStyle fontSize fontFamily&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Colors and Styles:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Set fill color&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set stroke color&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set line width&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lineWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set line join style&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lineJoin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set line cap style&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lineCap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set shadow&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowBlur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowOffsetX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowOffsetY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Transformations:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Translate the canvas origin&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Scale the canvas&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scaleX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;scaleY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Rotate the canvas&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Reset transformations&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setTransform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Image Manipulation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Draw an image&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;imageURL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;drawImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Draw a portion of an image&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;drawImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sHeight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dHeight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create a pattern with an image&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createPattern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;repeat/repeat-x/repeat-y/no-repeat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Demo using html canvas: &lt;a href="https://www.simplepixelart.com/editor"&gt;Pixel Art Editor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>canvas</category>
      <category>cheatsheet</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Working with Django Models</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Wed, 19 Oct 2022 02:42:03 +0000</pubDate>
      <link>https://dev.to/enshunt/working-with-django-models-4je4</link>
      <guid>https://dev.to/enshunt/working-with-django-models-4je4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Defining a model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To define the models for your app, modify the file models.py that was created in your app’s folder. The str() method tells Django how to represent data objects based on this model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.db import models
"""A topic the user is learning about."""
class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(
    auto_now_add=True)

    def str(self):
         return self.text

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Defining a model with a foreign key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Entry(models.Model):
    """Learning log entries for a topic."""
    topic = models.ForeignKey(Topic)
    text = models.TextField()
    date_added = models.DateTimeField(
    auto_now_add=True)
    def str(self):
        return self.text[:50] + "…"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Activating a model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To use a model the app must be added to the tuple INSTALLED_APPS, which is stored in the project’s settings.py file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSTALLED_APPS = (
    --snip--
    'django.contrib.staticfiles',
    # My apps
    'learning_logs',
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Migrating the database&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The database needs to be modified to store the kind of data that the model represents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py makemigrations learning_logs
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Creating a superuser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A superuser is a user account that has access to all aspects of the project.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python manage.py createsuperuser&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registering a model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can register your models with Django’s admin site, which&lt;br&gt;
makes it easier to work with the data in your project. To do this, modify the app’s admin.py file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.contrib import admin
from learning_logs.models import Topic
admin.site.register(Topic)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://simplecheatsheet.com/tag/django-cheat-sheet/"&gt;Django Cheat Sheet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
    </item>
    <item>
      <title>Install Django</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Wed, 19 Oct 2022 02:39:12 +0000</pubDate>
      <link>https://dev.to/enshunt/install-django-4357</link>
      <guid>https://dev.to/enshunt/install-django-4357</guid>
      <description>&lt;p&gt;It’s usually best to install Django to a virtual environment, where your project can be isolated from your other Python projects. Most commands assume you’re working in an active virtual environment.&lt;/p&gt;

&lt;p&gt;Create a virtual environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python –m venv v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activate the environment (Linux and OS X)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ source v/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activate the environment (Windows)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Django to the active environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(venv)$ pip install Django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://simplecheatsheet.com/tag/django-cheat-sheet/"&gt;Django Cheat Sheet&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Managing Conda and Anaconda</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Tue, 18 Oct 2022 15:56:29 +0000</pubDate>
      <link>https://dev.to/enshunt/managing-conda-and-anaconda-1i6p</link>
      <guid>https://dev.to/enshunt/managing-conda-and-anaconda-1i6p</guid>
      <description>&lt;p&gt;Verify conda is installed, check version #&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conda info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update conda package and environment manager&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conda update conda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the anaconda meta package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conda update anaconda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>conda</category>
    </item>
    <item>
      <title>JAVA SWING Cheat Sheet: JLabel Class</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Thu, 06 Oct 2022 14:03:14 +0000</pubDate>
      <link>https://dev.to/enshunt/java-swing-cheat-sheet-jlabel-class-4bpo</link>
      <guid>https://dev.to/enshunt/java-swing-cheat-sheet-jlabel-class-4bpo</guid>
      <description>&lt;p&gt;Following is the declaration for javax.swing.JLabel class −&lt;br&gt;
Following are the fields for javax.swing.JLabel class&lt;/p&gt;

&lt;p&gt;&lt;code&gt;protected Component labelFor&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JLabel() - Creates a JLabel instance with no image and with an empty string for the title.&lt;/li&gt;
&lt;li&gt;JLabel(Icon image) - Creates a JLabel instance with the specified image.&lt;/li&gt;
&lt;li&gt;JLabel(Icon image, int horizontalAlignment) - Creates a JLabel instance with the specified image and horizontal alignment.&lt;/li&gt;
&lt;li&gt;JLabel(String text) - Creates a JLabel instance with the specified text.&lt;/li&gt;
&lt;li&gt;JLabel(String text, Icon icon, int horizontalAlignment) - Creates a JLabel instance with the specified text, image, and horizontal alignment.&lt;/li&gt;
&lt;li&gt;JLabel(String text, int horizontalAlignment) - Creates a JLabel instance with the specified text and horizontal alignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://simplecheatsheet.com/tag/swing-cheat-sheet/"&gt;Swing Cheat Sheet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Is heroku down right now?</title>
      <dc:creator>Comficker</dc:creator>
      <pubDate>Mon, 03 Oct 2022 07:00:24 +0000</pubDate>
      <link>https://dev.to/enshunt/is-heroku-down-right-now-1jk7</link>
      <guid>https://dev.to/enshunt/is-heroku-down-right-now-1jk7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HV_gmDPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wng7d5xqp45n33emt4sq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HV_gmDPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wng7d5xqp45n33emt4sq.png" alt="Image description" width="684" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
