Categories
Article

Bagamana nak buat program GUI Ringkas dengan C# dan .Net Framework

WARNING: Saya rasa ada banyak kesilapan ejaan dan keterlajuan dalam article ini. So… good luck.

Assalamualaikum semua! Apa khabar! Pada hari ini, saya akan tulis tentang bagaimana untuk buat program Graphical User Interface (GUI) yang ringkas dengan C#. Article ini adalah terjemahan dari article saya yang lain kat RookieCode, so kemungkinan besar akan ada banyak masalah terjemahan.


Oh, mari kita mulakan. Mula-mula sekali mari kita mengenal C# dan sejarahnya. C#(disebut C-sharp) merupakan satu bahasa programming yang agak baru. Bahasa ini diperkenalkan oleh Microsoft sebagai bahasa rasmi .Net Framework mereka. C# bertujuan untuk menggabungkan kelebihan-kelebihan C++ dan Java dalam satu platform. Ia lebih laju dari Java dan jauh lebih mudah untuk digunakan dari C++. Seperti Java, C# bukanlah compiled language semata-mata. Ianya adalah gabungan compiled language dan interpreted language. Source Code C# tidak di-compile terus kepada machine-code, tetapi ianya di-compile kepada sejenis bytecode khas yang mana akan dicompile pula kepada machine code oleh .Net CLR(Common Language Runtime) ketika program itu dijalankan. Disebabkan ini, program C# boleh di-optimumkan kepada CPU pengguna tanpa perlu binary berlainan. .Net Framework (disebut Dot-Net framework), merupakan satu kolleksi library/API yang boleh diakses daripada beberapa programming language yang menyokong .Net Framework. Bahasa utamanya adalah C#, namun ia juga boleh digunakan dengan bahasa programming yang lain seperti C++, J# dan Visual Basic .Net. Bahasa programming tersebut perlu dicompile kepada bytecode khas sepertimana juga C#. Ini membolehkan bahasa programming lain mengakses utility yang dibuat menggunakan bahasa programming yang lain dengan cara yang sangat portable. .Net Framework sudah diinstall secara default atas Windows XP service pack 2 dan keatas. Windows XP sebelum service pack 2 boleh download .Net Framework secara berasingan. .Net Framework tidak boleh digunakan untuk Windows Millennium dan sebelumnya. Untuk Linux, satu projek yang dipanggil “mono” membolehkan program .Net untuk berfungsi walaupun dengan sedikit masalah compatibility.

Di post ini, kita akan menggunakan Microsoft Visual C# Express Edition untuk buat program kita. Edisi Express boleh didapati secara percuma di sini . Microsoft Visual Studio ialah koleksi IDE(Integrated Development Environment) untuk pembangunan program, Lesen standardnya tidak percuma walaupun ianya mungkin adalah IDE terbaik sekali.

Baiklah, mari kita mulakan. Start Visual C#, anda akan jumpa screen seperti dibawah.

Tekan butang “New Project”.

Pilih “Windows Forms Application” dan tukar nama projek kepada “MyMouseFollower” atau apa-apa yang kamu suka.Tekan “OK” dan screen pertama yang sepatutnya kamu jumpa ialah form builder seperti dibawah.

Form builder adalah satu peralatan yang membolehkan anda untuk menyusun komponen program anda dengan mudah tanpa menggunakan kod directly. Di bahagian atas kiri form builder ada satu butang “Toolbar”. Tekan butang tersebut dan senarai “Control” yang kamu boleh gunakan akan muncul.

Untuk projek ini, kita akan menggunakan “Panel”. Secara ringkasnya, Panel adalah ruang kosong yang mana kita akan lukis diatasnya nanti.Tekan “Panel” dan drag-drop atas “Form”

Juga, pilih “Label” dan letakkannya dibawah panel tadi.

Sekarang tulisan di label itu ialah ‘label1’ dan itu bukanlah apa yang kita nak. Right click diatasnya, kemudian tekan “properties”. Satu tab akan muncul di belah kanan screen.

Tab ini membolehkan anda untuk mengubah property Control yang dipilih. Edit property “Text” label1 kepada “My mouse follower” atau apa-apa yang kamu suka. Tulisan di label1 patut bertukar dari “label1” kepada “My mouse follower”.

Kamu boleh jalankan program tersebut menggunakan butang “Start Debugging” yang terletak di toolbar atas. Satu window yang berfungsi akan muncul walaupun dalam keadaanya sekarang ianya tidak berguna dan membosankan.

Baiklah, sekarang mari kita buat programming. Di bahagian kanan screen,

Ada tab yang menunjukkan file-file yang ada dalam projek. Pilih “Form1.cs” (file yang tengah kita pakai), right click-nya, dan tekan “View Code”.

Ini adalah kode untuk Form1 ditulis dalam C#. Lapan baris pertama terdiri dimulakan dengan perkataan “using”. Kata kunci “using” memberitahu compiler namespace mana yang kita gunakan. .Net Framework merangkumi banyak program/utility. Untuk memudahkan pengurusan program tersebut, utiliti-utiliti tersebut dikumpulkan dalam kumpulan yang dipanggil namespace. namespace bermaksud ruang nama. Ianya digunakan untuk mengelakkan kekeliruan antara class yang mempunyai nama yang sama dan juga untuk mengatur class yang sama jenis/kegunaan. Dalam kod diatas, class “Form1” terkandung antara dua “curly braces” yang dimulakan dengan perkataan “namespace MyMouseFollower”. Ini menunjukkan yang class Form1 terletak didalam namespace MyMouseFollower. class dari namespace lain boleh mengakses class Form1 menggunakan nama penuhnya iaitu “MyMouseFollower.Form1”. Ataupun, kita boleh letak baris “using MyMouseFollower” di permulaan source code class tersebut dan hanya menggunakan “Form1”. Kita akan lihat bagaimana ia dilakukan nanti.

Baris “public partial class Form1:Form” mengisytiharkan class yang bernama “Form1”. Dalam object oriented programming, class ialah kod yang “define” sesuatu object. Fikirkan perkataan “class” itu lebih kepada “kereta ber-class C” dan bukannya “class room”. Butiran Object Oriented Programming agak sukar untuk diterangkan di peringkan ini. Buat masa ini, aggap sahaja bahawa class Form1, mengumpulkan beberapa kode. Kata kunci “public”, bermaksud class ini boleh diakses dari luar namespacenya dan kata kunci “partial” bermaksud source code ini hanyalah sebahagian daripada Form1 yang mana sebahagian lagi dijana oleh form builder.

Baris “public Form1()” mengisytiharkan satu method/subroutine/function. subroutine, secara ringkasnya adalah sekumpulan kode-kode. Dalam kes ini, hanya ada satu baris kod iaitu “InitializeComponent()”. Kode ini bermaksud, jalankan method yang bernama “InitializeComponent” yang diisytiharkan oleh form builder di partial yang lain. Lihat bahawa method “Form1” mempunyai nama yang sama dengan class tersebut. Method yang mempuntai nama yang sama dengan class adalah constructor kepada class itu. Ini bermakna method “Form1” merupakan constructor kepada class “Form1”. Apabila sesuatu object diwujudkan, constructor kepada class object tersebut dijalankan untuk membina object tersebut.

Sekarang ini, kode hanya menyusun control kepada form itu sahaja. Mari kita ubahnya untuk buat sesuatu yang lebih menarik. Dibawah baris “InitializeComponent”, tulis “pa”.

Satu dropdown menu akan muncul, menyenaraikan perkataan-perkataan yang sesuai diletakkan. Antara perkataan tersebut adalah “panel1”. Ingat bahawa nama panel yang kita letak di form builder adalah “panel1”. Form builder akan secara automatiknya, membuat satu global variable yang sama nama dengan panel tersebut di partial yang lain untuk memudahkan kita mengakses control tersebut. Atas perkataan “panel1”, ada perkataan “Panel”. Panel adalah nama class yang “define” satu panel dalam form. Nama penuhnya adalah System.Windows.Form.Panel. Tetapi, disebabkan kita telah meletakkan baris “using System.Windows.Form”, perkataan “Panel” sudah mencukupi. Secara konvensional, nama class dimulakan dengan huruf besar manakala nama property dimulakan dengan huruf kecil. Kamu boleh menggunakan Panel untuk meletakkan panel secara manual, namun, bukan itu yang kita akan buat pada hari ini. Rujukan lengkap tentang class apa yang ada dalam .Net Framework boleh didapati di sini. Sekarang, tekan Tab dan ia akan lengkapkan perkataan tersebut. Kemudian taip lagi “.pa” dihadapannya.

Sekarang satu lagi dropdown menu muncul tetapi dengan perkataan yang lain. Apabila kita menggunakan symbol ‘.’, kita menyatakan bahawa kita sedang memilih property/attribute/member object tersebut. Dan itu yang kita akan lakukan. Kita akan lihat nanti bagaimana untuk buat property kita sendiri. Sekarang, tekan tab untuk auto-complete perkataan Paint. Kemudian, tambah “+=” dihadapannya.

Property “Paint” ialah sejenis delegate satu lagi feature C# yang agak advance. Untuk kali ini, kita tidak belajar secara mendalam tentang delegate. Kita hanya akan menggunakannya. Secara ringkasnya, delegate merupakan satu system event-handler yang ada dalam C# yang membolehkan kita untuk menjalankan sesuatu method apabila satu event berlaku. Dalam kes ini, event “Paint” berlaku apabila control tersebut dilukis. Tekat Tab dua kali dan ia akan menjana satu method.

method yang baru dijanakan sebentar tadi dinamakan “panel1_Paint”. Kata kunci “void” bermaksud method ini tidak me-“return” sebarang data. Apa yang dimaksudkan dengan “return” itu tidak akan kita bincangkan pada hari ini memandangkan setiap method yang kita buat pada hari ini adalah method yang tidak me-return sebarang variable. Method ini juga mempunyai parameter “object sender” dan “PaintEventArgs e”. parameter adalah nilai/variables yang boleh diberi kepada method ini. variable atau dalam bahasa melayunya pembolehubah merupakan tempat untuk meletakkan nilai atau object sepertimana juga property yang mana kemungkinan besar merupakan public variable. Kita akan lihat bagaimana untuk mengisytihar variable sebentar nanti. Secara defaultnya method ini mengandungi satu baris kode yakni “throw new NotImplementedException()”. Secara ringkasnya, kode ini akan menghasilkan satu exception. exception merupakan “simbol masalah yang terkawal”. Dalam kes ini, ia akan menghasilkan exception kerana kita tidak memberitahu apa yang nak dibuat. Disamping itu, lihat bahawa setiap statement diakhiri dengan semicolon ‘;’. Dalam C#, setiap statement diakhiri dengan semicolon. Sekarang, padam baris exception tersebut dan salin kode dibawah.

Baris pertama “Graphics g=e.Graphics;” menunjukkan cara untuk mengishtihar dan meletakkan object kepada satu variable baru yang bernama ‘g’. C# ialah sejenis bahasa programming yang ‘strongly type’. Ini bermakna, setiap variable perlu ada ‘jenis/type’ yang jelas. ‘jenis/type’ dalam kontext ini adalah satu nama class ataupun jenis yang sudah terbina dalam C#. Dalam kes ini ‘g’ adalah satu variable berjenis ‘Graphics’. ‘Graphics’ ialah satu class yang membolehkan kita untuk melukis di atas sesuatu. Nama penuhnya adalah ‘System.Drawing.Graphics’. Simbol ‘=’ adalah simbol ‘assignment/peletak’, yang bermakna nilai di sebelah kanan simbol akan disalin ke variable di sebelah kiri simbol. Secara ringkasnya, kita sedang membuat satu variable bernama ‘g’ yang berjenis ‘Graphics’ dengan nilai daripada ‘e.Graphics’ yang mana ‘Graphics’ di sini adalah property kepada variable ‘e’ yang merupakan parameter kepada method ‘panel1_Paint’.

Di baris seterusnya kita sedang call/memanggil method ‘DrawString’ daripada variable g. Lihat di tooltip ada perkataan ‘1 of 6’ dan anak panah di tepinya. Jika kamu click anak panah tersebut, kamu akan lihat method DrawString boleh menerima lebih dari satu jenis set parameter dengan susunan jenis yang berbeza. Dalam kes ini ada 6 set. Ini dipanggil method/function overloading. Sebenarnya dalam class Graphics, ada 6 method yang mempunyai nama yang sama yakni “DrawString” tetapi setiap satu mempunyai set parameter yang berlainan. Compiler akan secara automatiknya memilih method yang betul bergantung kepada variable yang diberi semasa method call.

Dalam kes ini kita akan menggunakan overload yang ketiga. Isikan method call ini mengikut screenshot dibawah. Kamu tidak perlu untuk click anak panah untuk memilih function overload. Tool tip tersebut hanyalah alat bantuan semata-mata.

Oh ya! semasa kamu sedang mengisi parameter ‘brush’, tooltip akan keluarkan beberapa kata kunci yang bermula dengan ‘Bru’ dan berkaitan dengannya. Buat masa ini, saya cadangkan kamu gunakan sahaja “Brushes” yang mengandungi koleksi ‘Brush’ yang sudah sedia ada.

Apabila kamu sudah melengkapkan kod tersebut, jalankan program dengan menekan butang “Start debugging” atau menggunakan shortcut F5. Kamu patut lihat satu window seperti di bawah.

+
Begitulah caranya programmer melukis diatas panel. Perhatikan bahawa nilai x adalah 5, manakala nilai y adalah 50. Dalam kebanyakan programming toolkit, origin (x=0,y=0) terletak di atas kiri screen/panel dan nilai positif y menghala ke bawah. Ini bermakna apabila nilai y meningkat, lukisan akan begerak ke bawah, dan apabila nilai x meningkat, lukisan akan bergerak ke kanan. 
Sekarang, mari kita buat sesuatu yang lebih menarik. Ishtiharkan dua global variable seperti di bawah.

global variable secara ringkasnya adalah variable yang diishtiharkan di luar class method. Bezanya adalah global variable boleh diakses dari mana-mana class method, dan sebarang perubahan terhadap global variable akan dikekalkan sepanjang hayat object tersebut. Berbanding global variable, local variable (variable didalam method) hanya boleh diakses didalam method tersebut dan diishtiharkan semula setiap kali method itu digunakan. “int” pula bermaksud “integer” iaitu salah satu type/jenis yang sudah terbina dalam C#, digunakan untuk menyimpan nombor bulat.

Seterusnya, kita tambah lagi satu handler untuk “MouseMove” event seperti mana yang kita lakukan dengan “Paint” event.

Dalam mouse handler, gunakan kode seperti di atas.

Kemudian, ubah paint handler kepada kod diatas.

So, apabila tetikus bergerak di atas panel, ia patut tukar variable “myx” dan “myy” kepada kedudukan tetikus dan apabila panel dilukis, ia akan melukis dua garisan yang akan bertemu di kedudukan tetikus. Sekarang, mari kita cuba program itu, tekan F5 dan kamu patut lihat window seperti di bawah.

Cuba gerakkan tetikus di atas panel tersebut, adakah garisan itu bergerak? Kenape? Tips: Minimize, kemudian maximize window tersebut. Sekarang garisan itu patut berada di kedudukan yang berbeza.

Masalahnya di sini adalah, event paint hanya berlaku ketika window perlu dilukis semula. Contohnya ketika window tersebut didedahkan daripada bawah window yang lain atau dalam kes ini, apabila window sedang di maximize. Sistem Operasi (selalunya) tidak akan ingat bagaimana rupa sesuatu window apabila ia di maximize, jadi ia minta program tersebut untuk melukis dirinya sendiri. Dan pada waktu itulah paint handler digunakan, yang mana ketika itu, ia akan melukis garisan bergantung kepada kedudukan tetikus yang disimpan. Untuk membuatkan garisan itu bergerak mengikut tetikus, kita perlu invalidate(bermaksud tidak sah) panel apabila mouse bergerak.

Untuk invalidate panel tersebut, kita gunakan method Invalidate(). Secara ringkasnya, method ini akan menandakan panel itu sebagai tidak sah, jadi ia perlu dilukis semula. Ubah kode di mouse handler seperti di atas dan jalankan program.

Sekarang kamu patut lihat garisan itu bergerak mengikut tetikus. Sekarang, mari kita buat sesuatu yang lebih menarik. Ubah paint handler anda seperti di bawah.

Baris “int phase=(DateTime.Now.Milisecond/100)%10” secara ringkasnya bermaksud, dapatkan masa sekarang dalam milisaat, bahagi dengan 100 dan kemudian dapatkan baki jika dibahagi lagi dengan 10. Hasilnya ia akan menjadi nombor diantara 0 hingga 9 yang meningkat 1 setiap 100 milisaat. Bagaimana ia berguna akan ditunjuk sebentar nanti.

Kata kunci ‘while’ akan menyebabkan komputer menjalankan kode didalam curly bracket(loop/block) selagi expression “i<5" itu benar. Expressi "i<5" dikira benar selagi nilai dalam variable "i" itu kurang dari 5. Disebabkan "i" asalnya 0, dan ianya ditambah 1 setiap kali block ini dijalankan, code didalam block ini akan dijalankan sebanyak 5 kali. Didalam block tersebut, kita mengira ‘ciclesize’ iaitu 10 x nombor loop + phase. Kemudian kita lukis bulatan di tengah-tengah panel. Apa yang ia lakukan? Well, mari kita jalankannya dan program kamu patut jadi sebegini.

Lima bulatan didalam bulatan yang lain. Jika kamu terus menggerakkan tetikus kamu, kamu akan perasan yang ianya sebenarnya satu animasi. Tetapi untuk ia bergerak, kamu perlu terus menggerakkan tetikus kamu supaya ia akan invalidate panel tersebut supaya panel itu akan dilukis semula. Untuk membolehkan ia bergerak tanpa menggunakan mouse, kita boleh gunalan Timer.

Ubah kod anda menjadi seperti yang diatas. Event “Tick” pemasa, akan berlaku setiap 100 milisaat jika di set seperti yang diatas. Di dalam handler, ia invalidate panel1. Disebabkan panel1 invalidate setiap 100 milisaat, kita tidak perlu invalidatenye dalam MouseMove handler. Tetapi tidak ada salahnya jika kita biarkan sahaja kod tersebut. Sekarang, bulatan itu akan terus bergerak walaupun tetikus tidak bergerak.

Sekarang, cuba anda tukar kod di paint handler seperti yang diatas. Cuba teka apa yang berlaku?

Sekarang bulatan itu akan mengikut tetikus! Dua perubahan ringkas dan ia lakukan sesuatu yang nampak komplex. Membuat program itu senang, tetapi buat program bagus yang senang diubah itu susah.

Kamu perasan tak yang lukisan ini macam berkelip/flicker. Itu kerana, lukisan ini ditunjukkan walaupun ia belum siap. Ada technique ringkas yang boleh mengatasi masalah ini. Ia dipanggil double buffering. Secara ringkasnya ia bermaksud, kita lukis diatas satu image(buffer), kemudian kita lukis image tersebut diatas panel. Panel ada double buffering sedia ada yang tidak dihidupkan. Namun, untuk set double buffering, kita perlu subclass Panel terlebih dahulu, sesuatu yang agak mengelirukan buat masa ini. Jadi kita akan buat implementasi double buffering kita sendiri.

Secara ringkasnya, kita akan buat satu Bitmap(sejenis Image) yang sama saiz dengan panel, kemudian kita lukis atas Bitmap itu, dan kemudian kita lukis Bitmap itu diatas panel. Jalankan program ini, dan kamu patut lihat pengurangan flicker yang agak drastik. Dan apa yang kita lakukan cumalah tambah dua baris dan ubah satu. Disebabkan kita simpan e.Graphics di variable g terlebih dahulu dan kemudian lukis menggunakan g dan bukannya secara terus dari e.Graphics, kita hanya perlu ubah ‘g’ dan segalanya akan berubah.

So, apa yang kita belajar hari ini? Ada banyak benda yang boleh dibuat dalam program. Buat program itu senang, tapi buat program yang bagus itu susah. So, sekarang ni, apa kata kamu try ubah kod kamu mengikut apa yang kamu suka. Selamat berjaya, good luck dan Assalamualaikum.

Categories
Projects

Automatic IIUM Schedule Formatter, now v4.0!

Assalamualaikum semua! Apa khabar? What are you thinking? May be you are thinking “What? 4.0 already?”. Well, versi sebelum ini adalah 3.3, macam mana boleh sampai situ saya tak tau, dan kali ini ada sikit incompatible update, so “git tag v4.0”.

So whats new? Sebenarnya ada dua aje benda yang baru, pertama styler yang baru dan kedua kebolehan untuk save sebagai gambar di facebook. Styler tersebut merupakan update daripada YourAgregator yang ada sekarang yang mana datang daripada AIIUMSF yang dulu yang mana datang daripada YourAgregator yang asal. So, mari kita lihat screenshot…..

Di bawah kiri ada butang expand/shrink.

Styler yang baru ini secara layoutnya berlainan dengan styler yang lama. Di styler yang lama, css mengandungi senarai ‘selector’ yang boleh di style-kan. Layout control, kedudukan slider untuk border, padding dan sebagainya fixed. Malangnya design tersebut sangat tidak sesuai untuk css yang mana untuk ubah sesuatu mungkin kita perlu ubah ‘parent’ kepada sesuatu itu. Tambahan lagi, ianya susah nak digunakan.

Berbeza dengan dahulu, css sekarang ini mengandungi layout kepada control tersebut. Ini bermakna, kedudukan setting sesuatu di styler boleh diubah dengan mengedit css. Kalau tak faham tak ape. Senang cakap, designer sekarang boleh meletakkan ‘control’ di tab mana yang diorang suka, membolehkan mereka untuk me-layout untuk memudahkan pengguna.

Jika kita lihat di css yang asal, ia menganding satu comment bertanda ‘layout’ yang mengandungi JSON(JavaScript Object Notation) yang menandakan kedudukan sesuatu control serta css selector yang control tersebut kawal.

By the way, ini adalah default style yang baru.

Lagi satu tambahan AIIUMSF adalah butang “Save in FB”. Basically, ia akan keluarkan dialog di facebook meminta kebenaran untuk publish stream, benarkan dan jadual anda patut ada dalam gallery. Amaran, “Save in FB” tidak keluar dalam tab yang baru macam “Save”, dan kemungkinan besar jadual anda tidak akan render dengan betul di FB. Ianya disebabkan kelemahan Google Conversion api, dan disebabkan saya tidak menggunakan ‘server’ yang sebenar, saya tak boleh buat apa-apa untuk membetulkannya. So, saya rekemen kamu “Save” dahulu sebelum “Save in FB”.

And… thats about what it should do. Arahan penggunaan boleh didapati di iiumschedule.appspot.com, tolong like page tersebut, Bye bye dan Assalamualaikum.

Categories
Projects

Welcome to YourAgregator!

Ini adalah salinan daripada post di YourAgregator….

Welcome!

Assalamualaikum semua. Apa khabar? Selamat datang ke iium-news hosted di YourAgregator.
So, sedikit sejarah, lebih kurang 6 bulan lepas, saya telah buat blog pribadi saya, yakni sayaasdacap.blogspot.com. And so, me-market-kan blog it di seluruh group facebook. Pada awalnya sambutan agak ok-lah, namun selepas itu, kita lihat kalau tak share, maka tak jadi apa-apa. Ini sesuatu yang agak menyedihkan kerana sesetengah blog agak best untuk dibaca, namun tidak ada saluran yang menunjukkan mana satu post yang best. So, akhirnya, di blog post saya, http://sayaasdacap.blogspot.com/2011/11/jom-buat-blog-agregator.html , saya menceritakan tentang hasrat saya untuk membuat satu website yang adalah untuk mengumpulkan (aggregate) blog post-blog post, di satu tempat, siap dengan rating system yang unik yang boleh menyelesaikan masalah ini, maka muncullah YourAgregator. 
So pada hari ini, 25 Mei 2012, YourAgregator telah sampai ke tahap yang saya kata boleh kata…. beta-alpa stage.So hari ini saya memulakan marketing YourAgregator kepada anda semua (blogger iium) dengan harapan, anda semua akan mencuba iium-news, satu Agregator di YourAgregator, untuk memasarkan blog anda. 

Bagaimana IIUM-NEWS berfungsi?

Di blog post ini http://sayaasdacap.blogspot.com/2011/11/mengenai-youragregator.html  saya ada menceritakan sedikit tentang falsafah YourAgregator dengan agak detail. Secara ringkasnya, YourAgregator bertindak sebagai hosting kepada aggregator-aggregator yang mempunyai subdomain di youragregator.com. Contohnya, url untuk IIUM-NEWS adalah iium-news.youragregator.com. Di, setiap agregator, ada beberapa moderator dan member. Member kepada agregator itu boleh submit blog diorang kepada agregator tersebut, dan kemudian moderator boleh approve blog tersebut untuk memastikan integriti blog tersebut. Selepas mensubmit blog, blog post tersebut akan diindexkan dekat feedroll (muka depan aggregator).
So, setiap kali orang melawat iium-news.youragregator.com, benda pertama yang diorang jumpa adalah senarai-senarai blog post yang paling baru atau rating yang paling tinggi. Post-post yang diatas mempunyai peluang yang lebih tinggi untuk di-click, maka pelawat akan melawat pula blog anda di post tersebut.

Apa yang membezakan blog post yang bagus dengan yang tak bagus.

Sistem “niceness”, yakni sistem rating YourAgregator. Di youragregator, kita ada satu consept yang dipanggil “niceness” yang secara ringkasnya merupakan score kepada sesuatu. Di YourAgregator post, feed, dan member mempunyai niceness. Post ialah blog-post atau berita. Feed adalah sumber post, contohnya blog. Setiap member boleh rate “niceness” post atau feed. Apabila mereka rate sesuatu post/feed, niceness post/feed tersebut ditambah/ditolak dengan niceness member tersebut. Dan apabila member rate post atau feed, niceness mereka naik. Dan disebabkan niceness asal post yang baru adalah niceness member+niceness feed, maka post yang datang dari member yang ada niceness yang tinggi mempunyai niceness yang banyak berbanding post yang lain.
Bottomline, the more you rate other’s post, the higher you post’s rating. 

So, apa yang saya patut buat?

1. Login menggunakan link di atas kanan (saya recommend login dari Facebook). Twitter login tidak berfungsi, so takyah try.
2. Join IIUM-NEWS. Link di atas kanan juga.
3. Submit blog anda.
4. Baca dan rate blog post orang. 

By the way…

YourAgregator.com di-hostkan di Google App Engine dengan free quota. Dalam kata yang lain, disebabkan saya takde duit, maka hosting YourAgregator agak lemah and so, akan ada masa anda akan jumpa screen yang mengatakan quota sudah penuh. Jangan risau, youragregator akan berfungsi kembali sepenuhnya pada keesokan hari, lebih kurang dalam pukul 3. Dan lagi satu, buat masa ini YourAgregator di-bangunkan oleh seorang manusia sahaja, so berkemungkinan besar ada banyak lagi “bug-bug” merata tempat. Sesiapa yang berminat untuk membantu dari segi tenaga kerja atau kewangan sangat dialu-alukan….
Categories
Projects

Compilation of YourAgregator TODO

Hi there! These are YourAgregator’s old and new TODO list.

  1. A middleware for agregator and member (for consistency).(on testing)
  2. A decorator for member only.(on testing)
  3. Move the commment template to javascript (reduce server workload and increase responsiveness). Did that, for 5% performance, it’s not worth it.
  4. Hash hack backup plan for ajax page.
  5. Add a favicon.ico.
  6. Ubah kedudukan perkataan ‘post’.
  7. Set default kepada recent.
  8. Use jQuery UI accordian in the submit page.
  9. Add suppost to submit just Post instead of RSS.
  10. Rasanya ada bug sikit. Cuba submit blog hzaid tak boleh. Kenape yek? (ada sikit bug, patut dah dibetulkan. ini disebabkan ada agregator lain yang ada rss yang sama link.
  11. When auto approve is on, when user join or submit, show the correct message.
  12. Fix the ‘at’ None problem. Done a fix but don’t know if it work.
  13. META tags.Did some.
  14. Unified menu for all pages and remove the back button.
  15. Make the rss reloader allow hyperlinks and .
  16. Make a decorator ‘mainpage-only’ the opposite of ‘indomaindecorator’
  17. A central page in the main webpage that list all available agregator.
  18. Database optimization using db.Models.values()
  19. Allow admin to make ‘pages’. 
  20. In manage-mamber, kat permission field, render elok sikit 🙂
  21. The feed table in manage-submission, make select all button and load only part of the data and make pages for the table and make sorting.
  22. On agregator, when no data and when search is not empty, prompt user that that is a search result.
  23. Major overhaul on the theming system.Improve template speed.
  24. Allow admin to make ‘pages’.
  25.  Chat support in agregator.
  26. Make an option to open a dialog when the user click join so user can send message to admin saying something.
  27. ROBOT.txt
  28. Somehow, view post only from some rss or someone.>make advance sort/limit
  29. In manage-submission, when delete rss feed, prompt to delete post too or handle the dereference of feed or agregator will crash.
  30. Make the reloadrss reload rss with the same url only once.
  31. Add max/min value to the Styler.
  32. Add an about page.
  33. Theme gallery
  34. Refactor the media file.
  35. Make use of Jinja2
  36. New niceness system
  37. Make use of hubsub protokol
  38. Make a feed page.
  39. Agregator page’s url modification. 
  40. Help in googlebot scraping.]
  41. Complete the ClientChannel api.
  42. Port Chatter to use ClientChannel
  43. Escape some variables in templates.
  44. In the manager, new way to rename agpages.
  45. Redesign top menu
  46. Ability to scrape post with certain tags only,
  47. More caching!
  48. Better user information (photo, inbox)
  49. Messaging sistem.
  50. Heavy design work on the main page.
  51. Build a layout system
  52. Add a blog (main blog not agregator blog)
  53. Heavy design work on the main page.
  54. Terms and Policy
  55. Add a system where moderator can ask question to new member.
  56. Feedback to moderator.
  57. Documentation.
  58. Ability to rearrange page order in menu.
  59. Manage interface redesign.
  60. Moderator can host media file.
  61. Category
  62. Add error status when cannot get rss.
  63. Different color for post with different rating.
  64. Ability to make agregator, public/private.
  65. Change the default style to conform with the new layout.
  66. Sidepane, pane.
  67. Mainpage style.
  68. Agpages that show online members.
  69. Agpages that show part of agregators.
  70. Notification based on ClientChannel that shows when someone is online or a blog has been updated.
  71. Messaging system between users.
  72. New styler with ability to describe layout of styler from css.
  73. Better ranking algorithm, member cannot just increase point by rating everything. There need to be a cooldown duration. And ablity only partially rank a post and ‘de-rank’ a post.
  74. More than one default style.
  75. Forum agpages.
Categories
Projects

YourAgregator Refresh!

Assalamualaikum dan selamat pagi. So. pada hari ini, saya akan membincangkan tentang status terkini tentang YourAgregator. Seperti yang dibincangkan di post yang lepas, nampaknya saya sudah tidak membincangkan sangat tentang YourAgregator dalam blog ini. Malah lebih mengejutkan, selepas saya melihat kembali post-post  saya, saya baru sedar yang post terakhir tentang YourAgregator adalah pada 5 januari 2012, 4 bulan yang lepas.

So, apa ceritanya tentang YourAgregator? Seperti yang telah dikatakan dengan briefly pada pada post lepas, YourAgregator masih lagi dalam pembangunan, malah jika kita lihat screenshot bawah ini, sebenarnya banyak jugak commit yang tidak diceritakan.

Dan ada lagi dua muka surat sebelum 5 januari. So, pada hari ini, saya akan buat refresh tentang apa yang saya telah letak kat youragregator, bermula dari 5 january sehingga semalam, of course bukan hari-hari lah, so, mari kita lihat. Sebenarnya kebanyakan commit di atas adalah Fix, dan hanya sebahagian merupakan tambahan feature.

24 Februari 2012
-Now search will only react to tags.
    Maknanya, sekarang search hanya akan search tags.Ini adalah kerana search index mengambil banyak database ops, so saya buat ia hanya akan pakai tags. Disebabkan perubahan ini, YourAgregator sekarang boleh menerima lebih kurang 20 blogs setiap hari.

 18 Mey 2012
-Change the feedroll blog link to default on internal link.
   Apa yang dimaksudkan di sini adalah, kat blogroll, kat ada link kepada blog kan? Pastu kat sebelah dia ada “>” yang link kepada rss page tentang blog to kat dalam youragregator, sekarang dah terbalik, “>” pergi blog, nama blog pergi youragregator.

9 April 2012
-Now the topmenu is using a dropdown menu.
In another word:

Hover your mouse on it.

14 April 2012
-Updated the styler and now using jquery ui radiobutton on some attributes.
Less word, more screenshot!

Update dari Automatic IIUM Schedule Formatter

24 February 2012 – 1 Mei 2012

The Agpages System, Channel API, Port of Chatter to use Agpages and Channel API.

Yang ni, tak boleh di explain menggunakan gambar semata-mata. Tapi boleh membantu. Jika anda lihat di agregatortest.youragregator.com sekarang, anda akan perasan chatter di belah atas kiri sudah hilang. Kemana ia pergi?

By the way, tengok! feedback button kat bawah kanan.

Well, selepas saya letak chatter, saya perasan yang ianya buruk dan mengambil ruang. Tambahan lagi, bila kita pakai screen 4:3 yang lama dulu, ia nampak lebih buruk dari biasa, so saya rasa saya nak letak chatter tu sebagai pages. Pastu, terfikir pulak cam mana nak buat setting untuk rearrange menu kat atas memandangkan ada flatpages+agregator+submit+chat yang menggunakan system yang berlainan tambahan lagi boleh ada lebih daripada satu flatpages. So, akhirnya muncullah konsept AgPages (singkatan untuk Agregator pages). Asalnya saya nak panggil plugins tapi perkataan tu terlalu salah, pastu nak pakai Pages, tapi YourAgregator menggunakan istilah ‘pages’ kat tiga tempat lain secara dalaman, so ia sangat mengelirukan, so akhirnya saya pilih nama AgPages.
So, apa itu Agpages? Well, agpages adalah muka surat yang boleh ditambah kat youragretor. Mari kita lihat screenshot manager pages:

You see, sekarang kita boleh tambah agpages, rename agpages, configure agpages dan rearrange agpages. Berbeza dengan custom pages yang dulu, agpages ini bertindak lebih seperti plugins, kita boleh configure diorang, dan diorang ada code sendiri. Contohnya, bila kita tekan configure untuk agpages About This yeng merupakan jenis flatpages, kita akan jumpa ini:

Yang membolehkan kita untuk edit flatpages tersebut. Itulah Agpages. Technically agpages ini direka untuk membolehkan website lain buat agpages untuk YourAgregator, sama macam facebook tabs, tapi disebabkan masalah dalam mereka REST API dengan segala masalah keselamatan, ianya tidak dijalankan lagi.

So far setakan ini ada tiga jenis agpages iaitu chatter, flatpage dan submit page. More will come later.

Apa pula Channel API? 

Well, nama sebenarnya adalah ClientChannel (untuk mengelakkan kekeliruan dengan google channel api), dan ia timbul apabila saya sudah port chatter kepada agpages.  Masalahnya, agpages boleh ada lebih daripada satu, dan chatter akan diinitialize setiap kali agpages chatter itu dibuka. The problem is, channel api yang diberi oleh  google ada quota sebanyak 100 connection sehari. So, untuk menjimatkan quota dan membolehkan saya untuk buat push notification yang mana belum dibuat, saya telah mereka satu system yang saya panggil Client Channel, yang memboleh lebih daripada satu agpages dan benda lain kat clientside untuk berkomunikasi dengan benda-benda lain kat server side. Ok, so korang tak faham, takpe saya faham. Basically ianya adalah benda internal yang membolehkan saya untuk buat macam-macam benda menarik yang lain. That is ClientChannel API.

9 Mei 2012(semalam)

-Added tha ability to filter post to index based on tags.
Kat screenshot di atas, ada dua field baru iaitu with tags dan without tags. Dengan ini, youragregator hanya akan index post yang ada tags di atas ataupun yang tak ada tags yang dinyatakan.

9 Mei 2012 (jugak)
-Added question support for the moderator to approve new member.
In another word, sekarang moderator boleh tanya soalan kat sapa-sapa yang nak jadi member. Macam nie:

So, itu sajalah yang telah diletakkan. Harap-harap banyak lagi masalah quality yang boleh diselesaikan. So, thats it, bye! Assalamualaikum.

Categories
Personal Projects

About 32 day of holiday.

Assalamualaikum semua. Apa khabar? Mintak maaf, sejak kebelakangan ini, saya agak menyepi. Saya tahu kemungkinan besar kamu tak baca blog ini, dan entah macam mana terbaca pulak harini, yang membawa makna kamu tak perasan pun yang agak lama saya tak berblog, yang membawa makna tak ada gunanya saya mintak maaf tadi. But still, memang saya agak lama tak menulis apa-apa kat blog ini mahupun blog lain seperti rookiecode.blogspot.com dan apatah lagi pembentanganbaikasdacap.blogspot.com yang entah macam mana masih lagi boleh hidup.

So, dua hari lepas dengan rasminya saya telah mengambil kertas exam saya yang terakhir pada sem ini/lepas, maka dengan rasminya saya sekarang tengah cuti inter-semester. Tanggal pada hari ini, maka saya ada 32 hari lagi. So, apa yang boleh buat? Nak cari kerja kat tengah bulan, so macam biasalah jadilah saya macam katak bawah tempurung dengan komputer.

Objectif utama saya pada cuti ini adalah membuat sesuatu yang produktif, lebih produktif daripada main game, yang mana saya rasa tak produktif sangat. Jika kamu adalah pembaca setia blog ini (yang mana kemungkinan besar kamu tak), kamu pasti terfikir tentang youragregator kan? Apakah ceritanya YourAgregator? kenapa tak ada berita lagi? Sudah terbengkalaikah?

Jawapannya adalah…. belum lagi. YourAgregator masih lagi saya tampal-tampal walaupun saya tak cerita banyak. Itu pasal kebanyakan tampalan yang berlaku adalah ketika saya berada di CFS IIUM, so saya tak ada banyak masa dan internet untuk buat blog post.

Unfortunately, tak banyak perubahan yang saya buat kat YourAgregator. Mungkin saya akan blog tentang benda baru yang saya sudah tampal sejak kebelakangan ini kat post yang akan datang. Walaupun demikian, dukacita dimaklumkan, semakin hari saya rasa semakin sukar untuk menampal YourAgregator. Kode nya sudah menjadi agak terlalu komplex tetapi kalau kita lihat di agregatortest.youragregator.com, tidak banyak perubahan yang berlaku. Dan seperti biasa, masalah yang paling ketara adalah design dan artwork yang mana memang saya tak boleh buat. Saya ingat nak mintak tolong dari Iman atau Ammar, member lama saya yang specialize kat bidang ni. By the way, check out my first facebook app apps.facebook.com/howfastcanyoucount  designye ammar yang buat.

So, kat blog post ini, saya akan senaraikan apa yang saya nak buat sepanjang cuti ini.

Plan of 32 day.

  • Make revealer v3.
  • Make DeltaSync
  • YourAgregator artworks and stuff.
  • Blog on rookiecode on how to make a GUI c# app. Also translate to malay in sayaasdacap.
  • Blog on YourAgregator current plan.
Good luck for me, good bye and Assalamualaikum.
Categories
Article

Asdacap’s Guide to Ubuntu: Intro

Assalamualaikum semua! Apa khabar! So today is article day! YAY! Maka pada hari ini saya akan buat satu article tentang apa-apa pun yang saya nak tulis, dan tajuk hari ini ialah Guide to Ubuntu.

Setiap kali saya bukak laptop saya, orang biasa akan tengok desktop saya dan kata “Apa tu!” atau “Who style giler! Mac ye?”, atau lebih biasanya “Aarggh! Hacker! Larii!!!!”. Well, saya takleh nak salahkan diorang bila diorang tengok desktop yang macam nie.


Yes, menakutkan in some way. So bila orang tanya apa ini, perkataan yang paling saya rasa senang untuk diorang faham ialah “Ubuntu”. Yes my friends gambar di atas ini ialah system Ubuntu dengan KDE Desktop Environment. “Desktop environment?” Sabar…sabar… nanti kita sampai ke sana.
Pop Quiz! Apakah soalan pertama yang selalunya orang akan tanya sejurus selepas saya kata “Ubuntu” ? Jawapannya ialah….

“Ubuntu tu Linux kan?”

Teng…teng…teng… My friends let me get straight to the point. Ubuntu IS NOT Linux. Please keep that in mind. Ubuntu ialah sejenis Operating System. Linux ialah sejenis operating system’s ‘kernel’. ‘Kernel’ jika ditafsirkan bulat-bulat dalam bahasa melayu bermaksud ‘teras’ atau ‘core’. Ubuntu ialah operating system yang menggunakan Linux. Linux is not Ubuntu, Ubuntu is not Linux. Anggap macam Ubuntu tu sejenis kereta dan Linux tu pulak engine dia. Macam tu lah jugak Android dan Linux. Anggap Android to macam motosikal dan Linux tu engine dia.
Why Linux ?
Kenapa linux digunakan itu ada cerita sejarahnya. Pada zaman dahulu ada satu operating system yang dipanggil UNIX. UNIX pada waktu itu sangat terkenal dan banyak digunakan dalam mainframe. UNIX pada asalnya adalah operating system yang dibuat secara Open Source. Yakni, kode kepada UNIX itu boleh didapati secara percuma. Konsep Open Source ialah sesiapa sahaja boleh improve kod tersebut dan buat versi yang lebih hebat. So, in case kalau ada bug dalam UNIX orang lain boleh patch-kan bug tersebut. So, Open Source akan mengurangkan kos pembangunan UNIX.Walaupun begitu, ramai syarikat telah menyalahgunakan UNIX dan telah membuat versi UNIX lain dengan sedikit perubahan tanpa meng-Open Source-kan kod tersebut. Disebabkan ramai syarikat buat macam tu, banyaklah versi UNIX yang malangnya tidak Open Source. Akhirnya UNIX-UNIX yang tidak open source itu menjadi bermasalah, banyak bug dan bloated. Tercalarlah brand UNIX yang ketika itu apabila komputer itu tertera perkataan UNIX orang akan kata “Wow! Bagus mainframe ini!”. Disebalik kekalutan itu, muncullah sekelompok manusia yang ingin menyelesaikan masalah ini. Mereka ini digelar GNU (kalau tak silap saya), dan mereka telah berusaha untuk membuat satu operating system yang UNIX compatible (yakni boleh jalankan program UNIX) yang digelar GNU Operating System. GNU juga telah mengarang satu lesen yang digelar GPL. Lesen itu mengatakan bahawa program yang dilesenkan dibawah lesen GPL mestilah satu program Open Source dan mereka yang ingin membuat versi program tersebut yang lebih baik mestilah juga meng-Open Source-kan program itu dan melesenkannya dengan lesen GPL (ada beberapa pengecualian). Setelah berusaha keras, GNU telah berjaya menyiapkan kebanyakan user-land utility untuk operating system tersebut, namun kernel mereka yakni GNU Hurd masih belum siap. Terdesak, akhirnya mereka mengambil keputusan untuk menggunakan kernel lain yang dihasilkan oleh seorang yang bernama Linus Torvald. Kernel tersebut bernama Linux. Gabungan GNU dan Linux digelar GNU/Linux (dengan backslash). Namun pada zaman tersebut muncul era baru yakni era PC (Personal Computer). UNIX dan GNU/Linux pada waktu itu masih lagi bloated dan tidak mampu untuk digunakan dengan komputer berkapasiti rendah (yakni PC), dan akhirnya gagal bersaing dengan Windows. Sehingga hari ini Windows mendominasi dunia PC. UNIX dan GNU/Linux masih lagi kekal mendominasi dalam dalam dunia mainframe dan server, walaupun kebanyakan UNIX yang tak Open Source tadi telah digantikan dengan GNU/Linux yang mempunyai prestasi yang lebih tinggi dan lebih setabil. UNIX pada waktu ini merupakan spesis yang sudah pupus walaupun beberapa keturunannya masih lagi wujud dan bersaing yakni BSD dan adik-beradiknya (FreeBSD, NetBSD, OpenBSD).
So, moral of the story. Fragmented+proprietary=really bad ending. Pada hari ini, prestasi komputer telah bertambah berkali-kali ganda. As a result, GNU/Linux boleh digunakan atas PC. GNU/Linux sahaja boleh dikatakan sebagai operating system yang lengkap. Tapi untuk boleh digunakan dengan selesa, ada banyak program-program lain yang perlu digunakan. Contohnya X Window System yang memberi Graphical User Interface kat screen. Masalahnya adalah untuk memilih program-program yang sesuai dan untuk configure program tersebut. Gabungan program-program tersebut yang telah siap diconfigure beserta GNU/Linux dipanggil Linux Distribution atau Linux Distro. Ada banyak Linux Distro dalam dunia ini, contohnya Fedora, OpenSuse, Debian, Gentoo dan yang kita bincangkan pada hari ini, Ubuntu. Ubuntu ialah Linux Distro yang berasaskan Debian. Apabila saya kata ‘berasaskan’, saya maksudkan Ubuntu itu adalah Debian dengan beberapa perubahan, contohnya Ubuntu install banshee (nama salah satu mp3 player) secara default.
Meet Ubuntu

Now, apa yang membezakan Ubuntu dengan Linux Distro yang lain? Ubuntu adalah antara Linux Distro yang pertama yang direka khas untuk pengguna biasa. Basically, diorang dah setup supaya ubuntu itu mudah digunakan. Tambahan lagi, Ubuntu ditaja secara finantially oleh satu syarikat yang dipanggil Canonical. Canonical ditaja oleh seorang jutawan bernama Mark Shuttleworth. Dia ialah pelancong angkasa kedua dunia. So bayangkan berapa banyak duit yang dia ada. 

So, let’s get started tentang kita punya preview on Ubuntu. Untuk dapatkan Ubuntu, pergi google, taip ‘ubuntu’, download versi terbaru, ikut instruction… next…next… you know the basic. So, basically kamu akan download satu iso file bersaiz lebih kurang 650MB. Untuk install kamu boleh pakai daemon tools, dan install dalam windows, atau burn kat cd, install dalam windows atau dual boot dengan windows, atau letak kat usb drive, install dalam windows atau dual boot dengan windows, pakai virtualbox untuk tak payah install langsung, boot aje dari cd tu atau usb untuk try tanpa install… banyak pilihan sebenarnya. Kalau nak kamu boleh install kat external hard disk dan boot kat mana-mana laptop. So, bottomline, macam mana nak install ubuntu perlukan blog post yang lain. Tambahan lagi, ada banyak program yang perlu diinstall selepas install ubuntu untuk keselesaan pengguna DAN sesetengah(lebih kurang 40%) laptop memang ada masalah dengan linux, so banyak kena cerita.   Post ini hanya akan menerangkan briefly tentang Ubuntu


The ‘Desktop Environment’
Kalau kamu perasan, saya punya ubuntu(screenshot atas sekali) lain berbanding ubuntu yang default(screenshot atas). Benar, pasal saya menggunakan K-Desktop Environment. Kenapa? Ntah, saja tukar selera. You see, dalam dunia Linux Distro(dan sebenarnya X Windows system yang juga bermaksud ***BSDs), ada beberapa koleksi program yang bila bersama digunakan membentuk pengalaman yang sesuai untuk digunakan kat desktop/laptop. Koleksi program ini dipanggil Desktop Environment. Ubuntu secara default menggunakan Gnome Desktop environment dengan diorang punya window manager yang dipanggil Unity, menggantikan window manager asal Gnome yakni Gnome Shell. Apa yang saya maksudkan ialah, apabila kamu nak login, kamu boleh pilih desktop environment yang kamu suka, dan bila masuk, desktop kamu akan kelihatan berlainan dari desktop environment yang lain.

Sesetengah orang beranggapan bahawa dekstop environment ini macam ‘theme’, luaran semata-mata macam ‘Windows Blinds’. TIDAK, Desktop Environment bukan sekadar ‘theme’, tetapi system theme, animasi, compositing, task-manager, connection manager, etc…etc..dab banyak benda lagi.Apabila kamu tukar desktop environment, dari rupa paras, ia ibarat kamu tukar system interface kamu. Yang mana satu nak guna, apa perbezaannya, kelajuannya, itu semua diluar skope perbincangan ini.
What you can do in Ubuntu

MS Office 2007 on Ubuntu 11.10
Well… soalan yang berat di sini. Well, Ubuntu boleh digunakan macam windows atau mac. Kamu boleh bukak Firefox atau Chrome, pakai wifi iium-community, pakai libreoffice(nama baru openOffice), bukak filem, lagu, edit gambar sikit, copy/delete/paste file(duh!), basically ianya terhad dengan program apa yang ada kat ubuntu. Dan bagi saya, itu adalah kelemahan utama ubuntu, tak ada banyak program professional. Dan kenapa tak ada banyak program professional ini, personally saya salahkan ecosystem itu sendiri yang terlalu cepat berubah, linux keluar setiap tiga bulan, so driver susah nak mantain, so banyak graphic issue, so orang susah nak buat game. 

Tapi itu tak bermakna ia tidak boleh digunakan. Malahan, ia boleh menggunakan sesetengah program windows, menerusi program yang dipanggil WINE (WINE Is Not an Emulator). Dan selagi ada Chrome, selagi itu ada facebook/youtube/blogger what else do you need?  Oh ya! One thing for sure. Ubuntu CANNOT play game. By ‘game’ I mean new game, like COD, Battlefield, Assasin creed….etc…etc…

mp3 player. 

But still.. Why Ubuntu
Why ubuntu? This is a highly subjective question in which to answer that I will try to give a list of pros and cons I personally think about Ubuntu.

PROS

1. Tak boleh kena Virus.
Bagi pengguna biasa, kelebihan utama ubuntu ialah, ia tak boleh kena virus. Sebenarnya bukan tak boleh kena virus, tapi lebih kepada ‘tidak mampu’ untuk menjalankan virus. Kebanyakan virus direka untuk Windows. Dan disebabkan Ubuntu tak boleh menggunakan program windows (kalau tak install WINE lagi), basically virus tu tak boleh start. Tambahan lagi, ada beberapa ciri-ciri yang menyebabkan agak sukar virus untuk masuk Ubuntu, contohnya, virus ‘niozi’ yang meng-hidden-kan folder dan buat shortcut yang nampak macam folder tapi hakikatnya start virus tersebut. Kat windows, orang akan pakai aje shortcut to pasal tak nampak folder yang asal, tapi pasal Ubuntu tak pakai ‘hidden’ attribute, jadi semua folder kelihatan termasuk yang ‘hidden’, so, pengguna akan nampak folder yang asal. Ada banyak lagi system keselamatan Linux yang mana kebanyakannya datang dari UNIX, namun secara personally, saya rasa Ubuntu tak banyak virus pasal tak banyak orang nak buat virus untuk Ubuntu. Macam Mac OS X, dulu tak ada virus, sekarang dan mula ada.

2. Lebih ‘ringan’
Ubuntu menggunakan lebih banyak memory daripada Windows XP, tapi lebih rendah berbanding Windows 7. Apabila kamu start Windows 7, penggunaan RAM kamu lebih kurang 1.2 GB. Kalau kat Ubuntu, ia bergantung kepada desktop environment. Unity/Gnome(64 bit) pakai dalam 500MB, Unity/Gnome(32 bit), lebih kurang 370MB, GNOME-Shell(64 bit) lebih kurang 700MB, KDE lebih kurang 900MB. Itu dari segi RAM, dari segi CPU dan GPU, saya rasa lebih kurang sama. Tapi personally, apa yang saya rasa ialah kat Ubuntu, kita boleh bukak banyak program, bukak banyak 20+ Chrome tab, (I mean.. come on! Laptop dengan 4GB RAM takkan takleh handle!), tapi ia kekal responsive. Tapi kat Windows 7, somehow, kita akan terasa sedikit slowdown, somehow. Dan kat Windows, makin lama makin slow, for some reason. Ada yang kata ini disebabkan windows registry makin berat. Kat Ubuntu, saya tak pasti apa yang saya dah install. Sebab rasa sama aje sebelum dan selepas install. Tapi personally bagi saya ini perbandingan yang tidak adil, pasal kat windows, ada banyak program yang akan start secara automatic bila kita installnye, macam stype, utorrent, antivirus dan sebagainya. Tak banyak program macam tu kat Ubuntu (pasal tak banyak program kat Ubuntu). Ps: Win XP hardcore, I am sick of Windows XP crashing for no reason, do not recommend it, update to Windows 7, please… sincerely…

3. Kamu akan lihat benda yang kamu ingat komputer tak boleh buat.
My friend, allow me to divert your attention to this particular video featuring Ubuntu 10.04. No video editing is used whatsoever.

I repeat, no video editing is used whatsoever. Ini ialah versi Ubuntu 10.04 keluaran 2010, 3 series lepas. Effect-effect tersebut dihasilkan oleh window manager yang bernama compiz. Compiz sekarang ini diambang maut kerana perbagai masalah politik yang kebanyakannya disebabkan Gnome. But that’s not the point. The point is you never knew a komputer can do that right? Come on admit it. Ecosystem GNU/Linux itu sangat customizable,   tapi untuk customize ia, kamu kena belajar, dan dari belajar kamu dapat tahu serba sedikit tentang macam mana komputer berfungsi, network dan sebagainya. Kamu akan lihat benda yang kamu ingat komputer tak boleh buat.
CONS
1. Driver issue and stability.
Bukan semua komputer fully compatible dengan Ubuntu. Sesetengah laptop kena ada sikit tweak baru boleh start. Sesetengah laptop, wifi tak berfungsi. Walaupun versi baru Ubuntu dah hampir tiada masalah wifi, tapi signal wifi mungkin lebih rendah. Begitu juga dengan banyak benda lain, notably graphic card driver. Kalau kamu pakai descrete graphic card (AMD/nVidia), saya sangat recommend kamu install proprietary driver the first thing you install Ubuntu. Kalau kamu pakai Intel GMA atau apa yang Intel buat, sama ada Ubuntu boleh hidup terus tanpa banyak songeh, atau screen blank terus. Ada sikit tweak yang perlu dibuat. Mungkin ada yang berpendapat bahawa Ubuntu sangat setabil, komputer takkan crash. Ya, sangat setabil SELEPAS kamu selesaikan masalah tadi. Nak selesaikan pelbagai perkara tadi, bukan perkara yang manusia biasa boleh buat.
2. Lack of professional program and NO GAMES
Ubuntu app store.
Ya, ada banyak program untuk Ubuntu cukup untuk kegunaan harian. Program yang saya maksudkan di sini ialah program yang orang betul-betul pakai, macam Microsot Office, Adobe Photoshop, AutoCAD, semua tu tak ada versi Linux. Saya tak salahkan microsoft atau sesiapa, pasal nak buat program untuk linux perlukan lebih kemahiran pasal banyak fragmentation dalam dunia linux. Of course ada WINE, tapi ia tidak sentiasa berfungsi. Versi Wine 1.4 dikatakan boleh pakai Microsoft Office 2010, tapi saya personally masih belum berjaya. Tampahan lagi, WINE tidak sempurnya, contohnya Adobe Photoshop CS5 boleh start, tapi cursor ada masalah, nak lukis kadang-kadang boleh kadang-kadang tak boleh. Mengenai games, gabungan masalah graphic driver, perbezaan directx dengan opengl, penyalahgunaan x-window system, banyak desktop environment telah menyebabkan kebanyakan game tak boleh dijalankan walaupun menggunakan WINE. Accept it like a man. Do a dual boot and play it from Windows 7. 

3. Require tweaking……

Banyak masalah-masalah tadi bukan tak boleh diselesaikan, tapi agak susah nak diselesaikan. Sesetengah orang nak program itu untuk Just Work. Thats not really the case for Ubuntu, unless you plan on opening facebook using Chrome, well, yes of course it will just work, duh!. Tapi kalau kamu berhasrat nak buat lebih sikit, kamu kena google banyak. 

Bottomline.

Untuk pengguna biasa, saya recommend kamu install ubuntu sebagai backup system. In case kalau kamu nak pakai pendrive yang ada virus, komputer kamu kena virus or for some reason windows xp crash and you want to google for solution, Ubuntu is excellent for that. Sesetengah laptop yang branded ada preinstall ‘basic system for browsing’, yang mana start cepat in case kamu nak bukak internet tapi malas nak bukak windows. ITU IALAH UBUNTU  yang diubahsuai sedikit…kebanyakannya lah. So, daripada bayar lebih, lebih baik kamu install sendiri. Saya nak cerita jugak macam mana nak install ubuntu, tapi sebab ada banyak cara dan kesuntukan masa, saya tamatkanlah sahaja post saya kali ini. Mungkin lain kali saya cerita pasal desktop environment, mungkin pasal macam mana nak install tapi itu lain kali lah. Anyway, farewell, happy reading and Assalamualaikum.
Categories
Article

The curse of being a man.

You see, there is an upside and downside of being a male or a female. For me as a male, the physical upside of being a male is not apparent 🙁 . And in fact in my case, can even be considered as a downside. But the curse we are talking today is about the competitiveness of being a male/man/boy.

You see girls, a man will always see something in relative to something. Lets call this, the “Theory of Man’s Relativity”. To illustrate this let’s have an example of a man’s statement: “I am weaker in relative to some other man”. Or a better example is “I am more clever in relative to some other man”. My friends, this indeed is stressfull. Why is that? Well… let’s have another example.

Suppose a man thinks that he is weaker than another man. What will he do? He will exercise everyday, do his diet, buy some protein supplement and if he succeed in his quest, he will be stronger than that other man. But there is a catch… there will always be a stronger man. Due to that fact, he will always exercise, and in the end, he will never be happy.

Girls, you should be thankful. When a women think that she is good enough, she will be happy. But for a man, good enough mean, no one is better than him. At least no one in front of him. Which is impossible. And logically, there will be always be only one man who is the best, and the rest of them fall in a spiral of never ending better person.

And so, some evolved man make up some rules such as…”Of course I will always be weaker than him but I am smarter than him.”. And that’s what keep us alive. The fact that there will always be a ‘but’. This is due to the fact that no man is perfect in every way. And we as man are thankful for than fact alone. Because of that fact, we can be ‘semi’ happy, although we are still be in the never-ending spiral of ‘being better but not the best’ category.

A girl may say “That’s okey, why don’t you talk about it? It will make you feel better.”. Girls, this is Man 101, and we are learning the second topic which is the subtopic of the “Theory of Man’s Relativity”, A man NEVER talk about his personal life. Why is this so? Well, the “Theory of Man’s Relativity”, explain than a man will always look itself in relative to other man. This is due to the competitiveness of a man that is due to the single basic fact that “A man will always look at other man as opponent.”. Of course, It’s not really that serious… or is it?

Because a man will always look at other man as opponent, talking about personal life is like showing your weakness… to your enemy. Due to that, a man will most probably, in almost all case, with almost everyone, NEVER talk about his personal life. Especially if it involve some deep emotional feeling. Probably the only exception to this rule is when a man talk to a girl that he feel close to. So girls, when a boy is comfortable talking emotional personal stuff to you, there is a good chance that he like you.

Unfortunately, not all man have a girl close enough to talk to. Due to that, a man usually have more pent-up feeling inside, which become a burden in daily life. A curse indeed. This causes stress, unhappiness, misbehavior and some nonfunctional brain component. Do not take this lightly, statistic shows that the number of man who committed suicide is four times higher than the number of women who committed suicide. This shows the magnitude of the stress a man keep in his heart. Or maybe because a man tend to do more aggressive solution than women….

There is a cure for this curse. Something to distract the man from relating him from another man, and something a man can talk to in case he did demotivate himself. The cure, as you know it, is a girl. Hah! So girls, now you know man really do need women! I’m sure you (girls) feel a lot better when you read this article. Remember, “Behind every successful man, there is a women”.

In some way, this article can increase your(single man) stress. Be very careful, a man tend to break things when he is stressed. And yet, today you learn a bit about your own nature, and now you know exactly what you need. So go out there and find someone! And do not do anything stupid on the way!

ps: Single ladies out there. Would you be interested in me? ….. Haha! LOL! I’m just kidding!.. or am I?…..

Categories
Projects

Automatic IIUM Schedule Formatter V3.3

Assalamualaikum. Apa khabar.

Berita terkini, pada hari ini, Automatic IIUM Schedule Formatter versi 3.3 sudah keluar.

V3.3 membawa beberapa perubahan baru seperti:

  • Kemusnahan popup error.
  • Parser improvement yang membolehkan template maker meletakkan no ic, no matric, session, course, dan sebagainya kedalam jadual. 
  • Penggunaan https dalam hampir semua bahagian untuk lebih keselamatan.
  • Pembaharuan dalam “Styler” yang sekarang ada end-tag bagi membolehkan designer untuk override css statement.
  • Perubahan default style disebabkan perubahan struktur renderer dan kebolehan baru styler.
  • Letak function toTitleCase() ke prototype javascript string supaya template maker boleh buat title case.
  • Layout styler berubah sedikit yang mungkin akan menyebabkan lebih banyak kekeliruan.
  • Theme gallery sudah ada screenshot, generated by websnapr…
  • Sekarang sudah ada mainpage.
  • Dan banyak lagi perubahan yang tidak bermakna sangat untuk anda seperti open graph tag, facebook like dan comment di mainpage, google analytic tracking code, bugfix, bugfix dan bugfix yang saya malu nak bagitau apa bugnya.
So, that’s it. Instruction boleh ditemui di https://iiumschedule.appspot.com . Assalamualakum, Semoga anda berbahagia. Saya asdacap, melaporkan dari study room tingkat satu ABC.