Welcome to my blog

Selamat datang di blog yang fakir tulisan ini hehe, semoga informasi yg saya sajikan bermanfaat bagi anda walau seadanya. Semoga juga bisa memuaskan anda yang kepo sama saya #keGeEran haha.

My Family

Keluarga kedua di Jakarta

Sunday, October 23, 2016

Selamat Datang Alesha!

Malam itu adalah minggu ke-38 kehamilan istri tercinta, namun belum ada tanda-tanda bayi yang dikandung istri untuk dilahirkan. Dokter mengatakan, tenang saja kalau belum ada tanda-tanda tanggal 15 kontrol lagi ya bu. Keluarga istri adalah keluarga di lingkungan kesehatan, banyak informasi yang masuk dan jadi bahan pertimbangan, termasuk jika terlalu lama janin ada di dalam kandungan.. nyawa janin yang akan menjadi taruhannya. Keluarga memutuskan untuk mencari second opinion serta  pemeriksaan lebih lanjut terhadap janin kami. RSI Aisyiyah di seberang SMA 5 Malang jadi pilihan karena ada saudara yang bekerja di Rumah Sakit tersebut.

Setelah konsultasi dengan Dokter, NST dilakukan untuk memeriksa kondisi detak jantung janin. Hasil NST menunjukkan kondisi bayi sudah mulai stress karena terlalu lama ada di dalam Rahim.. yang berarti sudah waktunya bayi dilahirkan. Istri diminta untuk MRS (Masuk Rumah Sakit), saat itu saya sendiri masih di Jakarta dan saya katakan siap untuk berangkat ke Malang. Tiket dibeli, dan kondisi seperti ini kartu kredit memang sangat berguna.

Kamis pagi, istri video call memberi informasi harus SC (Operasi Sesar). Saya meyakinkan operasi SC adalah pilihan terbaik untuk saat ini, tentu saja demi kesahatan bayi dan ibu. Bagi kami operasi tersebut adalah pilihan terakhir dalam proses melahirkan namun kondisi mengatakan operasi sesar harus dilakukan. Sebelumnya sudah dilakukan induksi, namun reaksi yang ditunggu tidak kunjung datang bahkan bayi berubah posisi menjadi melintang. Dokter mengatakan operasi menjadi satu-satunya pilihan dan operasi akan dilakukan Pukul 16.30. Untuk mempersiapkan diri, video youtube tentang operasi sesar saya hatamkan dan memang tidak menakutkan seperti yang saya kira.

Setiba di Bandara Abdurrachman Saleh Malang, Mertua menjemput dan perjalanan hari itu sangat efisien bagi saya. Bagaimana tidak, saya berangkat pukul 10.30 dari kos di Jakarta, pukul 2 siang sudah ada di Malang. Pukul 14.30 saya sudah di RSI Aisyiyah malang dan bertemu dengan istri tercinta, namun ternyata operasi mundur menjadi pukul 20.00 dikarenakan dokter berhalangan pada sore hari.

Pada pukul 19.30 setelah kami sholat isya’ istri dibawa masuk ke Ruang Operasi, saya diminta untuk segera bersiap jika dipanggil untuk masuk ke dalam menemani istri. Persiapan cukup panjang untuk melakukan operasi, hingga pukul 21.30 saya diijinkan masuk ruang operasi untuk menemani istri. Ketika saya masuk, saya kaget karena operasi sudah sampai pembukaan jaringan dan anastesi sudah dilakukan. Saya merasakan situasi ruang operasi cukup mendukung dan semua tampak tenang melakukan operasi hingga sesuatu terjadi.. Bayinya sembunyi karena terusik tindakan operasi sesar. Air ketuban dikeluarkan dan dibersihkan dan Alhamdulillah posisi air ketuban jernih. Situasi kemudian berubah menjadi menegangkan ketika bayi sulit untuk dikeluarkan, semua upaya kerjasama tim operasi dilakukan. Saya menjadi saksi mata semua proses itu, istri diminta untuk nafas panjang untuk menjaga ritme detak jantung tetap stabil. Semua org berdoa dan teriakan kami “Allahu Akbar!!” keluarlah bayi mungil nan cantik kami dengan kerjasama empat orang. Ari-ari terurai kemudian diklep dan dipotong, keajaiban ada di depan mata kami. Alhamdulillah telah lahir putri kami sekaligus anak pertama pada hari Kamis Malam Jumat tanggal 13 Oktober 2016 pukul 20.50 dengan berat 3,1 kg panjang 50cm. Setelah bayi lahir, ada yang bilang "lhooo bunder" kemudian semua menoleh ke arah saya.. -_-". Kami memberi nama anak kami Alesha Arsana Azzahra. Alesha berarti selalu dilindungi Allah, Arsana berarti selalu gembira, dan Azzahra yang berarti luar biasa & cerdas. Nama ini merupakan doa kami sebagai orang tua untuk putri tercinta kami, Aamiinn.




Namun, saya masih belum bisa senang karena bayi tidak menangis sama sekali, bidan dan perawat melakukan pembersihan, nafas buatan, serta memonitor kondisi bayi. Saya meliihat sendiri si kecil dengan tenangnya dibersihkan. Kondisi bayi yang tidak menangis saat lahir menunjukkan berbagai kemungkinan gangguan pernafasan, syaraf, dll. Karena itu observasi lebih lanjut perlu dilakukan.


Saat saya keluar, ibu mertua yang enerjik dan awet muda ini sudah menunggu dari tadi dan “Oweeekk” suara bayi kami terdengar, wajahnya sumringah gembira mendengar suara cucu pertamanya. Rumah sakit RS Aisyiyah adalah rumah sakit yang mendukung IMD dan mengutamakan ASI Eksklusif, cocok sudah dengan kemauan kami. IMD dilakukan namun belum berhasil karena kondisi sang ibu belum memungkinkan, bayi terpaksa masuk ruang Perinatologi untuk dilakukan observasi lebih lanjut.


Keesokan harinya, kami diminta untuk menyediakan ASI untuk bayi. saya mulai bergerak cepat meminta bantuan adik yang ada di mergosono untuk mobilitas mencari Pompa ASI serta botol tambahan. Namun dengan segala upaya kami ternyata belum bisa disediakan mungkin karena rangsangan bayi belum memicu produksi ASI. Jumat pukul 10 pagi, dokter membolehkan bayi untuk rawat gabung dengan sang ibu.. istri senang banget krn akan ketemu lagi dengan putrinya, setelah menyusui dilakukan dan efek Oxytocin sudah mulai terlihat dan Alhamdulillah ASI bisa keluar. Mungkin disini saya sudah mulai lega melihat istri dan anak berkumpul, saya rasa mertua juga… setelah melewati hari yang menegangkan. Malamnya saya mengajak adek makan di Richeese untuk melepas penat… Thanks To Aldino, adik yang membantu di saat butuh mobilitas tinggi.


Hari Sabtu Minggu dipenuhi dengan kunjungan dari teman dan saudara, ada teman dekat istri, ada Bude Har & Mas Wawan, Mas Arie sekeluarga, Bapak Ibu yang datang dari Probolinggo, hingga keluarga dari Bantur.






Kami berharap hari Minggu sudah bisa kembali ke rumah dan melanjutkan segala persiapan bayi untuk 3 bulan kedepan. Tapi ternyata, kami harus stay satu hari lebih karena bayi terlihat mulai menguning. Bayi akan menguning karena zat bilirubin yang meningkat, zat ini merupakan zat sisa dari sel darah merah yang nantinya akan dihancurkan oleh hati. Pada bayi, organ hati masih belum bisa berfungsi dengan baik dan ASI menjadi pengganti sementara sebagai penghancur bilirubin. Salah satu cara untuk mengurangi kadar bilirubin adalah dengan menjemurnya di bawah sinar matahari pagi sekitar pukul 6.30 – 7.30 selama 15 menit. Pihak rumah sakit menyarankan untuk dilakukan penyinaran pada bayi selama 24 jam di perinatologi. Kami sedih mendengar itu, karena kasihan bayi jika disinar untuk mengurangi bilirubin. Tapi setelah saya melihat sendiri bayi kami disinar… Ya Elah itu kok malah nyaman tidurnya.. haha.


Keesokan harinya kami sudah boleh pulang dengan menyelesaikan administrasi, Alhamdulillah BPJS sangat membantu kelahiran anak kami. Walau bolak balik ngurus administrasi ke BPJS demi kenaikan kelas ke kelas 1 tapi setimpal dengan jaminannya. Pada senin malam, kami pun diijinkan pulang.


Kami menikah pada 2 Oktober 2015 di Yonkes 2/2, dan akad dilakukan di masjid Yonkes 2/2 dan ternyata kami adalah pasangan pertama yang menikah di masjid tersebut dan entah kebetulan atau tidak.. anak kami lahir pada 13 Oktober yang merupakan ulang tahun Yonkes.. Selamat datang putri kecil kami, Alesha!





Thanks to : Mama Papa yang fully support untuk semua proses kelahiran, Aldino yang bantuin mobilitas super cepat, Bapak Ibu yang belain datang dari probolinggo buat lihat Alesha, Mbah di mergosono atas doa dan air zam-zamnya, Tante Ajeng yang nemenin mama dan bawain kita edamame, dan semua yang udah jenguk ke rumah sakit serta semua yang mendoakan proses kelancaran lahirnya Alesha.. Terima kasih semuanya!!

Wednesday, March 30, 2016

Mengenal CSS Preprocessors dan SASS

CSS adalah bahasa styling untuk HTML, struktur bahasanya yang sederhana, mudah dipahami namun memberikan pengaruh yang sangat besar terhadap tampilan HTML. Namun jika dilihat dari sisi seorang Developer kesederhanaan CSS ini membuat penulisan kodenya tidak efektif.
Bagi seorang developer pasti ingin ada variable untuk menyimpan warna misalnya atau nilai tertentu agar bisa dipergunakan kembali jika diperlukan. Atau mungkin ingin adanya kemampuan untuk membuat sebuah fungsi untuk menghemat waktu dalam penulis beberapa kode yang banyak dalam CSS.
Untuk menyelesaikan permasalahan di atas, muncullah CSS Preprocessor. CSS Preprocessor memberikan kemampuan untuk membuat variabel, Fungsi, dan penulisan CSS yang lebih terstruktur dan pastinya membuat proses Development lebih cepat dan efisien.
SASS
Syntactically Awesome StyleSheets (SASS)
Saat ini ada beberapa CSS preprocessor yang paling sering digunakan, diantaranya Less.js dan SASS. Keduanya memeliki struktur kode yang sama jadi jika anda telah memahami salah satunya, pun anda dapat memahami CSS preprocessor yang lainnya. Dalam artikel ini saya akan menjelaskan salah satu CSS Preprocessor saja, yakni SASS. Anda dapat mengunjungi situs SASS dihttp://sass-lang.com/

Instalasi SASS

SASS dibangun dengan menggunakan bahasa pemrograman Ruby, maka dari itu kita membutuhkan Ruby agar kita dapat menjalankan SASS dalam komputer kita. anda bisa mendownload Installer Ruby untuk windows di link berikut :
Download Ruby Installer for Windows
Setelah anda menginstall Ruby, selanjutnya kita install Modul SASS. Buka Command Prompt di menu Start→All Programs→Accesories→Command Prompt. dan ketikkan kode berikut untuk menginstall SASS:
gem install sass
Pastikan anda masih terkoneksi ke internet, karena perintah ini akan mendownload modul SASS dan menginstallnya.
Jika proses instalasi selesai, anda akan melihat informasi bahwa proses download dan instalasi telah selesai
Proses Instalasi SASS
Cara kerja SASS adalah dengan memonitor suatu file/folder yang berisi file .scss/.sass (ekstensi untuk file SASS) dan melakukan compiling menjadi file CSS dari file-file tersebut ketika sebuah perubahan dilakukan.

Menjalankan SASS

Untuk menjalankan SASS agar memonitor suatu folder (Misalnya folder untuk projek kita mempunyai nama “project” dan terletak di dalam drive D), ketikkan perintah berikut via Command Prompt lalu tekan Enter
sass --watch "D:/project":"D:/project"
Perintah tersebut akan memonitor folder project dari perubahan file scss/sass yang terjadi dan meng-compilenya ke folder yang sama. Perintah dasarnya adalah seperti berikut
sass [options] [Input] : [Output]
Sass Watching for Changing
Jika sudah, Anda bisa mulai bekerja dengan file .scss dan meminimize command prompt nya. Karena kita tidak akan berurusan lagi dengan Command promptnya. Berikut ini adalah tampilan yang muncul ketika kita melakukan perubahan pada file scss/sass
Sass Compiling
Untuk pembuatan file scss sendiri anda tidak perlu menggunakan text editor khusus, cukup gunakan text editor kesayangan anda seperti Sublime Text atau Notepad++ dan melakukan save as dengan extensi .scss.

Struktur SASS

Bagian ini akan menjelaskan fitur-fitur dari CSS Preprocessor (dalam kasus ini SASS). Kode SASS tidak jauh berbeda dengan CSS namun ada beberapa fitur yang akan membantu anda dan menghemat waktu anda dalam penulisan Kode CSS.

Variabel

Dalam SASS kita bisa membuat sebuah variabel dengan menggunakan tanda dollar diikuti dengan nama variabel.
$warna_dasar:#B4D455;
 
body{
 background-color: $warna_dasar; 
}
Mungkin anda akan bertanya, Kenapa kita perlu Variable? Oke, dengan menggunakan variabel, kita bisa menghemat waktu ketika melakukan perubahan pada CSS. Misalnya seperti ini : “Dalam suatu file CSS kita memiliki 100 lebih property yang memiliki nilai yang sama, dan kita ingin merubah nilai tersebut. Jika dengan CSS biasa anda akan merubahnya satu-satu, atau paling tidak menggunakan fitur Replace (dalam text editor)”. Namun dengan variabel, kita tinggal mengganti nilai dari variabel yang bersangkutan. Sederhana bukan?
Andapun dapat melakukan operasi matematika seperti +,-,*,/ dan % terhadap variabel seperti berikut :
$margin:20px;
 
#box{
 margin:$margin / 2;
}

Nesting

Misalnya kita biasa menuliskan kode CSS seperti berikut :
ul{
 list-style:none;
 background:#DDDDDD;
}

ul li{
 display:inline;
}

ul li a{
 text-decoration:none;
 color:black;
}
Dengan Aturan Nesting dalam SASS, kita bisa menuliskannya seperti berikut :
ul{
 list-style:none;
 background:#DDDDDD;

 li{
  display:inline;
  
  a{
   text-decoration:none;
   color:black;
  }
 }
}
Lebih hemat, dan lebih terstruktur.

Mixins

Mixins bisa juga kita sebut dengan Fungsi, sebagaimana fungsi dari sebuah “Fungsi” adalah melakukan beberapa operasi hanya dengan memanggil fungsi yang bersangkutan. Contohnya, ketika kita ingin menerapkan border-radius, maka paling tidak kita akan menulis 5 baris kode untuk border-radius untuk menjaga kompatibilitas dengan browser lama.
#box{
 border-radius:10px;
 -o-border-radius:10px;
 -ms-border-radius:10px;
 -moz-border-radius:10px;
 -webkit-border-radius:10px;
}
Untuk permasalahan seperti ini, kita dapat membuat mixins khusus untuk border-radius seperti berikut :
@mixin border_radius($radius :3px){
 border-radius: $radius;
 -o-border-radius: $radius;
 -ms-border-radius: $radius;
 -moz-border-radius: $radius;
 -webkit-border-radius: $radius; 
}
@mixin adalah kode untuk membuat sebuah mixins (baca:fungsi), border_radius adalah nama mixinsnya dan kita menambahkan property fungsi $radius dengan nilai defaultnya3px. Seluruh variabel $radius dalam mixin ini akan diganti dengan nilai yang diberikan dalam property mixins.
Untuk menggunakan mixin tersebut kita gunakan kode @include diikuti dengan nama fungsi.
#box{
 @include border_radius(30px);
}
Bagaimana? sangat mudah bukan? jadi setiap anda akan menambahkan border-radius, anda cukup menulis satu baris kode saja.

Kapan Harus Menggunakan CSS Preprocessor?

CSS Preprocessor seperti SASS adalah alat bantu kita sebagai web developer dalam penulisan kode CSS yang lebih terstruktur dan lebih cepat dengan bantuan variabel, mixins atau nesting. Sedangkan untuk implementasinya kita tetap menggunakan file CSS hasil dari compiling sass bukan file .scss/.sass itu sendiri.
file .scss hanya untuk proses pembangunan/development agar lebih mudah ketika ingin melakukan maintenance/perubahan terhadap style. Seperti yang saya sebutkan sebelumnya, kita hanya perlu merubah nilai variabel atau merubah mixins yang telah kita buat.

Saya benci Command Prompt, Adakah Aplikasi GUInya?

Jika anda merasa tidak nyaman dengan Command Prompt, Anda dapat menginstall aplikasi berbasis GUI seperti Scout. Scout adalah aplikasi yang dibangun dengan Adobe Air, jadi untuk menginstallnya anda harus menginstall Adobe Air terlebih dahulu.
Download Adobe Air Download Scout
Pengaturannya sangat mudah, anda tinggal menambahkan folder yang ingin anda monitor, dan mengatur bagaimana output yang dihasilkan. Selanjutnya tinggal menekan tombol play untuk memulai memonitor folder yang bersangkutan.
Scout

Kesimpulan

Keberadaan CSS Preprocessor sangat membantu dalam proses Development file CSS, penulisan Kode CSS lebih optimal dengan adanya variabel dan mixins, semua fungsi tersebut membuatnya menjadi lebih reusable dan tentunya akan menghemat waktu anda + tenaga yang dikeluarkan untuk mengetik baris-baris kode yang sama :).

Sumber Referensi

Sumber : www.ariona.net/mengenal-css-preprocessors-dan-sass/

Pengenalan JSON

JSON (JavaScript Object Notation) adalah format pertukaran data yang ringan, mudah dibaca dan ditulis oleh manusia, serta mudah diterjemahkan dan dibuat (generate) oleh komputer. Format ini dibuat berdasarkan bagian dari Bahasa Pemprograman JavaScriptStandar ECMA-262 Edisi ke-3 - Desember 1999. JSON merupakan format teks yang tidak bergantung pada bahasa pemprograman apapun karena menggunakan gaya bahasa yang umum digunakan oleh programmer keluarga C termasuk C, C++, C#, Java, JavaScript, Perl, Python dll. Oleh karena sifat-sifat tersebut, menjadikan JSON ideal sebagai bahasa pertukaran-data.
JSON terbuat dari dua struktur:
  • Kumpulan pasangan nama/nilai. Pada beberapa bahasa, hal ini dinyatakan sebagai objek (object), rekaman (record), struktur (struct), kamus (dictionary), tabel hash (hash table), daftar berkunci (keyed list), atau associative array.
  • Daftar nilai terurutkan (an ordered list of values). Pada kebanyakan bahasa, hal ini dinyatakan sebagai larik (array), vektor (vector), daftar (list), atau urutan (sequence).
Struktur-struktur data ini disebut sebagai struktur data universal. Pada dasarnya, semua bahasa pemprograman moderen mendukung struktur data ini dalam bentuk yang sama maupun berlainan. Hal ini pantas disebut demikian karena format data mudah dipertukarkan dengan bahasa-bahasa pemprograman yang juga berdasarkan pada struktur data ini.
JSON menggunakan bentuk sebagai berikut:
Objek adalah sepasang nama/nilai yang tidak terurutkan. Objek dimulai dengan { (kurung kurawal buka) dan diakhiri dengan } (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua) dan setiap pasangan nama/nilai dipisahkan oleh , (koma).

Larik adalah kumpulan nilai yang terurutkan. Larik dimulai dengan [ (kurung kotak buka) dan diakhiri dengan ] (kurung kotak tutup). Setiap nilai dipisahkan oleh , (koma).

Nilai (value) dapat berupa sebuah string dalam tanda kutip ganda, atau angka, atau true atau false atau null, atau sebuah objek atau sebuahlarik. Struktur-struktur tersebut dapat disusun bertingkat.

String adalah kumpulan dari nol atau lebih karakter Unicode, yang dibungkus dengan tanda kutip ganda. Di dalam string dapat digunakanbackslash escapes "\" untuk membentuk karakter khusus. Sebuah karakter mewakili karakter tunggal pada string. String sangat mirip dengan string C atau Java.

Angka adalah sangat mirip dengan angka di C atau Java, kecuali format oktal dan heksadesimal tidak digunakan.

Spasi kosong (whitespace) dapat disisipkan di antara pasangan tanda-tanda tersebut, kecuali beberapa detil encoding yang secara lengkap dipaparkan oleh bahasa pemprograman yang bersangkutan.

sumber : dari http://www.json.org/json-id.htm

Monday, February 15, 2016

ECSP - Securing .NET Application


Beberapa waktu lalu saya diikutkan training ECSP dari EC-Council. Sayangnya kita tidak mendapatkan materi dalam bentuk Softcopy, tapi tenang kita tetap mendapatkan materi dalam bentuk Hardcopy yang susah dibawa ( ._.). Untuk memperkuat materi belajar, saya akan meresume beberapa materi dan saya share di blog ini siapa tahu ada yang membutuhkan terkait dengan "Hardening" untuk ASP.NET Application.

Materi yang ada di ECSP .NET ini adalah sbb :
1. Pengenalan keamanan Aplikasi .NET
2. Keamanan Framework .NET
3. Input Validation dan Output Encoding
4. .NET Authentication dan Authorization
5. Secure Session dan State Management
6. .NET Cryptography
7. .NET Error Handling, Auditing, and Logging
8. .NET Secure File Handling
9. .NET Configuration Management and Secure Code Review


Belajar sabar soal rejeki dari perilaku Meri & Chika

Mungkin konsep ini sudah berkali-kali terdengar, rejeki tidak akan pernah salah alamat, namun kali ini renungan soal konsep itu muncul dari dua ekor kucing di kosan.. Meri dan Chika.

Meri adalah kucing laki-laki tulen yang dibesarkan oleh 'rewang' yang pernah ada di kosan, Meri besar menjadi kucing yang manja ke pemilik rumah. Warnanya putih hitam dengan kombinasi yang bagus menurutku.

Kemudian Chika adalah kucing cewek yang super manja ke penghuni kos-kosan namun kadang memang dia rakus soal makanan. Warnanya putih hitam dominasi putih, ekor panjang dan bagus untuk ukuran kucing rumah.

Suatu ketika saya ndak habis makan ayam dari KFC karena saya minta potongan dada dan ternyata dapat yang super besar. Melihat ada dua kucing yang biasa berkeliaran di kosan kupikir buat mereka aja lagi pula mereka pasti suka, dibagi dua lah sisa potongan dada ayam tadi. Dua potongan ini ternyata tidak sama besar, satu kecil dan satu besar. Maksud hati yang kecil kuberikan ke Meri dan yang Besar kuberikan kepada Chika karena dia sering berada di sekitar penghuni kosan. Kulemparlah potongan kecil ke dekat Meri, dengan sigap Chika merebut potongan ayam kecil itu dan membawanya pergi jauh dari Meri. Karena Meri belum mendapat apa-apa, potongan dada ayam yang besar yang harusnya diberikan ke Chika akhirnya kuberikan ke Meri. Seharunya Chika dapat potongan ayam yang besar dan Meri dapat potongan ayam yang kecil, namun karena ketidaksabaran Chika dan merebut jatahnya Meri, malah Meri akhirnya dapat potongan ayam yang lebih besar dan chika dapat potongan ayam yang lebih kecil.

Setelah kejadian tersebut, ku terdiam... seolah memberi pesan  :

  1. Jangan merebut jatah orang lain.
  2. Jangan pernah iri terhadap rejeki orang lain, boleh.. untuk menjadi motivasi untuk mendapatkan rejeki yang sama atau lebih besar namun dengan cara yang santun dan tidak merebut jatah orang lain.
  3. Jangan khawatir apabila rejekimu diambil orang lain, karena Allah akan menggantikannya dengan rejeki yang lebih baik, :)

Tuesday, January 5, 2016

Tips Supaya Jam Dinding Awet

Suatu ketika saya dan adek pergi ke sebuah toko jam, kami ngobrol dengan penjualnya.. ternyata penyebab utama Jam Dinding Rusak adalah lembab dan semut.. kenapa? Kalau lembab merusak kinerja mesin sedangkan kalau semut itu suka iseng masuk ke mesin -_-". Penjual jam tsb memberikan tips supaya jam dinding yang kita miliki bisa awet muda :D

Berikut tipsnya :

1. Jangan pakai batere abal-abal
2. Jangan ditaruh di dinding yang lembab, apalagi berlumut. Atau kalau perlu beri alas papan dibalik jam dinding,
3. kasih kapur semut, gariskan mengelilingi mesin jam dinding.. karena salah satu penyebab jam rusak adalah semut jadi harus dihalangi masuk ke mesin jam dinding.

Kira-kira itu saja tips yang bisa dicoba supaya jam dinding menjadi awet. Selamat mencoba ;)

Wednesday, December 23, 2015

Generate Calendar menggunakan Function pada SQL SERVER

Kali ini saya membahas tentang bagaimana membuat kalender pada SQL Server tanpa membuat tabel baru. Sebelumnya saya membahas tentang penghitungan menggunakan function untuk menghitung jumlah hari tanpa menghitung weekend dan hari libur, Naaahhh... kali ini ga jauh beda.. Kita akan menggunakan function untuk membuatnya. langsung saja, pake jurus rahasia!!! Jalankan script dibawah ini :

CREATE FUNCTION [dbo].[GenerateCalendar] 
        (
        @FromDate   DATETIME 
        ,@NoDays    INT   
        )
-- Generates a calendar table with sequential day numbering (@FromDate = SeqNo 1).
-- See RETURNS table (comments) for meaning of each column.
-- Notes:       1) Max for NoDays is 65536, which runs in just over 2 seconds.
--
-- Example calls to generate the calendar:
-- 1) Forward for 365 days starting today:
--             DECLARE @Date DATETIME
--             SELECT @Date = GETDATE()
--             SELECT * 
--             FROM dbo.GenerateCalendar(@Date, 365) 
--             ORDER BY SeqNo;
-- 2) Backwards for 365 days back starting today:
--             DECLARE @Date DATETIME
--             SELECT @Date = GETDATE()
--             SELECT * 
--             FROM dbo.GenerateCalendar(@Date, -365) 
--             ORDER BY SeqNo;
-- 3) For only the FromDate:
--             DECLARE @Date DATETIME
--             SELECT @Date = GETDATE()
--             SELECT * 
--             FROM dbo.GenerateCalendar(@Date, 1);
-- 4) Including only the last week days of each month:
--             Note: Seq no in this case are as if all dates were generated
--             DECLARE @Date DATETIME
--             SELECT @Date = GETDATE()
--             SELECT * 
--             FROM dbo.GenerateCalendar(@Date, 365) 
--             WHERE Last = 1 ORDER BY SeqNo;
RETURNS TABLE WITH SCHEMABINDING AS
 RETURN
--===== High speed code provided courtesy of SQL MVP Jeff Moden (idea by Dwain Camps)
--===== Generate sequence numbers from 1 to 65536 (credit to SQL MVP Itzik Ben-Gen)
   WITH  E1(N) AS (SELECT 1 UNION ALL SELECT 1), --2 rows
         E2(N) AS (SELECT 1 FROM E1 a, E1 b),    --4 rows
         E4(N) AS (SELECT 1 FROM E2 a, E2 b),    --16 rows
         E8(N) AS (SELECT 1 FROM E4 a, E4 b),    --256 rows
        E16(N) AS (SELECT 1 FROM E8 a, E8 b),    --65536 rows
   cteTally(N) AS (
SELECT TOP (ABS(@NoDays)) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E16)
        -- [SeqNo]=Sequential day number (@FromDate always=1) forward or backwards
 SELECT [SeqNo]     = t.N,
        -- [Date]=Date (with 00:00:00.000 for the time component)                              
        [Date]      = dt.DT,  
        -- [Year]=Four digit year                                  
        [Year]      = dp.YY,
        -- [YrNN]=Two digit year                                    
        [YrNN]      = dp.YY % 100,
        -- [YYYYMM]=Integer YYYYMM (year * 100 + month)                              
        [YYYYMM]    = dp.YY * 100 + dp.MM,
        -- [BuddhaYr]=Year in Buddhist calendar                      
        [BuddhaYr]  = dp.YY + 543, 
        -- [Month]=Month (as an INT)                             
        [Month]     = dp.MM, 
        -- [Day]=Day (as an INT)                                   
        [Day]       = dp.DD,
        -- [WkDNo]=Week day number (based on @@DATEFIRST)                                    
        [WkDNo]     = DATEPART(dw,dt.DT),
        -- Next 3 columns dependent on language setting so may not work for non-English  
        -- [WkDName]=Full name of the week day, e.g., Monday, Tuesday, etc.                     
        [WkDName]   = CONVERT(NCHAR(9),dp.DW), 
        -- [WkDName2]=Two characters for the week day, e.g., Mo, Tu, etc.                 
        [WkDName2]  = CONVERT(NCHAR(2),dp.DW),  
        -- [WkDName3]=Three characters for the week day, e.g., Mon, Tue, etc.                
        [WkDName3]  = CONVERT(NCHAR(3),dp.DW),  
        -- [JulDay]=Julian day (day number of the year)                
        [JulDay]    = dp.DY,
        -- [JulWk]=Week number of the year                                    
        [JulWk]     = dp.DY/7+1,
        -- [WkNo]=Week number                                
        [WkNo]      = dp.DD/7+1,
        -- [Qtr]=Quarter number (of the year)                                
        [Qtr]       = DATEPART(qq,dt.Dt),                       
        -- [Last]=Number the weeks for the month in reverse      
        [Last]      = (DATEPART(dd,dp.LDtOfMo)-dp.DD)/7+1,
        -- [LdOfMo]=Last day of the month                  
        [LdOfMo]    = DATEPART(dd,dp.LDtOfMo),
        -- [LDtOfMo]=Last day of the month as a DATETIME
        [LDtOfMo]   = dp.LDtOfMo                                
   FROM cteTally t
  CROSS APPLY 
  ( --=== Create the date
        SELECT DT = DATEADD(dd,(t.N-1)*SIGN(@NoDays),@FromDate)
  ) dt
  CROSS APPLY 
  ( --=== Create the other parts from the date above using a "cCA"
    -- (Cascading CROSS APPLY (cCA), courtesy of Chris Morris)
        SELECT YY        = DATEPART(yy,dt.DT), 
                MM        = DATEPART(mm,dt.DT), 
                DD        = DATEPART(dd,dt.DT), 
                DW        = DATENAME(dw,dt.DT),
                Dy        = DATEPART(dy,dt.DT),
                LDtOfMo   = DATEADD(mm,DATEDIFF(mm,-1,dt.DT),-1)

  ) dp;

Setelah dijalankan, script di atas  akan membuat fungsi untuk meng-generate kalender, dengan fungsi tersebut kita bisa memanggil kapan saja dan memerintahkan SQL Server untuk membuat kalender.

Untuk memanggilnya kita tinggal jalankan Query terus tinggal dijadikan view dan bisa dipanggil kapan saja ;)

SELECT [Date], [Year], [YrNN], [YYYYMM], [BuddhaYr], [Month], [Day]
    ,[WkDNo], [WkDName], [WkDName2], [WkDName3], [JulDay], [JulWk]
    ,[WkNo], [Qtr], [Last], [LdOfMo], [LDtOfMo]
FROM dbo.GenerateCalendar('2010-01-01', 65536);



angka 65526 adalah angka contoh jumlah hari yang akan dipanggil
Script saya ambil  dari 
http://www.sqlservercentral.com/blogs/dwainsql/2014/03/30/calendar-tables-in-t-sql/
Jika ingin belajar lebih lanjut bisa mengakses link tersebut. Selamat bekerja! :)