Fakultas Ilmu Komputer UI

Commit e278a436 authored by Ragil Al Badrun Pasaribu's avatar Ragil Al Badrun Pasaribu
Browse files

Add blogs week 11 ragil

parent 61772ca9
Pipeline #13495 canceled with stages
in 34 seconds
---
layout: post
title: Dockerfile and Docker Compose
date: 2019-04-15 08.07.10 +0700
author: ragil
---
Pada awal pembuatan aplikasi menggunakan Docker, awalnya kita sering menulis pada Dockerfile.
Lalu kemudian ada `docker-compose.yml`, file apa ini dan apa perbedaannya?
<!--more-->
Dockerfile berguna untuk menulis perintah-perintah apa saja yang digunakan untuk membuat suatu
image. Contoh **Dockerfile**:
```
FROM ubuntu:latest
MAINTAINER john doe
RUN apt-get update
RUN apt-get install -y python python-pip wget
RUN pip install Flask
ADD hello.py /home/hello.py
WORKDIR /home
```
Sedangkan `docker-compose.yml` berguna untuk mendefinisikan dan menjalankan berbagai container
dalam satu waktu. Anggap kita punya _app_ yang menggunakan postgres, redis, dan volume. Maka dalam
`docker-compose` kita dapat mendefinisikan bagaimana app dibuat, kemudian akan menyambungkan app
ke postgres dan app ke redis di dalam satu file ini. Contoh `docker-compose.yml`:
```
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: /path/to/volume
```
Sekian, terima kasih.
---
layout: post
title: Minimizing Function on Adapter Pattern
date: 2019-04-15 08.12.10 +0700
author: ragil
---
Clean Code merupakan hal wajib yang dilakukan oleh seorang programmer untuk
dapat menulis kode yang berkualitas. Dari seorang penulis di Medium, beberapa
syarat Clean Code adalah:
<!--more-->
1. It should be elegant — Clean code should be pleasing to read. Reading it should make you smile the way a well-crafted music box or well-designed car would.
2. Clean code is focused —Each function, each class, each module exposes a single-minded attitude that remains entirely undistracted, and unpolluted, by the surrounding details.
3. Clean code is taken care of. Someone has taken the time to keep it simple and orderly. They have paid appropriate attention to details. They have cared.
4. Runs all the tests
5. Contains no duplication
6. Minimize the number of entities such as classes, methods, functions, and the like.
Salah satu hal yang saya ingin fokuskan di sini adalah poin nomor 5 dan 6. Dalam implementasinya
saya diharuskan untuk membuat sebuah adapter pattern yang menyambungkan elastic dan app tim kami.
Kenapa harus melalui app? Karena elastic tidak punya skema otentikasi sendiri, sehingga semua orang
bisa mengakses, karenanya diperlukan sebuah gerbang untuk hal itu. Kodenya dapat dilihat di
[sini.](https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLC7/blob/development/backend/services/elasticsearch.py)
Dalam kode tersebut saya bertujuan untuk mem-filter data dari frontend ke elastic dengan berbagai
perbedaan nama variabel. Hal ini bertujuan untuk memudahkan frontend. Dalam eksekusi-nya
bisa saja untuk membuat tiap fungsi yang bertujuan untuk melakukan filter khusus, namun hal ini
hanya akan menghasilkan banyak duplikasi kode. Karena hal tersebut, kode yang dibuat diusahakan
se-generic mungkin, contoh:
```py
for k, v in kwargs.items():
if k in args_mapping.keys():
mapping = args_mapping[k]
path = mapping["path"]
func = mapping["func"]
others = mapping["others"]
now = {}
current = now
for key in path[:-1]:
current[key] = {}
current = current[key]
current[path[-1]] = func(v)
for ko, vo in others.items():
current[ko] = vo
field.append(now)
for path, v in additional:
now = {}
current = now
for key in path[:-1]:
if key not in current:
current[key] = {}
current = current[key]
current[path[-1]] = v
field.append(now)
body["query"]["bool"]["filter"] = field
return cls.fetch(body)
```
Lalu bagaimana membedakan perlakuan tiap variable? Hanya perlu membuat mapping
fungsi-fungsi untuk memperlakukan variable tersebut.
```py
args_mapping = {
"source_ip": {
"path": ["term", "IP.src.keyword"],
"func": lambda x: x,
"others": {},
},
"destination_ip": {
"path": ["term", "IP.dst.keyword"],
"func": lambda x: x,
"others": {},
},
"attack_type": {
"path": ["term", "class.keyword"],
"func": lambda x: x,
"others": {},
},
"id": {"path": ["term", "_id"], "func": lambda x: x, "others": {}},
"start_timestamp": {
"path": ["range", "@timestamp", "gte"],
"func": lambda time: time.strftime("%Y-%m-%dT%H:%M:%S"),
"others": {"format": "yyyy-MM-dd'T'HH:mm:ss"},
},
"end_timestamp": {
"path": ["range", "@timestamp", "lte"],
"func": lambda time: time.strftime("%Y-%m-%dT%H:%M:%S"),
"others": {"format": "yyyy-MM-dd'T'HH:mm:ss"},
},
}
```
Dalam kode tersebut juga diimplementasikan Adapter Pattern, salah satu Design Pattern.
Ada banyak lagi Design Pattern, seperti Singleton, Decorator, Factory dan sebagainya.
---
layout: post
title: Persona?
date: 2019-04-15 08.30.10 +0700
author: ragil
---
Persona adalah karakteristik dari orang-orang yang khususnya akan memakai
aplikasi. Lalu apa gunanya hal ini?
<!--more-->
Hal ini berguna untuk developer memahami secara cepat bagaimana segmentasi
pengguna aplikasi, sehingga fitur yang di-develop tidak salah sasaran. Sebagai
contoh saya akan mengambil persona dari aplikasi SIMLOMANKEJAP.
### Pimpinan
Dalam kesehariannya Pak Taufik memiliki ritme kerja yang super sibuk sehingga
tidak akan sempat untuk melihat secara detail serangan-serangan yang terjadi. Karena
hal tersebut maka Pak Taufik lebih senang melihat laporan yang menggambarkan
keadaan dalam satu kali lihat, seperti laporan dalam bentuk grafik dan sebagainya.
Maka kami sebagai developer harus memfasilitasi hal ini. Berdasarkan hal tersebut
maka pada sprint selanjutnya kami akan membuat grafik-grafik data serangan. Saat ini
kami telah membangun peta serangan sehingga dalam satu kali lihat kita tahu serangan
tersebut berasal darimana dan sebagainya.
### Sekretaris
Hampir sama dengan Pimpinan, sekretaris mengikuti jadwal pimpinan yang super padat.
Maka aplikasi haruslah gampang untuk digunakan agar tidak memakan banyak waktu sekretaris
dalam mempelajari hal tersebut. Dalam SIMLOMANKEJAP kami telah berusaha untuk
membuat aplikasi yang ramah bagi pengguna.
### Staff
![ ](/assets/images/2019-04-16-persona-apa-gunanya/persona-staff.png)
Staff merupakan orang yang ahli mengenai hal-hal dalam aplikasi ini. Karena hal tersebut
selain informasi umum, kami juga menampilkan informasi-informasi detail, misal terkait log.
Kami menampilkan _payload_ yang ada dalam request, IP, header dan informasi-informasi detail
lainnya yang diharapkan mempermudah si staff ini.
Supports Markdown
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