Cara convert angka romawi ke angka desimal dengan bahasa pemrograman dart

Di tutorial kali ini saya ingin membagi sedikit ilmu bagaimana cara convert angka romawi ke angka desimal menggunakan bahasa pemrograman Dart,




Adapun code nya bisa dilihat dibawah ini:

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();
}

Dari kode diatas jika dijalankan maka akan keluar hasil convert angka romawi III menjadi angka desimal 3 

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....

Sesuai dengan judul artikel ini,kali ini saya akan bahas bagaimana menambahkan 3D model ke dalam aplikasi Project flutter dengan memanfaatkan fitur dari website vectary...

Untuk menggunakan fitur dari website vectary,hal pertama yang harus kita lakukan adalah mendaftar ke website tersebut atau bisa langsung dengan login menggunakan akun google kita...
Buka website vectary.com. Selanjutnya masuk dengan akun google.



Setelah berhasil login,kita akan di diperlihatkan halaman dashboard dari website vectary. Selanjutnya pilih new project -> Pilih Template yang ingin ditampilkan pada project aplikasi kita.



Setelah proses diatas selesai,selanjutnya kita kembali ke project flutter (disini saya menggunakan Android Studio). Untuk menampilkan template yang kita pilih dari website vectary ke dalam project flutter,disini kita harus menambahkan package webview_flutter.


Setelah package ditambahkan jangan lupa untuk klik pub get. Setelah proses diatas selesai selanjutnya buat file dart baru dengan nama vectary_screen.dart dan ikuti kode nya seperti dibawah.
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,
        ),
      ],
    );
  }
}

Setelah itu ubah file main.dart seperti code dibawah
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(),
    );
  }
}

Jika semua langkah sudah dilakukan,jalankan aplikasinya maka hasilnya seperti ini

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

http://localhost:9100/metrics


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


Untuk mengecek container grafana sudah berjalan dengan semestinya Akses menggunakan browser dengan url http://localhost:3000/login. jika berhasil maka akan muncul form login, secara default login menggunakan username dan password admin.


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


Isikan id yang didapatkan di link grafana.com/grafana/dashboards/11074 terus tekan tombol load disamping isian kolom.

Setelah tombol load di tekan maka akan muncul tampilan berikut, langsung tekan tombol import maka akan langsung di redirect ke halaman dashboard monitoring.

Tampilan halaman monitoring grafana


Sekian , Terimakasih