LonTonG

Scio Cui Credidi
See also: Other Geeks@INDC
Web Programming Dengan Haskell

Setahun belakangan ini sesuatu banget buat saya dari sisi pengembangan diri. Sebagai orang yang punya latar belakang programmer imperatif (saya hanya bisa menulis kode dalam bahasa C dan sedikit di Basic), memberanikan diri untuk masuk ke dunia pemrograman fungsional benar - benar suatu pengalaman yang luar biasa (setidaknya buat saya secara pribadi).
Singkat kata bahasa yang saya pilih adalah Haskell, alasan saya pilih bahasa ini ketimbang F#, Erlang atau Clojure saya lupa :)
Mungkin yang bisa saya ingat adalah setelah 13 tahun saya fokus di C dan sedikit - sedikit lihat bahasa pemrograman lain, 1 hal menjadi jelas buat saya yaitu saya tidak tertarik kepada bagaimana syntax suatu bahasa pemrograman namun saya lebih tertarik kepada sisi matematisnya, yaitu semakin dekat (atau semakin mirip ekspresinya) suatu bahasa pemrograman dengan ilmu matematika. Dan setelah saya beli dan baca buku The Haskell Road to Logic, Maths and Programming, semakin saya yakin bahwa ini perjalanan saya selanjutnya.

Latar belakang saya di C (imperative programming) seperti mimpi buruk sewaktu saya coba baca baris kode seperti ini:
exceptOnFailure :: MonadBase IO m => m (Either String v) -> m v
exceptOnFailure = (>>=either (C.throwIO . EitherException) return)
Apa maksudnya baris kode ini? 11 12 ini dengan Perl :)
Untuk mempersingkat waktu, ritual "hair pulling & head banging" paling intens saya lakukan dalam perjalanan kali ini.

Inti kebijakan Zen berkata, orang yang berada di pinggir danau tahu tentang air namun berbeda dengan orang yang sudah berenang di danau tersebut, dan orang yang sudah berenang di danau berbeda pengetahuannya tentang air dengan orang yang sudah pernah menyelam.
Saya buat aplikasi web (WoM and community) dengan menggunakan bahasa pemrograman Haskell (tentunya), dan dengan memanfaatkan: Happstack (web framework), HDBC-sqlite3 (driver database), Hamlet (type-safe templating). Dan menyesuaikan dengan kompleksitas aplikasi yang saya bangun, segera akan saya gunakan web-routes-boomerang dan acid-state.

Secara sederhananya aplikasi yang saya bangun akan mentranslasikan setiap request header ke controller yang dituju, sebagai contoh:

myApp :: (IConnection a) => a -> ServerPart Response
myApp db = msum
    [ dir "static" $ serveDirectory DisableBrowsing [] "static"
    , dir "tpl" $ serveDirectory DisableBrowsing [] "tpl"
    , dir "thumb" $ serveDirectory DisableBrowsing [] "thumb"
    , dir "page" $ path $ \sid -> do R.method GET >> (showSites db sid) 
    , dirs "category/new" $ R.method GET >> (showInsertCategoryForm)
    , dirs "category/new" $ R.method POST >> decodeBody postBodyPolicy >> withData (insertCategory db)
....

loadSitesFromDb :: (IConnection d, MonadIO m, MonadPlus m) => d -> Integer -> m [Site]
loadSitesFromDb db page = do
  site <- liftIO $ handleSqlError $ quickQuery' db "SELECT A.siteID, A.siteName.."

  return $ map sitesFromDB site
              where sitesFromDB [sqlSiteID, sqlSiteName...] = (item)
                     where item = Site { siteID = fromSql sqlSiteID, siteName = ..

dengan model:

data Site = Site { siteID :: Integer
                   , siteName :: String
                   , sitePhoneNum :: String
                   , siteCategoryID :: String
                   , siteURL :: String
                   , siteRating :: String
                   , siteDescription :: String }

instance FromData Site where
  fromData = do
    sID <- look "_id"
    sName <- look "_name"
    sPhoneNum <- look "_phoneNum"
    sURL <- look "_URL"
    sCategoryID <- look "_categoryID"
...

Yang akhirnya dipresentasikan dengan:

                    <ul class="thumbnails">
                        $forall site <- sites
                            <li class="span3">
                                <div class="thumbnail">
                                    <img src="/thumb/#{siteID site}t.png" alt="" class="img-polaroid" />
                                    <div class="caption">
                                        <h5>#{siteName site}
                                        <p><a href="/review/#{siteID site}" data-target="#commentModal" role="button" class="btn" data-toggle="modal">


                    <div class="pagination pagination-large pagination-centered">
                        <ul>

                            $forall x <- enumFromTo 1 $ (div numrows 30)
                                $if (==) x page
                                    <li class="active"><a href="/page/#{show x}">#{show x}</a>
                                $else
                                    <li><a href="/page/#{show x}">#{show x}</a>
....

Khusus bagian V nya, untuk mempermudah pekerjaan saya, saya manfaatkan Bootstrap, PhantomJS (yang di-eksekusi melalui bash script di belakang layar).
So far so good untuk aplikasi web yang komplit dengan backend & frontend total LoC 300+ dan sangat concise.

Backend Frontend

 

Kesimpulan saya, perjalanan ini sangat layak diperjuangkan!
Sesuai dengan filosofi Haskell bahwa apabila suatu program bisa melewati fase kompilasi maka program tersebut akan baik - baik saja. Dan waktu yang biasanya dihabiskan untuk proses debugging, bisa saya gunakan untuk hal lainnya :)

Terakhir, seperti yang saya singgung di atas, ke depan saya akan menggunakan web-routes-boomerang.
Mungkin perlu saya hilite, web-routes-boomerang ini sangat powerful untuk menangani (terutama) urusan parsing URL. 
Untuk project saya ke depan (aplikasi web saya di atas sudah nyaris rampung dan siap dioper ke marketing), saya akan membuat internet of things hub (restful web API) khususnya untuk device berbasis Arduino dan SoC seperti Raspberry pi.

Share this post: | | | |
Posted: May 27 2013, 11:09 AM by LonTonG | with no comments
Filed under:
Rival Windows Yang "Layu Sebelum Berkembang"

Artikel yang saya baca pagi ini sangat sayang untuk dilewati.
Artikel ini mengulas perusahaan - perusahaan IT yang punya produk seperti Windows, yang "layu sebelum berkembang".

Ada penjelasan tentang keunggulan produk dari perusahaan IT ini, namun juga ada kisahnya kenapa mereka mati, bahkan sebelum sempat menyaingi Windows.
Semoga kita yang hidup di dunia IT, bisa mengambil pelajaran dari artikel ini. Kenapa kompetitor kita bisa tetap bertahan, bahkan menjadi sukses sekali.

OK, without further ado:
http://technologizer.com/2010/11/22/the-ones-that-didnt-make-it-windows-failed-rivals/

P.S
Saya baru merayakan 5 tahun usaha kami survive dan (thank God!) bisa berkembang sedikit demi sedikit :)

Share this post: | | | |
Posted: Nov 24 2010, 10:25 AM by LonTonG | with 1 comment(s)
Filed under:
Vote My Article, Please

Terakhir saya menulis artikel tentang penggunaan Native Windows Ribbon pada aplikasi yang dibangun dengan Win32 API dan pure C di CodeProject. Nah rupanya artikel tersebut dilihat dan dianggap cukup menarik dan di-ikutsertakan pada kompetisi Best C++/MFC article of October 2010 & Best overall article of October 2010. Nah, kalau rekan sekalian punya waktu sedikit & tentunya account pada CodeProject, mohon di vote (terutama di kategori best C++/MFC article).

Votenya di sini:
http://www.codeproject.com/script/Surveys/VoteForm.aspx?srvid=1093 (Best C++/MFC article of October 2010)
atau ini
http://www.codeproject.com/script/Surveys/VoteForm.aspx?srvid=1096 (Best overall article of October 2010)


Saya lihat hadiahnya menggiurkan sekali, yaitu 4 buku terbaru dari Apress:

Exploring C++: The Programmer’s Introduction to C++, by Ray Lischner
Foundations of C++/CLI: The Visual C++ Language for .NET 3.5, by Gordon Hogenson
Pro Visual C++/CLI and the .NET 3.5 Platform, by Stephen R. G. Fraser
Expert Visual C++/CLI: .NET

Untuk hadiah lain, yaitu komponen dan tool tidak terlalu penting dibanding buku.
Isi dari buku, setelah saya pelajari mungkin bisa saya "lempar" kembali supaya bisa berguna untuk orang lain kembali :)

Terima kasih banyak!

Share this post: | | | |
Posted: Nov 07 2010, 10:35 PM by LonTonG | with no comments |
Filed under:
Native Windows Ribbon In Win32 C Application

Di post terakhir, saya membahas sedikit tentang project Hilo.
Project ini walaupun menarik dan memberikan harapan kepada Windows native programmer, tetapi masih sangat terbatas kepada programmer C++.

Pada chapter 10 Hilo dibahas tentang bagaimana memanfaatkan native Windows Ribbon framework pada aplikasi yang akan kita bangun.
Nah, minggu lalu saya memiliki kesempatan untuk mem-posting sebuah artikel yang sama tentang penggunaan native Windows Ribbon framework, hanya saja tanpa menggunakan tambahan apapun (MFC atau ATL), hanya C dan Win32 API. Artikel ini dapat diakses di:
http://www.codeproject.com/KB/toolbars/Ribbon.aspx

Point yang penting saat akan menggunakan Ribbon adalah:

  • Designing UI (markup code)
  • Making connection to command handler / callback through COM

Detail dapat langsung dilihat pada artikel bersangkutan.
OK, semoga berguna!

Share this post: | | | |
Posted: Oct 24 2010, 10:24 PM by LonTonG | with 2 comment(s)
Filed under: ,
Programmers' Hierarchy

Jangan terlalu serius :)
http://lukewelling.com/2006/08/03/java-programmers-are-the-erotic-furries-of-programming/

 

programmer hierarchy

Syukur VB programmer di atas Pascal programmer, setidaknya i'm not that lame :)

Share this post: | | | |
Posted: Aug 26 2010, 03:26 PM by LonTonG | with 1 comment(s)
Filed under:
The Disasters of Visual Designer Tools

Charles Petzold beberapa hari yang lalu menulis artikel yang sangat menarik tentang penggunaan visual designer yang menurut beliau "pedagogical catastrophes".

Apa yang disampaikan di artikel ini persis sama dengan yang telah terjadi 13 tahun yang lalu (more or less), saya ingat awal mula HTML editor booming dan waktu itu salah satu nya yang ngetop (dan yang pioneer) adalah HTML editornya dari CoffeeCup.
Semua (nyaris semua) orang ndak ada yang mau `nyentuh notepad dan ber-capek - capek ria `nulisin tag HTML, semuanya asyik drag and drop. Akibatnya minim pengetahuan tentang HTML.

Ini saya alami sendiri sewaktu masih bantu - bantu training mahasiswa untuk pembuatan website di Unila. Kalau diminta buat website dengan notepad, `ndak ada yang bisa. (waktu itu mahasiswa diminta untuk membuat script perl sederhana seperti guestbook, counter)

Banyak yang bilang, ngapain sih repot - repot kalau bisa / ada yang mudah?
Mungkin untuk inilah alasannya.

Share this post: | | | |
Posted: Jul 21 2010, 08:19 AM by LonTonG | with 2 comment(s) |
Filed under:
Project Hilo

Sekilas info, khususnya untuk programmer C/C++, website ini mungkin menarik:
http://code.msdn.microsoft.com/Hilo. Penjelasannya:

“Hilo” is a series of articles and sample applications that demonstrate how you can leverage the power of Windows 7, Visual Studio 2010 and Visual C++ to build high performance, responsive rich client applications.

Semoga bagus ke depannya website ini, dan bukan melulu soal creating "touch-enabled Windows applications". Semoga bisa lebih ke "dalam", semoga bisa menjadi versi lebih teknisnya dari blog Raymond Chen. Semoga.

Share this post: | | | |
Posted: Jul 10 2010, 11:12 PM by LonTonG | with 2 comment(s)
Filed under: ,
In The Future, The Browser Is The Computer?

Seminggu terakhir ini karena cuaca sangat mendukung untuk tidur (baca: ngoprek). Kepikiran ngobrolan terakhir sama Pak Risman soal cloud computing, akhirnya mulailah ngelirik - lirik Chromium OS

image

Instalasi via VirtualBox
(panduan step by step bisa diikuti di sini: http://www.redmondpie.com/how-to-install-chrome-os-in-windows-7-9140127/)

Satu hal yang masih membingungkan kenapa bisa Chromium OS yang begitu simple, too simple (menurut kebanyakan orang), requires this:

System requirements of Chrome OS:
Processor: Intel Pentium, Xeon or newer; AMD Duron, Athlon, Sempron, Opteron or newer
RAM: min. 256 MB
Hard disk: min. 1 GB
Graphics card: supports most modern graphics cards

(for nitpicker: jangan tanya lebih detail, karena saya tidak eksplorasi lebih dalam dan saya tidak tertarik untuk ini) 

OK lanjut!
Sepertinya saya harus setuju dengan konsep: in the future, the browser is the computer.
Dan karena informasi bisa mengalir melalui apa saja, saya berpikir asyik juga kalau bisa buat suatu sistem based on this:
(ARM9 32 bit 104MHz, 87 MIPS = 348.000.000 exe / sec!)

image

dengan input nya SMS (sebagai pengganti keyboard), dan nanti bisa nge-browse (lynx?), dan outputnya melalui RS232 Serial LCD 20x4, dengan modifikasi dari LCDproc, seperti ini:

image

menjadi ini:

image

dimana nanti keterbatasan char yang bisa di-display bisa diakali dengan timer.
Sweet! :)

Mungkin ada yang bingung, orang sinting dari mana yang mau nge-gantiin keyboard dengan SMS? Yang artinya keluar $$$ hanya untuk "ngetik" ?
Ya, namanya juga senang - senang boss! Lagian ada operator yang ngasih 10.000 SMS / hari, cukuplah ini :)

Oh ya, device yang di atas berisikan Open AT RTOS, dimana kita bisa membuat suatu aplikasi yang nantinya kita injeksikan ke dalamnya.
Berikut contohnya:

image

Output yang didapat (menggunakan HyperTerminal)

image

Beberapa situs yang menarik:
http://designsomething.org/
http://elinux.org/BeagleBoard
http://www.embeddedarm.com/products/board-detail.php?product=TS-7400
http://netbsd.org/ports/#ports-by-cpu


OK boss, lanjut lagi ke part berikutnya (lebih detail dan semoga ada hehe), sekarang sudah jam 12.. waktunya mengejar makanan di warteg dulu, daripada keabisan!

Share this post: | | | |
Posted: Jun 17 2010, 12:28 PM by LonTonG | with 1 comment(s)
Filed under: ,
Users Are Evil

Kalau rekan - rekan sekalian senasib dengan saya, yaitu mencari makan dengan cara berdagang software, seharusnya sudah tidak asing lagi dengan pengguna software yang "kreatif". Filosofi "users are evil" adalah benar adanya, dan sudah menjadi kewajiban kita, sebagai pihak pengembang untuk mem-proteksi dagangan kita sebaik mungkin.
Sharing saya berikut mungkin berguna untuk rekan - rekan sekalian.

Ada kalanya kita mau me-limit sedemikian rupa software buatan kita sebagai bagian dari strategi marketing, supaya ada versi lite, standard, pro, dll
Nah cara yang paling sederhana adalah mematikan / men-disable control tertentu.
Sebenarnya cara ini selain sederhana juga mengandung kegunaan lain, antara lain supaya pengguna yang menggunakan versi lite (sebagai contoh) bisa melihat bahwa ada fitur yang lebih canggih pada versi yang lebih advance, tentunya dengan harapan si pengguna ini mau meng-upgrade softwarenya.
Nah permasalahan muncul, kalau si pengguna mulai "kreatif". Silahkan lihat contoh berikut:

Tombol "Import" pada versi lite di-disabled:

smstron_disabled_button

Pengguna menggunakan tool - tool pendukung "kreatifitas":

enable_program

1x klik tombol "Import" menjadi enabled kembali:

smstron_enabled_button


Secara pribadi saya lebih memilih membuat 2 versi yang totally terpisah, dengan pertimbangan yang versi paling basic akan sangat jarang di-update (bahkan kalau perlu tidak usah di-update hehe)
Nah di versi yang kita limit sedemikian rupa, buang semua fungsi - fungsi yang memang dibatasi, dan bukan hanya men-set button behaviour / style menjadi disabled.

Share this post: | | | |
Posted: Feb 10 2010, 10:00 AM by LonTonG | with 4 comment(s)
Filed under: ,
KSP, My Own SSS Engine

Dulu (kalau tidak salah saya coba sekitar tahun 2003/2004) ada engine SSS yang namanya Escapade atau ESP dari Squished Mosquito, sintaksnya cukup mudah untuk dimengerti.
Walaupun tidak secanggih PHP, ASP, dll; tetapi ESP ini menarik juga, coba perhatikan baris kode berikut:

<LET num="5">
..
<FOR i=1 TO $num STEP 1>
<EVAL value "name$i">
<li><input type="text" name="name$i" value="$value"> name$i -> $value
</FOR>
..

Dan kemarin pas saya coba intip - intip lagi website nya (untuk keperluan website saya)... ternyata sudah "tewas" :(

Lumayan sayang juga, padahal ide awal ESP ini bagus:

    • Logical syntax
    • Uncomplicated learning curve
    • Minimal server dependence
    • Small program footprint
    • No interference with existing scripting languages
    • Self-contained binary structure
    • Works on both UNIX and NT platforms
    • Ongoing development to constantly add new features
    • Price: The engine is free

Ya OK lah, kalau begitu saya coba buat sendiri "engine" yang saya mau:

  • Super simple untuk dimengerti
  • Karena butuh hanya fitur tertentu, jauhi "lemak jahat"
  • Pemisahan antara UI, data dan logic behind it HARUS semudah mungkin
  • Minim depedensi
  • Irit resource (mungkin untuk tahap awal belom bisa)

Dan hasilnya adalah: KSP
Lihat kode HTML berikut:

<div id="main" class="grid_8">
    @rt
    <h3><a href="index.html">@ProductTitle</a></h2>
    <p class="post-info">Filed under @ProductCategory</p>
    <p>@ProductDescription
    @ert
</div>

<div id="left-columns" class="grid_8">

    <div class="grid_4 alpha">
        <div class="sidemenu">
            <h3>Category</h3>
            <ul>
                <li>
                @CategoryList
                </li>
            </ul>
        </div>
    </div>
</div>

Idenya adalah pengguna cukup menyisipkan tag yang sangat sederhana pada file template (HTML) dan sisanya adalah tugas KSP untuk melakukan pemrosesan.

Sebagai contoh di sini:

  1. Akan ada repeated records
  2. Record akan berisi: nama, kategori, dan deskripsi dari produk

Desain dari template yang akan digunakan silahkan gunakan sebebas - bebasnya, yang penting hanya perlu menyisipkan tag tersebut.
Saat ini tag masih sangat primitif, ke depan kemungkinan bakal ada tag - tag lain seperti: @Product;Title;10;ASC

Untuk contoh website, silahkan lihat website berikut:
http://www.sentramodem.com/cgi-bin/?page=index

Karena ini masih embrio, maka akan banyak ditemui anomali :)
Tapi yang mungkin perlu untuk langsung diubah saat masuk ke tahap yang lebih matang adalah KSP harus jalan sebagai module dari web server (kemungkinan besar ditempelin di Apache saja), saat ini KSP merupakan CGI yang dibuat dengan C.

wiria@vps10:~/sm/cgi-bin$ ls -la index.ksp
-rwxr-xr-x 1 wiria wiria 13172 Jan 17 19:14 index.ksp

(seharusnya semua distro *NIX bisa langsung menjalankan binary dari KSP, namun yang sudah saya cobakan: Slackware dan Ubuntu)

OK, nanti saya coba lanjutkan, sekarang tidur dulu :)

Share this post: | | | |
Posted: Jan 18 2010, 02:22 AM by LonTonG | with no comments
Filed under: , ,
"Selamatkan" MySQL!

Jum'at kemarin saya dapat e-mail dari Monty bapak'e MySQL.
Isinya kurang lebih ngajak orang ngisi petisi untuk "menyelamatkan" MySQL.

Lumayan lucu, dan benar - benar ndak masuk akal.
Setelah menjual MySQL ke Sun, sekarang "mohon - mohon" supaya kita "menyelamatkan" MySQL.. what the??

Setuju saya dengan komentar di slashdot:
"It's like you broke up with your girlfriend and then go crying her back when she has found a new guy, while you're having no luck."

atau ini:
"It's like you broke up with your car and then go crying it back when it has found a new owner, while you're having no luck finding another car."

Ya namanya sudah dijual, ya terserah yang beli donk.. lagian khan $ sudah masuk :)

Oh ya, sekarang ada MariaDB.. lanjut gan! hehe

Share this post: | | | |
Posted: Jan 06 2010, 04:28 PM by LonTonG | with 4 comment(s)
Filed under:
Harus Pakai Open Source?

Kemarin ada berita di kompas tentang kewajiban penggunaan "open source".
Menurut saya ini tidak masuk akal, bagaimana bisa belom apa - apa, (belom melewati fase problem analysis, requirement analysis, logical design, decision analysis, dst.. dst...) langsung ditentukan untuk HARUS dan KUDU menggunakan open source.

Pertanyaan saya lalu apa gunanya fase analisis?
Dan tanpa analisis bagaimana kita tahu apa yang terbaik untuk pengguna?

Wah, ini ibaratnya kalau semua HARUS menggunakan .NET, maka saya dan team bakalan TKO alias modar :)

Nasib oh nasib.

 

P.S
Banyak yang salah kaprah bawah open source itu free as in beer.
Contoh: banyak yang pakai MySQL untuk komersil tapi ngga bayar (termasuk di departemen pemerintahan)

Share this post: | | | |
Posted: Dec 04 2009, 10:03 AM by LonTonG | with 13 comment(s)
Filed under:
Mengapa Casting Itu Buruk Dan Harus Dihindari

Jum'at lalu ada artikel menarik dari Raymond tentang mengapa casting itu buruk dan harus dihindari. (sebenarnya ini bukan artikel pertama dia, tapi seperti biasa tetap menarik untuk dibaca)

Yang mengerikan (kalau bukan yang paling mengerikan) dari casting adalah masalah alignment, yang ujung - ujungnya nanti bakalan ada kado buffer overflow.

Raymond memberikan ilustrasi fungsi sebagai berikut:

DWORD XyzConnect(
    __in DWORD ConnectionType,
    __in PCWSTR Server,
    __in PCWSTR Target,
    __out void **Handle);
...
// HACK - Create a dummy structure to pass to the XyzConnect
// function to avoid AV within the function.
int dummy = 0;    
if ( NO_ERROR != ( XyzConnect( 0, L"", L"", (PVOID*)&dummy ) )
{
    TRACE( L"XyzConnect failed." );
    return FALSE;
}

Pemanggilan fungsi XyzConnect berimplikasi sbb:

  • 50% peluang DWORD* "pas" dengan void*
  • dan 100% peluang dapat kado buffer overflow. DWORD = 32-bit unsigned integer = 4 bytes. 8 bytes mau dimasukin ke 4 bytes.

vadefs.h 25-33:

#ifdef  _MSC_VER
/*
* Currently, all MS C compilers for Win32 platforms default to 8 byte
* alignment.
*/
#undef _CRT_PACKING
#define _CRT_PACKING 8
#pragma pack(push,_CRT_PACKING)
#endif  /* _MSC_VER */


Lalu solusinya?
Ya, pakai yang sesuai dan tinggalkan casting

void *handle = 0;    
if ( NO_ERROR != ( XyzConnect( 0, L"", L"", &handle ) )
{
    TRACE( L"XyzConnect failed." );
    return FALSE;
}

Penutup dari Raymond:

"Any time you see a function cast or see a cast to/from something other than void* or BYTE*, then you should be suspicious, because there's a chance somebody is simply trying to shut up the compiler."

Share this post: | | | |
Posted: Oct 28 2009, 05:40 PM by LonTonG | with 2 comment(s)
Filed under: ,
Transfer Files (asynchronous) Dengan BITS

Kemarin sempat ngobrol dengan Pak Risman tentang BITS (Background Intelligent Transfer Service) dan kemungkinan untuk memanfaatkan teknologi ini untuk sinkronisasi data.

Apa itu BITS?
BITS adalah salah satu teknologi yang ada pada Windows (mulai dari Windows 2000 SP3 dan XP) untuk melakukan transfer data secara asynchronous antar komputer.
Contoh penggunaan BITS adalah pada Windows update.

Lalu apa sih yang menarik dari BITS ini?
Keunggulan BITS adalah proses transfer data dilakukan saat network dalam keadaan idle (tidak digunakan oleh aplikasi lain) dan proses transfer ini dilakukan di belakang (background process). BITS akan secara aktif memonitor network usage dan melakukan penyesuaian supaya process yang ada di depan (foreground process) tidak terganggu.
BITS dapat diatur prioritasnya dan melanjutkan proses transfer data apabila dalam perjalanan transfer data terdapat gangguan.

Ada 3 tipe transfer data dengan BITS:
Download, upload, dan upload dengan reply dari server.

BITS kita akses dengan menggunakan COM, dan karena saya menggunakan C, maka akan ada "sedikit" pekerjaan extra, yaitu mengakses virtual table dengan menggunakan pointer lpVtbl.
Oleh karena itu pada contoh aplikasi yang saya sertakan, akan dapat kita lihat kode seperti ini:

hr = pJob->lpVtbl->Resume(pJob);

Sedangkan hal yang sama di C++:

hr = pJob->Resume();

C++ agak menghemat energi, tapi tidak terlalu signifikan :)

OK, untuk lebih detail (teknis), silahkan dilihat pada contoh aplikasi yang saya buat di bawah (menggunakan VS2008). Alur BITS dapat dilihat dengan jelas terutama pada proses "logging".

 

Win32Updater.zip

 

Share this post: | | | |
Posted: Sep 29 2009, 03:47 AM by LonTonG | with 2 comment(s)
Filed under: ,
You Can Do This Too

Let's make this quick.
Pagi ini baru baca berita baru (?) kalau Mint dalam proses akuisisi oleh Intuit dengan nilai $170M. Mantap!

Jadi kepikiran lagi teknik keren:
Start a new project -> make it open source -> contribute here and there a little (don't forget to remind people that it's YOU who invent this beast) -> let it grows a while (3 - 4 years) -> suddenly close this open source thingy (you can say you need to get a job or you need $ bla bla bla), and create a software company (secretly) who sell this -> do the selling (2+ years) -> (if you're lucky enough) you'll get acquired by a big company or whatsoever (meaning: lots of cash $$$, yeah baby!) -> reiterate whenever possible (you get double bonuses by enjoying creating something new)

Teknik ini tidak diadopsi oleh Mint, cuma kepikiran aja :)
(saya tahu ada beberapa, salah satunya belom lama ini diakuisisi juga)

Share this post: | | | |
Posted: Sep 15 2009, 06:20 AM by LonTonG | with no comments
Filed under:
More Posts Next page »