Memaparkan catatan dengan label ruby. Papar semua catatan
Memaparkan catatan dengan label ruby. Papar semua catatan

5 Mac 2019

Ruby sort_by dan uniq

Assalamualaikum


Katakan kita ada satu array

students
[
    [0] {
                   :id => 1,
             :staff_no => "A2123",
                 :name => "Ahmad Aaron",
                :phone => "2932-233-3333",
        :registered_at => "2019-12-11 12:22:22"
    },
    [1] {
                   :id => 2,
             :staff_no => "A2123",
                 :name => "Bustaman Baharun",
                :phone => "1223-231-2222",
        :registered_at => "2019-11-21 12:22:22"
    },
    [2] {
                   :id => 3,
             :staff_no => "A3123",
                 :name => "Charlie Chaplin",
                :phone => "4554-344-5554",
        :registered_at => "2018-02-16 12:22:22"
    },
    [3] {
                   :id => 4,
             :staff_no => "A2523",
                 :name => "Daruma Dorayaki",
                :phone => "5667-665-6655",
        :registered_at => "2017-06-14 12:22:22"
    },
    [4] {
                   :id => 5,
             :staff_no => "A4523",
                 :name => "Edward Elrick",
                :phone => "8778-223-9988",
        :registered_at => "2017-01-22 12:22:22"
    },
    [5] {
                   :id => 6,
             :staff_no => "A4623",
                 :name => "Frank Frederick",
                :phone => "2443-544-3445",
        :registered_at => "2017-01-22 11:01:23"
    },
    [6] {
                   :id => 7,
             :staff_no => "A2567",
                 :name => "Goro Gokurojo",
                :phone => "5667-665-6255",
        :registered_at => "2017-06-14 14:12:11"
    }
]

Bagaimana cara untuk kita susun (sort) berdasarkan tarikh dan bukan tarikh masa menggunakan Ruby? kita guna guna sort_by

students.sort_by{|s|s[:registered_at]}
[
    [0] {
                   :id => 6,
             :staff_no => "A4623",
                 :name => "Frank Frederick",
                :phone => "2443-544-3445",
        :registered_at => "2017-01-22 11:01:23"
    },
    [1] {
                   :id => 5,
             :staff_no => "A4523",
                 :name => "Edward Elrick",
                :phone => "8778-223-9988",
        :registered_at => "2017-01-22 12:22:22"
    },
    [2] {
                   :id => 4,
             :staff_no => "A2523",
                 :name => "Daruma Dorayaki",
                :phone => "5667-665-6655",
        :registered_at => "2017-06-14 12:22:22"
    },
    [3] {
                   :id => 7,
             :staff_no => "A2567",
                 :name => "Goro Gokurojo",
                :phone => "5667-665-6255",
        :registered_at => "2017-06-14 14:12:11"
    },
    [4] {
                   :id => 3,
             :staff_no => "A3123",
                 :name => "Charlie Chaplin",
                :phone => "4554-344-5554",
        :registered_at => "2018-02-16 12:22:22"
    },
    [5] {
                   :id => 2,
             :staff_no => "A2123",
                 :name => "Bustaman Baharun",
                :phone => "1223-231-2222",
        :registered_at => "2019-11-21 12:22:22"
    },
    [6] {
                   :id => 1,
             :staff_no => "A2123",
                 :name => "Ahmad Aaron",
                :phone => "2932-233-3333",
        :registered_at => "2019-12-11 12:22:22"
    }
]


Bagaimana pula untuk kita elakkan dari tarikh yang sama berulang?
kita gabungkan dengan .uniq
students.sort_by{|s|s[:registered_at]}.uniq{|q| q[:registered_at].to_date}
[
    [0] {
                   :id => 6,
             :staff_no => "A4623",
                 :name => "Frank Frederick",
                :phone => "2443-544-3445",
        :registered_at => "2017-01-22 11:01:23"
    },
    [1] {
                   :id => 4,
             :staff_no => "A2523",
                 :name => "Daruma Dorayaki",
                :phone => "5667-665-6655",
        :registered_at => "2017-06-14 12:22:22"
    },
    [2] {
                   :id => 3,
             :staff_no => "A3123",
                 :name => "Charlie Chaplin",
                :phone => "4554-344-5554",
        :registered_at => "2018-02-16 12:22:22"
    },
    [3] {
                   :id => 2,
             :staff_no => "A2123",
                 :name => "Bustaman Baharun",
                :phone => "1223-231-2222",
        :registered_at => "2019-11-21 12:22:22"
    },
    [4] {
                   :id => 1,
             :staff_no => "A2123",
                 :name => "Ahmad Aaron",
                :phone => "2932-233-3333",
        :registered_at => "2019-12-11 12:22:22"
    }
]
jadi.. untuk hanya memaparkan tarikh pendaftaran dalam satu array yang panjang, kita gabungkan sekali lagi dengan map


students.sort_by{|s|s[:registered_at]}.uniq{|q| q[:registered_at].to_date}.map{|c| c[:registered_at].to_date}
[
    [0] Sun, 22 Jan 2017,
    [1] Wed, 14 Jun 2017,
    [2] Fri, 16 Feb 2018,
    [3] Thu, 21 Nov 2019,
    [4] Wed, 11 Dec 2019
]

20 Feb 2019

Ruby on Rails: Tambah kolum dan tambah data untuk kolum tersebut dalam satu fail migrasi

Assalamualaikum

apabila kita isytiharkan satu migrasi(migration) untuk mengubah jadual(table) di pangkalan data(db), maka perlu diingat, selepas migrasi menambah medan(column) baru pada jadual, sistem dalam proses bekalang masih lagi menyimpan maklumat jadual sebelum ditambah medan. Oleh itu kita perlu kemaskini proses latar belakang dengan arahan :


Model.reset_column_information

sebagai contoh, katakan kita ada jadual customers, dan movies yang masing-masing menyimpan data pelanggan dan filem. Kita juga ada satu lagi jadual rented_movies yang akan menyimpan makluman pinjaman filem oleh pelanggan.

Kita ingin menambah id filem ke dalam jadual rented_movies ini untuk rujukan kepada jadual movies yang akan menunjukkan pelanggan telah meminjam filem yang mana satu.


 class AddMovieIdToRentedMovie < ActiveRecord::Migration
  def self.up
      add_column :rented_movies, :movie_id, :integer, after: :user_id,  index: true, null: false
      begin
        RentedMovie.reset_column_information
        Rake::Task['db:seed:movie_id_on_rented_movie'].invoke
      rescue Exception=>e
        remove_column :rented_movies, :movie_id
        raise "error #{e}"
    end
  end

  def self.down
    remove_column :rented_movies, :movie_id
  end
end


Dalam contoh ini, aku dah siapkan skrip untuk seed jadual dalam satu rake:task dan aku hanya perlu memanggil task tersebut dari sini.

arahan ini akan menjadikan proses belakang mengemaskini maklumat jadual rented_movies dengan sebarang perubahan yang telah berlaku dan seterusnya membolehkan seed berjaya dilakukan menggunakan medan yang baharu ditambah.

RentedMovie.reset_column_information

15 Dis 2016

Load Balancing dengan Nginx dan Puma

Load Balancing dengan Nginx dan Puma


Tutorial ini adalah sangat ringkas hanya untuk menunjukkan kebolehan nginx sebagai load balancer yang dapat menjadi 'orang tengah' antara banyak server di belakangnya

Keperluan

1. Paling kurang 2 server aplikasi
2. Satu server diinstall nginx


Contoh Persekitaran yang sekarang


1. server1:
os: debian
application: ruby on rails
web server : puma
dns : myaplication1.yusdirman.com

2. server2: myaplication2.yusdirman.com
os:debian
application: ruby on rails
web server : puma
dns : myaplication1.yusdirman.com

3. nginx diinstall di server1


/ets/nginx/nginx.conf setup (default):

worker_processes  2;
worker_processes  auto;
worker_rlimit_nofile 65536;

error_log  logs/error.log  notice;
error_log  logs/error.log  info;

events {
  worker_connections  65536;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout  65;

  gzip on;
  gzip_min_length 1000;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  include /etc/nginx/sites-enabled/*;
}



/etx/nginx/sites-available/myapplication.yusdirman.com.conf


upstream myapplication {
  server myapplication1.yusdirman.com fail_timeout=0; #localhost
  server myapplication2.yusdirman.com fail_timeout=0; #remote1
#server myapplication3.yusdirman.com fail_timeout=0; #remote2
#server myapplication4.yusdirman.com fail_timeout=0; #remote3

}

server {
  listen myapplication.yusdirman.com:80;
  server_name myapplication.yusdirman.com;

  location /{
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://myapplication;

    # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
    proxy_http_version 1.1;

    proxy_set_header Connection "";
  }

  access_log /var/log/nginx/myapplication.access.log;
  error_log /var/log/nginx/myapplication.error.log debug;

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}


bina 'soft-link' antara /etc/nginx/sites-available ke /etc/nginx/sites-enabled/


ln -s /etc/nginx/sites-avaliable/myapplication.yusdirman.com.conf /etc/nginx/sites-enabled/


Larikan aplikasi di setiap server


server myapplication1.yusdirman.com


cd /home/diman/myapplication
#puma telah disetkan sebagai default webserver
rails server -e production -b myapplication1.yusdirman.com -d 


server myapplication2.yusdirman.com


cd /home/diman/myapplication
#puma telah disetkan sebagai default webserver
rails server -e production -b myapplication2.yusdirman.com -d 


Mulakan nginx di server1 (tempat diinstall)


sudo service nginx start 

atau

sudo service nginx restart 



Nginx Load Balancing

Teknik-teknik Load Balancing dengan nginx

default: round robin
keterangan: bergilir-gilir. Capaian pertama akan ke server pertama. Capaian kedua akan ke server seterusnya

1. least_conn
keterangan: capaian akan ke server yang paling kurang akses

upstream backend {
    least_conn;

    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down; 
}

nota: tandakan 'down' untuk server yang tidak digunakan/dibaiki.

2. ip_hash
keterangan: ditentukan oleh alamat ip klien. Akses dari IP yang sama akan ke server dengan IP yang berdekatan.

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
}

3. hash
keterangan: bergantung kepada kod kunci daripada klien

upstream backend {
    hash $request_uri consistent;

    server backend1.example.com;
    server backend2.example.com;
}

4. Pemberat
keterangan: tetapkan pemberat untuk server. Jika ada 7 akses, 5 akses akan ke server backend1 dan  1 ke backend2 dan 1 ke backend3.

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com;
}


Sekian dahulu.



17 Nov 2016

Git dan Projek Aplikasi

Assalamualaikum

Mari kita terus fokus kepada pembangunan aplikasi. Senario ini biasanya berlaku dalam sesebuah jabatan yang bertanggungjawab membina aplikasi untuk organisasi atau pelanggan.


Pasukan JuruProgram


Beberapa juruprogram yang membina aplikasi yang sama akan berkongsi-kongsi kodprogram mereka samada secara online menggunakan cloud ataupun bertukar-tukar peranti storan mudah alih (ada yang buat gitu lagi ke?). Namun secara idealnya, setiap juruprogram akan menulis kod untuk modul yang berbeza bagi satu-satu aplikasi. 

Jika seorang juruprogram yang ditugaskan untuk membina fungsi tertentu, maka dia akan memeras otaknya untuk mengeluarkan idea. Biasanya dengan meminum kopi pekat sikit. Selepas itu maka diapun berjaya mengeluarkan 3 kaedah atau idea bernas untuk membina fungsi tersebut. Maka, dia akan membuat 3 salinan dan menamakan setiap salinan itu dengan nama yang berbeza-beza. Koding ditulis dan diuji satu persatu. Ketiga-tiga salinan tersebut berjaya dibina dan selepas dinilai oleh bos beliau, salah satu salinan tadi akan disalin kedalam salinan asal dan dimuatnaik semula ke server cloud.

Sangat-sangat praktikal kan? Namun, banyak masalah yang mungkin timbul dengan cara ini jika sekiranya sesuatu yang tidak diingini berlaku selepas salinan utama telah ditambah dengan kod baru. Mungkin terdapat bug yang tidak terlihat sebelum ini. Maka kita terpaksa menyelesaikan dengan seberapa segera masalah tersebut sekiranya sistem telah sedia digunakan. Ataupun, untuk setiap versi (penambahan kod) salinan utama tadi, setiapnya disimpan salinan secara berasingan dan diberikan nama yang unik dan tarikh kemaskini dan dilakukan oleh siapa. Banyangkan kita bekerja dengan 10 orang juruprogram yang sedang membangunkan aplikasi yang sama. Dalam sehari, mungkin setiap juruprogram akan meminta untuk kodprogram mereka dinilai dan dimasukkan kedalam salinan utama. 

Situasi itu sangat-sangat(SANGAT) seram untuk digambarkan.

Untuk menyelesaikan masalah ini (memudahkan) kaedah pembangunan aplikasi secara berkumpulan inilah timbulnya Git.

Dengan git, setiap juruprogram dapat membuat salinan daripada repositori utama dengan arahan:

git clone [alamat repositori]

git clone akan menyalin bukan sahaja semua fail daripada repo, bahkan juga setiap perubahan yang telah dilakukan, tarikh dan masa perubahan itu dilakukan, nama dan emel orang yang melakukan perubahan itu dan apa yang diubah. Selepas kita clone suatu repo daripada server (konsep cloud juga), juruprogram akan mendapat salinan yang 100% sama dengan apa yang ada dalam repositori utama.

contoh dibawah adalah cara untuk kita clone salah satu repo daripada github:

$\> git clone https://github.com/mischa78/boxroom.git
Cloning into 'boxroom'...
remote: Counting objects: 2995, done.
remote: Total 2995 (delta 0), reused 0 (delta 0), pack-reused 2995
Receiving objects: 100% (2995/2995), 719.42 KiB | 207.00 KiB/s, done.
Resolving deltas: 100% (1529/1529), done.
Checking connectivity... done.

Selepas arahan ini dilaksanakan, kesemua fail daripada github itu akan berada dalam komputer kita. 
(jangan risau, repo dalam github ini kesemuanya adalah opensource)

Dengan memiliki kesemua fail yang sama dengan apa yang ada dalam repositori utama, dan ianya disalin menggunakan Git, salinan dalam komputer kita itu juga merupakan satu repositori.


Repositori di Server dipanggil Remote.
Remote Server yang pertama sekali kita clone dinamakan Origin

Arahan untuk melihat Remote Server:


$\> git remote -v
origin https://github.com/mischa78/boxroom.git (fetch)

origin https://github.com/mischa78/boxroom.git (push)
Jadi, bagaimana untuk mula menulis kod? Kena buat salinan asing ke?

Git didatangkan dengan fungsi Branching. Sama seperti kita membuat salinan kogprogram, namun dengan lebih tersusun. Kita boleh membuat beberapa branch serentak sekiranya kita ada banyak idea untuk menyelesaikan satu-satu tugas.


Arahan untuk mencipta branch baru 

$\> git checkout -b add_staff_module_yusdirman
        Switched to a new branch 'add_staff_module_yusdirman'

Biasanya, apabila kita membina aplikasi beramai-ramai, kita akan tandakan branch yang kita bina itu dengan nama sendiri supaya mudah dikenalpasti nanti. 

Dari sini, tulislah kodprogram anda. simpan dan uji.

Jika dah berjaya. Commit. ...?

Dalam pengurusan kodprogram menggunakan git, setiap perubahan yang telah dibuat perlu diisytiharkan dan kemudian disahkan pula dengan menggunankan arahan git add dan git commit

Pada ketika ini, bagi sesiapa yang belum pernah menggunakan mana-mana pengurusan kodprogram sebelum ini, termonologi ini adalah sangat asing.

Git mempunyai 3 peringkat dalam setiap perubahan kod aturcara.

1. bersih (clean)

2. ada perubahan, belum dipentaskan

3. telah dipentaskan, belum dicommit

selepas dicommit, ianya akan kembali semula ke peringkat 1: Bersih


Apakah maksud ketiga-tiga peringkat ini?

1. Bersih: tiada apa-apa perubahan berlaku pada kod program. 

2. Belum dipentaskan (unstage) : terdapat perubahan pada fail. namun belum diisytiharkan untuk dimasukkan kedalam repositori

3. Telah dipentaskan (staged) tapi belum dicommit  : fail-fail yang berubah telah dikenalpasti untuk dimasukkan kedalam repo. 

Setelah juruprogram pasti dengan perubahan tersebut, dia hanya perlu commit sahaja kodprogram. Maka satu bab atau titik perbatuan telah direkodkan dalam log pembangunan aplikasi ini dan segala perubahan yang dilakukan juga direkodkan.

Mari saya tunjukkan contoh:

 selepas membina branch baru, saya telah memasukkan fail dan kod baru ke dalam aplikasi ini.

saya boleh melihat status perubahan dengan :
$\> git status
On branch add_staff_module_yusdirman
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)
modified:   config/routes.rb
Untracked files:
  (use "git add ..." to include in what will be committed)
app/assets/javascripts/staffs.coffee
app/assets/stylesheets/scaffolds.scss
app/assets/stylesheets/staffs.scss
app/controllers/staffs_controller.rb
app/helpers/staffs_helper.rb
app/models/staff.rb
app/views/staffs/
db/migrate/20161116180542_create_staffs.rb
test/controllers/
test/fixtures/staffs.yml
test/models/
no changes added to commit (use "git add" and/or "git commit -a")
Apabila arahan git status dimasukkan, setiap perubahan akan tersenarai. 

Status "Changes not staged for commit" merujuk kepada perubahan yang telah kita lakukan (telah save) namun masih belum dipentaskan untuk dicommit.

Cara untuk pentaskan fail (staging)

$\> git add [nama fail] : untuk pilih fail mana yang akan dipentaskan (stage)
atau

$\> git add . : semua perubahan pada semua fail dipentaskan

selepas itu, status fail tadi akan berubah

$\> git status
On branch add_staff_module_yusdirman
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
new file:   app/assets/javascripts/staffs.coffee
new file:   app/assets/stylesheets/scaffolds.scss
new file:   app/assets/stylesheets/staffs.scss
new file:   app/controllers/staffs_controller.rb
new file:   app/helpers/staffs_helper.rb
new file:   app/models/staff.rb
new file:   app/views/staffs/_form.html.erb
new file:   app/views/staffs/edit.html.erb
new file:   app/views/staffs/index.html.erb
new file:   app/views/staffs/new.html.erb
new file:   app/views/staffs/show.html.erb
modified:   config/routes.rb
new file:   db/migrate/20161116180542_create_staffs.rb
new file:   test/controllers/staffs_controller_test.rb
new file:   test/fixtures/staffs.yml
new file:   test/models/staff_test.rb

Status "Changes to be committed" menunjukkan kesemua fail yang tersenarai itu akan dimasukkan kedalam repositori.


langkah seterusnya adalah melarikan arahan git commit

$\> git commit -m "create scaffold for staff to integrate existing staff table with boxroom for user session"
[add_staff_module_yusdirman 5368f32] 
create scaffold for staff to integrate existing staff table with boxroom for user session
 16 files changed, 326 insertions(+)
 create mode 100644 app/assets/javascripts/staffs.coffee
 create mode 100644 app/assets/stylesheets/scaffolds.scss
 create mode 100644 app/assets/stylesheets/staffs.scss
 create mode 100644 app/controllers/staffs_controller.rb
 create mode 100644 app/helpers/staffs_helper.rb
 create mode 100644 app/models/staff.rb
 create mode 100644 app/views/staffs/_form.html.erb
 create mode 100644 app/views/staffs/edit.html.erb
 create mode 100644 app/views/staffs/index.html.erb
 create mode 100644 app/views/staffs/new.html.erb
 create mode 100644 app/views/staffs/show.html.erb
 create mode 100644 db/migrate/20161116180542_create_staffs.rb
 create mode 100644 test/controllers/staffs_controller_test.rb
 create mode 100644 test/fixtures/staffs.yml
 create mode 100644 test/models/staff_test.rb 

Untuk git commit, kita perlu masukkan komen (wajib)

komen ini bertujuan untuk memberitahu orang lain apa yang kita lakukan pada perubahan itu.


Saya rasa, sampai disini dulu kali ini. Nanti bersambung lagi..



Download git disini:

https://git-scm.com/

tutorial juga ada dilaman tersebut.
untuk tutorial interaktif, boleh cuba disini:

https://try.github.io/

Wassalamualaikum

Git dan Projek Aplikasi

Assalamualaikum

Mari kita terus fokus kepada pembangunan aplikasi. Senario ini biasanya berlaku dalam sesebuah jabatan yang bertanggungjawab membina aplikasi untuk organisasi atau pelanggan.


Pasukan JuruProgram


Beberapa juruprogram yang membina aplikasi yang sama akan berkongsi-kongsi kodprogram mereka samada secara online menggunakan cloud ataupun bertukar-tukar peranti storan mudah alih (ada yang buat gitu lagi ke?). Namun secara idealnya, setiap juruprogram akan menulis kod untuk modul yang berbeza bagi satu-satu aplikasi. 

Jika seorang juruprogram yang ditugaskan untuk membina fungsi tertentu, maka dia akan memeras otaknya untuk mengeluarkan idea. Biasanya dengan meminum kopi pekat sikit. Selepas itu maka diapun berjaya mengeluarkan 3 kaedah atau idea bernas untuk membina fungsi tersebut. Maka, dia akan membuat 3 salinan dan menamakan setiap salinan itu dengan nama yang berbeza-beza. Koding ditulis dan diuji satu persatu. Ketiga-tiga salinan tersebut berjaya dibina dan selepas dinilai oleh bos beliau, salah satu salinan tadi akan disalin kedalam salinan asal dan dimuatnaik semula ke server cloud.

Sangat-sangat praktikal kan? Namun, banyak masalah yang mungkin timbul dengan cara ini jika sekiranya sesuatu yang tidak diingini berlaku selepas salinan utama telah ditambah dengan kod baru. Mungkin terdapat bug yang tidak terlihat sebelum ini. Maka kita terpaksa menyelesaikan dengan seberapa segera masalah tersebut sekiranya sistem telah sedia digunakan. Ataupun, untuk setiap versi (penambahan kod) salinan utama tadi, setiapnya disimpan salinan secara berasingan dan diberikan nama yang unik dan tarikh kemaskini dan dilakukan oleh siapa. Banyangkan kita bekerja dengan 10 orang juruprogram yang sedang membangunkan aplikasi yang sama. Dalam sehari, mungkin setiap juruprogram akan meminta untuk kodprogram mereka dinilai dan dimasukkan kedalam salinan utama. 

Situasi itu sangat-sangat(SANGAT) seram untuk digambarkan.

Untuk menyelesaikan masalah ini (memudahkan) kaedah pembangunan aplikasi secara berkumpulan inilah timbulnya Git.

Dengan git, setiap juruprogram dapat membuat salinan daripada repositori utama dengan arahan:

git clone

git clone akan menyalin bukan sahaja semua fai daripada repo, bahkan juga setiap perubahan yang telah dilakukan, tarikh dan masa perubahan itu dilakukan, nama dan emel orang yang melakukan perubahan itu dan apa yang diubah. Selepas kita clone suatu repo daripada server (konsep cloud juga), juruprogram akan mendapat salinan yang 100% sama dengan apa yang ada dalam repositori utama.

contoh dibawah adalah cara untuk kita clone salah satu repo daripada github:

$\> git clone https://github.com/mischa78/boxroom.git
Cloning into 'boxroom'...
remote: Counting objects: 2995, done.
remote: Total 2995 (delta 0), reused 0 (delta 0), pack-reused 2995
Receiving objects: 100% (2995/2995), 719.42 KiB | 207.00 KiB/s, done.
Resolving deltas: 100% (1529/1529), done.
Checking connectivity... done.

Selepas arahan ini dilaksanakan, kesemua fail daripada github itu akan berada dalam komputer kita. 
(jangan risau, repo dalam github ini kesemuanya adalah opensource)

Dengan memiliki kesemua fail yang sama dengan apa yang ada dalam repositori utama, dan ianya disalin menggunakan Git, salinan dalam komputer kita itu juga merupakan satu repositori.


Repositori di Server dipanggil Remote.
Remote Server yang pertama sekali kita clone dinamakan Origin

Arahan untuk melihat Remote Server:


$\> git remote -v
origin https://github.com/mischa78/boxroom.git (fetch)

origin https://github.com/mischa78/boxroom.git (push)
Jadi, bagaimana untuk mula menulis kod? Kena buat salinan asing ke?

Git didatangkan dengan fungsi Branching. Sama seperti kita membuat salinan kogprogram, namun dengan lebih tersusun. Kita boleh membuat beberapa branch serentak sekiranya kita ada banyak idea untuk menyelesaikan satu-satu tugas.


Arahan untuk mencipta branch baru 

$\> git checkout -b add_staff_module_yusdirmanSwitched to a new branch 'add_staff_module_yusdirman'
Biasanya, apabila kita membina aplikasi beramai-ramai, kita akan tandakan branch yang kita bina itu dengan nama sendiri supaya mudah dikenalpasti nanti. 

Dari sini, tulislah kodprogram anda. simpan dan uji.

Jika dah berjaya. Commit. ...?

Dalam pengurusan kodprogram menggunakan git, setiap perubahan yang telah dibuat perlu diisytiharkan fail-failnya dan kemudian disahkan pula dengan menggunankan arahan git add dan git commit

Pada ketika ini, bagi sesiapa yang belum pernah menggunakan mana-mana pengurusan kodprogram sebelum ini, termonologi ini adalah sangat asing.

Git mempunyai 3 peringkat dalam setiap perubahan kod aturcara.

1. bersih (clean)

2. ada perubahan, belum dipentaskan

3. telah dipentaskan, belum dicommit

selepas dicommit, ianya akan kembali semula ke peringkat 1: Bersih


Apakah maksud ketiga-tiga peringkat ini?

1. Bersih: tiada apa-apa perubahan berlaku pada kod program. 

2. Belum dipentaskan (unstage) : terdapat perubahan pada fail. namun belum diisytiharkan untuk dimasukkan kedalam repositori

3. Telah dipentaskan (staged) tapi belum dicommit  : fail-fail yang berubah telah dikenalpasti untuk dimasukkan kedalam repo. 

Setelah juruprogram pasti dengan perubahan tersebut, dia hanya perlu commit sahaja kodprogram. Maka satu bab atau titik perbatuan telah direkodkan dalam log pembangunan aplikasi ini dan segala perubahan yang dilakukan juga direkodkan.

Mari saya tunjukkan contoh:

 selepas membina branch baru, saya telah memasukkan fail dan kod baru ke dalam aplikasi ini.

saya boleh melihat status perubahan dengan :
$\> git status
On branch add_staff_module_yusdirman
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)
modified:   config/routes.rb
Untracked files:
  (use "git add ..." to include in what will be committed)
app/assets/javascripts/staffs.coffee
app/assets/stylesheets/scaffolds.scss
app/assets/stylesheets/staffs.scss
app/controllers/staffs_controller.rb
app/helpers/staffs_helper.rb
app/models/staff.rb
app/views/staffs/
db/migrate/20161116180542_create_staffs.rb
test/controllers/
test/fixtures/staffs.yml
test/models/
no changes added to commit (use "git add" and/or "git commit -a")
Apabila arahan git status dimasukkan, setiap perubahan akan tersenarai. 

Status "Changes not staged for commit" merujuk kepada perubahan yang telah kita lakukan (telah save) namun masih belum dipentaskan untuk dicommit.

Cara untuk pentaskan fail (staging)

$\> git add [nama fail] : untuk pilih fail mana yang akan distage
atau

$\> git add . : tambah semua fail 

selepas itu, status fail tadi akan berubah

$\> git status
On branch add_staff_module_yusdirman
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
new file:   app/assets/javascripts/staffs.coffee
new file:   app/assets/stylesheets/scaffolds.scss
new file:   app/assets/stylesheets/staffs.scss
new file:   app/controllers/staffs_controller.rb
new file:   app/helpers/staffs_helper.rb
new file:   app/models/staff.rb
new file:   app/views/staffs/_form.html.erb
new file:   app/views/staffs/edit.html.erb
new file:   app/views/staffs/index.html.erb
new file:   app/views/staffs/new.html.erb
new file:   app/views/staffs/show.html.erb
modified:   config/routes.rb
new file:   db/migrate/20161116180542_create_staffs.rb
new file:   test/controllers/staffs_controller_test.rb
new file:   test/fixtures/staffs.yml
new file:   test/models/staff_test.rb

Status "Changes to be committed" menunjukkan kesemua fail yang tersenarai itu akan dimasukkan kedalam repositori.


langkah seterusnya adalah melarikan arahan git commit

$\> git commit -m "added scaffold for staff. integrate existing staff table with boxroom"
[add_staff_module_yusdirman 5368f32] added scaffold for staff. integrate existing staff table with boxroom
 16 files changed, 326 insertions(+)
 create mode 100644 app/assets/javascripts/staffs.coffee
 create mode 100644 app/assets/stylesheets/scaffolds.scss
 create mode 100644 app/assets/stylesheets/staffs.scss
 create mode 100644 app/controllers/staffs_controller.rb
 create mode 100644 app/helpers/staffs_helper.rb
 create mode 100644 app/models/staff.rb
 create mode 100644 app/views/staffs/_form.html.erb
 create mode 100644 app/views/staffs/edit.html.erb
 create mode 100644 app/views/staffs/index.html.erb
 create mode 100644 app/views/staffs/new.html.erb
 create mode 100644 app/views/staffs/show.html.erb
 create mode 100644 db/migrate/20161116180542_create_staffs.rb
 create mode 100644 test/controllers/staffs_controller_test.rb
 create mode 100644 test/fixtures/staffs.yml
 create mode 100644 test/models/staff_test.rb 

Untuk git commit, kita perlu masukkan komen (wajib)

komen ini bertujuan untuk memberitahu orang lain apa yang kita lakukan pada perubahan itu.


Saya rasa, sampai disini dulu kali ini. Nanti bersambung lagi..



Download git disini:

https://git-scm.com/

tutorial juga ada dilaman tersebut.
untuk tutorial interaktif, boleh cuba disini:

https://try.github.io/

Wassalamualaikum

Why ICD-11 and SNOMED CT Aren't Enough: The Case for a Layered HIS Architecture

  If you are leading a Hospital Information System (HIS) implementation, you’ve probably heard the pitch: Adopt SNOMED CT for clinical detai...