你會不會常常覺得自己是…
生錯時代,
生錯國家,
亦或生錯星球,XD
Amazon Ads
2014年12月24日 星期三
【筆記】解決在VirtualBox中安裝Ubuntu14.04後,無法調整螢幕解析度的問題
今天在Windows 8.1上,使用VirtualBox安裝Ubuntu 14.04後,發現要調整螢幕解析度時,只有640 X 480這一個選項:
後來找到這一篇討論,好像是在Ubuntu 14.04後的版本,要再安裝幾個客戶端的套件:
所以先打関終端機後,輸下列指令:
輸入完成後重新啟動,應該就可以看到VirtualBox中的作業系統視窗不再是小小一塊,而且進入系統設定後,也可以看到解析度有其他選項可以選擇:
參考資料
後來找到這一篇討論,好像是在Ubuntu 14.04後的版本,要再安裝幾個客戶端的套件:
- virtualbox-guest-dkms
- virtualbox-guest-utils
- virtualbox-guest-x11
所以先打関終端機後,輸下列指令:
sudo apt-get install virtualbox-guest-dkms \ virtualbox-guest-utils \ virtualbox-guest-x11其中,
\
是表示換行的意思,實際上可以在一行中輸入所以指令。
輸入完成後重新啟動,應該就可以看到VirtualBox中的作業系統視窗不再是小小一塊,而且進入系統設定後,也可以看到解析度有其他選項可以選擇:
參考資料
Labels:
Ubuntu,
VirtualBox
2014年12月14日 星期日
【分享】在Java List中,使用元素(物件)的屬性來排序
你一定在某個時候,曾經把一堆物件放到
如下面的
回到我的例子,若要讓
依不一樣的需求,可以依所需要的邏輯去實作,詳細的說明可以參考compareTo。
再來我就可以寫個程式來驗證我的實作:
List
後,還需要依物件的某個屬性來做排序。如下面的
theStudents
變數裡面放了一堆Student
類別的物件,還要依每個學生的分數來做降冪排列:
Student student1 = new Student(1, "Mark", 90); Student student2 = new Student(2, "Tom", 58); Student student3 = new Student(3, "Shine", 70); Student student4 = new Student(4, "Kelly", 88); Student student5 = new Student(5, "Mark", 60); List<Student> theStudents = Arrays.asList(student1, student2, student3, student4, student5);要達到上列的要求,我可以用
java.util.Collections
類別中的sort(java.util.List)
這個方法來實現,但在Java Doc中有提到,傳入該方法的List
物件,其中包含的元件需要支援排序,在實作上要讓其中的元素實作Comparable介面。回到我的例子,若要讓
Student
類別可以依分收排序,就要讓Student
類別實作Comparable介面,並在compareTo中去實作分數比較的邏輯:
package idv.jk.model; public class Student implements Comparable<Student> { public Student(int id, String name, int score) { super(); this.id = id; this.name = name; this.score = score; } private int id; private String name; private int score; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", score=" + score + "]"; } @Override public int compareTo(Student student) { return this.getScore() <= student.getScore() ? 1 : -1; } }在
public int compareTo(Student student)
回傳「1」可以想成此物件和其他Student
物件比較時,若分數比較小,會往後排;若是回傳「-1」,即分數比較大,則會往前排,達到我要依分數做降冪排列的需求。
依不一樣的需求,可以依所需要的邏輯去實作,詳細的說明可以參考compareTo。
再來我就可以寫個程式來驗證我的實作:
package idv.jk.test; import java.util.Arrays; import java.util.Collections; import java.util.List; import idv.jk.model.Student; public class SortStudentMain { public static void main(String args[]) { Student student1 = new Student(1, "Mark", 90); Student student2 = new Student(2, "Tom", 58); Student student3 = new Student(3, "Shine", 70); Student student4 = new Student(4, "Kelly", 88); Student student5 = new Student(5, "Mark", 60); List<Student> theStudents = Arrays.asList(student1, student2, student3, student4, student5); System.out.println("排序前:"); for(Student s : theStudents) { System.out.println(s); } Collections.sort(theStudents); System.out.println("排序後:"); for(Student s : theStudents) { System.out.println(s); } } }執行列出排序前和排序後的結果為:
排序前: Student [id=1, name=Mark, score=90] Student [id=2, name=Tom, score=58] Student [id=3, name=Shine, score=70] Student [id=4, name=Kelly, score=88] Student [id=5, name=Mark, score=60] 排序後: Student [id=1, name=Mark, score=90] Student [id=4, name=Kelly, score=88] Student [id=3, name=Shine, score=70] Student [id=5, name=Mark, score=60] Student [id=2, name=Tom, score=58]
Labels:
Java
2014年12月11日 星期四
【筆記】在vim中做多行編輯、刪除、插入
我一直認為多行編輯,是一個強大的編輯器會有的功能,於是我猜像Vim這麼強大的編輯器也一定會有,用Google搜尋了一下,果真被我找到了這篇。
首先開啟一個要編輯的檔案,內容如下:
現在我要把月份「12」改成「01」,第一步就是要把其中月份的「2」給刪掉。
Ctrl+v做區塊選取,按下後,在最下方會顯示「區塊選擇」或「VISUAL BLOCK」,這時可以方向鍵上、下、左、右來反白要編輯的區塊:
再來就是按下d做刪除:
以上,是在Vim中刪除多行的作法,若是要一次複製多行,在區塊反白後再按y就可以複製多行。
再來,我要在月份「1」之前補上一個「0」,先用Ctrl+v做區塊選取把「1」那一行選取起來後,按Shift+i,再輸入要新增的字串,這裡輸入「0」:
重要的來了,在輸入新增的部份後,立刻再按一下Esc鍵,等約一秒後,新增的部份,就會出現在剛有反白的資料行中:
這樣下來好像比其他編輯器麻煩!?但不這樣子使用,那會顯出使用Vim的強呢,XD
參考資料
首先開啟一個要編輯的檔案,內容如下:
現在我要把月份「12」改成「01」,第一步就是要把其中月份的「2」給刪掉。
Ctrl+v做區塊選取,按下後,在最下方會顯示「區塊選擇」或「VISUAL BLOCK」,這時可以方向鍵上、下、左、右來反白要編輯的區塊:
再來就是按下d做刪除:
以上,是在Vim中刪除多行的作法,若是要一次複製多行,在區塊反白後再按y就可以複製多行。
再來,我要在月份「1」之前補上一個「0」,先用Ctrl+v做區塊選取把「1」那一行選取起來後,按Shift+i,再輸入要新增的字串,這裡輸入「0」:
重要的來了,在輸入新增的部份後,立刻再按一下Esc鍵,等約一秒後,新增的部份,就會出現在剛有反白的資料行中:
這樣下來好像比其他編輯器麻煩!?但不這樣子使用,那會顯出使用Vim的強呢,XD
參考資料
Labels:
vim
2014年12月7日 星期日
【筆記】在Linux中使用wget下載jdk
若去過Oracle下載過Java Development Kit等的人應該都知道,大部份的下載,在可以下載前,都被要求要點【Accept License Agreement】這個選項後才能進行:
這個要求在使用瀏覽器的情況下,相信不會造成困擾,但若是在終端機中操作時,直接使用
看起來應該是沒有點【Accept License Agreement】的關係,但沒有介面如何選呢?XD
還好找到了這篇,說明只要搭配
上列的
下載回來的檔案即可以正常地解壓縮後使用了。
這個要求在使用瀏覽器的情況下,相信不會造成困擾,但若是在終端機中操作時,直接使用
wget
直接加上下載連結下載時,結果的確讓人一時不知所措,下載回來的檔案竟然這麼小:看起來應該是沒有點【Accept License Agreement】的關係,但沒有介面如何選呢?XD
還好找到了這篇,說明只要搭配
wget
指令的一些參數,帶著header
送出請求,也可輕鬆把Java Development Kit下載回來,以下我以Java SE Development Kit 7u71這一版為範例進行下載。wget --no-cookies \ --no-check-certificate \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ "http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz" \ -O jdk-7u71-linux-x64.tar.gz
上列的
--no-cookies
表示「不要使用cookie」,--no-check-certificate
表示「不使用伺服器的憑證」,以及-O
表示「要儲存的檔案路徑」,這些參數可以在終端機中下wget --help
來檢視意義和用法。
下載回來的檔案即可以正常地解壓縮後使用了。
2014年12月3日 星期三
【分享】解決VirtualBox執行時發生This kernel requires an x86-64 cpu but only detected an i686 cpu的問題
先說我的電腦是Sony VAIO,型號為SVS13AB1GP的筆電,所以有些人遇到的情況會和我不一樣。
在開啟VirtualBox啟動虛擬機器後,竟然出現下面的錯誤訊息:
想想應該是BIOS中設定沒開的緣故,但要進Sony VAIO的BIOS就花了我很多時間,後來終於發現,要在關機的狀態下,按下F12上面的Assist鍵,就會進入救援模式,在這模式下會有選項(或按下F2)進入BIOS。
進入BIOS後,切換到【Advanced】頁籤,找到【Intel(R) Virtualization Technology】後,把【Disabled】改成【Enabled】,儲存後離閞即可,如下:
另外,本來在我的筆電安裝VMWare Player後,每每在啟動虛擬機器後,VMWare Player就會自己關閉,後來發現也是【Intel(R) Virtualization Technology】沒有打開的綠故。
在開啟VirtualBox啟動虛擬機器後,竟然出現下面的錯誤訊息:
想想應該是BIOS中設定沒開的緣故,但要進Sony VAIO的BIOS就花了我很多時間,後來終於發現,要在關機的狀態下,按下F12上面的Assist鍵,就會進入救援模式,在這模式下會有選項(或按下F2)進入BIOS。
進入BIOS後,切換到【Advanced】頁籤,找到【Intel(R) Virtualization Technology】後,把【Disabled】改成【Enabled】,儲存後離閞即可,如下:
另外,本來在我的筆電安裝VMWare Player後,每每在啟動虛擬機器後,VMWare Player就會自己關閉,後來發現也是【Intel(R) Virtualization Technology】沒有打開的綠故。
【筆記】使用Freemake Video Converter來合併影片
有時候我會想把好幾個影片檔合成一個檔案播放,這時,使用Freemake Video Converter只要幾個步驟即可做到。
開啟Freemake Video Converter後,先點按【視訊】來加入要合併的影片檔:
你可以在選擇檔案時,一次選擇多個影片檔一起加入:
若加入的影片在拍攝時的方向是倒的,可點按紅框內所示的按鈕來調整方向:
再來選取右上方的【結合檔案】為【ON】,這時,畫面就會變成下面有階層的樣子:
如上面的下拉選單,這時候可以選擇要不要有轉場效果,若選擇【淡化轉場】,則當要進入下一個影片時,會有一小段前面影片的淡化效果。
最後,再點按下面的轉檔鈕轉成要的格式就完成了。
開啟Freemake Video Converter後,先點按【視訊】來加入要合併的影片檔:
你可以在選擇檔案時,一次選擇多個影片檔一起加入:
若加入的影片在拍攝時的方向是倒的,可點按紅框內所示的按鈕來調整方向:
再來選取右上方的【結合檔案】為【ON】,這時,畫面就會變成下面有階層的樣子:
如上面的下拉選單,這時候可以選擇要不要有轉場效果,若選擇【淡化轉場】,則當要進入下一個影片時,會有一小段前面影片的淡化效果。
最後,再點按下面的轉檔鈕轉成要的格式就完成了。
Labels:
小工具,
影片處理,
Free Video Converter
2014年12月2日 星期二
2014年12月1日 星期一
【筆記】使用MySQL指令來匯入本機檔案到資料庫
現在我們有一個純文字檔,裡面有三筆使用者的資料,我們要匯入到USER資料表中,資料如下:
你可以對這篇文章有興趣:【筆記】使用MySQL指令來匯出資料。
3,Tom,30000 4,Peggy,25000 5,Hurry,35500在Terminal中,先使用下列指令登入mysql:
$ mysql --host=localhost -u root --local-infile=1 -p jpa其中要注意的是
--local-infile
這個參數,在指令說明中描述如下:--local-infile Enable/disable LOAD DATA LOCAL INFILE.將他設為
1
可以讓我們匯入本機的檔案。
mysql> LOAD DATA LOCAL INFILE '/home/bio/temp/user_import.txt' INTO TABLE user FIELDS TERMINATED BY ',';若匯入成功,會顯示下列訊息:
Query OK, 3 rows affected (0.02 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0檢視匯入的資料:
你可以對這篇文章有興趣:【筆記】使用MySQL指令來匯出資料。
Labels:
MySQL
【筆記】使用MySQL指令來匯出資料
最近我發現若使用指示來匯出MySQL中的資料非常方便,尤其是在某些情境下,沒有UI工具可以使用時。
在這裡,來看一下,如何在Ubuntu環境中,使用指示來匯出資料,這些參數在Windows環境中一樣適用。
這裡我使用一個名為「USER」的資料表來做說明,其內容為:
開啟Terminal後,輸入下列指令:
指示輸入後,依要求輸入密碼後,即會把結果匯出到/home/bio/temp/user_export.txt中。
在上列的指令中:
更多說明可以在Terminal執行
檢視匯出的檔案,結果如下:
在這裡,來看一下,如何在Ubuntu環境中,使用指示來匯出資料,這些參數在Windows環境中一樣適用。
這裡我使用一個名為「USER」的資料表來做說明,其內容為:
開啟Terminal後,輸入下列指令:
$ mysql --host=localhost --port=3306 --user=root -D jpa \ --password -e "select * from user" \ > /home/bio/temp/user_export.txt你也可以在select子句中加入where條件來篩選要匯出的資料。
指示輸入後,依要求輸入密碼後,即會把結果匯出到/home/bio/temp/user_export.txt中。
在上列的指令中:
- 使用
-D
來指定要連線的資料庫。 - 使用
-e
來指定要執行的命令。
更多說明可以在Terminal執行
$ mysql --help或
$ mysql -?來了解詳細說明。
檢視匯出的檔案,結果如下:
id name salary 1 Mary 10000 2 John 50000你可能對這篇【筆記】使用MySQL指令來匯入本機檔案到資料庫有興趣。
Labels:
MySQL
【筆記】一個簡單的JAX-RS應用程式範例
這裡使用GlassFish 4來當伺服器,使用它的好處在於在GlassFish的函式庫( <glassfish安裝目錄>/glassfish/modules)中,已經內含支援JAX-RS的函式庫(如:jersey-container-servlet-core.jar等),我不用再另外下載,而且日後可以和其他Java EE元件搭配應用。
這裡使用Eclipse來進行開發。
先在Eclipse新建一個名為「jaxrs-example」的【Dynamic Web Project】專案。
再來在
而在
再來在
一個簡單的JAX-RS應用程式只要上列兩個檔案的設定即可,再來啟動GlassFish並部署程式,成功之後,開啟瀏覽器,並在網址列輸入:http://localhost:8080/jaxrs-example/service/user/bio,網頁應為回應下列訊息:
參考來源:
這裡使用Eclipse來進行開發。
先在Eclipse新建一個名為「jaxrs-example」的【Dynamic Web Project】專案。
再來在
idv.jk.jaxrs
套件下,新增一個名為「UserService.java」的類別:
package idv.jk.jaxrs; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/user") public class UserService { @GET @Path("/{name}") public Response sayHello(@PathParam("name") String name) { String message = "Hello, " + name; return Response.status(200).entity(message).build(); } }其中,宣告在
UserService
類別上的這個@Path("/user")
是跟容器講,若是/user
的URL,就交給我負責。
而在
sayHello
上面的@Path("/{param}")
是說在/user
後面接的URL可視為一個參數,在@PathParam("name")
可以將此參數補捉下來,傳入方法使用,如客戶端使用/user/bio
來做請求,則在sayHello
傳入的name
參數值就會是bio
。
再來在
web.xml
中加入下面程式片段,來設定servlet-mapping
:
這段設定用白話文來講,就是jaxrs-servlet org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages idv.jk.jaxrs 1 jaxrs-servlet /service/*
/service
開頭的請求,都是用org.glassfish.jersey.servlet.ServletContainer
這個類別來負責,而它會去idv.jk.jaxrs
這個套件下去找,有沒有可以負責特定URL的類別,如上列的UserService
類別就會是被設定為負責處理/service/user
的請求,如:http://localhost:8080/jaxrs-example/service/user/bio,而前列URL中的bio
,就會被捉出來當做傳入sayHello
的參數。
一個簡單的JAX-RS應用程式只要上列兩個檔案的設定即可,再來啟動GlassFish並部署程式,成功之後,開啟瀏覽器,並在網址列輸入:http://localhost:8080/jaxrs-example/service/user/bio,網頁應為回應下列訊息:
參考來源:
訂閱:
文章 (Atom)