2015年1月31日 星期六

【筆記】使用Node.js讀取MySQL資料

今天想到嘗試使用Node.js來讀取MySQL的資料,上網找了一下教學,發現其實使用模組來實現的話,特別簡單。

首先在MySQL中建立一個test的資料表,再來新增兩筆資料如下:
+---+------+
| a | b    |
+---+------+
| 1 | abc  |
| 2 | xyz  |
+---+------+
首先使用npm指令來安裝mysql模組:
npm install mysql
然後新增一個新增JavaScript檔案,其名為mysql_test.js
var mysql = require('mysql');
var connection = mysql.createConnection({
        host : 'localhost',
        user : 'cbuser',
        password : 'cbpass',
        database : 'cookbook'
});
connection.query('select a, b from test', 
        function(error, rows, fields){
                if(error)
                {
                        throw error;
                }
                for(key in rows)
                {
                        console.log(rows[key].a + ',' 
                                        + rows[key].b);
                }
        });
再來使用node指令執行上列的mysql_test.js
node mysql_test.js
結果如下:
1,abc
2,xyz
參考資料

2015年1月29日 星期四

【雜志】為人父的驕傲


在排隊買水煎包時,看到劉備的兒子放寒假了,走進店裡幫忙。

店裡的阿姨問:「有沒有跟小妹妹聊天?」

兒子:「不知道要講什麼!」

阿姨:「她一直來找你耶!」

講完,劉備兒子一臉靦腆,兩個腮幫子微紅了起來,「小姐,要幾個?」,立刻轉身幫忙夾水煎包。

我看到劉煎一邊忙著把熱呼呼的水煎包起鍋,一邊強忍著嘴角,避免過度上揚,臉上滿滿一拿掐不好就會內傷的喜悅。

那是一種身為父親才知道的驕傲。

2015年1月14日 星期三

【筆記】常用IT或其他領域相關英文名詞意義

有些技術名詞,
即使使用最強大的詞典去找,
也不一定找得到,
所以在這裡整理了很多IT相關的名詞解釋,
對我來說,
防變笨時候用的,XD


C
cardinality在一個集合 (如 list,set ) 中所有元素的數量
checksum總和檢查碼傳輸單位元中的位計數及其單位,接收器可以根據此值檢查是否收到相同的位數。如果計數符合,即認為已接收整個傳輸。又稱為雜湊更多
compromise弱化
F
failover容錯移轉指叢集中的某個節點無法使用時將叢集資源移轉至可用節點。 服務從叢集中的主動節點移到被動節點的程序。更多
L
latency延遲對於檔案系統,這通常是指特定檔案系統作業返回到使用者所花費的時間長度。更多
P
polling輪詢一個主單位輪流去詢問各個從屬單元的狀態。更多
P
RPC輪詢Remote Procedure Call,遠端程序呼叫。更多
T
throughput傳輸量對於檔案系統,這通常指的是給定時間單位內的 I/O 作業數。更多

2015年1月11日 星期日

【筆記】使用SSH連線到VirtualBox的Ubuntu VM

若要在實體機器使用如PieTTY等連線軟體使用SSH通訊協定連線到VirtualBox中的Ubuntu時,需要先在VirtualBox中設定「連接埠轉送」:


首先,查出VirtualBox虛擬網卡的資訊,在命令提示字元下輸入:
ipconfig
接著找到 「乙太網路卡 VirtualBox Host-Only Network」這一塊的資訊中的「IPv4 位址」,如下:


若找不到「乙太網路卡 VirtualBox Host-Only Network」這一塊的資訊,則先到Oracle VM VirtualBox管理員視窗中,依下列步驟進行設定。

先點選【檔案】→【喜好設定】:


進入「VirtualBox - 設定值」視窗後,點選【網路】→【「僅限主機」網路】,然後在最右的加號圖示上點按一下:


加入成功後,就會在下方的區塊內出現「VirtualBox Host-Only Ethernet Adapter」,回到命令提示字元再輸入一次ipconfig,應該就可以找到「乙太網路卡 VirtualBox Host-Only Network」了。

在這裡「IPv4 位址」的設定值為「192.168.123.1」。

再來啟動Ubuntu後,使用下列指令來查網路設定:
ifconfig
再來找到eth0這段的設定,這裡是「10.0.2.15」:


回到Oracle VM VirtualBox管理員視窗中,選擇要設定的虛擬機器後,點按上面的【設定值】:


進入設定值視窗後,在左邊區塊內找到【網路】後,把右邊區塊中的【進階】展開,再點按【連接埠轉送】開啟「連接埠轉送規則」設定視窗後,再點按右邊的加號圖示新增一組規則:


在上面畫面的各欄位設定如下:
  • 「名稱」用輸入自訂的名稱,這裡用的是「SSH」
  • 「協定」就使用預設的「TCP」
  • 「主機IP」輸入在「乙太網路卡 VirtualBox Host-Only Network」這一塊的資訊中的「IPv4 位址」,亦即「192.168.123.1」
  • 「主機連接埠」輸入「22」
  • 「客體IP」設定為eth0這段的設定,這裡是「10.0.2.15」
  • 「客體連接埠」設為「22」
設定好點按【確定】鈕離開即可:


若設定完仍無法連線,可能尚未安裝SSH Server,可以在Ubuntu使用下列指令安裝OpenSSH Server
sudo apt-get install openssh-server

2015年1月7日 星期三

【筆記】Java取得檔案的建立時間、修改日期,以及存取日期

在使用Java處理檔案時,有些時候會需要去取得檔案的一些如建立時間、修改日期或存取日期等資訊,如:


1.6以前,可以使用File類別來取得最近的修改日期:
String strPath = "D:/_javakid/test.txt";
		
File file = new File(strPath);
		
Calendar c = Calendar.getInstance();
c.setTimeInMillis(file.lastModified());
	
System.out.println(strPath + " 上次修改時間為:" 
			+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
但使用File類別只能得到檔案的最近修改時間,若要取得像上列的檔案內容中的修改日期以及存取日期的話,就要用到NIOjava.nio.file套件下的FilesPathPaths這三個類別:
System.out.println("使用nio...");
Path path = Paths.get(strPath);
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);

c.setTimeInMillis(attrs.creationTime().toMillis());
System.out.println(strPath + " 建立時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));

c.setTimeInMillis(attrs.lastModifiedTime().toMillis());
System.out.println(strPath + " 上次修改時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));

c.setTimeInMillis(attrs.lastAccessTime().toMillis());
System.out.println(strPath + " 上次存取時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
使用上要注意的是,上列三個類別都是在JDK 1.7之後才存在的,要使用這些類別,要先把電腦的JDK升級到1.7以上。

完整程式碼如下:
package idv.jk.io;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class FileModificationReader 
{
	public static void main(String[] args) throws IOException
	{
		String strPath = "D:/_javakid/test.txt";
		
		File file = new File(strPath);
		
		Calendar c = Calendar.getInstance();
		c.setTimeInMillis(file.lastModified());
	
		System.out.println(strPath + " 上次修改時間為:" 
							+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		System.out.println("使用nio...");
		Path path = Paths.get(strPath);
		BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
		
		c.setTimeInMillis(attrs.creationTime().toMillis());
		System.out.println(strPath + " 建立時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		c.setTimeInMillis(attrs.lastModifiedTime().toMillis());
		System.out.println(strPath + " 上次修改時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		c.setTimeInMillis(attrs.lastAccessTime().toMillis());
		System.out.println(strPath + " 上次存取時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
	}
}
執行結果為:
D:/_javakid/test.txt 上次修改時間為:2015-01-07 18:27:39
使用nio...
D:/_javakid/test.txt 建立時間為:2015-01-05 15:12:59
D:/_javakid/test.txt 上次修改時間為:2015-01-07 18:27:39
D:/_javakid/test.txt 上次存取時間為:2015-01-07 18:27:12