sudo add-apt-repository ppa:webup8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
You can find the latest version available from the website:
http://www.ubuntuupdates.org/ppa/webupd8_java
2014/12/27
2014/12/24
[C++] static_cast & dynamic_cast
以往都用(int) variable來強迫轉型,新的C++裏頭似乎比較鼓勵用static_cast
dynamic_cast在物件轉型時會檢查是否由父類別轉為子類別,接著才進行轉換
Reference:
http://windsplife.blogspot.tw/2010/09/cstaticcast-dynamiccast-reinterpretcast.html
dynamic_cast在物件轉型時會檢查是否由父類別轉為子類別,接著才進行轉換
Reference:
http://windsplife.blogspot.tw/2010/09/cstaticcast-dynamiccast-reinterpretcast.html
2014/12/23
Installing Virtualbox Guest Additions in Ubuntu
Take VirtualBox 4.3.20.96996 for example:
sudo -i
cd /media/username/VBOXADDITIONS_4.3.20_96996/
./VBoxLinuxAdditions.run
p.s
Change the username to yours, and make sure of the version.
2014/12/11
[Visual C++] MySQL Port Setting
connectstr = "Network Address="+server+";"+"Port=3307;"+"Persist Security Info=no;"+"User Name="+userID+";"+"Password="+password;
2014/12/05
2014/11/22
2014/11/13
[C++] string大小寫轉換 (透過transform)
以前做大小寫轉換時候,會用tolower()、toupper()來做 (或者直接利用ASCII來加減)
比較麻煩的是要寫一個迴圈,一次一個字元來轉
剛剛有學弟問字串轉換的問題,順便google了一下,發現用transform只要一行就好
記得要#include <algorithm>
記得要#include <algorithm>
2014/11/02
Visual C++ 各種字串之間的轉換方法
Reference:
http://www.cnblogs.com/oomusou/archive/2008/07/24/cpp_string_net_string.html
要將C++ STL string轉成Visual C++的^String
可以透過gcnew()的參數來進行初始化
ex:
string data = "Hello World";
String ^str = gcnew String(data.c_str());
注意gcnew的參數需要是C-Style string,所以透過.c_str()做轉換
http://www.cnblogs.com/oomusou/archive/2008/07/24/cpp_string_net_string.html
要將C++ STL string轉成Visual C++的^String
可以透過gcnew()的參數來進行初始化
ex:
string data = "Hello World";
String ^str = gcnew String(data.c_str());
注意gcnew的參數需要是C-Style string,所以透過.c_str()做轉換
2014/10/30
2014/10/26
[LTspice] Triangle Wave
LTspice doesn't have the "Triangle Wave" option, so we use "PULSE" option to generate triangle wave. See the link below for more details.
Reference:
http://ltwiki.org/?title=LTspice_has_a_built_in_Triangle_Wave
Example:
Generate a triangle wave with low level 6V and high level 10V. Frequency= 1kHz
Reference:
http://ltwiki.org/?title=LTspice_has_a_built_in_Triangle_Wave
Example:
Generate a triangle wave with low level 6V and high level 10V. Frequency= 1kHz
2014/10/18
[LTspice] 模擬 Operation Amplifier 元件
點選工具列上的Component按鈕
輸入需要的op amp model
這邊以LT1001為例,點選之後按OK,就能在畫面擺放所選的op amp
也能在輸入的地方打 opamp
LTspice會切到C:\Program Files (x86)\LTC\LTspiceIV\lib\sym\Opamps底下
就能看到所有的op amp model了
輸入需要的op amp model
這邊以LT1001為例,點選之後按OK,就能在畫面擺放所選的op amp
也能在輸入的地方打 opamp
LTspice會切到C:\Program Files (x86)\LTC\LTspiceIV\lib\sym\Opamps底下
就能看到所有的op amp model了
2014/09/06
POJ 1915 Knight Moves
Description
Background
Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him?
The Problem
Your task is to write a program to calculate the minimum number of moves needed for a knight to reach one point from another, so that you have the chance to be faster than Somurolov.
For people not familiar with chess, the possible knight moves are shown in Figure 1.
Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him?
The Problem
Your task is to write a program to calculate the minimum number of moves needed for a knight to reach one point from another, so that you have the chance to be faster than Somurolov.
For people not familiar with chess, the possible knight moves are shown in Figure 1.
2014/09/03
2014/09/01
用 Notepad++ 寫 C/C++
1. Plugins -> NppExec -> Follow $(CURRENT_DIRECTORY)
(如果沒有看到NppExec,就到Plugin Manager找到它然後安裝)
2.把Compiler的位置加入系統環境變數
如果電腦上已經有安裝其他IDE(ex: Dev C++、CodeBlocks),可以直接拿他們的Compiler來用
以安裝Dev C++的電腦為例,在環境變數path中加入
C:\Program Files (x86)\Dev-Cpp\MinGW32\bin
3.Plugins -> NppExec -> Execute
(或者直接用快捷鍵 F6)
接著在欄位內填入
你的Compiler位置 "$(FULL_CURRENT_PATH)" -o $(NAME_PART)
以接續第二步驟的例子來說,就是
C:\Program Files (x86)\Dev-Cpp\MinGW32\bin\g++.exe "$(FULL_CURRENT_PATH)" -o $(NAME_PART)
4.設定完成就可以在Notepad++裡面coding了,寫完之後存成c/cpp檔,按下F6即可編譯
5.要執行的話就在Notepad++下方console畫面輸入執行檔名,就可以看到執行結果
[自動完成]
使用其他IDE有個好用的功能,就是自動完成符號配對和提示參數名稱
在Notepad++要開啟這個功能,從 自訂 ->使用者自訂 -> 字詞自動完成功能 裡面去做設定
(如果沒有看到NppExec,就到Plugin Manager找到它然後安裝)
2.把Compiler的位置加入系統環境變數
如果電腦上已經有安裝其他IDE(ex: Dev C++、CodeBlocks),可以直接拿他們的Compiler來用
以安裝Dev C++的電腦為例,在環境變數path中加入
C:\Program Files (x86)\Dev-Cpp\MinGW32\bin
3.Plugins -> NppExec -> Execute
(或者直接用快捷鍵 F6)
接著在欄位內填入
你的Compiler位置 "$(FULL_CURRENT_PATH)" -o $(NAME_PART)
以接續第二步驟的例子來說,就是
C:\Program Files (x86)\Dev-Cpp\MinGW32\bin\g++.exe "$(FULL_CURRENT_PATH)" -o $(NAME_PART)
4.設定完成就可以在Notepad++裡面coding了,寫完之後存成c/cpp檔,按下F6即可編譯
5.要執行的話就在Notepad++下方console畫面輸入執行檔名,就可以看到執行結果
[自動完成]
使用其他IDE有個好用的功能,就是自動完成符號配對和提示參數名稱
在Notepad++要開啟這個功能,從 自訂 ->使用者自訂 -> 字詞自動完成功能 裡面去做設定
2014/08/31
Free Softwares on Windows
[Browser]
Chrome
http://www.google.com/intl/zh-TW/chrome/
Firefox
http://mozilla.com.tw/firefox/new/
Opera
http://www.opera.com/zh-tw
[FTP]
FileZilla
https://filezilla-project.org/
Chrome
http://www.google.com/intl/zh-TW/chrome/
Firefox
http://mozilla.com.tw/firefox/new/
Opera
http://www.opera.com/zh-tw
[FTP]
FileZilla
https://filezilla-project.org/
2014/08/29
2014/08/26
[C++] C++ STL 產生所有排列
要產生一串資料的所有排列情形
可以直接呼叫C++ STL的next_permutation()或pre_permutation()
記得要先把資料做過排序(前者遞增排序,後者遞減排序)
(1)array
除了陣列可以這樣列出排列組合之外,vector container也可以
(2)vector
可以直接呼叫C++ STL的next_permutation()或pre_permutation()
記得要先把資料做過排序(前者遞增排序,後者遞減排序)
(1)array
除了陣列可以這樣列出排列組合之外,vector container也可以
(2)vector
2014/08/11
2014/08/04
2014/07/30
2014/07/29
[ACM] Q490 Rotating Sentences
輸出的地方看起來是正確了,不過Online Judge給Wrong Answer
不知道是不是因為沒有對輸入資料合法性作確認的緣故,待修正。
2014/07/28
Online Judge
詳細介紹參考
http://www.csie.ntnu.edu.tw/~u91029/oj.html
「 Association for Computing Machinery (ACM) 」是一個致力於電腦科學教育的協會,出版大量的專業期刊文獻,舉辦重大的計算機科學會議,在資訊界舉足輕重、名聞遐邇。
ACM 每年度都會舉辦一次「 The ACM-ICPC International Collegiate Programming Contest (ACM-ICPC) 」,是一個給全世界大專院校學生參加的演算法程式設計比賽,比賽目的在於考驗選手臨場的演算法設計能力、程式編寫能力。 ACM 首先在世界各地舉辦初賽,再從各個賽區選拔出表現優秀的隊伍,角逐世界總決賽。
ACM-ICPC 帶動了演算法程式設計的風氣。世界上許多大專院校的資訊系所,仿照 ACM-ICPC 的比賽模式,紛紛自行開發出即時線上比賽系統,能夠自動批改、評分、計時、統計。學生不必齊聚一堂,藉由網際網路,就可以相互切磋程式設計技巧。比賽結束之後,便將比賽題目編列題庫,開放線上批改程式的功能,供學生賽後練習檢討。這套系統大家普遍稱呼為「 Online Judge System 」、「 Online Judge 」。
最古老、也是最有知名度的 Online Judge ,是由西班牙知名的瓦雅多利大學「 Universidad de Valladolid (UVa) 」開發的「 UVa Online Judge 」。 UVa Online Judge 是台灣人最熟悉的一個 Online Judge :資訊相關科系的學生,常利用它來磨鍊程式設計技巧;教師將它當作課程教材使用;有許多個人網站從事題目翻譯,提供測試資料集等等。
UVa Online Judge 亦和 ACM 合作,成為 ACM 推廣的一個 Online Judge ,藉此向大眾提倡程式設計。因此, UVa Online Judge 除了收集自行舉辦的比賽的題目,也嘗試收錄世界各地重大程式設計比賽的題目,以臻豐富完整。
有趣的是,歷年來大家口耳相傳、以訛傳訛,便將 UVa Online Judge 誤植為 ACM 了,把 UVa Online Judge 的題庫稱作「 ACM 題目」,利用 UVa Online Judge 訓練程式設計技巧時稱作「寫 ACM 」,約定俗成。
從事這項活動,不僅可以學習演算法、熟悉程式設計、鍛鍊智力,還可以培養自主學習與獨立解題的能力──此即程式設計師的核心價值。因此近年來演算法程式設計開始獲得大家重視,產業界紛紛舉行演算法競賽,大專院校也紛紛開設相關課程,大家也開始將這項活動稱呼為「 Competitive Programming 」。
--節錄自 演算法筆記
http://www.csie.ntnu.edu.tw/~u91029/oj.html
「 Association for Computing Machinery (ACM) 」是一個致力於電腦科學教育的協會,出版大量的專業期刊文獻,舉辦重大的計算機科學會議,在資訊界舉足輕重、名聞遐邇。
ACM 每年度都會舉辦一次「 The ACM-ICPC International Collegiate Programming Contest (ACM-ICPC) 」,是一個給全世界大專院校學生參加的演算法程式設計比賽,比賽目的在於考驗選手臨場的演算法設計能力、程式編寫能力。 ACM 首先在世界各地舉辦初賽,再從各個賽區選拔出表現優秀的隊伍,角逐世界總決賽。
ACM-ICPC 帶動了演算法程式設計的風氣。世界上許多大專院校的資訊系所,仿照 ACM-ICPC 的比賽模式,紛紛自行開發出即時線上比賽系統,能夠自動批改、評分、計時、統計。學生不必齊聚一堂,藉由網際網路,就可以相互切磋程式設計技巧。比賽結束之後,便將比賽題目編列題庫,開放線上批改程式的功能,供學生賽後練習檢討。這套系統大家普遍稱呼為「 Online Judge System 」、「 Online Judge 」。
最古老、也是最有知名度的 Online Judge ,是由西班牙知名的瓦雅多利大學「 Universidad de Valladolid (UVa) 」開發的「 UVa Online Judge 」。 UVa Online Judge 是台灣人最熟悉的一個 Online Judge :資訊相關科系的學生,常利用它來磨鍊程式設計技巧;教師將它當作課程教材使用;有許多個人網站從事題目翻譯,提供測試資料集等等。
UVa Online Judge 亦和 ACM 合作,成為 ACM 推廣的一個 Online Judge ,藉此向大眾提倡程式設計。因此, UVa Online Judge 除了收集自行舉辦的比賽的題目,也嘗試收錄世界各地重大程式設計比賽的題目,以臻豐富完整。
有趣的是,歷年來大家口耳相傳、以訛傳訛,便將 UVa Online Judge 誤植為 ACM 了,把 UVa Online Judge 的題庫稱作「 ACM 題目」,利用 UVa Online Judge 訓練程式設計技巧時稱作「寫 ACM 」,約定俗成。
從事這項活動,不僅可以學習演算法、熟悉程式設計、鍛鍊智力,還可以培養自主學習與獨立解題的能力──此即程式設計師的核心價值。因此近年來演算法程式設計開始獲得大家重視,產業界紛紛舉行演算法競賽,大專院校也紛紛開設相關課程,大家也開始將這項活動稱呼為「 Competitive Programming 」。
--節錄自 演算法筆記
2014/07/25
Free Virtual Machine
VirtualBox
https://www.virtualbox.org/
VMWare Player (free for personal use)
https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0
p.s both have windows and linux version.
https://www.virtualbox.org/
VMWare Player (free for personal use)
https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0
p.s both have windows and linux version.
2014/07/23
2014/07/17
2014/07/16
2014/07/03
2014/06/29
[ACM] Q263 Number Chains
2014/06/15
2014/06/07
用 Eclipse 寫 C/C++
要在Eclipse的環境底下寫C/C++,需要安裝CDT(Eclipse的C/C++ plugin)以及C/C++ compiler
1.下載 MinGW 並且把它裝起來,完成之後打開MinGW Installer勾選Basic Setup裡面的項目安裝
2.把C:\MinGW\bin加到環境變數path的最前面
如何加入Windows環境變數
3.打開Eclipse,在Help -> Install New Software,找到Work with欄項填入對應所使用Eclipse版本的p2 software repository 把所有出現的項目打勾之後同意安裝
基本上這樣就完成Eclipse的C/C++設定
開一個新的C/C++Project來測試是否能正確運作
在project選擇compiler的地方,記得要選所安裝的MinGW GCC
程式碼完成要run之前,必須先build,可以使用快捷鍵ctrl + b
詳細的圖文設定可以參考:
使用 Eclipse 開發 C 及 C++ ( CDT + MinGW )
p.s MinGW安裝過程畫面可能跟上面網站不一樣
Eclipse + CDT提供另外一個C/C++ IDE的選擇
不過就硬體需求和效能上來講 Code Block 會比較好,而且compiler可以調整的選項也比較多
1.下載 MinGW 並且把它裝起來,完成之後打開MinGW Installer勾選Basic Setup裡面的項目安裝
2.把C:\MinGW\bin加到環境變數path的最前面
如何加入Windows環境變數
3.打開Eclipse,在Help -> Install New Software,找到Work with欄項填入對應所使用Eclipse版本的p2 software repository 把所有出現的項目打勾之後同意安裝
基本上這樣就完成Eclipse的C/C++設定
開一個新的C/C++Project來測試是否能正確運作
在project選擇compiler的地方,記得要選所安裝的MinGW GCC
程式碼完成要run之前,必須先build,可以使用快捷鍵ctrl + b
詳細的圖文設定可以參考:
使用 Eclipse 開發 C 及 C++ ( CDT + MinGW )
p.s MinGW安裝過程畫面可能跟上面網站不一樣
Eclipse + CDT提供另外一個C/C++ IDE的選擇
不過就硬體需求和效能上來講 Code Block 會比較好,而且compiler可以調整的選項也比較多
2014/05/23
2014/05/16
修改瀏覽器暫存檔路徑
修改IE、Chrome、Firefox的暫存檔路徑
參考這篇: http://herolin.twbbs.org/entry/how-to-setting-ie-chrome-firefox-cache-temp-path/
參考這篇: http://herolin.twbbs.org/entry/how-to-setting-ie-chrome-firefox-cache-temp-path/
2014/05/02
[轉]系統時間定義從1970年原因
最初計算機操作系統是32 位,而時間也是用 32 位表示。
System.out.println(Integer.MAX_VALUE);
2147483647
Integer在 JAVA 內用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的總秒數是 31536000,
2147483647/31536000 = 68.1
也就是說32 位能表示的最長時間是 68 年,而實際上到 2038年 01 月 19 日 03 時 14 分 07
秒,便會到達最大時間,過了這個時間點,所 有 32 位操作系統時間便會變 為
10000000 00000000 00000000 00000000
也就是1901年 12月 13 日 20時 45 分 52 秒,這樣便會出現時間回歸的現象,很多軟體便會運 行異常了。
到這裡,我想問題的答案已經出來了:
因為用32 位來表示時間的最大間隔是 68 年,而最早出現的 UNIX 操作系統考慮到計算
機產生的年代和應用的時限綜合取了 1970 年 1 月 1 日作為 UNIX TIME 的紀元時間 ( 開始
時間 ) ,而 java 自然也遵循了這一約束。
至於時間回歸的現象相信隨著64 為操作系統 的產生逐漸得到解決,因為用 64 位操作
系統可以表示到 292,277,026,596年 12月 4 日 15時 30 分 08 秒,相信我們的 N 代子孫,哪
怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以後了。
最後一個問題:上面System.out.println(new Date(0)),列印出來的時間是8點而非0點,
原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我的電腦時區
設置為東8區,故列印的結果是8點。
節錄自:
http://www.010cnc.net/subject/about/java%E7%82%BA%E5%95%A5%E8%A8%88%E7%AE%97%E6%99%82%E9%96%93%E5%BE%9E1970%E5%B9%B41%E6%9C%881%E6%97%A5%E9%96%8B%E5%A7%8B.html
System.out.println(Integer.MAX_VALUE);
2147483647
Integer在 JAVA 內用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的總秒數是 31536000,
2147483647/31536000 = 68.1
也就是說32 位能表示的最長時間是 68 年,而實際上到 2038年 01 月 19 日 03 時 14 分 07
秒,便會到達最大時間,過了這個時間點,所 有 32 位操作系統時間便會變 為
10000000 00000000 00000000 00000000
也就是1901年 12月 13 日 20時 45 分 52 秒,這樣便會出現時間回歸的現象,很多軟體便會運 行異常了。
到這裡,我想問題的答案已經出來了:
因為用32 位來表示時間的最大間隔是 68 年,而最早出現的 UNIX 操作系統考慮到計算
機產生的年代和應用的時限綜合取了 1970 年 1 月 1 日作為 UNIX TIME 的紀元時間 ( 開始
時間 ) ,而 java 自然也遵循了這一約束。
至於時間回歸的現象相信隨著64 為操作系統 的產生逐漸得到解決,因為用 64 位操作
系統可以表示到 292,277,026,596年 12月 4 日 15時 30 分 08 秒,相信我們的 N 代子孫,哪
怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以後了。
最後一個問題:上面System.out.println(new Date(0)),列印出來的時間是8點而非0點,
原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我的電腦時區
設置為東8區,故列印的結果是8點。
節錄自:
http://www.010cnc.net/subject/about/java%E7%82%BA%E5%95%A5%E8%A8%88%E7%AE%97%E6%99%82%E9%96%93%E5%BE%9E1970%E5%B9%B41%E6%9C%881%E6%97%A5%E9%96%8B%E5%A7%8B.html
2014/04/08
Graphics.h In Code::Blocks
1. Download the pack: Graphics
2. Extract Graphics.rar and
Copy the file "graphics.h" to "C:\Program Files (x86)\CodeBlocks\MinGW\include"
Copy the file "libbgi.a" to "C:\Program Files (x86)\CodeBlocks\MinGW\lib"
3. In CodeBlocks, Choose "Settings" -> "Compiler"
Then, in the tag "Linker settings", choose "Add" and add "C:\Program Files (x86)\CodeBlocks\MinGW\lib\libbgi.a"
Next, add "-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32" to Other linker options at right.
4. Create a C++ project, and use the code below to test if it works.
4/17 update
Show chinese character in console
Settings -> Compiler -> Other options
Add -fexec-charset=BIG-5
2. Extract Graphics.rar and
Copy the file "graphics.h" to "C:\Program Files (x86)\CodeBlocks\MinGW\include"
Copy the file "libbgi.a" to "C:\Program Files (x86)\CodeBlocks\MinGW\lib"
3. In CodeBlocks, Choose "Settings" -> "Compiler"
Then, in the tag "Linker settings", choose "Add" and add "C:\Program Files (x86)\CodeBlocks\MinGW\lib\libbgi.a"
Next, add "-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32" to Other linker options at right.
4. Create a C++ project, and use the code below to test if it works.
4/17 update
Show chinese character in console
Settings -> Compiler -> Other options
Add -fexec-charset=BIG-5
2014/04/01
2014/03/31
2014/03/30
2014/03/29
2014/03/24
2014/03/01
重新配對Logitech無線滑鼠
【問題】
將無線滑鼠與另一個無線鍵盤接收器配對之後,變成無法跟原本滑鼠的接收器配對,利用Logitech Unifying軟體想重新配對,但是軟體顯示沒有插入可用Unifying接收器,所以另尋配對的方式並記錄下來。
【解法】
1.先用Unifying將滑鼠與鍵盤接收器取消連結(因為一個裝置只能連結一個接收器)
2.插入滑鼠所附的接收器(鍵盤接收器先拔掉避免干擾),並下載Logitech Setpoint安裝
http://www.logitech.com/zh-tw/support/3131
3.執行 C:\Program Files\Logitech\SetPointP\ConnectUtility 就能重新將滑鼠與原來的接收器重新配對
參考羅技官網:
http://www.logitech.com/zh-tw/support/5484?section=downloads&softwareid=4338&osid=1
將無線滑鼠與另一個無線鍵盤接收器配對之後,變成無法跟原本滑鼠的接收器配對,利用Logitech Unifying軟體想重新配對,但是軟體顯示沒有插入可用Unifying接收器,所以另尋配對的方式並記錄下來。
【解法】
1.先用Unifying將滑鼠與鍵盤接收器取消連結(因為一個裝置只能連結一個接收器)
2.插入滑鼠所附的接收器(鍵盤接收器先拔掉避免干擾),並下載Logitech Setpoint安裝
http://www.logitech.com/zh-tw/support/3131
3.執行 C:\Program Files\Logitech\SetPointP\ConnectUtility 就能重新將滑鼠與原來的接收器重新配對
參考羅技官網:
http://www.logitech.com/zh-tw/support/5484?section=downloads&softwareid=4338&osid=1
2014/02/26
2014/02/25
2014/02/16
[C]方向鍵輸入判斷
#include <stdio.h>
#include <conio.h>
int main()
{
char ch1, ch2;
while(ch1 = getch())
{
if(ch1 == -32)
{
ch2 = getch();
if(ch2 == 72)
printf("up key press\n");
if(ch2 == 75)
printf("left key press\n");
if(ch2 == 77)
printf("right key press\n");
if(ch2 == 80)
printf("down key press\n");
}
}
return 0;
}
#include <conio.h>
int main()
{
char ch1, ch2;
while(ch1 = getch())
{
if(ch1 == -32)
{
ch2 = getch();
if(ch2 == 72)
printf("up key press\n");
if(ch2 == 75)
printf("left key press\n");
if(ch2 == 77)
printf("right key press\n");
if(ch2 == 80)
printf("down key press\n");
}
}
return 0;
}
2014/02/01
訂閱:
文章 (Atom)