Khamis, 9 Januari 2014

#89: Katak Bawah Tempurung - A New Perspective (Part 2)

Bayangkan seseorang yang tak pernah menonton filem orang lain tapi minat untuk membuat filem. Agak-agak apakah hasilnya kalau beliau mengarah filem? Orang yang tak pernah menonton filem orang lain boleh juga ambe bagi contoh antara pembuat filem terawal iaitu Georges Méliès. Di zaman dimana orang buat filem hanya dengan durasi beberapa saat, ambe boleh simpulkan bahawa Georges Méliès sudah tentu tak banyak menonton filem-filem kerana zaman tersebut masih belum ada banyak filem yang dikeluarkan. Nak tahu hasil filem arahan beliau?


Filem dari tahun 1902, A Trip to the Moon, arahan Georges Méliès

Macam "katak bawah tempurung tak"? Bagi ambe, tak boleh la nak label katak dibawah tempurung sebab beliau antara orang yang pertama mengarah filem didunia. Tapi disini anda boleh lihat bagaimana seseorang yang langsung tak ada garis panduan norma-norma filem mengarah sebuah filem. Terasa sangat asing dan avant guard kan? Bayangkan Georges Méliès tinggal di zaman moden tapi beliau tinggal pula didalam gua di negara Malaysia, tak pernah menonton filem Playboy itu Suamiku, Senario the Movie, Mami Jarum, dan lain-lain. Jika beliau keluar dengan filem sebegini, boleh nampak bahawa beliau seperti "katak dibawah tempurung" kan?

Ia adalah purely "katak dibawah tempurung", dan bukan reverse-"katak dibawah tempurung" kerana ambe bayangkan orang yang reverse-"katak di bawah tempurung" adalah orang yang terdedah dengan dunia luar tanpa terdedah pada masyarakat setempat sedangkan masyarakat setempat hanya terdedah dikalangan sendiri.

Selasa, 7 Januari 2014

#88: Islamic Finance - Forex Trading by Sheikh Hacene Chebbani


FOREX Trading: Halal or Haram by Sheikh Hacene Chebbani

#87: Katak Bawah Tempurung - A New Perspective

Katak bawah tempurung adalah peribahasa melayu dimana lebih kurang bermaksud, orang yang tak pernah terdedah dengan dunia luar dan tak tahu menahu apa disekelilingnya. Dulu ambe menganggap ia perkara yang teruk untuk menjadi "katak bawah tempurung", tapi ambe realize ada baiknya juga dengan sesetengah keadaan.

Kisah katak bawah tempurung ni ambe suka nak kaitkan dengan dari Greece bertajuk Dogtooth. Filem ni mengisahkan tentang satu keluarga yang duduk di tempat yang terpencil dan parents keluarga tersebuat semacam membuat satu "social experiment" keatas anak mereka sendiri. Social experiment ini adalah dengan membesarkan anak-anak mereka di tempat yang tidak ada orang lain dan mereka menggunakan perkataan-perkataan serta tanggapan sendiri. Contohnya memberitahu bahawa kucing adalah pemangsa manusia. Mempunyai vocabulary sendiri yang songsang dari dunia luar seperti memanggil sesuatu objek dengan nama yang lain contohnya memanggil "Epal" dengan nama "Keyboard". Ia filem yang sangat disturbing dan tak berperikemanusiaan, tapi ia memberi idea yang jelas tentang katak dibawah tempurung.

Dogtooth. Anak ditutup mata dari dunia luar.
Berbalik kepada katak dibawah tempurung, ambe fikir dengan kedudukan yang unik, katak dibawah tempurung boleh menjadi sesuatu yang baik. "Di bawah tempurung" boleh bermaksud di dunia sendiri tanpa campuran idea-idea dari luar. Ini adalah sesuatu yang unik. Dengan adanya persekitaran sendiri tanpa pengaruh luar, sesuatu yang baru dan asli boleh lahir. Sesuatu yang idea asal tanpa influence orang lain. Contohnya seseorang yang tak pernah mendengar muzik rock dan diberikan sebuah gitar. Tanpa pengetahuan bermain gitar, tapi dengan perasaan ingin tahu dan suka mendengar bunyi-bunyian beliau mungkin akan memetik gitar tersebut dan cuba bermain sesuatu. Gitar juga perlu di tune mengikut standard. Dan jika orang itu tak pernah tahu apa itu cara tuning gitar, lama kelamaan beliau akan mencipta satu standard tuning sendiri. Kaedah memetik gitar, time signature sendiri serta bentuk muzik yang tak pernah didengari sebelum ini. Idea asal yang tidak pernah dipengaruhi.

By the way, ini Javier Reyes, salah seorang gitaris dari band Animal As Leaders. Seriously, ambe dok pernah dengar muzik begini. Ambe saspek dia ni jenis "katak bawah tempurung" :)


Javier Reyes. Seriously, I never heard this kind of music before!

#86: Monsieur Omar

Ini Omar. Dia baru elok dari demam dekat seminggu.

Khamis, 2 Januari 2014

#85: Stereo Mix : Windows desktop sound loop back

Patchage on Linux
Dalam Linux ambe selalu menggunakan Qjackctl/Patchage untuk redirect audio output dari satu application/device ke input application/device yang lain. Menyalurkan audio dari output ke input didalam sistem operasi Linux amatlah mudah. Tapi di Windows dan Mac, ambe belum jumpa lagi cara yang mudah dan boleh dilihat secara visual seperti menggunakan Qjackctl/Patchage.

Kebolehan untuk merakam sound dari desktop amatlah penting tanpa adanya kebolehan untuk menyalurkan output audio ke input program lain seperti pada Linux. Dulu ambe pernah berfikir untuk membuat satu wayar dengan 2 hujung jack male bagi membolehkan ambe merakam sound yang keluar dari speaker untuk masuk semula ke jack mikrofon atau line-in dengan menyalurkan output dari jack speaker/headphone ke mikrofon/line-in melalui sambungan wayar fizikal speaker/headphone ke mic/line-in. Ia boleh berhasil tapi hasilnya mungkin akan mengalami sedikit masaalah dari segi kualiti dan kehilangan data. Masaalah ini berlaku kerana proses yang dilakukan oleh soundcard iaitu menukarkan signal digital kepada analog dan menukar semula signal analog kepada signal digital. Sewaktu proses conversion ini kehilangan data boleh berlaku yang akan merendahkan kualiti rakaman.

Enable Stereo Mix by right-clicking and select Enable
No worries, Windows tahu masaalah ini dan sebenarnya fungsi ini memang dah ada tanpa perlu install apa-apa aplikasi sampingan. Caranya adalah dengan menggunakan soft-audio-device yang bernama Stereo Mix. Seperti namanya, Stereo Mix adalah stereo. Sekarang anda boleh rakam sound di desktop anda tanpa perlu buat sambungan fizikal atau lebih teruk, letak mikrofon depan speaker Hahahaha!

Untuk aktifkan soft-audio-device ni, pergi ke Control Panel dan pilih Sound. Pada tab Recording, right-click ruang senarai recording device seperti dibawah dan pastikan Show Disabled Devices dan Show Disconnected Devices telah ditandakan. Sepatutnya ketika ini anda sudah boleh lihat device Stereo Mix didalam ruang senarai recording device. Select dan right-click Stereo Mix dan pilih Enable. Sekarang soft-audio-device Stereo Mix anda sudah diaktifkan dan sedia untuk digunakan. Sekarang cuba pasang apa-apa audio player/media player dan pasang lagu kegemaran anda dan anda akan lihat audio peak meter di sebelah Stereo Mix memberikan respon pada bunyi dari media/audio player anda. Perlu diingat, Stereo Mix menyalurkan audio dari desktop dan bukan dari aplikasi tertentu seperti di Linux. Dengan menggunakan Patchage/Qjackctl, anda boleh menyalurkan audio output dari Audacity ke aplikasi Jamin dan output dari Jamin masuk ke input Ardour tanpa dicemari bunyi-bunyian dari aplikasi lain.

Nak guna Stereo Mix mudah saja. Pasang audio recorder kegemaran anda, dan pilih Stereo Mix sebagai recording device (seperti nak pilih mikrofon). Klik record dan anda dah merekod sound dari desktop anda sendiri.

Untuk merakam sound dari desktop, gunakan device Stereo Mix. Notice the track? Yes, it's in stereo!

Ahad, 29 Disember 2013

#84: Just A Thought About "Forever Alone People".

Waktu ambe kerja di Hospital Sultanah Aminah dulu ambe pernah jumpa kereta buruk ditempat parking. Bukan buruk sebab memang asal buruk, tapi buruk sebab parking disitu tak alih berbulan lamanya. Tayar dah kempis. Semak dah menjalar. Ambe assume orang yg tinggal kereta di parking hospital ni mesti dh meninggal. Mungkin dulu dia dtg sendiri naik kereta pegi masuk wad sorang2 dan meninggal tanpa orang tahu ttg keretanya masih disitu. Masih parking.

Buat ambe terfikir betapa forever alone-nya sesetengah orang di dalam dunia ini. :'(
This is Abg Man, my eldest brother in law. He's got a family though. 

Jumaat, 1 November 2013

#83: Sexy Beast

Focusrite Scarlett series 18i6
OMG! Ambe dok sangka yang sebelum ni ambe duduk aim nok beli Focusrite Scarlett 2i4, tapi hari ni, Focusrite Scarlett 18i6 pulak yang ambe dapat. Sebelum ni sewaktu ambe survey mengenai Scarlett 2i4, ambe ada terbaca di satu forum mencadangkan alang-alang nak ambil audio interface yang baik, baik sambar Scarlett 8i6 terus sebab harganya tak jauh beza dengan Scarlett 2i4.

JACK shows 18 input and 6 output
Long story short, ambe telah beli sexy beast ni dari seorang rakan FB dari Setapak. Second hand, datang dengan kotak dan 2 disc driver, installer Ableton Live dan koleksi sample audio loops. Ambe ingat 18i6 ni kecik macam 2i4 tapi meleset. Benda ni besar dan very well build! External power source pun kena ada (tak macam 2i4 yang fully powered dgn USB).

18i6 ada 18 input dan 6 output. Tapi yang ada pada unit ni hanya ada 10 input. 8 lagi boleh connect dengan Optical input dari belakang unit ni. So far, ambe guna menatang ni dengan Linux Mint tade masaalah.

Ambe dapat latency 2.67 millisecond dengan memilih sample rate 192000 dan 256 frames. Dengan latency 2.67 millisecond, ambe masih mendapat XRUN, tapi tak kerap (1 XRUN dengan selang 8-10 saat) jadi ambe rasa ia acceptable. Untuk lebih selamat, bolehlah gunakan setting yang lebih sederhana dan akan berakhir dengan latency yang masih acceptable seperti 13 millisecond dengan langsung tak ada XRUN.

Settings on qjackctl. Latency 2.67 millisecond.

#82: Cara Bodoh untuk Mati

This music video is so cute, I feel so bad not sharing it ;) Have a nice day!


Jumaat, 25 Oktober 2013

#81: period_converter script modification for MT4

period_converter script with feedback
Ambe telah detect bahawa terdapat masaalah dengan skrip asal period_converter dari terminal MT4. Ia skrip yang bagus dalam menjalankan kerja tapi tidak memberikan apa-apa feedback bila ia telah siap memproses data. Jadi, disini saya membuat sedikit modifikasi keatas skrip asal period_converter untuk memberikan feedback bila kerja-kerja pemprosesan data sudah siap. Feedback terus dicetak diatas chart sebelah atas kiri. Contoh teks ialah "Converting using 15 multiplier.." akan keluar dan sewaktu memproses data dan teks "Conversion done! 33989 records(s) written using 15 multiplier" akan keluar setelah kerja-kerja memproses data selesai. Ini adalah kod bagi skrip period_converter yang telah dimodifikasi:

//+------------------------------------------------------------------+
//|                                             Period_Converter.mq4 |
//|                 Copyright © 2005-2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
#include <WinUser32.mqh>

extern int ExtPeriodMultiplier=3; // new period multiplier factor
int        ExtHandle=-1;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   Comment("Converting using " + ExtPeriodMultiplier + " multiplier...");
   int    i, start_pos, i_time, time0, last_fpos, periodseconds;
   double d_open, d_low, d_high, d_close, d_volume, last_volume;
   int    hwnd=0,cnt=0;
//---- History header
   int    version=400;
   string c_copyright;
   string c_symbol=Symbol();
   int    i_period=Period()*ExtPeriodMultiplier;
   int    i_digits=Digits;
   int    i_unused[13];
//---- 
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
   if(ExtHandle < 0) return(-1);
//---- write history file header
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   FileWriteInteger(ExtHandle, version, LONG_VALUE);
   FileWriteString(ExtHandle, c_copyright, 64);
   FileWriteString(ExtHandle, c_symbol, 12);
   FileWriteInteger(ExtHandle, i_period, LONG_VALUE);
   FileWriteInteger(ExtHandle, i_digits, LONG_VALUE);
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //timesign
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //last_sync
   FileWriteArray(ExtHandle, i_unused, 0, 13);
//---- write history file
   periodseconds=i_period*60;
   start_pos=Bars-1;
   d_open=Open[start_pos];
   d_low=Low[start_pos];
   d_high=High[start_pos];
   d_volume=Volume[start_pos];
   //---- normalize open time
   i_time=Time[start_pos]/periodseconds;
   i_time*=periodseconds;
   for(i=start_pos-1;i>=0; i--)
     {
      time0=Time[i];
      //---- history may be updated
      if(i==0)
        {
         //---- modify index if history was updated
         if(RefreshRates())
            i=iBarShift(NULL,0,time0);
        }
      //----
      if(time0>=i_time+periodseconds || i==0)
        {
         if(i==0 && time0<i_time+periodseconds)
           {
            d_volume+=Volume[0];
            if (Low[0]<d_low)   d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
            d_close=Close[0];
           }
         last_fpos=FileTell(ExtHandle);
         last_volume=Volume[i];
         FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
         FileFlush(ExtHandle);
         cnt++;
         if(time0>=i_time+periodseconds)
           {
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[i];
            d_low=Low[i];
            d_high=High[i];
            d_close=Close[i];
            d_volume=last_volume;
           }
        }
       else
        {
         d_volume+=Volume[i];
         if (Low[i]<d_low)   d_low=Low[i];
         if (High[i]>d_high) d_high=High[i];
         d_close=Close[i];
        }
     }
   FileFlush(ExtHandle);
   Comment("Conversion done! "+cnt+" record(s) written using "+ ExtPeriodMultiplier +" multiplier");
   Print(cnt," record(s) written");
//---- collect incoming ticks
   int last_time=LocalTime()-5;
   while(IsStopped()==false)
     {
      int cur_time=LocalTime();
      //---- check for new rates
      if(RefreshRates())
        {
         time0=Time[0];
         FileSeek(ExtHandle,last_fpos,SEEK_SET);
         //---- is there current bar?
         if(time0<i_time+periodseconds)
           {
            d_volume+=Volume[0]-last_volume;
            last_volume=Volume[0];
            if (Low[0]<d_low) d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
            d_close=Close[0];
           }
         else
           {
            //---- no, there is new bar
            d_volume+=Volume[1]-last_volume;
            if (Low[1]<d_low) d_low=Low[1];
            if (High[1]>d_high) d_high=High[1];
            //---- write previous bar remains
            FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
            FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
            FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
            last_fpos=FileTell(ExtHandle);
            //----
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[0];
            d_low=Low[0];
            d_high=High[0];
            d_close=Close[0];
            d_volume=Volume[0];
            last_volume=d_volume;
           }
         //----
         FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
         FileFlush(ExtHandle);
         //----
         if(hwnd==0)
           {
            hwnd=WindowHandle(Symbol(),i_period);
            if(hwnd!=0) Print("Chart window detected");
           }
         //---- refresh window not frequently than 1 time in 2 seconds
         if(hwnd!=0 && cur_time-last_time>=2)
           {
            PostMessageA(hwnd,WM_COMMAND,33324,0);
            last_time=cur_time;
           }
        }
      Sleep(50);
     }     
//----
  
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deinit()
  {
   if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; }
  }
//+------------------------------------------------------------------+