而我要分享的是從這裡發展出來的圖形化介面工具JD-GUI,它可以用來檢視
.class
檔案的原始碼。
它是限定於非商業使用的,意思是只要不要把它包在產品中去賣錢,在公司或家裡,都可以為個人使用。
先到這裡下載,他有提供三大主要作業系統的版本:
下載安裝後,開啟介面如下:
可以把要解譯的
.jar
檔或.class
檔拖拉至圖示或開啟的視窗即可檢視原始碼:
如:
它也提供了把單一檔案(Save Source)或函式庫內(Save All Source)解譯後的原始碼存檔的功能:
.class
檔案的原始碼。
.jar
檔或.class
檔拖拉至圖示或開啟的視窗即可檢視原始碼:
yuicompressor-x.y.z.jar
,前面的x、y、z表示它的版號,這裡使用2.4.8
來做說明。
test.js
,內容如下:
var add = function(a, b){ var c = a + b; return c; }; var sub = function(a, b){ var c = a - b; return c; }; var multiply = function(a, b){ var c = a * b; return c; }; var divide = function(a, b){ if(b === 0){ return 0; } var c = a / b; return c; }將上列程式碼儲存後,它的檔案大小為260 byte:
-rw-r--r-- 1 bioyang staff 260 4 26 16:05 test.js再來我使用YUI Compressor來進行壓縮:
java -jar yuicompressor-2.4.8.jar test.js -o test-min.js --charset utf-8 --type js上列的指令中,
-o
表示要輸出的檔案名稱,--charset
是指定壓縮的字元編碼格式,--type
是用來告知輸入的檔案是.js
或.css
,它在輸入的檔案副檔名沒指定時才需要。
-rw-r--r-- 1 bioyang staff 195 4 26 16:10 test-min.js使用編輯器來打開
test-min.js
:
var add=function(e,d){var f=e+d;return f};var sub=function(e,d){var f=e-d;return f};var multiply=function(e,d){var f=e*d;return f};var divide=function(e,d){if(d===0){return 0}var f=e/d;return f};可以看到除了壓縮大小處理之後,它也能對程式碼做些類似加密、混碼的動作,這對不想讓別人清楚看到程式碼結構的人,是一個非常方便的功能,但如果不要這個功能的話,可以在執行指令時,加上
--nomunge
這個參數。
.js
檔案愈大時,檔案大小減少的感覺會更明顯,比如我下載一個未壓縮的jQuery函式庫回來,還沒壓縮前的大小為:
-rw-r--r--@ 1 bioyang staff 282944 4 26 16:20 jquery-1.11.0.js我再用YUI Compressor來進行壓縮後,大小變成:
-rw-r--r-- 1 bioyang staff 108081 4 26 16:23 jquery-my-min.js更有感!
限定搜尋結果必須包含某個字或句子 "search" | 用兩個「"」(雙引號)把用於搜尋的字串或句子包起來,這在搜尋歌曲中的某段歌詞或找尋書本中的某些文字很有用,例如: "言師採藥去 只在此山中" 搜尋結果就一定會包含上列字串 |
限定在某個網站或網域下 site: | 可以搜尋結果網頁是在某一個網站或網域下,如:
水龍頭延伸輔助器 site:www.pcstore.com.tw 就會列出某商店街網站中,有「水龍頭延伸輔助器」的結果 |
搜尋某種檔案格式
filetype: |
把搜尋結果限定在某種檔案格式,如pdf,如: filetype:pdf 統計學 結果就會含有「統計學」這幾個字,且為pdf |
在兩個數字範圍內搜尋
.. |
用「..」把兩個數字連起來,搜尋結果會包含介於兩個數字之間的數字,如:
nba冠軍 1975..1980 上列條件會含有「nba冠軍」這幾個字,還有「1975」與「1980」之間的數字 |
SELECT * FROM `emp` WHERE phone NOT REGEXP ('(^[0-9]+$)')結果:
NOT
拿掉。REGEXP
是用來判斷要比對的字串,是否有符合定義的模式,若有符合會回傳1
,若不符合則回傳0
,如:
SELECT 'a' REGEXP '^[a-d]'; -- 結果為 1詳細說明可以參考MySQL的Regular Expressions文件。
table
來實現,但使用table
有一些較不便的地方,如比較難維護,載入時間較久等問題,後來才發現使用div
、ul
、li
、dt
、dl
、dd
等,才是進階(相對於我)的用法。
ul
、li
來做一個例子。
body
中放入下列程式碼:
head
中放入CSS如下:
ul.table{ width:660px; } ul.table > li{ width:200px; height:120px; color:#fff; background-color:#001aea; list-style-type:none; float:left; padding:10px; margin:2px; }效果就會像下面一樣:
var pattern = /ab*c/; pattern.test('abc'); //結果為 true pattern.test('ac'); //結果為 true pattern.test('abbbbc'); //結果為 true pattern.test('adc'); //結果為 false pattern.test('zabbbbcx'); //結果為 true由上面的程式碼可以知道,當在比對模式中有出現
*
時,表示在比對的字串中,在「星號前面的符號有出現0個或多個」的情況下,才能匹配成功。/ab*c/
這個模式比對成功的話,在比對的字串中,要出現a
與c
,且中間包著「0」到「多個」的b
,才是匹配成功。var thousandComma = function(number) { var num = number.toString(); var pattern = /(-?\d+)(\d{3})/; while(pattern.test(num)) { num = num.replace(pattern, "$1,$2"); } return num; } console.log(thousandComma(1234567.89));在上例中,先定義一個正規表示式,如第4行,這個模式表示「一個字串中,如果未3碼為數字,且前面有一個或多個數字,就會和此模式匹配」。
while
迴圈測試1234567.89
這個字串是否與pattern
匹配時,因為1234567
這一片段符合,所以結果是true
,跑到第8行時,對1234567.89
這個字串使用replace
函式時,會回傳1234,567.89
,其中$1
代表符合第一個(-?\d+)
的部份,也是就1234
,$2
代表符合第二個(\d{3})
的部份,就567
。
while
迴圈測試時,1234
這一片段仍然符合,會跑到第8行時,對1234567.89
這個字串,使用replace
函式時,1234,567.89
中的1234
會被替換成1,234
,整個字串變成1,234,567.89
。
while
迴圈測試時,因為已經沒有「未3碼為數字,且前面有一個或多個數字」的片段,此時就會回傳false
離開while
迴圈,上列的thousandComma(1234567.89)
就會回傳1,234,567.89
。
+
不能寫成*
,不然會造成無窮迴圈喔!
mstsc /v: [YOUR_ID][:port]如:
$ softwareupdate -l下列顯示的結果,在這裡發現了Safari有新的更新:
Software Update Tool Copyright 2002-2012 Apple Inc. Finding available software Software Update found the following new or updated software: * Safari7.0.3Mavericks-7.0.3 Safari (7.0.3), 52446K [recommended]再來可以在終端機輸入下列指令來安裝更新所有更新:
$ sudo softwareupdate -ia若要上列指令更多資訊,可以在終端機輸入下列指令查詢:
$ softwareupdate -h就會顯示下列說明它的用法。
:set omnifunc=htmlcomplete#CompleteTags指令輸入後,切換回編輯模式中,先打出
<!
,按下Ctrl + X
後,再按Ctrl + O
,就會出現自動完成的選項:
$ sudo vi /etc/vim/vimrc在檔案的最下方加入下列指令:
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags下面是在Mac設定的方式。
sudo vi /usr/share/vim/vimrc在檔案的最下方加入下列指令後儲存:
syntax on再來新增或編輯,家目錄下的vimrc
vim ~/.vimrc在檔案的最下方加入下列指令:
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags上面是在Mac設定的方式。
:set omnifunc=csscomplete#CompleteCSS指令輸入後,切換回編輯模式中,按下
Ctrl + X
後,再按Ctrl + O
,就會出現自動完成的選項:
$ sudo vi /etc/vim/vimrc在檔案的最下方加入下列指令:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS下面是在Mac設定的方式。
sudo vi /usr/share/vim/vimrc在檔案的最下方加入下列指令後儲存:
syntax on再來新增或編輯,家目錄下的vimrc
vim ~/.vimrc在檔案的最下方加入下列指令:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS上面是在Mac設定的方式。
按鍵 | 作用 |
vim -o FILE1 FILE2 ... | 小寫的「o」,用上下的水平視窗視窗開啟多個檔案。 |
vim -O FILE1 FILE2 ... | 大寫的「O」,用左右的垂直視窗視窗開啟多個檔案。 |
vim -O * |
大寫的「O」,用左右相鄰的垂直視窗視窗開啟目前目錄下的所有檔案。 |
vim -p * |
小寫的「p」,用多頁籤模式開啟目前目錄下的所有檔案。 |
:qa |
關閉多視窗開啟的所有檔案,若不儲存關閉則用!qa 。 |
:行數一,行數二d |
刪除行數一與行數二間文字,包含行數一與行數二,如::11,19d
即刪除第11到19行的內容
|
:行數一,行數二y |
複製行數一與行數二間文字,包含行數一與行數二,如::11,19y
指令將複製第11到19行的內容
|
:new | 在目前所在的視窗下方新增檔案並開啟一個視窗做編輯,如::new ~/temp/test.js
,會在~/temp/下新增一個名為test.js的檔案,並開始編輯 |
:sav | 另存新檔,如::sav /home/bio.young/temp/test.js
在打檔名時,搭配Tab使用,可以更快找到要儲存的路徑 |
:vnew | 新增檔案並在右邊開啟一個新的視窗做編輯 |
:vsp | 在多視窗模式開啟檔案,並在右邊開啟一個視窗做編輯,如::vsp /home/bio.young/temp/test.js
|
Ctrl + w + w | 在多視窗間做切換。 |
Ctrl + w + i/k/j/l | 在多視窗間做上(i)、下(k)、左(j)、右(l)的切換。 |
:tabe |
開啟一個新的頁籤。 |
:tabe FILENAME |
在新的頁籤開啟檔案。 |
gt | 跳到下個頁籤。 |
gT | 跳到上個頁籤。 |
:qa |
關閉多視窗開啟的所有檔案,若不儲存關閉則用!qa 。 |
/ | 在游標以下的部份搜尋字串,如/hello ,就是搜尋檔案中hello 字串,若在要搜尋的字串前加上\c ,則搜尋時不分大小寫,如:/\cHello ,就是搜尋檔案中hello 字串,則不分大小寫 |
d + N(數字鍵) + 空白鍵 | 於游標所在點起刪除N個字元 |
u | 回復前一個動作,如貼上、刪除、修改 |
Ctrl鍵 + r | 重做前一個動作,如刪除、修改 |
r + 字元 | 取代目前游標所在的字。 |
:set omnifunc=phpcomplete#CompletePHP指令輸入後,在編輯模式中,按下
Ctrl + X
後,再按Ctrl + O
,就會出現自動完成的選項:$ sudo vi /etc/vim/vimrc在檔案的最下方加入下列指令:
autocmd FileType php set omnifunc=phpcomplete#CompletePHP下面是在Mac設定的方式。
sudo vi /usr/share/vim/vimrc在檔案的最下方加入下列指令後儲存:
syntax on再來新增或編輯,家目錄下的vimrc
vim ~/.vimrc在檔案的最下方加入下列指令:
autocmd FileType php set omnifunc=phpcomplete#CompletePHP上面是在Mac設定的方式。
Ctrl +
x
開啟x mode後:Ctrl +
o
預設是沒作用的::set omnifunc=javascriptcomplete#CompleteJS
Ctrl + X
後,再按Ctrl + O
,就會出現自動完成的選項:
$ sudo vi /etc/vim/vimrc在檔案的最下方加入下列指令:
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS下面是在Mac設定的方式。
sudo vi /usr/share/vim/vimrc在檔案的最下方加入下列指令後儲存:
syntax on再來新增或編輯,家目錄下的vimrc
vim ~/.vimrc在檔案的最下方加入下列指令:
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS上面是在Mac設定的方式。
read.csv()
這個函式就是其中一種。
假設我在電腦中有一個檔案,名稱為dummy.csv
,其內容為:
a,b,c,d,e 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20在R我可以使用下列函式來讀取它:
> data <- read.csv("/home/javakid/study/r/dummy.csv") > data a b c d e 1 1 2 3 4 5 2 6 7 8 9 10 3 11 12 13 14 15 4 16 17 18 19 20上列程式碼中,
/home/javakid/study/r/dummy.csv
是我存放CSV檔案的路徑。
\
來指定路徑時,要打兩個反斜線\\
,如D:\\stury\\r\\dummy.csv
或是使用正斜線/
來指定路徑,如D:/study/r/dummy.csv
。
:set nu上列指令執行後,會在每一行的最前面顯示行號。 若要取消顯示行號,則在vi的指令模示中執行下列指令:
:set nonu上列的設定方式,在關閉檔案後,就會失效,若要預設顯示行號的話,則要去編輯/etc/vim下的vimrc這個檔案(以Ubuntu環境為例),先開啟檔案來編輯:
$ sudo vi /etc/vim/vimrc開啟後,在檔案的最下方,新增下列指令:
set nu請注意,這裡是沒有
:
符號的!
動作 | 指令 | 備註 |
df -h | 列出目前檔案系統使用狀況 | |
find -type f | 找出目前資料夾中,所有的檔案 | 使用find --help 看更多用法 |
gnome-session-quit | 登出 | 版本11.10以上 |
ps | 查詢程序運作情況 | 參數:-A :所有的程序均顯示出來a :不與終端機有關的所有程序-u :有效使用者相關的程序x :通常與a 這個參數一起使用,可列出較完整資訊 |
sudo shutdown -h now | 關機 | |
wc | 查看檔案的行數、字數等 | 使用wc --help 看更多說明 |
wget | 網頁資料的取得 |
$ wget http://www.vim.org/scripts/download_script.php?src_id=8651下載完成後,檢視檔案,結果檔名變成
download_script.php?src_id=8651
:-O
(大寫的O),空一格後,再加上要儲存的檔名,就可以指定所要儲存的檔名:
$ wget http://www.vim.org/scripts/download_script.php?src_id=8651 -O php.tar.gz下載完成後的檔名:
$ wget --help
$ sudo apt-get install r-base r-base-html r-doc-html上列的指令中,
r-base
是安裝R,r-base-html
和r-doc-html
是安裝R的相關文件。$ R
.txtGradient { z-index: 2; position: relative; height: 50px; margin-top: -50px; overflow: hidden; background: -moz-linear-gradient( bottom, rgb(255, 255, 255) 15%, rgba(255, 255, 255, 0) 100% ); background: -webkit-gradient( linear, bottom, top, color-stop(15%, rgb(255, 255, 255)), color-stop(100%, rgba(255, 255, 255, 0)) ); background: -webkit-linear-gradient( bottom, rgb(255,255,255) 15%, rgba(255, 255, 255, 0) 100% ); background: -o-linear-gradient( bottom, rgb(255,255,255) 15%, rgba(255, 255, 255, 0) 100% ); background: -ms-linear-gradient( bottom, rgb(255,255,255) 15%, rgba(255, 255, 255, 0) 100% ); background: linear-gradient( bottom, rgb(255, 255, 255) 15%, rgba(255, 255, 255, 0) 100% ); }上列主要對我們要用來遮掩的區塊設定漸層的效果,其中
linear-gradient
屬性的設定主要是由下往上用白色來做漸層,這樣就會讓被遮掩的區塊由上往下慢慢變透明的效果。
再來我用一點JavaScript來增加一點動畫效果:Duplicate the circle Because the circle is now a clipping mask, it won’t be visible. We need something to be visible that the user can see. Let’s duplicate the circle. Now we have two circles ontop of each other, one is a clipping mask, the other is a circle with a green stroke.see more
做出來的效果就會像這樣:
10
主要是利用CSS的border-radius
屬性來做圓形的變化,如下列程式的第4、5、6行。padding
屬性來調數字的位置,如下列程式的第13、14、15行:
span.circle{ font-family:Courier, Arial; font-size: 36px; -webkit-border-radius: 40px; -moz-border-radius: 40px; border-radius: 40px; background-color: #0055d4; border: 3px solid #0055d4; color: #fff; display: block; float: left; height: 38px; padding: 7px 8px 13px 8px; text-align: center; vertical-align: top; width: 44px; }上列會分別設
-webkit-border-radius
、-moz-border-radius
、border-radius
是針對不同瀏覽器做的圓角設定,可以參考MDN的說明。