Add ProblemSet2.md

This commit is contained in:
5803025007 2026-09-14 23:33:39 -04:00
commit c653d2380f

121
ProblemSet2.md Normal file
View File

@ -0,0 +1,121 @@
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](https://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)
3. 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.