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

Setkan PHPMyAdmin untuk sambung kepada banyak pelayan MySQL



”Ya Tuhanku, berikanlah aku ilham untuk tetap mensyukuri nikmat-Mu yang telah Engkau anugerahkan kepadaku dan kepada dua orang ibu bapakku dan untuk mengerjakan amal shaleh yang Engkau ridhoi dan masukkanlah aku dengan rahmat-Mu kedalam golongan hamba-hamba-Mu yang shaleh.” (QS. An-Naml : 19)

Jadikan phpmyadmin anda dapat login ke banyak pangakalan data tidak mengira yang berada dalam stesen anda atau berada dalam server di pusat data atau lain-lain.


Pengenalan persekitaran

1. OS:  Debian Linux
2. phpmyadmin
pemasangan PhpMyAdmin menggunakan apt

$/> sudo apt install phpmyadmin                                                                                         
3. mysql client
Cara-caranya

1. pastikan kedudukan fail config.inc.php untuk phpmyadmin anda contoh :

/var/www/html/phpmyadmin/config.inc.php

2. buka fail tersebut untuk edit (guno sudo kalau perlu)

sudo vim /var/www/html/phpmyadmin/config.inc.php

3. set kan satu pembolehubah contohnya $i = 0

4. untuk server pertama, umpukkan nilai $i dan setkan parameter server pertama

5. untuk server kedua dan seterusnya, pastikan umpukkan nilai $i dengan $i++;


contohnya: 



$i = 0;

/*  server pertama
 *  app1 db
*/

$i++; 

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';

/* Server parameters */
$cfg['Servers'][$i]['host'] = 'app1.yourdomain.com';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;

/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['verbose'] = 'app1.yourdomain.com';


/*  server kedua
 *  localhost db
*/


$i++;

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';

/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;

/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['verbose'] = 'localhost';


/*
 *  tambah lagi server lain di sini
*/

$i++;




Hasilnya





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

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...