Showing posts with label cara membuat. Show all posts
Showing posts with label cara membuat. Show all posts

Thursday, 12 June 2014

Windows Phone Tutorial - Membuat Sliding Menu (4) - Mengimplementasikan Swipe Gesture

Oke, ini sudah bagian terakhir dari seri tutorial pembuatan Sliding Menu di Windows Phone. Kalau misalkan Anda sudah mengikuti postingan saya yang sebelumnya, Anda mungkin akan bertanya "Bagaimana mengimplementasikannya dengan cara menggeser layar saja?". Jawabannya adalah dengan menggunakan swipe gesture.


Yang pertama kalian lakukan adalah tambahkan event ManipulationStarted dan ManipulationCompleted di LayoutRoot kalian (kalau di saya nama yang saya kasih untuk event ini adalah StartSlideMenu dan SlideMenuComplete). ManipulationStarted ini akan terjadi apabila user mulai melalukan semacam interaksi pada kontrol ybs. Sedangkan ManipulationCompleted akan terjadi ketika interaksi selesai terjadi. Untuk mempelajari lebih lanjut mengenai event-event ini, silahkan lihat link ini dan ini.

Hasil akhir kodingan XAML kalian akan terlihat sepert ini

<!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent" ManipulationDelta="SlideMenu" ManipulationStarted="StartSlideMenu" ManipulationCompleted="SlideMenuComplete">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

 ...
Kemudian di code-behindnya tambahkan kodingan berikut ini.

Point currentPoint, initialPoint;

...

private void StartSlideMenu(object sender, ManipulationStartedEventArgs e)
{
   initialPoint.X = e.ManipulationOrigin.X;   
}

private void SlideMenuComplete(object sender, ManipulationCompletedEventArgs e)
{
   var velocities = e.FinalVelocities;
   var lin = velocities.LinearVelocity;
   
   if (lin.X - initialPoint.X >= 750 && Math.Abs(lin.Y - initialPoint.Y) <= 50)
   {
        //Periksa apakah menu tertutup
        //jika iya, Swipe Kanan
        if (!isMenuIn)
        {
           MenuIn.Begin();
        }
   }

   if (initialPoint.X - lin.X >= 750 && Math.Abs(lin.Y - initialPoint.Y) <= 50)
   {
        //Periksa apakah menu terbuka
        //jika iya, Swipe Kiri
        if (isMenuIn)
        {
            MenuOut.Begin();
        }
   }
}

Kodingan akhir kalian akan seperti ini

namespace SlideMenuModule
{
    public partial class MainPage : PhoneApplicationPage
    {

        bool isMenuIn = false;
        Point currentPoint, initialPoint;

        // Constructor
        public MainPage()
        {
            InitializeComponent();
            MenuIn.Completed += MenuIn_Completed;
            MenuOut.Completed += MenuOut_Completed;
        }

        void MenuOut_Completed(object sender, EventArgs e)
        {
            isMenuIn = false;
        }

        void MenuIn_Completed(object sender, EventArgs e)
        {
            isMenuIn = true;
        }

        private void Click_Menu(object sender, RoutedEventArgs e)
        {
            if (isMenuIn)
            {
                isMenuIn = false;
                MenuOut.Begin();
            }
            else
            {
                isMenuIn = true;
                MenuIn.Begin();
            }
        }
  
        private void StartSlideMenu(object sender, ManipulationStartedEventArgs e)
        {
            initialPoint.X = e.ManipulationOrigin.X;   
        }

        private void SlideMenuComplete(object sender, ManipulationCompletedEventArgs e)
        {
            var velocities = e.FinalVelocities;
            var lin = velocities.LinearVelocity;

            if (lin.X - initialPoint.X >= 750 && Math.Abs(lin.Y - initialPoint.Y) <= 50)
            {
                //Periksa apakah menu tertutup
                //jika iya, Swipe Kanan
                if (!isMenuIn)
                {
                    MenuIn.Begin();
                }
            }

            if (initialPoint.X - lin.X >= 750 && Math.Abs(lin.Y - initialPoint.Y) <= 50)
            {
                //Periksa apakah menu terbuka
                //jika iya, Swipe Kiri
                if (isMenuIn)
                {
                    MenuOut.Begin();
                }
            }
        }
    }
}

Oke, selamat. Anda sudah membuat Sliding Menu di Windows Phone menggunakan swipe gesture. :)




Wednesday, 11 June 2014

Windows Phone Tutorial - Perubahan Theme

Sudah banyak sekali aplikasi Windows Phone yang menyediakan fitur perubahan theme. Hal ini dilakukan untuk menyediakan pilihan tampilan yang dapat dinikmati lebih oleh pengguna ketika menggunakan aplikasi. Fitur ini biasanya disediakan di halaman pengaturan atau Settings. Tema yang sering disediakan biasanya Dark dan Light. Nah, sekarang bagaimana caranya agar aplikasi yang kita buat dapat menyediakan perubahan tema? Ternyata sudah ada library untuk mengimplementasikan hal ini, yaitu Phone Theme Manager.




Aplikasi IdWinPhone

Aplikasi OkeZone


  1. Buka/buat projek Windows Phone 8 kalian, kemudian pilih Tools > Library Package Manager > Package Manager Console.
  2. Ketikka Install-Package PhoneThemeManager, tunggu sampai download dan instalasi librarynya selesai.
  3. Jika sudah, ketikkan kodingan XAML berikut ke dalam ContentPanel kalian.
  4. <StackPanel Margin="0,10" HorizontalAlignment="Stretch">
    <TextBlock Text="Testing" FontSize="30"/>
    <TextBlock Text="Sub testing" FontSize="15"/>
    <Button Content="white" Click="WhiteTheme_Click"/>
    <Button Content="black" Click="BlackTheme_Click"/>
    </StackPanel>
  5. Lalu ketikkan kodingan berikut di dalam code-behind halaman kalian
  6. private void WhiteTheme_Click(object sender, RoutedEventArgs e)
    {
    ThemeManager.ToLightTheme();
    }

    private void BlackTheme_Click(object sender, RoutedEventArgs e)
    {
    ThemeManager.ToDarkTheme();
    }


Oke, silahkan jalankan aplikasi kalian dan lihatlah hasilnya :)


Dark Theme

Light Theme

Dark Theme

Light Theme

Gampang kan bikin pengaturan perubahan tema? :) Happy coding gans..


Saturday, 7 June 2014

Windows Phone Tutorial - Membuat Sliding Menu (3) - Membuat Menu Bergeser

Ketika kita sudah memiliki animasi slide in dan slide out (jika Anda belum tahu caranya bagaimana, lihat di sini). Nah sekarang kita akan membuat code-behind-nya. Silahkan masukkan kodingan ini di file .cs halaman aplikasi Windows Phone kalian.



public partial class MainPage : PhoneApplicationPage
    {

        bool isMenuIn = false;

        // Constructor
        public MainPage()
        {
            InitializeComponent();
            MenuIn.Completed += MenuIn_Completed;
            MenuOut.Completed += MenuOut_Completed;
        }

        void MenuOut_Completed(object sender, EventArgs e)
        {
            isMenuIn = false;
        }

        void MenuIn_Completed(object sender, EventArgs e)
        {
            isMenuIn = true;
        }

        private void Click_Menu(object sender, RoutedEventArgs e)
        {
            //Memastikan tidak menjalankan animasi 
            //ketika sudah ada animasi yang sedang berjalan
            if (isMenuIn)
            {
                isMenuIn = false;
                MenuOut.Begin();
            }
            else
            {
                isMenuIn = true;
                MenuIn.Begin();
            }
        }

    }

Jangan lupa untuk memasukkan property Click="Click_Menu" pada Button di tampilan utama kita. Kodingan XAML kalian nantinya akan menjadi seperti ini.

<Grid x:Name="LayoutRoot" Background="Transparent" ManipulationDelta="SlideMenu" ManipulationStarted="StartSlideMenu" ManipulationCompleted="SlideMenuComplete">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
         <Button Content="Button" HorizontalAlignment="Left" Height="106" Margin="50,180,0,0" VerticalAlignment="Top" Width="396"  Click="Click_Menu"   /></Grid>
        <Grid x:Name="slideMenu" HorizontalAlignment="Left" Height="768" Margin="-362,0,0,0" Grid.RowSpan="2" VerticalAlignment="Top" Width="369" Background="#FF830101" RenderTransformOrigin="0.5,0.5">
         <Grid.RenderTransform>
          <CompositeTransform/>
         </Grid.RenderTransform>
         <StackPanel HorizontalAlignment="Left" Height="748" Margin="10,10,0,0" VerticalAlignment="Top" Width="349">
          <TextBlock HorizontalAlignment="Left" Height="58" TextWrapping="Wrap" Text="Teks1 " VerticalAlignment="Top" Width="306"/>
          <TextBlock HorizontalAlignment="Left" Height="74" TextWrapping="Wrap" Text="Teks 2" Width="306"/>
          <Button Content="Button 1" HorizontalAlignment="Left" Height="96" Margin="10,0,0,0" Width="296"/>
         </StackPanel>
        </Grid>
    </Grid>
 
Oke, sudah jadi deh, silahkan cek Slide Menu yang sudah kalian buat :)
Next post...






Tuesday, 27 May 2014

Windows Phone Tutorial - Membuat Sliding Menu (2) - Animasi Slide In dan Slide Out

Oke, selamat datang di tutorial kedua dari Membuat Sliding Menu di Windows Phone. Kali ini kita akan fokus pada pembuatan animasi Slide In dan Slide Out menu geser kita. Untuk toturial ini disarankan Anda membaca dan mengikuti langkah-langkah yang sudah saya jelaskan di bagian pertama. Kalau Anda tidak keberatan baca langkah-langkah di bawah ini, tidak masalah, terserah Anda.



Untuk bagian kedua dari tutorial ini, saya akan menggunakan Blend for Visual Studio 2012.  Bagi Anda yang belum familiar dengan tools ini, singkat kata tools ini merupakan tools yang disarankan bagi designer untuk mendesain aplikasi Windows Phone atau Windows 8.

Pertama-tama, di Visual Studio 2012, bukalah aplikasi yang sudah Anda buat dari tutorial pertama.

Kemudian klik kanan Solution kalian di Solution Explorer dan klik Open in Blend (atau bisa saja langsung buka Blend 2012 dan buka projek kalian). Aplikasi kalian akan terbuka di Blend for Visual Studio.

Ketikkan kodingan XAML ini sesudah akhir pembukaan tag phone:PhoneApplicationPage dan sebelum grid LayoutRoot.

<phone:PhoneApplicationPage.Resources>
  <Storyboard x:Name="MenuIn">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="slideMenu">
    <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="364"/>
   </DoubleAnimationUsingKeyFrames>
  </Storyboard>
  <Storyboard x:Name="MenuOut">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="slideMenu">
    <SplineDoubleKeyFrame KeyTime="0" Value="364"/>
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/>
   </DoubleAnimationUsingKeyFrames>
  </Storyboard>
 </phone:PhoneApplicationPage.Resources>

Dan sudah deh, ini kalian sudah membuat animasi slide in dan out dari slide menu. Silahkan tunggu postingan berikutnya ya gans :)






Monday, 26 May 2014

Windows Phone Tutorial - Membuat Halaman Aplikasi Menjadi Layar Penuh (Fullscreen)

Hai semua, balik lagi dengan postingan seputar Windows Phone Development. Kali ini saya ingin bahas tentang bagaimana membuat aplikasi Windows Phone kita menjadi Fullscreen (layar penuh). Misalkan kalian sudah bikin layout aplikasi kalian, tapi kalian melihat suatu space yang termakan untuk bar sinyal, baterai device, dst dari Windows Phone. Space ini disebut dengan System Tray.

System Tray
System Tray

Nah, sekarang bagaimana cara menghilangkan System Tray ini? Pertama, kalian bisa ubah kodingan XAML property shell:SystemTray.IsVisible dari tag phone:PhoneApplicationPage. Jadinya seperti ini:

<phone:PhoneApplicationPage
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
 xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
 x:Class="FulllScreenModule.MainPage"
 FontFamily="{StaticResource PhoneFontFamilyNormal}"
 FontSize="{StaticResource PhoneFontSizeNormal}"
 Foreground="{StaticResource PhoneForegroundBrush}"
 SupportedOrientations="Portrait" Orientation="Portrait"
 shell:SystemTray.IsVisible="False">

Atau bisa juga kalian kasih di source code-behind halamannya, misalnya seperti ini:

using Microsoft.Phone.Shell;

...

public MainPage()
        {
            InitializeComponent();
   SystemTray.IsVisible = false;
        }


System Tray Invisible
System Tray Invisible


Okeh, sudah deh, semoga bermanfaat ya :)


Thursday, 22 May 2014

Android Tutorial - Membuat Chart Menggunakan AChartEngine

Salah satu fitur yang penting dan populer dalam aplikasi mobile adalah visualisasi data. Data dapat divisualisasikan dalam berbagai caranya, salah satunya adalah menggunakan chart. Kali ini saya ingin berbagi bagaimana caranya membuat chart, khususnya line chart menggunakan library AChartEngine. Library ini dapat di unduh dan digunakan secara gratis (open source) di sini.


  1. Buat projek baru.
  2. Copy library AChartEngine yang sudah di unduh dan paste di folder libs projek kalian.
  3. Pada layout yang ingin kalian beri chart (nama layout saya: activity_chart.xml), buat kode xml-nya menjadi seperti ini. Di sini saya buat chartnya berukuran satu layar penuh.
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".ChartActivity"
        android:id="@+id/layout"
        android:orientation="vertical"
        android:background="#fff" >
    
    
    </LinearLayout>
  5. Pada kodingan activity kalian (nama activity saya: ChartActivity.java), buat kode java-nya menjadi seperti ini.
  6. package com.example.linechartmodule;
    
    import org.achartengine.ChartFactory;
    import org.achartengine.GraphicalView;
    import org.achartengine.chart.PointStyle;
    import org.achartengine.model.SeriesSelection;
    import org.achartengine.model.XYMultipleSeriesDataset;
    import org.achartengine.model.XYSeries;
    import org.achartengine.renderer.XYMultipleSeriesRenderer;
    import org.achartengine.renderer.XYSeriesRenderer;
    import org.achartengine.tools.ZoomEvent;
    import org.achartengine.tools.ZoomListener;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.graphics.Paint.Align;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class ChartActivity extends Activity {
    
     private GraphicalView mChart;
    
    
      @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_chart);
            
             OpenChart();
         }
        
      private void OpenChart()
         {
          //Definisikan nilai-nilai yang ingin
       //divisualisasikan ke dalam chart
           int x[]={10,18,32,21,48,60,53,80,18,32,21,48,60,53,
             80,18,32,21,48,60,53,8,8,3,2,4,6,3,0,1,3,2,4,6};
          
    
           // Create XY Series for X Series.
          XYSeries xSeries=new XYSeries("X Series");
          
    
          //  Adding data to the X Series.
          for(int i=0;i<x.length;i++)
          {
           xSeries.add(i,x[i]);
          }
    
             // Create a Dataset to hold the XSeries.
          
          XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
          
           // Add X series to the Dataset.   
          dataset.addSeries(xSeries);
          
          
           // Create XYSeriesRenderer to customize XSeries
    
          XYSeriesRenderer Xrenderer=new XYSeriesRenderer();
          Xrenderer.setColor(Color.GREEN);
          Xrenderer.setPointStyle(PointStyle.DIAMOND);
          Xrenderer.setDisplayChartValues(true);
          Xrenderer.setLineWidth(2);
          Xrenderer.setFillPoints(true);
          
          
          // Create XYMultipleSeriesRenderer to customize the whole chart
    
          final XYMultipleSeriesRenderer mRenderer=new XYMultipleSeriesRenderer();
          
          mRenderer.setChartTitle("Judul/Nama Chart");
          mRenderer.setXTitle("X Values");
          mRenderer.setYTitle("Y Values");
          
          //Tambahkan tombol Zoom
          mRenderer.setZoomButtonsVisible(true);
          
          //Kita set 0 agar kita bisa membuat label kita sendiri
          mRenderer.setXLabels(0);
          
          //Agar chart bisa kita geser, kita aktifkan pan
          mRenderer.setPanEnabled(true);
          
          //Jika kita ingin membatasi user menggeser dari koodinat mana sampai mana,
          //kita set panlimit(xMinPanCoor, xMaxPanCoor, yMinPanCoor, yMaxPanCoor)
          mRenderer.setPanLimits(new double[] {0,100,-100,100});
          
          //Agar chart bisa kita zoom, kita aktifkan zoom
          mRenderer.setZoomEnabled(true);
          
          //Kita set biar ada grid yang tampak
          mRenderer.setShowGrid(true);
          
          //Set warna chart, label, axis
          mRenderer.setApplyBackgroundColor(true);
          mRenderer.setBackgroundColor(Color.WHITE);
          mRenderer.setMarginsColor(Color.WHITE);
          mRenderer.setAxesColor(Color.BLACK);
          mRenderer.setLabelsColor(Color.BLACK);
          mRenderer.setXLabelsColor(Color.BLACK);
          mRenderer.setYLabelsColor(0, Color.BLACK);
          
          mRenderer.setXLabelsAlign(Align.CENTER);
          
          mRenderer.setClickEnabled(true);
         
          //Jika kita ingin label hanya ada pada range/nilai tertentu
          //Disini saya set label hanya ada setiap tiga nilai value dalam chart
          for(int i=0;i<x.length;i++)
          {
           if (i%3 == 0)
            {
             mRenderer.addXTextLabel(i, "text"); //label bisa angka, bisa text juga
            }
          }
          
            // Adding the XSeriesRenderer to the MultipleRenderer. 
          mRenderer.addSeriesRenderer(Xrenderer);
       
          
          LinearLayout chart_container=(LinearLayout)findViewById(R.id.layout);
    
        // Creating an intent to plot line chart using dataset and multipleRenderer
          
          mChart=(GraphicalView)ChartFactory.getLineChartView(getBaseContext(), dataset, mRenderer);
          mChart.setBackgroundColor(Color.WHITE);
          
          //Di sini kita buat jika user mengklik suatu nilai values dalam chart,
          //akan nampil Toast nilai yang diklik user
    
          mChart.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View arg0) {
         // TODO Auto-generated method stub
         
         SeriesSelection series_selection=mChart.getCurrentSeriesAndPoint();
         
         if(series_selection!=null)
         {
          int series_index=series_selection.getSeriesIndex();
          
          String select_series="X Series";
          if(series_index==0)
          {
           select_series="X Series";
          }else
          {
           select_series="Y Series";
          }
          
          //String month=mMonth[(int)series_selection.getXValue()];
          
          int amount=(int)series_selection.getValue();
          
          Toast.makeText(getBaseContext(), select_series+"in: "+amount, Toast.LENGTH_LONG).show();
         }
        }
       });
          
    
     // Masukkan chart ke dalam linear layout yang sudah dibuat
          chart_container.addView(mChart);
          
          
         }
    
     }
    
Sudah deh, hanya sampai sini doang ko, gampang bukan? :)

Hasilnya nanti akan seperti ini

Line Chart dengan AChartEngine
Line Chart

Zoom In Line Chart dengan AChartEngine
Zoom In

Zoom Out Line Chart dengan AChartEngine
Zoom Out

Salam Terraligno


Monday, 19 May 2014

Android Tutorial - Cara Mendapatkan MD5 Fingerprint Aplikasi Android Kita

Halo semuanya, kali ini saya ingin membahas tentang cara gampang mendapatkan MD5 Fingerprint aplikasi Android kita. Untuk apa kita membutuhkan MD5 Fingerprint? Salah satu alasan yang bagus mengapa kita harus mengetahui data ini adalah untuk mendapatkan API Key Google Maps.


Oke, langsung saja kita mulai.

Ada beberapa orang yang mengklaim cara untuk mendapatkan MD5 Fingerprint ini cukup dengan
pergi ke Window - Preferences - Android - Build. Dan simsalabim dapat yang seperti ini nih gan

MD5 Fingerprint
MD5 Fingerprint
Sumber 
Tetapi kalau Anda bernasib sama seperti saya, kalian akan melihat jendela Preferences - Android - Build kalian akan seperti ini...

Preferences
Preferences
Jangan nanya mengapa malah hasilnya seperti ini *kayaknya sih beda versi SDK  gan*

Alternatifnya apa? Kalian bisa saja buka cmd dan ngetik-ngetik beberapa keyword seperti yang dijelaskan di sini. Tapi karena saya malas buka CMD setiap kali saya ingin tahu MD5 fingerprint aplikasi saya, saya coba cari solusi laen.

Alhamdulillah sih dari tutorial ini saya dapat pencerahan. Caranya gini gan (bagi kalian yang tidak mau repot-repot baca bahasa inggris)
  1. Buka Help - Install New Software - Work with: http://keytool.sourceforge.net/update, tunggu sampai Eclipse terhubung dengan URL tsb, kemudian centang Keytool, klik Next/Finish sampai semua proses selesai. Jika kalian ditanyakan apakah anda percaya dengan konten dari URL tsb, klik Yes atau semacamnya saja.
  2.  
    Note: Ini akan secara otomatis akan mengupdate Eclipse kalian ke versi 21.1, dan Android SDK platofrm-tools kalian menjadi 16.0.2
  3. Tunggu sampai semua proses selesai dikerjakan. Jika sudah, restart lah Eclipse kalian.
  4. Kalian harus membuat keystore terlebih dahulu. Caranya klik menu Keytool Create New Certificate, kemudian isi isiannya. Jika sudah tekan Finish.
  5. Klik menu Keytool Open Keystore -  Cari keystore yang sudah kalian buat barusan dan masukkan password yang tadi kalian berikan. Nanti akan muncul jendela baru, tinggal kalian klik, daaaaaaaaaaan....
MD5 Signature
MD5 Signature
Sudah dehh, lebih gampang seperti ini kan? :) Happy coding everyone :)