Implementasi Steganografi Hopping Spread Spectrum Ke Dalam File Video
Lampiran A-1 : Listing Program Main Form
Coding Main Form
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Drawing.Imaging;
System.IO;
System.Linq;
System.Text;
System.Threading;
System.Threading.Tasks;
System.Windows.Forms;
Microsoft.Office.Interop.Word;
App = Microsoft.Office.Interop.Word.Application;
AForge.Video.FFMPEG;
System.Diagnostics;
namespace Avi
{
public partial class MainForm : Form
{
Stopwatch stopWatch = new Stopwatch();
public enum SEED_State
{
Accept,
Reject
};
public MainForm()
{
InitializeComponent();
bw1.WorkerSupportsCancellation = true;
bw1.WorkerReportsProgress = true;
splashPanel.Hide();
brwEmbedVideo.Filter = "*.avi|*.avi";
brwEmbedText.Filter =
*.docx|*.docx|*.doc|*.doc|*.rtf|*.rtf|*.txt|*.txt";
saveEmbedVideo.DefaultExt = "*.avi|*.avi";
saveEmbedVideo.Filter = "*.avi|*.avi";
brwExtractVideo.Filter = "*.avi|*.avi";
}
VideoFileReader reader;
int frameCount = 0;
string embedText="", extractText="";
List oriBitmap, embedBitmap;
uint[] randomList;
uint SEED, newSEED;
private void btn_embvideo_Click(object sender, EventArgs e)
{
string fileEmbedVideo;
btn_embvideo.Enabled = false;
oriBitmap = new List();
A- 1
Universitas Sumatera Utara
if (brwEmbedVideo.ShowDialog() == DialogResult.OK)
{
frameCount = 0;
bw1.RunWorkerAsync();
fileEmbedVideo = brwEmbedVideo.FileName;
tb_embvideo.Text = fileEmbedVideo;
reader = new VideoFileReader();
reader.Open(fileEmbedVideo);
while (true)
{
using (var videoFrame = reader.ReadVideoFrame())
{
using (MemoryStream memory = new MemoryStream())
{
if (videoFrame == null)
break;
else
{
frameCount++;
videoFrame.Save(memory, ImageFormat.Bmp);
oriBitmap.Add(new Bitmap(videoFrame));
}
}
}
}
Thread.Sleep(100);
pb_embvideo.Image = new Bitmap(oriBitmap[0]);
}
else
{
bw1.CancelAsync();
btn_embvideo.Enabled = true;
}
Console.WriteLine("Framecount : "+frameCount);
}
private void btn_embtext_Click(object sender, EventArgs e)
{
embedText = "";
string fileEmbedText;
btn_embtext.Enabled = false;
if (brwEmbedText.ShowDialog() == DialogResult.OK)
{
bw1.RunWorkerAsync();
fileEmbedText = brwEmbedText.FileName;
App app = new App();
Document doc = app.Documents.Open(fileEmbedText);
foreach (Paragraph p in doc.Paragraphs)
embedText += p.Range.Text.Trim();
((_Document)doc).Close();
A-2
Universitas Sumatera Utara
((_Application)app).Quit();
rtb_teks.Text = embedText;
tb_embteks.Text = fileEmbedText;
randomList = new uint[embedText.Length];
tb_embperiode.Text = embedText.Length.ToString();
}
else
{
bw1.CancelAsync();
btn_embtext.Enabled = true;
}
}
private void btn_embembed_Click(object sender, EventArgs e)
{
List randomList = new List();
stopWatch.Reset();
btn_embembed.Enabled = false;
stopWatch.Start();
if (!(tb_embvideo.Text == "" || tb_embteks.Text == "" ||
tb_embseed.Text == ""))
{
bw1.RunWorkerAsync();
SEED_State seed_state = SEED_State.Reject;
embedBitmap = new List(oriBitmap);
SEED = uint.Parse(tb_embseed.Text);
newSEED = SEED;
LFSR.setSEED(SEED);
if (embedText.Length > 2) ^ (lfsr >> 6) ^ (lfsr >> 7))
& 1;
lfsr = (lfsr >> 1) | (bit = text.Length)
{
// start adding zeros to mark the end of the
text
state = State.Filling_With_Zeros;
}
else
{
// move to the next character and process again
charValue = text[charIndex++];
}
}
// check which pixel element has the turn to hide a bit
in its LSB
//
//
//
//
//
switch (pixelElementIndex % 3)
{
case 0:
{
if (state == State.Hiding)
{
the rightmost bit in the character will be (charValue % 2)
to put this value instead of the LSB of the pixel element
just add it to it
recall that the LSB of the pixel element had been cleared
before this operation
R += charValue % 2;
// removes the added rightmost bit of the character
// such that next time we can reach the next one
charValue /= 2;
}
} break;
case 1:
{
if (state == State.Hiding)
C-2
Universitas Sumatera Utara
{
G += charValue % 2;
charValue /= 2;
}
} break;
case 2:
{
if (state == State.Hiding)
{
B += charValue % 2;
charValue /= 2;
}
bmp.SetPixel(j, i, Color.FromArgb(R, G,
B));
} break;
}
pixelElementIndex++;
if (state == State.Filling_With_Zeros)
{
// increment the value of zeros until it is 8
zeros++;
}
}
}
}
return bmp;
}
public static string extractText(Bitmap bmp)
{
int colorUnitIndex = 0;
int charValue = 0;
// variable penyimpan hasil ekstraksi
string extractedText = String.Empty;
// membaca setiap kolom
for (int i = 0; i < bmp.Height; i++)
{
// membaca setiap kolom
for (int j = 0; j < bmp.Width; j++)
{
Color pixel = bmp.GetPixel(j, i);
// for each pixel, pass through its elements (RGB)
for (int n = 0; n < 3; n++)
{
switch (colorUnitIndex % 3)
{
case 0:
{
charValue = charValue * 2 + pixel.R % 2;
} break;
case 1:
C-3
Universitas Sumatera Utara
{
charValue = charValue * 2 + pixel.G % 2;
} break;
case 2:
{
charValue = charValue * 2 + pixel.B % 2;
} break;
}
colorUnitIndex++;
// if 8 bits has been added,
// then add the current character to the result text
if (colorUnitIndex % 8 == 0)
{
// reverse? of course, since each time the process
occurs
// on the right (for simplicity)
charValue = reverseBits(charValue);
// can only be 0 if it is the stop character (the 8
zeros)
if (charValue == 0)
{
return extractedText;
}
// convert the character value from int to char
char c = (char)charValue;
// add the current character to the result text
extractedText += c.ToString();
}
}
}
}
return extractedText;
}
public static int reverseBits(int n)
{
int result = 0;
for (int i = 0; i < 8; i++)
{
result = result * 2 + n % 2;
n /= 2;
}
return result;
}
}
}
C-4
Universitas Sumatera Utara
Lampiran D Angket
Apakah ada perbedaan antara kedua video tersebut?
No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Nama
Jawaban
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Keterangan
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
D-1
Universitas Sumatera Utara
DAFTAR RIWAYAT HIDUP
Data Pribadi
Nama
:
Ricky Steven
Tempat, tanggal Lahir :
Medan, 13 Maret 1993
Jenis Kelamin
:
Laki-Laki
Umur
:
23 tahun
Tinggi, berat badan
:
178cm , 75 kg
Agama
:
Buddha
Alamat
: Jalan Brig. Zein Hamid No 43A LK XI
Status
:
Belum Kawin
Telepon
:
083198808098
Email
:
rickysteven@ymail.com
Latarbelakang Pendidikan :
Formal
1997 – 2003
: Lulusan SD Sutomo 1 Medan
2003 – 2006
: Lulusan SMP Sutomo 1 Medan
2006 – 2011
: Lulusan SMA Sutomo 1 Medan
Non Formal
2002 – 2010
2011
: Bimbingan bahasa Inggris di Winfield
: Workshop 3D Animation Revolution with DreamArch
Animation
E-1
Universitas Sumatera Utara
2011
: Workshop Menggambar Manga by Mieko 2011.
2011
: Workshop Earn Money from Design Artechno
Festival
2011
: Workshop Networking by GONES Artechno Festival
2012
: PPO Basic Training of KMB USU
2012
: Workshop Linux Configuration (KSL USU).
2012
: Workshop Pintar Programming Teknonesia.
2012
: Information Technology Seminar : “Pemanfaatan
Teknologi Open Source sebagai Aplikasi dalam Dunia
Bisnis Global”.
2012
: Information Technology Seminar : “Kupas Tuntas
Blackberry, iOS & Android”.
2012
: Based Training Organization : “Personal Branding –
That’s You”. DJARUM foundation.
2012
: Based Training Organization : “Public Speaking and
Presentation Skill”. Tanoto Foundation.
2012
: Motivation Training : “Masa Orientasi IMILKOM
2012”. Graduate Study Program of Computing Science
2014
: Liason Officer Indonesia, Malaysia, Thailand
Gathering Triangle (IMT-GT)
2015
: Liasion Officer (LO) Kegiatan Forum Rektor Indonesia
XVII di Universitas Sumatera Utara
2016
: Volunteer dalam partisipasi Education Expo
Pengalaman Organisasi
2009 – 2011
2012 – 2013
: Anggota dari Programming Club Sutomo 1
: Anggota Divisi Khusus dari Keluarga Mahasiswa
Buddhis di Universitas Sumatera Utara
E-2
Universitas Sumatera Utara
2013 – 2014
2013 – 2014
2013 – 2014
2013 – 2014
: Anggota Divisi Kewirausahaan dari Keluarga
Mahasiswa Buddhis di Universitas Sumatera Utara
: Anggota PEMA Fasilkom-TI divisi kerohanian agama
Buddha
: Ketua Komisi Pemilihan Umum (KPU) Imilkom
: Ketua Tanoto Scholars Association Medan
Penghargaan
2012
2013
: Penghargaan sebagai Juara 1 Programming pada
“Imilkom Contest 2012”
: Penghargaan sebagai “Best Tanoto Association” seIndonesia ketika menjabat sebagai ketua
Pengalaman Kerja
2009-2012
: Bekerja pada perusahaan pengolahan biji kemiri di
Namorambe
Rincian Pekerjaan:
Melakukan pembagian perkerjaan kepada pekerja untuk mencapai
target produksi
Pengoperasian mesin pengaduk, mesin penggiling dan mesin penjahit
Pengoperasian forklift
Melakukan pembagian upah dan absensi terhadap pegawai secara
manual untuk lebih dari 50 pegawai
Pendapatan 3 juta
Praktek Kerja Lapangan di di Kantor Dinas Pendapatan Negara Medan
Periode
: Agustus 2014 – Oktober 2014
Tujuan
: Mata Kuliah Wajib
Posisi
: Konsultan IT dan Programmer
Rincian Pekerjaan:
Mengorganisir data 5 tahun dan lebih dan menyusunnya sehingga
dapat di direkapitulasi.
Membangun sebuah program dengan menggunakan Microsoft Excel
dan Makro untuk menangani tunggakan pajak di seluruh Kabupaten
Kota Medan
Pendapatan : 0
E-3
Universitas Sumatera Utara
2013-2017
: Bekerja di Scholars Hub sebagai pengajar dan pernah menjadi
kepala divisi
Rincian Pekerjaan:
Melakukan pengajaran terhadap pelajaran Mate, Fisika dan Kimia untuk
tingkat IGCSE, O Level dan A level untuk kurikulum internasional dan
tingkat smp dan sma untuk tingkat nasional
Melakukan pelatihan terhadap guru baru
Melakukan evaluasi terhadap siswa
Pendapatan : 5 juta
Kemampuan
Kemampuan Komputer
Office
1. Microsoft Word
2. Microsoft Excel
3. Microsoft Power Point
4. Microsoft Access
Design & Video
1. Adobe Photoshop
2. Adobe Dreamweaver
3. Adobe Ilustrator
Pemrograman
1.
2.
3.
4.
5.
6.
Visual Studio
Eclipse
Visual Basic
Unity
MatLab
FoxPro
Medan, 30 Januari 2017
Hormat saya,
Ricky Steven
E-4
Universitas Sumatera Utara
Coding Main Form
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Drawing.Imaging;
System.IO;
System.Linq;
System.Text;
System.Threading;
System.Threading.Tasks;
System.Windows.Forms;
Microsoft.Office.Interop.Word;
App = Microsoft.Office.Interop.Word.Application;
AForge.Video.FFMPEG;
System.Diagnostics;
namespace Avi
{
public partial class MainForm : Form
{
Stopwatch stopWatch = new Stopwatch();
public enum SEED_State
{
Accept,
Reject
};
public MainForm()
{
InitializeComponent();
bw1.WorkerSupportsCancellation = true;
bw1.WorkerReportsProgress = true;
splashPanel.Hide();
brwEmbedVideo.Filter = "*.avi|*.avi";
brwEmbedText.Filter =
*.docx|*.docx|*.doc|*.doc|*.rtf|*.rtf|*.txt|*.txt";
saveEmbedVideo.DefaultExt = "*.avi|*.avi";
saveEmbedVideo.Filter = "*.avi|*.avi";
brwExtractVideo.Filter = "*.avi|*.avi";
}
VideoFileReader reader;
int frameCount = 0;
string embedText="", extractText="";
List oriBitmap, embedBitmap;
uint[] randomList;
uint SEED, newSEED;
private void btn_embvideo_Click(object sender, EventArgs e)
{
string fileEmbedVideo;
btn_embvideo.Enabled = false;
oriBitmap = new List();
A- 1
Universitas Sumatera Utara
if (brwEmbedVideo.ShowDialog() == DialogResult.OK)
{
frameCount = 0;
bw1.RunWorkerAsync();
fileEmbedVideo = brwEmbedVideo.FileName;
tb_embvideo.Text = fileEmbedVideo;
reader = new VideoFileReader();
reader.Open(fileEmbedVideo);
while (true)
{
using (var videoFrame = reader.ReadVideoFrame())
{
using (MemoryStream memory = new MemoryStream())
{
if (videoFrame == null)
break;
else
{
frameCount++;
videoFrame.Save(memory, ImageFormat.Bmp);
oriBitmap.Add(new Bitmap(videoFrame));
}
}
}
}
Thread.Sleep(100);
pb_embvideo.Image = new Bitmap(oriBitmap[0]);
}
else
{
bw1.CancelAsync();
btn_embvideo.Enabled = true;
}
Console.WriteLine("Framecount : "+frameCount);
}
private void btn_embtext_Click(object sender, EventArgs e)
{
embedText = "";
string fileEmbedText;
btn_embtext.Enabled = false;
if (brwEmbedText.ShowDialog() == DialogResult.OK)
{
bw1.RunWorkerAsync();
fileEmbedText = brwEmbedText.FileName;
App app = new App();
Document doc = app.Documents.Open(fileEmbedText);
foreach (Paragraph p in doc.Paragraphs)
embedText += p.Range.Text.Trim();
((_Document)doc).Close();
A-2
Universitas Sumatera Utara
((_Application)app).Quit();
rtb_teks.Text = embedText;
tb_embteks.Text = fileEmbedText;
randomList = new uint[embedText.Length];
tb_embperiode.Text = embedText.Length.ToString();
}
else
{
bw1.CancelAsync();
btn_embtext.Enabled = true;
}
}
private void btn_embembed_Click(object sender, EventArgs e)
{
List randomList = new List();
stopWatch.Reset();
btn_embembed.Enabled = false;
stopWatch.Start();
if (!(tb_embvideo.Text == "" || tb_embteks.Text == "" ||
tb_embseed.Text == ""))
{
bw1.RunWorkerAsync();
SEED_State seed_state = SEED_State.Reject;
embedBitmap = new List(oriBitmap);
SEED = uint.Parse(tb_embseed.Text);
newSEED = SEED;
LFSR.setSEED(SEED);
if (embedText.Length > 2) ^ (lfsr >> 6) ^ (lfsr >> 7))
& 1;
lfsr = (lfsr >> 1) | (bit = text.Length)
{
// start adding zeros to mark the end of the
text
state = State.Filling_With_Zeros;
}
else
{
// move to the next character and process again
charValue = text[charIndex++];
}
}
// check which pixel element has the turn to hide a bit
in its LSB
//
//
//
//
//
switch (pixelElementIndex % 3)
{
case 0:
{
if (state == State.Hiding)
{
the rightmost bit in the character will be (charValue % 2)
to put this value instead of the LSB of the pixel element
just add it to it
recall that the LSB of the pixel element had been cleared
before this operation
R += charValue % 2;
// removes the added rightmost bit of the character
// such that next time we can reach the next one
charValue /= 2;
}
} break;
case 1:
{
if (state == State.Hiding)
C-2
Universitas Sumatera Utara
{
G += charValue % 2;
charValue /= 2;
}
} break;
case 2:
{
if (state == State.Hiding)
{
B += charValue % 2;
charValue /= 2;
}
bmp.SetPixel(j, i, Color.FromArgb(R, G,
B));
} break;
}
pixelElementIndex++;
if (state == State.Filling_With_Zeros)
{
// increment the value of zeros until it is 8
zeros++;
}
}
}
}
return bmp;
}
public static string extractText(Bitmap bmp)
{
int colorUnitIndex = 0;
int charValue = 0;
// variable penyimpan hasil ekstraksi
string extractedText = String.Empty;
// membaca setiap kolom
for (int i = 0; i < bmp.Height; i++)
{
// membaca setiap kolom
for (int j = 0; j < bmp.Width; j++)
{
Color pixel = bmp.GetPixel(j, i);
// for each pixel, pass through its elements (RGB)
for (int n = 0; n < 3; n++)
{
switch (colorUnitIndex % 3)
{
case 0:
{
charValue = charValue * 2 + pixel.R % 2;
} break;
case 1:
C-3
Universitas Sumatera Utara
{
charValue = charValue * 2 + pixel.G % 2;
} break;
case 2:
{
charValue = charValue * 2 + pixel.B % 2;
} break;
}
colorUnitIndex++;
// if 8 bits has been added,
// then add the current character to the result text
if (colorUnitIndex % 8 == 0)
{
// reverse? of course, since each time the process
occurs
// on the right (for simplicity)
charValue = reverseBits(charValue);
// can only be 0 if it is the stop character (the 8
zeros)
if (charValue == 0)
{
return extractedText;
}
// convert the character value from int to char
char c = (char)charValue;
// add the current character to the result text
extractedText += c.ToString();
}
}
}
}
return extractedText;
}
public static int reverseBits(int n)
{
int result = 0;
for (int i = 0; i < 8; i++)
{
result = result * 2 + n % 2;
n /= 2;
}
return result;
}
}
}
C-4
Universitas Sumatera Utara
Lampiran D Angket
Apakah ada perbedaan antara kedua video tersebut?
No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Nama
Jawaban
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Keterangan
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
D-1
Universitas Sumatera Utara
DAFTAR RIWAYAT HIDUP
Data Pribadi
Nama
:
Ricky Steven
Tempat, tanggal Lahir :
Medan, 13 Maret 1993
Jenis Kelamin
:
Laki-Laki
Umur
:
23 tahun
Tinggi, berat badan
:
178cm , 75 kg
Agama
:
Buddha
Alamat
: Jalan Brig. Zein Hamid No 43A LK XI
Status
:
Belum Kawin
Telepon
:
083198808098
:
rickysteven@ymail.com
Latarbelakang Pendidikan :
Formal
1997 – 2003
: Lulusan SD Sutomo 1 Medan
2003 – 2006
: Lulusan SMP Sutomo 1 Medan
2006 – 2011
: Lulusan SMA Sutomo 1 Medan
Non Formal
2002 – 2010
2011
: Bimbingan bahasa Inggris di Winfield
: Workshop 3D Animation Revolution with DreamArch
Animation
E-1
Universitas Sumatera Utara
2011
: Workshop Menggambar Manga by Mieko 2011.
2011
: Workshop Earn Money from Design Artechno
Festival
2011
: Workshop Networking by GONES Artechno Festival
2012
: PPO Basic Training of KMB USU
2012
: Workshop Linux Configuration (KSL USU).
2012
: Workshop Pintar Programming Teknonesia.
2012
: Information Technology Seminar : “Pemanfaatan
Teknologi Open Source sebagai Aplikasi dalam Dunia
Bisnis Global”.
2012
: Information Technology Seminar : “Kupas Tuntas
Blackberry, iOS & Android”.
2012
: Based Training Organization : “Personal Branding –
That’s You”. DJARUM foundation.
2012
: Based Training Organization : “Public Speaking and
Presentation Skill”. Tanoto Foundation.
2012
: Motivation Training : “Masa Orientasi IMILKOM
2012”. Graduate Study Program of Computing Science
2014
: Liason Officer Indonesia, Malaysia, Thailand
Gathering Triangle (IMT-GT)
2015
: Liasion Officer (LO) Kegiatan Forum Rektor Indonesia
XVII di Universitas Sumatera Utara
2016
: Volunteer dalam partisipasi Education Expo
Pengalaman Organisasi
2009 – 2011
2012 – 2013
: Anggota dari Programming Club Sutomo 1
: Anggota Divisi Khusus dari Keluarga Mahasiswa
Buddhis di Universitas Sumatera Utara
E-2
Universitas Sumatera Utara
2013 – 2014
2013 – 2014
2013 – 2014
2013 – 2014
: Anggota Divisi Kewirausahaan dari Keluarga
Mahasiswa Buddhis di Universitas Sumatera Utara
: Anggota PEMA Fasilkom-TI divisi kerohanian agama
Buddha
: Ketua Komisi Pemilihan Umum (KPU) Imilkom
: Ketua Tanoto Scholars Association Medan
Penghargaan
2012
2013
: Penghargaan sebagai Juara 1 Programming pada
“Imilkom Contest 2012”
: Penghargaan sebagai “Best Tanoto Association” seIndonesia ketika menjabat sebagai ketua
Pengalaman Kerja
2009-2012
: Bekerja pada perusahaan pengolahan biji kemiri di
Namorambe
Rincian Pekerjaan:
Melakukan pembagian perkerjaan kepada pekerja untuk mencapai
target produksi
Pengoperasian mesin pengaduk, mesin penggiling dan mesin penjahit
Pengoperasian forklift
Melakukan pembagian upah dan absensi terhadap pegawai secara
manual untuk lebih dari 50 pegawai
Pendapatan 3 juta
Praktek Kerja Lapangan di di Kantor Dinas Pendapatan Negara Medan
Periode
: Agustus 2014 – Oktober 2014
Tujuan
: Mata Kuliah Wajib
Posisi
: Konsultan IT dan Programmer
Rincian Pekerjaan:
Mengorganisir data 5 tahun dan lebih dan menyusunnya sehingga
dapat di direkapitulasi.
Membangun sebuah program dengan menggunakan Microsoft Excel
dan Makro untuk menangani tunggakan pajak di seluruh Kabupaten
Kota Medan
Pendapatan : 0
E-3
Universitas Sumatera Utara
2013-2017
: Bekerja di Scholars Hub sebagai pengajar dan pernah menjadi
kepala divisi
Rincian Pekerjaan:
Melakukan pengajaran terhadap pelajaran Mate, Fisika dan Kimia untuk
tingkat IGCSE, O Level dan A level untuk kurikulum internasional dan
tingkat smp dan sma untuk tingkat nasional
Melakukan pelatihan terhadap guru baru
Melakukan evaluasi terhadap siswa
Pendapatan : 5 juta
Kemampuan
Kemampuan Komputer
Office
1. Microsoft Word
2. Microsoft Excel
3. Microsoft Power Point
4. Microsoft Access
Design & Video
1. Adobe Photoshop
2. Adobe Dreamweaver
3. Adobe Ilustrator
Pemrograman
1.
2.
3.
4.
5.
6.
Visual Studio
Eclipse
Visual Basic
Unity
MatLab
FoxPro
Medan, 30 Januari 2017
Hormat saya,
Ricky Steven
E-4
Universitas Sumatera Utara