Membuat WebApp dengan Microsoft Azure dan Github



Microsoft Azure adalah cloud service platform dari microsoft yang dapat digunakan untuk berbagai hal dalam bidang cloud computing seperti database, mobile backend, web apps, virtual machines, dan lain-lain.

Pada artikel kali ini kita akan membuat web app dan di-host ke azure. Ada dua cara untuk deploy web app ke azure, yaitu FTP dan Git. Artikel kali ini akan menunjukan bagaimana men-deploy-kan nya menggunakan Git.

Terlebih dahulu kita perlu membuat akun Github untuk menggunakan layanan Git dengan mengunjungi github.com. Klik sign up, isi data pada form yang tersedia lalu klik Create an account.


Pada langkah ini, pilih yang Free, lalu klik Finish sign up

Buka inbox email yang telah didaftarkan akun github, lalu verifikasi email tersebut
Langkah selanjutnya kita perlu menginstall Git Terminal pada laptop kita dengan mengunjungi link berikut git-scm.com lalu klik download.

Kembali ke web github tadi, buat repository baru dengan klik tombol New Repository. Kemudian masukkan nama repository yang kita inginkan, misalnya AzureWebApp lalu klik Create repository.

Selanjutnya kita akan menyimpan kode program yang kita buat ke github menggunakan git terminal. Buka git terminal(git bash) lalu ikuti langkah-langkah berikut ini:

Buat file index.php dengan isi sebagai berikut, lalu simpan pada folder anda

<?php 
   echo "Hello, Azure!";
?>

Buka lokasi code program disimpan pada CMD(misal disini saya simpan pada folder WebSaya), lalu ketik 

git config --global user.name “nickname”
git config --global user.email “email”

*nickname = username github anda
*email = email github anda

Selanjutnya lakukan inisialisasi pada repository

git init

Hubungkan dengan repository yang telah anda buat

git remote add origin https://github.com/azhary/AzureWebApp.git
git remote –v

*url repository bisa dilihat pada repository yang telah anda buat

Tambah semua file didalam folder dengan command

git add .

Commit dengan –m (message)

git commit –m “initial commit”

Selanjutnya push ke github

git push origin master

Setelah itu anda akan diminta untuk memasukkan username dan password.


Command Git 

git config
konfigurasi user pada saat pertama kali

git init
inisialisasi pertama kali pada folder project yang akan disimpan di github

git help
menampilkan command pada git

git status
menampilkan file yang telah diubah

git add
menambahkan file ke repository pada github

git commit
memberi tanda pada pada perubahan file

git branch
mengembangkan project pada masing-masing repository

git merge
menggabungkan semua project pada setiap contributor

git push
mengupdate perubahan code ke github

git pull
mengupdate code repositori local



Langkah selanjutnya kita akan membuat WebApp pada azure.

1. Terlebih dahulu login akun azure anda pada http://portal.azure.com/
2. Klik New, pilih Web + Mobile, masukkan nama Web App anda lalu klik Create
3. Tunggu hingga proses selesai
4. Setelah selesai, anda dapat membuka web anda dengan mengunjungi alamat namawebanda.azurewebsites.net

5. Kemudian kita akan menghubungkan Azure Web App dengan Github, caranya pada menu Web App pilih Setting -> Continuous Deployment -> Choose Source -> Github
6. Klik Authorization untuk menghubungkan ke akun Github anda
7. Setelah dihubungkan ke akun github, klik Choose Project lalu pilih repository anda, kemudian klik OK.

8. Setelah integrasi dengan akun github berhasil, lihat web anda
Setiap kita melakukan push otomatis Azure akan mengupdate project web kita.


Selanjutnya kita akan menghubungkan database MySQL dengan Azure.

1. Buka portal azure, lalu klik New -> Data + Storage -> MySQL Database. Isi nama database. Pada bagian Legal Terms klik OK untuk memberikan authorize pada Legal Terms. Kemudian klik Create
2. Setelah deployment database selesai, pada settings lalu lihat properties yang ada pada database tersebut.
Kita akan membutuhkan informasi mengenai HOSTNAME, DATABASE NAME, USERNAME, dan PASSWORD.

3. Kemudian kita akan membuat tabel pada database kita, buka http://www.phpmyadmin.co/ lalu login menggunakan hostname, username, dan password yang telah kita dapatkan tadi

4. Pada bagian kiri, klik pada database yang kita buat tadi. Lalu pilih SQL, kemudian ketik query berikut ini lalu klik Go
CREATE TABLE registration_tbl(id INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id), name VARCHAR(30), email VARCHAR(30), date DATE);

5. Pada folder kita, buat file baru dengan nama connect.php dengan isi sebagai berikut
<?php 
define("HOSTNAME", "hostname_database_anda");
define("USERNAME", "username_database_anda");
define("PASSWORD", "password_database_anda");
define("DBNAME", "nama_database_anda"); /* misalnya nama database saya db_azurems */

$conn = mysql_connect(HOSTNAME, USERNAME, PASSWORD)
  or die ("Error saat menghubungkan ke host database");
$db = mysql_select_db(DBNAME)
  or die ("Error saat menghubungkan ke database");
?>

6. Lalu ubah file index.php dengan isi sebagai berikut
<!DOCTYPE html>
<html>
<head>
 <title>Web App Sederhana</title>
</head>
<body>
 <form action="hello.php" method="POST">
  <div>
   <label for="nama">Nama</label>
   <input type="text" id="nama" name="nama"/>
  </div>
  <div>
   <label for="email">Email</label>
   <input type="email" id="email" name="email"/>
  </div>
  <div>
   <input type="submit" id="submit" name="submit"/>
  </div>
 </form>
</body>
</html>

7. Buat file baru dengan nama hello.php dengan isi sebagai berikut
<!DOCTYPE html>

<html>
<head>
    <title>Web App Sederhana</title>
</head>
<body>
    <?php
        include("connect.php");
        if (!empty($_POST)) {
            $nama = $_POST['nama'];
            $email = $_POST['email'];
            $date = date("Y-m-d");
            echo '<h1>Halo, ' . $nama . '!</h1>';
            echo 'Email : ' . $email;
            // Insert data
            $sql_insert = "INSERT INTO registration_tbl (name, email, date) VALUES ('$nama', '$email', '$date')";
            mysql_query($sql_insert) or die (mysql_error());
        }
        // Retrieve data
        $sql_select = "SELECT * FROM registration_tbl";
        $result = mysql_query($sql_select) or die (mysql_error());
        echo "<br><br>";
        echo "Data yang telah masuk :";
        echo "<br><br>";
        echo "<table border='1'>";
        echo "<tr><th>Nama</th>";
        echo "<th>Email</th>";
        echo "<th>Tanggal</th></tr>";
       
        while ($row = mysql_fetch_array($result)) {
            echo "<tr><td>".$row['name']."</td>";
            echo "<td>".$row['email']."</td>";
            echo "<td>".$row['date']."</td></tr>";
        }
        echo "</table>";
    ?>
</body>
</html>


8. Push lagi file-file tersebut lalu lihat perubahan yang terjadi pada web kita

Pointer dalam Bahasa Pemrograman C


Pointer merupakan salah satu fitur yang terdapat dalam bahasa pemrograman C. Fitur ini bisa dibilang powerful karena dapat membuat kita mengakses dan memanipulasi alamat memori(address) pada suatu variabel.

Dalam menggunakan pointer, kita menggunakan operator reference(& dan *).  Misalkan suatu variabel bernama x, maka &x adalah address dari variabel x.

#include <stdio.h>

int main()
{
    int x = 7;

    printf("Nilai x: %d\n", x);
    
    // gunakan %p agar address yang ditampilkan dalam angka heksadesimal
    printf("Alamat x: %p\n", &x); // lambang ampersand(&) sebelum variabel x
    return 0;
}

Output:
Nilai x: 7
Alamat x: 0029ff0c

*kamu mungkin menghasilkan alamat yang berbeda tergantung sistem operasi memakai alamat mana saat kode tersebut dieksekusi

Pada program tersebut, nilai 7 disimpan di lokasi memori 0029ff0c. x hanyalah sebuah nama yang diberikan ke lokasi memori tersebut.

 Variabel hanyalah lokasi memori yang diberi nama
Variabel pointer adalah suatu variabel yang dapat menyimpan address, sedangkan variabel biasa menyimpan nilai. Ketika suatu pointer sedang memegang suatu address variabel lain, kita juga dapat mengubah nilai yang ada pada variabel yang address-nya sedang dipegang oleh pointer tersebut.

Cara mendeklarasikan suatu variabel pointer menggunakan operator * , dan untuk mengambil address suatu variabel menggunakan operator & .

#include <stdio.h>

int main()
{
    int y;
    int *x = &y; // pointer x menyimpan alamat y
    printf("yang disimpan x = %p\n", x);
    printf("alamat y = %p\n", &y);
    return 0;
}

Output:
yang disimpan x: 0029ff08
alamat y: 0029ff08

*kamu mungkin menghasilkan alamat yang berbeda tergantung sistem operasi memakai alamat mana saat kode tersebut dieksekusi

Jika ingin menampilkan nilai dari address yang sedang dipegang oleh variabel pointer, kita menggunakan operator * pada saat menggunakan printf()

#include <stdio.h>

int main()
{
    int y = 5;
    int *x = &y; // pointer x menyimpan alamat y

    printf("nilai dari address yang dipegang oleh x = %d\n", *x);
    printf("nilai variabel y = %d\n", y);
    return 0;
}

Output:
nilai dari address yang dipegang oleh x = 5
nilai variabel y = 5

Cara untuk mengubah nilai dari address yang dipegang oleh variabel pointer

#include <stdio.h>

int main()
{
    int y = 5;
    int *x = &y; // pointer x menyimpan alamat y

    printf("Nilai y sebelum diubah dari pointer x = %d\n", y);

    *x = 10; // mengubah nilai dari address yg dipegang pointer x

    printf("Nilai y setelah diubah dari pointer x = %d\n", y);

    return 0;
}

Output:
Nilai y sebelum diubah dari pointer x = 5
Nilai y setelah diubah dari pointer x =10

Namun, jika kita mengubah nilai dari address yang dipegang tanpa operator * , maka pointer tersebut berarti menyimpan alamat 10 atau dalam heksadesimal 0000000a

#include <stdio.h>

int main()
{
    int y = 5;
    int *x = &y; // pointer x menyimpan alamat y

    x = 10; // tanpa * , maka x menyimpan alamat 10
    // 10 dalam heksadesimal adalah 0000000a

    printf("address yang dipegang x = %p\n", x);

    return 0;
}

Output:
address yang dipegang x = 0000000a


 

C - Struktur Pembangun Algoritma

Kriptografi - Program Bahasa C untuk Menyembunyikan Pesan Menggunakan Teknik Caesar Cipher dan Vigenere Cipher

Kriptografi adalah seni menyembunyikan/menyamarkan pesan seolah-olah pesan tersebut tidak memiliki makna yang bertujuan untuk keamanan informasi dari pihak-pihak yang tidak diinginkan.

Istilah-istilah umum dalam kriptografi
Plaintext    : pesan yang ingin dirahasiakan.
Ciphertext : pesan yang telah disamarkan.
Encryption: proses penyamaran dari plaintext ke ciphertext.
Decryption: proses pembalikan dari ciphertext ke plaintext.



Contoh











Kriptografi sudah lama digunakan oleh tentara Sparta di Yunani pada permulaan 400 SM. Mereka menggunakan alat yang disebut scytale. Alat ini terdiri dari sebuah pita panjang dari daun papyrus yang dililitkan pada sebatang silinder. Pesan yang akan dikirim ditulis horizontal (baris per baris). Bila pita dilepaskan, maka huruf-huruf di dalamnya telah tersusun membentuk pesan rahasia.

Untuk membaca pesan, penerima melilitkan kembali silinder yang diameternya sama dengan diameter silinder pengirim. Teknik kriptografi seperti ini dikenal dengan nama transposition cipher, yang merupakan metode enkripsi tertua.

Transposition Cipher

Algoritma Kriptografi(cipher) adalah fungsi matematika yang digunakan untuk enkripsi dan dekripsi. Kekuatan suatu algoritma kriptografi diukur dari banyaknya kerja yang dibutuhkan untuk memecahkan data ciphertext menjadi plaintext.
Kriptografi modern tidak lagi mendasarkan kekuatan pada algoritmanya. Jadi algoritma tidak dirahasiakan. Kekuatan kriptografinya terletak pada kunci, yang berupa deretan karakter atau bilangan bulat yang dijaga kerahasiannya.

Misalnya dengan menggunakan teknik Caesar Cipher, yaitu teknik menyembunyikan pesan dengan menggeser susunan alphabet sejauh k huruf. Jika kunci(k) bernilai 3, maka huruf-huruf pada plaintext digeser sejauh 3 huruf.


Dengan kata lain, misalkan p adalah plaintext, pi adalah huruf ke-i pada plaintext, dan k adalah kunci rahasianya, maka pergeseran tiap huruf plaintext menjadi ciphertext(c), yaitu ci, adalah sebagai berikut: 

ci = (pi + k) % 26

Komputer hanya mengerti angka, jadi angka-angka itu harus direpresentasikan menjadi karakter agar dapat dipahami oleh manusia. Daftar representasi angka-angka tersebut dapat kita lihat pada tabel ASCII berikut ini


Perhatikan pada angka 65 - 90 dan 97 - 122 pada kolom dec(desimal). Huruf-huruf pada abjad direpresentasikan oleh angka-angka pada range tersebut. 65 - 90 merepresentasikan huruf kapital, sedangkan 97 - 122 merepresentasikan huruf kecil. Jadi perhitungan yang dilakukan di komputer akan menjadi seperti ini

if (plain[i] >= 'A' && plain[i] <= 'Z')
{
   // pada ASCII, huruf A dimulai dari 65, maka kurangi sejauh A yaitu 65 ketika di-modulo
   // lalu ditambah sejauh A yaitu 65 agar yang tampil adalah huruf 
   // karena pada ASCII huruf kapital dimulai dari 65
   cipher = ((plain[i] + key - 'A') % 26) + 'A';
}
else if (plain[i] >= 'a' && plain[i] <= 'z')
{
   // pada ASCII, huruf a dimulai dari 97, maka kurangi sejauh a yaitu 97 ketika di-modulo
   // lalu ditambah sejauh a yaitu 97 agar yang tampil adalah huruf 
   // karena pada ASCII huruf kecil dimulai dari 97
   cipher = ((plain[i] + key - 'a') % 26) + 'a';
}

Perhatikan rumus yang dilabeli dengan warna kuning, kita dapat melakukan perhitungan menggunakan huruf karena sejatinya huruf merupakan representasi dari angka. Mengapa perlu dikurang A dan ditambah lagi dengan A pada perhitungan diatas? Misalnya plaintext-nya adalah A, dan key-nya 3, maka ketika dihitung cipher = (65 + 3) % 26 = 16. Maka menurut tabel ASCII yang tampil bukan huruf D melainkan DLE(Data Link Escape) yang direpresentasikan oleh angka 16. Maka dari itu perlu dikurang A dan ditambah lagi dengan A, perhitungannya akan menjadi cipher = ((65 + 3 - 65) % 26) + 65 = 68, sehingga yang tampil menurut tabel ASCII adalah huruf D. Begitu juga pada perkondisian yang mengenkripsi huruf kecil.

Program yang menggunakan teknik Caesar Cipher dengan nama caesar.c
#include <stdio.h>
#include <string.h> // agar dapat menggunakan strlen()

int main()
{
    // input kunci
    int key;
    printf("Key: ");
    scanf("%d", &key);

    // input plaintext
    char plain[77];
    printf("Plaintext: ");
    gets(plain); // get string, untuk menginput string

    // angka pada ciphertext di-inisialisasi 0
    int cipher = 0;

    // strlen(), fungsi yang menghitung panjang string
    // pengulangan untuk mengenkripsi huruf per huruf
    for (int i = 0; i < strlen(plain); i++)
    {
        cipher = plain[i];

        // jangan di-enkripsi jika huruf pada plaintext berupa spasi
        if (plain[i] == ' ')
        {
            cipher = ' ';
        }

        // perkondisian supaya hanya huruf-huruf pada alphabet yang terenkripsi
        // sesuai dengan kode pada tabel ASCII
        else if (plain[i] >= 'A' && plain[i] <= 'Z')
        {
            // pada ASCII, huruf A dimulai dari 65, maka kurangi sejauh A yaitu 65 ketika di-modulo
            // lalu ditambah sejauh A yaitu 65 agar yang tampil adalah huruf 
            // karena pada ASCII huruf kapital dimulai dari 65
            cipher = ((plain[i] + key - 'A') % 26) + 'A';
        }
        else if (plain[i] >= 'a' && plain[i] <= 'z')
        {
            // pada ASCII, huruf a dimulai dari 97, maka kurangi sejauh a yaitu 97 ketika di-modulo
            // lalu ditambah sejauh a yaitu 97 agar yang tampil adalah huruf 
            // karena pada ASCII huruf kecil dimulai dari 97
            cipher = ((plain[i] + key - 'a') % 26) + 'a';
        }

        // tampilkan huruf yang telah digeser(di-enkripsi)
        // nilai bertipe data integer dapat ditampilkan menggunakan %c 
        // agar yang tampil adalah karakter sesuai tabel ASCII
        printf("%c", cipher);
    }

    printf("\n");

    return 0;
}

Output program ketika di-run
root@kali: ./caesar
Key: 3
Plaintext: awasi asterix dan temannya obelix
Ciphertext: dzdvl dvwhula gdq whpdqqbd rehola
root@kali: ./caesar
Key: 14
Plaintext: Temui aku di kolong jembatan pukul sembilan malam
Ciphertext: Hsaiw oyi rw yczcbu xsapohob diyiz gsapwzob aozoa
root@kali:

Teknik lain yang lebih kuat adalah Vigenere Cipher. Teknik ini kurang lebih sama dari Caesar Cipher namun yang menjadi kunci adalah string.

Misalnya kita memiliki plaintext "I like you" dan kunci "panda", ketika di-enkripsi huruf per huruf, maka huruf I pada plaintext akan di-enkripsi oleh huruf p pada kunci. Lalu huruf l pada plaintext akan di-enkripsi dengan huruf a pada kunci, dan seterusnya. Jika kunci telah sampai ke huruf terakhir, maka kembali ke awal.

Perlu diingat kembali bahwa huruf direpresentasikan oleh angka. Jadi, misalkan kita ingin menggeser huruf sebanyak B maka akan tergeser sejauh 66, karena kunci yang kita gunakan adalah huruf. Maka dari itu kurangi sebesar A, yaitu 65, sehingga akan bergeser sejauh 1.

Program yang menggunakan teknik Vigenere Cipher dengan nama vigenere.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    // input kunci
    char key_str[25];
    printf("Enter key: ");
    gets(key_str);

    // input plaintext
    char plain[77];
    printf("Enter plain text: ");
    gets(plain);

    // inisialisasi cipher sama dengan 0
    int cipher = 0;
    
    // variabel untuk menandakan indeks pada kunci
    int j = 0;

    printf("Cipher text: ");
    for (int i = 0; i < strlen(plain); i++)
    {
        // indeks (huruf ke-i) pada kunci yang digunakan untuk mengenkripsi plainteks
        int index = j % strlen(key_str);
        int key = key_str[index];

        // karena huruf alphabet berjumlah 26, maka kunci dikurangi dengan 65(huruf kapital)
        if (key_str[index] >= 'A' && key_str[index] <= 'Z')
        {
            key = key - 'A';
        }
        
        // karena huruf alphabet berjumlah 26, maka kunci dikurangi dengan 97(huruf kecil)
        else if (key_str[index] >= 'a' && key_str[index] <= 'z')
        {
            key = key - 'a';
        }

        // jangan pindah ke huruf selanjutnya pada key jika huruf pada plaintext adalah selain alphabet
        if ((plain[i] >= 'A' && plain[i] <= 'Z') || (plain[i] >= 'a' && plain[i] <= 'z'))
        {
            j++;
        }

        cipher = plain[i];
        
        // jangan di-enkripsi jika huruf pada plaintext adalah spasi
        if (plain[i] == ' ')
        {
            cipher = ' ';
        }
        
        // jangan di-enkripsi jika huruf pada plaintext adalah selain huruf alphabet
        else if (plain[i] < 'A' || (plain[i] > 'Z' && plain[i] < 'a') || plain[i] > 'z')
        {
            cipher = plain[i];
        }
        
        // perkondisian untuk mengenkripsi huruf alphabet
        else if (plain[i] >= 'A' && plain[i] <= 'Z')
        {
            cipher = ((plain[i] + key - 'A') % 26) + 'A';
        }
        else if (plain[i] >= 'a' && plain[i] <= 'z')
        {
            cipher = ((plain[i] + key - 'a') % 26) + 'a';
        }

        printf("%c", cipher);
    }

    printf("\n");

    return 0;
}

Output program ketika di-run
root@kali: ./vigenere
Enter key: panda
Enter plain text: I like you
Cipher text: X lvne noh
root@kali: ./vigenere
Enter key: senpai
Enter plain text: notice me, senpai!
Cipher text: fsgxcm ei, ftnxsm!
root@kali:

Publish Aplikasi ke Windows Store

 
Aplikasi yang kita buat tentu saja akan digunakan oleh orang lain. Tahap pembuatan aplikasi yang final adalah mempublikasikan aplikasi kita. Sebelum mempublikasikan aplikasi ke Windows Store, kita harus mengecek apakah aplikasi kita telah memenuhi syarat dan layak untuk dipublikasikan di Windows Store. Tahap-tahap dalam mempublikasikan aplikasi ke Windows Store yaitu

1. Reserve App Name
- Pada halaman Dashboard di akun Windows Store, pilih Submit an app
- Kemudian pilih App name. Sebuah aplikasi tentu memiliki nama yang unik dari aplikasi yang lain sehingga pengguna dapat tertarik pada aplikasi yang kita buat. Pada textbox App name, isi nama aplikasi sesuai yang kamu inginkan lalu klik Reserve app name. Perlu diperhatikan bahwa nama aplikasi yang kita isi harus sesuai dengan nama aplikasi yang ada pada Display Name di Package.appxmanifest.

2. Associate App
-Buka project aplikasi kita dengan Visual Studio.
-Pada Solution Explorer, klik kanan pada file project yang ingin di-associate lalu pilih Store -> Associate App with the Store
- Klik next, lalu jika diminta untuk Sign-In, gunakan akun Windows Store untuk Sign-In.
- Setelah itu, klik nama aplikasi yang telah di Reserve sebelumnya, kemudian klik Associate.

3. Certification and Create App Packages
- Pertama, pada Solution Configuration pilih Release
- Kemudian pada Solution Explorer, klik kanan pada file project lalu pilih Store -> Create App Packages.
- Pada pertanyaan "Do you want to build packages to upload to the Windows Store?" pilih Yes. Lalu Sign-In menggunakan akun Windows Store.
- Pilih direktori mana file Package kita akan disimpan pada Output Location. Secara default file akan disimpan pada folder AppPackages pada direktori Project kita. Lalu isi kotak Version, isi 1.1.0.0 jika kita membuat Package untuk pertama kali, dan pada pilihan Architecture centang pada Neutral lalu klik Create.
- Visual Studio akan rebuild project kita. Jika berhasil di-Create, maka akan muncul tampilan seperti ini. Pada target device pilih local machine, lalu klik Launch Windows App Certification Kit.
- Jika terdapat pemberitahuan yang meminta untuk melakukan update Windows App Certification Kit(WACK), pastikan untuk melakukan hal tersebut terlebih dahulu karena akan memengaruhi proses sertifikasi dan menyebabkan aplikasi kita tidak lolos sertifikasi.
- Setelah itu WACK akan memvalidasi aplikasi kita. Komputer akan menginstall, menjalankan, dan menutup aplikasi kita secara otomatis pada tahap ini. Jadi disarankan untuk tidak melakukan interaksi apapun sampai proses ini selesai.
- Jika lolos proses sertifikasi, maka akan ada tulisan PASSED pada Overall Result. Jika tidak, maka Click here to view the results untuk melihat dimana letak kesalahan aplikasi kita yang menyebabkan tidak lolos sertifikasi.

4. Upload Package to Windows Store
- Kembali lagi ke halaman Dashboard pada akun Windows Store
- Klik Selling Details. Disini kamu menentukan harga jual dari aplikasi yang kamu buat. Pada Price Tier pilih Free.
- Centang seluruh negara, kecuali China, South Africa, Korea, dan Brazil.
- Pilih opsi Release my app as soon as it passes certification untuk Release Date, kemudian klik Save.
- Setelah itu, klik pada bagian Services. Untuk sementara abaikan dulu bagian ini dan langsung klik Save.
- Untuk bagian Age rating and rating certificates, pilih umur yang sesuai dengan target audiens dari aplikasi yang kamu buat.
- Untuk bagian Cryptography, pilih opsi No untuk pertanyaan "Does this app call, support, contain, or use cryptography or encryption?"
- Centang pertanyaan "I confirm that this app is widely distributable to all jurisdictions without government review, approval, license or technology-based restriction".
- Setelah itu pilih pada bagian Packages, dimana kita dapat mengupload file Package yang telah kita sertifikasi tadi.
- Kemudian isi informasi aplikasi kamu pada bagian Description. Sertakan 1 buah screenshot dengan ukuran yang tertera dan ekstensi .png.

Jika seluruh bagian yang diisi tadi sudah bertanda cek, klik tombol Submit for Certification.
Setelah ini, aplikasi anda akan diuji QA pada Windows Store. Jika telah ter-publish, maka aplikasi kita telah terdaftar pada Windows Store dan kita akan diberi link dimana aplikasi kita dapat di-download.


Referensi:

Implementasi Fitur-Fitur Aplikasi "Guess The Code" - Part 2


6. Button Visibility
Ketika kita menjawab dengan jawaban yang benar, akan muncul tombol Next Level >. Kita membuat sebuah button tidak kelihatan dengan membuat Visibility-nya menjadi Collapsed seperti ini

<Button x:Name="NextBtn" Content="Click" Visibility="Collapsed"/>
Agar buttonnya muncul saat kita klik button Submit, pada event handler button Submit tersebut kita membuat Visibility dari tombol NextBtn menjadi Visible dengan baris kode seperti ini

NextBtn.Visibility = Visibility.Visible;

7. Data Binding
Konsep Data Binding digunakan untuk membuat suatu fitur aplikasi bersifat dinamis dengan menulis kode yang lebih sedikit dari pada membuat fitur yang bersifat statis. Pada aplikasi "Guess The Code", akan muncul tanda benar/salah saat kita meng-submit jawaban

Namun tandanya akan berubah ketika jawaban yang kita masukkan benar

Biasanya kita menaruh gambar dengan memasukkan source gambar secara statis seperti ini.

<Image Source="Gambar.jpg"/>
Agar gambar tersebut bersifat dinamis, kita memakai data binding seperti contoh berikut ini

<Image Source="{Binding Text, 
                ElementName=y1, 
                Mode=OneWay, 
                UpdateSourceTrigger=PropertyChanged}" 
                Width="30"/>
Kita akan mem-binding sebuah text dari elemen dengan nama y1, maka kita akan membuat sebuah TextBlock dengan nama y1, tapi text ini tidak untuk ditampilkan. Jadi kita membuat Visibility pada TextBlock ini menjadi Collapsed

<TextBlock x:Name="y1" Visibility="Collapsed"/>
Gambar tersebut akan muncul/berubah ketika kita meng-submit jawaban kita, agar pada saat kita meng-klik Submit muncul gambar, pada event handler di button tersebut kita membuat text pada elemen y1 menjadi nama gambar yang kita inginkan. Misalnya pada aplikasi "Guess The Code", jika jawabannya benar, maka muncul tanda check. Namun jika jawaban salah, maka muncul tanda cross.
Jadi, kode pada event handler-nya seperi ini

if (stdio.Text == "<stdio.h>")
{
   y1.Text = "Assets/GreenCheck.JPG";
}
else
{
   y1.Text = "Assets/RedCross.JPG";
}
Jika jawaban yang kita submit adalah <stdio.h>, maka text pada y1 akan menjadi Assets/GreenCheck.JPG. Karena source gambar tadi kita binding dengan elemen y1, maka source gambar tersebut adalah text yang ada pada y1. Jadi kode imagenya saat aplikasi berjalan akan menjadi seperti ini

<Image Source="Assets/GreenCheck.JPG"/>