Kamis, 14 April 2016

Code Igniter ---- How to ?

Tentang CodeIgniter


CodeIgniter adalah sebuah bentuk framework yang sedang hangat dibahas dan banyak digunakan di web web Indonesia. CodeIgniter sendiri dapat mempercepat pengembang untuk banyak membuat aplikasi di web. Sehingga dengan CodeIgniter, kita tidak perlu menulis semua code dari awal.

Oke, mari kita langsung membahas bagaimana cara memakainya..



Hello CodeIgniter!

Sebelum membuat file aplikasi untuk menampilkan hasil, kita harus membuat controller dahulu. Controller merupakan inti dari suatu aplikasi, karena controller mengatur permintaan dari HTTP.  
Buat contoh controller dengan nama Hello.php di folder application/controller.

 <?php if ( ! defined('BASEPATH'))  
  exit('No direct script access allowed');  
  class Hello extends CI_Controller {  
  function __construct()  
  {  
  parent::__construct();  
  }  
 function index()  
  {  
  echo "Hello WORLD";  
 }  
  }  

Lalu buka di http://localhost/index.php/Hello/
Maka akan muncul


Membuat Database

Pertama-tama, buat suatu database yang misalnya berisi data buku telepon..



Lalu, pada folder/application/config/ , buka database.php. Ubah bagian username dan database menjadi "root" dan nama database yang kita buat. Dalam kasus saya, saya namakan sesuai database saya yaitu "test database".

 <?php  
 defined('BASEPATH') OR exit('No direct script access allowed');  
 $active_group = 'default';  
 $query_builder = TRUE;  
 $db['default'] = array(  
      'dsn'     => '',  
      'hostname' => 'localhost',  
      'username' => 'root',  
      'password' => '',  
      'database' => 'test database',  
      'dbdriver' => 'mysqli',  
      'dbprefix' => '',  
      'pconnect' => FALSE,  
      'db_debug' => (ENVIRONMENT !== 'production'),  
      'cache_on' => FALSE,  
      'cachedir' => '',  
      'char_set' => 'utf8',  
      'dbcollat' => 'utf8_general_ci',  
      'swap_pre' => '',  
      'encrypt' => FALSE,  
      'compress' => FALSE,  
      'stricton' => FALSE,  
      'failover' => array(),  
      'save_queries' => TRUE  
 );  

Untuk menampilkannya, kita membutuhkan model. Buat modelnya di folder /application/models/.
Misal beri nama Model.php. 

 <?php   
  class db_model extends CI_Model{        
       function __construct()   
       {   
            parent::__construct();   
            $this->load->database();   
       }   
       function index(){   
            $getdata = $getdata->db->get('data');   
            return $getdata->result();   
       }   
  }   
  ?>  

Tanpa controller, model itu tidak akan berguna, jadi mari kita buat controllernya. Buat di folder application/controller. Misal, namanya ControllerDB.php

 <?php    
  defined('BASEPATH') OR exit('No direct script access allowed');    
  class controller extends CI_Controller {    
     function __construct(){    
       parent::__construct();    
                $this->load->helper(array('url','form'));   
       $this->load->model('Model');    
     }    
     function book()      
     {    
     $data['datadb'] = $this->Model->index();    
     $this->load->view('lihat', $data);    
     }    
  }    
  ?>    

Lalu buat file view yang berguna untuk melihat database kita. Buat di folder /application/views/.
Gunakan nama view yang tertera di model. Dalam hal ini, namanya adalah lihat.php

<!DOCTYPE html>   
  <html>   
    <head>   
       <title>PhoneBook</title>   
    </head>   
    <body>   
       <h1>Hello World!</h1>   
       <h1>Data Buku Telpon</h1>   
       <table border="1" style="width:100%">   
         <tr>   
            <td>Nama</td>   
            <td>Alamat</td>   
            <td>No.HP</td>   
            <td>Email</td>   
            <td>Kelas</td>   
         </tr>   
         <?php   
            foreach ($datadb as $data){   
         ?>   
         <tr>   
            <td> <?php echo $data->Nama;?> </td>   
            <td> <?php echo $data->Alamat;?> </td>   
            <td> <?php echo $data->No.HP;?> </td>   
            <td> <?php echo $data->Email;?> </td>   
            <td> <?php echo $data->Kelas;?> </td>   
         </tr>   
         <?php   
         }   
         ?>   
       </table>   
    </body>   
  </html>  

Lalu tinggal masukkan alamat  http://localhost/index.php/ControllerDB/book/



Jumat, 01 April 2016

ETS Pweb E.... Tentang Webku dan Php



No.1 
Web yang dikerjakan : infinityheroes.com
Mantan web yang dikerjakan : shinigamidono.xyz

Biaya dalam pengerjaan web

  • Shinigamidono.xyz = Rp.14.000,00
  • Infinityheroes.com =  Rp.130.000,00
Langkah-langkah yang dilakukan dalam mengerjakan web yang telah dikerjakan
  1. Memesan di domain niagahoster.co.id. Karena yg paling murah adalah .xyz, dan dalam asumsi domain hanya dipakai untuk belajar, maka kami memilih .xyz
  2. Karena hosting di niagahoster tersebut kemahalan, jadi kami memakai hosting sendiri di hostinger.co.id
  3. Dalam asumsi domain dan hosting akan terhubung dengan sendirinya, kami menunggu selama 4 hari. Ternyata, semua itu sia sia. 
  4. Setelah tahu tentang nameserver, kami memindahkan nameserver hosting ke nameserver domain. Setelah satu jam, ternyata berhasil.
  5. Karena domain yg tidak proporsional untuk komersial, maka kami membeli domain baru dengan nama infinityheroes.com
  6. Sama seperti shinigamidono.xyz, kami membeli di niagahoster dan hostinger.
Fitur fitur dalam website:
1. Halaman Home yg berisi kaos2 yg dijual


2. Informasi kontak yg terletak di footer web


3. Halaman kaos yg di pilih


Itulah fitur2 web kelompok saya.

2. Program Pendek Monitoring Praktikum


Login.php



<?php    
   $dbserver='localhost';    
   $dbname='ETS';    
   $dbuser='root';    
   $dbpass='';    
   $conn=mysqli_connect($dbserver,$dbuser,$dbpass,$dbname);    
   if(!$conn) {    
     die("Gagal " . mysqli_connect_error());    
   }    
  ?> 
2. Membuat form login


<html>   
  <head>   
    <title>LOGIN</title>   
  </head>   
  <style>   
    div {   
   background-color: lightgreen;   
   width: 200px;   
   padding: 10px;   
   margin: 10px;   
  }   
  </style>   
  <body>   
  <div>   
  <form>   
    Username : <input type = 'text' name = 'username'> <br> <br>   
    Password : <input type = 'password' name = 'password'> <br><br>   
    <input type = 'button' value = 'Login'>   
  </form>   
  </div>   
  </body>   
  </html> 



3. Tampilkan data.php

 <!DOCTYPE html>   
  <html>   
  <head>   
    <title>Tampilkan Data</title>   
  </head>   
  <body>   
  <h1>Daftar Mata Praktikum dan Jumlah Praktikan</h1>   
    <table border="1" cellpadding="3" cellspacing="0">   
       <tr>   
         <th>No.</th><th>Kode</th><th>Mata Praktikum</th><th>Jumlah Praktikum</th>   
       </tr>   
       <?php   
         mysql_connect("localhost", "root", "");   
         mysql_select_db("monitoring_praktikum");   
         $sql = mysql_query("select * from praktikum");   
         if(mysql_num_rows($sql)==0)   
         {   
            echo '<tr><td colspan="4">tidak ada data!</td></tr>';   
         }   
         else   
         {   
            $no = 1;   
            while($data = mysql_fetch_assoc($sql))   
            {   
              echo '   
              <tr>   
                 <td>'.$no.'</td>   
                 <td>'.$data['kode_mk'].'</td>   
                 <td>'.$data['nama_mk'].'</td>   
                 <td>'.$data['jumlah_praktikan'].'</td>   
              </tr>   
              ';   
              $no++;   
            }   
         }   
       ?>   
    </table>   
       <br><input style = "text-align: right" type = 'button' value = 'Tambah Data MK'>   
  </body></html> 






Kamis, 10 Maret 2016

Highway to 10k LOC...!

Halo? Apa Kabar?
Baik? Oke, saya juga. Lama enggak nulis entri.

Kali ini saya ingin mempamerkan perjuangan saya menulis 10.000 Line of Code! Wow. Wow. Wow.
Anda merasa itu banyak?
Iya, saya juga. Tapi jika sesuatu dikerjakan sedikit demi sedikit, pun akan menjadi hal yang besar juga akhirnya.

Line of Code yang saya tulis disini adalah mengani codingan PHP.  Jadi, nyalakan Xampp kalian, dan kalian akan bisa mencoba semua yg saya tulis disini.

Oke. Pertama- tama, untuk mengoding PHP, anda bisa menggunakan notepad++, bracket, geany, dll. Pokoknya bisa ditulis sih.
Lalu ketiklah seperti dibawah:

<html>
<head>
<title> Variable</title>
</head>
<body>
<?php
$nilai_1 = 10;
$nilai_2 = 3;
$nilai_3 = 2 * $nilai_1 + 8 * $nilai_2;
echo "nilai = ", $nilai_3;
echo "<br>";
$jumlah = $nilai_1+$nilai_2;
echo "hasil dari $nilai_1+$nilai_2 adalah : $jumlah";
echo "<br><br>";
echo "\"nama: nama Anda\" <br>";
echo "no. mhs: nrp Anda"
?>
</body>
</html>

Code diatas berfungsi untuk mengeluarkan variable nilai_3 yang isinya = (nilai_1*2) +(8*nilai_2) dan mengeluarkan juga nilai_1+nilai_2. Hasilnya kira kira seperti ini:

Begitu... Ingin mencoba lagi? Oke.
Mari kita kuak lebih dalam lagi.

Code selanjutnya ini, kita telah menggunakan array, dan bagaimana menggabungkannya pada saat echo.

<html>
 <head>
  <title>Pemrograman PHP dengan Array</title>
 </head>
 <body>
  <?php
   $nama[]="Isabella";
   $nama[]="Affan";
   $nama[]="desty";
 
   echo $nama[1] , $nama[2] , $nama[0];
   echo "<br>";
 
   $kampus[1]="ITS";
   $kampus[2]="Surabaya";
   echo "kampusku adalah $kampus[1]
   $kampus[2]";
  ?>
 </body>
</html>

Code diatas akan mengeluarkan hasil seperti ini.
Yap. Begitulah cara penggabungan array dan cara meng-echo nya.
Masih kurang code?
Cukup?
Wah, tapi saya mau berbagi satu lagi code PHP dibawah ini.

<html>
 <head>
  <title> Struktur Control IF </title>
 </head>

 <body>
  <?php
   $nilai1 = 4;
   $nilai2 = -7;
   if($nilai1 > $nilai2)
    echo "$nilai1 Lebih besar dari $nilai2";
   else echo "$nilai1 Lebih kecil dari $nilai2";
  ?>
 </body>
</html>

Code diatas mengenai IF dan cara menggunakannya. Disana, IF digunakan untuk membandingkan nilai antara dua variable.
Hasilnya kalau dibuka:
Well, seperti itulah.
Tidak terasa kita telah menulis 3 code.
Sebentar, mari kita hitung.
Wow, telah ditulis 51 LOC!
Masih panjang rupanya perjalanan kita!
Tapi tidaklah apa apa.
Karena seperti kata Pak Fajar:
"Kekuatan besar, membawa tanggung jawab yang besar juga"
Eh, bukan itu.
"Programmer harus membiasakan dirinya terbiasa dengan mengoding dulu, Karena setelah terbiasa, dirinya akan lebih mudah dalam membuat program programnya nanti"
Oke, mungkin Pak Fajar tidak berkata seperti itu, saya lupa soalnya.
Terima kasih. Sekian saja entri kali ini. Selamat pagi....


Minggu, 29 November 2015

FUSE FUSE

Halo kawan kawan sekalian, kali ini saya akan membagikan pengetahuan tentang FUSE.

FUSE ( Filesystem in userspace ) adalah suatu mekanisme sistem operasi untuk meng-export filesistem yang bersifat virtual kedalam kernel Linux.

Fuse memiliki fungsi seperti
- Library API yang simpel
- Mudah diinstal
- Bisa dipakai oleh semua user baik root maupun bukan.
- Efisien dan stabil

Bagaimana cara kerjanya?
FUSE kernel modul dan FUSE library akan berkomunikasi dengan pendeskriptor spesial yang bisa didapatkan dengan  membuka /dev/fuse. File ini dapat dibuka berulang kali dan pendeskriptor akan dimasukkan ke mount syscall.

Langsung aja ya aku kasih kodingannya....

#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <sys/statfs.h>

static const char *dirpath = "/home/ncc/Documents";

static int xmp_getattr(const char *path, struct stat *stbuf)
{
 int res;
 char fpath[1000];
 sprintf(fpath,"%s%s",dirpath,path);
 res = lstat(fpath, stbuf);

 if(res == -1)
 {
  return -errno;
 }

 return 0;
}

static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
 char fpath[1000];
 if(strcmp(path,"/") == 0)
 {
  path=dirpath;
  sprintf(fpath,"%s",path);
 }
 else sprintf(fpath, "%s%s",dirpath,path);
 int res = 0;
 DIR *dp;
 struct dirent *de;
 dp = opendir(fpath);
 if(dp==NULL)
 {
  return -errno;
 }
 while((de = readdir(dp))!=NULL)
 {
  res = filler(h, de->d_name, de->d_type);
  if(res!=0) break;
 }
 closedir(dp);
 return res;
}

static struct fuse_operations xmp_oper =
{
 .getattr = xmp_getattr,
 //.readlink = xmp_readlink,
 .getdir = xmp_getdir,
 //.mknod = xmp_mknod,
 //.mkdir = xmp_mkdir,
 //.symlink = xmp_symlink,
 //.unlink = xmp_unlink,
 //.rmdir = xmp_rmdir,
 //.rename = xmp_rename,
 //.link = xmp_link,
 //.chmod = xmp_chmod,
 //.chown = xmp_chown,
 //.truncate = xmp_truncate,
 //.utime = xmp_utime,
 //.open = xmp_open,
 //.read = xmp_read,
 //.write = xmp_write,
 //.release = xmp_release,
 //.fsync = xmp_fsync,
 //.readdir = hello_readdir
};

int main(int argc, char *argv[])
{
 return fuse_main(argc, argv, &xmp_oper);
}



Itu dia kodingannya. Kodingan diatas hanya sebuah cara untuk mengetes FUSE anda. Selamat mencoba!

Sabtu, 07 November 2015

Tentang Thread, Thblue, dan Kehidupan


Oke, thblue itu gak ada. Saya ngarang itu, maaf.

Kali ini akan dijelaskan sekali lagi oleh saya mengenai Thread. Apa itu Thread?
Jika Proses diidentifikasi dengan prosess id atau PID, maka Thread diidentifikasi dengan TID atau Thread ID. Jadi kalo  thread dan proses digabung, mungkin akan menjadi TIPI. Wow.


Thread adalah suatu bagian kecil dari proses yang dijadwalkan oleh operasi. Jadi dalam artian, pada setiap proses, bisa terdapat banyak thread, dan threadnya pun bermacam macam.
Dalam suatu proses, biasanya ada dua macam thread, yaitu:
a. Single Thread : Dalam satu proses hanya punya satu thread.
b. Multi Thread : Dalam satu proses punya dua atau lebih thread. Hal ini membuat proses lebih cepat menjalankan programnya nanti.

Nah....
Dalam linux, perintah untuk membuat suatu thread direpresentasikan dengan perintah "pthread_t".
Algoritma fungsinya sepertin ini --> int pthread_equal(pthread_t tid1, pthread_t tid2);
Lha dalam program anda sekalian,  jangan lupa di include pthread.h diatas atau sebagian perintah thread tidak akan berjalan.

Dalam kasus lain, ada kalanya suatu thread ingin mengetahui TID nya sendiri.
Nah, fungsi
pthread_t pthread_self(void)
bisa menyelesaikan kasus itu. Uda kayak detektif aja dia.

Langsung aja saya akan mencontohkan (mencopaskan sebenarnya) suatu kodingan bagaimana membuat thread yang simple.


#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2];

void* doSomeThing(void *arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();

    if(pthread_equal(id,tid[0]))
    {
        printf("\n First thread processing\n");
    }
    else
    {
        printf("\n Second thread processing\n");
    }

    for(i=0; i<(0xFFFFFFFF);i++);

    return NULL;
}

int main(void)
{
    int i = 0;
    int err;

    while(i < 2)
    {
        err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]", strerror(err));
        else
            printf("\n Thread created successfully\n");

        i++;
    }

    sleep(5);
    return 0;
}
Nah, yang pthread_create() itu fungsinya untuk membuat thread kan.
Di dalam fungsi doSomething, threadnya make pthread_self dan pthread_equal untuk mengidentifikasi dirinya apakah dia thread kesatu atau kesasar. Eh, kedua maksudnya.
Kalo loop yang didalam doSomething itu untuk membuat waktu memakan kerja?? (time consuming work apa artinya sih?).
Pokoknya untuk membuat fungsi itu berjalan agak lama sehingga seakan akan memutuhkan waktu sedikit, halah. Kalo loop dihilangkan biasanya tidak akan mengefek pada threadnya.

Nah itu dia. Tidak terasa waktu sudah berjalan agak lama. Cukup lelah saya menjelaskan panjang lebar tentang hal ini dan itu tentang Thread ini.
Ya cukup sekian artikel saya tentang thread, semoga berikutnya saya bisa menjelaskan hal lainnya lagi. Terimakasih.




Sabtu, 17 Oktober 2015

Tentang Daemon, temennya Doraemon.

Sekali lagi, saya mendapatkan gejolak hati yang dalam untuk membagikan ilmu saya tentang bash script.

Kali ini, akan dibahas proses daemon.

Apa itu daemon? Ya bentar,ini katanya mau dibahas.

Daemon adalah proses yang bekerja pada background dan tidak berinteraksi langsung dengan user melalui standar input output.

Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat lama dan bertugas menerima request dan menjalankan responsnya. 
Contoh dari daemon ini misalnya adalah Apache Web Server HTTP daemon. Daemon ini bekerja pada background dan menerima request HTTP pada port tertentu (biasanya 80 atau 8080) dan memberikan respon terhadap request tersebut, berdasarkan tipe dari request tersebut.

Adapun hal-hal yang membedakan daemon dengan proses lainnya adalah: daemon tidak memiliki parent proses ID, daemon tidak memiliki pengontrol baik itu STDOUT, STDIN, maupun STDERR, dan daemon berjalan dalam previlege super user.

Apa itu parent proses ID? Apa itu STDOUT,STDIN,dan STDERR? 
Pertanyaan yang bagus kawan.

Ini saya copasin lagi. 
PID adalah Berupa angka-angka yang dipakai dalam beberapa sistem operasi untuk mengindetifikasikan sebuah proses.
PPID adalah Merupakan PID yang bersifat Private, atau PID yang tidak langsung ditampilkan. Mengetahui parent process.
Child Proses merupakan sebuah proses yang diciptakan dari sebuah proses yang lain (parent process). Child process mewarisi atribut-atribur dari parent process seperti membuka file dari parent proses. Sebuah child process sebenarnya dibuat menggunakan fungsi fork() sebagai salinan dari parent processnya.
Parent Process merupakan proses yang telah menciptakan beberapa buah proses anak. Proses ini tercipta ketika mengeksekusi fungsi fork(), kemudian hasil dari pemggilan fork tersebut akan menciptakan beberapa child process.
Zombie Process terjadi karena adaanya child process yang di exit namun parrent processnya tidak tahu bahwa child process tersebut telah di terminate, misalnya disebabkan karena putusnya network. Sehingga parent process tidak merelease process yang masih digunakan oleh child process tersebut walaupun process tersebut sudah mati.

STDIN adalah file handle yang membuat proses/program yang kamu buat membaca informasi dari user.
STDOUT membuat proses/program yang kamu buat ini bisa mengeluarkan informasi.
STDERR berfungsi untuk mengeluarkan error message dari program/proses yang dibuat.

Oke, bagaimana cara mbuat daemon kalo gitu? 
.....Sungguh merepotkan sekali dirimu,kawan. Oke saya jelasin juga.
Ada beberapa proses untuk membuat daemon.
a. Forking dan pembunuhan Proses induk.
Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai sehingga akan kembali ke terminal user. Dari langkah tersebut kita akan mendaptkan sebuah proses anak yang melanjutkan program setelah induknya mati, sehingga kita mendapatkan sebuah proses yang hampir bekerja pada backround.
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
b. Membuat proses bekerja secara independen
Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(), sehingga proses akan mendapatkan sebuah session ID yang baru.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
c. Menutup standar I/O deskriptor yang diwarisi
Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR (standar error).
Contoh:
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
d. Melakukan masking pada File Creation
Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan mencegah file-file previleges yang tidak aman dalam setiap pembuatan file.
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0); 
e. Running Directory
Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat starting working directorynya pada saat itu berada pada user home. Karena daemon bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di unmount.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
if((chdir(“/home/assassin/modul2/shift2.1/”)) < 0)
{
exit(EXIT_FAILURE);

f. Membuat Loop Utama
Daemon bekerja terus menerus sehingga diperlukan loop yang berfungsi.
Contoh :
while (1){
           sleep(30);
}
exit(EXIT_SUCCESS);

Nah, itu dia. Saya capek copas terus. Oiya, sumber-sumbernya dari:
MODUL_02 bit.ly/pendahuluansisop2015
http://xvongola.blogspot.co.id/2011/12/daemon-dan-konfigurasi-proses-di-linux.html

Tadi itu nyopas semua? Ea, tau gitu gak kesini...
Yaudaaa keluaaarrr sana monyeet!

Sekian ilmu yang saya bagikan. Terimakasih semua. Love you all.

Peephole

                  Seorang gadis berusia 15 tahun yang bernama Donna, ia tinggal bersama ayahnya di sebuah rumah kecil di pinggiran kota. Sejak ibunya meninggal, Donna hidup dan bergantung pada ayahnya untuk kehidupanya.

                   Suatu hari, Ayah Donna pergi ke luar kota untuk mengurus sebuah bisnis pekerjaanya. Di saat mereka sedang sarapan pagi bersama, ia mengatakan bahwa ia akan pulang larut malam.

                  Hari itu, ketika Donna pulang dari sekolah, dia mulai menyelesaikan beberapa pekerjaan rumahnya dan langsung menonton TV di kamarnya. Pada tengah malam, Ayahnya masih belum pulang ke rumah sehingga dia memutuskan untuk pergi ke kamarnya dan tidur. 

                  Malam itu dia bermimpi, bahwa dia sedang berdiri di tepi jalan raya yang sangat ramai, mobil dan truk melesat dengan cepat dan dia khawatir akan tertabrak, saat itu dia memandang ke seberang jalan raya dan melihat sosok yang ia kenali sedang berdiri di sisi jalan, sosok yang ia kenali itu adalah Ayahnya.

                  Saat itu ia memandang Ayahnya tampak sedang sedih, dia dapat melihat wajah Ayahnya merona merah dan kedua mata ayahnya mengeluarkan air mata, sepertinya dia tampak sedang putus asa dan mencoba untuk menyampaikan sesuatu padanya. 

Tiba-tiba, Donna terbangun dari mimpinya oleh suara aneh di luar pintu rumahnya.
Tap... Tap... Tap...
Ia mendengar suara langkah kaki seseorang tepat di depan pintunya.
Kemudian seseorang di depan pintu membunyikan sebuah bel di pintu.

Dia mengintip melalui lubang intip di pintunya, dia melihat ke luar tampak wajah Ayahnya, dan Ayahnya menatap langsung ke arahnya, bel pintu itu berdering terus menerus.
"Oke, tunggu! Aku akan buka pintunya!", teriaknya.
Dia melihat melalui sebuah lubang intip di pintunya lagi. Dia melihat wajah Ayahnya dengan sebuah ekspresi yang sangat tidak normal, kedua matanya tampak terbuka lebar dan dia tampak sedang ketakutan. 

"Ayah? Apakah Ayah lupa membawa kunci cadangan rumah?"
''Cring cring cring''. Suara bel pintu kembali terdengar.
"Ayah! Apakah ada orang lain bersamamu di luar sana?", teriak gadis itu, 
''Cring cring Cring'', Bel itu kembali terdengar namun tak ada jawaban dari seorang pun di luar rumah.
"Aku tidak akan membuka pintu sampai Ayah mengatakan sesuatu padaku!", Teriak gadis itu.

Bel pintu itu berdering dan terus berdering, tetapi tidak ada jawaban sama sekali dari Ayahnya di luar sana.
Selama semalaman, gadis yang ketakutan itu meringkuk di sudut lorong, dia sungguh tak berdaya mendengarkan suara dering bel pintu tanpa henti-hentinya, dan bel itu berbunyi berlangsung selama berjam-jam. Akhirnya sang gadis itupun terlelap.
Saat pagi tiba, ia terbangun dari tidurnya dan mulai merasa tenang di pikiranya, dia langsung pergi ke ruang tamu dan ia mulai merayap ke pintu, ia mencoba melihat melalui sebuah lubang intip di pintu.
Ayahnya masih ada di sana, dan dia tetap menatapnya dalam ekspresi yang tidak normal. Saat itu, ia hati-hati membuka pintu dan saat pintu terbuka dia langsung di hadapkan oleh pemandangan yang sangat mengerikan.
Kepala ayahnya tergantung dari paku yang berada di atas pintu. Ada sebuah catatan yang melekat di bel pintu.
"Gadis Pintar!"......