2013年11月19日 星期二

[Javascript] 數字加上千分位逗號

本篇的目的是要把數字加上個千分位逗號,如 5000 變成 5,000

在php裡,可以透過number_format($num)來達成
不過有時候不見得每樣東西都要交給後端處理,這種簡單的東西還是分散一下放在前端就好了,
函式如下:
function number_format(n) {
    n += "";
    var arr = n.split(".");
    var re = /(\d{1,3})(?=(\d{3})+$)/g;
    return arr[0].replace(re,"$1,") + (arr.length == 2 ? "."+arr[1] : "");
}

2013年10月29日 星期二

Reverse Proxy Server ( 反向代理伺服器 )

參考自:
Oracle的說明
Reverse Proxy Server ( 反向代理伺服器 ) 是什麼 ?
 
代理伺服器 Proxy Server的作用,是把遠端網路上的資料先儲存到伺服器上,目的是讓伺服器鄰近區域的電腦可以用比較快的速度瀏覽這些資料。

反向代理則顧名思義,就是讓外界要連到本地端的伺服器時,先透過一個外部伺服器來回應,有需要的時候才連到內部伺服器來取資料,這個架構大概像下圖這樣:
 
大致上有兩大應用:
  1. 提高安全性
  2. 降低伺服器的負載


2013年8月3日 星期六

DigitalOcean VPS試用紀實 <一> - 申請及基礎設定篇



最近因為案子需求,開始摸VPS這種東西,然後因為廣告常看到DigitalOcean跟Linode這兩家,所以好奇就研究了一下,也 google了別人的試用心得,看起來滿便宜又大碗的,最便宜的方案512MB + 20GB SSD + 1TB 流量,才  $5/month,大概台幣150左右,還比許多虛擬主機還便宜,所以看來看去,就先是用這個吧。

申請還滿簡單的,註冊帳號就不提了,輸入帳號跟密碼就完成了,也沒有什麼電子郵件驗證流程

1.流程就像登入後第一個畫面一樣,大概三個步驟搞定

2. 以下就按表操課吧,首先選擇付款方式,有信用卡及PayPal兩種,不過選擇 PayPal的話,會需要先支付最低5USD才能往下個流程,信用卡的部份則請其他沒有PayPal的大德自行嘗試一下。

 3.完成之後,就可以進行下一個階段,建立虛擬伺服器 => Create Droplet

   3.1 首先填好網域名稱,不填的話會出現錯誤訊息
  


   3.2 接著選方案


    3.3然後選伺服器所在位置,這裡我選擇看起來比較近的 San Francisco 1
   

    3.4 再來選擇作業系統,這裡我選Ubuntu
   
   
    3-5最後選擇預設安裝的軟體,要架Server當然要架 LAMP
   

    3.6然後會開始跑安裝流程,預計是一分鐘,就等一下吧
 
   PS 那個進度條不一定準,可以先跳到別的頁面去

接著就可以點選左邊的功能選單 Droplets 開始管理你的 主機囉,管理介面待大家瀏覽一下:

1. 開關機
2.存取管理,可更改Root密碼
3.調整方案內容,如加RAM之類的,這個功能要先把VPS關機才行

4. Snapshots 可建立伺服器快照(image) 跟 backups(備份內容)

5. Settings可更改伺服器的核心及主機名稱
6. Graphs 可檢視 最近的流量、磁碟讀寫、及CPU壯態

7. Destroy則可把VPS刪掉,或者重建


以上,DigitalOcean的介面看起來還滿簡單易用的,接著就開始試用內容啦,等試完再來分享心得,有興趣可以到DigialOcean官網瞧瞧

2013年7月19日 星期五

利用批次檔(bat)進行資料備份

利用XCOPY來備份檔案,指令如下:

XCOPY "來源目錄" "目的地目錄" /S/Y/D/I

參數說明(xcopy /? 可查詢其他所有參數):
/S :複製每個目錄及子目錄,但不備份空目錄
/Y :直接覆寫已存在的檔案,不需提示
/D :只複製來源檔案比目的地檔案還新的檔案
/I  : 若目的地目錄不存在,則建立目錄


若要把備份檔案依據日期來存放,則在bat檔加上如下內容
FOR /F "tokens=1-3 delims=/ " %%a IN ("%date%") DO (SET _today=%%a%%b%%c)

會擷取本日的日期,並經過處理後,存放到_today這個變數裡面,
_today 內容會類似 "20130719"

接著執行xcopy指令
xcopy "object_directory" "%_today%/destination_directory" /S/Y/I


2013年6月14日 星期五

DOS 批次檔 相關指令

轉貼節錄自這裡


批次檔的常用指令如下:
一、 ECHO
在正常的情況下,批次檔中的每道命令執行前都會先出現螢幕上。有了ECHO命令,就可以任意控制是否列印出命令列。
用法:在批次檔中鍵入echo on/off ,on:表示要印出命令列,off:則不印出命令列,若要禁止批次檔的命令顯示在螢幕上,則使用隱藏echo off(@ECHO OFF),用法在命令列的開頭上加上@符號
Ex:
@echo off 表示資料隱藏
echo .... 測試ECHO指令
echo .... 請稍後
echo .... 完成....

二、 代換參數
代換參數的標記是一個百分號(%)再跟著一個阿拉伯數字,最多可使用10個代換參數,這些變數的值,則由呼叫批次檔的命令所指定。
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4

三、 PAUSE:是暫停批次檔的執行。當MS-DOS執行到PAUSE時就暫時中止目前的工作,並印出下列訊息:
press any key to contunue ……
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4
pause
echo %5 %6

四、 REM(REMark)用來在批次檔執行中顯示某些訊息,用法是在批次檔中鍵入rem,後面跟著所要顯示的字串
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
rem 下面指令,開始做代換參數
echo %1 %2 %3 %4
pause
echo %5 %6

五、 IF
IF命令在批次檔中用來測試特定的條件,以決定是否執行某些命令。絛件的型態分為四種:
(1) IF EXIST
此條件是用來檢查某一檔案是否存在,若存在則條件成立,便執行指定的命令
Ex:
@echo off
if exist test1.bat type test1.bat
echo 執行程式結束
(2) IF String1 = = String2(= = 表相等性的比較)
Ex:
@echo off
echo .... 測試IF指令
echo %1
if %1 == a goto first
if %1 == b goto second
if %1 == c goto three
:first
echo 執行first (a)
goto finish
:second
echo 執行second (b)
goto finish
:three
echo 執行three (c)
goto finish
:finish
(3) IF ERRORLEVEL
ERRORLEVEL是由MS-DOS所管理的一個系統變數,目的是監視所有錯誤發生的情況。(類似ErrorMessage)
(4) IF NOT
IF NOT是當測試條件不成立時才執行後面命令
Ex:
@echo off
if not exist test1.bat type test1.bat
echo 執行程式結束

六、 GOTO
GOTO命令在批次檔中用來轉移控制權,可以指示批次檔跳至某一標記(line label)由一個冒號(:)跟著字元符號所組成的;label也可使用代換變數
Ex:
goto first 或 goto %1

七、 FOR
FOR命令允許批次檔中的其他命令,可以重覆地執行
for %%a IN (file1 file2 file3) DO del %%a
虛擬變數必須以兩個百分號(%%)起頭,in後面著參數列,do後面跟著要執行的命令
Ex:
@echo off
echo .... 測試FOR指令
echo .... 請稍後
echo .... 完成.....
echo ....
for %%a IN (test_a.bat test_b.bat test_c.bat) do copy %%a prn

八、 SHIFT
SHIFT命令允許在批次檔的起動命令中,使用超過10以上的實際參數
(%0~%9)

九、 CALL
模組化的程式設計,是將一個完整的程式分割成一個個獨立的模組(module),每個模組負責一項功能
Ex:
@echo off
echo .... 測試CALL指令
echo .... 請稍後
echo %1 %2
call test_b
echo %3 %4
echo 程式模組已執行完畢 (test_a.bat)
@echo off
echo 執行test_b程式
echo 即將執行test_c .....
call test_c
echo 執行test_b程式完畢~~~ (test_b.bat)
@echo off
echo 執行test_c程式
if exist test2.bat type test2.bat
echo 執行test_c程式完畢~~~ (test_b.bat)
執行 test_a

2013年5月17日 星期五

HTML 在

2013年5月16日 星期四

Chorme 開發者工具 ─ 模擬各種裝置的瀏覽器

現在行動裝置眾多,且每個尺寸都不一樣...

在開發設計網頁時,就必須考慮到不同的瀏覽裝置的檢視狀況,
以前都傻傻的直接在裝置上瀏覽,結果後來發現原來google大神早就幫我們準備好了工具,而且還內建在Chrome瀏覽器裡面。
可以模擬的裝置包括 IE7~9 , Firefox, iOS, Anddroid , BlackBerry...
而在行動裝置的模擬上,還加上了螢幕解析度模擬、地理位置模擬、陀螺儀三軸模擬...
真的是佛心來的!!

廢話不多說,以下說明如何找到這個功能,以及如何使用:

開啟Chrome瀏覽器後,點擊上圖箭頭方向的按鈕
工具=>開發者工具

再點擊右下角的齒輪按鈕
點選左方Overrides,開始進行相關設定

2013年5月14日 星期二

利用批次檔(*.bat)自動下載FTP上的檔案

首先寫一個ftp的執行腳本 (ftp.txt)

open ftp.sample.com.tw
user 帳號名稱
密碼
binary                                   //以二進位模式下載
prompt off                            //關閉互動模式
cd /destination-on-ftp           //目標檔案所在目錄
lcd /destination-on-pc          //預計下載儲存的目錄
get 檔名                               //下載單一檔案
mget *.*                               //多重下載
bye                                      //結束連線


再來寫一個批次檔(backup.bat),來執行ftp下載動作

@echo off
REM 設定環境變數
set BASE:
set DOWNLOAD_PATH= 下載目錄位置          //如ftp.txt已有指定,這個就不需要了
set LOG_PATH= log檔存放位置
set LOG_FILE=log檔的檔名

REM 判斷目錄是否存在
 %BASE%
if not exist %DOWNLOAD_PATH%(
mkdir %DOWNLOAD_PATH%
)
if not exist %LOG_PATH%(
mkdir %LOG_PATH
)

REM 開始執行
set DATET=%date%%time%
echo 開始時間: %DATET% >> %LOG_FILE%
cd %DOWNLOAD_PATH%
ftp -n -s:ftp.txt >> %LOG_FILE%
echo 結束時間: %DATET% >> %LOG_FILE%

2013年5月3日 星期五

[冷知識] 為何 Ctrl +V 表示貼上?

本篇從 wiki 找到答案



在拉丁文裡面vipectus 這個字表示貼上(paste)

2013年4月16日 星期二

透過 java 處理 word及excel 檔案

本篇需要時間研究,先整理相關資料


docx4j 支援 docx, xlsx, pptx 的檔案格式  下載 使用範例

jxl  支援舊版 excel 95,97,2000 的xls檔案格式  下載  範例教學 教學2

Apache POI  支援 doc, docx, xls, xlsx, ppt, pptx  下載  範例  範例2  API 

2013年4月5日 星期五

[Java]透過HttpURLConnection進行檔案下載續傳

參考自這裡

一般瀏覽器對server發出的Request表頭如下:
GET /down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-tw
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive

Server收到request之後,做出的回應表頭如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT


語法如下:

URL url = new URL("目標網址");
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection(); 
//設定 User-Agent 
httpConnection.setRequestProperty("User-Agent","NetFox"); 
//設定斷點續傳位置,"RANGE"
httpConnection.setRequestProperty("RANGE","bytes=2000070"); 
//取得輸入流
InputStream input = httpConnection.getInputStream();

//儲存檔案
RandomAccess oSavedFile = new RandomAccessFile("檔名","rw");
long nPos = 2000070;//原則上應該跟斷點的bytes數一樣
// 定位文件指標到nPos位置 
oSavedFile.seek(nPos); 
byte[] b = new byte[1024]; 
int nRead;
// 從輸入流中讀入文件,然後寫入 
while((nRead=input.read(b,0,1024)) > 0) 
{ 
oSavedFile.write(b,0,nRead); 
} 


2013年3月29日 星期五

無擔保可轉換公司債

可轉換公司債(Convertible Bond)
即為公司債附有債券持有人得自發行日起屆滿一定時日後,於一定期間內享有按約定之轉換價格或轉換比率,將公司債轉換成發行公司普通股之權利者,使得可轉換公司債持有人原本是發行公司的「債權人」,但又可以變成公司的「所有人」,可說是兼具債券與股票雙重身份的特殊有價證 券。可轉 換公司債多半為無擔保公司債,除了注意發行公司普通股之成長性外,要特別注意發行公司之債信。

無擔保沒有抵押品

無擔保可轉換公司債所購置的投資人.一可以選擇「到期之後」拿回本金跟利息;也可以選擇轉換成公司的股票

2013年3月25日 星期一

網路設備名詞解釋─Hub,Bridge,Switch,Router

1.Hub(集線器)
在星狀拓樸網路(star topology)中,扮演連接或重新建立訊號的角色,可擴大類比或者是數位訊號。在區域網路(LAN)中,電腦與電腦利用網路連接時,如果用Hub 連接,即使有任何一段線路出問題,只會有一台電腦無法運作,不會影響網路中其他電腦的作業。在接收封包(Packet)進來之後,會將這個封包送到其它所有的電腦(即廣播,每一台電腦都會收到該封包),不管誰才是應該收到該封包的電腦。
2.Bridge(橋接器)
Bridge是一個用來連接不同的網路區段(segment)的設備,例如﹐可以用一個 bridge 來連接兩個 Ethernet segment、或連接一個 Token Ring segment 到一個 Ethernet segment。其主要功能在於決定是否讓資料訊框(Frame)通過Bridge 到另一端網路上,當Bridge 接收到訊框後,會將訊框目的地的MAC 位址與Bridge 的table 做比對,如果table 中能找到符合的位址,則進一步確認封包與目的地電腦是否為同一區段網路,若是的話,目的地電腦不需透過Bridge 就能收到資料(發揮filter功能);如果不是的話,Bridge 就會把訊框傳至目的地的電腦所在區段網路(發揮forward功能)。
P.S:雖然Bridge被用來分割網路,但是它們並不會隔離廣播或多點傳播的封包。
3.Switch(交換器)
Switch 的作用是在區域網路中,將網路作連接的動作。Switch 有一個table,記錄著每一台電腦的MAC 位址,當封包進來之後,Switch 會去檢查該封包的目的地的是哪一個MAC 位址的電腦,只將這個封包送給該台電腦,其他電腦則不會收到封包。
Switch的傳輸方式
(1). Cut Through:接收到目的地址後即轉發出去。延時小,但壞的資料一樣轉發。
(2). Store-and-Forward:接收到完整的資料包後,校驗好壞,好的轉發,壞的丟棄重發。傳輸可靠,但延時較長。
(3). Fragment free:接收到資料包後,大於64bytes的轉發,小於64bytes的丟棄。好壞介於上述兩種方式之間。
4.Layer 3 Switch(第三層交換器)

Layer 3 Switch 又稱為IP Switch 或Switch Router, 意即其工作於第三層網路層的通信協定(如IP),並藉由解析第三層表頭(Header)將封包傳至目的地,有別於傳統的路由器以軟體的方式來執行路由運算與傳送,Layer 3 Switch是以硬體的方式(通常由專屬ASIC構成)來加速路由運算與封包傳送率並結合Layer 2 的彈性設定,因此其效能通常可達每秒數百萬封包(Million packet per second)的傳送率,並具備數十個至上百個以上的高速乙太網路(Fast Ethernet)連接埠,或數個至數十個超高速乙太網路(Gigabit Ethernet)連接埠之容量。
由於Layer 2 的Switch 並無法有效的阻絕廣播域,如ARP及windows 95/98廣泛使用的NetBEUI協定,因此就算Layer 2 Switch 以VLAN 的方式將經常要通訊的群組構成一廣播域來試圖降低影響,但仍無法完全避免廣播風暴問題(同一個VLAN間仍會產生廣播風暴),再加上現今網路(尤其是Campus內部間流量及對外的Internet/Intranet流量)已不是80/20規則(80%流量在本地,20%是外地),而是漸漸成為20/80規則,且加上Client/Server 及Distributor Server之運用,因此單靠Layer 2 Switch或傳統Router路由器便無法符合對效能及Intranet上對安全顧忌(對因廣播而使資訊傳送被盜取的安全疑慮)之要求,因此Layer 3 Switch便大量興起,初期只運用Core端,現在的趨勢已漸漸走向桌面(Layer 3 down to desktop)。 

如同Router,Layer 3 Switch的每一個port都是一個Subnet,而一個子網路就單獨是一個廣播域,因此每一個port的廣播封包並不會流竄到另一個port,其僅負責傳送要跨越子網路的封包(Routing Forward),並以目的地的IP位址(目的地子網路的網路號碼)來決定封包要轉送至哪一個port,並以Routing Protocol(如RIP或OSPF)來交換Routing Table並學習網路拓蹼,其通常存放於Layer 3 Switch的Routing Forward Data-Base(FDB),並以硬體及Route Cache的方式來加速IP table lookup並予以定址與更新(目前大多以ASICIC來執行),因此才得以提昇運算效能達成Wiring Speed Forward之目的。 

Layer 3 Switch通常提供較大頻寬的交換核心(Switch Fabric)以提供較大的容量(Port Capacity)與較高的交換效能,近來各廠家並不斷附以Layer 3 Switch更強大的支援能力,如Class of Service(服務等級優先權),Quality of Service(服務品質保證),Policy Management(策略分級品質與頻寬管制與管理),Multicast Routing(群組廣播路由傳送)等功能,以符合網路環境的快速變化與應用。

P.S:雖然Layer3 Switch也跟Router一樣有路由的功能,但仍無法當作Router使用,因為現在的Layer 3 Switch 因尚缺安全管理、與WAN的連接、優先權管理、支援多種協定封包等功能
5.Router(路由器)
路由器是用來將網路的資訊, 使用在電腦之間傳送的基本設備, 路由器的工作在於 OSI 模式第三層(網路層),用來決定資料傳遞路徑的設備. 我們使用的IP協定就是藉由路由器將不同的IP位址連接在一起. 網路上的資料分成一段一段的封包packet, 而這些封包要指向何處便是由路由器來決定的, 路由器會根據資料的目的地, 指示正確的方向, 計算評估最便捷有效率的路徑來傳輸資料, 也就是說路由器要為封包做最佳化的工作, 找出最適當的路徑. 路由器通常最少會有兩個介面, 而這兩個介面分別區隔不同的IP網段. 例如IP分享器有WAN和LAN兩種介面, 區隔WAN的實際IP與LAN的虛擬IP網段.Router 與Bridge 的另一個不同點在於:
Bridge 只是單純做為一個決定是否讓封包通過的橋樑,Router 則會執行選徑功能(OSPF,EIGRP,...etc.)。