Categories
Projects

Another Upload

Assalamualaikum semua! Apa khabar! Ya! benar! say masih hidup lagi haha!

OK, so macam biasa selepas baru upload versi YourAgregator yang baru saya akan buat blog post tentangnya. Memandangkan kali ini saya mengambil masa lebih daripada 3 hari untuk mengupload versi kali ini, pasti banyak benda baru kan? SALAH!!! Tidak banyak benda baru yang diletakkan. Kebanyakan benda-benda yang baru pun di-commit pada hari ini. Jadi apakah yang menyebabkan delay yang sebegini?

DOJO JAVASCRIPT FRAMEWORK

 Selalunya kita dengar tentang jQuery kan? Tapi kita jarang dengar tentang Dojo. So satu hari saya cuba try tengok webpage dojo. WOW! adalah pendapat saya yang pertama tentang dojo. Membandaingkan dojo dengan jQuery ibarat membandingkan Qt dengan gtk. Dojo membunyai BANYAK kebolehan seperti Deferred dan Object Store dan yang paling hebat (bagi saya) ialah senarai widget-widget nye yang nampak sangat professional! Maka timbullah satu semangat dalam diri saya untuk memasukkan dojo ke dalam YourAgregator dan kemudian baru saya faham kenapa jQuery lebih famous berbanding dojo.

Satu perkara yang saya sangat suka tentang dojo ialah dia punye Rich Text Editor. Seperti yang tertulis di YourAgregator TODO list, salah satu benda baru yang saya nak letakkan di YourAgregator ialah kebolehan untuk submit hanya satu post, bukannya rss. Dan disebabkan description post tersebut sepatutnya boleh ada benda-benda seperti ‘link’ dan ‘bold’, tugas meng-edit description tersebut paling sesuai dilaksanakan oleh Rich Text Editor. Maka mulalah perjalanan saya untuk meletakkan dojo-punye rich text editor kat submit_page. Namun setelah meletakkan Tab Layout (dari dojo) satu masalah timbul. Tab layout takleh auto resize macam jQuery punye Tabs. SO kita kena letak fixed height kat Tab Layout. Ok, boleh diterima. Saya letak fixed height. Kemudian baru saya letak dojo Editor. Ok, so far so good. Editor keluar cantik. TAPI editor takleh diletakkan di tempat textarea.  Saya fikir, takpe…takpe…editor dia cantik…Nanti kits buat manual post ok. Test-test ada masalah lain yang keluar. Error ‘the id=’bla-bla’ has already been registered’ (lebih kuranglah). Ha? Ape ke heh? dojo Editor tak keluar? And so mari kita debug masalah ni, masalahnya ialah YourAgregator telah menggunakan teknik ajax untuk load submit page (yang saya cerita kat post lepas). Dari situ, tekan ‘back’ akan menyebabkan dia load agregator pakai ajax, dan memusnahkan page yang lepas. Tapi segala javascript object masih lagi intact. Tambah lagi dengan dojo framework yang sangat integrated itu. Namun apabila kita bukak balik submit page tersebut, kita cuba register editor dengan id yang sama, dengan yang dah ada dalam dojo punye registry. So keluar error tersebut dan editor tak keluar. Begitu juga dengan tab layout (kalau tak silap saya). Tapi takpe…takpe… dojo punye Editor cantik… So saya pun buat macam-macam, publish-subscribe event dan akhirnya keluarlah editor tersebut dengan berfungsi.

….must…..resist…dojo….

Of Course saya tak cerita pasal lima error yang keluar setiap kali saya bukak page tersebut, tapi bila dia dah render elok, kita biar ajelah. Saya jugak tak cerita pasal masalah dojo.require kat dalam Ajax page yang mana membuatkan saya men-dojo.require kat agregatorbase walaupun widget tersebut tidak dipakai. Tak termasuk dengan kelajuannya yang ‘mendebarkan’. Tapi satu yang pasti. Lawa kan? Nampak professional, jika dibandingkan dengan sekarang….

something is not right.

Ok, mungkin tabnye nampak lawa sikit, tapi form-nye tak seragam. Kemudian, saya cuba untuk pakai dojo DataGrid. tapi ada masalahnya pasal itu dan itu dan kemudian, dua hari berlalu. Bottomline…Banyak giler problem! Dan disebabkan tak ramai yang pakai dojo, tak banyak maklumat tentang dojo kat internet. Documentationnye pun tak membantu sangat. So saya fikir, wow susah giler. Highly unconfigurable. Banyak benda yang terpaksa di buat-hack. So akhirnya saya berhenti menggunakan dojo dan revert balik pakai plain HTML dan jQuery serta JWYSIWYG editor.

So itulah ceritanya yang membuatkan saya lambat. Hujung minggu ni banyak masa dibuang dengan memahami dojo, mencari solution di internet dan Battlefield Play4Free. Tapi, bukan takde perubahan langsung.

Pertama, member boleh submit post sahaja bukan rss (seperti di atas).
Kedua, admin boleh buat page sendiri, siap dengan ajax loading. dan menu.

Ketiga, kat main webpage, ada senarai agregator yang berdaftar.

“Description? Do you need it?” kalau agregator ni masuk kat google, kat bawah link nanti keluar “Description? Do you need it?”. Description digunakan (atau akan digunakan )  sebagai meta description.

Sudah tentu, kalau anda try untuk buat ‘page’ yang baru anda akan rasa sangat kecewa dengan form yang sangat mengelirukan serta tidak kena pada tempatnya. Jangan risau, tiga hari yang akan datang didedikasikan untuk bugfix dan design. So, itu sajalah perubahan yang boleh dilihat. Antara perubahan lain adalah sedikit optimization yang sepatutnya membuatkan agregator load cepat sikit.

So, itu sahaja! Dengan itu, bye-bye sesiapapun yang sedang membaca! googlebot pun boleh! Assalamualaikum!

Categories
Projects

YourAgregator! TODO list

TODO

  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. More caching!
  24. Better user information (photo, inbox)
  25. Messaging sistem.
  26. Forum…maybe
  27. Make the reloadrss reload rss with the same url only once.
  28. Heavy design work on the main page.
  29. Major overhaul on the theming system.
  30. Improve template speed.Allow admin to make ‘pages’. 
  31. Chat support in agregator.
  32. Make an option to open a dialog when the user click join so user can send message to admin saying something.
  33. ROBOT.txt
  34. Somehow, view post only from some rss or someone.>make advance sort/limit
  35. In manage-submission, when delete rss feed, prompt to delete post too or handle the dereference of feed or agregator will crash.
Sebarang cadangan?

Categories
Projects

I’m not going bla-bla.

Hai! Assalamualaikum semua!

Seperti biasa hari ini, saya akan sekali lagi menceritakan perubahan-perubahan terbaru terhadap projek terkini saya iaitu YourAgregator!. Dalam dua hari ini ada dua perubahan yang saya anggap agak besar, yang lain itu semuanya hanya ‘bugfix’ dan ‘tweak’ tapi yang dua ni ialah ‘feature’. Apakah ia? You guess it…..COmment(s).

Boleh reply kat comment orang lain.

Ya benar, comment ini sudah online, walaupun susah digunakan dan bermasalah. SO macam mana nak pakai ini comment? First, bukak agregator macam biasa, pastu ‘hover’ korang punye mouse kat post yang berkenaan, nanti keluar load, pastu dia kata ‘0 comment’. Tekan teks tu nanti dia bukak page lagi satu yang khas untuk meng-komen. Pastikan korang ialah member, kemudian commentlah. Tapi benda ni masih lagi bermasalah disebabkan pelbagai perkara contohnya GAE punye database tu tak ACID complient menyebabkan ada sikit delay lebih kurang 5 saat (agaknye) untuk change tersebut propagate ke seluruh server. Itu bermakna mungkin akan ada sikit ‘glitch’ macam bila korang tekan ‘more comment’ nanti keluar balik comment sebelum ini (bila dah upload, baru dia nak buat hal…). Refresh aje, nanti ok lah.

Kok ada dua si?

Satu lagi perubahan yang (bagi saya) agak besar ialah kombinasi AJAX dan window.history serta view khas, yang, menyebabkan korang tak perasan apa perbezaannya.So, mari kita dive in balik kat agregatortest.youragregator.appspot.com/home. Bila dah load, perasan tak yang urlnye dah ubah daripada /home kepada /agregator?.

Sekarang korang tekan mana-mana comment, macam post blog ni yang lepas “I’m going bla-bla” ada 38 comment kan (saya sorang aje yang comment)? tekan comment tu. Perasan tak yang ada loading gif sebentar?

kemudian baru dia bukan page tersebut.  Anyway, pastu tengok yang korang punye url dah bertukar kepada /feed_page?feed=50

Dan yang paling penting, korang perasan tak yang semua ni berlaku tanpa refresh? Haha! Itulah dia. Benda ni adalah untuk mengimprove user experience. Dan kalau korang tekan butang ‘back’ (kat chrome bukan kat webpage). Nanti dia tidak pakai reload, sebaliknya dia pakai AJAX untuk load balik agregator. Setakat ini benda itu agak simple dan berguna untuk tiga page aje iaitu, agregator, feed_page(yang ada comment) dan submit_page. Tapi dengan adanya asas untuk teknik ini, kita boleh buat macam-macam page lagi dan kita boleh bagi admin buat page sendiri macam ‘rules and regulation’ atau ‘abaout iiium-news’. Tapi semua itu masih angan-anganlah… mungkin ambil masa lagi seminggu (atau tiga hari) untuk saya buat benda tu. Tambahan lagi, benda ni masih lagi baru (sebahagian daripada HTML5) dan perlukan browser yang baru untuk berkesan. Tapi buat masa ni, saya akan fokus untuk ‘membersihkan’ kod yang agak bersepah, dan kemudian akan ada sikit bugfix. Apapun, saya rasa baik saya buat sikit TODO list untuk feature dan kerja yang akan datang….kat post yang lain.

Categories
Personal Projects

I’m going bla-bla

Assalamualaikum semua. Apa khabar? Saya di sini migrain baik-baik sahaja.

So, our topic for today is bla-bla, that is, I’m going to say anything I want to say.

So, of course, perkara pertama yang saya akan katakan mestilah tentang perkembangan YourAgregator!. Sejak post yang lepas, ada dua perkara berubah yang dah online, yakni, penggunaan subdomain untuk mengenal pasti agregator anda dan kebolehan search. Dan hari ini, saya buat sedikit percubaan untuk sistem ‘comment’ yang membuatkan saya migrain giler nak mampos! agak keliru camne nak buat nie.

Tapi mari kita mulakan dengan perubahan yang dah online yang paling besar yakni penggunaan subdomain untuk mengenal pasti agregator. Untuk memudahkan penjelasan, mari kita lihat satu contoh yang mudah yakni agregator ‘agregatortest’:

dulu 
http://youragregator.appspot.com/agregatortest/home
sekarang
http://agregatortest.youragregator.appspot.com/home

Nampak? Ya benar, perubahan ini agak besar sehingga hampir kesemua ‘view’ terpaksa di modify sedikit, kerja yang sangat leceh. Kenapa diubah? Sudah jelas, untuk memperlihatkan bahawa setiap agregator itu tidak mempunyai kaitan sangat dengan YourAgregator melainkan di host oleh YourAgregator yang dirinya di host di Google App Engine. Kenapa tak buat dari awal?…….sebab saya tak tau boleh buat camtu :-)…..Satu lagi perubahan di bawah laut, ialah setelah meneliti sistem subdomain ini, baru saya tahu yang subdomain takleh ada huruf besar… ya saya tahu, saya cuai sedikit. Dan disebabkan itu, saya terpaksa menambah satu db-indexer index untuk case insensitive comparison yang mana memerlukan agregator field tersebut diupdate yakni field nama agregator. Malang tidak berbau, saya dah set dari mula yang field nama agregator tersebut ialah primary key kepada entity tersebut yang menyebabkan anda tidak boleh ubahnya melainkan anda delete terus agregator tersebut dan kemudian buat balik dengan nama baru…. saya tahu saya cuai lagi. Dan memandangkan saya nak buat lagi satu option untuk membolehkan admin mengubah nama agregator di management interface, saya ubah primary key table agregator kepada field autonumber tambahan yang menyebabkan segala agregator yang sedia ada, fail to work….kasihan….so saya delete ajelah semua agregator dengan feed-feed yang takkan berguna kalau takde agregator tersebut. Alang-alang, saya delete aje semua database, lagipun ada 3 agregator aje, kesemuanya untuk testing purpose….

So disebabkan itu, saya buat balik agregatortest yang baru dan letak rss-rss macam biasa kecuali blog huda ziad, pasar rss tu dia sendiri yang letak. Hasilnya, apabila anda melawat aregatortest, anda tidak akan jumpa blog update huda ziad. Kalau dulu, pasal blog dia selalu update, kita boleh tengok banyak post dari blog dia…

Ok, selain daripada itu, saya juga tambah field kat table Feeds untuk link ke RSS. Hasilnya, saya boleh buat macam nie…. jap saya ambik screenshot….

yang kat kotak merah tu.

Itu aje? Well… we need to start from somewhere, right? Anehnya, untuk sesetengah rss (iium website), yang tak support link tersebut, hanya keluar perkataan ‘at’. Saya dah buat template tu supaya tak keluar langsung kalau takde link, tapi nampaknya ada sedikit bug di sini. Nanti saya betulkan ok?

Satu lagi perubahan yang dah online yang agak BESAR….. ok, mungkin hanya ‘besar’ ialah kebolehen untuk search.Mari kita lihat lagi screenshot:

Sebarang pertanyaan? Kenapa saya letak kat situ? Well… nak letak kat mana? Sebenarnya ia terletak kat bahagian header yang boleh diubah melalui manage. So konseptnye ialah admin boleh letak search input tu kat mana-mana yang dia suka, kat footer pun boleh. Apa yang ia buat ialah apabila tekan enter kat situ javascript akan meng-ajax semula senarai post-post, macam tekan butang kat atas senarai post, camtulah, benda same aje. Cuba bukak agregatortest, pastu submit korang punye blog, jadi tak? Saya tau saya punye jadi. Oh ya, search engine itu mungkin mengambil masa untuk index korang punye post. Dan lagi satu, perubahan kecil yang membawa kesan besar ialah, RSS yang baru diapprove akan di-scan serta merta, selepas ia diapprove. So, kalau korang submit kat agregatortest yang saya dah set untuk autoapprove, korang tak payah tunggu 6 jam lepas korang submit blog korang, refresh aje beberapa kali.

Ok, untuk (hampir) sepanjang hari ini, saya sedang cuba untuk buat sistem comment. Hasilnya adalah:

Ok, so what’s the problem? (1)st  Its ugly. (2)nd Yang mana satu comment? (3) Cam tak cukup ruang (4) It’s  slow. Jangan risau, comment tak online lagi, saya masih memikirkan macam mana nak letak comment ni. Cam mana nak menampakkan macam comment. Pasal, as you can see… It suck!… and in super early alpha state. Saya terpaksa berfikir macam mana nak buat comment ini pasal, you see, kita boleh comment kat comment yang lain. Itulah konseptnya. Tapi sekarang nak letak butang ‘reply’ pun saya tak tau nak letak kat mana, pasal ia terlalu mengambil ruang. Saya terfikir nak buat page khas untuk comment, tapi camne orang nak tau yang ada comment? Kan? Dan nampak macam sistem AJAX ini sedikit bermasalah, dan kalau nak tau, setiap satu comment itu mengambil masa dua saat untuk load. Dan satu comment memerlukan 3 request. Pertama, check kalau ada reply untuk comment ini. Kalau ada ada ambil reply. Kedua, check kalau ada comment yang seterusnya, kalau ada, Ketiga, ambil comment tersebut. Hah! camtuhah sistemnye. Yang tak siap lagi pasal masalah style.

So, ilham yang seterusnya ialah, esok, kita buat satu page khas untuk satu Feeds, dan kat page tu bolehlah buat banyak-banyak reply. Tapi kemudian macam mana nak buat back button? Macam mana nak update lepas orang post comment? Nak refresh? Amboi! Ambil jalan mudah!. Camne pulak kalau comment tu ialah reply kepada comment yang lain? Camne? Camne? Camne?

Anyhow, itulah masalah saya, bagi comment (kat blog ni bukan kat agregatortest) kalau korang ada cadangan yang bernas atau kurang bernas pun boleh. Sape-sape yang nak submit blog kat agregatortest boleh join, pastu submit blog korang. Saya dah set auto approve. Dan kalau korang tekan ‘nice’ kat post korang nanti keluar “Damn! an error occured” tu pasal korang cuba ‘nice’ post korang . Mane aci! So tak boleh! Pergi nice post orang lain. Error message yang proper sudah dibuat tapi belum upload. Dan sesiapa yang berminat untuk buat design untuk default agregator, boleh join agregatortest, comment saya (kat blog ni bukan kat agregatortest) nanti saya bagi ‘manage_style’ permission. Ataupun korang boleh buat agregator sendiri (login kat youragregator.appspot.com, kat home ada link untuk ‘Create your own agregator’), korang akan dapat ‘superuser’ permission, buatlah design korang. Siapa yang ada permission boleh manage agregator melalui hyperlink “Manage” kat userbar (kat atas kanan page). Kalau takde hyperlink ‘Manage’ maknenye korang tak cukup permission. Ok, bye bye! Assalamualaikum semua!

Categories
Projects

Mengenai YourAgregator!

Assalamualaikum semua!

Apa khabar! tensyen? Samela kita. So let me say what ever I want to say ok?

Ok, mula-mula sekali, mari kita jenguk sebentar ke projek saya yang terbaru, yakni ‘YourAgregator!’. Mari kita lihat home page nye….

Tada! cam website tak cukup designer. Memangpun, aku sorang aje yang buat! Dah la aku tak reti design. So, cam [sensored] sikitlah kan. Unfortunately, belum ada manual yang menerangkan tentang apa sebenarnya yang dilakukan oleh youragregator.appspot.com ini.

So, mari kita buat sedikit briefing tentang ape-ke-heh nye dengan YourAgregator. Mari kita mulakan dengan apa itu agregator. Agregator ialah sesuatu yang menggabungkan atau mensummarykan. Dalam kes ini, tugas YourAgregator adalah untuk meng-fetch berita-berita daripada blog-blog atau website-website, dan kemudian menyusunnya dalam satu webpage. Siapa yang nak mengetahui lebih lanjut tentangnya post tersebut, bolehlah click pada title post di agregator tersebut yang merupakan satu hyperlink kepada webpage/blog sebenar.

Jadi itu yang YourAgregator buat?

Ya, dan tak. YourAgregator sebenarnya bukanlah agregator peribadi, walaupun namanya ‘YOURagregator’. Ianya adalah agregator berkumpulan.

Dalam YourAgregator, satu ‘Agregator’ sepatutnya digunakan oleh sekumpulan pengguna yang mempunyai minat atau ciri-ciri yang sama. Pengguna agregator itu submit RSS blog atau website yang mereka rasa mereka nak tahu berita-berita terkini. Contohnya: sekumpulan pelajar IIUM sepakat nak buat satu agregator yang bertajuk ‘IIUM-NEWS’. Dalam agregator tersebut, mereka submit RSS dari website IIUM, dan dari blog-blog diorang. So, bila IIUM buat announcement melalui rss mereka, pembaca agregator ini akan dapat berita tersebut. Setiap blog post mereka juga akan di-agregate kedalam agregator IIUM-NEWS. Jadi mereka tau perkembangan tentang member mereka.

agregatortest menerima feed dari laman web IIUM.

Tapi, macam mana kalau diorang submit banyak-banyak rss, pastu post pun melimpah-limpah?

Untuk masalah tu, setiap agregator ada diorang punye admin. Dan admin itu bertanggungjawab untuk meng-approve rss submission, supaya rss yang disubmit itu ada kaitan dengan agregator tersebut. Kalau korang try kat http://youragregator.appspot.com/agregatortest/home, submit korang akan diterima pasal agregator tersebut sudah di set untuk secara automatically approve rss submission.

Lagi satu, YourAgregator juga dilengkapi dengan ranking system, yang saya gelar “niceness”.

butang niceness

Yakni, setiap post ada dia punye ‘niceness’ yang secara defaultnya diambil daripada submitter punye niceness. Niceness ini lebih kurang macam ‘like’ dengan beberapa perbezaan. (1) hanya member sahaja yang boleh rate. (2) Apabila member tekan butang nice, post itu punye niceness bukan ditambah dengan ‘1’ tetapi ditambah dengan ‘niceness’ member yang tekan butang tersebut. Dalam YourAgregator, bukan post sahaja yang ada ‘niceness’ tetapi member juga ada ‘niceness’. Setiap kali seorang member rate satu post, ‘niceness’ post tersebut DAN ‘niceness’ member akan bertambah.

So member yang banyak rate, ada banyak niceness.  Dengan ini, member yang mempunyai ‘niceness’ yang banyak, mempunyai kuasa ranking yang lebih tinggi kerana setiap kali mereka rate, niceness post akan bertambah sebanyak ‘niceness’ member tersebut. Jadi, bagi satu-satu post untuk mendapat ranking yang tinggi, ia perlu dapat ‘nice’ daripada member yang rankingnye tinggi, yakni member yang aktif dalam agregator tersebut, bukanlah member yang berpangkat rendah yang inginkan publisiti murahan. Jadi, mereka yang kurang melibatkan diri di agregator tersebut, kurang kuasa dalam menentukan post mana berkualiti.

Untuk mengelakkan satu-satu member itu menjadi terlebih kuasa, pengiraan niceness member tersebut bergantung kepada ‘2*(1-0.98**n)/(1-0.98)’ dimana ‘n’ itu ialah berapa kali member tersebut rate sesuatu post. Kalau anda teliti lagi, pengiraan tersebut ialah ‘sum of geometric progression’ dengan ‘r’ kurang daripada 1. Ini bermakna ada had maksimum ‘niceness’ untuk semua member iaitu sebanyak

‘1/(1-0.98)=100’ 

Ini bermakna seorang member tidak mungkin akan mempunyai ‘niceness’ lebih daripada 100. ‘niceness’ seorang member akan menjadi ’50’ yakni dianggap member tulen apabila dia sudah me-rate sebanyak 35 post.

Graf pengiraan niceness member dengan cursor di niceness hampir 50.

Setakat ini, itulah sahaja perkara yang telah diimplement dalam YourAgregator. Anda boleh mencuba untuk membuat agregator anda sendirii. Saya tidak recommend anda register terus ke laman web tersebut, tetapi anda boleh login melalu facebook account, twitter account dan google account. Setakat ini apa yang belum siap untuk ‘versi’ ini adalah design website serta theming sistem yang masih kucar kacir, tak termasuk segala term-of-service dan segala benda remeh temeh.

So.. amacam? Ok? Bolehlah anda ‘nice’ post ini di agregatortest. Terima kasih kerana membaca (kalau ada orang yang baca), post ini banyak menghilangkan stress saya akibat daripada pening memikirkan bagaimana nak design website ini. Bye! 🙂

ps: untuk mengurangkan server load, RSS hanya akan diupdate setiap 6 jam. So lepas anda submit blog anda, tunggu 6 jam baru boleh complain.

Categories
Projects

Jom buat blog agregator.

Assalamualaikum semua!

So saya dapat satu ilham untuk project saya yang seterusnya, yakni “YourAgregator”. Semuanya bermula apabila saya buat blog nie. Saya mem-marketnye merata-rata di pelbagai facebook group, dan akhirnya dapat dalam 200 pageview dalam masa 3 hari. Pastu hari ke 4 takde pageview langsung… teng…teng…teng… Tapi tu bukan ceritanya., ceritanya ialah apabila saya mendaftarkan blog saya di blog http://iium-blogger.blogspot.com/. Yang agak pelik sikit ialah cara pendaftarannya ialah dengan memberi nama dan blog dalam comment kat salah satu post kat situ. So… memang tak macam pendaftaran. Tapi lepas tu, diorang ada letak widget baru yang special yang mana kitorang letak kitorang punya nama dan blog url kat dalam sejenis form, baru ok sikit, tapi tak nampak professional. Tambahan lagi, saya agak keliru dengan apa gunanya blog tersebut? dan apa manfaatnya terhadap blogger-blogger iium? Adakah blogger iium akan dapat traffik daripada senarai blog yang bermacam-macam tu? Siapa yang akan klik di situ? Dan kemudian saya teringat dengan salah satu website geek komputer yang sangat terkenal, AKA Slashdot. Slashdot ialah sejenis blog agregator. Slashdot tidak mempunyai maklumat sendiri, tetapi bergantung kepada submission daripada user-usernya.

So muncullah ilham untuk menghasiklan satu website sendiri yang dipanggil, “YourAgregator”. Saya pilik nama tu pasal…. saya tak tau nak letak nama lain. But that’s not the point. Your Agregator membolehkan pengguna membuuat group agregatornya sendiri, yakni slashdot mereka. Pengguna boleh submit rss mereka, dan kemudian apabila mereka update blog mereka YourAgregator akan secara automatiknya mensubmit post mereka kedalam agregator itu. Tambahan lagi, kita boleh buat ranking system, yang mana post yang lagi power, akan ditempatkan di front-page. hah? Amacam ok tak idea tu? 
YourAgregator masih lagi dalam pembikinan peringkat ‘alpha’ dan mungkin mengambil masa hampir seminggu untuk siap. So stay tune ok?
ps;….saya tak tau apa yang korang fikir, tapi bagi saya….BM saya agak teruk dan tak menarik. RookieCode pun lagi ok.
Categories
Personal

Belia Benci C++

Assalamualaikum, pembaca-pembaca sekelian.

Hari ini saya akan membincangkan tentang satu isu yang telah agak lapuk di dunia ini iaitu

Belia Benci C++

Ya benar tuan-tuan, Belia (sebenarnya saya) Benci C++.

Mari kita mulakan dengan status update saya pada hari ini, dan sebenarnya dari semalam lagi saya stuck kat benda ini. So harini saya telah menyambung project C++ saya yang ke…. saya tak ingat. Dalam pembikinan projek itu, yang sebenarnya agak besar sehinggakan saya terpaksa men-test dahulu bahagian kecil sebelum menyambung implimentasi yang seterusnya. Dalam pada itu, ini merupakan code test tersebut.

void test_gdserialization(){
   std::cout<<"\nDebugging DoubleArray Serialization";
   DoubleArray* thearr=new DoubleArray(10);
   for(int i=0;i<10;i++){
       thearr->data()[i]=(double)(rand()%100)/(double)(rand()%100);
   }
   std::cout<<"\nSerializing, data:";
   QString save=thearr->toString();
   std::cout<<"\n"<
   std::cout<<"\nEnd Save";
   std::cout<<"\nRetry Print";
   std::cout<<"\n"<
   std::cout<<"\nBegin load";
   DoubleArray* newarr=new DoubleArray(1092);
   newarr->fromString(save);
   std::cout<<"\nEnd load,Serializing,data:";
   QString newdata=newarr->toString();
   std::cout<<"\n"<
   if(newdata==save){
      std::cout<<"\nString match";
   }else{
      std::cout<<"\nString does not match";
   }
}

Long story, make short. Basically, apa yang code ini cuba buat ialah ia akan serialize DoubleArray yang pertama menggunakan 'toString()'. Dan ambil resultnya sebagai QString. QString sebahagian daripada Qt framework. Kenapa pakai QString? Kerana implicit sharing yang sangat memudahkan kerja. So dah dapat string daripada DoubleArray tu, kita buat satu lagi DoubleArray dan kemudian deserialize string yang tadi tu. Tapi disebabkan pelbagai masalah yang bermacam-macam dan setalah mengubah-ubah pelbagai code, akhirnya code fromString() menjadi sebegini:

void DoubleArray::fromString(QString data){
    std::cout<<"\nIn Double Array fromString()\nThe data is\n";
    std::cout<
    std::cout<<"Is it ok?";
    std::string buffer(data.toStdString());
    std::istringstream inputstream(buffer);
    boost::archive::xml_iarchive inputarchive(inputstream);
    DoubleArray* thenewone=this;
    inputarchive>>BOOST_SERIALIZATION_NVP(thenewone);
}

Ok, so basically ianya benda biasa. Lupakan perkara yang berserabut pada lima baris yang terakhir. Fokus kepada baris yang kedua. Apa yang ia buat ialah, ia print balik apa yang diberi di method argument yang pertama iaitu 'data' iaitu hasil daripada serialization yang lepas. Kalau kita tengok balik code sebelum ini di 'test_gdeserialization' baris yang ke 9 dan ke 12, ianya adalah arahan yang sama dan disebabkan 'fromString' yang di-call pada baris yang ke 15 menggunakan QString 'save', ia patut bertindak dengan cara yang sama betul? Tapi apa yang terjadi apabila kita jalankan test tersebut:

Haaa!? Ape kes!? Kok jadi begini-deh! Sabar-sabar,  kita gali sikit ape yang jadi...

Teng, teng, teng..... 'memory corruption'.

So apakah yang telah terjadi? Kalau kita cuba google perkara ini, kita akan mendapati yang 'malloc(): memory corruption(fast)' menandakan bahawa program tersebut telah cuba untuk mengakses data di luar range yang telah diminta daripada 'malloc()'. Tetapi ada beberapa kemushkilan, di sini. Iaitu, di function 'test_gdeserialization' baris yang ke 9 dan ke 12, telah mem-print seperti mana juga di 'fromString()'. Hal ini dapat dibuktikan apabila kita menggali lagi dalam error tadi:

Ada perkataan 'end save' dan 'retry print' iaitu std::cout di 'test_gdeserialization' pada baris yang ke 10 dan ke 11, itu menandakan bahawa 'std::cout' pada baris yang ke 9 telah berjaya di laksanakan. Begitu juga dengan 'std::cout' pada baris yang ke 12, dibuktikan dengan mesej:

Perkataan 'Begin Load' patut dikeluarkan pada baris yang ke 13, yang bermakna 'std::cout' pada baris yang ke 12 telah berfungsi.

So... Ape ke hehnye? And then entah kenapa, apabila kite try sekali lagi dalam debug mode, masalahni tak keluar, keluar masalah lain (biasa lah tu). Tapi yang kat release mode masih sama. So far lah.

Categories
Personal

Introduction.

Assalamualaikum, wahai pembaca-pembaca sekelian (kalau ada). Mari saya perkenalkan diri saya.

Kamu boleh panggil saya asdacap (sebutannya saya sendiri tak tau). Itu bukan nama sebenar. Umur saya 18 tahun, saya seorang lelaki (asdacap itu “asd” + “acap”, “acap” = lelaki). Saya sedang belajar di pusat asasi UIA Petaling Jaya, dalam course ICT. Saya tergolong dalam golongan yang kamu panggil ‘geek’ komputer, dan agak berkemahiran dalam bidang perkomputeran.

Tujuan post ini adalah untuk men-tujuankan blog ini dengan memberi introduction tentang ape-ke-heh-nye dengan blog ini. Blog ini adalah blog peribadi saya yang pertama dan saya akan secuba mungkin mengekalkan bahasa melayu dalam blog ini. Walaupun ini adalah blog peribadi saya yang pertama (yang sepenuhnya online … agaknya), ianya bukanlah blog/website yang pertama saya karang. Antara blog/website lain ialah:

By the way, saya sebenarnya lebih selesa kalau menulis dalam bahasa inggeris (pasal rookiecode.blogspot.com) so.. kalau saya campur BM+BI , tambah sambal sikit, tak pedas sangat kan? 
By the way (again), kalau korang perasan, bila korang google “bagaimana membentang dengan baik”, blog saya (pembentanganbaikasdacap.blogspot.com) akan dapat ranking yang pertama. Tak caye? Cuba try sekarang, bukak tab baru, bukak google (www.google.com), pastu taip “bagaimana membentang dengan baik”. Dah? Percaya tak? Ok,ok, saya tau korang tengah cakap “what the @#%& !?, ranking pertama siot!” atau lebih menakutkan lagi korang fikir “Eh, itu blog rujukan aku !”. Sebenarnya, ranking itu memang sepenuhnya nasib sahaja, dan pageview hanya dalam 300 sebulan dan ditambah lagi bounce rate 70%, so memang nasib (yang sebenarnya agak buruk) sahaja. Blog itu sebenarnya sebahagian daripada jurnal saya.
4 result yang pertama + show more result.

Dulu-dulu pada tahun 2009, fikiran saya sangat stress, jadi saya buat jurnal. Dalam jurnal tu, saya tulis macam-macam dalam pelbagai bahasa saje nak lepaskan stress. Lebih tepat lagi apa-apa yang saya rasa saya nak taip. Sesetengah daripadanya saya print, pastu saya bagi kat member-member saya, kenapa? Entah, saja nak lepaskan stress. Kebanyakan jurnal itu sebenarnya agak lawak, macam ada salah satu daripadanya bertajuk “polisi cinta saya”. Yang itu (bagi saya) antara yang agak smart. Dan ada juga yang bersifat sebagai rujukan atau panduan seperti “panduan membentang dengan baik”, jeng…jeng…jeeng… So, “panduan membentang dengan baik” adalah antara article yang saya letak kat internet dengan harapan mungkin ia dapat membantu orang lain. Sebenarnya saya letak jugak semua post-post 2009 yang lain, semuanya berjumlah lebih kurang 22000 perkataan (record whoa!), tapi post yang lain letak kat blog yang lain. Dan sebenarnya lepas 2009, saya dah tak stress sangat, lalu penulisan jurnal saya telah berkurangan dengan sangat drastik, sehinggakan hampir tiada lagi jurnal.
Ops, balik ke cerita, so, saya letak jurnal saya kat blogger pada hujung tahun 2009. Lepas tu, saya bertukar dari pakai yahoo mail kepada gmail, maka saya buat account blogger baru untuk projek-projek baru. Lama kelamaan dalam lepas SPM, saya terfikir nak jenguk balik account blogger lama, saja nak tengok-tengok. 
Blog pertama….pageview…0, cantik… 
Maksud saya, takkanlah google tiba-tiba berminat dengan jurnal saya kan? dengan SEO blogger yang teruk lagi tu… aku check lagi blog lain, 
Blog kedua…pageview 0, cantik…. 
standardlah blog copy-paste tak dapat pageview langsung kan?…
Blog ketiga… pageview 317….
Ehem… pardon me… lap-lap cermin mata, refresh, F5, F5,
 …pageview 318….
So waktu tu aku pun macam “What the ####?”, check-check keyword, try google, “bagaimana membentang dengan baik”….then, aku pun macam “what the @#%& !?, ranking pertama siot!”, macam korang jugak lah kan?
Dah perasan pasal tu, saya pun berasa ter-tanggungjawab terhadap 318++ penggoogle dari malaysia, singapore dan brunei itu, terhadap maklumat tersebut yang sebenarnya ialah jurnal saya. So saya update sana-sini, tukar design, bagi warning -“Ini diari aku la! Jangan percaya sangat kat aku nie!”-, tambah lagi sikit post, sampai kalau korang google “powerpoint berkesan”, blog tu ranking yang ke 3. Tapi setakat tambah sana-sini sahaja. Kalau diikutkan, rookiecode ada lagi banyak post, tapi mungkin pasal rookie code ada banyak competition, jadi pageview pembentanganbaikasdacap.blogspot lagi banyak, buat malu aje.
Post “Powerpoint Berkesan” sebenarnya tidak ada dalam jurnal, ia ditambah.

So, itulah sikit-sikit cerita pasal blog lama saya. Ada lagi blog lain yang takde pageview langsung, tapi pasal agak private sikit (dah diari aku, duh!), kemungkinan besar korang takkan jumpa jurnal lama aku, melainkan aku tiba-tiba lembut hati nak dedahkan segala rahsia yang ada di hati, yang mana probabilitinya agak rendah. 
Anyway, pasal ini post pertama aku, subscribe-lah blog ini supaya jiwa ini terasa lebih dihargai. Sekian terima kasih….Bye…