Monday, June 24, 2019

Cara shrink database file SQL Server

Oke, karena sering dapet keluhan terkait disk server yang membengkak, banyak cara agar size nya bisa berkurang. Salah satu nya nge shrink database file nya SQL Server. 

Tanpa basa - basi lagi langsung saja kita terjun ke tata cara nya :

1. Cek size dari database file yang ada
select name as logical_name, (size*8)/1024 sizeMB from sys.master_files 

2. Shrink file database nya!
USE [Nama_DB]

GO
ALTER DATABASE [Nama_DB]

SET RECOVERY SIMPLE WITH NO_WAIT;

GO

DBCC SHRINKFILE('Nama_file' , 1);  --Nama_file bisa di dapat dari hasil query sebelumnya. 

GO

ALTER DATABASE [Nama_DB]

SET RECOVERY FULL WITH NO_WAIT;

GO


Done...

Catatan : di tulisan kali ini saya hanya membahas cara shrink nya saja, terkait efek samping, kegunaan, pengertian shrink itu sendiri bisa di cari di google. Atau mungkin saya bahas di postingan berbeda (mungkin, lain waktu, entah kapan). Untuk cari aman, biasanya saya cuman melakukan shrink ke file - file 'Log' nya aja,  karena belum tau efek samping nya. 

silahkan tinggalkan komentar, CMIIW jika ada yang kurang tepat dari postingan ini. 

Selamat bekerja ...
Share:

Friday, June 7, 2019

Entity Framework vs Dapper siapa yang lebih enak?

Pada saat membuat aplikasi menggunakan .NET terdapat beberapa pertimbagan ORM mana yang mau di pakai. Apakah ORM yang cepat dan efisien tapi minim fitur? atau ORM yang dengan kecepatan sedikit lebih lambat tapi memiliki fitur lengkap? hmmm ...

Dalam artikel ini saya akan membandingkan dua ORM yang biasa digunakan di dalam pengembangan apliaksi menggunakan .NET yaitu Dapper dan Entity Framework.

Sebelum kita mulai berikut pengertian dari ORM. Secara sederhana ORM (Object Relational Mapping) adalah sebuah layer di dalam pemrograman yang menjembatani/ memetakan database dengan object di dalam aplikasi.


Oke kita mulai perbandingan antara EF dengan Dapper

1. Entity Framework

Entity Framework adalah framework buatan microsoft. EF memberikan kemudahan bagi developer seperti men generate table dari class yang dibuat, men generate fungsi CRUD dan lain lain.

Berikut kelebihan dan kekurangan dari EF.

Kelebihan

  • Memberikan fitur generate code secara otomatis
  • Memberikan fitur desain secara visual model dan mapping object
  • Support LINQ (bahasa untuk query query an bikinan microsoft juga)
  • Grrratis (sudah include untuk versi .NET 3.5 SP1 keatas)
Kekurangan
  • Keterbatasan modifikasi, karena code dan query sudah di generate
  • Jika ada perubahan skema di dalam database, skema di EF juga harus di update
  • Kurang cocok untuk domain model/ aplikasi yang besar
  • Lazy Loading (silahkan di gugel)
2. Dapper

Dapper adalah ORM yang dikembangkan secara open source. Jika di kategorikan, dapper masuk kedalam kategori Micro ORM. Micro ORM adalah ORM versi lite dengan versi dasar seperlunya yang berorientasi pada performa. Dapper memiliki julukan "King Of Micro ORM" dengan performa yang dapat diandalkan. 

Berikut kelebihan dan kekurangan dari Dapper 

Kelebihan 
  • Kemudahan merubah hasil query menjadi object
  • Cepat dan efisien
  • Kemudahan eksekusi query
  • Grrratis (Open source)
Kekurangan
  • Tidak men generate class model ( harus bikin sendiri )
  • Tidak men generate query ( harus bikin sendiri )
  • Tidak dapat menelusuri object dan perubahan nya ( salah satu fitur full ORM )

Kesimpulan
Dari pemaparan di atas EF dan Dapper memiliki tempat nya masing - masing tergantung dari kepentingan dan keperluan dari developer. Entah itu EF dengan kecepatan development nya yang memberikan kemudahan bagi developer dengan men generate ini dan itu? atau Dapper dengan kecepatan query nya yang dapat diandalkan tapi beberapa bagian harus bikin sendiri? It's up to our need sebagai developer.

Namun preferensi pribadi saya, saya lebih memilih dapper dengan performa query nya meskipun dalam beberapa kasus Full ORM bisa lebih cepat karena ada fitur cache di dalam nya, namun hal itu hanya berlaku untuk pemanggilan objek yang sama saja. Kekurangan nya yang tidak memberikan fitur "Generate" justru menurut saya merupakan kelebihan dimana kebebasan modifikasi ada di tangan kita sebagai developer. Bagaimana menurut anda? manakah yang lebih gurih? silahkan tinggalkan komentar ... 


Share:

Monday, March 25, 2019

Hal Dasar Yang Perlu Diketahui dalam React JS

  1. Component/ Functional component
Component adalah method/ perilaku yang merepresentasikan bagian dari web misal textbox, label, radiobutton, etc. React di tulis di dalam tag script denga type "text/babel". Berikut contoh penulisan component :

<script type="text/babel">
function OurFirstComponent() {
return (
// Code that represents the UI element goes here
);
}
</script>

atau dapat di tulis juga seperti ini

const OurFirstComponent = () => {
return (
// Stuff to make this component goes here
);
}

  1. JSX
Selain menggunakan HTML Rect juga dapat menggunakan JSX. JSX merupakan script HTML yang di tuliskan di dalam script javascript, berikut contoh nya : 

<script type="text/babel">
function OurFirstComponent() {
return (
<h1>Hello, I am a React Component!</h1>
);
}
</script>

Note : karena "class" merupakan reserved word di javascript jadi kita harus mengganti atribut tag "class" html menjadi ClassName di JSX.

  1. ReactDOM
ReactDOM merupakan bagian dari react JS yang bertugas untuk melakukan render JSX ke halam HTML. berikut contoh nya : 
<script type="text/babel">
function OurFirstComponent() {
return (
<h1>Hello, I am a React Component!</h1>
);
}
const placeWeWantToPutComponent = document.getElementById('hook'); //hook adalah id dari tag
ReactDOM.render(OurFirstComponent(), placeWeWantToPutComponent);
</script>

Atau kita dapat melakukan nya seperti ini : 

ReactDOM.render(<OurFirstComponent />, placeWeWantToPutComponent);

  1. Component di dalam Component
Kita dapat memanggil component di dalam component, contoh : 
<script type="text/babel">
function OurFirstComponent() {
return (
<h1>I am the child!</h1>
);
}
function Container() {
return (
<div>
<h1>I am the parent!</h1>
<OurFirstComponent />
</div>
);
}
const placeWeWantToPutComponent = document.getElementById('hook');
ReactDOM.render(<Container />, placeWeWantToPutComponent);
</script>

  1. Class Component
Jika sebelum nya component bisa di katakan sebagai method/function, React menyediakan penggunaan class di dalam javascript sebagai Component, yang di namakan Class Component. Berikut contoh penggunaan nya :

class Container extends React.Component {
render() {
return (
<div>
<h1>I am the parent!</h1>
<OurFirstComponent />
</div>
);
}
}
const placeWeWantToPutComponent = document.getElementById('hook');
ReactDOM.render(<Container />, placeWeWantToPutComponent);

Class component harus memiliki function render() untuk mengembalikan nilai JSX yang ada di dalam nya. Sama seperti Component/ Functional Component, Class Component dapat di panggil menggunakan notasi seperti ini : <SebuahClassComponent /> 

Note ; Jika masih isa pakai functional component usahakan jangan pakai class component karena agak sulit dibaca (kata author nya). 

  1. Javascript di dalam JSX
Berikut cara memanggil javascript di dalam JSX : 

class Container extends React.Component {
render() {
const greeting = 'I am a string!';
return (
<div>
<h1>{ greeting }</h1>
<OurFirstComponent />
</div>
);
}
}

Contoh lain nya : 

class Container extends React.Component {
render() {
const addNumbers = (num1, num2) => {
return num1 + num2;
};
return (
<div>
<h1>The sum is: { addNumbers(1, 2) }</h1>
<OurFirstComponent />
</div>
);
}
}

  1. State 
Class Component dapat menyimpan informasi tentang informasi yang sedang terjadi, informasi tersebut di sebut dengan state. Berikut contoh penggunaan nya : 

class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
render() {
return (
);
}
}

dari code di atas state di isi object dengan key isMusicPlaying dan value false. 

Sifat pendefinisian constructor nya bersifat baku, harus seperti itu :  
constructor(props) {
super(props);
}

Note : props adalah informasi yang di bagikan dari parent ke child.

  1. Event Handler
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick(event) {
if (event.state.isMusicPlaying) {
event.setState({ isMusicPlaying: false });
} else {
event.setState({ isMusicPlaying: true });
}
};
render() {
let status = this.state.isMusicPlaying
? 'Playing :)'
: 'Not playing :(';
return (
<div>
<h1 onClick={this.handleClick.bind(this)}>{ status }</h1>
</div>
);
}
}

Dari code di atas, pada saat pertama kali dio render(), program akan mengecek apakah state true atau false. Jika true maka "Playing" jika false maka "Not Playing". 

Selanjutnya di dalam bagian JSX, pada tag h1 di tambahkan event listener javascript "onClick". event tersebut diisi dengan method handleClick yang akan mengeksekusi sesuatu jika tag h1 di click. 

Note : sebenar nya di dalam method handleClick parameter event bisa di ganti pakai this aja, jadi ga usah pakai parameter.

  1. Hubungan komunikasi antar Component
Berikut contoh hubungan antara class component dengan component (function) diluar class tersebut : 

class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick() {
if (this.state.isMusicPlaying) {
this.setState({ isMusicPlaying: false });
} else {
this.setState({ isMusicPlaying: true });
}
};
render() {
return (
<div>
<PlayButton isMusicPlaying={this.state.isMusicPlaying} />
</div>
);
}
}

berikut isi dari function PlayButton
function PlayButton(props) {
const className = props.isMusicPlaying ? 'play active' : 'play';
return <a href="#" title="Play video" className={className} />;
}

function PlayButton menerima object yang di passing dari class Containe dimana function PlayButton di panggil.

Selain mempassing informasi, kita juga bisa mempasing function seperti contoh sebagai berikut : 
function PlayButton(props) {
const className = props.isMusicPlaying ? 'play active' : 'play';
return <a onClick={props.onClick} href="#" title="Play video" className={className} />;
}
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick() {
if (this.state.isMusicPlaying) {
this.setState({ isMusicPlaying: false });
} else {
this.setState({ isMusicPlaying: true });
}
};
render() {
return (
<div>
<PlayButton
onClick={this.handleClick.bind(this)}
isMusicPlaying={this.state.isMusicPlaying}
/>
</div>
);
}
}



dari code di atas, dapat kita lihat di bagian render() dimana Component PlayButton di panggil, di beri dua parameter yaitu onClick yang berupa function dan isMusicPlaying. Keduanya di bugnkus menjadi props pada saat di terima di Component PlayButton.

Tulisan ini merupakan penyampaian versi saya dari link berikut : https://medium.freecodecamp.org/everything-you-need-to-know-about-react-eaedf53238c4

silahkan di kunjungi. bagus, mudah di pahami. 
 
Share:

Wednesday, May 16, 2018

Istilah di dalam Obligasi

Istilah - istilah di dalam obligasi

Fixed Coupon Bonds. Obligasi dengan tingkat kupon bunga yang telah ditetapkan sebelum masa penawaran di pasar perdana dan akan dibayarkan secara periodik. 
Convertible Bonds. Obligasi yang memberikan hak kepada pemegang obligasi untuk mengkonversikan obligasi tersebut ke dalam sejumlah saham milik penerbitnya. 
Unsecured Bonds. Obligasi yang tidak dijaminkan dengan kekayaan tertentu tetapi dijamin dengan kekayaan penerbitnya secara umum. 
Guaranteed Bonds. Obligasi yang pelunasan bunga dan pokoknya dijamin denan penangguangan dari pihak ketiga. 
Wesel Bayar. Janji tertulis untuk membayar sejumlah uang tertentu pada tanggal tertentu. Muncul akibat dari pembelian, pembiayaan, atau transaksi lainnya.
Zero Coupon Bonds. Obligasi yang tidak melakukan pembayaran bunga secara periodik. Namun, bunga dan pokok dibayarkan sekaligus pada saat jatuh tempo. 
Exchangeable Bonds. Obligasi yang memberikan hak kepada pemegang obligasi untuk menukar saham perusahaan ke dalam sejumlah saham perusahaan afiliasi milik penerbitnya. 
Agio Obligasi. Selisih dari harga jual dan nilai nominal saat obligasi dijual melebihi nilai nominal.
Disagio Obligasi. Selisih antara nilai nominal obligasi dengan harga jual, saat obligasi dijual dibawah nilai nominal.
Callable Bonds. Obligasi yang memberikan hak kepada emiten untuk membeli kembali obligasi pada harga tertentu sepanjang umur obligasi tersebut. 
Coupon Bonds. Obligasi dengan kupon yang dapat diuangkan secara periodik sesuai dengan ketentuan penerbitnya. 
Mortage bonds. Obligasi yang pelunasan bunga dan pokoknya dijamin dengan agunan hipotik atas properti atau asset tetap. 
Share:

Privacy Policy dan Privacy Codes

Privacy Policies atau Privacy Codes merupakan sebuah pedoman dari sebuah organisasi untuk melindungi privasi/ hak pribadi dari pelanggan dan karyawan nya. Pada level management di sebagian perusahaan telah menyadari hal ini. Bahwa mereka bertanggung jawab melindungi informasi yang telah mereka terima. 
 
Model perizinan yang digunakan perusahaan untuk mengambil informasi pelanggan di bagi menjadi dua model. 

Pertama yaitu Opt-out Model. Perusahaan mengambil informasi dari pelanggan tanpa izin terlebih dahulu dari pelanggan selama pelanggan belum secara khusus meminta agar pengumpulan infomasi tersebut di hentikan.

Kedua yaitu Opt-in Model. Model pengambilan informasi ini mengharuskan perusahaan untuk mendapat ijin terlebih dahulu dari pelanggan yang akan di ambil informasi nya.
Share:

Wednesday, May 9, 2018

E-Commerce Mechanisms (Mekanisme di dalam E-commerce)

E-commerce Mechanisms 
merupakan mekanisme dimana sebuah bisnis dan pelanggan bertransaksi jual beli melalui internet. 
Ada lima mekanisme e-commerce yang umum digunakan, yaitu : 


1. Electronic Catalogs 
merupakan katalog dalam bentuk elektronik yang terdiri dari sebuah database produk, sebuah direktori dengan kemampuan fitur pencarian, dan sebagai fungsi presentasi.  
2. Electronic Auctions 
Merupakan transaksi jual beli kompetitif yang dilakukan secara online. Secara umum e-Auction meningkatkan pendapatan dari penjual dengan bertambahnya jangkauan pembeli dan waktu yang di butuhkan untuk lelang. Sementara untuk pembeli, lelang dapat di lakukan dimanapun tanpa harus datang ke tempat lelang.
3. Electronic Storefront
merupakan sebuah website e-commerce yang merepresentasikan satu toko. Contoh, website adidas. 
4. Electronic Mall 
sebuah website e-commeerce yang merepresentasikan banyak toko di dalam nya. Contoh, tokopedia.
5. Electronic Marketplace (e-marketplace)
merupakan  pusat pasar virtual di dalam internet dimana pembeli dan penjual dapat melakukan aktivitas bisnis ecommerce ataupun e-business.
Share:

Pengertian Explicit Knowledge

Explicit knowledge merupakan pengetahuan yang berhubungan dengan hal yang bersifat objektif, rasional, dan teknis. Salah satu contoh pengaplikasian nya di dalam organisasi yaitu kebijakan. Dengan kata lain explicit knowledge merupakan pengetahuan yang di representasikan secara eksplisit (misal, di dokumentasikan) dalam sebuah format tertentu sehingga dapat di ketahui/ di pahami oleh seluruh bagian yang terlibat di dalam sebuah organisasi.
Share:

Deliberate Act

Deliberate Act adalah kegiatan melanggar hukum yang dilakukan dengan sengaja untuk mendapatkan keuntungan dari kegiatan mengakses,menggunakan, mencuri atau memanfaatkan informasi yang bersifat rahasia.

Terdapat berbagai jenis dari deliberate act, salah satu nya yaitu SCADA.

SCADA (Supervisory Control and Data Acquisition) merupakan arsitektur sistem kontrol yang menggunakan komputer, jaringan komunikasi, dan user interface berbasis grafik untuk proses yang melibatkan supervisi di level management dalam lingkup infrastruktur. 

Contoh lingkup penggunaan SCADA meliputi proses Industri, proses Infrastruktur, dan fasilitas. SCADA sama seperti sistem pada umum nya, memiliki celah yang dapat di tembus oleh oknum kriminal (seperti hacker) dengan tujuan tertentu.Hal ini tentunya merupakan ancaman besar, mengingat SCADA memiliki kontrol penuh di level infrastruktur seperti transportasi, satelit, panel surya, sampai dengan industri Nuklir.
Kasus Stuxnet yang berhasil meretas sistem Nuklir Iran merupakan salah satu contoh penyerangan terhadap SCADA. Stuxnet merupakan sejenis worm yang menyerang perangkat yang berjalan dalam sistem operasi Windows. Tentunya hal ini sangat berbahaya bagi kemaslahatan umat... for god sake, we are talking about the Weapon of Mass Destruction here ... yes that NUKE! 
Share:

Risk Analysis dan Risk Mitigation Strategy

Risk Analysis adalah proses didalam sebuah organisasi untuk menilai setiap aset yang dilindungi, memperkirakan kemungkinan bahwa setiap aset mungkin memiliki ancaman dari banyak faktor, dan membandingkan biaya kemungkinan masing-masing ancaman tersebut dengan biaya untuk melindunginya.

Resiko dapat di kendalikan dan di evaluasi dengan menggunakan Risk Mitigation. Terdapat beberapa strategi penerapan Risk Mitigation, Diantaranya yaitu : 


  1. Risk Transference yaitu menggantikan atau mengalihkan resiko yang ada dengan sesuatu yang dapat memberikan kompensasi terhadap sesuatu yang hilang karena resiko tersebut. Salah satu contoh nya yaitu menetapkan bunga atau denda terhadap keterlambatan pembayaran dari tanggal pembayaran yang sebelumnya telah di sepakati. 
  2. Risk Avoidance yaitu strategi untuk mencegah/menghindari kemungkinan terjadinya suatu resiko didalam suatu sistem/organisasi. Contoh, membangun bangunan di daerah yang tidak rawan bencana.
  3. Risk Limitation merupakan salah satu strategi mitigasi resiko dengan cara memaksimalkan pengendalian ancaman sehingga dapat meminimalisir terjadinya resiko yang lebih besar. Contoh : membatasi akses ke dalam database.
  4. Risk Acceptance adalah keputusan yang diambil dari organisasi untuk menerima potensial risiko yang mungkin terjadi tanpa ada pengamanan dan organisasi telah siap menerima apabila kerugian terjadi.
Share:

Competitive Advantage

Competitive Advantage adalah sebuah faktor/ kondisi yang membuat sebuah entitas dalam linkungan kompetisi (e.g. Lingkungan bisnis) menjadi di unggulkan/ di untungkan dengan adanya faktor tersebut. Parameter keunggulan tersebut dapat di ukur dari biaya, kualiatas, kecepatan, penguasaan pasar yang melebihi rata - rata kompetitor lain nya.

Terdapat 5 strategi Competitive Advantage

  1. Cost Leadership Strategy adalah salah satu jenis competitive advantage di mana suatu perusahaan mampu menghasilkan produk dan/atau jasa dengan biaya lebih rendah ketimbang perusahaan kompetitor pada industri ini.
  2. Operational Effectiveness merupakan sebuah usaha atau strategy untuk meningkatkan efektivitas di dalam proses bisnis internal perusahaan sehingga dapat meningkat kan parameter seperti kualitas, produktivitas, serta kepuasan karyawan dan pelanggan lebih baik dari para pesaing nya.
  3. Differentiation Strategy adalah suatu strategi dimana perusahaan berusaha meningkatkan keunggulan kompetitifnya dengan menciptakan perbedaan produk dari perusahaan dengan produk dari perusahaan lain. Tetapi, ada juga keadaan dimana strategi ini akan lebih baik diterapkan jika target pelanggan merupakan golongan-golongan yang tidak sensitif dengan harga, pelanggan memiliki kebutuhan yang sangat spesifik sehingga tidak dapat dipenuhi perusahaan lain.
  4. Customer- Orientation merupakan strategi bisnis yang berorientasi pada kepuasaan pelanggan.
  5. Innovation yaitu strategi untuk membuat produk baru dengan menggunakan teknologi yang dapat menampilkan suatu fitur bermanfaat dan berkualitas.
Share:

Porter Value Chain Model dan Contoh Kasus Porter Five Force Model

Porter’s Value Chain Model
Merupakan model yang menggambarkan alur dari sebuah aktivitas yang menghasilkan nilai tambah bagi perusahaan, dimulai dari supplier bahan mentah sampai dengan customer. Secara garis besar aktivitas nilai tambah tersebut merupakan serangkaian aktivitas yang di kategorikan menjadi dua bagian yaitu, Primary Activities yang merupakan kegiatan usaha yang berhubungan dengan produksi dan distribusi dari produk dan jasa perusahaan,  serta Support Activities yang merupakan kegiatan tidak langsung menambah nilai pada produk dan jasa perusahaan, tetapi mendukung kegiatan utama. Kedua bagian tersebut memiliki kontribusi nilai tambahnya masing - masing sehingga membentuk satu kesatuan nilai tambah bagi perusahaan.
Contoh Kasus Porter Five Force Model

Sony Playstation
- Rivalry, titik tengah Porter Force Model
Dalam pasar game console, Sony merupakan salah satu pemain besar di dalam pasar tersebut dan telah lama berkompetisi dengan pemain besar lain nya seperti Microsoft dengan Xbox nya, Nintendo dengan Switch dan Wii serta pemain lain nya seperti Sega dan Atari.
- Threat of New Entrants 
Drama perkembangan game console dimulai sudah sejak lama sekali. Pemain besar dalam pasar ini berlomba - lomba mengembangkan produk nya masing - masing dan sudah memiliki tempat tersendiri di hati penggemarnya. Ancaman pendatang baru di pasar ini saya rasa tidak cukup besar bagi Sony dan para pemain besar tersebut. 
- The threat of substitute products or services
Meskipun saat ini sudah banyak platform game lain yang menawarkan kelebihan seperti PC Game yang menawarkan performa lebih, ataupun Mobile Game dengan mobilitas nya yang saat ini banyak di gemari oleh semua kalangan. Saya rasa game console masih punya pasar nya sendiri dan memiliki tempat di hati parapenggemarnya. Namun tidak dapat di pungkiri juga pasar tersebut semakin sempit karena bertambahnya minat terhadap platform game lain seperti Mobile dan PC game. Serta dengan seiring berkembangnya teknologi, tidak menutup kemungkinan 10 atau 20 tahun ke depan terdapat pemain/platform baru yang menawarkan hal baru dalam dunia game console dan dapat menjadi ancaman bagi para pemain besar dalam pasar ini. Sehingga ancaman produk pengganti dalam pasar ini menjadi sesuatu yang patut di pertimbangkan untuk dapat terus ber inovasi. 
- The bargaining power of suppliers
Supplier bahan mentah dalam pembuatan game console seperti PCB, kabel, skrup, kerangka plastik console, dan lain nya merupakan material dimana banyak supplier dapat menyediakan bahan tersebut, sehingga perusahaan seperti Sony dapat memiliki banyak opsi supplier yang dapat dipilih yang menjadikan tekanan dari sektor ini tidak begitu menjadi concern. Namun tidak menutup kemungkinan ada beberapa komponen yang hanya dapat di produksi oleh supplier tertentu atau bahkan mungkin pembuatan nya harus custom, sehingga menyebabkan tekanan dari beberapa sektor material patut di perhitungkan juga. 
- The bargaining power of buyers
Dalam pasar ini produk yang di tawarkan bervariasi seperti xbox, playstation 4, nintendo wii, nintendo switch, dan platform game lain nya. Hal tersebut menyediakan banyak alternatif bagi pelanggan sehingga tekanan di sektor ini dapat dikatakan cukup besar perusahaan. 

Sumber : Introduction to Information Systems- Supporting and Transforming Business, 5th edition
Share: