2013年8月14日 星期三

移到 logdown

把東西移到 logdown 了,感覺還不錯 XD

http://allan914.logdown.com/

C/C++: strtok() 與 strtok_r()

好幾個月前的東西了,懶得寫詳細作點筆記就好 XD strtok() 不是 thread-safe 的,要改用 strtok_r() char * strtok ( char * str, const char * delimiters ); char * strtok_r ( char * str, const char * delimiters, char ** ptrptr); 其實也不一定要 thread 才用 strtok_r() , 有些方便的狀況可用 例如 "A is 2, B is 3, C is 4" 想要在 strtok() 裡面再切,那就用 strtok_r() 傳不同 ptr 給他就好了。 先這樣,想到其他的再說 XD

2013年7月31日 星期三

Android 學習筆記 : 自訂 listener

有時候需要自己來才抓的到點,比較容易高潮啊...(誤)

1. 寫一個 callback interface

public abstract interface TrackInfoListener {
    public abstract void onInfoUpdated();
}

2. 在 background thread 寫一個 registration function
    - 我之前是寫在 controller 裡

    private ArrayList<TrackInfoListener> trackInfoListeners = new ArrayList<TrackInfoListener>();

    public void setOnTrackInfoListener (TrackInfoListener listener)
    {
        this.trackInfoListeners.add(listener);
    }

3. 在適當時機讓 callback 開砲

        for (TrackInfoListener listener : trackInfoListeners)
        {
            listener.onInfoUpdated();
        }

4. register listener
setOnTrackInfoListener(trackInfoListener);

另外註記一下字串比對要用 s1.equals(s2),我卡了一陣子才發現這件事...

2013年1月28日 星期一

PHP 讀 csv 檔:fgetcsv()

用 PHP 讀 csv 檔,沒想到還有專用的函式 XD

用法是先 fopen() ,然後再用 fgetcsv() 一行一行抓進來,每行都會存成一個 array 。
其中第二個 argument 是最大字串長度,在 PHP 5 裡面可以不給或是填 0 表示無上限,不過會比較慢。
每行的欄位數量可以不同沒有關係,用 count() 去算一下就好。
另外由於是一行一行處理,連 foreach 都省了 XD

範例程式如下:

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>
Reference: http://php.net/manual/en/function.fgetcsv.php

2013年1月22日 星期二

PHP foreach 與二維陣列

本來用了這樣的方式處理:

<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
    // $a contains the first element of the nested array,
    // and $b contains the second element.
    echo "A: $a; B: $b\n";
}
?>

想說奇怪怎麼跑出錯誤訊息,後來才發現這要 PHP 5.5 以上才有,我灌的是 PHP 5.4.10...

沒辦法只好乖乖用普通方法了:

<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as $vals)) {
    echo "A: $vals[0]; B: $vals[1]\n";
}
?>

雖然本來也有點想用 $array[0][0], $array[0][1], $array[1][0], $array[1][1] 硬幹不過還是算了XD

2013年1月14日 星期一

perror - 印出系統錯誤訊息


gdb 用不習慣,土炮 printf/cout 搭配用好夥伴;至少不用整天 cout << "fuck" 這樣 XD

valgrind 快速上手

valgrind 是檢查記憶體用的小程式,因為是快速上手就不介紹了,可以自己 google 一下介紹很多 XD