Akuarium: Kitaran Nitrogen

akuarium

Kitaran nitrogen adalah perkara yang paling penting dalam mana-mana ekosistem akuarium sama ada air tawar mahupun air masin. Kerana tanpa kitaran nitrogen yang lengkap, ekosistem asas untuk menjamin kemampuan ikan untuk hidup akan terjejas sama ada dalam jangka masa pendek mahupun panjang. Aku akan cuba menerangkan secara apa itu kitaran nitrogen dan apakah proses yang berlaku disebaliknya.

Ammonia

Apabila berkata tentang akuarium dan ikan kita tahu bahawa ikan makan dan hasil akhirnya adalah tahi ikan. Tahi ikan adalah antara sumber utama ammonia di dalam akuarium. Ammonia ini sebenarnya adalah amat bertoksik kepada ikan mahupun udang. Ammonia di dalam akuarium mempunyai dua keadaan:

Ammonia (NH3)

Ammonia adalah suatu kompaun yang mempunyai 1 molekul hidrogen dan 3 molekul nitrogen membentuk NH3. Asalnya dalam bentuk gas yang tidak berwarna tetapi mempunyai bau yang busuk. Ammonia dalam bentuk ini adalah yang paling bahaya kepada hidupan akuatik.

Ion Ammonium (NH4+)

Ammonium pula adalah ammonia yang telah mempunyai satu hidrogen tambahan dan menyebabkan dirinya mempunyai caj positif menjadi NH4+. Walaupun ammonium dianggap sebagai kurang bertoksik berbanding ammonia tetapi kehadirannya di dalam akuarium adalah masih membawa bahaya kepada haiwan akuatik jika dalam dos yang tinggi.

Kedua-dua jenis ammonia ini boleh masuk ke dalam akuarium melalui beberapa jalan seperti contoh:

Makanan

Makanan ikan mempunyai protin yang mana apabila dimasukkan ke dalam akuarium dan tidak dimakan oleh ikan ianya akan dirungkaikan oleh bakteria heterotropic dan akan mengeluarkan ammonia. Perkara ini adalah dianggap sebagai punca kematian ikan nombor satu di dalam akuarium terutamanya untuk pengguna permulaan apabila pengguna tidak menyedari masalah pemberian makanan berlebihan kepada ikan.

Disebabkan perkara ini, jadual pemakanan dari segi kuantiti hidangan dan kekerapan hidangan perlu diambil kira. Jika diteliti, kebanyakkan pengeluar makanan ikan mengesyorkan untuk memberikan jadual pemakanan kerap tetapi dengan kuantiti yang kecil untuk mengelakkan masalah ‘ammonia spike’ ini berlaku.

Bahan kumuhan

Ikan mengeluarkan ammonium secara terus daripada badannya tidak seperti manusia yang menukarkannya kepada bentuk yang kurang toksik iaitu urea. Ikan mengeluarkannya disebabkan bahan ini adalah toksik kepada diri mereka.

Sebaiknya nilai ammonia dan ammonium di dalam akuarium adalah serendah yang mampu iaitu 0 ppm (part per million). Jika tidak, kitaran nitrogen di dalam akuarium tersebut dianggap tidak sempurna dan amat tidak di galakkan untuk memasukkan sebarang hidupan akuatik terutamanya ikan dan udang dalam tempoh masa tersebut untuk mengelakkan kematian.

Nitrosomonas

Seperti yang diketahui, ammonia dan ammonium adalah tidak baik untuk hidupan akuatik, maka alam semula jadi mempunyai proses khusus untuk menukarkan ammonia tersebut kepada bentuk yang kurang bertoksik iaitu nitrit (NO2). Tugas untuk menukarkan ammonia kepada nitrit ini diberikan kepada bakteria berjenis nitrosomonas.

Bakteria nitrosomonas adalah satu genus bakteria yang akan “memakan” ammonia dan menukarkannya kepada nitrit.

2NH4+ + 3O2 → 2NO2 + 2H2O + 4H+

Nitrobacter

Setelah kerja-kerja menukarkan ammonia kepada nitrit dilakukan oleh bakteria nitrosomonas, kerja tersebut diteruskan pula oleh baketeria dalam genus nitrobacter. Bakteria ini akan “memakan” pula nitrit tersebut untuk ditukarkan kepada nitrat (NO3)

Walaupun nitrit tidak setoksik ammonia tetapi disyorkan untuk memastikan tahap nitrit juga serendah yang mungkin 0ppm jika mahu memasukkan sebarang hidupan fauna.

2NO2 + O2 → 2NO3

Setelah nitrat dikeluarkan, barulah tumbuhan boleh menggunakan nitrat ini sebagai sumber nitrogen atau baja.

Masalah Nitrat

Masalahnya nitrat ini tidak boleh digunakan oleh haiwan akuatik, dan nitrat juga tidak boleh hilang begitu sahaja. Dalam kuantiti banyak tinggi akan menjadi toksik kepada hidupan fauna. Disebabkan itu amalan penukaran air (water change) mengikut jadual diperkenalkan untuk mengeluarkan jumlah nitrat yang ada di dalam akuarium menjadikannya dalam julat yang boleh diterima (>20 ppm)

Pada isu yang akan datang kita akan cuba mengupas tentang water change.

Bagaimana untuk mempercepatkan kitaran nitrogen?

Ada beberapa kaedah yang boleh digunakan antaranya:

  1. Menambah nitrosomonas dan nitrobacter ke dalam akuarium. Sebagai contoh produk ADA Bacter & API Quick Start.
  2. Menggunakan air akuarium yang telah sempurna kitaran nitrogennya.

Kedua-dua kaedah ini tujuannya sama, untuk menambah nitrosomonas dan nitrobacter ke dalam sistem akuarium baru. Tetapi kedua-duanya mempunyai satu persamaan yang penting. Air yang digunakan perlulah tiada klorin. Jika tidak, bakteria tersebut akan mati.

Bagaimana untuk mengetahui bacaan Ammonia, Nitrit dan Nitrat.

Anda boleh mengetahui bacaan yang lebih jitu dengan menggunakan penunjuk yang boleh dibeli seperti API test kit untuk mengesan kehadiran ammonia, nitrit dan nitrat di dalam akuarium anda.

Jika boleh tanya dahulu kedai akuarium anda adakah mereka mempunyai khidmat untuk memeriksa perkara ini kerana set ini tak murah dan selalunya hanya digunakan pada permulaan sahaja.

Sembang: Bagaimana Nak Bina Portfolio?

github-contribution

Cabaran untuk graduan muda sekarang amat mencabar. Aku berkata tentang bidang IT. Bidang lain aku tak pasti. Bidang IT kini terlalu pesat. Terlalu besar untuk diterokai oleh graduan muda yang masih tercari rentak dan jalan yang mahu diterokai. Apabila pergi ke temuduga rata-rata melihat pada pengalaman kerja. Ini antara cadangan kaedah membina portfolio untuk bidang IT.

Secara ringkas aku lihat ada 4 cara untuk menambah atau membina portfolio yang menarik di dalam bidang IT.

  1. Github, Gitlab atau seumpamanya.
  2. Projek berbayar
  3. Projek open source
  4. Projek sendiri

Github, Gitlab atau seumpamanya

Ini antara yang paling penting. Bagi aku lebih penting daripada LinkedIn dan endorse daripada rakan kepada rakan yang kadang-kadang aku lihat sebagai syok sendiri. Terutamanya kepada graduan muda.

Aku cadangkan guna Github sebab lebih diketahui orang tetapi kalau nak guna Gitlab atau apa jua alternatif yang ada silakan. Tiada paksaan. Tetapi idea asalnya memudahkan kau memberikan impresi kepada orang kau sudah bersedia untuk berkerja dalam industri.

Ada akaun sahaja tak ada guna. Tujuan utama aku suruh daftar adalah untuk kau belajar apa itu Git. Boleh kata kebanyakkan kalau tak majoriti syarikat dalam bidang IT akan menggunakan Git dalam pembangunan sistem. Masalahnya datang apabila kebanyakkan graduan muda tak pernah tahu apa itu Git, SVN atau apa jua yang seangkatan dengannya.

Tujuan asalnya adalah untuk memudahkan pengawasan versi kod lebih lagi jika sesebuah projek tersebut mempunyai ahli yang ramai. Mungkin selama ini kau hanya buat projek seorang diri atau dua orang sahaja tetapi jika melibatkan lebih dari itu dan tidak menggunakan sebarang kaedah code versioning aku nak tabik spring. Maka kau belajar apa itu Git. Kalau yang asas seperti clone, pull, commit, push pun sudah mencukupi untuk permulaan. Kalau mahu lebih mencabar belajar pula rebase, merge, dan conflict.

Bila dah belajar dan faham konsep, gunakan dalam projek yang kau buat.

Projek Berbayar

Tak dinafikan penglibatan kau dalam projek berbayar adalah bagus untuk jangka panjang. Lebih lagi kalau kau digandingkan dengan orang yang dah bekerja. Cedok sebanyak mana ilmu dan teknik yang dia ada. Kalau boleh cari yang gunakan Git juga. Mudah kau nak praktiskan dengan dunia sebenar. Tetapi realitinya agak sukar nak dapatkan projek berbayar kalau kau tiada pengalaman.

Kalau kau bernasib baik bersyukurlah. Kalau tak berbayar pun tak apa asalkan projek yang melibatkan orang-orang industri.

Projek Open Source

Semasa aku belajar aku kerap terlibat dengan projek open source. Tetapi bukan dalam tugas yang besar. Selalunya adalah dalam bab penterjemahan. Antara yang pernah aku terjemahkan adalah beberapa modul di dalam Ubuntu. Daripada situ juga kau boleh mengenal orang-orang yang dah lama dalam bidang ini. Tak rugi pun belajar macam tu.

Tak dinafikan bidang IT ni tak besar mana di Malaysia. Pusing-pusing ke situ juga. Saling kenal mengenali ni tak de buruknya. Orang kenal kau, orang akan lebih mudah berminat daripada tak kenal langsung.

Projek Sendiri

Sebenarnya skop projek sendiri ini adalah terlalu besar. Kau boleh masukkan di dalam detail resume kau tersebut segala projek yang kau pernah buat termasuklah tugasan dalam kelas. Tetapi perlu dinyatakan bahawa itu adalah tugasan dalam kelas dan apa skopnya. Apa yang kau belajar daripadanya.

Kalau kau rajin, kau buat satu projek kecil-kecil pun tak de masalah. Contohnya projek Jajahan yang aku buat. Skopnya sebenarnya kecil sahaja. Tetapi orang guna sebab ramai yang mencarinya. Kalau tak ada idea, masuk dalam github, fork mana-mana projek yang ada dan kau kembangkan pula. Contohnya macam Jajahan tadi. Sekarang aku tengah kembangkan untuk menjadi Jajahan API supaya aku dapat jadikan data tersebut dalam bentuk API. Kalau kau rasa berminat, fork dan buat pull request untuk feature baru. Aku alu-alukan.

Selalunya projek luar yang aku fork adalah untuk membetulkan typo ataupun tambah terjemahan bahasa Malaysia. Itu sahaja, sebagai contoh baianat\vee-validate dan PopcornTime (sekarang dah kene tutup).

Kesimpulan

Walau apa pun jenis projek yang kau dapat, jangan lupa masukkan dalam resume apa projeknya, apa bahasa pengaturcaraannya, teknologinya dan apa skop kerja kau untuk projek tersebut.

 

Sembang: Starbucks Haram

starbucks-coffee

Antara isu tular yang diulangi setiap tahun adalah tentang tersebarnya satu nota yang mengatakan kini Starbucks telah pun diharamkan oleh pihak Jabatan Kemajuan Islam Malaysia (JAKIM). Apakah benar isu yang diperkatakan atau pun hanya sekadar satu tular yang tak berkesudahan?

Aku melihat perkara ini akan muncul setiap kali isu Palestin, atau boikot Israel timbul di Malaysia. Sehingga tahun 2017 aku dapat melihat trend ini sering diulang semula dengan hanya ‘penambah-baikkan’ setiap tahun yang boleh diselak semula sehingga tahun 2004. Ya, sebenarnya isu Starbucks haram ini telah pun wujud lebih daripada 10 tahun.

Jika diringkaskan sepanjang lebih sedekat ini ada beberapa titik penting seperti mana gambar dibawah.

starbucks-haram-kronologi

2004

Aku mulakan sorotan dengan merujuk kembali kepada nota yang terawal yang dapat aku jumpai iaitu pada tahun 2004 yang bertarikh 12 Januari 2004 bersumberkan daripada emel. Nota ini menggunakan bahasa Inggeris dan tertera nama Halimah Binti Hamzah yang dikatakan sebagai petugas program MS ISO 9002 di Jabatan Imigresen Malaysia.

Tolong sebarkan yang baik.
HALIMAH BINTI HAMZAH PASUKAN PETUGAS PROGRAM MS ISO 9002 JABATAN IMIGRESEN MALAYSIA
Please note that all chocolate, vanilla and coffee drinks at Coffee Bean and Starbuck contains E471 (Emulsifier 471), mono di-glycefides which is from animal origin (pork).
Raspberry Frap uses cherries that has been dip n alcohol & the tiramisu contains RUM. Please pass this message to our muslim friends.
Thanks call JAKIM 03 - 8886 4000 for more information.
 
Thanks and Regards,
Zahri(tm)
Dell | Dimension Systems
APCC Test Deployment.
F604-5044450
"http:\\penap2diagweb01

Sedikit ironi sebenarnya nota ini kerana aku kurang mengerti apa tugas seorang petugas dalam program MS ISO 9002 di Jabatan Imigresen Malaysia dengan pemutusan kehalalan sesebuah produk. Daripada nota ini dapat difahami bahawa didakwa bahawa produk Starbucks dan Coffee Bean menggunakan E471, iaitu mono di-glycefides yang dikatakan bersumberkan daripada produk haiwan atau lebih spesifik, babi.

Aku kurang pasti juga bagaimana sesuatu bahan yang dikatakan mono (1) selepas itu di (2). Itu perlu penjelasan lebih lanjut mereka yang mengetahui tentang kimia makanan. Di dalam nota yang sama juga dinyatakan bahawa ada alcohol dan rum digunakan di dalam penyediaan produk yang berlainan.

2006

Setelah ‘hiatus’ selama setahun, nota tersebut kembali berada di dalam kitaran pengguna internet yang mana dapat dilihat pada sekitar bulan Mei 2006 telah tersebar ke negara jiran terdekat iaitu Indonesia cuma perbezaan antara nota di forum tersebut dengan nota asal adalah lebih ringkas yang mana gesaan untuk menyebarkannya kepada muslim yang lain dan nombor JAKIM juga telah dibuang.

Ingin diingatkan bahawa pada tahun 2005/2006 adalah waktu dimana laman forum dan blog mula tumbuh bagaikan cendawan selepas hujan dan penyebaran informasi palsu seperti ini amatlah banyak kerana ketiadaan jalan untuk mengetahui kebenaran sesebuah berita. Dan disebabkan mengejar populariti ada diantara mereka yang menangguk di air keruh tanpa mereka sedari.

* Pringles Potato Chips made from USA, Belgium and etc contain E471 has pork substance/pork fats (MUIS) 
* Starbucks/Coffee Bean (espresso Frapucchino) Chocolate substance- contains ALCOHOL (MUIS) These emulsifiers are H.A.R.A.M (c.o.p.y & recheck when grocery shopping): 
120, 140, 141, 160(A), 161, 252, 300, 301, 405(Q), 413(Q), 422(Q), 430, 431, 433(Q), 435(Q), 436, 441, 470, 471(Q), 472(A,E), 473, 474, 475, 476, 477, 478, 481(Q), 482(Q), 483, 491(Q), 492, 494, 542, 570, 572, 631, 635, 920

Nota diatas dijumpai daripada entri sebuah blog daripada Singapura pada bulan Julai tahun yang sama yang mana tidak menggunakan nota yang sama tetapi dapat dilihat kesamaan daripada nota asal dalam perkara berkaitan daripada perkataan E471, produk yang menggunakan alcohol, Starbucks, dan Coffee Bean.

2007

Satu lagi penyebaran daripada negara seberang. Kali ini melalui emel yang bertarikh 2 April 2007.

HATI-HATI DEH KALO YANG SUKA KE STARBUCKS... MASIH BANYAK YANG HALAL 
KENAPA HARUS KE YANG HARAM? TANYA KENAPA?
 
 
Kalo emulsifier 471 bukan Cuma di starbucks tapi di beberapa makanan 
seperti coklat or marsmelow buatan nz and australi, dsb (ei. Cadbury) juga 
mengandung. 
 
Jadi kalo dapet oleh oleh coklat mohon di lihat dulu isinya apa.

Frensss...kalo mau hang-out di Starbucks or Coffebean pikir2 ulang 
deh..karena ternyata semua minuman mengandung elmusifier yang berasal dari 
babi, kalo membeli makanan kita jg gampang mengetahui halal or haram, 
caranya dengan melihat ada tidaknya kode E - trus tiga digit angka 
dibelakangnya, 
dan itu artinya bahan2 berasal dari babi. 

Starbucks & CoffeBean Lovers.... 

Please note that all chocolate, vanilla and coffee drinks at Coffee Bean 
and Starbuck contains E471 (Emulsifier 471), mono di-glycefides which is 
from animal origin (pork). 
 
Raspberry Frap uses cherries that has been dip in alcohol & the tiramisu 
contains RUM. 
 
Please pass this message to our muslim friends.

Emel ini mempunyai banyak penambahan dan juga mengurangan daripada nota asal. Nama Halimah dan JAKIM dibuang dan ditambahkan beberapa nota tambahan mengikut bahasa tempatan.

Blog tempatan juga tidak terlepas daripada menjadi penyebar kepada nota ini.

Someone asked:
Assalamualaikum dan saya ingin merujuk kepada mesej yang saya terima tentang yang disampaikan samaada benar atau khabar palsu kerana saya adalah pelanggan tetap salah sebuah cafe tersebut.
Mesej tersrbut adalah seperti dibawah:-

Jangan minum di Coffee Bean dan Starbuck HALIMAH BINTI HAMZAH PASUKAN PETUGAS PROGRAM MS ISO 9002 JABATAN IMIGRESEN MALAYSIA Please note that all chocolate, vanilla and coffee drinks at Coffee Bean and Starbuck contains E471 (Emulsifier 471), mono di-glycefides which is from animal origin (pork). Raspberry Frap uses cherries that has been dip n alcohol & the tiramisu contains RUM. Please pass this message to our muslim friends.

Jakim replied:
Coffee Bean telah mendapat pengesahan halal JAKIM dan telah dipastikan semua bahan yang digunakan adalah halal tetapi Starbuck memang tidak pernah memohon pengesahan halal JAKIM, maka tidak dapat dipastikan kehalalan bahan/produk di tempat tersebut.

Cuma tidak dipastikan sumber asal kerana daripada hasil carian tidak menjumpai soal jawab ini di laman JAKIM. Paling hampir adalah satu jawapan daripada JAKIM kepada soalan yang sama tetapi tiada tarikh yang dapat dijumpai. Perbezaan diantara entri blog ini dengan yang sebelumnya adalah daripada entri blog ini dapat kita ketahui kemungkinan pada masa tersebut, Coffee Bean telah mendapat persiijilan halal daripada JAKIM manakala Starbucks tidak pernah membuat sebarang permohonan kepada JAKIM.

Jika apa yang diperkatakan adalah benar maka dapat juga kita ketahui bahawa dengan kaedah tular ini telah memaksa syarikat-syarikat besar memohon persijilan halal JAKIM untuk mengelakkan masalah seperti ini berlaku. Seperti mana di dalam sebuah penulisan Halal, do we even care?“.

Soalan Kemusykilan
Say Telah Menerima Email Mengatakan Sesetengah Minuman Itu Haram Untuk Diminum. Petikan Email Berikut Adalah :- "starbucks Haram, Iso 9002 Jabatan Imegresan Halimah Binti Hamzah Pasukan Petugas Program Ms Iso9002 Jabatan Imigresen Malaysia Please Note That All Chocolate, Vanilla And Coffee Drinks At Coffee Bean And Starbuck Contains E471 (emulsifier 471), Mono Di-glycefideswhich Is From Animal Origin (pork). Raspberry Frap Uses Cherries That Has Been Dip N Alcohol & The Tiramisu Contains Rum. Please Pass This Message To Our Muslim Friends. Call Jakim 03 - 8886 4000 For More Information. Thank You Ini Adalah Tanggungjawab Kita Sebagai Saudara Sesama Muslim, Sampaikan Kepada Rakan-rakan Yang Lain... " Justeru Saya Mintak Pihak Jakim Dapat Memberi Penjelasan Adakah Minuman Tersebut Halal? 

Jawapan
E 471, E 476 atau E lain merupakan bahan tambah kepada makanan. Ia adalah
kod yang digunakan oleh pengeluar sesuatu produk di luar negara Tidak
semua E sama ada 471, E 476, E 479 atau pelbagai E itu berasal daripada
babi, kerana ada juga bahan itu daripada tumbuhan. Sekiranya bahan
tersebut berasal daripada tumbuhan maka sesuatu produk itu halal di
makan. Pada kebiasaannya produk keluaran Malaysia bersumberkan daripada
tumbuhan seperti kelapa sawit. Oleh itu bagi memastikan sesuatu produk
itu halal atau tidak, anda disarankan berhubung dengan pegawai di Bahagian
Hub Halal JAKIM di talian 03 83150200.

2008

Sekitar bulan Mac terdapat satu emel yang membincangkan perkara ini dengan nota tambahan yang mengatakan Starbucks adalah antara penyumbang kepada Israel.

Salam alaik,
   
  Saya personally boycott Starbucks sebab mereka menyumbangkan 10 % hingga 15 % 
hasil jualan setiap tahun kepada Israel untuk tujuan Defense Development ( 
senjata ).
   
  Sekarang ada satu lagi sebab. Mesej ini disampaikan oleh rakan saya untuk 
mendapat confirmation Sahabat SIM di sini.
   
  HALIMAH BINTI HAMZAH PASUKAN  PETUGAS PROGRAM MS ISO 9002 JABATAN IMIGRESEN 
MALAYSIA   
Please note that all  chocolate, vanilla and coffee drinks at Coffee Bean and 
Starbuck contains E471  (Emulsifier 471), mono di-glycefides which is from 
animal origin (pork).  Raspberry Frap uses cherries that has been dip n alcohol 
& the tiramisu  contains RUM. 
Please pass this  message to our muslim friends. 
Call JAKIM 03 - 8886 4000 for more  information. 
Thank you

Dan sekitar bulan April pula pihak JAKIM secara rasmi mengeluarkan kenyataan bahawa produk Starbucks dan juga Coffee Bean adalah halal.

"Jakim sendiri membuat pemeriksaan terperinci dan ujian makmal untuk memastikan bahan itu mendapat pengesahan halal berasaskan kepada tumbuhan sahaja serta digunakan oleh kilang berdaftar dengan Jakim," tegasnya.

Ini adalah kenyataan rasmi daripada pihak JAKIM yang pertama yang dapat aku temui berkenaan isu ini. Tetapi seperti biasa kenyataan seperti ini kadang kala hanya akan menyemarakkan lagi api tular sesuatu isu apatah lagi melibatkan halal haram seperti ini.

2010

Sekali lagi sebaran nota dijumpai tetapi kali ini ada sedikit perubahan pada nota yang penting.

contains E471 (Emulsifier 471), mono di-glycefideswhich is from

Jika dilihat, terdapat satu perubahan iaitu di-glycefides which menjadi di-glycefideswhich dan kesan daripada perubahan ini adalah semua nota di dalam bahasa Melayu kelak akan menjadi salah disebabkan pentafsir tidak dapat menjumpai perkataan yang sesuai untuk di-glycefideswhich dan menganggap itu adalah satu bahan kimia. Dan secara kebetulannya dibawa kepada penyebaran yang lainnya.

2011

Tahun 2011 adalah tahun dimana perubahan pada nota berlaku lagi. Pada tahun ini nama Halimah Binti Hamzah dibuang sama sekali dah tidak kelihatan pada nota-nota pada tahun berikutnya. Dan tahun ini juga merupakan tahun dimana pengaruh media sosial pantas seperti Twitter semakin kuat di Malaysia dan artis adalah antara orang yang tidak terlepas daripada menyebarkan perkara ini.

Pada bulan Ogos, pertama kali dapat dijumpai nota yang menggunakan bahasa Melayu.

STARBUCK telah disahkan haram oleh JAKIM. Semua chocolate, vanilla dan coffee drinks kat Coffee Bean dan Starbuck contains E471 (Emulsifier 471), mono di-glycefideswhich dari animal origin (pork). Raspberry Frap guna cherries yang dicelop dalam arak & the tiramisu ada RUM.Tlg sebar kat kekawan Islam. Hubungi JAKIM 03 - 8886 4000 utk dpt maklumat lanjut.Taiping Mali

Seperti yang dikatakan kesan daripada typo pada tahun 2010 dibawa kepada nota dalam bahasa Melayu dan dapat dilihat pada nota diatas. Dan penyebaran terus berlaku sepanjang tahun dalam masa beberapa tahun.

2016

Tahun 2016 merupakan tahun yang di mana nota tersebut telah diubah sekali lagi dengan meletakkan nama Dr. Zahazan Mohammad sebagai nama orang yang bertanggungjawab yang baru menggantikan Halimah binti Hamzah yang telah beberapa lama dibuang daripada nota sebaran. Dapat dikatakan bahawa penularan pada tahun ini dan mendatang amatlah mencabar daripada tahun-tahun sebelumnya dengan kerancakkan media sosial yang lebih besar daripada tahun 2011 seperti Facebook, Twitter dan sudah tentu tidak dapat dinafikan kesannya, Whatsapp. Dr. Zahazan telah pun membuat penafian tentang isu ini tetapi nota masih disebarkan.

Akhir tahun telah menaikkan semula isu ini apabila ada seseorang yang mengatakan bahawa dia merupakan seseorang yang terlibat dengan supply chain management Starbucks telah memuat naik nota audio yang menarik kembali isu Starbucks haram ini ke ruang perbicaraan rakyat Malaysia. Antara yang dikatakan di dalam nota audio tersebut adalah:

  • Starbucks produk Israel. Tidak boleh dibawa masuk secara terus tetapi perlu melalui Singapura.
  • Biji kopi adalah halal.
  • Krimer, pemanis dan soya ditulis non-halal.

Namun begitu pihak JAKIM telah mengeluarkan kenyataan dan mengatakan bahawa setiap bahan akan dikaji dan sijil halal adalah mengikut premis bukannya jenama.

2017

Penyebaran masih berlaku dan penggunakan medium seperti Twitter dilihat amat berjaya.

Kesimpulan

Penyebaran perkara ini akan berlaku semula di kemudian hari dan akan terus kembali sehingga satu masa dimana semua orang tidak menyebarkan dengan senang hati tanpa usul periksa.

Ada yang mengatakan perkara ini dengan boikot. Ketahuilah boikot boleh, tetapi jangan menggunakan jalan fitnah kerana kaedah tersebut hanya membawa kepada efek berbalik kepada kempen boikot.

Nota: Penulisan ini adalah penulisan semula daripada penulisan yang sebelum ini dengan tajuk yang hampir sama.

Tech: Kaedah Menyimpan Dokumen Yang Dimuat Naik

working-with-macbook

Kadang kala sesebuah sistem memerlukan pengguna sistem untuk memuat naik fail ke atas sistem dan terpulanglah kepada sistem untuk menyimpannya. Cuma kaedah penyimpanan yang tidak betul akan menyebabkan masalah di kemudian hari terutamanya jangka panjang.

Kaedah penyimpanan dokumen yang aku selalu gunakan adalah kaedah fizikal bukannya disimpan di dalam pangkalan data dalam bentuk blob. Kerana daripada pendapat aku kaedah penyimpanan data binari ke dalam pangkalan data adalah akan amat menyukarkan proses maintenance sistem.

Seperti yang telah diterangkan semalam, terdapat had jumlah tertentu kepada direktori dan selalunya pembangun akan menyimpan fail dengan kaedah memasukkan semua fail di dalam satu folder sahaja sebagai contoh, uploads. Di dalamnya diletakkan semua fail yang dimuat naik oleh pengguna. Aku tak kata salah tetapi seperti yang telah dikatakan, dalam jangka panjang kemungkinan untuk berlaku had jumlah fail dan juga kemerosotan sistem akan dapat dilihat.

Kaedah cadangan:

Kaedah WordPress

Kaedah ini dapat dilihat sebagai contoh di dalam WordPress yang lama. Sebagai contoh apabila pengguna memuat naik dokumen pada tarikh 1 Februari 2018, dokumen tersebut akan disimpan di dalam folder atau direktori uploads/2018/02.

Kaedah WordPress v2

Kaedah ini dilihat akan agak bagus tetapi apabila WordPress semakin besar dan mampu untuk menjalankan pelbagai fungsi yang lebih besar seperti forum, mereka mula menambahkan satu direktori tambahan yang aku kira diambil daripada masa tetapi kurang pasti bagaimana dijana menjadikan direktori sekarang adalah uploads/2018/02/23195137.

Untuk yang berminat menggunakan kaedah ini, aku cadangkan tukar yang belakang tersebut kepada hari pun sudah mencukupi untuk menjadikan direktori baru adalah uploads/2018/02/23.

Kaedah #3

Ini bukanlah kaedah WordPress gunakan tetapi adakalanya direktori tersebut terlalu mudah diteka terutamanya jika anda memerlukan orang tidak boleh meneka fail untuk mengelakkan scrapper mengambil data tersebut. Untuk itu anda memerlukan sesuatu untuk menjadikannya tidak dalam bentuk yang sekata seperti contoh menggunakan md5 untuk menukarkan 2018-02-23 menjadi fea973e5744c3539cb094a9c1f5186e5 dan dengan hanya mengambil 6 perkataan pertama pun sudah cukup memastikan cukup unik. Menjadikan direktori baru anda adalah uploads/2018/fea973. Aku cadangkan md5 sebab laju dan tidak membebankan sistem. Ataupun boleh gunakan kaedah lebih standard seperti UUID.

Kaedah #4

Atau jika di dalam satu permohonan terdapat lebih daripada satu dokumen yang perlu diupload anda juga boleh mengumpulkan dokumen kepada permohonan tersebut secara terus. Sebagai contoh permohonan yang mempunyai id:234 daripada pengguna yang mempunyai id:14 pada tarikh 2018-02-23 kita boleh menukarkan data tersebut kepada:

Nama Data md5
id pengguna 14 aab3238922bcc25a6f606eb525ffdc56
id permohonan + tarikh 234-2018-02-23 83fb5b06f87833c336ac45566987478f

Direktori baharu kita adalah uploads/aab323/83fb5b dan apabila pengguna tersebut membuat permohonan yang lain pula direktorinya untuk kali ini akan menjadi contohnya uploads/aab323/te2311 dengan semua dokumen yang dimuat naik oleh pengguna tersebut dalam apa jua aplikasi adalah berapa di dalam direktori uploads/aab323.

Kesimpulan

Terdapat terlalu banyak cara untuk menyimpan data dan contoh yang diberikan hanyalah sekadar cadangan dan lontaran idea sahaja. Anda boleh gunakan cara anda sendiri.

Tech: Berapa Fail Dalam Satu Folder?

analogy-memory-stacking

Pernah anda terfikir berapakah jumlah fail yang boleh dimasukkan ke dalam satu-satu folder atau direktori? Jawapan mudah, bukan unlimited.

Jumlah fail yang boleh dimasukkan ke dalam sesebuah folder atau direktori sebenarnya bergantung kepada apakah jenis sistem fail yang storan anda gunakan. Antara jenis storan yang ada adalah:

  • NTFS
  • exFAT
  • EXT3

Dan disebabkan ini adalah tidak bagus untuk memasukkan semua fail yang dimiliki anda di dalam satu direktori yang sama secara satu level yang sama (flat level). Kerana keadaan ini akan menyusahkan dua pihak.

  1. Sistem – sistem komputer anda perlu bekerja lebih keras untuk membuat indexing dan untuk memaparkan kepada anda senarai semua fail dalam masa serentak. Ini antara sebab mengapa antara tip yang biasa kita jumpa adalah jangan biarkan desktop anda terlalu banyak fail.
  2. Anda – kemungkinan untuk tidak menjumpai fail yang anda cari adalah lebih tinggi daripada fail yang bersistem cara penyimpanannya.

Cadangan kaedah penyimpanan

Oleh itu, menggunakan kaedah penyimpanan fail secara bersistem adalah digalakkan untuk memudahkan anda untuk mencarinya dan juga sistem untuk mengeluarkannya semula di kemudian hari.

Antara kaedah yang selalu saya gunakan untuk menyimpan data-data projek adalah;

  • Nama klien
    • Nama projek
      • Nama jenis fail / dokumen
        • Fail projek

Sebagai contoh untuk projek IT:

  • Klient A
    • Projek Juta-juta
      • Spesifikasi Keperluan Pengguna (URS)
        • A-jutajuta-urs.docx
        • A-jutajuta-urs.pdf
        • A-jutajuta-urs.pptx
      • Fail rujukan daripada klien
        • fail-rujukan-a.xls
        • fail-rujukan-b.docx
    • Projek Biliun-biliun
      • Spesifikasi Keperluan Pengguna (URS)
        • A-biliunbiliun-urs.docx
        • A-biliunbiliun-urs.pdf
        • A-biliunbiliun-urs.pptx

Selain memudahkan sistem komputer untuk membuat indexing, kaedah ini juga kalau di jadikan satu standard akan memudahkan anda mencari kembali fail anda.

PHP: substr() vs. mb_substr()

substr v mb_substr utf-8

Ada satu permasalahan. Kadang kala akan berlaku masalah data rosak (corrupt) apabila ditarik menggunakan XHR. Tetapi bukan pada setiap masa. Cuma akan berulang dalam beberapa hari mengikut ‘mood’ sistem.

Suspek #1

Driver PHP-PDO-MSSQL mempunyai bug yang mungkin memberikan data yang tidak betul dalam beberapa keadaan.

Hujah: Masalah tidak berlaku di development dan staging server.

Tetapi masalah ini agak disangsi kerana data di live tidak pernah dimasukkan ke dalam development atau staging server sebagai testing.

Suspek #2

Tulisan cina.

Hujah: Masalah ini hanya akan berlaku apabila terdapat di dalam kumpulan data yang dipanggil menggunakan XHR tersebut adalah karakter cina. Aku dah cuba untuk tulis tulisan bahasa cina untuk melihat adakah disebabkan tetapan unicode tetapi masih sama. Tiada masalah di staging dan development server.

Tetapi aku nampak sudah dekat dengan masalah kerana klunya ada disitu. Tulisan cina/jepun/korea. Aku cari adakah masalah tersebut hanya akan keluar jika tulisanya panjang berjela.

Ya betul. Apabila sampai ke sesuatu kepanjangan, akan ada masalah. Tetapi apabila kurang daripada itu tiada masalah.

Bedah Kod

Aku buka kod untuk melihat dimana masalah tersebut berlaku, dan aku lihat ada data yang melebihi sesuatu kepanjangan akan dipotong kepada ayat yang lebih pendek. Kaedah yang digunakan adalah substr(). Sebenarnya tiada apa masalah pun menggunakan substr() sebab selama ini memang aku pun guna substr(). Tetapi masalah ini perlu aku kaji kenapa karakter cina mempunyai masalah tersebut.

substr-for-utf-8-mb-substr

Di dalam ruangan komen di php.net ada komen mengatakan bahawa untuk UTF-8, sila gunakan mb_substr().  Sebenarnya aku tak pasti apa tu mb_substr().

multi-byte safe substr() operation

Ah. Itu dia, substr() bukan multi-byte safe kalau nak buat potongan ayat untuk ayat yang mempunyai UTF-8. Aku cuba sendiri membandingkan antara substr() dengan mb_substr()

substr mb_substr chinese character

Daripada contoh dalam gambar tu apabila aku gunakan substr() akan keluar ralat (gambar atas sekali) atau ? pada gambar di atas. Tetapi pada contoh kedua aku berjaya potong ayat tersebut tanpa masalah. Ini kerana dalam satu karakter UTF-8 seperti jepun atau cina mempunyai lebih daripada satu byte. Daripada tekaan aku, perkara sama akan terjadi kalau gunakan tulisan jawi. Tapi aku tak rajin nak cuba.

Konklusi

Kalau kau perlu potong ayat daripada ayat yang panjang dan ada kemungkinan orang masukkan bukan huruf latin biasa, sila gunakan mb_substr(). Jika tidak, substr() sudah memadai.

Yii2: Pautan sebagai POST request

Yii2-anchor-post-request

Aku ada satu masalah. Kaedah penghantaran data menggunakan URI di dalam Yii2 agak berlainan berbanding cara konvensional PHP dan Laravel. Ada masa lain aku cerita kenapa. Maka aku rasa kaedah paling mudah untuk menyelesaikan masalah ini adalah menjadikan sesebuah pautan (anchor) sebagai POST request. Aku terfikir satu cara iaitu menggunakan XHR daripada javascript. Tetapi aku rasa terlalu overkill. Setelah baca manual dan API Yii2, ada satu helper yang boleh digunakan untuk menyelesaikan masalah ini.

Di dalam Yii2, Html::a() mempunyai beberapa tetapan yang boleh diletakkan dan antaranya adalah data-method dan data-param. Sebagai contoh:

Html::a(('title' ,
  Url::to(['some/url']),
  [
    'data-method' => 'POST',
    'data-params' => ['modelName' => json_encode($data, true)]
  ]
)

Yang akan menjadikan sesebuah pautan, apabila ditekan oleh pengguna dia merubah menjadi satu POST request kepada server bukannya GET. Daripada pemahaman aku, asalnya memang akan menjadi GET tetapi apabila routing Yii2 mendapat tahu bahawa ada data-method yang sedang dihantar, maka Yii2 akan membuat satu redirect menukar request tersebut daripada GET kepada POST.

Kaedah ini agak berbeza dengan apa yang dibuat oleh Laravel untuk PUT & PATCH.

PictureThis: Shazam Untuk Pokok

picture this

Aplikasi yang menumpukan kepada pengecaman sesuatu objek bukanlah baharu di dalam dunia mutakhir ini kerana perkembangan teknologi seperti TensorFlow yang memudahkan sesebuah aplikasi seperti ini dihasilkan. PictureThis adalah salah satu daripada mereka yang mengambil inisiatif untuk membuat pengecaman objek tetapi khusus kepada tumbuhan sahaja. Lebih spesifik sebenarnya lebih kepada tumbuhan berbunga.

Cara guna

Kaedah penggunaannya amat mudah, pengguna hanya perlu;

  1. Mengambil gambar tumbuhan (baca: bunga)
  2. Sistem akan membuat pengecaman
  3. Sistem akan memberikan cadangan jenis tumbuhan.

Walaupun tidak semua tumbuhan dapat dicari, tetapi aplikasi ini aku lihat sedikit sebanyak dapat membantu mereka yang mahu mengenali sesebuah pokok atau bunga.

Tips & Idea

Aku nampak aplikasi ini boleh dipanjangkan dengan mengajak orang mengenali sesuatu pokok yang ada di sesebuah taman secara kaedah permainan seperti contoh, Treasure Hunting menggunakan klu dan perlu di verified dengan aplikasi ini. Sebagai contoh yang mudah apakah nama lain bagi pokok jejarum?. Syaratnya perlu membuat pengecaman menggunakan aplikasi ini dan mereka akan mencari pokok tersebut di sekitar taman dan membuat pengecaman. Sekaligus menjadikan permainan tersebut satu pengajaran dan aktiviti fizikal. Nampak macam satu aktiviti yang sihat.

Muatturun

Untuk yang berminat boleh muat turun di:

PictureThis via Apple Store

atau

PictureThis via Google Play

MSSQL: Cannot perform aggregate. Is Not Null vs != Null & eloquent.

mssql error 130

Aku perlu dapatkan data daripada satu view yang mana ada dua jenis data yang dimasukkan bersama. Ideanya adalah jika planner_id adalah null maka data external_appli akan di ambil. Dan nilai akhir yang aku mahu dapatkan adalah jumlah tambah antara planner_id dan external_appli berdasarkan tahun dan jenis (tidak ditunjukkan di dalam table di bawah).

planner_id external_appli
null 1
1 null

#1 : is not null

select
  case when planner_id is not NULL
    then count(DISTINCT planner_id)
       else count(DISTINCT external_appli)
       end as total,
  course_type, course_year from list_user_to_course
where (ca_status is null AND status = 4) or (ca_status = 4)
group by course_year, course_type;

Kaedah pertama adalah dengan membuat query mudah yang mana mengira planner_id atau external_appli mengikut condition jika planner_id null atau tidak. Malangnya dengan kaedah ini MSSQL akan mengeluarkan satu ralat:

[S0001][130] Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

Yang membawa maksud query tidak boleh dijalankan disebabkan planner_id tidak dimasukkan sebagai salah satu elemen di dalam group by. Tetapi jika aku masukkan planner_id, hasil query akan tidak menepati kehendak kerana hasil akan terpecah mengikut planner_id dan perlu melakukan kiraan tambahan di bahagian aplikasi (PHP kes ini).

#2: != null

select
  case when planner_id != NULL
    then count(DISTINCT planner_id)
       else count(DISTINCT external_appli)
       end as total,
  course_type, course_year from list_user_to_course
where (ca_status is null AND status = 4) or (ca_status = 4)
group by course_year, course_type;

Query kedua adalah hampir sama kecuali pada baris kedua yang menukarkan daripada is not null kepada != null. Sebenarnya aku kurang pasti apakah perbezaan antara kedua ni. Tetapi apabila menggunakan kaedah ini, MSSQL tidak mengeluarkan sebarang notis ataupun ralat dan hasil query juga menepati kehendak.

Malangnya apabila ditukarkan kepada bentuk Eloquent dan dijalankan, terdapat ralat seperti cara #1 dan ini amat mengelirukan aku kerana di dalam konsol MSSQL #2 tiada masalah tetapi apabila melalui eloquent, ada masalah.

Ada dua punca yang aku suspek berlakunya masalah ini.

  1. PHP-MSSQL-PDO driver ada bug. Kerana daripada konsol MSSQL tiada masalah.
  2. Eloquent Laravel ada bug. Kerana tidak salah aku konsol MSSQL aku juga gunakan driver yang sama. Kalau tak salah.

#3: select from subquery

SELECT
  sum(total) AS total,
  course_type,
  course_year
FROM (
       SELECT
         count(DISTINCT planner_id) AS total,
         course_type,
         course_year
       FROM list_user_to_course
       WHERE ((ca_status IS NULL AND status = 4) OR (ca_status = 4)) AND planner_id IS NOT NULL
       GROUP BY course_year, course_type
       UNION ALL
       SELECT
         count(DISTINCT external_appli) AS total,
         course_type,
         course_year
       FROM list_user_to_course
       WHERE ((ca_status IS NULL AND status = 4) OR (ca_status = 4)) AND external_appli IS NOT NULL
       GROUP BY course_year, course_type
     ) x
GROUP BY course_year, course_type;

Setelah melihat sekitar stackoverflow aku merasakan aku perlu menukar query kepada subquery. Ideanya adalah untuk mengira jumlah berdasarkan hasil tambah antara dua query yang dibuat secara union all. Dan daripada query tersebut hasilnya adalah sama seperti apa yang aku harapkan.

Bonus: Eloquent untuk #3

Aku kongsi eloquent yang aku gunakan. Mana tahu ada orang boleh beri cara yang lebih mudah daripada ini.

// query pertama
$q = DB::table('list_user_to_course')
    ->select('course_type', 'course_year')
    ->addSelect(DB::raw('count(DISTINCT planner_id) AS total'))
    ->where(function ($a) {
        $a->whereNull('ca_status')
            ->whereRaw('status = 4');
    })
    ->orWhereRaw('ca_status = 4')
    ->groupBy('course_type', 'course_year');

// query ke dua
$w = DB::table('list_user_to_course')
    ->select('course_type', 'course_year')
    ->addSelect(DB::raw('count(DISTINCT external_appli) AS total'))
    ->where(function ($s) {
        $s->whereNull('ca_status')
            ->whereRaw('status = 4');
    })
    ->orWhereRaw('ca_status = 4')
    ->groupBy('course_type', 'course_year')
    ->unionAll($q); // link antara query pertama dengan kedua menggunakan union all

// kira jumlah menggunakan kaedah subquery
return $e = DB::table(DB::raw("({$w->toSql()}) as x"))
    ->select('course_type', 'course_year')
    ->addSelect(DB::raw('sum(total) as total'))
    ->groupBy('course_type', 'course_year')
    ->get();