Fakultas Ilmu Komputer UI

Commit b17eee4c authored by Muhammad Rafif Elfazri's avatar Muhammad Rafif Elfazri
Browse files

Remove Funpro expalnation and add deploy information

parent 10c6f336
......@@ -6,60 +6,46 @@ Diskuy adalah sebuah aplikasi forum berbasis web. Thread-thread diskusi dengan t
## Penerapan Functional Programming
#### Pure Function
Pure Function adalah sebuah konsep dimana fungsi yang hanya bergantung pada argumen yang diberikan sehingga jika argumen yang sama diberikan, maka fungsi tersebut akan mengembalikan nilai yang sama dari sebelumnya. Fungsi ini tidak dipengaruhi oleh variabel-variabel di luar argumen dan tidak memutasi variabel apapun.
Contoh Penerapan:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/commit/c80fdf947fe00a75307436dbbc5c2f363b1adb8a#9218b17cba7ad37fdc17de1e228661cc4554b811
File yang highlight adalah guardian.ex dan fungsi yang saya highlight adalah fungsi validate_password yang menerima password dan encrypted_password. Fungsi ini hanya memeriksa apakah argumen password dan encrypted_password sama sehingga tidak membutuhkan variabel lain selain dua argumen dan fungsi tersebut konsisten memetakan dari argumen-argumen fungsi tersebut ke satu nilai.
#### Higher Order Function (Map) + Partially Applied Function + Pure FunctionHigher
Order function adalah sebuah konsep dimana sebuah fungsi menerima atau mengembalikan suatu fungsi. Higher order function yang saya gunakan adalah Map yang memetakan setiap elemen dari data enumerable ke dengan argumen fungsi yang diberikan.Argumen fungsi yang diberikan menggunakan konsep ke dalam fungsi map menggunakan partially applied function, yaitu sebuah fungsi yang saat diaplikasikan tidak memerlukan argumen penuh, fungsi tersebut dapat menerima secara terpisah.
Contoh penerapan:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy/utility/utility.ex
Fungsi yang saya highlight dari file ini adalah fungsi capitalize_string yang menerima input text yang berupa string. Fungsi ini mengkapitalisasi setiap huruf pertama dari suatu kata dalam string tersebut. Fungsi tersebut menggunakan melakukan split pada text dengan dengan delimiter single white space yang menghasilkan **list of string** dan kemudian dengan hasil tersebut dimasukkan ke dalam fungsi Enum.map_join (Fungsi yang melakukan map dan melakukan konkantenasi elemen map dengan delimiter tertentu) sebagai argumen pertama, argumen kedua whitespace “ “, dan argumen ketiga fungsi String.capitalize/1 yang diubah menjadi partial function dengan & operator pada fungsi tersebut yang menyebabkan fungsi tidak perlu diaplikasikan dengan argumen penuh / dapat menunggu argumen. Fungsi ini juga merupakan pure function karena hanya membutuhkan argumen fungsi dan tidak mengubah variabel apapun.
#### Pattern Matching
Pattern Matching adalah sebuah konsep functional programming dimana kita dapat mendefinisikan fungsi dengan beberapa pattern argumen yang dimana setiap pattern argumen memiliki function body yang dapat memiliki behaviour yang berbeda satu sama lain.
Contoh Penerapan Pattern Matching:
## Cara Menjalankan Aplikasi (Development)
Cara menyalakan server Phoenix untuk aplikasi ini :
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy_web/views/user_view.ex
* Install dependencies dengan `mix deps.get`
* Setup file ```config/dev.exs``` dan isi credential username dan password user pada database postgresql.
* Buat dan lakukan migrate pada database dengan `mix ecto.setup`
* Nyalakan server Phoenix dengan `mix phx.server`
Pattern matching yang dilakukan diatas adlah pattern matching pada pada argumen pertama dari fungsi render yang body dari functionnya memiliki behaviour yang berbeda-beda dalam men-serialize suatu struct menjadi JSON.
Sekarang anda bisa mengakses [`localhost:4000`](http://localhost:4000) dari browser anda.
##### Pipe Operator
Sudah ready untuk dijalankan di production? Mohon [lihat deployment guide berikut ini](https://hexdocs.pm/phoenix/deployment.html).
Pipe Operator adalah sebuah konsep dimana hasil dari suatu fungsi dapat diberikan ke fungsi yang lain yang dihubungkan dengan pipe operator. Pipe operator sangat mirip sekali dengan function composition, yang membedakannya urutan menjalankan fungsi. Pipe operator menjalankan fungsi dari yang pertama didefinisikan (dari kiri ke kanan) sedangkan function composition menjalankan fungsi dari yang terakhir didefinisikan (dari kanan ke kiri).
Contoh Penerapan Pipe Operator:
## Build Production Docker Image
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy/account.ex
1. Build Image dengan perintah berikujt
Lambang pipe operator pada programming language yang saya gunakan, elixir adalah “|>” dan Pipe operator pada elixir akan mengambil mengisi argumen pertama dari sebuah fungsi yang diteruskan menggunakan pipe operator.
```docker build -t diskuy_backend .```
Pipe operator tersebut akan ditulis menjadi user |> User.changeset(attrs) |> Repo.update() yang ekuivalen dengan Repo.update(User.changeset(user, attrs)). Dapat dilihat bahwa pipe operator membuat kode tersebut menjadi lebih readable
### Deploy Production
1. Build Docker image sesuai dengan perintah Build DockerImage diatas
2. Isi Environment Variable pada ``` config/docker.env``` sesuai dengan Environtment yang sudah disediakan.
## Cara Menjalankan Aplikasi
Cara menyalakan server Phoenix untuk aplikasi ini :
```shell
SECRET_KEY_BASE=REALLY_LONG_SECRET
GUARDIAN_SECRET_KEY_BASE=REALLY_LONG_SECRET
DATABASE_HOST=db
DATABASE_URL=ecto://postgres:postgres@db/postgres
PORT=4000
HOSTNAME=localhost
POSTGRES_PASSWORD=postgres
LANG=en_US.UTF-8s
```
* Install dependencies dengan `mix deps.get`
* Setup file ```config/dev.exs``` dan isi credential username dan password user pada database postgresql.
* Buat dan lakukan migrate pada database dengan `mix ecto.setup`
* Nyalakan server Phoenix dengan `mix phx.server`
3. Jalankan command ```docker-compose up``` untuk mendeploy Backend server.
Sekarang anda bisa mengakses [`localhost:4000`](http://localhost:4000) dari browser anda.
4. Backend server dapat diakses pada http://localshost
Sudah ready untuk dijalankan di production? Mohon [lihat deployment guide berikut ini](https://hexdocs.pm/phoenix/deployment.html).
5. Jalankan command ```docker-compose down``` untuk menghentikan server
## Pelajari lebih lanjut
......@@ -74,7 +60,7 @@ Kelompok 18
* Fadhil Pradipta - 1806205344
* Jonathan - 1806204985
* Muhammad Rafif ELfazri- 1806205722
* Muhammad Rafif Elfazri- 1806205722
* Ryo Axton Lie - 1806205571
## Acknowledgements
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment