Windows Keyboard Shortcut

Salam Sejahatera

Yang ini mungkin bapak² dan ibu² serta adik² semua sudah tahu. Tapi saja je seronok nak tulis pasal benda ni.

Ini adalah Windows Key yang ada di kebanyakan semua PC alaf baharu. Butang ini kiranya memang wajib untuk ada untuk semua pengguna Windows.

Kalau ikut yang empunya cerita, benda ini wujud semenjak dari tahun 1994 lagi di mana ketika itu, Microsoft memperkenalkan Microsoft Natural keyboard pada tahun tersebut.

Kiranya keyboard ni agak ergonomic la di zaman itu. Mungkin oleh kerana pada zaman itu, ramai pengguna PC yang selalu komplen sakit pergelangan tangan, maka tercipta la Keyboard ini.

Secara amnya, saya memang tak suka keyboard yang pelik² ini kerana tak kena dengan jiwa. Pada saya, keyboard mesti yang mekanikal dan mesti ada ketak-ketak ketika menaip. Baru la seronok dan gembira sewaktu menaip. Feedback itu penting.

By DeanW77 – Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=49643109
Logitech G610 Orion Blue Mechanical Gaming Keyboard

Windows Key + D vs Windows Key + M

Selama ini, saya hanya ambil maklum akan fungsi Windows Key + M ini untuk minimize semua windows yang ada di desktop. Kemudian terbaca pula satu post di facebook akan penggunaan Windows Key + D ini.

Menurutnya, fungsi Windows Key + D ini adalah untuk “Show Desktop” manakala Windows Key + M adalah untuk minimize semua Windows.

Namun Windows Key + M ini mungkin tidak berkesan kepada program² yang ignore akan arahan ini. Ini adalah kerana programmer boleh menulis code untuk program mereka ignore command WM_MINIMIZE.

Maka dengan ini bolehlah Bapak², Ibu² dan adik² semua cuba command ini untuk minimize semua windows sewaktu emergency, macam boss datang ke meja kerja ke, bini datang tengok screen ke atau apa² sahaja keperluan kecemasan, di mana adalah menjadi keperluan untuk menyorok Windows yang berkenaan.

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

Media Sosial bukan Benteng Pertahanan dari Tindakan Polis

Salam Pagi dan Sejahtera

Hari ini tak boleh melelapkan mata kerana telah tidor lebih masa pada hari ini. Letih betol. Oleh kerana itu, saya pusing² di layar virtual ini membaca apa yang patut.

Social media vector created by pikisuperstar – www.freepik.com

Terbaca pula kisah seorang pemuda (Graduan UK katanya) ditahan polis kerana membuat ugutan bunuh dan rogol di media sosial (saya rasa mungkin di twitter). Mungkin ramai yang kurang periksa tentang ini, bahawasanya sungguhpun Agensi Media Sosial ini menjaga privasi dan rahsia para penggunanya, tapi ini tidak bermakna, mereka tidak boleh berkongsi maklumat pengguna di dalam perkara² keselamatan atau perkara² yang melibatkan jenayah.

Semua pengguna media sosial adalah tertakluk dengan perkara ini. Contoh seperti berikut (dari Twitter)

Private information requires a subpoena or court order

Non-public information about Twitter users will not be released to law enforcement except in response to appropriate legal process such as a subpoena, court order, other valid legal process, or in response to a valid emergency request, as described below.

https://help.twitter.com/en/rules-and-policies/twitter-law-enforcement-support#20
Request Secure Access to the Law Enforcement Online Request System

Saya percaya, semua media sosial ada terma dan syarat² seperti ini. Mungkin salah satu cara dari mengelakkan diri daripada dicekup pihak polis adalah dengan menggunakan ID Palsu dan VPN. Namun itu tidak menjanjikan selamat dari tindakan mana pihak berkuasa 100%. Ini adalah kerana, pasukan polis dan mana² agensi terbabit ada juga pakar² di dalam perkara IT ini. Mereka ada Jabatan Forensik Cyber la kawan.

Tindakan Graduan UK itu sebenarnya kurang bijak dan saya rasa dia mungkin kurang bijak. Muda² lagi dah ada rekod jenayah. Kan dah tak cantik resume kamu.

Membuat cabaran dan bertindak memperkecilkan pihak berkuasa merupakan salah satu kesilapan beliau. Untuk ini saya percaya, pihak polis akan mempunyai satu motivasi yang besar untuk menangkap budak ini. Boleh cuba tengok message dia di bawah:

Dia punya takabur, siap nak kasi jari tengah pada polis. Aku rasa, pada waktu dia kena cekup, punai dia pon dah kedalam. Mungkin terkucil barangkali.

Jangan Eksyen

There is a very thin line between confidence and arrogance.

Adam Peaty

Apabila kita membuat satu posting di media sosial, hendaklah sentiasa beringat bahawasanya, anda bertanggung-jawab ke atas setiap bait² yang ditulis. It is your responsibility. Orang putih kata, you Reap what you Sow.

Kita juga hendaklah beringat, apa-apa sahaja yang ditulis di media sosial adalah eternal. Satu kali post, maka selamanya akan ada. Benar, anda boleh padam dan deactivate account anda, tapi sebelum itu… Bak kata Russel Peters, stand-up comedian dari Canada: “Somebody’s going to get hurt real bad

Ada orang yang mungkin dah screenshot posting kamu dan viralkan dia, maka dalam erti kata lain, apa yang ditulis akan kekal selamanya unless, kamu adalah hacker dalam filem (ini mmg tak akan jadi) yang boleh memusnahkan segala jenis peranti di dalam dunia

Semoga Graduan dari UK ini dipermudahkan urusannya dan semoga ianya menjadi pengajaran pada semua untuk bertindak bijak dan berfikir sebelum membuat perkara-perkara yang bakal merugikan anda di kemudian hari.

27 years later, we meet again BAS KITA.

Atik Sab. That’s what we called this little wheels on the bus back then. Pakcik Din cum my Quran Teacher drove this bus. That was many years ago. Today, maybe his son. I dunno.

Now, Sara rides this bus to school. I am quite excited to have Sara riding this Orange Coloured (Gamer Hint – LEGENDARY) School Bus. No other buses were as popular and legendary as Bas Kita.

This bus is so awesome – no other bus may stop right in front of the gate, but Bas Kita. Why??? Because Bas Kita is too damn awesome.

If berminat… boleh la call the number below:

Upgraded to Unifi VIP20

Last week, I received a call from TMNET offering me to upgrade my UniFi VIP10 to UniFi VIP20 for just RM219 (RM232.14 with GST) per month instead of RM263.94. OKlah tu, discount around RM30.

Usually, I do not even care to pickup if telemarketer calls, but I did that day. Well TMNET got me that day. Now I have restarted my 24-Months with them. Nice. 😐

This one… old already. Now on UniFi 50… Long story short, nanti contract dah nak habis… TM akan offer upgrade punya. huhuhu

Something is wrong with Tumblr

I think there is something not right with our adored and precious Tumblr. Well forget about other people who have issues with Tumblr. It does not work for me. Some images do not even load. It looks atrocious.

tumblr1

If the image is viewed directly, browser will show this error message:

tumblr

Is Tumblr disallowing linking to their hosted imaged? Well, I do not know. /sigh

Upon googling for “tumblr AccessDenied“, I came across with an interesting article “Why do images from some Tumblr pages not load, but using wget on them works?

After some reading, now I understand this has something to do with their servers. This is no network issue. As wget to that image works and that image is available in Tumblr. If some minor changes are made to the url of that image, it will show as usual.

Take this as example:

http://31.media.tumblr.com/99451fbb1d17a72822f774b06d8fedf1/tumblr_n89wv3ionq1qefimno1_1280.jpg <- This link will not work.

But if we change that 31 to say 41 the image will appear as usual.

Example: http://41.media.tumblr.com/99451fbb1d17a72822f774b06d8fedf1/tumblr_n89wv3ionq1qefimno1_1280.jpg

Hmmmm.

kvge5