• “Local-First Apps āļĒāļąāļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļˆāļĢāļīāļ‡ āđ€āļžāļĢāļēāļ°āļāļēāļĢ Sync āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” — āđāļ•āđˆ SQLite + HLC + CRDT āļ­āļēāļˆāđ€āļ›āđ‡āļ™āļ„āļģāļ•āļ­ā

    āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāļš Local-First āļŦāļĢāļ·āļ­ Offline-First āđ€āļ„āļĒāļ–āļđāļāļĄāļ­āļ‡āļ§āđˆāļēāđ€āļ›āđ‡āļ™āļ­āļ™āļēāļ„āļ•āļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒ āļ”āđ‰āļ§āļĒāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļĩāđˆāđ‚āļŦāļĨāļ”āđ€āļĢāđ‡āļ§ āđƒāļŠāđ‰āđāļšāļšāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ•āđˆāļ­āđ€āļ™āđ‡āļ• āđāļĨāļ°āđƒāļŦāđ‰āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āļŠāļđāļ‡āļŠāļļāļ” āđāļ•āđˆāđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡ āđāļ­āļ›āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļ­āļ­āļŸāđ„āļĨāļ™āđŒāļˆāļĢāļīāļ‡ āđ† āļĒāļąāļ‡āļĄāļĩāļ™āđ‰āļ­āļĒāļĄāļēāļ āđ€āļžāļĢāļēāļ°āļāļēāļĢ “āļ‹āļīāļ‡āļāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ” āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāļŦāļĨāļēāļĒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļ™āļąāđ‰āļ™āļĒāļēāļāļāļ§āđˆāļēāļ—āļĩāđˆāļ„āļīāļ”

    Marco Bambini āļœāļđāđ‰āļāđˆāļ­āļ•āļąāđ‰āļ‡ SQLite Cloud āļ­āļ˜āļīāļšāļēāļĒāļ§āđˆāļē āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āđāļšāļš Local-First āļ„āļ·āļ­āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļšāļāļĢāļ°āļˆāļēāļĒ (Distributed System) āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļŦāļĨāļēāļĒāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļ­āļ­āļŸāđ„āļĨāļ™āđŒ āđāļĨāļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒāļ•āđ‰āļ­āļ‡āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āļ•āļĢāļ‡āļāļąāļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ­āļ°āđ„āļĢāđ€āļĨāļĒ āļ‹āļķāđˆāļ‡āļĄāļĩāļŠāļ­āļ‡āļ›āļąāļāļŦāļēāļŦāļĨāļąāļāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđāļāđ‰āļ„āļ·āļ­:

    1ïļâƒĢ āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļĄāđˆāđāļ™āđˆāļ™āļ­āļ™ (Unreliable Ordering) āļ­āļļāļ›āļāļĢāļ“āđŒāđāļ•āđˆāļĨāļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļĩāđ€āļ§āļĨāļēāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļ™ āđāļĨāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ„āļĄāđˆāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļŦāļēāļāļ™āļģāļ‚āđ‰āļ­āļĄāļđāļĨāļĄāļēāļĢāļ§āļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļˆāļąāļ”āļĨāļģāļ”āļąāļšāđƒāļŦāđ‰āļ”āļĩ āļ­āļēāļˆāđ€āļāļīāļ”āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡ āđ€āļŠāđˆāļ™ āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ A āļ•āļąāđ‰āļ‡āļ„āđˆāļē x = 3 āļŠāđˆāļ§āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ B āļ•āļąāđ‰āļ‡ x = 5 āđāļĨāđ‰āļ§āđƒāļ„āļĢāļ„āļ§āļĢ “āļŠāļ™āļ°”?

    āļ§āļīāļ˜āļĩāđāļāđ‰āļ„āļ·āļ­ Hybrid Logical Clocks (HLC) — āļĢāļ°āļšāļš timestamp āļ—āļĩāđˆāļĢāļ§āļĄāđ€āļ§āļĨāļēāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļˆāļĢāļīāļ‡āļāļąāļšāļ•āļąāļ§āļ™āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ”āđ‰āđāļĄāđ‰āđ„āļĄāđˆāļĄāļĩāļ™āļēāļŽāļīāļāļēāļāļĨāļēāļ‡

    2ïļâƒĢ āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Conflicts) āđāļĄāđ‰āļˆāļ°āļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ„āļ”āđ‰āđāļĨāđ‰āļ§ āđāļ•āđˆāļ–āđ‰āļēāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđ€āļŠāđˆāļ™ āļĒāļ­āļ”āđ€āļ‡āļīāļ™āđƒāļ™āļšāļąāļāļŠāļĩ āđāļĨāđ‰āļ§āļ‹āļīāļ‡āļāđŒāđ€āļ‚āđ‰āļēāļĄāļē āļ­āļēāļˆāđ€āļāļīāļ”āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ—āļąāļšāđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļēāļĒ

    āļ§āļīāļ˜āļĩāđāļāđ‰āļ„āļ·āļ­ CRDTs (Conflict-Free Replicated Data Types) — āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļāļąāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļŠāđˆāļ™ āđƒāļŠāđ‰āļāļĨāļĒāļļāļ—āļ˜āđŒ Last-Write-Wins (LWW) āļ—āļĩāđˆāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āđ€āļ›āđ‡āļ™āļāđˆāļēāļĒāļŠāļ™āļ°

    āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĢāļ°āļšāļšāļ™āļĩāđ‰āļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļĢāļīāļ‡ SQLite āļ–āļđāļāđ€āļĨāļ·āļ­āļāđ€āļ›āđ‡āļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ āđ€āļžāļĢāļēāļ°āļĄāļĩāļ„āļ§āļēāļĄāđ€āļŠāļ–āļĩāļĒāļĢ āđƒāļŠāđ‰āļ‡āļēāļ™āļ‡āđˆāļēāļĒ āđāļĨāļ°āļĄāļĩāļ­āļĒāļđāđˆāđƒāļ™āļ—āļļāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ āđ‚āļ”āļĒ Bambini āđ„āļ”āđ‰āļŠāļĢāđ‰āļēāļ‡ SQLite extension āļ—āļĩāđˆāđ€āļāđ‡āļšāļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ€āļ›āđ‡āļ™ “āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ” āļžāļĢāđ‰āļ­āļĄ timestamp āļˆāļēāļ HLC āđāļĨāļ°āđƒāļŠāđ‰ CRDT āđƒāļ™āļāļēāļĢāļ•āļąāļ”āļŠāļīāļ™āļ§āđˆāļēāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđƒāļ”āļ„āļ§āļĢāļ™āļģāļĄāļēāđƒāļŠāđ‰

    āļœāļĨāļĨāļąāļžāļ˜āđŒāļ„āļ·āļ­āļĢāļ°āļšāļšāļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āļ­āļ­āļŸāđ„āļĨāļ™āđŒāđ„āļ”āđ‰āđ€āļ›āđ‡āļ™āļŠāļąāļ›āļ”āļēāļŦāđŒāđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļāļĨāļąāļšāļĄāļēāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđāļĄāđˆāļ™āļĒāļģāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļāļĨāļēāļ‡

    āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļ„āļąāļāļˆāļēāļāļ‚āđˆāļēāļ§
    Local-First Apps āļĒāļąāļ‡āđ„āļĄāđˆāđāļžāļĢāđˆāļŦāļĨāļēāļĒāđ€āļžāļĢāļēāļ°āļāļēāļĢāļ‹āļīāļ‡āļāđŒāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāļ—āļģāđ„āļ”āđ‰āļĒāļēāļ
    āļ›āļąāļāļŦāļēāļŦāļĨāļąāļāļ„āļ·āļ­āļāļēāļĢāļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđāļĨāļ°āļāļēāļĢāđāļāđ‰āđ„āļ‚āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ
    āđƒāļŠāđ‰ Hybrid Logical Clocks (HLC) āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđāļšāļšāļāļĢāļ°āļˆāļēāļĒ
    āđƒāļŠāđ‰ CRDTs āđ€āļžāļ·āđˆāļ­āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļŦāļĢāļ·āļ­āđ€āļ‚āļĩāļĒāļ™āļ—āļąāļšāļāļąāļ™

    āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāđāļāđ‰āļ›āļąāļāļŦāļē
    SQLite āļ–āļđāļāđƒāļŠāđ‰āđ€āļ›āđ‡āļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāđ€āļžāļĢāļēāļ°āđ€āļŠāļ–āļĩāļĒāļĢāđāļĨāļ°āļĄāļĩāļ­āļĒāļđāđˆāļ—āļļāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ
    āļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ–āļđāļāđ€āļāđ‡āļšāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄ timestamp
    āđƒāļŠāđ‰āļāļĨāļĒāļļāļ—āļ˜āđŒ Last-Write-Wins (LWW) āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”
    āļĢāļ°āļšāļšāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āļ­āļ­āļŸāđ„āļĨāļ™āđŒāđ„āļ”āđ‰āļ™āļēāļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ

    āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŠāļĢāļīāļĄāļˆāļēāļāļ āļēāļĒāļ™āļ­āļ
    Turso āđāļĨāļ° cr-sqlite āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ—āļĩāđˆāđƒāļŠāđ‰ SQLite āđƒāļ™āļāļēāļĢāļ‹āļīāļ‡āļāđŒāđāļšāļš Local-First
    CRDTs āļ–āļđāļāđƒāļŠāđ‰āđƒāļ™āļĢāļ°āļšāļš collaboration āđ€āļŠāđˆāļ™ Automerge āđāļĨāļ° Yjs
    HLCs āļ–āļđāļāđƒāļŠāđ‰āđƒāļ™āļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĢāļ°āļˆāļēāļĒ āđ€āļŠāđˆāļ™ CockroachDB āđāļĨāļ° Spanner
    Local-First Apps āļŠāđˆāļ§āļĒāļĨāļ”āļāļēāļĢāļžāļķāđˆāļ‡āļžāļēāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļāļĨāļēāļ‡āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§

    https://marcobambini.substack.com/p/why-local-first-apps-havent-become
    ðŸ“ą “Local-First Apps āļĒāļąāļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļˆāļĢāļīāļ‡ āđ€āļžāļĢāļēāļ°āļāļēāļĢ Sync āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” — āđāļ•āđˆ SQLite + HLC + CRDT āļ­āļēāļˆāđ€āļ›āđ‡āļ™āļ„āļģāļ•āļ­ā āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāļš Local-First āļŦāļĢāļ·āļ­ Offline-First āđ€āļ„āļĒāļ–āļđāļāļĄāļ­āļ‡āļ§āđˆāļēāđ€āļ›āđ‡āļ™āļ­āļ™āļēāļ„āļ•āļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒ āļ”āđ‰āļ§āļĒāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļĩāđˆāđ‚āļŦāļĨāļ”āđ€āļĢāđ‡āļ§ āđƒāļŠāđ‰āđāļšāļšāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ•āđˆāļ­āđ€āļ™āđ‡āļ• āđāļĨāļ°āđƒāļŦāđ‰āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āļŠāļđāļ‡āļŠāļļāļ” āđāļ•āđˆāđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡ āđāļ­āļ›āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļ­āļ­āļŸāđ„āļĨāļ™āđŒāļˆāļĢāļīāļ‡ āđ† āļĒāļąāļ‡āļĄāļĩāļ™āđ‰āļ­āļĒāļĄāļēāļ āđ€āļžāļĢāļēāļ°āļāļēāļĢ “āļ‹āļīāļ‡āļāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ” āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāļŦāļĨāļēāļĒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļ™āļąāđ‰āļ™āļĒāļēāļāļāļ§āđˆāļēāļ—āļĩāđˆāļ„āļīāļ” Marco Bambini āļœāļđāđ‰āļāđˆāļ­āļ•āļąāđ‰āļ‡ SQLite Cloud āļ­āļ˜āļīāļšāļēāļĒāļ§āđˆāļē āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āđāļšāļš Local-First āļ„āļ·āļ­āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļšāļāļĢāļ°āļˆāļēāļĒ (Distributed System) āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļŦāļĨāļēāļĒāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļ­āļ­āļŸāđ„āļĨāļ™āđŒ āđāļĨāļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒāļ•āđ‰āļ­āļ‡āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āļ•āļĢāļ‡āļāļąāļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ­āļ°āđ„āļĢāđ€āļĨāļĒ āļ‹āļķāđˆāļ‡āļĄāļĩāļŠāļ­āļ‡āļ›āļąāļāļŦāļēāļŦāļĨāļąāļāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđāļāđ‰āļ„āļ·āļ­: 1ïļâƒĢ āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļĄāđˆāđāļ™āđˆāļ™āļ­āļ™ (Unreliable Ordering) āļ­āļļāļ›āļāļĢāļ“āđŒāđāļ•āđˆāļĨāļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļĩāđ€āļ§āļĨāļēāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļ™ āđāļĨāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ„āļĄāđˆāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļŦāļēāļāļ™āļģāļ‚āđ‰āļ­āļĄāļđāļĨāļĄāļēāļĢāļ§āļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļˆāļąāļ”āļĨāļģāļ”āļąāļšāđƒāļŦāđ‰āļ”āļĩ āļ­āļēāļˆāđ€āļāļīāļ”āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡ āđ€āļŠāđˆāļ™ āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ A āļ•āļąāđ‰āļ‡āļ„āđˆāļē x = 3 āļŠāđˆāļ§āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ B āļ•āļąāđ‰āļ‡ x = 5 āđāļĨāđ‰āļ§āđƒāļ„āļĢāļ„āļ§āļĢ “āļŠāļ™āļ°”? 🔧 āļ§āļīāļ˜āļĩāđāļāđ‰āļ„āļ·āļ­ Hybrid Logical Clocks (HLC) — āļĢāļ°āļšāļš timestamp āļ—āļĩāđˆāļĢāļ§āļĄāđ€āļ§āļĨāļēāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļˆāļĢāļīāļ‡āļāļąāļšāļ•āļąāļ§āļ™āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ”āđ‰āđāļĄāđ‰āđ„āļĄāđˆāļĄāļĩāļ™āļēāļŽāļīāļāļēāļāļĨāļēāļ‡ 2ïļâƒĢ āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Conflicts) āđāļĄāđ‰āļˆāļ°āļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ„āļ”āđ‰āđāļĨāđ‰āļ§ āđāļ•āđˆāļ–āđ‰āļēāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđ€āļŠāđˆāļ™ āļĒāļ­āļ”āđ€āļ‡āļīāļ™āđƒāļ™āļšāļąāļāļŠāļĩ āđāļĨāđ‰āļ§āļ‹āļīāļ‡āļāđŒāđ€āļ‚āđ‰āļēāļĄāļē āļ­āļēāļˆāđ€āļāļīāļ”āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ—āļąāļšāđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļēāļĒ ðŸ”§ āļ§āļīāļ˜āļĩāđāļāđ‰āļ„āļ·āļ­ CRDTs (Conflict-Free Replicated Data Types) — āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļāļąāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļŠāđˆāļ™ āđƒāļŠāđ‰āļāļĨāļĒāļļāļ—āļ˜āđŒ Last-Write-Wins (LWW) āļ—āļĩāđˆāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āđ€āļ›āđ‡āļ™āļāđˆāļēāļĒāļŠāļ™āļ° āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĢāļ°āļšāļšāļ™āļĩāđ‰āļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļĢāļīāļ‡ SQLite āļ–āļđāļāđ€āļĨāļ·āļ­āļāđ€āļ›āđ‡āļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ āđ€āļžāļĢāļēāļ°āļĄāļĩāļ„āļ§āļēāļĄāđ€āļŠāļ–āļĩāļĒāļĢ āđƒāļŠāđ‰āļ‡āļēāļ™āļ‡āđˆāļēāļĒ āđāļĨāļ°āļĄāļĩāļ­āļĒāļđāđˆāđƒāļ™āļ—āļļāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ āđ‚āļ”āļĒ Bambini āđ„āļ”āđ‰āļŠāļĢāđ‰āļēāļ‡ SQLite extension āļ—āļĩāđˆāđ€āļāđ‡āļšāļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ€āļ›āđ‡āļ™ “āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ” āļžāļĢāđ‰āļ­āļĄ timestamp āļˆāļēāļ HLC āđāļĨāļ°āđƒāļŠāđ‰ CRDT āđƒāļ™āļāļēāļĢāļ•āļąāļ”āļŠāļīāļ™āļ§āđˆāļēāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđƒāļ”āļ„āļ§āļĢāļ™āļģāļĄāļēāđƒāļŠāđ‰ āļœāļĨāļĨāļąāļžāļ˜āđŒāļ„āļ·āļ­āļĢāļ°āļšāļšāļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āļ­āļ­āļŸāđ„āļĨāļ™āđŒāđ„āļ”āđ‰āđ€āļ›āđ‡āļ™āļŠāļąāļ›āļ”āļēāļŦāđŒāđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļāļĨāļąāļšāļĄāļēāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđāļĄāđˆāļ™āļĒāļģāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļāļĨāļēāļ‡ âœ… āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļ„āļąāļāļˆāļēāļāļ‚āđˆāļēāļ§ âžĄïļ Local-First Apps āļĒāļąāļ‡āđ„āļĄāđˆāđāļžāļĢāđˆāļŦāļĨāļēāļĒāđ€āļžāļĢāļēāļ°āļāļēāļĢāļ‹āļīāļ‡āļāđŒāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāļ—āļģāđ„āļ”āđ‰āļĒāļēāļ âžĄïļ āļ›āļąāļāļŦāļēāļŦāļĨāļąāļāļ„āļ·āļ­āļāļēāļĢāļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđāļĨāļ°āļāļēāļĢāđāļāđ‰āđ„āļ‚āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ ➡ïļ āđƒāļŠāđ‰ Hybrid Logical Clocks (HLC) āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļĨāļģāļ”āļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđāļšāļšāļāļĢāļ°āļˆāļēāļĒ âžĄïļ āđƒāļŠāđ‰ CRDTs āđ€āļžāļ·āđˆāļ­āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļŦāļĢāļ·āļ­āđ€āļ‚āļĩāļĒāļ™āļ—āļąāļšāļāļąāļ™ âœ… āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāđāļāđ‰āļ›āļąāļāļŦāļē ➡ïļ SQLite āļ–āļđāļāđƒāļŠāđ‰āđ€āļ›āđ‡āļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāđ€āļžāļĢāļēāļ°āđ€āļŠāļ–āļĩāļĒāļĢāđāļĨāļ°āļĄāļĩāļ­āļĒāļđāđˆāļ—āļļāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ âžĄïļ āļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ–āļđāļāđ€āļāđ‡āļšāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄ timestamp ➡ïļ āđƒāļŠāđ‰āļāļĨāļĒāļļāļ—āļ˜āđŒ Last-Write-Wins (LWW) āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ” âžĄïļ āļĢāļ°āļšāļšāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āļ­āļ­āļŸāđ„āļĨāļ™āđŒāđ„āļ”āđ‰āļ™āļēāļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļđāļāđ€āļŠāļĩāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ ✅ āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŠāļĢāļīāļĄāļˆāļēāļāļ āļēāļĒāļ™āļ­āļ âžĄïļ Turso āđāļĨāļ° cr-sqlite āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ—āļĩāđˆāđƒāļŠāđ‰ SQLite āđƒāļ™āļāļēāļĢāļ‹āļīāļ‡āļāđŒāđāļšāļš Local-First ➡ïļ CRDTs āļ–āļđāļāđƒāļŠāđ‰āđƒāļ™āļĢāļ°āļšāļš collaboration āđ€āļŠāđˆāļ™ Automerge āđāļĨāļ° Yjs ➡ïļ HLCs āļ–āļđāļāđƒāļŠāđ‰āđƒāļ™āļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĢāļ°āļˆāļēāļĒ āđ€āļŠāđˆāļ™ CockroachDB āđāļĨāļ° Spanner ➡ïļ Local-First Apps āļŠāđˆāļ§āļĒāļĨāļ”āļāļēāļĢāļžāļķāđˆāļ‡āļžāļēāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļāļĨāļēāļ‡āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§ https://marcobambini.substack.com/p/why-local-first-apps-havent-become
    MARCOBAMBINI.SUBSTACK.COM
    Why Local-First Apps Haven’t Become Popular?
    Offline-first apps promise instant loading and privacy, but in practice, very few apps get offline support because getting sync right is surprisingly hard.
    0 Comments 0 Shares 230 Views 0 Reviews
  • ..āļ§āđˆāļēāđāļĨāđ‰āļ§ āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”āļāļąāļšāļĢāļ°āđ€āļšāļĩāļĒāļšāļĢāļēāļŠāļāļēāļĢ āđāļ”āļāđ€āļšāļĩāđ‰āļĒāđ€āļĨāļĩāđ‰āļĒāļ‡āļžāļĨāļ—āļŦāļēāļĢāļāđ‡āļĄāļĩāļĄāļēāđāļĨāđ‰āļ§,āđāļĨāļ°āļŠāļēāļĢāļ°āļžāļąāļ”āđāļ”āļāđ€āļĨāđ‡āļāđƒāļŦāļāđˆāļĄāļĩāļŦāļĄāļ”.,āļ āļēāļžāļĨāļąāļāļĐāļ“āđŒāļ—āļŦāļēāļĢāđāļĒāđˆāļŠāļļāļ”āđ†āđƒāļ™āļŠāļēāļĒāļ•āļēāļ›āļĢāļ°āļŠāļēāļŠāļ™āļ—āļĩāđˆāļœāđˆāļēāļ™āđ†āļĄāļē,āļ—āļŦāļēāļĢāļœāļđāđ‰āļ™āđ‰āļ­āļĒāļ–āļđāļāļĢāļąāļ‡āđāļ,āļˆāļ™āļ›āļĢāļ°āļŠāļēāļŠāļ™āđ„āļĄāđˆāļ­āļĒāļēāļāđƒāļŦāđ‰āļĨāļđāļāđ„āļ›āđ€āļāļ“āļ‘āđŒāļ—āļŦāļēāļĢ,āđ€āļžāļĢāļēāļ°āļ™āļēāļĒāļžāļĨāđāļĨāļ°āļœāļđāđ‰āļšāļąāļ‡āļ„āļąāļšāļāļēāļĢāļāļķāļāļ‚āļķāđ‰āļ™āđ„āļ›āļĄāļĩāļ›āļąāļāļŦāļēāļ—āļļāļˆāļĢāļīāļ•āđƒāļ™āļŠāļēāļĒāļ•āļēāļ›āļĢāļ°āļŠāļēāļŠāļ™āļĄāļēāļ•āļĨāļ­āļ”,āđāļ„āđˆāļĄāļĩāļ”āļĩāļ‚āļķāđ‰āļ™āļ•āļ­āļ™āļĄāļ—āļ .2āļ—āļģāļœāļĨāļ‡āļēāļ™āļ™āļĩāđ‰āļĨāđˆāļ°,
    ..āđ€āļĒāļĩāļĒāļ§āļĒāļēāļ—āļŦāļēāļĢāļāļĨāđ‰āļēāđ€āļĢāļēāļˆāļĢāļīāļ‡āđ†āđ€āļ–āļ­āļ°,āļ–āđ‰āļēāļ‚āđˆāļēāļ§āļ™āļĩāđ‰āļˆāļĢāļīāļ‡ āđāļĒāđˆāļĄāļēāļ,āļāļ­āļ‡āļ—āļąāļžāđ„āļ—āļĒ āļœāļš.āļŠāļŠ.āļœāļš.āļ—āļš.āļ—āļĩāđˆāļšāļąāļāļŠāļēāļŦāļ™āđˆāļ§āļĒāļĢāļšāļ•āļĢāļ‡āļ āļēāļ„āļžāļ·āđ‰āļ™āļ”āļīāļ™āļ•āđ‰āļ­āļ‡āļ—āļģāļāļēāļĢāļ™āļĩāđ‰āđƒāļŦāđ‰āļāļĢāļ°āļˆāđˆāļēāļ‡āļŠāļąāļ”āļĢāļ§āļ”āđ€āļĢāđ‡āļ§,āļ™āļēāļĒāļāļŊāļšāļ§āļāļ„āļĨāļąāļ‡āļĢāļąāļāļĐāļēāļāļēāļĢ āđ€āļ›āđ‡āļ™āđ€āļŦāļĩāđ‰āļĒāļ­āļ°āđ„āļĢāļāļąāđ‰āļāļ•āļąāļ‡āļ—āļŦāļēāļĢāļžāļĨāļĩāļŠāļĩāļžāđ„āļ§āđ‰ āļ­āļ­āļāļŠāļ·āđˆāļ­āļ”āļąāļšāļ­āļ™āļēāļ–āđ€āļĨāļĒāļ™āļ°.

    https://youtube.com/shorts/sLnvFxZ84z4?si=1w8LYngMFZj-5lo_
    ..āļ§āđˆāļēāđāļĨāđ‰āļ§ āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”āļāļąāļšāļĢāļ°āđ€āļšāļĩāļĒāļšāļĢāļēāļŠāļāļēāļĢ āđāļ”āļāđ€āļšāļĩāđ‰āļĒāđ€āļĨāļĩāđ‰āļĒāļ‡āļžāļĨāļ—āļŦāļēāļĢāļāđ‡āļĄāļĩāļĄāļēāđāļĨāđ‰āļ§,āđāļĨāļ°āļŠāļēāļĢāļ°āļžāļąāļ”āđāļ”āļāđ€āļĨāđ‡āļāđƒāļŦāļāđˆāļĄāļĩāļŦāļĄāļ”.,āļ āļēāļžāļĨāļąāļāļĐāļ“āđŒāļ—āļŦāļēāļĢāđāļĒāđˆāļŠāļļāļ”āđ†āđƒāļ™āļŠāļēāļĒāļ•āļēāļ›āļĢāļ°āļŠāļēāļŠāļ™āļ—āļĩāđˆāļœāđˆāļēāļ™āđ†āļĄāļē,āļ—āļŦāļēāļĢāļœāļđāđ‰āļ™āđ‰āļ­āļĒāļ–āļđāļāļĢāļąāļ‡āđāļ,āļˆāļ™āļ›āļĢāļ°āļŠāļēāļŠāļ™āđ„āļĄāđˆāļ­āļĒāļēāļāđƒāļŦāđ‰āļĨāļđāļāđ„āļ›āđ€āļāļ“āļ‘āđŒāļ—āļŦāļēāļĢ,āđ€āļžāļĢāļēāļ°āļ™āļēāļĒāļžāļĨāđāļĨāļ°āļœāļđāđ‰āļšāļąāļ‡āļ„āļąāļšāļāļēāļĢāļāļķāļāļ‚āļķāđ‰āļ™āđ„āļ›āļĄāļĩāļ›āļąāļāļŦāļēāļ—āļļāļˆāļĢāļīāļ•āđƒāļ™āļŠāļēāļĒāļ•āļēāļ›āļĢāļ°āļŠāļēāļŠāļ™āļĄāļēāļ•āļĨāļ­āļ”,āđāļ„āđˆāļĄāļĩāļ”āļĩāļ‚āļķāđ‰āļ™āļ•āļ­āļ™āļĄāļ—āļ .2āļ—āļģāļœāļĨāļ‡āļēāļ™āļ™āļĩāđ‰āļĨāđˆāļ°, ..āđ€āļĒāļĩāļĒāļ§āļĒāļēāļ—āļŦāļēāļĢāļāļĨāđ‰āļēāđ€āļĢāļēāļˆāļĢāļīāļ‡āđ†āđ€āļ–āļ­āļ°,āļ–āđ‰āļēāļ‚āđˆāļēāļ§āļ™āļĩāđ‰āļˆāļĢāļīāļ‡ āđāļĒāđˆāļĄāļēāļ,āļāļ­āļ‡āļ—āļąāļžāđ„āļ—āļĒ āļœāļš.āļŠāļŠ.āļœāļš.āļ—āļš.āļ—āļĩāđˆāļšāļąāļāļŠāļēāļŦāļ™āđˆāļ§āļĒāļĢāļšāļ•āļĢāļ‡āļ āļēāļ„āļžāļ·āđ‰āļ™āļ”āļīāļ™āļ•āđ‰āļ­āļ‡āļ—āļģāļāļēāļĢāļ™āļĩāđ‰āđƒāļŦāđ‰āļāļĢāļ°āļˆāđˆāļēāļ‡āļŠāļąāļ”āļĢāļ§āļ”āđ€āļĢāđ‡āļ§,āļ™āļēāļĒāļāļŊāļšāļ§āļāļ„āļĨāļąāļ‡āļĢāļąāļāļĐāļēāļāļēāļĢ āđ€āļ›āđ‡āļ™āđ€āļŦāļĩāđ‰āļĒāļ­āļ°āđ„āļĢāļāļąāđ‰āļāļ•āļąāļ‡āļ—āļŦāļēāļĢāļžāļĨāļĩāļŠāļĩāļžāđ„āļ§āđ‰ āļ­āļ­āļāļŠāļ·āđˆāļ­āļ”āļąāļšāļ­āļ™āļēāļ–āđ€āļĨāļĒāļ™āļ°. https://youtube.com/shorts/sLnvFxZ84z4?si=1w8LYngMFZj-5lo_
    0 Comments 0 Shares 258 Views 0 Reviews
  • āđ€āļ›āļīāļ”āļ āļēāļž "āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āļĨāđ‰āļ­āļĄāļĢāļąāđ‰āļ§āļāļąāđˆāļ‡āđ„āļ—āļĒ" āļĄāļąāļ™...āđ„āļĄāđˆāļ‡āđˆāļēāļĒāđ€āļĨāļĒ (16/9/68)

    #āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āđāļ™āļ§āļĢāļąāđ‰āļ§
    #āļŠāļēāļĒāđāļ”āļ™āđ„āļ—āļĒ
    #āļ—āļŦāļēāļĢāđ„āļ—āļĒ
    #āļ›āļāļ›āđ‰āļ­āļ‡āđāļœāđˆāļ™āļ”āļīāļ™
    #āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”
    #āļ‚āđˆāļēāļ§āļ§āļąāļ™āļ™āļĩāđ‰
    #News1short
    #ThaiTimes
    #TruthFromThailand
    #CambodiaNoCeasefire
    #Hunsenfiredfirst
    #scambodia
    #news1
    #shorts
    āđ€āļ›āļīāļ”āļ āļēāļž "āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āļĨāđ‰āļ­āļĄāļĢāļąāđ‰āļ§āļāļąāđˆāļ‡āđ„āļ—āļĒ" āļĄāļąāļ™...āđ„āļĄāđˆāļ‡āđˆāļēāļĒāđ€āļĨāļĒ (16/9/68) #āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āđāļ™āļ§āļĢāļąāđ‰āļ§ #āļŠāļēāļĒāđāļ”āļ™āđ„āļ—āļĒ #āļ—āļŦāļēāļĢāđ„āļ—āļĒ #āļ›āļāļ›āđ‰āļ­āļ‡āđāļœāđˆāļ™āļ”āļīāļ™ #āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” #āļ‚āđˆāļēāļ§āļ§āļąāļ™āļ™āļĩāđ‰ #News1short #ThaiTimes #TruthFromThailand #CambodiaNoCeasefire #Hunsenfiredfirst #scambodia #news1 #shorts
    0 Comments 0 Shares 187 Views 0 0 Reviews
  • āđāļāđ‰āļĢāļ˜āļ™. 4 āđ€āļ”āļ·āļ­āļ™ āļĒāļļāļšāļŠāļ āļēāļŊ āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” āđ„āļ§āđ‰āļ§āļēāļ‡āđƒāļˆ ‘āđāļ”āļ‡-āļ™āđ‰āļģāđ€āļ‡āļīāļ™’ āđ„āļĄāđˆāđ„āļ”āđ‰ : āļ–āļ­āļ™āļŦāļĄāļļāļ”āļ‚āđˆāļēāļ§ 02-09-68
    āđāļāđ‰āļĢāļ˜āļ™. 4 āđ€āļ”āļ·āļ­āļ™ āļĒāļļāļšāļŠāļ āļēāļŊ āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” āđ„āļ§āđ‰āļ§āļēāļ‡āđƒāļˆ ‘āđāļ”āļ‡-āļ™āđ‰āļģāđ€āļ‡āļīāļ™’ āđ„āļĄāđˆāđ„āļ”āđ‰ : āļ–āļ­āļ™āļŦāļĄāļļāļ”āļ‚āđˆāļēāļ§ 02-09-68
    0 Comments 0 Shares 187 Views 0 0 Reviews
  • āļŠāļ­āļĒāļŠāļ§.āļŠāļĩāļ™āđ‰āļģāđ€āļ‡āļīāļ™āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”

    āļšāļ—āļ„āļ§āļēāļĄāđ‚āļ”āļĒ : āļŠāļļāļĢāļ§āļīāļŠāļŠāđŒ āļ§āļĩāļĢāļ§āļĢāļĢāļ“

    āļ„āļĨāļīāļ>> https://mgronline.com/daily/detail/9680000045193
    āļŠāļ­āļĒāļŠāļ§.āļŠāļĩāļ™āđ‰āļģāđ€āļ‡āļīāļ™āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ” āļšāļ—āļ„āļ§āļēāļĄāđ‚āļ”āļĒ : āļŠāļļāļĢāļ§āļīāļŠāļŠāđŒ āļ§āļĩāļĢāļ§āļĢāļĢāļ“ āļ„āļĨāļīāļ>> https://mgronline.com/daily/detail/9680000045193
    MGRONLINE.COM
    āļŠāļ­āļĒ āļŠāļ§.āļŠāļĩāļ™āđ‰āļģāđ€āļ‡āļīāļ™āđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”
    āļ•āļ­āļ™āļ™āļĩāđ‰āļāļģāļĨāļąāļ‡āđ€āļ›āļīāļ”āļĻāļķāļāļŠāļ‡āļ„āļĢāļēāļĄāļ•āļąāļ§āđāļ—āļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡ āļŠāļ§.āļŠāļĩāļ™āđ‰āļģāđ€āļ‡āļīāļ™āļāļąāļšāļ”āļĩāđ€āļ­āļŠāđ„āļ­ āļĨāļķāļāđ† āđāļĨāđ‰āļ§āļāđ‡āļ„āļ·āļ­ āļ•āļąāļ§āđāļ—āļ™āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ‚āļąāļ”āđāļĒāđ‰āļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļžāļĢāļĢāļ„āđ€āļžāļ·āđˆāļ­āđ„āļ—āļĒāļāļąāļšāļžāļĢāļĢāļ„āļ āļđāļĄāļīāđƒāļˆāđ„āļ—āļĒāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļžāļĢāļĢāļ„āļĢāđˆāļ§āļĄāļĢāļąāļāļšāļēāļĨāļ”āđ‰āļ§āļĒāļāļąāļ™ āđ€āļžāļĢāļēāļ°āđāļĄāđ‰ āļž.āļ•.āļ­.āļ—āļ§āļĩ āļŠāļ­āļ”āļŠāđˆāļ­āļ‡ āļĢāļĄāļ§.āļāļĢāļ°āļ—āļĢāļ§āļ‡āļĒāļļāļ•āļīāļ˜āļĢāļĢāļĄāļˆāļ°āļ­āļĒāļđāđˆāļžāļĢāļĢāļ„āļ›āļĢāļ°āļŠāļēāļŠāļēāļ•āļī āđāļ•āđˆāđ€
    Like
    1
    0 Comments 0 Shares 280 Views 0 Reviews
  • āļāļĩāđˆāļ›āļļāđˆāļ™āđ„āļĄāđˆāļŦāļĄāļđ! āļ­āđ€āļĄāļĢāļīāļāļēāļ‡āļ‡ āđ€āļˆāļĢāļˆāļēāđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”!

    āļĢāļĄāļ§ āļ„āļĨāļąāļ‡āļāļĩāđˆāļ›āđˆāļļāļ™āļ‚āļđāđˆāļ‚āļēāļĒāļ—āļīāđ‰āļ‡āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļĢāļąāļāļšāļēāļĨāļŠāļŦāļĢāļąāļ

    āļĢāļąāļāļĄāļ™āļ•āļĢāļĩāļāļĢāļ°āļ—āļĢāļ§āļ‡āļāļēāļĢāļ„āļĨāļąāļ‡āļāļĩāđˆāļ›āļļāđˆāļ™āļāļĨāđˆāļēāļ§āđ€āļĄāļ·āđˆāļ­āļ§āļąāļ™āļĻāļļāļāļĢāđŒāļ§āđˆāļē āļāļĩāđˆāļ›āļļāđˆāļ™āļ­āļēāļˆāđƒāļŠāđ‰āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļŠāļŦāļĢāļąāļāļ—āļĩāđˆāļ–āļ·āļ­āļ„āļĢāļ­āļ‡āļĄāļđāļĨāļ„āđˆāļēāļāļ§āđˆāļē 1 āļĨāđ‰āļēāļ™āļĨāđ‰āļēāļ™āļ”āļ­āļĨāļĨāļēāļĢāđŒāđ€āļ›āđ‡āļ™āđ„āļĄāđ‰āļ•āļēāļĒāđƒāļ™āļāļēāļĢāđ€āļˆāļĢāļˆāļēāļāļēāļĢāļ„āđ‰āļēāļāļąāļšāļ§āļ­āļŠāļīāļ‡āļ•āļąāļ™ āļ‹āļķāđˆāļ‡āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļ„āļĢāļąāđ‰āļ‡āđāļĢāļāļ—āļĩāđˆāļāļĩāđˆāļ›āļļāđˆāļ™āļāļĨāđ‰āļēāđāļ‚āđ‡āļ‡āļ‚āđ‰āļ­āļāļąāļšāļŠāļŦāļĢāļąāļ āļ™āļąāļšāļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāđˆāļēāļĒāđāļžāđ‰āđƒāļ™āļŠāļ‡āļ„āļĢāļēāļĄāđ‚āļĨāļ

    āđāļĄāđ‰āļ§āđˆāļēāļĢāļąāļāļĄāļ™āļ•āļĢāļĩāļ„āļĨāļąāļ‡ āļ„āļąāļ•āļŠāļķāđ‚āļ™āļšāļļ āļ„āļēāđ‚āļ•āļ° āļˆāļ°āđ„āļĄāđˆāđ„āļ”āđ‰āļšāļ­āļāļ§āđˆāļēāļˆāļ°āļ‚āļēāļĒāļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļ—āļĩāđˆāļ–āļ·āļ­āļ­āļĒāļđāđˆ āđāļ•āđˆāļ„āļģāļžāļđāļ”āļ‚āļ­āļ‡āđ€āļ‚āļēāļĄāļĩāļāļēāļĢāļžāļđāļ”āļ–āļķāļ‡āļŠāđˆāļ§āļ™āļ™āļĩāđ‰āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ™āļąāļāļĨāļ‡āļ—āļļāļ™āļ—āļąāđˆāļ§āđ‚āļĨāļāļāļąāļ‡āļ§āļĨāļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļŠāļīāđˆāļ‡āļ—āļĩāđˆāļāļĩāđˆāļ›āļļāđˆāļ™āļ–āļ·āļ­āļ„āļĢāļ­āļ‡āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļŠāļŦāļĢāļąāļāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”

    āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰ āļŠāļģāļ™āļąāļāļ‚āđˆāļēāļ§ Nikkei āļĢāļēāļĒāļ‡āļēāļ™āļ§āđˆāļē āļĢāļąāļāļšāļēāļĨāļāļĩāđˆāļ›āļļāđˆāļ™āđ„āļĄāđˆāđ€āļŦāđ‡āļ™āļ”āđ‰āļ§āļĒāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢāđ€āļŠāļ™āļ­āļœāđˆāļ­āļ™āļ›āļĢāļ™āļĄāļēāļ•āļĢāļāļēāļĢāļ āļēāļĐāļĩāļ‚āļ­āļ‡āļŠāļŦāļĢāļąāļāļ—āļĩāđˆāđ„āļĄāđˆāļĢāļ§āļĄāļŠāļīāļ™āļ„āđ‰āļēāļĒāļēāļ™āļĒāļ™āļ•āđŒāđāļĨāļ°āļŠāļīāļ™āļ„āđ‰āļēāđ€āļāļĐāļ•āļĢāļ­āļĩāļāļ”āđ‰āļ§āļĒāđ€āļ‚āđ‰āļēāļĄāļēāđƒāļ™āļāļēāļĢāļœāđˆāļ­āļ™āļ›āļĢāļ™āļ„āļĢāļąāđ‰āļ‡āļ™āļĩāđ‰āļ­āļĩāļāļ”āđ‰āļ§āļĒ
    āļāļĩāđˆāļ›āļļāđˆāļ™āđ„āļĄāđˆāļŦāļĄāļđ! āļ­āđ€āļĄāļĢāļīāļāļēāļ‡āļ‡ āđ€āļˆāļĢāļˆāļēāđ„āļĄāđˆāļ‡āđˆāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļīāļ”! āļĢāļĄāļ§ āļ„āļĨāļąāļ‡āļāļĩāđˆāļ›āđˆāļļāļ™āļ‚āļđāđˆāļ‚āļēāļĒāļ—āļīāđ‰āļ‡āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļĢāļąāļāļšāļēāļĨāļŠāļŦāļĢāļąāļ āļĢāļąāļāļĄāļ™āļ•āļĢāļĩāļāļĢāļ°āļ—āļĢāļ§āļ‡āļāļēāļĢāļ„āļĨāļąāļ‡āļāļĩāđˆāļ›āļļāđˆāļ™āļāļĨāđˆāļēāļ§āđ€āļĄāļ·āđˆāļ­āļ§āļąāļ™āļĻāļļāļāļĢāđŒāļ§āđˆāļē āļāļĩāđˆāļ›āļļāđˆāļ™āļ­āļēāļˆāđƒāļŠāđ‰āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļŠāļŦāļĢāļąāļāļ—āļĩāđˆāļ–āļ·āļ­āļ„āļĢāļ­āļ‡āļĄāļđāļĨāļ„āđˆāļēāļāļ§āđˆāļē 1 āļĨāđ‰āļēāļ™āļĨāđ‰āļēāļ™āļ”āļ­āļĨāļĨāļēāļĢāđŒāđ€āļ›āđ‡āļ™āđ„āļĄāđ‰āļ•āļēāļĒāđƒāļ™āļāļēāļĢāđ€āļˆāļĢāļˆāļēāļāļēāļĢāļ„āđ‰āļēāļāļąāļšāļ§āļ­āļŠāļīāļ‡āļ•āļąāļ™ āļ‹āļķāđˆāļ‡āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļ„āļĢāļąāđ‰āļ‡āđāļĢāļāļ—āļĩāđˆāļāļĩāđˆāļ›āļļāđˆāļ™āļāļĨāđ‰āļēāđāļ‚āđ‡āļ‡āļ‚āđ‰āļ­āļāļąāļšāļŠāļŦāļĢāļąāļ āļ™āļąāļšāļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāđˆāļēāļĒāđāļžāđ‰āđƒāļ™āļŠāļ‡āļ„āļĢāļēāļĄāđ‚āļĨāļ āđāļĄāđ‰āļ§āđˆāļēāļĢāļąāļāļĄāļ™āļ•āļĢāļĩāļ„āļĨāļąāļ‡ āļ„āļąāļ•āļŠāļķāđ‚āļ™āļšāļļ āļ„āļēāđ‚āļ•āļ° āļˆāļ°āđ„āļĄāđˆāđ„āļ”āđ‰āļšāļ­āļāļ§āđˆāļēāļˆāļ°āļ‚āļēāļĒāļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļ—āļĩāđˆāļ–āļ·āļ­āļ­āļĒāļđāđˆ āđāļ•āđˆāļ„āļģāļžāļđāļ”āļ‚āļ­āļ‡āđ€āļ‚āļēāļĄāļĩāļāļēāļĢāļžāļđāļ”āļ–āļķāļ‡āļŠāđˆāļ§āļ™āļ™āļĩāđ‰āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ™āļąāļāļĨāļ‡āļ—āļļāļ™āļ—āļąāđˆāļ§āđ‚āļĨāļāļāļąāļ‡āļ§āļĨāļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļŠāļīāđˆāļ‡āļ—āļĩāđˆāļāļĩāđˆāļ›āļļāđˆāļ™āļ–āļ·āļ­āļ„āļĢāļ­āļ‡āļžāļąāļ™āļ˜āļšāļąāļ•āļĢāļŠāļŦāļĢāļąāļāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ” āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰ āļŠāļģāļ™āļąāļāļ‚āđˆāļēāļ§ Nikkei āļĢāļēāļĒāļ‡āļēāļ™āļ§āđˆāļē āļĢāļąāļāļšāļēāļĨāļāļĩāđˆāļ›āļļāđˆāļ™āđ„āļĄāđˆāđ€āļŦāđ‡āļ™āļ”āđ‰āļ§āļĒāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢāđ€āļŠāļ™āļ­āļœāđˆāļ­āļ™āļ›āļĢāļ™āļĄāļēāļ•āļĢāļāļēāļĢāļ āļēāļĐāļĩāļ‚āļ­āļ‡āļŠāļŦāļĢāļąāļāļ—āļĩāđˆāđ„āļĄāđˆāļĢāļ§āļĄāļŠāļīāļ™āļ„āđ‰āļēāļĒāļēāļ™āļĒāļ™āļ•āđŒāđāļĨāļ°āļŠāļīāļ™āļ„āđ‰āļēāđ€āļāļĐāļ•āļĢāļ­āļĩāļāļ”āđ‰āļ§āļĒāđ€āļ‚āđ‰āļēāļĄāļēāđƒāļ™āļāļēāļĢāļœāđˆāļ­āļ™āļ›āļĢāļ™āļ„āļĢāļąāđ‰āļ‡āļ™āļĩāđ‰āļ­āļĩāļāļ”āđ‰āļ§āļĒ
    0 Comments 0 Shares 540 Views 0 Reviews