Welcome to Geeks Portal Sign in | Join | Help
in
 
 

hakimrie

  • F# 1.9.4 now Available

    mau ikutan numpang nampang di disain baru geeks ah.. hi..hi..hi

    kali ini sambil ikutan kasih kabar bagi yang tertarik dan dengan F# (yang sudah mengikuti mah gak perlu di kasih tahu :) ). kini F# 1.9.4 telah dirilis. tepatnya tanggal 3 mei kemarin. nah saya copas saja ya release notenya (maunya kan cuman numpang nampang di disain geeks yang baru, jadi ya copas doang. :P ):

    Summary

    Language

    • Symmetric Operator Overloading
    • Additional nullness checking
    • 'base' variables must now be called 'base'.
    • Intrinsic members take predence over extension members
    • Generic Equality now uses Object.Equals
    • Downcasting For Interface Types
    • Handle Optional Aruments Correctly when using a method as a first class function value
    • Change .[] overload resolution behaviour
    • Deprecate the Unicode symbols in the language
    • Sealed attribute
    • AbstractClass attribute
    • typeof may be used in attributes, deprecate (type ...) syntax
    • Decimal support
    • Supply Named and Optional Aruments to COM methods
    • Allow construction of delegates taking byref arguments

    Library

    • fold_left performance improvements
    • Not_found now maps to KeyNotFoundException not IndexOutOfRangeException.
    • Addition of the 'enum' overloaded function.
    • Deprecate the Enum.to_int and Enum.of_int functions.
    • Access control checking for modules and types implemented
    • Deprecate the use of string.CompareTo in favour of System.String.CompareTo
    • Deprecate the IEnumerable module in favour of Seq
    • Deprecate the CompatArray and CompatMatrix modules when used with .NET 2.0
    • Deprecate the truncate OCaml-compatibility function
    • Make 'lock' function safer: may now only take reference types

    Tools

    • Counter Examples from Incomplete Pattern Matches
    • Implement redundancy checking for isinst patterns
    • Many Improved Error Messages
    • Ctrl-C now copies, Ctrl-. used for Interrupt in F# Interactive in Visual Studio.
    • Right-click menus supported in F# Interactive in Visual Studio

    relese notes yang saya kutip tersebut di ambil disini

    terus download F# 1.9.4 nya disini (MSI) atau sini

    Share this post: | | | |
  • Asynchronous Workflow di F#

    kali ini saya tidak sedang membahas salah satu jawaban pada Projec Euler seperti sebelumnya, tapi kali ini saya ingin turut membantu memberikan jawaban dari sebuah pertanyaan yang ada di Yahoo! answer berikut:

    The sum of all of the digits of all the whole numbers from 1 to 1,000,000?

    What is the sum of all of the digits of all the whole numbers from 1 to 1,000,000 (inclusive?
    Thanks for any answers in advance. :)  ~cf_al_bs

    jadi ceritanya ditanyakan jumlah digit - digit dari bilangan 1 sampai sejuta , sebagai ilustrasi jika rangenya adalah 10 - 15, maka perhitungannya adalah:

    sumAllDigit(10) = (1 + 0) = 1

    sumAllDigit(11) = (1 + 1) = 2

    sumAllDigit(12) = (1 + 2) = 3

    sumAllDigit(13) = (1 + 3) = 4

    sumAllDigit(14) = (1 + 4) = 5

    sumAllDigit(15) = (1 + 5) = 6

    -----------------------------------+

    sumAllDigitDari(10-15)  = 21

    jadi jawabannya 21, sedangkan persoalannya adalah rangenya besar yaitu 1 sampe satujuta.

    karena ini merupakan pertanyaan yang menarik, dan baru saja membaca tentang asynchronous workflow di F# (masih sedikit sih :)), langsung saja saya pengen mencoba mempraktekkannya untuk mencari solusi permasalahan tersebut:

    strategi saya adalah sebagai berikut:

    1. karena jumlah bilangan dari 1 sampe 1 juta itu sangat banyak (sejuta :D), jadi saya pecah deret bilangan tersebut menjadi 5 bagian masing - masing 200 ribu

    2. masing - masing pecahan tersebut kemudian di proses untuk menghasilkan jumlahnya masing - masing secara asinkron,

    3. terus jumlahkan semua hasil perhitungan tiap partisi pada langkah 2

    ilustrasinya adalah sebagai berikut:

    image

     

    adapun kode programnya adalah sebagai berikut:

    image

    4. saya juga mencoba dengan cara serial, tentu saja dengan kode program yang lebih pendek :)

    image

    setelah dieksekusi bareng maka hasil eksekusinya adalah sebagai berikut:

    image

    jadi hasil algoritmanya bener karena nilai yang diperoleh sama = 27000001, sedang waktu eksekusinya beda, kali ini asynchronous menang, karena berhasil mencatat waktu 1,5858360 detik, sedangkan serial kalah terpaut 0.419895 detik pada catatan waktu 2.0057310, jadi juara motogp di sirkuit phi si ku (PC-ku)adalah Caseyncronous Stoner, sedangkan Valentino Roserial kalah :D .

    Share this post: | | | |
    Posted Apr 11 2008, 12:29 AM by hakimrie with no comments
    Filed under:
  • Hooray! dapat patch dari Google

    bapak-bapak, ibu-ibu, saudara - saudara, mohon maaf, saya orang netral lo, he..hee.. just an ordinary developer. jadi izinkan saya memberitahu kabar baik yang sama terima hari ini :D

    Horay <alhamdulillah>, (lagi) hari ini kiriman dari Google nyampe, nih lihat beberapa barangnya :

    google patch google patch2

     

    dan ini dia patch-nya

    a Google patch

     

    ayo, siapa yang mau juga, ngobrol sama saya :)

    [he..he saya juga mau kalau microsoft (indonesia) kirim - kirim goodies kayak gini ke saya]

    ~ pemburu goodies :)

    Share this post: | | | |
  • ASCII Art

    ini dia gorden yang paling cool bagi yang merasa geeks, hee..hee..

    image

    wah, biasa saja...

    zoom in, and.. boom! :D

    image

    semuanya ternyata dibentuk dari karakter ASCII (American Standard Code for Information Interchange) yang biasa kita gunkan.

    hayo, siapa yang mau jadi orang pertama masang gorden kayak gini ? Smile

    sumber : http://www.nsybrandy.nl/html/ZTmV07Gordijnen.html

    Share this post: | | | |
  • Jumlahno Digite

    kali ini saya menerapkan teknik menulis yang baik (aneh), he..he, yaitu membuat judul yang membuat orang selain orang jawa nggak ngeh, dan akhirnya ingin membaca dan melihat isi postingan saya kali ini :D. ok, kali ini saya ingin mencatat perjalanan saya yang sampai pada projek Euler (yang eksplor F# sejak dulu pasti sudah tahu ini), salah satu pertanyaanya adalah berapa hasil penjumlahan tiap digit dari 2 pangkat 1000, ini pertanyaan ke-16, nah akhirnya saya coba menjawabnya dengan F# , itung - itung sambil belajar F#, begini:

    let duaPangkat1000 = (powi 2I 1000)
    let rec sumAllDigitFrom x =
        match x with
        | x when (x < 10I) -> x
        | _ -> (x % 10I) + (sumAllDigitFrom (x/10I))

    let dpx = (sumAllDigitFrom duaPangkat1000)
    printf "2^1000 = %A\nHasil Penjumlahan tiap digit = %A" duaPangkat1000 dpx

     

    nah, uniknya disini setelah kita bisa mejawab kita dapat melihat cara menjawab orang lain, nah saya lihatlah jawaban orang lain itu; orang pertama menjawab pake assembly (codenya panjang, padahal biasanya orang itu jawabannya pendek/singkat banget meski pake assembly), terus lihat agak kebawah lagi ada yang pake ruby (duh tadi kenapa gak pake ruby) kaya gini:

    sum = 0
    (2**1000).to_s.each_byte {|b| sum+=b.chr.to_i}
    puts sum

    pendek banget kan :), kemudian saya lihat Haskell (oh, saya belum pernah mrogram pake Haskell, tapi dia peserta GSoC juga Smile ) begini:

    sum (map (digitToInt) (show (2^1000)))

    nah lho, ini sama - sama functional kenapa bisa singkat gini, sebenarnya masih ada sebelas halaman lagi untuk dilihat, tapi saya malas Stick out tongue, kayak search engine cukup halaman pertama, akhirnya saya mencoba mengkompress kode saya di atas, dan setelah cukup lama (harus baca manual F# lagi bo!) dan akhirnya saya mentok disini, ini dia kode saya yang baru:

    List.of_array(((powi 2I 1000).ToString()).ToCharArray())
            |> List.map(fun x -> int(x.ToString())) |> List.fold1_left(+) |> print_any

     

    semua kode selengkapnya saya ini:

    image

    tuh, saya tulis kode dalam haskellnya juga untuk membandingkan, dan ternyata saya tidak bisa mengkompress kode program saya seperti itu, karena masih kurang ilmu [:'(]

    dan hasil eksekusinya:

    image

    tiga baris pertama itu merupakan hasil perhitungan 2 pangkat 1000 dan baris terakhir adalah jawabannya, versi perhitungan panjang dengan fungsi rekursif, dan yang diperoleh dari kode program yang kayaknya lebih pendek = 1366 (hooray! kali ini saya pake visual studio)

    iya kan, (saya) masih kalah saja dengan haskell, pertanyaan saya adalah, adakah solusi yang lebih pendek dalam F# ? (giliran anda menjawab di bagian komentar postingan ini Yes )

    Share this post: | | | |
    Posted Apr 07 2008, 01:54 AM by hakimrie with 4 comment(s)
    Filed under:
  • F# vs C# (on Collatz Conjecture)

    Bagi penggemar C# (termasuk saya nih), maukah anda berpindah ke F# ? ok lah, maksud saya menambah koleksi kemampuan bahasa pemrograman di CV, dengan F#? hmmm...; topik postingan saya kali ini sebenarnya saya curi dari blog coding experiments, jadi di blog itu si empunya hendak membandingkan performansi F# dengan C# (menurut saya ini belum cukup fair sih, mengingat F# masih dalam tahap research) untuk melakukan operasi yang merupakan Collatz Problem seperti ini:  untuk sebarang bilangan bulat positif,

    1. jika bilangan tersebut adalah genap, bagi dengan 2
    2. jika bilangan tersebut ganjil, kali tiga dan tambah satu

    seperti ini notasinya:

      image

    sebenarnya permasalahannya adalah untuk membuktikan bahwa untuk sembarang bilangan bulat positif tersebut, akan selalu berakhir pada bilangan yang sama (1) dengan persamaan di atas ($500 bagi yang bisa membuktikan persamaan tersebut selalu berakhir di 1 untuk semua bilangan bulat positif). jadi kalau misalnya ada masukan angka 7, maka akan dihasilkan 7 -> 22 -> 11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 ->1, pertanyaanya bilangan berapa (yang merupakan bilangan di bawah sejuta) yang akan menghasilkan rantai eksekusi terpanjang?

    kemudian dia menanyakannya kepada sebuah mesin bernama komputer, karena dia nggak bisa bahasa mesin, maka dia memanfaatkan jasa 2 orang interpreter/penerjemah, karena si dia memang menguasai dua bahasa berbeda, dan masing - masing penerjemah ini bisa bahasa mesin (halah..ngelantunr gini), ya akhirnya dia bertanya pada penerjemah pertama, bahasa pertama yang digunakannya adalah dengan bahasa prancis yang indah, eh maksud saya F# yang elegan, dan kepada penerjemah yang kedua adalah bahasa jawa ngoko alus, kalau boleh mengandaikan c/c++ adalah ngoko-nya :P, yaitu C# (FYI: ngoko alus masih di bawah kromo). monggo, kito persani (mari, kita lihat)

    1. F# yang elegan ( 18 loc)

    image

    saya menggunakan cara yang sama baik untuk F# maupun C# dalam mendapatkan data waktu, yaitu dengan model C#, and then, di run, dan ini dia hasilnya:

    image

    2. C# (48 loc)

    image

    and, Boom!

    image

    kesimpulan, pertama, C# lebih cepat +/- 13 kali dibandingkan  F# dengan menggunakan algoritma seperti di atas, bisa jadi algoritma yang berbeda akan menghasilkan kesimpulan yang berbeda, kedua, jumlah baris kode F# lebih sedikit 2.7 kali lipat dari C# (dengan algoritma seperti di atas). jadi C# lebih baik dari F# nu, hmm... mungkin memang demikian untuk saat ini dari segi performansi, tapi yang perlu menjadi catatan adalah F# masih dalam tahap research, dan di sana ada orang - orang hebat semacam Don Syme yang siap meningkatkan performa F#, disamping itu bukankah jumlah loc yang lebih sedikit memperkecil kemungkinan kesalahan code, dan mempermudah trace code jika terjadi kesalahan. jadi, mau nambah mainan gak? terserah anda! :)

    maraji': wiki, coding-experiments

    catatan : saya menguji di OS :Windows Vista Business 32-bit; Processor = Intel Pentium Dual-Core T2130 1.86 GHz, RAM : 766 M

    Share this post: | | | |
    Posted Mar 29 2008, 04:53 PM by hakimrie with no comments
    Filed under: ,
  • So, Is It Possible?

    aargh..<astaghfirullah>, kenapa saya ini usil sekali, hari ini saya memberikan comment ke recent post di geeks, and.... lha setelah saya kasih comment, saya menemukan ini:

    image

     

    you see, the top post, yeah that, ada beberapa kemungkinan penyebabnya, menurut saya; pertama, memang si penulis langsung kasih komentar ke blognya sendiri, dan tidak di anggap sebagai viewer (?), tapi sepertinya hipotesis pertama salah soalnya saya yang memberikan komentar; kedua, memang ada flaw di sistem (CS) ini, atau yang ketiga ada mekanisme dimana user/other bisa kasih komentar (spam) tanpa melihat blognya (hipotesis ini juga tidak valid mengingat saya membaca blognya lebih dulu), dan kemungkinan keempat adalah pemahaman saya tentang "views" dan "comments" salah. sajujurnya saya belum pernah eksplor community server, jadi saya tidak tahu; dan sejujurnya saya lebih ingin menayakan ini ke admin daripada harus nulis ini, tapi saya tidak tahu harus kontak siapa (saya coba buka help (;() tapi malah lari ke doc.communityserver).

    jadi mohon maaf atas postingan ini, hanya ingin memberi tahukan dan menanyakan kenapa ini bisa terjadi? so anyone, please, if you don't mind, explain to me.

    {astaghfirullaah kenapa saya sering posting "negatif" begini}

    Share this post: | | | |
  • Exploring F# (part. 1)

    Bagi Anda yang suka functional programming, tentu sudah merasakan lezatnya pemrograman fungsional, dan jika anda pernah mendengar F# tentu pasti anda sudah pernah mengeksplorasinya. nah, bagi anda yang belum pernah mengeksplornya, silahkan baca postingan ini :).

    1. output, main - main dengan fsi.exe CLI

    eits, CLI yang ini bukan CLI yang itu, eh anu, maksud saya cli yang ini itu command line interpreter. ok, jadi ceritanya sudah install F# 1.9.3.14, nah sekarang kita main - main dengan command prompt. langsung panggil fsi.exe dan kita mulai eksplorasi kita:

    image

    isinya yang standar - standard saja, pertama kita say "hello world" model saya (adopsi K&R :) ), terus kita buat deklarasi variable x secara salah, tanpa nilai. terus buat lagi yang benar, kita isi string, setalah itu kita tampilkan nilai x. sekarang coba kita buat fungsi kali, test eksekusi kali, assign fungsi kali ke yang lain, test yang lain itu. dah, keluar (silahkan lanjutkan eksplorasi dengan cmd prompt sepuasnya)

    2. fungsi, sekarang kita pake IDE nih,

    sekarang kita akan menggunakan IDE untuk perangkat bantu, silahkan pake IDE anda, tentunya anda pasti punya VS kan? :), ok, saya pake sharpDevelop 3.0 beta, keduanya bisa di pake untuk kompilasi F#. pada bagian ini saya akan mencontohkan membuat sebuah fungsi dengan F#,  membuat fungsi di F# sangat mudah (namanya juga functional language) inilah dia salah satu selling point dari functional language, juga di F# (uhui! syntactic sugar..syntactic sugar). dalam contoh kali ini saya sekali lagi membuat fungsi factorial.

    image

    ok, sepuluh baris pertama itu cuman main - main saja, nah deklarasi fungsi dimulai pada baris ke-11, saya menggunakan keyword rec untuk definisikan fungsi rekursif. FYI, di F#, model deklarasi (semantiknya sih) kondisionalnya berbeda dengan bahasa non fungsional lain. skema : IF <kondisi> THEN <aksi> ELSE <aksilain> itu berlaku di pemrograman non fungsional, kalau di pemrograman fungsioal kaya F# ini nih jadinya IF <kondisi> THEN <return something> else <return something else> oleh karena itulah skema if-then-else di F# harus punya else; oleh karena permasalahan itulah membuat fungsi rekursif lebih di sukai disini.

    terus di sana adalagi keyword match ... with; nah ini merupakan keyword untuk pattern matching, mirip - miriplah dengan switch...case. tiap kondisi matchingnya di pisahkan dengan vertical bar, return untuk tiap kondisi yang matching diungkapkan dengan tanda '->' . o iya, di sana ada fungsi - fungsi built-in yang gak punya return value (prosedur), sebenarnya gak harus di tangkap oleh variabl tertentu jadi saya menggunakan underscore '_' yang menandakan bahwa nilai variabel ini (_) gak penting. akhirnya, mari kita lihat hasil pelariannya (runningnya :P):

    image

    nah, itu dia hasilnya. yup, sementara ini dulu, nanti di sambung lagi (harus di pisah biar cepat lunas utangnya), bagian ke-2 nanti saya insyaaAllah akan mencoba menjelaskan tipe data/struktur data. jadi selamat ber-eksperimen ria.

    Share this post: | | | |
    Posted Mar 26 2008, 01:56 PM by hakimrie with no comments
    Filed under:
  • Google Summer of Code 2008

    image

    Saya (how dare I'm :P!) turut mengumumkan bahwa Google Summer of Code 2008 telah dimulai, pendaftaran paling telat 31 Maret, jadi bagi anda yang masih memiliki status pelajar (s1/s2/s3) yang ingin berpartisipasi silahkan mendaftar di sini, uang $4500 + t-shirt & sertifikat dari google siap menjadi milik anda.

    image

    bagi yang suka C#, tahun ini Mono menjadi salah satu mentoring org, jadi silahkan segera mendaftarkan diri anda, bagi yang suka java apalagi c/c++ atau php, python, ruby (uhui :) ), etc.  yang suka cms-an (joomla, drupal, moodle), yang suka networking, yang suka distributed system, grid/cluster computing, photography, Os, compiler, security, database, sampai svn, semuanya ada, ayo tunggu apalagi, daftarkan diri anda segera, keburu kehabisan terlambat :D

    Share this post: | | | |
  • Simple Thread di C#

    hua.., sudah lama gak posting sejak posting pertama. jadi punya utang banyak nih, ditambah denda jadinya ~30 postingan. ya sudah di bayar sambil jalan saja.

    karena sekarang saya menggunakan ms vista dari usdi dengan hanya mengeluarkan dana IDR 50000 dan terinspirasi dari tulisan ronald dan tulisan saya beberapa waktu yang lalu di wordpress, saya coba menulis sebuah contoh sangat sederhana membuat thread di c#. kelas thread di c# ada di namespace System.Threading, jadi untuk membuat thread kita perlu ambil kelas dari sana.( setau saya) di .net terdapat 3 model thread STA, MTA, dan unknown. disini saya tidak akan membahas tentang masing - masing model tersebut, tapi akan lebih membahas contoh thread sederhana dalam c#.

    ok, sekarang kita definisikan sebuah operasi yang akan dijadikan thread, dalam hal ini kita buat operasi penghitungan nilai faktorial dari beberapa bilangan bulat. untuk alasan suka - suka saya  keeleganan, saya memisahkan kode program dalam dua kelas, kelas pertama untuk definisi operasi, dan kelas kedua untuk mengeksekusi operasi (sebagai driver). tidak perlu panjang lebar mari kita lihat kode programnya:

    public class SimpleThread
    {
        private int idx;
        private int[] arrInt = { 10, 4, 15, 6, 7, 18, 9 };
        public SimpleThread(int i) {
            idx = i;
        }
        // non-recursive factorial
        public long Factorial(int val)
        {
            long fact = 1;
            try
            {
                // biar kode gak panjang, asumsi input pasti >= 1
                for (int i = 1; i <= val; i++)
                {
                    fact *= i;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }

            return fact;
        }

        public void itungFactorial()
        {
            long fact = Factorial(arrInt[idx]);
            Console.WriteLine("{0}. {1}! = {2}",idx+1,arrInt[idx],fact);
            Thread.Sleep(300);
        }

    }

    nah, di kelas simpleThread, saya mendefinisikan method Factorial(int val) untuk menghitung nilai faktorial dari bilangan bulat val, dan sebuah method wrapper itungFactorial() untuk wrapper method Factorial(int val); method inilah yang nanti akan di passing dalam sebuah thread di kelas MainThread. kelas MainThread cuma berisi main class, untuk mengeksekusi penghitungan factorial dalam sebuah thread. nah sekarang kita definisikan kelas MainThread:

    public class MainThread
    {
        public static void Main(string[] args)
        {
            long start0, end0, start1, end1;

            Console.WriteLine("<<<<<<<<<Serial>>>>>>>>>");
            start0 =  DateTime.Now.Ticks;   // start serial exc
            for (int i = 0; i < 7; i++) {
                SimpleThread st0 = new SimpleThread(i);
                st0.itungFactorial();
            }
            end0 = DateTime.Now.Ticks;      // end serial exc
            Console.WriteLine("<<<<<<<<<Paralel>>>>>>>>>");
            start1 = DateTime.Now.Ticks;    // start paralel exc
            for (int i = 0; i < 7; i++)
            {
                SimpleThread st = new SimpleThread(i);
                Thread t = new Thread(new ThreadStart(st.itungFactorial));
                t.Start();
            }
            end1 = DateTime.Now.Ticks;      // end paralel exc

            Console.WriteLine("<<<<<<<<<Info>>>>>>>>>");
            Console.WriteLine("waktu serial = {0}\nwaktu paralel = {1}", end0 - start0, end1 - start1);
            Console.WriteLine("paralel {0}x lebih cepat dari serial", ((double)(end0 - start0) / (end1 - start1)));
        }
    }

    dan sekarang kita compile dan eksekusi:

    image

    nah, terlihat bahwa eksekusi secara paralel ternyata terbukti lebih cepat untuk satu kasus ini. hasil eksekusi memang tidak selalu sama dengan ini, tapi kurang lebih seperti itulah hasilnya.

    sebagai catatan, untuk memeriksa waktu eksekusi jangan menggunakan properti DateTime.Now.Milisecond, bahaya !, soalnya yang di ambil adalah milidetik relatif terhadap detik sekarang; oleh karena itu saya menggunakan DateTime.Now.Ticks; soalnya sekalian mau ngitung durasi eksekusi. untuk sementara sebagai pemanasan ini dulu saja postingan saya :).

    Share this post: | | | |
    Posted Mar 25 2008, 05:14 PM by hakimrie with no comments
    Filed under:
  • Akhirnyaa...

    Alhamdulillah, akhirnya bisa nge-blog di sini juga :), dulu....dulu...agak lama , pernah request

    tapi tidak di approve, dan sekarang meskipun situasinya sepertinya sudah kurang tepat, akhirnya dapat bikin blog juga.

    saat ini padahal selangkah demi selangkah udah mau pindah ke open source (linux), rasanya kurang nyaman kalau terus menggunakan barang bajakan, rizkinya jadi seret di tenggorokan Smile.pengennya bisa beli barang - barang asli dari microsoft, tapi apalah daya .......... ha3x

    tapi alhamdulillah masih menyandang status mahasiswa, jadi masih bisa menggunakan academic license dari kampus gajah.itung - itung sambil mengikat kembali ilmu - ilmu yang telah "susah-payah" di cari he..he,

    yup, sekarang harus nentuin target & visi dulu ni,  agar kedepannya tulisannya bermanfaat. 

    .....(yup sudah dapet, disimpan baik2 dalam hati dan pikiran&dicatat di notesku sendiri he3x..),

    jadi kira - kira setidaknya aku menargetkan seminggu sekali bisa posting satu artikel,semoga bisa...
    Aamiin

    Share this post: | | | |
 
 
Powered by Community Server (Commercial Edition), by Telligent Systems
Copyright © INDC, 2006. All rights reserved.