2010年12月13日 星期一

C++ Vector

晚上11:09
同事問了一個問題,就是要連續輸入String...

然後,將這些String存在array裡面,直到輸入0 才結束輸入...。


剛開始想說用dynamic array去存string

後來開始寫 就想到C++可以用Vector去做到這個需求~


以下為程式碼的部分:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename>

class Stack{
};

template <class>
void PrintVector(T vec ,U iteral)
{
    cout << "vector data: " ;
    for( iteral = vec.begin(); iteral < vec.end(); iteral++ )
    {
        cout << *iteral << ", ";  // 取值,印出
    }
    cout << endl;
}


int main()
{
    try
    {
        string input = "";
        vector<string> v1;
        vector<string>::iterator iter;

        cout << "### input string until 0 to exit ...### " << endl ;

        do
        {
            cout << "input : " ;
            getline( cin , input );
            v1.push_back( input );
        } while( input.compare("0")!=0 );

        cout << "### end ###" << endl ;

        // 印出Vector的所有值
        PrintVector( v1, iter);
    }
    catch(exception ex)
    {
        cout << "Error !!" << endl;
        return EXIT_FAILURE;
    }
}




...結束!

2010年12月7日 星期二

Java 解析XML ( dom4j )

下午6:03
使用dom4j parsing xml
這裡是用dom4j去parse XML的資料...

首先可以先到http://www.dom4j.org/dom4j-1.6.1/ 或是 http://dom4j.sourceforge.net/dom4j-1.6.1/download.html

下載使用,目前應該是用1.6.1的版本


然後,還需要下面的jaxen
http://jaxen.codehaus.org/releases.html
目前應該是1.1.4版本


用Yahoo的RSS來實作範例
Dom4jTest.java
package fux.xml.dom4j;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class Dom4jTest {

    private static Element root;
    private static List<String> name = new ArrayList<String>();
    private static Document document;

    public static void main(String args[]){
        // 建立連線的物件
        URLConnectionUtil urlc = new URLConnectionUtil() ;
        // URL
        String urlStr = "http://hk.news.yahoo.com/rss/business/rss.xml";

        Map<String,Object> map = new HashMap<String,Object>(); 
        InputStream res = null ;

        try {
            // 連線取得資料
            res = URLConnectionUtil.doGet(urlStr, map);

            // 讀取XML檔案
            SAXReader reader = new SAXReader();
            document = reader.read(res);

            // 取得XML Root Node
            root = document.getRootElement();
            // Root Node NAME
            System.out.println( root.getName() );
            System.out.println(  );

            // 印出所有XML DATA
            printXMLTree();

            // print data => /rss/channel/item/title
            name = getAllDataByPath("/rss/channel/item/title");

        }catch (Exception e) {

        }   
    }



    /** print all xml data */
    public static void printXMLTree(){
        printElement(root, 0);
        return;
    }

    private static void printElement(Element element, int level){
        // 依照階層print
        for(int i = 0; i < level; i++){
            System.out.print("\t");
        }
        System.out.print( "<" + element.getQualifiedName() + ">" );
        // 取得該TAG的Attr
        List attributes = element.attributes();
        for(int i = 0; i < attributes.size(); i++){
            Attribute a = ((Attribute)attributes.get(i));
            System.out.print(" (Attr:\"" + a.getName() + "\"==" + a.getValue() + ")");
        }
        System.out.println( " "+element.getTextTrim());

        Iterator iter = element.elementIterator();
        while(iter.hasNext()){
            Element sub = (Element)iter.next();
            printElement(sub, level+1 );
        }
        return;
    }

    /** 從指定的檔案路徑 讀取XML檔案 */
    public static Document loadXMLFile(String filename) {
        Document document = null;
        try {
            SAXReader saxReader = new SAXReader();
            document = saxReader.read(new File(filename));
        }
        catch (Exception ex) {
            ex.printStackTrace();
        } 
        return document;
    }   

    /** 依照Path  印出所有data
    *  example: String path="/rss/channel/item/title"
    *  @param path
    */
    public static List<String> getAllDataByPath( String path ){
        List<String> data = new ArrayList<String>();
        Iterator it = document.selectNodes( path ).iterator();
        while(it.hasNext()) {  
            Element ele = (Element)it.next();
            System.out.println( path + " = "+ele.getStringValue());
            data.add(ele.getStringValue());
        }    
        return data;
    }   
}
範例程式裡面用到了...
URLConnectionUtil urlc = new URLConnectionUtil();
可以從 URLConnectionUtil.java 取得。


需要Include dom4j + jaxen 這兩個jar!


讀取XML檔案、指向XML的第一個Tag:
讀取XML檔案區要用到 org.dom4j.io.SAXReader 裡面的 read( InputStream is );

將檔案存到org.dom4j.Document document,

然後用 root = document.getRootElement(); 取得XML的第一個TAG,

可以把 root 相關的資訊print出來:
System.out.println( root.getName() );


印出XML所有的Tag、Attribute、Data:
這裡是用了下面這行來印出xml的所有資料:
printXMLTree();


其中要從 root 節點開始往下一個個跑,所以需要剛剛這行 root = document.getRootElement();

這是把該Tag裡面,所有的Attribute印出來:
List<String> data = new ArrayList<String>();
Iterator it = document.selectNodes( path ).iterator();
while(it.hasNext()) {  
    Element ele = (Element)it.next();
    System.out.println( path + " = "+ele.getStringValue());
    data.add(ele.getStringValue());
}



指定路徑,取得該TAG:
以下這行,表是用指定的路徑來指定該TAG:
name = getAllDataByPath("/rss/channel/item/title");



這個字串path是用到xpath,這就是jaxen裡的東西了,
List<string> data = new ArrayList<string>();
Iterator it = document.selectNodes( path ).iterator();
while(it.hasNext()) { 
    Element ele = (Element)it.next();
    System.out.println( path + " = "+ele.getStringValue());
    data.add(ele.getStringValue());
}




...


先寫到這裡,有其它的會再補上來!

2010年9月8日 星期三

絕版極品...ATH A9X

清晨7:31
公司裡面...有位同事也是神手級

某天竟然帶來了這支耳機...ATH A9X!!!

上網查了一下有關這耳機的資訊...

沒想到是很久以前生產的耳機啊!!!!


不多說...有圖有真相XD

ATH A9X:











...
....
.....

這支聽起的感覺和A900有一些不同...

感覺在聲音的飽滿度不及A900...

在女聲的表現上已就不失小鐵的強項XD

整體的聲音比較偏亮...但也不失去低頻的味道

不過手頭上沒有A900可以互相比較

所以...也沒辦法寫很多Orz

但是能聽到這隻耳機...真的是心滿意足阿~~~!!!

2010年9月6日 星期一

[不專業開箱] Weston UM1+Fireye I

上午9:18
在總幹事還在台灣的時候,

一起出最後的品嘉敗家試聽團...

不過,我只帶著Kenwood F504的訊源+Grado SR125
(我有帶NB...但是總幹事的uDAC不知怎樣...找不到驅動程式Orz)

那天本來想說買個一千左右的耳機來用用...

問過品嘉老闆後...就拿出Denon C260深海蛇某款(...我忘了)
(本來是要聽C252的...不過好像停產+沒貨了...)

聽完後的感想...C260低頻量真的是很多

深海蛇那隻總幹事拿去聽了...我就沒聽到XD


後來問了一下有沒有AKG K314P...

結果...停產+沒貨

所以就拿出K315P...

很特殊的是...耳機上有開小小的孔(OS:這是半開放嗎XD)

用我的元祖K14P來比較一下...

低頻的部份多出很多...似乎是要補足K14P原先低頻的不足

K315P聽起來感覺比較平均...感覺也失去了部份解析力
(後來手賤...把那個孔用手指蓋住...天阿!!聲音整個變了...有機會可以試看看XD)


後來,又聽了Weston UM1ATH A900...

UM1的隔音真的很不錯,加上又是用海綿的耳塞

一整個舒適度破表!!!(OS:突然讓我很想買下來...)

在聲音和樂器的表現上也很平均...

蠻符合我的口味...XD


A900的耳罩戴起來也很舒適...

聲音也很暖...在人聲的表現上果然只能用""來形容!!!
(OS:害我也想存錢買一隻回去享受XD)



然後,中途還有聽了一台萬元的LIBBY...

說實在的...不知道是訊源不好還是怎樣的

這台讓我沒有很心動...也沒想要成為將來升級的目標...XD



不知不覺...試聽完後就到了晚餐時間

所以,只好先去吃飯...等吃飽後再回來做選擇...

在這吃飯的途中...

一直和我心中的惡魔做掙扎奮鬥...

一方面是耳朵上享受...一方面是錢包中的銀彈怕會短缺

...
....
.....

掙扎了很久...走回品嘉後......

我還是直接買了UM1

然後也有加購火眼的活動

就順便把火眼I...一起帶回去了Orz


回到家後...老樣子先拍幾張照片

Weston UM1的盒子:


內容物:


說明書:


耳機:




海綿耳塞:


收納小盒子:






接著是加購的火眼一:


收納用小袋子:


正面外觀:


底部:



就這樣子拉...享受音樂去XD

2010年8月23日 星期一

X JAPAN周邊護腕!!

上午9:20
在這禮拜一.....睽違已久的X-JAPAN護腕終於來了

趕緊看看新貨...XD

最後,我只買一個...兩個是總幹事的
(還有一個我弟他先拿走了)


三個護腕:


正面:


內側:



可惜...總幹事目前人在米國

沒辦法拿到新鮮貨...

Cute Beyond 體驗

上午8:54
今天從同事那邊借來了這台玩具~!!

THE...Cute Beyond耳擴~~!!


外觀如下(正面):


背面:


在公司的時候,手邊只有F504可以聽

所以只好將就一下,接上來聽看看...


個人感覺...由於我的F504算比較偏暖+解析較好的Beyond後

然後搭配隨身耳機um1...

表現的聲音並不會有很大的改變

在樂器的呈現上,感覺有比較細膩...聲音也比較亮

樂器+人聲整體下來還算很平衡...

不至於某一邊會完全壓過去。



然後,回到家後...

馬上接EMU0404 -> Cute Beyond -> Grado SR-125 來體驗一下

然後,選了幾首歌來聽...

一整個覺得...天啊~樓上張爸(誤)

樂器的聲音變超亮的...高頻的部份超級刺

我完全聽不下去阿~~(感覺耳朵被強姦了...orz)



然後改換 EMU0404 -> Cute Beyond -> AKG K14P

聲音變的好乾冷...解析的部份依舊不錯

但是,人聲表現上就不和我的口味啦...



接著換成 EMU0404 -> Cute Beyond -> UM1

基本上差別不會很大,也是樂器的部份聲音變亮了

高頻的部份也比較顯著...人聲的部份感覺比較弱



再來換成 EMU0404 -> Cute Beyond -> HD681

天阿~ 樓上XXX(消音XD)

聲音超級冷...而且受到這支耳機原本音場的影響

覺得樂器和人聲...你們怎麼離我這麼遠阿~~!!(大喊)


--------------------

總結...這台果然是比較邊向解析方面

也不適合我這種雜食性愛好者XD

果然還是要中性偏暖的比較合我胃口(笑)

2010年8月15日 星期日

[不專業開箱] Kenwood MG-F504

凌晨12:17
(=====事前摘要=====)
本來,心中已經有幾台想要的隨身播放器來做選擇...

選了三台出來...分別是I9、Spinn、和F504

但是,去龍山商場裡面的小叮噹,

已經沒有F504和Spinn了...(崩潰)

只剩下i9可以拿來試聽...

聽完i9的感想是...他的人聲真的很悲慘

樂器的解析度不錯...可惜不合我的口味

聽了一下子就...聽不下去了.....Orz

然後又隨便選了三爽和sony的差不多價位的來聽聽...

其實,聲音感覺很普通...所以那天就沒買了...(汗)

後來,就直接從拍賣直接下單買F504這台!(OS:不想再花時間找拉!!!!!)

(=====回想結束=====)

好啦!
讓我來看看他的盒子外觀吧:

看起來還蠻不錯的!

盒子裡面所有的東西:

有說明書、光碟、保固書、耳機(有附耳罩)、傳輸線、F504播放器

F504看起來不錯www


按鍵部分:


下方的傳輸孔和耳機孔:(我已經用了幾天,補拍上面會有指紋(汗))


右方的音量控制和HOLD功能鍵:

(PS:左邊的圖片沒補拍到,可以插microSD的記憶卡及RESET鍵)

耳機和送的耳罩:


耳機:(基本上不會用這個來聽,我有K14P和UM1了(笑))


USB傳輸線:


實際播放時:



這台聽過後的感像是...聲音真的很暖,

在女聲的部分算是不錯...,

反倒是在樂器的解析上就沒這麼理想了,

用UM1會聽到Snare的聲音很糊...,
(可能是UM1新買的,還沒RUN開)

用K14P去聽就不會有樂器聲音糊掉的問題,只是完全沒低頻。
(可見耳機的影響也很大啊~~!!)


我的音樂檔案,基本上都是轉WAV來聽,

然後編輯歌手、專輯的話...,

WAV似乎沒像MP3可以編輯TAG,

要編輯WAV的話,目前我研究出來的方法,

是用它裡面光碟的BeatJam來編輯,

把要傳到F504的音樂,先丟到BeatJam裡面編輯,

然後,再用這程式傳到F504裡面。

顯示專輯和歌手的那邊就會出現了~~!
(但是我電腦是用日文的XP...目前沒遇過亂碼的問題)
(也許MP3的TAG就會有這問題...)