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 :)
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!
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!
Jangan terlalu serius :)
http://lukewelling.com/2006/08/03/java-programmers-are-the-erotic-furries-of-programming/
Syukur VB programmer di atas Pascal programmer, setidaknya i'm not that lame :)
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.
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.
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
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!)
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:

menjadi ini:
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:
Output yang didapat (menggunakan HyperTerminal)
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!
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:

Pengguna menggunakan tool - tool pendukung "kreatifitas":

1x klik tombol "Import" menjadi enabled kembali:
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.
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:
- Akan ada repeated records
- 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 :)
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
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)
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."
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
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)

Kemarin ada diskusi asyik soal 32bit vs 64bit. Win98, Windows Server 2008, Crypto lib, bla bla bla..
Evolusi teknologi, mantap!
Jadi inget juga sama ol' friend sayings (hehehe.. peace bro)
Nah, supaya tetap diingat orang, di tengah hiruk pikuknya teknologi baru, saya share ini (MASM based).. and remember: Win32 journey is surely full of fun! :)
.386
.model flat,stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
.DATA
ClassName db "MyFirstWinClass",0
AppName db "Hello Win32ASM",0
.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.CODE
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine,\ SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,NULL
mov wc.hIconSm,NULL
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
LOCAL rect:RECT
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
ret
.ELSEIF uMsg==WM_PAINT
invoke BeginPaint, hWnd, ADDR ps
mov hdc, eax
invoke GetClientRect, hWnd, ADDR rect
invoke DrawText, hdc, ADDR AppName, -1,ADDR \ rect, DT_SINGLELINE + DT_CENTER + DT_VCENTER
invoke EndPaint, hWnd, ADDR ps
ret
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start
Udah ah ngaconya, mau masak indomie dulu :)
N.B
1. Iczelion Win32ASM tutorial: http://win32assembly.online.fr (simply the best!)
2. Foto (itu bukan foto saya), saya ambil dari sini. (Geek is a nerd who makes money)
More Posts
Next page »