2015年8月31日 星期一

上傳圖片時取得圖片解析度

若需要在上傳圖片的時候,得知圖片的解析度大小,可以透過以下方式:

<input type="file">

$('input').change(function() {
 
    var obj_url = URL.createObjectURL(this.files[0]);
    var img = new Image;
   
    img.onload = function() {
        alert(img.width)
    };
     
    img.src = obj_url ;
 
});

2015年8月26日 星期三

跳出下載視窗並停留在同一頁上

透過window.location.assign('url'),其中url為檔案下載的連結,作業系統會跳出下載視窗,使用者可點選下載或取消,並停留在原先頁面。

2015年8月23日 星期日

動態載入頁面

如何保留導覽列又可以將內容切換至其他頁面?介紹可以使用JQuery的load()來達成。


假設想讓原先頁面裡的div區塊(id="page_classroom")取代成另一個classroom.html裡相同id的區塊,使用的語法如下:
$("#page_classroom").load("html/classroom.html #page_classroom > *");

如果想搭配對應的js檔,可以再加上getScript()來達成:
$("#page_classroom").load("html/classroom.html #page_classroom > *", function(){
$.getScript("js/classroom.js")});

2015年8月17日 星期一

[CSS] 水平垂直翻轉

若需要將一張圖片水平翻轉(左右對調),除了使用繪圖軟體去將圖片做轉向外,也可以透過CSS方式來達成。CCS語法如下:

.flipx {
    -moz-transform:scaleX(-1);
    -webkit-transform:scaleX(-1);
    -o-transform:scaleX(-1);
    transform:scaleX(-1);
    filter:FlipH;
}

垂直翻轉也是一樣
.flipy {
    -moz-transform:scaleY(-1);
    -webkit-transform:scaleY(-1);
    -o-transform:scaleY(-1);
    transform:scaleY(-1);
    filter:FlipV;
}

2013年8月9日 星期五

驗證子網路遮罩是否合法(NetMask Check)

驗證Netmask方式很簡單,只要判斷從netmask是否為連續1即可。

bool CheckNetMask (char* pszMask)
{   
   bool bFoundOne = false;
   unsigned long lNetMask;
    if (pszMask != NULL)
    {
        lNetMask = inet_addr(pszMask);
        if (lNetMask == INADDR_NONE)
        {
            if (strcmp(pszMask, "255.255.255.255") == 0)
                return true;
            else
                return false;
        }
        else
        {
            lNetMask = ntohl(lNetMask);
            unsigned long ulMask = 1;

            while (ulMask != 0)
            {
                if (lNetMask & ulMask)
                    bFoundOne = true;
                else if (bFoundOne)
                    return false;
                ulMask << 1;
            }
           
            return true;
        }
    }
    else
        return false;
}

2013年8月4日 星期日

CoCreateInstance Fail

明明Filter有註冊,但在呼叫 CoCreateInstance時卻回傳「類別未登錄0x8004154」,經過追查之後才發現原來此Filter在Linker的Fixed Base Address的選項設定選擇了/FIXED,才導致呼叫時有機會失敗。修正方法就是將/FIXED改為/FIXED:NO的選項。

我們可以運用dumpbin的工具來驗證,如果沒有出現.reloc區段的話,表示設定的為/FIXED


2013年7月13日 星期六

DIP 雙列直插封裝

對硬體不熟,但工作上還是常遇到一些常見的名詞,只好把它記下來。不過查了一下DIP這個詞,這不就是之前大學時上邏輯設計實驗就有用到的東西嗎?

雙列直插封裝(英文DIP, Dual in-line package),說穿了就是把IC封裝起來的方式。他的外型為長方型,然後會有兩排平行的針腳。他可以焊接在印刷電路板上,或是直接插入在DIP插座上。而之前學校使用的方式就是把他插在麵包板上。DIP元件一般會依據針腳的個數簡稱DIPn,下圖即為DIP20積體電路。



2013年7月5日 星期五

XML特殊字元處理 (C++)

在使用XML當作資料傳遞時,最常犯的錯就是自己產生的XML內容包含了一些特殊字元,導致無法正常顯示XML。特殊字元包括:

'
"
&
<
>

當遇到以上幾個字元時,必須做以下轉換:
&apos;
&quot;
&amp;
&lt;
&gt;

以C++寫法為例,輸入一個string型態的字串,回傳已經做好特殊字元取代的字串

std::string XmlEscape(const std::string &rstrString)
{
ostringstream ossEscapeString;
unsigned char ch;

for(string::const_iterator iter = rstrString.begin(); iter != rstrString.end(); iter++ )
{
ch = static_cast(*iter);

switch(ch)
{
case '&':
ossEscapeString << "&amp;";
break;
case '<':
ossEscapeString << "&lt;";
break;
case '>':
ossEscapeString << "&gt;";
break;
case '"':
ossEscapeString << "&quot;";
break;
case '\'':
ossEscapeString << "&apos;";
break;
default:
ossEscapeString << ch;
break;
}
}

return ossEscapeString.str();
}

2013年6月15日 星期六

舊鈔

新收藏兩張一佰圓舊鈔,這個我已經沒有太多的印象了。剛好拿來和收藏的硬幣一起來個合照。不過硬幣還真多種,光五十圓裡面就有三個版本了,之前也還有五十圓鈔票,可惜沒收藏到。

硬幣也太多種了

2013年1月1日 星期二

Welcome 2013

今年的跨年計劃真的是捉摸不定,從一開始說好要到桃園跨年的,後來又改到社子島,但最終的跨年地點是選在麥帥一橋上,雖說變來變去,但我就是喜歡這樣隨性自在的感覺。

這次跨年的成員有阿佑、小武、阿銓以及我。晚上七點集合在阿佑家,同樣還是沒計劃要吃啥,最後經過一家薑母鴨店,我們就停了下來,冷冷的冬天最適合這個了。

吃飽後,我們還是照原先計劃前往社子島出發,小武果然沒騙人,確實是看的到101,只是有點遠,而且時間還很.......早,所以在社子島待不到幾十分鐘,我們就驅車延著堤防往101方向前近。騎著騎著,最終我們竟從人煙稀少的社子島,現身在人山人海的饒河街夜市。不過來到饒河街,我印象中那裡有個彩虹橋可以看到101,只不過如預期,就是人山人海,所以我們只好繼續往前走,最後決定的位置就是麥帥一橋了。


2012年12月7日 星期五

新增Windows Service相依性

設定Service相依性可以確保某一個Service只能在某個Service啟動後才能夠執行。

開始->執行regedit進入登錄編輯程式
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\選擇所要設定的Service

新增多字串值->DependOnService
資料則填入欲相依的Service名稱(DisplayName)

重新啟動相依的Service,看是否設定的Service會先被終止再啟動。如果沒有生效,可以重開機試試。

2012年12月1日 星期六

C/C++計算檔案大小

常常不記得取得檔案長度該怎麼寫,所以先筆記下來。

C++
ifstream is; is.open ("test.txt", ios::binary)
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);

C
FILE *fp = fopen(file, "r");
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fseek(fp, 0, SEEK_SET);

2012年10月27日 星期六

IP_ADD_MEMBERSHIP FAIL

如果在setsockopt失敗,而WSAGetLastError()的值為10042,發生的原因可能就出在使用到不同版本的winsock library。

因為
winsock.h
#define IP_ADD_MEMBERSHIP   5

ws2tcpip.h
#define IP_ADD_MEMBERSHIP    12

詳細說明可參考此連結

2012年10月21日 星期日

花蓮二日遊(2012 08/31-09/02) Day 3

由於火車時刻的關係,所以最後一天的行程只能放在一個主要景點(金針花海),然後再一路北上到花蓮車站

第三天行程:
六十石山賞金針花海->北迴歸線標->瑞穗牧場->台北


一早起來,就和爸媽騎著民宿的腳踏車在鄉間小徑繞了一下,看到一群人在採收文旦,才知原來花蓮的文旦也是很有名的。




接來下就是早餐時間了,原本不是很期待,但餐點一上桌就讓人驚豔,份量還真多也不錯吃

我爸和我姊的三明治都吃不完 早餐最後還是要打包
老闆有允許,所以爸、媽也去採文旦了


戰利品

2012年9月22日 星期六

花蓮二日遊(2012 08/31-09/02) Day 2

結束第一天悠哉的理想大地之旅後,第二天的行程就是要來擁抱花蓮的美景。來到花蓮當然就不能錯過太魯閣了、七星潭了,山景海景一次滿足。

第二日行程:太魯閣->七星潭->花蓮市區->瑞穗民宿(六心居)

經過前一晚的沙盤推演,最後決定還是租車比較划算。所以在花蓮車站的一家租車行就租了一台轎車,由於大家都沒租過車的經驗,所以檢查時都特別小心,深怕還車時會有糾紛的發生。



太魯閣行程一路經過了東西橫貫公路->燕子口->九曲洞->天祥,可惜的是九曲洞步道當時是封閉的,沒能近距離接觸。

東西橫貫公路

2012年9月11日 星期二

花蓮二日遊(2012 08/31-09/02) Day 1

期待好久的花蓮二日遊終於成行,這僅僅是我第二次踏上花蓮,心中難掩興奮。由於考量到路況的安全性,所以我們決定先搭火車到花蓮,然後再依情況選擇租車或是機車。

說到搭火車到花蓮,第一個聯想到的當然就是太魯閣號了,我們當然也不能錯過,所以在可以訂票的當天清晨六點,全家人早在電腦前待命了,依據前一天分配的任務來訂票。然而計劃總是趕不上變化,最後只搶到去程的太魯閣號,而回程是在下午三點四十一分的復興號。

票價差真大


第一天行程:

出發->花蓮->理想大地

準備出發了

2012年8月28日 星期二

三原色

一直以為三原色指的是(RGB)紅、綠、藍,今天才知道原來並不是如此。


顏料的三原色是(RYB)紅色 黃色 藍色
=> 屬於減少屬性的型態,眼睛擷取到的是不被吸收的部分,疊加愈多顏料會造成更多光被吸收,因此顏色會愈黑暗。

光的三原色則是(RGB)紅色 綠色 藍色
=> 屬於疊加性的色型態,眼睛實際偵測到光的原色在混合而成,疊加愈多會更明亮。

2012年8月13日 星期一

DebugView

之前看寫Windows Driver的人要Debug時,一定會拿出DebugView這套工具,原本還沒能體會他的好處,不過現在有機會可以來體驗一下。

要用DebugView Debug很容易,只要把要Log的地方用PrintDebugString()來印出想得到的資訊,開啟DebugView時就可以很輕易的抓到這些資訊。

看起來步驟很簡單,不過今天一開始試的時候卻踢到鐵板,DebugView怎樣就是沒印出我的Log,後來才發現原來開著VC2008 Debug mode跑的時候,Log只會印在VC上,不會印在DebugView上,目前我只知道不要用VC去執行程式,DebugView就可以正確得到Log資訊。

DebugView可以從微軟官網下載

2012年8月2日 星期四

運動家精神

難得放颱風假,一連看了好幾場中華隊的比賽,有射箭、羽球、網球、桌球,結果全部都輸了,看的心情有些低落。尤其是莊智淵的桌球四強賽,最後還是跟獎牌擦身而過。

不過,大家都盡力了,失敗了就讓自己變得更強贏回來就好了。

2012年7月26日 星期四

Redirect Background Program Ouput

要將一個背景程式的輸出Redirect到一個檔案去,如果是用以下的方法是沒用的。
# ./program & > log.txt

正確的方式應該是先Redirect後再丟到背景執行,如下:
# ./program > log.txt 2>&1 &