• Discord’s websocket boost 🚀, nobody builds in public 📣, devs are unhappy ☹️

    From TLDR Web Dev@VERT to tldr@synchro.net on Mon Sep 23 11:21:18 2024
    --DTGXbcf3
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: quoted-printable

    Discord reduced its websocket traffic by 40% through two key
    optimization=
    s. It first replaced its existing compression algorithm,
    zlib, with zstan=
    dard=C2=A0=20

    Sign Up [1] |Advertise [2]|View Online [3]=20

    =09=09TL=
    DR=20

    =09=09TOGETHER WITH [Clerk] [4]

    =C2=A0TLDR WEB DEV 2024-09-23=


    BUILDING SESSION MANAGEMENT IN NEXT.JS FROM SCRATCH: HOW TO KEEP YOU=
    R
    USERS LOGGED IN (SPONSOR) [4]=20

    Session management is a concept th=
    at flies under the radar in most
    applications, but it has a crucial role =
    to play: keeping users
    securely logged in when they use different tabs or=
    devices (imagine
    life without that!).

    Because session management is=
    often abstracted away by auth libraries,
    many developers are fuzzy about=
    the details. How do you actually know
    where a session starts, and when i=
    t ends?

    In this blog post, the Clerk team details the step-by-step pro=
    cess of
    building session management in Next.js [4], without using any
    a=
    uthentication library. Read [5] the blog [4] to understand what's
    happeni=
    ng under the hood!

    =F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20

    ARTICLES & =
    TUTORIALS

    HOW DISCORD REDUCED WEBSOCKET TRAFFIC BY 40% (17 MINUTE REA=
    D) [6]=20

    Discord reduced its websocket traffic by 40% through two key=

    optimizations. Firstly, it replaced its existing compression
    algorithm=
    , zlib, with zstandard, achieving higher compression ratios
    and shorter c=
    ompression times. It further improved performance by
    implementing streami=
    ng compression for zstandard, allowing it to
    utilize historical data for =
    better compression of small payloads.
    Secondly, it introduced Passive Ses=
    sions v2, which only sends updates
    about changes in server information in=
    stead of sending complete
    snapshots.=20

    ONE YEAR OF RUST IN PRODUCTIO=
    N (10 MINUTE READ) [7]=20

    This developer found that Rust's type-safety =
    and compile-time checks
    led to a smooth transition to production without =
    major issues. After a
    year, they reflect back on how it's going. They fin=
    d that Rust's long
    compile times, particularly with macro-heavy libraries=
    , necessitate a
    different development workflow. At the same time, Rust is=
    still
    satisfying to use and will continue to be used in production.=20
    =

    GAINING ACCESS TO ANYONE'S BROWSER WITHOUT THEM EVEN VISITING A
    WEBSI=
    TE (7 MINUTE READ) [8]=20

    A vulnerability in Arc Browser's use of Fireb=
    ase allowed unauthorized
    access to any user's browser without them visiti=
    ng a website. This was
    possible because Arc's cloud features, like Boosts=
    , stored data in
    Firestore with insecure security rules. An attacker coul=
    d exploit this
    by obtaining a user's ID, creating a malicious Boost, and =
    changing the
    Boost's creator ID to the victim's. This has since been addr=
    essed by
    Arc, who patched the vulnerability, added a feature to disable B=
    oosts,
    and started a bug bounty program.=20

    =F0=9F=A7=A0=20

    OPINION=
    S & ADVICE

    NO ONE BUILDS IN PUBLIC (5 MINUTE READ) [9]=20

    The "bu=
    ild in public" trend within the indie hacker community has an
    over-relian=
    ce on sharing revenue figures. While initially
    attention-grabbing, the co=
    nstant stream of success stories may be
    losing its impact and overshadowi=
    ng the discussion of actual product
    development. Also, the "build in publ=
    ic" approach may not be necessary
    for success, as some prominent indie ha=
    ckers have achieved great
    results without actively sharing their progress=
    publicly.=20

    A NEW ERA OF WRITING CODE (5 MINUTE READ) [10]=20

    LLM=
    s can significantly speed up development by taking care of
    repetitive tas=
    ks, but they still have limitations, especially when
    dealing with complex=
    or open-ended features. While LLMs can't replace
    engineers entirely, the=
    y can help them to focus on higher-level tasks.


    80% OF DEVELOPERS =
    ARE UNHAPPY. THE PROBLEM IS NOT AI, NOR IS CODING
    (5 MINUTE READ) [11] =


    A recent Stack Overflow survey revealed that 80% of developers are=

    unhappy with their jobs, with many reporting feeling burnt out and
    dem=
    oralized. The primary culprit appears to be a combination of
    factors, inc=
    luding unrealistic expectations, technical debt,
    bureaucratic obstacles, =
    and a lack of work-life balance.=20

    =F0=9F=9A=80=20

    LAUNCHES & TOOLS=


    IMPROVE WEB PERFORMANCE BY OPTIMIZING JAVASCRIPT BUNDLE SIZES
    (SPO=
    NSOR) [12]=20

    Nobody likes slow front end response =E2=80=93 not you, y=
    our users, or
    search engines. Learn how to get ahead of bloated JavaScrip=
    t bundles
    and improve your web performance in this blog. Read more on the=
    Sentry
    blog [12]=20

    KAMAL PROXY (GITHUB REPO) [13]=20

    Kamal Prox=
    y is an HTTP proxy that makes it easy to coordinate
    zero-downtime deploym=
    ents. It can deploy changes to web applications
    without interrupting any =
    of the traffic in progress.=20

    SCALAR (GITHUB REPO) [14]=20

    Scalar =
    is an offline-first API client and interactive reference
    generator. It us=
    es OpenAPI/Swagger documents to create user-friendly
    documentation and AP=
    I clients for various languages and frameworks.=20

    CSS PEEPER (CHROME E=
    XTENSION) [15]=20

    CSS Peeper is a Chrome extension that allows designer=
    s to easily view
    and inspect CSS styles on any website. It allows for bro=
    wsing
    components and colors in a visual way.=20

    =F0=9F=8E=81=20

    MIS=
    CELLANEOUS

    FORGET CHATGPT: WHY RESEARCHERS NOW RUN SMALL AIS ON THEIR=
    LAPTOPS (9
    MINUTE READ) [16]=20

    Researchers are increasingly choosin=
    g to run smaller AI models on
    their laptops instead of relying on online =
    services like ChatGPT. This
    shift is driven by the availability of open-s=
    ource AI models and the
    development of smaller models that can run effici=
    ently on consumer
    hardware.=20

    THE SORRY STATE OF JAVA DESERIALIZATIO=
    N (12 MINUTE READ) [17]=20

    Java deserialization is surprisingly slow. T=
    his developer benchmarks
    various techniques for reading 1 billion rows of=
    data from disk,
    including using `DataInputStream`, JDBC, Protobuf, Parqu=
    et, and custom
    solutions. The results show that even with optimized custo=
    m
    implementations, Java's performance lags significantly behind the
    the=
    oretical maximum for disk I/O.=20

    ANALYZING THE OPENAPI TOOLING ECOSYST=
    EM (14 MINUTE READ) [18]=20

    This is an exploration of the OpenAPI Speci=
    fication (OAS) tooling
    ecosystem that visually diagrams the various tasks=
    tools perform and
    how they relate to each other. The tools are separated=
    into three
    areas: Parsing libraries, OAD tools, and API tools.=20

    =
    =E2=9A=A1=20

    QUICK LINKS

    SANDING UI (4 MINUTE READ) [19]=20

    =
    =E2=80=9CSanding UI=E2=80=9D involves repeatedly clicking and interacting w= ith a
    user interface to identify and fix subtle usability issues.=20

    =
    WRITE CHANGE-RESILIENT CODE WITH DOMAIN OBJECTS (3 MINUTE READ) [20]=20

    =
    By using domain objects that represent the fundamental ideas of a
    produc=
    t, rather than specific requirements, code becomes more
    resilient to chan=
    ges in those requirements.=20

    HOW I HIRE PROGRAMMERS (6 MINUTE READ) [2=
    1]=20

    A better programmer hiring process focuses on evaluating candidat=
    es'
    past work, conversational intelligence, and compatibility with the
    =
    team rather than traditional interviews like Leetcode questions.=20

    I L=
    IKE MAKEFILES (5 MINUTE READ) [22]=20

    This developer prefers using Make=
    files for project automation due to
    their simplicity, consistency across =
    projects, and compatibility with
    various build tools.=20

    Love TLDR? Te=
    ll your friends and get rewards!

    Share your referral link below with =
    friends to get free TLDR swag!=20

    https://refer.tldr.tech/363c65bf/3 [2=
    3]=20

    =09=09 Track your referrals here. [24]=20

    Want to advertise in =
    TLDR? =F0=9F=93=B0

    If your company is interested in reaching an audie=
    nce of web
    developers and engineering decision makers, you may want to AD=
    VERTISE
    WITH US [25].=20

    If you have any comments or feedback, just r=
    espond to this email!=20

    Thanks for reading,=20
    Priyam Mohanty, Jenny Xu=
    & Ceora Ford=20

    If you don't want to receive future editions of TLDR We=
    b Dev, please
    unsubscribe from TLDR Web Dev [26] or manage all of your TL=
    DR
    newsletter subscriptions [27].=20

    =20

    Links:
    ------
    [1] http=
    s://tldr.tech/webdev?utm_source=3Dtldrwebdev
    [2] https://advertise.tldr.t= ech/?utm_source=3Dtldrwebdev&utm_medium=3Dnewsletter&utm_campaign=3Dadverti= setopnav
    [3] https://a.tldrnewsletter.com/web-version?ep=3D1&lc=3Ddf5a9a8= 4-734c-11ef-ae5c-1145880928d7&p=3D69b24446-7985-11ef-a20b-85db7d9d6075&pt= =3Dcampaign&t=3D1727090478&s=3D780e650ba0d5e0cdb7d278b3834dbd7aa83bde214f2f= 550c1d788a1db89b7186
    [4] https://go.clerk.com/dykM8q7
    [5] https://clerk=
    .com/blog/complete-guide-session-management-nextjs
    [6] https://discord.co= m/blog/how-discord-reduced-websocket-traffic-by-40-percent?utm_source=3Dtld= rwebdev
    [7] https://yieldcode.blog/post/one-year-of-rust-in-production/?u= tm_source=3Dtldrwebdev
    [8] https://kibty.town/blog/arc/?utm_source=3Dtldr=
    webdev
    [9] https://laike9m.com/blog/no-one-builds-in-public,160/?utm_sour= ce=3Dtldrwebdev
    [10] https://www.developing.dev/p/a-new-era-of-writing-co= de?utm_source=3Dtldrwebdev
    [11] https://shiftmag.dev/unhappy-developers-s= tack-overflow-survey-3896/?utm_source=3Dtldrwebdev
    [12] https://about.cod= ecov.io/blog/improve-web-performance-by-optimizing-javascript-bundle-sizes/= ?utm_source=3Dtldr&utm_medium=3Dpaid-community&utm_campaign=3Dcodecov-fy25q= 2-bundleanalysis&utm_content=3Dnewsletter-bundleblog-read
    [13] https://gi=
    thub.com/basecamp/kamal-proxy?utm_source=3Dtldrwebdev
    [14] https://github=
    .com/scalar/scalar?utm_source=3Dtldrwebdev
    [15] https://chromewebstore.go= ogle.com/detail/css-peeper/mbnbehikldjhnfehhnaidhjhoofhpehk?utm_source=3Dtl= drwebdev
    [16] https://www.nature.com/articles/d41586-024-02998-y?utm_sour= ce=3Dtldrwebdev
    [17] https://www.marginalia.nu/log/a_110_java_io/?utm_sou=
    rce=3Dtldrwebdev
    [18] https://modern-json-schema.com/analyzing-the-openap= i-tooling-ecosystem?utm_source=3Dtldrwebdev
    [19] https://blog.jim-nielsen=
    .com/2024/sanding-ui/?utm_source=3Dtldrwebdev
    [20] https://testing.google= blog.com/2024/09/write-change-resilient-code-with-domain.html?utm_source=3D= tldrwebdev
    [21] http://www.aaronsw.com/weblog/hiring.en?utm_source=3Dtldr=
    webdev
    [22] https://switowski.com/blog/i-like-makefiles/?utm_source=3Dtld=
    rwebdev
    [23] https://refer.tldr.tech/363c65bf/3
    [24] https://hub.sparkl=
    p.co/sub_c9fe76197514/3
    [25] https://advertise.tldr.tech/?utm_source=3Dtl= drwebdev&utm_medium=3Dnewsletter&utm_campaign=3Dadvertisecta
    [26] https:/= /a.tldrnewsletter.com/unsubscribe?ep=3D1&l=3De8d201ca-3e93-11ed-9a32-0241b9= 615763&lc=3Ddf5a9a84-734c-11ef-ae5c-1145880928d7&p=3D69b24446-7985-11ef-a20= b-85db7d9d6075&pt=3Dcampaign&pv=3D4&spa=3D1727089238&t=3D1727090478&s=3D55b= 09d5ba91bca2ea23c734fc86e3f4fcb102e5a50b2cc86e8972e3bdc767e4c
    [27] https:=
    //tldr.tech/webdev/manage?email=3Dtldr%40synchro.net
    --DTGXbcf3
    Content-Type: text/html; charset=utf-8
    Content-Transfer-Encoding: quoted-printable

    <!DOCTYPE html><html lang=3D"en"><head><meta http-equiv=3D"Content-Type" co= ntent=3D"text/html charset=3DUTF-8"><meta charset=3D"UTF-8"><meta name=3D"v= iewport" content=3D"width=3Ddevice-width"><meta name=3D"x-apple-disable-mes= sage-reformatting"><title>TLDR WebDev</title><meta name=3D"color-scheme" co= ntent=3D"light dark"><meta name=3D"supported-color-schemes" content=3D"ligh=
    t dark"><style type=3D"text/css">
    =09=09=09:root {
    =09=09=09=09color-scheme: light dark; supported-color-schemes: light dark; =09=09=09}
    =09=09=09
    =09=09=09*,
    =09=09=09*:after,
    =09=09=09*:before {
    =09=09=09=09-webkit-box-sizing: border-box; -moz-box-sizing: border-box; bo= x-sizing: border-box;
    =09=09=09}
    =09=09=09
    =09=09=09* {
    =09=09=09=09-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; =09=09=09}
    =09=09=09
    =09=09=09html,
    =09=09=09body,
    =09=09=09.document {
    =09=09=09=09width: 100% !important; height: 100% !important; margin: 0; pad= ding: 0;
    =09=09=09}
    =09=09=09
    =09=09=09body {
    =09=09=09=09-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: g= rayscale; text-rendering: optimizeLegibility;
    =09=09=09}
    =09=09=09
    =09=09=09div[style*=3D"margin: 16px 0"] {
    =09=09=09=09margin: 0 !important;
    =09=09=09}
    =09=09=09
    =09=09=09table,
    =09=09=09td {
    =09=09=09=09mso-table-lspace: 0pt; mso-table-rspace: 0pt;
    =09=09=09}
    =09=09=09
    =09=09=09table {
    =09=09=09=09border-spacing: 0; border-collapse: collapse; table-layout: fix= ed; margin: 0 auto;
    =09=09=09}
    =09=09=09
    =09=09=09img {
    =09=09=09=09-ms-interpolation-mode: bicubic; max-width: 100%; border: 0; =09=09=09}
    =09=09=09
    =09=09=09*[x-apple-data-detectors] {
    =09=09=09=09color: inherit !important; text-decoration: none !important; =09=09=09}
    =09=09=09
    =09=09=09.x-gmail-data-detectors,
    =09=09=09.x-gmail-data-detectors *,
    =09=09=09.aBn {
    =09=09=09=09border-bottom: 0 !important; cursor: default !important;
    =09=09=09}
    =09=09=09
    =09=09=09.btn {
    =09=09=09=09-webkit-transition: all 200ms ease; transition: all 200ms ease; =09=09=09}
    =09=09=09
    =09=09=09.btn:hover {
    =09=09=09=09background-color: #f67575; border-color: #f67575;
    =09=09=09}
    =09=09=09
    =09=09=09* {
    =09=09=09=09font-family: Arial, Helvetica, sans-serif; font-size: 18px; =09=09=09}
    =09=09=09
    =09=09=09@media screen and (max-width: 600px) {
    =09=09=09=09.container {
    =09=09=09=09=09width: 100%; margin: auto;
    =09=09=09=09}
    =09=09=09=09.stack {
    =09=09=09=09=09display: block!important; width: 100%!important; max-width: = 100%!important;
    =09=09=09=09}
    =09=09=09=09.btn {
    =09=09=09=09=09display: block; width: 100%; text-align: center;
    =09=09=09=09}
    =09=09=09}
    =09=09=09
    =09=09=09body,
    =09=09=09p,
    =09=09=09td,
    =09=09=09tr,
    =09=09=09.body,
    =09=09=09table,
    =09=09=09h1,
    =09=09=09h2,
    =09=09=09h3,
    =09=09=09h4,
    =09=09=09h5,
    =09=09=09h6,
    =09=09=09div,
    =09=09=09span {
    =09=09=09=09background-color: #FEFEFE !important; color: #010101 !important=
    ;
    =09=09=09}
    =09=09=09
    =09=09=09@media (prefers-color-scheme: dark) {
    =09=09=09=09body,
    =09=09=09=09p,
    =09=09=09=09td,
    =09=09=09=09tr,
    =09=09=09=09.body,
    =09=09=09=09table,
    =09=09=09=09h1,
    =09=09=09=09h2,
    =09=09=09=09h3,
    =09=09=09=09h4,
    =09=09=09=09h5,
    =09=09=09=09h6,
    =09=09=09=09div,
    =09=09=09=09span {
    =09=09=09=09=09background-color: #27292D !important; color: #FEFEFE !import= ant;
    =09=09=09=09}
    =09=09=09}
    =09=09=09
    =09=09=09a {
    =09=09=09=09color: inherit !important; text-decoration: underline !importan=
    t;
    =09=09=09}

    =09=09</style><!--[if mso | ie]>
    =09=09<style type=3D"text/css">
    =09=09=09a {
    =09=09=09=09background-color: #FEFEFE !important; color: #010101 !important=
    ;
    =09=09=09}
    =09=09=09@media (prefers-color-scheme: dark) {
    =09=09=09=09a {
    =09=09=09=09=09background-color: #27292D !important; color: #FEFEFE !import= ant;
    =09=09=09=09}
    =09=09=09}
    =09 </style>
    =09=09=09<![endif]--></head><body class=3D"">



    <div style=3D"display:none; font-size:0px; line-height:0px; max-height:0px;=
    max-width:0px; opacity:0; overflow:hidden; visibility:hidden; mso-hide:all= ;">Discord reduced its websocket traffic by 40% through two key optimizatio= ns. It first replaced its existing compression algorithm, zlib, with zstand= ard&nbsp;</div>

    <div style=3D"display: none; max-height: 0px; overflow: hidden;">

    </div>

    <table align=3D"center" class=3D"document"><tbody><tr><td valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" cl= ass=3D"container" width=3D"600"><tbody><tr class=3D"inner-body"><td>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr class=3D"header"><td bgcolor=3D"" class=3D"containe=


    <table width=3D"100%"><tbody><tr><td class=3D"container">



    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" style=3D"margin-top: 0px;" width=3D"100%"><tbody><tr><td style= =3D"padding: 0px;">

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng: 15px 15px;">
    <div style=3D"text-align: center;">
    <span style=3D"margin-right: 0px;"><a href=3D"https://tracking.tldrnewslett= er.com/CL0/https:%2F%2Ftldr.tech%2Fwebdev%3Futm_source=3Dtldrwebdev/1/01000= 1921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/-2M4A7bqWjk5SnqiQcm= VTEmTzc7d9anp-SxtFCT4ejg=3D371" rel=3D"noopener noreferrer" target=3D"_blan= k"><span>Sign Up</span></a>
    |<span style=3D"margin-right: 2px; margin-left: 2px;"><a href=3D"https://tr= acking.tldrnewsletter.com/CL0/https:%2F%2Fadvertise.tldr.tech%2F%3Futm_sour= ce=3Dtldrwebdev%26utm_medium=3Dnewsletter%26utm_campaign=3Dadvertisetopnav/= 1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/3pD3iPdzeFIn= wbVyEJQyDSBieAaO3p0UtX-XEkcPBJ4=3D371" rel=3D"noopener noreferrer" target= =3D"_blank"><span>Advertise</span></a></span>|<span style=3D"margin-left: 2= px;"><a href=3D"https://tracking.tldrnewsletter.com/CL0/https:%2F%2Fa.tldrn= ewsletter.com%2Fweb-version%3Fep=3D1%26lc=3Ddf5a9a84-734c-11ef-ae5c-1145880= 928d7%26p=3D69b24446-7985-11ef-a20b-85db7d9d6075%26pt=3Dcampaign%26t=3D1727= 090478%26s=3D780e650ba0d5e0cdb7d278b3834dbd7aa83bde214f2f550c1d788a1db89b71= 86/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/kAwkMcPoR= fX301SIGScy32mDeDXZ_sCSprXL_ILd_I0=3D371"><span>View Online</span></a></spa=


    </span></div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"text-= align: center;"><span data-darkreader-inline-color=3D"" style=3D"--darkread= er-inline-color:#3db3ff; color: rgb(51, 175, 255) !important; font-size: 30= px;">T</span><span style=3D"font-size: 30px;"><span data-darkreader-inline-= color=3D"" style=3D"color: rgb(232, 192, 96) !important; --darkreader-inlin= e-color:#e8c163; font-size:30px;">L</span><span data-darkreader-inline-colo= r=3D"" style=3D"color: rgb(101, 195, 173) !important; --darkreader-inline-c= olor:#6ec7b2; font-size:30px;">D</span></span><span data-darkreader-inline-= color=3D"" style=3D"--darkreader-inline-color:#dd6e6e; color: rgb(220, 107,=
    107) !important; font-size: 30px;">R</span>

    </td></tr></tbody></table>



    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr id=3D"together-with"><td align=3D"cent= er" height=3D"20" style=3D"vertical-align:middle !important;" valign=3D"mid= dle" width=3D"100%"><strong style=3D"vertical-align:middle !important; heig= ht: 100%;">Together With </strong>
    <a href=3D"https://tracking.tldrnewsletter.com/CL0/https:%2F%2Fgo.clerk.com= %2FdykM8q7/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/W= dgjqSaYZn5_eXgdHTSvKpfVbfFVZhSLdNfp50M0QUc=3D371"><img src=3D"https://image= s.tldr.tech/clerk50.png" valign=3D"middle" style=3D"vertical-align: middle = !important; height: 100%;" alt=3D"Clerk"></a></td></tr></tbody></table>


    <table style=3D"table-layout: fixed; width:100%;" width=3D"100%"><tbody><tr= ><td style=3D"padding:0;border-collapse:collapse;border-spacing:0;margin:0;=

    <div style=3D"text-align: center;">

    <h1><strong>&nbsp;TLDR Web Dev <span id=3D"date">2024-09-23</span></strong>= </h1>
    </div>
    </td></tr>
    <tr id=3D"sponsy-copy"><td class=3D"container" style=3D"padding: 15px 15px;=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fgo.clerk.com%2FdykM8q7/2/010001921e9d4c4a-47b4bf80-9e45= -4619-a284-ccaca08c5510-000000/Jv_yzIJCvchm1DLuUIuxUQtYJXaNZvW5jFGrEZwZYQ8= =3D371">
    <span>
    <strong>Building session management=
    in Next.js from scratch: how to keep your users logged in (Sponsor)</stron=

    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Session management is a concept that fl= ies under the radar in most applications, but it has a crucial role to play=
    : keeping users securely logged in when they use different tabs or devices = (imagine life without that!).<p></p><p>Because session management is often = abstracted away by auth libraries, many developers are fuzzy about the deta= ils. How do you actually know where a session starts, and when it ends?</p>= <p>In this blog post, the Clerk team details the <a href=3D"https://trackin= g.tldrnewsletter.com/CL0/https:%2F%2Fgo.clerk.com%2FdykM8q7/3/010001921e9d4= c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/-eGiYZmCNIZq8QD49ERGtBMV2bK= 06WtliT67fMNSkPw=3D371" rel=3D"noopener noreferrer nofollow" target=3D"_bla= nk"><span>step-by-step process of building session management in Next.js</s= pan></a>, without using any authentication library. <a href=3D"https://trac= king.tldrnewsletter.com/CL0/https:%2F%2Fclerk.com%2Fblog%2Fcomplete-guide-s= ession-management-nextjs/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08= c5510-000000/uMdUT3rZRQYYVUHCYBDY6q0NPAb4DFvKVuyOi8TFgz8=3D371" rel=3D"noop= ener noreferrer nofollow" target=3D"_blank"><span>Read</span></a> <a href= =3D"https://tracking.tldrnewsletter.com/CL0/https:%2F%2Fgo.clerk.com%2FdykM= 8q7/4/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/kcBd2X7j= bpGLnajz7gA5E53Dft7lFGC0SYRBbX_j2DA=3D371" rel=3D"noopener noreferrer nofol= low" target=3D"_blank"><span>the blog</span></a> to understand what's happe= ning under the hood!



    </span></span></div>
    </td></tr></tbody></table>
    </td></tr></tbody></table>
    </td></tr></tbody></table>
    </td></tr>
    <tr bgcolor=3D""><td class=3D"container">

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td style=3D"padding: 0px;">



    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><span style=3D"font-size: 36px;">=F0=9F= =A7=91=E2=80=8D=F0=9F=92=BB</span></div>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;">

    <h1><strong>Articles &amp; Tutorials</strong></h1>
    </div>
    </div>
    </td></tr></tbody></table>

    <table style=3D"table-layout: fixed; width: 100%;" width=3D"100%"><tbody><t= r><td style=3D"padding:0;border-collapse:collapse;border-spacing:0;margin:0=
    ;" valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fdiscord.com%2Fblog%2Fhow-discord-reduced-websocket-traf= fic-by-40-percent%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e4= 5-4619-a284-ccaca08c5510-000000/LOTasZMy7qYARvRZRL6cf7PRFHnPMByIo3Sv6qx7fhw= =3D371">
    <span>
    <strong>How Discord Reduced Websock=
    et Traffic by 40% (17 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Discord reduced its websocket traffic b=
    y 40% through two key optimizations. Firstly, it replaced its existing comp= ression algorithm, zlib, with zstandard, achieving higher compression ratio=
    s and shorter compression times. It further improved performance by impleme= nting streaming compression for zstandard, allowing it to utilize historica=
    l data for better compression of small payloads. Secondly, it introduced Pa= ssive Sessions v2, which only sends updates about changes in server informa= tion instead of sending complete snapshots.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fyieldcode.blog%2Fpost%2Fone-year-of-rust-in-production%= 2F%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-cca= ca08c5510-000000/-q8z2laalu7I3kt5z-Mn14G9xmiqbushTxCGmde3r_k=3D371">
    <span>
    <strong>One year of Rust in product= ion (10 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    This developer found that Rust's type-s= afety and compile-time checks led to a smooth transition to production with= out major issues. After a year, they reflect back on how it's going. They f= ind that Rust's long compile times, particularly with macro-heavy libraries=
    , necessitate a different development workflow. At the same time, Rust is s= till satisfying to use and will continue to be used in production.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fkibty.town%2Fblog%2Farc%2F%3Futm_source=3Dtldrwebdev/1/= 010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/wErkBONURiuAUK= bEBCXDpKHjTluA1h0ZxoaFZwCUdk0=3D371">
    <span>
    <strong>Gaining access to anyone's = browser without them even visiting a website (7 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    A vulnerability in Arc Browser's use of=
    Firebase allowed unauthorized access to any user's browser without them vi= siting a website. This was possible because Arc's cloud features, like Boos= ts, stored data in Firestore with insecure security rules. An attacker coul=
    d exploit this by obtaining a user's ID, creating a malicious Boost, and ch= anging the Boost's creator ID to the victim's. This has since been addresse=
    d by Arc, who patched the vulnerability, added a feature to disable Boosts,=
    and started a bug bounty program.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    </td></tr></tbody></table>


    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><span style=3D"font-size: 36px;">=F0=9F= =A7=A0</span></div>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;">

    <h1><strong>Opinions &amp; Advice</strong></h1>
    </div>
    </div>
    </td></tr></tbody></table>


    <table style=3D"table-layout: fixed; width: 100%;" width=3D"100%"><tbody><t= r><td style=3D"padding:0;border-collapse:collapse;border-spacing:0;margin:0=
    ;" valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Flaike9m.com%2Fblog%2Fno-one-builds-in-public,160%2F%3Fu= tm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5= 510-000000/dD6uZooBxAscrqEFK1HDFtSGhrmqlSHL5eXtyh-Ti3s=3D371">
    <span>
    <strong>No One Builds in Public (5 = minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    The "build in public" trend within the = indie hacker community has an over-reliance on sharing revenue figures. Whi=
    le initially attention-grabbing, the constant stream of success stories may=
    be losing its impact and overshadowing the discussion of actual product de= velopment. Also, the "build in public" approach may not be necessary for su= ccess, as some prominent indie hackers have achieved great results without = actively sharing their progress publicly.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fwww.developing.dev%2Fp%2Fa-new-era-of-writing-code%3Fut= m_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c55= 10-000000/9qad53MtChZNA6TuPf3uqsLQU0MJjOjc0KeBIbu6K8w=3D371">
    <span>
    <strong>A New Era of Writing Code (=
    5 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    LLMs can significantly speed up develop= ment by taking care of repetitive tasks, but they still have limitations, e= specially when dealing with complex or open-ended features. While LLMs can'=
    t replace engineers entirely, they can help them to focus on higher-level t= asks.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fshiftmag.dev%2Funhappy-developers-stack-overflow-survey= -3896%2F%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a2= 84-ccaca08c5510-000000/AcdnkgJZRMaCQrJSBdaP5VPBpkY0YASE8xIkHhYNKFs=3D371">
    <span>
    <strong>80% of developers are unhap= py. The problem is not AI, nor is coding (5 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    A recent Stack Overflow survey revealed=
    that 80% of developers are unhappy with their jobs, with many reporting fe= eling burnt out and demoralized. The primary culprit appears to be a combin= ation of factors, including unrealistic expectations, technical debt, burea= ucratic obstacles, and a lack of work-life balance.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><span style=3D"font-size: 36px;">=F0=9F= =9A=80</span></div></div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;">

    <h1><strong>Launches &amp; Tools</strong></h1>
    </div>
    </div>
    </td></tr></tbody></table>

    <table style=3D"table-layout: fixed; width: 100%;" width=3D"100%"><tbody><t= r><td style=3D"padding:0;border-collapse:collapse;border-spacing:0;margin:0=
    ;" valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fabout.codecov.io%2Fblog%2Fimprove-web-performance-by-op= timizing-javascript-bundle-sizes%2F%3Futm_source=3Dtldr%26utm_medium=3Dpaid= -community%26utm_campaign=3Dcodecov-fy25q2-bundleanalysis%26utm_content=3Dn= ewsletter-bundleblog-read/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca0= 8c5510-000000/xTMmIt8aOwPotsxgtfJ4zbAZfnwNwBZiEZ5qhTBgPZw=3D371">
    <span>
    <strong>Improve Web Performance by = Optimizing JavaScript Bundle Sizes (Sponsor)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Nobody likes slow front end response = =E2=80=93 not you, your users, or search engines. Learn how to get ahead of=
    bloated JavaScript bundles and improve your web performance in this blog. =
    <a class=3D"c-link" href=3D"https://tracking.tldrnewsletter.com/CL0/https:%= 2F%2Fabout.codecov.io%2Fblog%2Fimprove-web-performance-by-optimizing-javasc= ript-bundle-sizes%2F%3Futm_source=3Dtldr%26utm_medium=3Dpaid-community%26ut= m_campaign=3Dcodecov-fy25q2-bundleanalysis%26utm_content=3Dnewsletter-bundl= eblog-read/2/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/x= N1jWEHCK0-pCGU2t0hT_2XtaB4GihEupmvW5qpjx2E=3D371" rel=3D"noopener noreferre=
    r" target=3D"_blank"><span>Read more on the Sentry blog</span></a>
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fgithub.com%2Fbasecamp%2Fkamal-proxy%3Futm_source=3Dtldr= webdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/0Z52x= dqof_zAovbmbEdyzrH3TSLX4UD04J1WzVAtL-o=3D371">
    <span>
    <strong>Kamal Proxy (GitHub Repo)</= strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Kamal Proxy is an HTTP proxy that makes=
    it easy to coordinate zero-downtime deployments. It can deploy changes to = web applications without interrupting any of the traffic in progress.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fgithub.com%2Fscalar%2Fscalar%3Futm_source=3Dtldrwebdev/= 1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/RLhFEgdn_5uB= YMr7e8Lklsch0fJjQf9kQ6u6g-7Iats=3D371">
    <span>
    <strong>Scalar (GitHub Repo)</stron=

    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Scalar is an offline-first API client a=
    nd interactive reference generator. It uses OpenAPI/Swagger documents to cr= eate user-friendly documentation and API clients for various languages and = frameworks.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fchromewebstore.google.com%2Fdetail%2Fcss-peeper%2Fmbnbe= hikldjhnfehhnaidhjhoofhpehk%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47= b4bf80-9e45-4619-a284-ccaca08c5510-000000/MArOBBm-A6k8AM6Flc9LhoccBY9e24Eeh= dwcddywcuI=3D371">
    <span>
    <strong>CSS Peeper (Chrome Extensio= n)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    CSS Peeper is a Chrome extension that a= llows designers to easily view and inspect CSS styles on any website. It al= lows for browsing components and colors in a visual way.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    </td></tr></tbody></table>


    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><span style=3D"font-size: 36px;">=F0=9F= =8E=81</span></div></div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><strong><h1>Miscellaneous</h1></strong><= /div>
    </div>
    </td></tr></tbody></table>

    <table bgcolor=3D"" style=3D"table-layout: fixed; width: 100%;" width=3D"10= 0%"><tbody><tr><td style=3D"padding:0;border-collapse:collapse;border-spaci= ng:0;margin:0;" valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fwww.nature.com%2Farticles%2Fd41586-024-02998-y%3Futm_so= urce=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-0= 00000/O6T3JPXVJMVznUOo4ePlvHQ2ZYPvjf7ncpSCapaVJco=3D371">
    <span>
    <strong>Forget ChatGPT: why researc= hers now run small AIs on their laptops (9 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Researchers are increasingly choosing t=
    o run smaller AI models on their laptops instead of relying on online servi= ces like ChatGPT. This shift is driven by the availability of open-source A=
    I models and the development of smaller models that can run efficiently on = consumer hardware.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fwww.marginalia.nu%2Flog%2Fa_110_java_io%2F%3Futm_source= =3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-00000= 0/CPwZZY2ilFgHDDSAG3QxdaJ6lKaJoFkaWh-17I-GqWQ=3D371">
    <span>
    <strong>The sorry state of Java des= erialization (12 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    Java deserialization is surprisingly sl= ow. This developer benchmarks various techniques for reading 1 billion rows=
    of data from disk, including using `DataInputStream`, JDBC, Protobuf, Parq= uet, and custom solutions. The results show that even with optimized custom=
    implementations, Java's performance lags significantly behind the theoreti= cal maximum for disk I/O.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fmodern-json-schema.com%2Fanalyzing-the-openapi-tooling-= ecosystem%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a= 284-ccaca08c5510-000000/2SEm_ofFlJFbAqqMCZgfa4uR3bNtc-1uInuqDKA_gDs=3D371">
    <span>
    <strong>Analyzing the OpenAPI Tooli=
    ng Ecosystem (14 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    This is an exploration of the OpenAPI S= pecification (OAS) tooling ecosystem that visually diagrams the various tas=
    ks tools perform and how they relate to each other. The tools are separated=
    into three areas: Parsing libraries, OAD tools, and API tools.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    </td></tr></tbody></table>



    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;"><span style=3D"font-size: 36px;">=E2=9A= =A1</span></div></div>
    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng-top: 0px; padding-bottom: 0px;">
    <div class=3D"text-block">
    <div style=3D"text-align: center;">

    <h1><strong>Quick Links</strong></h1>
    </div>
    </div>
    </td></tr></tbody></table>

    <table bgcolor=3D"" style=3D"table-layout: fixed; width: 100%;" width=3D"10= 0%"><tbody><tr><td style=3D"padding:0;border-collapse:collapse;border-spaci= ng:0;margin:0;" valign=3D"top">

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fblog.jim-nielsen.com%2F2024%2Fsanding-ui%2F%3Futm_sourc= e=3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-0000= 00/nwn-PYwiM35K9twQtYEOoePfV5ONdHiWCFs9eXAvDcg=3D371">
    <span>
    <strong>Sanding UI (4 minute read)<= /strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    =E2=80=9CSanding UI=E2=80=9D involves r= epeatedly clicking and interacting with a user interface to identify and fi=
    x subtle usability issues.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Ftesting.googleblog.com%2F2024%2F09%2Fwrite-change-resil= ient-code-with-domain.html%3Futm_source=3Dtldrwebdev/1/010001921e9d4c4a-47b= 4bf80-9e45-4619-a284-ccaca08c5510-000000/Yybgy8KcDU_lNpiPhZ1UNEXsFY3bQLGMDS= RO-5TIirM=3D371">
    <span>
    <strong>Write Change-Resilient Code=
    With Domain Objects (3 minute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    By using domain objects that represent = the fundamental ideas of a product, rather than specific requirements, code=
    becomes more resilient to changes in those requirements.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"http://tracking.tldrnewsletter.c= om/CL0/http:%2F%2Fwww.aaronsw.com%2Fweblog%2Fhiring.en%3Futm_source=3Dtldrw= ebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/-xHknQ= et5F7bKxbKrfe1uaD_X-GMmrm-EamkTlfIBcs=3D371">
    <span>
    <strong>How I Hire Programmers (6 m= inute read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    A better programmer hiring process focu= ses on evaluating candidates' past work, conversational intelligence, and c= ompatibility with the team rather than traditional interviews like Leetcode=
    questions.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wi= dth=3D"100%"><tbody><tr><td class=3D"container" style=3D"padding: 15px 15px=

    <div class=3D"text-block">
    <span>
    <a href=3D"https://tracking.tldrnewsletter.= com/CL0/https:%2F%2Fswitowski.com%2Fblog%2Fi-like-makefiles%2F%3Futm_source= =3Dtldrwebdev/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-00000= 0/K3TZR90-3SsuuJ3VLiYYl6tEe7a58c-DOV41_2Cn_G8=3D371">
    <span>
    <strong>I Like Makefiles (5 minute = read)</strong>
    </span>



    <span style=3D"font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, V= erdana, sans-serif;">
    This developer prefers using Makefiles = for project automation due to their simplicity, consistency across projects=
    , and compatibility with various build tools.
    </span>
    </span>
    </div>
    </td></tr></tbody></table>

    </td></tr></tbody></table>


    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td align=3D"left" style=3D"word-break=
    : break-word; vertical-align: top; padding: 5px 10px;">

    <p style=3D"padding: 0; margin: 0; font-size: 22px; color: #000000; line-he= ight: 1.6; font-weight: bold;">
    Love TLDR? Tell your friends and get rewards!

    </td></tr>
    <tr><td class=3D"container" style=3D"padding: 0px 10px 15px;">
    <div class=3D"text-block">
    Share your referral link below with friends to get free TLDR swag!
    </div>
    </td></tr>
    <tr><td align=3D"left" style=3D"padding: 10px;">
    <div class=3D"text-block">
    <a href=3D"https://tracking.tldrnewsletter.com/CL0/https:%2F%2Frefer.tldr.t= ech%2F363c65bf%2F3/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-= 000000/U-DAdEJmzQD_6XiHrwRtUI9MIULgmYzZ3UkUG4OKrF4=3D371" style=3D"color: #= 464ba4; text-decoration: underline;">https://refer.tldr.tech/363c65bf/3</a> </div>
    </td></tr>
    <tr></tr>
    <tr><td align=3D"left" style=3D"padding:5px 10px;">
    <a href=3D"https://tracking.tldrnewsletter.com/CL0/https:%2F%2Fhub.sparklp.= co%2Fsub_c9fe76197514%2F3/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca0= 8c5510-000000/txjqu3blzVI5mx4x8cbusAVCunBwITwHquG4AMniW20=3D371" style=3D"f= ont-size: 16px; line-height: 1.6; padding: 10px 0; display: inline-block; =
    text-decoration: underline;"><span style=3D"mso-text-raise:13pt; text-deco= ration: underline;">Track your referrals here.</span></a> </td></tr></tbody></table>




    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td align=3D"left" style=3D"word-break=
    : break-word; vertical-align: top; padding: 5px 10px;">

    <p style=3D"padding: 0; margin: 0; font-size: 22px; color: #000000; line-he= ight: 1.6; font-weight: bold;">
    Want to advertise in TLDR? =F0=9F=93=B0

    </td></tr>
    <tr><td class=3D"container" style=3D"padding: 0px 10px 15px;">
    <div class=3D"text-block">
    If your company is interested in reaching an audience of web developers and=
    engineering decision makers, you may want to <a href=3D"https://tracking.t= ldrnewsletter.com/CL0/https:%2F%2Fadvertise.tldr.tech%2F%3Futm_source=3Dtld= rwebdev%26utm_medium=3Dnewsletter%26utm_campaign=3Dadvertisecta/1/010001921= e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/V3Ofb1R9DOpTQJjmlAqajNp= CI8kW5ucSpzlvn75zmds=3D371"><strong><span>advertise with us</span></strong>= </a>.
    </div>

    <div class=3D"text-block">
    If you have any comments or feedback, just respond to this email!

    <br> Thanks for reading,

    <span>Priyam Mohanty</span>, <span>Jenny Xu</span> &amp; <span>Ceora Ford</= span>


    </div>

    </td></tr></tbody></table>

    <table align=3D"center" bgcolor=3D"" border=3D"0" cellpadding=3D"0" cellspa= cing=3D"0" width=3D"100%"><tbody><tr><td class=3D"container" style=3D"paddi= ng: 15px 15px;">
    <div class=3D"text-block" id=3D"testing-id">If you don't want to receive fu= ture editions of TLDR Web Dev, please <a href=3D"https://tracking.tldrnewsl= etter.com/CL0/https:%2F%2Fa.tldrnewsletter.com%2Funsubscribe%3Fep=3D1%26l= =3De8d201ca-3e93-11ed-9a32-0241b9615763%26lc=3Ddf5a9a84-734c-11ef-ae5c-1145= 880928d7%26p=3D69b24446-7985-11ef-a20b-85db7d9d6075%26pt=3Dcampaign%26pv=3D= 4%26spa=3D1727089238%26t=3D1727090478%26s=3D55b09d5ba91bca2ea23c734fc86e3f4= fcb102e5a50b2cc86e8972e3bdc767e4c/1/010001921e9d4c4a-47b4bf80-9e45-4619-a28= 4-ccaca08c5510-000000/lZBTScf1yVRqIDIn1jb0VJsr710rJBMxt1XL6BfCO_o=3D371">un= subscribe from TLDR Web Dev</a> or <a href=3D"https://tracking.tldrnewslett= er.com/CL0/https:%2F%2Ftldr.tech%2Fwebdev%2Fmanage%3Femail=3Dtldr%2540synch= ro.net/1/010001921e9d4c4a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/GPx9Q= ZbT9f-UBw0S1DQHqDH2dw6EH84roFwj9jcG1c8=3D371">manage all of your TLDR newsl= etter subscriptions</a>.

    </div>
    </td></tr></tbody></table>


    </td></tr></tbody></table>
    </td></tr></tbody></table>
    </td></tr></tbody></table>
    </td></tr></tbody></table>



    <img alt=3D"" src=3D"http://tracking.tldrnewsletter.com/CI0/010001921e9d4c4= a-47b4bf80-9e45-4619-a284-ccaca08c5510-000000/AqPjl2DGznNb-D-HCiGQKyYa_Vw1d= 2G4cadduENZSt8=3D371" style=3D"display: none; width: 1px; height: 1px;"> </body></html>
    --DTGXbcf3--


    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net