void main() { print(convertRomawiToNumber("III")); } String convertRomawiToNumber(String? romawi) { Map<String, int> romawiToNumber = { "I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000 }; int total = 0; List<int> listRomawiToNumber = []; //cek invalid INPUT if (romawi == null || romawi.length < 1) { return "INVALID INPUT"; } //cek invalid ROMAWI for (int i = 0; i < romawi.length; i++) { if (!(romawiToNumber.keys.toList().contains(romawi.split("")[i]))) { return "INVALID ROMAWI"; } } //Convert ROMAWI TO NUMBER for (int i = 0; i < romawi.length; i++) { listRomawiToNumber.add(romawiToNumber[romawi.split("")[i]]!); } //SET DEFAULT TOTAL WITH LAST VALUE LIST RESULT ROMAWI TO NUMBER total += listRomawiToNumber[listRomawiToNumber.length - 1]; //LOGIC CHECK ROMAWI for (int i = listRomawiToNumber.length - 1; i >= 0; i--) { if (i >= 1) { if (listRomawiToNumber[i] <= listRomawiToNumber[i - 1]) { total += listRomawiToNumber[i - 1]; } else { total -= listRomawiToNumber[i - 1]; } } } //RETURN TOTAL return total.toString(); }
Menjalankan gitlab runner menggunakan docker
Tutorial ini merupakan catatan belajar saya dalam menggunakan GitLab CI/CD dan Docker.
Gitlab Runner adalah sebuah service yang digunakan untuk menjalankan job dan mengirimkan hasilnya kembali ke GitLab.. Shared runner sudah tersedia di Gitlab dan dapat digunakan gratis, tapi anda tetap dapat menghubungkan private runner anda ke gitlab jika kurang puas dengan Shared Runner yang disediakan.
Untuk menjalankan gitlab runner menggunakan docker gunakan perintah
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /usr/bin/docker:/usr/bin/docker \
gitlab/gitlab-runner:latest
*Pastikan sudah terinstall docker
Melihat container yang ada di docker dengan perintah docker ps -a
Terlihat terdapat satu container yang berjalan dengan nama gitlab-runner
Untuk masuk ke dalam container gunakan perintah
docker exec -it gitlab-runner bash
Untuk mendapatkan URL dan Token yang akan didaftarkan di gitlab runner dan melihat
gitlab runner yang sudah terdaftar di server gitlab, dengan masuk ke halaman:
setting->CI/CD->Runner
Terdapat register runner dengan url dan token yang akan digunakan pada gitlab runner.
Untuk menghubungkan gitlab-runner dengan server gitlab gunakan perintah
Gitlab-runner register maka akan menampilkan inputan:
Isian yang dimasukkan diambil dari halaman setting->CI/CD->Runner pada server gitlab yang telah dilihat sebelumnya.
Terutama Gitlab install URL dan Registration token
Jika tidak perlu masuk dalam container bisa menggunakan perintah:
docker exec gitlab-runner gitlab-runner register
Jika di server gitlab gitlab-runner belum jalan, lakukan verify gitlab runner dengan perintah:
docker exec gitlab-runner gitlab-runner verify
Sekarang gitlab runner di docker kita sudah tersambung dengan server gitlab .
Untuk menjalankan gitlab runner yang sudah didaftarkan untuk project pastikan pilihan enable shared runners for this project didisable (dimatikan).
Note: jika saat menjalankan pipeline terdapat output error docker not found solusinya
1. Create docker group if not exist : sudo groupadd docker
2. Add user to docker group : sudo usermod -aG docker ${USER}
3. Change docker.sock to new permission : sudo chmod 666 /var/run/docker.sock
4. Finally restart docker daemon service : sudo systemctl restart docker
Tutorial menambahkan 3D models ke dalam aplikasi projek Flutter dengan vectary
Selamat malam semuanya....
import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class VectaryScreen extends StatefulWidget { const VectaryScreen({Key? key}) : super(key: key); @override State<VectaryScreen> createState() => _VectaryScreenState(); } class _VectaryScreenState extends State<VectaryScreen> { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, appBar: AppBar( title: const Text('Vectary'), elevation: 0, actions: const [ Icon(Icons.shopping_cart), SizedBox( width: 20, ), Icon(Icons.share), SizedBox( width: 20, ), ], ), bottomNavigationBar: _buildBottomBarActions(), body: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const Expanded( child: WebView( initialUrl: 'https://app.vectary.com/p/4lepw7bb8QnDkTRO8uRiB7', javascriptMode: JavascriptMode.unrestricted, ), ), const SizedBox( height: 20, ), _buildProductTitle(), ], ), ); } Widget _buildBottomBarActions() { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Expanded( child: Container( height: 50, decoration: BoxDecoration( border: Border.all(color: Colors.black), borderRadius: BorderRadius.circular(4), ), child: const Center( child: Text( 'Buy Now', style: TextStyle( color: Colors.black, fontSize: 16, ), ), ), )), const SizedBox( width: 8, ), Expanded( child: Container( height: 50, width: 200, decoration: BoxDecoration( color: Colors.black, border: Border.all(color: Colors.black), borderRadius: BorderRadius.circular(4), ), child: const Center( child: Text( 'Add to bag', style: TextStyle( color: Colors.white, fontSize: 16, ), ), ), ), ) ], ), const SizedBox( height: 20, ) ], ), ); } Widget _buildProductTitle() { return Column( children: const [ Text( 'Sneaker', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 20, ), ), SizedBox( height: 8, ), Text( 'Sneaker X', style: TextStyle( fontSize: 16, ), ), SizedBox( height: 8, ), ], ); } }
import 'package:flutter/material.dart'; import 'package:tutorials_vectary/vectary_screen.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Tutorial Vactary', theme: ThemeData( primarySwatch: Colors.blue, ), home: const VectaryScreen(), ); } }
Instalasi prometheus dan grafana untuk monitoring
Untuk artikel kali ini penulis akan membuat artikel cara instalasi prometheus yang di combine dengan grafana untuk melakukan monitoring server, untuk kasus ini menggunakan server OS ubuntu.
Langkah awal silahkan download file node-exporter di link berikut. Node-exporter merupakan perangkat lunak yang digunakan tepat di samping aplikasi yang ingin diperoleh matriksnya.
https://prometheus.io/docs/guides/node-exporter/
File node-exporter yang sudah di download.
Extract file yang sudah didownload dengan perintah tar
List file yang di extract,terdapat nama folder node_exporter pindahkan/copy ke
folder /usr/local/bin.
Perintah untuk copy file/folder ke /usr/local/bin.
Membuat file .service sebagai contoh dibuatkan nama node-exporter.service di folder /etc/systemd/system
[Unit]
Description=Node Exporter
Wants=network-online-target
After=network-online-target
[Service]
User=ion
Group=root
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Untuk menjalankan service yang dibuatkan sebelumnya gunakan perintah systemctl start node-exporter.service
Untuk melihat status service apakah sudah berjalan gunakan perintah systemctl status node-exporter.service. Pastikan service statusnya running.
Untuk mengecek apa service node-exporter sudah berjalan dengan mengakses di browser url
Atau bisa menggunakan terminal dengan perintah curl localhost:9100/metrics
Langkah selanjutnya instalasi prometheus di docker, prometheus merupakan sistem monitoring berbasis metriks.Download image Prometheus hal ini menggunakan versi 2.32.1 dengan perintah docker pull prom/prometheus:v2.32.1
Sekarang buatkan container prometheus dengan image yang sudah di download. Dengan perintah seperti berikut.
docker run -d --name prometheus --restart always --net host \
-v /home/ion/Downloads/prometheus/prometheus_config/:/etc/prometheus \
-v prometheus-data:/prometheus \
-v /etc/localtime:/etc/localtime:ro \
prom/prometheus:v2.32.1
Buat file dalam folder sebagai contoh di /home/ion/Downloads/prometheus/prometheus_config dengan nama file prometheus.yaml isinya seperti dibawah.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
scrape_interval: 10s
static_configs:
- targets: ['localhost:9100']
Untuk mengecek container prometheus sudah berjalan dengan semestinya Akses menggunakan browser dengan url http://localhost:9090, jika berhasil tampilan akan seperti ini.
Langkah selanjutnya instalasi grafana di docker, grafana merupakan alat yang populer untuk membuat dashboard untuk berbagai sistem pemantauan dan non monitor, salah satu tools yang dapat digunakan untuk membuat dashboard saat menggunakan Prometheus. Download image grafana dengan perintah docker pull grafana/grafana:8.3.3
Sekarang membuat container grafana dengan image yang sudah di download. Dengan perintah seperti berikut.
docker run -d --net host --name grafana grafana/grafana:8.3.3
Menambahkan Data source
Masuk ke menu Configuration > Data Source > Add data source
Type > Prometheus
Link untuk melihat Template dashboard grafana.
grafana.com/grafana/dashboards/11074
Import template dashboard grafana
Tanda tambah > import