Simpan Gambar Cover Buku dari LibraryThing ke server sendiri

Salam Sejahtera dan Selamat Maju Jaya

Hari ini saya hendak bercerita tentang sedikit programming language iaitu PHP. Semasa saya bekerja di Open University Malaysia dahulu kala, saya ada menulis script untuk Drupal untuk dapatkan image dari server LibraryThing dan muat-turun gambar tersebut ke server kita. Adapun tujuan ini adalah untuk mengurangkan tekanan bandwidth kepada pengguna ketika itu. Umumnya pada waktu ini, mungkin tidak relevan lagi kerana rata² masyarakat mempunyai akses kepada internet super.

Namun pada hari ini, API LibraryThing telah dihentikan sehingga diberitahu kelak (tak tahu la sampai bila). Takper, script ini adalah bebas untuk kita tukar source server kepada servis yang lain.

API LibraryThing dihentikan buat sementara waktu

Sebagai penambahbaik servis Perpustakaan Digital OUM ketika itu, saya telah menulis script untuk mendapatkan data² dari Syndetics untuk memperkayakan atau enrich Katalog OUM mereka dengan Muka Buku, Ringkasan Buku dan sebagainya.

Pengkayaan Katalog dengan Servis Syndetics

Script yang saya tulis untuk Perpustakaan Digital Tan Sri Abdullah Sanusi akan menyimpan Book Summary, Publisher, Author dan juga Imej Muka Buku ke dalam sistem secara dinamik.

Buku di Perpustakaan Digital Tan Sri Abdullah Sanusi

Melalui script ini, pengguna hanya perlu memasukkan No ISBN buku tersebut dan yang lain² akan dilakukan secara dinamik oleh server. Mudah bukan? Masukkan ISBN, semua data² akan diambil dan disimpan di dalam database.

Muat-turun Book Cover ke Server

Hari ini, saya ingin berkongsi maklumat atau script tentang cara² mendapatkan gambar dari server lain dan seterusnya menyimpan gambar tersebut ke dalam server kita. Script ini juga akan menyusun dan menyimpan gambar² buku mengikut jumlah askara ISBN samada 10-askara atau 13-askara.

Dalam erti kata lain, script ini akan create folder kepada beberapa bahagian kecil di dalam format 3/3/3/3/1. Sebagai contoh, jika ISBN yang diberikan adalah 978-0735210967, maka script ini akan create folder dan subfolder seperti berikut:

978/073/521/096/7

Ini adalah untuk mengelakkan daripada server mempunyai ribuan folder dengan no ISBN yang banyak yang pasti akan membebankan server apabila pengguna browse folder ini menggunakan SFTP atau FTP.

Langkah yang bijak adalah dengan memecahkannya kepada beberapa cluster. Ini akan membantu untuk mengurangkan pengunaan folder yang banyak apabila koleksi buku anda lebih dari 100,000.00.

Memecahkan ISBN kepada beberapa kluster

Kita ambil contoh ISBN untuk buku² di bawah:

  1. 978-1621001539
  2. 978-9971693367
  3. 978-0415834841 
  4. 978-1840760378

Di dalam keadaan biasa, selalunya adalah mudah untuk kita terus create folder (4 Folder) untuk setiap ISBN di atas. Jika kita berbuat demikian, sekiranya buku yang kita serve adalah kurang dari 1,000, ini mungkin tidak menjejaskan prestasi server. Namun Perpustakaan jarang sekali ada buku dengan jumlah seperti itu. Selalunya pasti lebih daripada 10,000 judul dan jika kita teruskan juga, tidak ada salahnya, tapi nanti di dalam 1 folder akan ada beribu folder yang pastinya tidak baik untuk kesihatan Server Admin (sian pada dia).

Perasan tak kebanyakan ISBN ada mempunyai prefix yang sama seperti berikut:

  1. 9780415778299 
  2. 9780415820349 
  3. 9780415809771 
  4. 9780415442060 
  5. 9780415579841 

Dengan menggunakan kaedah clustering ini, mereka boleh kongsi folder yang sama dibawah “/978/041/”. Ini akan membantu untuk mengurangkan kepada pembentukkan folder di dalam jumlah yang banyak.

Fungsi di bawah ini yang memecahkan folder kepada beberapa cluster, Lihat $parts = Array.

function BikinFolder($KEPALA, $isbn, $TestingCode) {
		$parts = Array ($KEPALA, 
			substr($isbn, 0, 3), 
			substr($isbn, 3, 3), 
			substr($isbn, 6, 3), 
			substr($isbn, 9, 3));		
		
		if (13 == strlen($isbn))
			array_push($parts, substr($isbn, 12, 3));
		$dirName = join('/', $parts);
		if (file_exists($dirName))
			return $dirName;
		$path = $KEPALA;
		for ($i = 1; $i < count($parts); $i++)
		{
			$path .= '/' . $parts[$i];
			if ($TestingCode)
				print "<p>Buat Folder di directory: $path</p>\n";
			@mkdir($path);
		}
		return $dirName;
	}

Test Run (Gambar dan Folder Tak Pernah Ada)

Di bawah adalah Print Out dari script tersebut sekiranya TestingCode = True serta gambar dan folder tersebut tidak wujud di dalam server.

Buat Folder di directory: muka-buku/978
Buat Folder di directory: muka-buku/978/041
Buat Folder di directory: muka-buku/978/041/557
Buat Folder di directory: muka-buku/978/041/557/984
Buat Folder di directory: muka-buku/978/041/557/984/1

creating/serving local file muka-buku/978/041/557/984/1/9780415579841-mc.jpg

Gambar Tiada di server. Jom kita ambil dari Syndetics. Source Gambar: https://secure.syndetics.com/index.aspx?isbn=9780415579841/mc.jpg&client=RAHSIA

Berjaya. Gambar dari Syndetics sudah disimpan di dalam server

Gambar kita ada simpan disini: www.munmon.com/main2/muka-buku/978/041/557/984/1/9780415579841-mc.jpg

Test Run (Gambar dan Folder Ada)

Script yang sama tapi gambar serta folder itu wujud. Berikut adalah Print Out dari script jika kita on kan setting TestingCode.

Create atau Load Gambar dari Local Server: muka-buku/978/041/557/984/1/9780415579841-mc.jpg

Gambar ini ada di dalam Server. Yeay!

Gambar kita ada simpan disini: www.munmon.com/main2/muka-buku/978/041/557/984/1/9780415579841-mc.jpg

Di bawah adalah keseluruhan script sekiranya berminat untuk guna. Saya lesenkan code ini dibawah dilesenkan di bawah CC BY-NC 4.0. Download Script di bawah jika mahu details dan description functionnya.

//Masukkan Nama Folder di sini
define('KEPALA', 'muka-buku');
// Masukkan Nama Lesen Library	
define('LESEN', 'RAHSIA-XXXXX-RAHSIA');
// Ini gambar default jika tak ada Gambar (
define('GAMBAR-TIADA', 'muka-buku/transparent.gif');
	
$TestingCode = False;
	
if ($TestingCode)
header("Content-type: text/html");	
$size = strtolower($_REQUEST['size']);	
if ('sc' != $size && 'mc' != $size && 'lc' != $size)
{
print "<p>ERROR - Illegal size. Must be either LC (Small), MC (Medium) or LC (Large). Please refer Syndetics Documentation </p>";
exit;
}
		
$isbn = strtoupper(preg_replace('/[^0-9Xx]/', '', $_REQUEST['isbn']));
if (10 != strlen($isbn) && 13 != strlen($isbn))
{
print "<p>Error - ISBN must be either 10 or 13 Characters</p>";
exit;
}
	
$directory = BikinFolder(KEPALA, $isbn, $TestingCode);	
	
$GambarMukaBuku = "${directory}/${isbn}-${size}.jpg";
if ($TestingCode)
print "<p>Create atau Load Gambar dari Local Server: $GambarMukaBuku</p>\n";
	
if ( ! file_exists($GambarMukaBuku) )
{
$sourceURL = 'https://secure.syndetics.com/index.aspx?isbn=' . "$isbn" . "/mc.jpg&client=" . LESEN;
		
if ($TestingCode)
print "<p>Gambar Tiada di server. Jom kita ambil dari Syndetics. Source Gambar: $sourceURL</p>\n";
		
if ($remote = fopen($sourceURL, 'r') )
{
$image = '';
while ( ! feof($remote) )
$image .= fread($remote, 8192);
fclose($remote);
if (strlen($image) >= 100  &&  $local = fopen($GambarMukaBuku, 'w'))
{
fwrite($local, $image);
fclose($local);
if ($TestingCode)
print "<p>Berjaya. Gambar dari Syndetics sudah disimpan di dalam server</p>\n";
}
}
}
else
{
if ($TestingCode)
print "<p>Gambar ini ada di dalam Server. Yeay!</p>\n";
}
$GambarKitaSimpan = file_exists($GambarMukaBuku) ? $GambarMukaBuku : GAMBAR-TIADA;
if ($TestingCode)
{	
print "<p>Gambar kita ada simpan disini: ";
print $_SERVER['SERVER_NAME'] . "/" . basename(getcwd()) ."/" . $GambarKitaSimpan;
print "</p>\n";
;
		
}
else
{
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($GambarKitaSimpan));
header("X-Pad: avoid browser bug");
}
		
print "<img class=thumber3 src='{$GambarKitaSimpan}'>";

function BikinFolder($KEPALA, $isbn, $TestingCode)
{
$parts = Array ($KEPALA, 
substr($isbn, 0, 3), 
substr($isbn, 3, 3), 
substr($isbn, 6, 3), 
substr($isbn, 9, 3));		
		
if (13 == strlen($isbn))
array_push($parts, substr($isbn, 12, 3));
$dirName = join('/', $parts);
if (file_exists($dirName))
return $dirName;
$path = $KEPALA;
for ($i = 1; $i < count($parts); $i++)
{
$path .= '/' . $parts[$i];
if ($TestingCode)
print "<p>Buat Folder di directory: $path</p>\n";
@mkdir($path);
}
return $dirName;
}

This work is licensed under CC BY-NC 4.0

The Core Values of Librarianship

While sorting out old images, I came across with this picture, the core values of Librarianship. These are the blocks and stones that define us… Librarians.

Generally, there are 11 values that each librarian should believe and uphold. These are our commandments; our values; our honour; our codes… our sacred codes. By these lines, every librarian must believe.

  • Access
  • Confidentiality/Privacy
  • Democracy
  • Diversity
  • Education and Lifelong Learning
  • Intellectual Freedom
  • Preservation
  • The Public Good
  • Professionalism
  • Service
  • Social Responsibility

No! I am not going to explain these word by word. Head up to ALA: Core Values of Librarianship to learn more.

Until then.

May you be a learned Person

Interim Survey on Malaysian Reading Habit 2014

Update : The Survey has been closed.

The National Library of Malaysia in collaboration with the Department of Statistics Malaysia (DOSM), Educational Technology Division of the Ministry of Education Malaysia, Librarians Association of Malaysia, the Malaysian Public Library Directors Council (MPAM) and Conference of Academic Libraries and National Library of Malaysia (PERPUN) is conducting an Interim Survey on Malaysians Reading Habit 2014. The objectives of this survey are to identify number of books read by Malaysians based on demographic and the trend of reading habit among Malaysians.

Click Here to participate.

This photo, “Evening Read” is copyright (c) 2011  Roxanne Ready and made available under a Attribution 2.0 license.

Position has been confirmed

Syukur Alhamdulillah. Setelah berbulan-bulan bertungkus lumus menyiapkan apa yang patut, akhirnya telah membuahkan hasil apabila posisi sebagai Librarian di PETRONAS Petroleum Resource Centre telah disahkan oleh pihak berwajib. Maka dengan ini saya adalah Rakyat Kerajaan PETRONAS yang sah. Oleh itu, saya harus berusaha untuk mempertahankan kedudukan saya sebagai warga PETRONAS dengan bekerja dengan lebih iltizam lagi.

Mari kita lihat apa yang saya buat sepanjang waktu Probasi di PRC selama 6 bulan

The New PULSE
Seperti biasa, ini adalah benda pertama yang saya akan sentuh ditempat saya mula bekerja. Web Development dan Web Design adalah benda yang seronok dan cepat untuk dihasilkan. Ianya adalah benda yang dapat dilihat dan dibuktikan hanya dengan melayari laman tersebut. Kena pula dengan masanya, terdapat VIS (Visual Identification System) yang wajib diikuti, maka PULSE atau PETRONAS Ubiquitous Library Search Engine merupakan calon yang terbaik untuk dikerjakan. Rujuk sini : http://www.munmon.com/v3/2014/01/14/new-pulse/

Library Record Re-Index
Ini adalah proses automasi yang paling mencabar. Sebelum tahu selok belok Millennium ILS, memang sangat leceh. Ada Load tables, ada konsep overlay dan overlay protect. Tapi, syukur, kemampuan untuk memahami sesuatu dengan cepat adalah kurnianNya yang paling utama bisa membantu proses ini. Akhirnya kesemua BIB Record mempunyai location yang tepat dan para kataloger tidak lagi perlu memasukkan lokasi secara manual.

Upload Ebrary Records
Setelah berjaya memahami Load Tables dan Concept of Overlaying MARC records pada Millennium ILS, proses untuk update dan replace MARC record dapat dilakukan dengan jayanya. Terima Kasih diucapkan pada para pustakawan yang menyediakan maklumat ini di blog-blog mereka. Juga III kerana menyediakan manual yang mudah difahami. Dari sini, saya tahu cara-cara untuk replace, delete dan update MARC record menggunakan Data Exchange di Klien Millennium ILS.

Administer MyPRECISE Portal
Ini lagi satu benda pelik yang kena belajar. Dahulu kala saya menggunakan Drupal sebagai CMS, tetapi di PRC, kena guna Microsoft Sharepoint. Nasib baik mudah faham dan cepat belajar. Dibekalkan dengan pengalaman mengendali pelbagai jenis portal, belajar menggunakan Shareponint tidaklah begitu sukar. Natijahnya sama cuma caranya sahaja yang berbeza.

Begitulah beberapa perkara yang dilakukan sepanjang saya berada di peringkat dalam perhatian sebelum disahkan jawatan. Pokok pangkalnya, apa-apa sahaja yang diberi, hendaklah kita lakukan dengan terbaik. Di mana-mana pon kita berada, tugas yang diberi hendaklah dilakukan dengan penuh amanah dan penuh semangat. Itulah dia pesan ibu saya.

The New PULSE

This is the new Millennium Webpac Pro Interface for Petroleum Resource Centre. It seems like every workplace I have served, the very first thing I change is the Web Catalogue Interface. This is perhaps, the easiest and the most obvious task during initiation period.

I am so used with VTLS iPortal but this is something new. This is the Innovative Interfaces Inc. Millennium Webpac Pro, so much alien and very different. Alhamdulillah to be able to learn and understand its jargon and functions with limited timeline.

So… This is the new PETRONAS Ubiquitous Search Engine or PULSE.

Belajar menggunakan Millennium ILS

Bulan ini merupakan bulan ke-dua saya berkhidmat di Petroleum Resource Centre (PRC). Sebagai pekerja yang baharu, macam-macam benda harus dipelajari, dari budaya kerja sehinggalah benda-benda remeh seperti akronim dan sebagainya. Ini termasukkalah mempelajari menggunkan sistem library yang sedikit asing untuk saya iaitu Millennium ILS.

8 tahun saya menggunakan Virtua ILS dan saya amat senang dengannya. Dari create record, replace record dan produce report semuanya dah ada didalam kepala. Makna kata, dengan Virtua ILS, tidak lagi perlu melihat dan membaca manual. Mungkin ada juga merujuk manual untuk kepastian. Namun, itu semua sudah ditinggalkan, kerana sekarang bukan lagi Virtua ILS tetapi Millennium ILS.

Memang sangat asing Millennium ILS ini kepada saya. Dari client sehinggalah kepada sistem. Akses kepada server pun berbeza. Dahulu saya boleh pegang dan sentuh server, malah saya boleh masuk ke dalam bilik server. Tidak lagi sekarang. Di tempat baharu ini, library tidak menjaga server dan tidak mempunyai akses secara physical kepada server. Nampak pun tidak.

Sungguhpun begitu, mana-mana sistem perpustakaan adalah sama sahaja dari segi konsep dan matlamat. Cuma jalan kerja dan istilahnya sahaja yang berbeza. Yang menariknya, kebanyakan kerja-kerja menggunakan client. Penggunaan terminal atau cmd hanya terhad kepada kerja-kerja Administration. Itupun jarang-jarang sekali berlaku.

Dah dekat 2 bulan saya belajar menggunakan Millennium ILS dan sekarang sudah tahu cara-cara add record secara batch, replace dan update record secara batch dan macam-macam lagi. Nasib baik ada pemahaman dengan sistem library. Kalau tidak, jangan kata 2 bulan, 2 tahun pun belum tentu boleh paham.

Itulah kita, hari-hari sentiasa kena belajar. Kerana setiap hari ada sahaja ilmu yang baharu. Walaupun dengan pengalaman 8 tahun… belum tentu cukup untuk mengetahui kesemuanya. Oleh itu, sentiasalah bersedia untuk belajar.

Apa itu ISBN

Umum mengetahui bahawa ISBN itu adalah akronim untuk International Standard Book Number yang digunapakai untuk mengenal pasti setiap buku-buku di seluruh muka bumi ini. Sehingga Januari 2007, ISBN mempunyai 10 angka. Kini, ISBN mempunyai 13 angka yang unik untuk setiap tajuk buku. Di Malaysia, badan yang bertanggunggjawab menjaga dan mengeluarkan no siri ini adalah Perpustakaan Negara Malaysia.

Selalu kita lihat di Perpustakaan, Toko-toko buku atau Amazon Online mempunyai pencarian melalui ISBN. Ini adalah kerana, untuk setiap buku yang diterbitkan mempunyai no ISBN yang berbeza, melainkan ianya adalah terbitan semula – ISBN yang lama akan digunapakai. No ISBN tidak boleh digunakan semula, ianya adalah unik untuk setiap judul.

Pada setiap ISBN, sebenarnya terdapat huraian-huraian yang mungkin anda diantara kita tidak ambil peduli pun. Hatta ianya seorang pustakawan. Pada mereka ISBN hanyalah No siri untuk kawalan terbitan buku. Namun, sebagai Pustakawan, kita wajib tahu apa itu ISBN yang sebenarnya.

ISBN untuk buku berjudul “Indahnya Hidup Bersyariat, karangan Dato’ Ismail Kamus dan Mohd Azrul Azlen Abd Hamid adalah : 978-967-51023-0-1. Pernahkah anda terfikir apa yang dimaksudkan oleh nombor ini?

Mari kita huraikan Pengertian No ini.

  • 978 adalah prefix untuk semua buku. Makna kata, sekiranya kita terjumpa ISBN dengan 978 di hadapannya, tak perlu pikir-pikir… ini adalah buku
  • 967 adalah identiti untuk kod kawasan. Di Malaysia kebanyakan buku yang diterbitakan di Malaysia mempunyai 967 atau 983
  • 51023 adalah identiti penerbit
  • 0 adalah identiti judul
  • dan 1 itu adalah no semakan untuk ISBN tersebut.

No semakan ISBN?
No semakan ISBN bukan no yang diletakkan secara suka-suka sahaja. Terdapat pengiraan disebalik no tersebut. Huhu. Librarian tak perlu pikir pasal no ni. Banyak lagi kerja yang lagi penting mereka kena fikir. Namun sebagai ilmu, saya kongsi cara-cara pengiraannya di sini.

Di dalam setiap ISBN 13, hanya 12 no yang pertama yang akan dikira dan angka yang ke-13 itulah no hasil daripada pengiraan ISBn check digit tersebut. Setiap nombor dari kiri hingga kanan akan didarabkan dengan 1 dan 3 secara alternate. Kemudian nombor tersebut akan dibahagi dengan 10. Hasil daripada pembahagian tersebut akan ditolak dengan 10. Huhuhu. Pening tak? Itu la pasal Librarian tak buat kerja gila neh.

Jom tengok contoh:

X = 9*1 + 7*3 + 8*1 + 9*3 + 6*1 + 7*3 + 5*1 + 1*3 + 0*1 + 2*3 + 3*1 + 0*3

X / 10 = Y

10 – Y = No last itu! huhuhuh

So… dalam perkara ini X = 109 dan 109/10 = 10 berbaki 9 dan 10 – 9 = 1.

Huhuhuh. Pining tak?

Humanising the Library Portal

Good Evening I was wondering how on earth the Library could minimise the gap between the students and the librarian. We do Facebook, we blog, we youtube and many others. I still believe that we need to bring this gap-minimising thing to the next level. Alas, I remember one little app. that permits communication between two parties (as if you can communicate alone!) – meebo me widget

In geekspeak, it’s an IM unifier. In plain English, it’s a one-stop shop for all your instant-messaging needs. Which is to say that Meebo puts all your IM clients — the individual programs that make instant-messaging services incompatible with one another — into one browser window. There’s no need to download all the different apps (MSN, AOL/ICQ, Yahoo, Jabber/Gtalk) to your computer to have any and all types of IM conversations. Available in four dozen languages. More??? –> Click Here  

In the past, perhaps due to network issues, this little app. has not been so useful. Connection Time-Out, Access Denied and so on. Well. it’s the network issue – security and bla, bla, bla. As time passes by, network admin is being lenient I think… Library has no problem accessing meebo. Maybe if… should in the future we get time-out issue again, I will need to ask our glorious network admin to allow access of this site to one single workstation – Muhamad Hafiz’s (He’s the one that will take care of any enquiries and requests). I am not into this chit-chatting thing. That’s all things of the past… (of those who remember en_mun… Selamat Maju Jaya). Here’s the setup screen… very easy no hanky panky stuff. Simple and straight forward:

Just give your widget a name and username – registration and such can come later. This one is free and is a no brainer… After that, meebo will generate your widget embedding code. Copy and paste to your web. Super Easy. Then you will have your widget like this:

Easy kan????

Sejarah hari ini : 1 September

Salam Ramadan dan Sejahtera Semua

Adapun tanggal 1 September mungkin tidak membawa sebarang makna kepada orang-orang kebanyakan. Namun, pada hari ini dalam tahun 1972, Parlimen Malaysia telah meluluskan sebuah akta yang menandakan permulaan sebuah organisasi yang agak penting di Malaysia.

Akta tersebut adalah, Akta Perpustakaan Negara, 1972. Dengan kelulusan akta ini, sebuah organisasi Perpustakaan telah dibentuk secara rasmi. Ketika itu, Perpustakaan Negara masih lagi bernaung dibawah Jabatan Arkib Negara. Dan sekitar tahun 1977, Perpustakaan Negara secara rasmi menjadi sebuah badan kerajaan secara mutlak, iaitu tidak lagi bernaung dibawah mana-mana Jabatan. Secara amnya, Perpustakaan Negara mempunyai Jabatan sendiri, Ketua Pengarah sendiri dan carta organisasi sediri.

Selepas pada tarikh 1 September 1972 inilah, banyak program-program yang melibatkan kakitangan kerajaan yang dikenali sebagai Pustakawan di peringkat kebangsaan. Sebagai contoh, dilantik sebagai penjaga nombor siri buku, ISBN peringkat kebangsaan.

Oleh itu wahai sahabatku warga Perpustakaan yang lain, janganlah anda semua memandang enteng akan tarikh 1 September ini. Janganlah anda semua buat-buat tak tahu tentang 1 September kerana, sekiranya anda tidak tahu sejarah, janganlah berangan tentang masa hadapan.

Update: Klik sini untuk melihat Akta Perpustakaan Negara 1972