ProblemSet2/ProblemSet2.md
2026-09-14 23:33:39 -04:00

7.6 KiB
Raw Permalink Blame History

Problem Set 2: Composing Concepts

  1. Concept Questions Contexts Fungsi Context: Concept NonceGeneration menggunakan Context untuk mengisolasi namespace (ruang nama) pembuatan string unik. Hal ini menjamin bahwa sebuah nonce unik di dalam konteks tertentu, tanpa mengharuskan nilai nonce tersebut unik secara global di seluruh sistem. Penerapan pada Aplikasi: Dalam aplikasi pemendek URL, sebuah Context mewakili basis domain (shortUrlBase), seperti "tinyurl.com", "bit.ly", atau domain kustom milik pengguna. Dengan demikian, nonce (suffix) yang sama dapat digunakan pada domain basis yang berbeda tanpa menimbulkan bentrok data (collision). Storing Used Strings Alasan Penyimpanan Set: Di tingkat spesifikasi konsep abstrak, menyimpan set string terpakai (used set of Strings) diperlukan untuk memodelkan status keunikan secara eksplisit dan menjamin invariant bahwa aksi generate tidak akan pernah mengembalikan string yang sudah pernah dipakai sebelumnya. Hubungan dengan Counter (Abstraction Function): Jika implementasi menggunakan counter integer C untuk setiap konteks yang nilainya ditingkatkan setiap kali aksi generate dipanggil, lalu dikonversi menjadi string unik melalui fungsi encoding f(n) (misalnya base62 encoding): Abstraction Function (AF): Memetakan status counter C pada level implementasi ke set string terpakai (used) pada level spesifikasi: AF(C)={f(i)∣0≤i<C} Artinya, set used diwakili secara abstrak oleh seluruh hasil encoding dari indeks 0 hingga C-1. Words as Nonces Keuntungan (Perspektif Pengguna): Tautan pemendek menjadi jauh lebih mudah diingat, dibaca, diucapkan, dan diketik manual oleh pengguna (misalnya domain.com/happy-cat). Kerugian (Perspektif Pengguna): Ruang kombinasi kata (namespace) jauh lebih kecil dan terbatas dibanding string acak/hash, sehingga ketersediaan kata cepat habis. Selain itu, tautan menjadi sangat mudah ditebak (predictable/guessable) oleh pihak luar. Modifikasi Konsep NonceGeneration: concept NonceGeneration [Context] purpose generate unique words as nonces within a context principle each generate returns a word from dictionary not returned before for that context state a set of Contexts with a wordPool set of Strings a used set of Strings actions generate (context: Context) : (nonce: String) requires wordPool - used is not empty effect returns a nonce from (wordPool - used) and adds it to this context's used set

  2. Synchronization Questions Partial Matching Pada sync pertama (generate), aksi Request.shortenUrl hanya mencantumkan argumen shortUrlBase karena informasi tersebut sudah cukup untuk memicu pemanggilan NonceGeneration.generate pada konteks basis URL tersebut. Pada sync kedua (register), aksi Request.shortenUrl mencantumkan targetUrl dan shortUrlBase karena aksi UrlShortening.register membutuhkan kedua nilai tersebut bersama dengan nonce yang baru dihasilkan untuk mendaftarkan pemetaan URL secara utuh. Omitting Names Konvensi penghilangan nama (omitting names) hanya dapat digunakan apabila nama argumen/kembalian pada aksi sama persis dengan nama variabel lokal yang diikat (bound variable). Konvensi ini tidak digunakan di semua kasus karena sering kali nama hasil kembalian dari suatu aksi berbeda dengan nama argumen pada aksi tujuan. Sebagai contoh, hasil kembalian nonce dari NonceGeneration.generate harus dipetakan secara eksplisit ke argumen shortUrlSuffix pada UrlShortening.register (shortUrlSuffix: nonce).

Inclusion of Request Sync pertama dan kedua melibatkan aksi Request karena keduanya dipicu langsung oleh interaksi eksternal (permintaan dari pengguna melalui antarmuka/front-end). Sync ketiga (setExpiry) tidak mencantumkan aksi Request karena merupakan reaksi internal sistem yang terjadi secara otomatis saat aksi UrlShortening.register selesai dijalankan.

Fixed Domain Jika aplikasi tidak mendukung domain alternatif dan selalu menggunakan domain tetap (misalnya "bit.ly"), variabel shortUrlBase dihilangkan dari aksi Request, dan string konstan "bit.ly" diteruskan secara langsung ke aksi konsep terkait: sync generate when Request.shortenUrl () then NonceGeneration.generate (context: "bit.ly")

sync register when Request.shortenUrl (targetUrl) NonceGeneration.generate (): (nonce) then UrlShortening.register (shortUrlSuffix: nonce, shortUrlBase: "bit.ly", targetUrl)

Adding a Sync (Expiring Resource) Sync untuk menangani penghapusan URL saat masa berlakunya kadaluarsa: sync expire when ExpiringResource.expireResource (): (resource) then UrlShortening.delete (shortUrl: resource)

  1. Extending the Design Konsep Tambahan

concept Ownership [User, Item] purpose maintain ownership of resources by users principle owner of an item can be queried after assignment state a set of Ownerships with a user User an item Item actions assign (user: User, item: Item) effect associates user as owner of item

concept AccessAnalytics [Item] purpose track usage count of identifiable items principle each record increment increases the access count for an item state a set of Items with a count Number actions increment (item: Item) effect increases count for item by 1 getCount (item: Item) : (count: Number) effect returns the current count for item

Tiga Sinkronisasi Utama

  1. Sinkronisasi Pembuatan Shortening (Mengasosiasikan Pemilik) Plaintext sync registerOwnership when Request.createShortUrl (user: creator) UrlShortening.register (): (shortUrl) then Ownership.assign (user: creator, item: shortUrl)
  2. Sinkronisasi Pencatatan Akses (Translasi URL) Plaintext sync recordAccess when UrlShortening.lookup (shortUrl) then AccessAnalytics.increment (item: shortUrl)
  3. Sinkronisasi Pemeriksaan Analitik oleh Pengguna Plaintext sync viewAnalytics when Request.getAnalytics (user, shortUrl) Ownership.assign (user, item: shortUrl) then AccessAnalytics.getCount (item: shortUrl) Evaluasi Modul & Fitur Tambahan Allowing users to choose their own short URLs: Realisasi: Tambahkan sync baru yang menerima permintaan URL kustom dari pengguna dan memanggil UrlShortening.register secara langsung tanpa melibatkan konsep NonceGeneration. Penilaian: Sangat baik. Desain ini modular karena UrlShortening tidak terikat langsung pada aksi pembuatan nonce. Using the "word as nonce" strategy: Realisasi: Ubah logika internal konsep NonceGeneration (seperti pada Bagian 1) tanpa mengubah konsep UrlShortening, Ownership, AccessAnalytics, maupun sync yang sudah ada. Penilaian: Sangat baik. Konsep UrlShortening tetap independen terhadap mekanisme pembuatan nonce. Including the target URL in analytics: Realisasi: Ubah AccessAnalytics agar menggunakan targetUrl sebagai parameter Item, atau tambahkan sync baru yang mencatat increment berbasis targetUrl saat UrlShortening.lookup dipanggil. Penilaian: Sangat baik. Memungkinkan analisis performa konten teragregasi ketika beberapa short URL mengarah ke satu target yang sama. Generate short URLs that are not easily guessed: Realisasi: Ubah logika pembuatan string pada NonceGeneration agar menghasilkan token acak berpola kriptografis (entropi tinggi) dibanding pola sekuensial. Penilaian: Sangat baik. Mencegah serangan URL scanning tanpa mengganggu logika pemendekan URL. Supporting reporting of analytics to creators of short URLs who have not registered as user: Realisasi: Memerlukan mekanisme kepemilikan alternatif (misalnya menerbitkan secret key / admin token saat pembuatan) atau mengubah konsep Ownership agar mendukung identifikasi anonim. Penilaian: Kurang disarankan. Mengizinkan akses analitik tanpa otentikasi pengguna meningkatkan risiko kebocoran data analitik kepada pihak yang tidak berhak, serta mengompromikan prinsip dasar keamanan dan isolasi pengguna.