今天碰到一個問題是
寫的shell script 手動run的時候 是正常可以執行的
這個script 主要是呼叫mysql 執行一些資料庫的動作
查了一下發現是一些環境變數的問題
在crontab不認得一些變數--> path裡面所設定的mysql變數
因此先在環境下
下 echo $PATH
可以知道PATH的變數設定
之後再script增加
export PATH="上面得到的設定"
如此就可正常執行
參考
http://stackoverflow.com/questions/14612444/bash-script-runs-manually-but-fails-on-crontab
2013年11月27日 星期三
2013年11月25日 星期一
sql exist vs in
這邊比較一下sql exist 和in的差別
Select * from T1 where x in ( select y from T2 )
LIKE:
select *
from t1, ( select distinct y from t2 ) t2 >
where t1.x = t2.y;
如果使用EXISTS,如同上述的查詢結果
select * from t1 where exists ( select null from t2 where y = x )
LIKE:
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
因此當子查詢比主查詢小的時候使用in ,反之則使用exist
外大內小=IN,外小內大=EXISTS
參考了http://tw.knowledge.yahoo.com/question/question?qid=1306041509015
Select * from T1 where x in ( select y from T2 )
LIKE:
select *
from t1, ( select distinct y from t2 ) t2 >
where t1.x = t2.y;
如果使用EXISTS,如同上述的查詢結果
select * from t1 where exists ( select null from t2 where y = x )
LIKE:
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
因此當子查詢比主查詢小的時候使用in ,反之則使用exist
外大內小=IN,外小內大=EXISTS
參考了http://tw.knowledge.yahoo.com/question/question?qid=1306041509015
2013年8月26日 星期一
ajax post get
ajax post 遇到url長度太長的問題
把url和參數分開帶 不要加在一起
用data存參數 和url分開
Instead of putting the data on the URL you should be putting it in the body of a POST request. You need to add a
data
value to the object you're passing to the ajax function call. Like this:$.ajax({
url: url, type:"POST", data:{pcontent: $(pcontent).serialize()
}
2013年8月25日 星期日
裝飾網頁的 CSS3 小技巧
來源 http://www.icoding.co/2013/08/css3-tricks-to-embellish-web
參考資料:http://www.catswhocode.com/blog/modern-css3-techniques-to-embellish-your-website
裝飾網頁的 CSS3 小技巧
24 八月 2013 NO COMMENT

CSS3 已經發展到讓前端開發者可以很容易的在頁面上加入許多複雜的視覺效果,這篇文章整理了十個 CSS3 小技巧來讓頁面看起來稍微專業一點 

使用 CSS3 將圖片變成黑白圖片
CSS3 定義了 filter 這個功能,所以其實可以很容易的對影片作出各種基本的影像濾鏡。這邊使用的是 grayscale 這個 filter 來讓圖片變黑白,其它還有許多包含 sepia,intert,saturate .. 等。詳細請參考這個範例。
另外其實 filter 不只可以用在 img 上,其實可以用在任何 element 上,比如這個測試就對 iframe 來作出黑白的效果
當然也可以用在 video element 上。

iframe 黑與白: http://jsbin.com/eZinOMI/1/
使用 CSS3 做頁面頂端陰影
很簡單的效果,但專業感加分
但陰影效果不要用太重,太重就 low 了。

http://codepen.io/kswlee/pen/CgvuK
CSS3 偵測 double clicks
你相信真的可以只用 CSS3 就可以偵測 double click 嗎?不信請看 

http://codepen.io/kswlee/pen/amdtw
CSS3 畫三角形
使用 Pure CSS 來作畫這件事情,之前流行過一陣的 Pure CSS Mnion 已經讓大家見證到透過 CSS3 做任意形狀的可能性。但回歸基本我們還是看一下如何做出透過 CSS 做出非矩形的 element 外觀吧。 http://cdpn.io/zbGBp
使用 CSS calc() 函氏
有時候我們只想做針對 CSS value 做一些基本的計算,這時候並不需要為了這件事情寫 JavaScript,一個簡單的 calc() 就可以搞定了。
http://codepen.io/kswlee/pen/FmDHs
使用 CSS3 做文字漸層
CSS3 本身並無直接的 text gradient 可以套用,但可以轉個彎使用 image-mask 搭配 gradient 來達成。 http://codepen.io/kswlee/pen/wctnx
使用 CSS3 關閉 pointer events (包含滑鼠與 touch)
要讓 element 不去收 user input 可以很容易透過一個簡單的 CSS 屬性設定就可以達成。
http://codepen.io/kswlee/pen/HzqAE
使用 CSS3 做縫線樣式邊框
輕鬆做出專業區塊邊框。 http://codepen.io/kswlee/pen/fviJr
使用 CSS3 客製化捲軸 (WebKit only)
多年前只有 IE 提供客製化捲軸,現在 Webkit-based 的也可以。
http://codepen.io/kswlee/pen/ChygD
使用 CSS3 做模糊文字效果
你一定曾經想找出屬性要做出這個效果,但就只是需要一個小技巧把文字顏色設透明
http://codepen.io/kswlee/pen/BchxD

使用 CSS3 做邊角緞帶效果
就是 GitHub 樣式的邊角緞帶
http://codepen.io/kswlee/pen/qIrdv
參考資料:http://www.catswhocode.com/blog/modern-css3-techniques-to-embellish-your-website
2013年8月9日 星期五
Java中计算中文的MD5值
http://www.cppblog.com/jaysoon/archive/2012/08/17/187484.html
Java中计算中文的MD5值
前几天的工作中,需要计算中文的MD5值,计算的函数接口及调用方式如下:
public static String getMD5(byte[] source);
String s = "中文编码";
String md5_value = getMD5(s.getBytes());
String s = "中文编码";
String md5_value = getMD5(s.getBytes());
其中getBytes函数使用平台默认的字符集将string编码为byte序列。由于平台的中文编码方式可能不同,所以同一中文经过getBytes得到的二进制是不一样的。为保证每次得到的结果一致,或者使用指定的编码方式得到byte序列,应该在getBytes中使用参数。
String md5_value = getMD5(s.getBytes("utf-8"));
这样得到的值就是一样的。
2013年7月19日 星期五
[SQL].2個經緯度坐標,計算直線距離
計算坐標距離的 SQL 呼叫範例:
說明2: 原本用來取距離是用 between 取, 但這有一個問題, 就是在正方向角角的, 其實會超過預設的距離.
來源:http://maxtellyou.blogspot.tw/2012/09/sql2.html
SELECT
htx.ID, Longitude, Latitude
,acos(sin(radians(24.80181500042168)) * sin(radians(Latitude )) + cos(radians(24.80181500042168)) * cos(radians(Latitude )) * cos(radians(120.971596999978 - Longitude))) * 6372.8
as rout_distance
, 24.80181500042168 as route_lat
, 120.971596999978 as route_lon
FROM Info htx
WHERE
(Longitude BETWEEN 120.961801499978
AND 120.981392499978) and(Latitude BETWEEN 24.7928168004217
AND 24.8108132004217) order by rout_distance , Type desc , Name
說明1: 24.80181500042168 是我要查詢的中心點 LAT, 120.971596999978 是我的中心點 LON.說明2: 原本用來取距離是用 between 取, 但這有一個問題, 就是在正方向角角的, 其實會超過預設的距離.
來源:http://maxtellyou.blogspot.tw/2012/09/sql2.html
2013年7月3日 星期三
SSH 免密碼登入
文章來源
http://josephjiang.com/article/understand-ssh-key/
http://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password/330740#330740
http://josephjiang.com/article/understand-ssh-key/
http://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password/330740#330740
關於 SSH 免密碼登入,我的第一篇學習文章是參考 Tsung 的 ssh keygen 免輸入密碼。
他的文章很淺顯易懂,我依樣畫葫蘆就成功了。
但問題是公司的限制是必需要有 passphrase、Tsung 的文章並沒有解釋此部份、造成我不打密碼但還是得打 passphrase。
我決定花一些時間把這個原理徹底弄懂,並寫成一篇文章跟大家分享。
他的文章很淺顯易懂,我依樣畫葫蘆就成功了。
但問題是公司的限制是必需要有 passphrase、Tsung 的文章並沒有解釋此部份、造成我不打密碼但還是得打 passphrase。
我決定花一些時間把這個原理徹底弄懂,並寫成一篇文章跟大家分享。
一、基本流程說明
1. 私密與公開金鑰
以 SSH 登入任何主機都必需要打帳號、密碼,除了不方便、另外還增加了被竊取的風險(有些軟體如 winscp 是可儲存的)。
解決的方式就是使用金鑰產生器來產生一筆公開金鑰(Public Key)與私密金鑰(Private Key)對應做免密碼的登入。
使用者只需將公開金鑰的內容附加系統上特定的檔案中,以及在自己的環境指定好私密金鑰,系統在登入流程中即會自動對應,正確無誤即可登入。
讓整個登入流程快速且安全。
解決的方式就是使用金鑰產生器來產生一筆公開金鑰(Public Key)與私密金鑰(Private Key)對應做免密碼的登入。
使用者只需將公開金鑰的內容附加系統上特定的檔案中,以及在自己的環境指定好私密金鑰,系統在登入流程中即會自動對應,正確無誤即可登入。
讓整個登入流程快速且安全。
2. 金鑰種類
但是對應並沒有想像中這麼簡單,就像是木門上只能裝喇吧鎖而無法裝大鎖,不同的主機所能使用的金鑰機制也有所不同:
SSH 有 Protocol 1 及 Protocol 2 兩種,常見金鑰編碼機制則有 RSA1、RSA2、以及 DSA 等三種。
SSH 有 Protocol 1 及 Protocol 2 兩種,常見金鑰編碼機制則有 RSA1、RSA2、以及 DSA 等三種。
3. 保護金鑰的措施
而另外一個問題,如果有人拿到了你的私密金鑰,就相當於他可以在你的主機為所欲為。
保護的措施就是使用 Passphrase(也可以不設)、私密金鑰的密碼,每次要用時就得輸入。
保護的措施就是使用 Passphrase(也可以不設)、私密金鑰的密碼,每次要用時就得輸入。
4. Agent 機制
有 Passphrase 保護當然是安全多了,但原本想用金鑰的好處就是可以省去每次打密碼的步驟,
現在若每次又得打 Passphrase,這樣的好處就沒有了,可能還得多記一套密碼、增加打錯的可能性。
還好有 Agent 機制,他相當是你的管家、我們只要把鑰匙及 Passphrase 請他保管,在登入主機時他就會幫你解決輸入 Passphrase 的問題。
現在若每次又得打 Passphrase,這樣的好處就沒有了,可能還得多記一套密碼、增加打錯的可能性。
還好有 Agent 機制,他相當是你的管家、我們只要把鑰匙及 Passphrase 請他保管,在登入主機時他就會幫你解決輸入 Passphrase 的問題。
二、一步一步教到會
以下就只針對 Mac OSX 及 *nix 系統做介紹(若你是使用 Windows 中的 PuTTY,請先做完步驟一與二,再看這裡):
步驟 1. 產生金鑰
在 Command Line 中你可以使用 ssh-keygen 來產生各種類的金鑰,而我也會鼓勵大家一次把三種金鑰產生好,省得碰到不同系統麻煩。
a. 產生 RSA 1 金鑰
這種金鑰是給比較舊的系統,例如 FreeBSD 4 及以前的版本、是走 SSH Protocol 1 的,最好就使用 RSA 1 這種金鑰
$ ssh-keygen -t rsa1
Generating RSA keys: Key generation complete.
Enter file in which to save the key ($HOME/.ssh/identity): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase [建議要使用 passphrase,最少 9 碼]
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/identity.
Your public key has been saved in /home/username/.ssh/identity.pub.
The key fingerprint is: 6c:96:8c:a8:86:1b:3b:eb:1b:48:8d:3d:8d:c1:4f:dc username@abc.com
b. 產生 RSA 2 金鑰
比較新的系統,如 FreeBSD 5 及之後版本或 Linux,用 RSA 2 或 DSA 這兩種金鑰
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com
c. 產生 DSA 金鑰
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_dsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_dsa.
Your public key has been saved in /home/username/.ssh/id_dsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com
經過這樣的程序,我們總共會有公私鑰共三對:RSA1 ( identity.pub / identity )、RSA2 ( id_rsa.pub / id_rsa )、及 ( id_dsa.pub / id_rsa )。
我過去有一個錯誤的觀念,以為金鑰是對應系統的,所以在對每一台主機得另外產生一次。
事實上如果沒有特殊需求,你可以只用一份、用任一系統產生、並把這一份給保存好即可。希望大家不要跟我有一樣的錯誤囉!
事實上如果沒有特殊需求,你可以只用一份、用任一系統產生、並把這一份給保存好即可。希望大家不要跟我有一樣的錯誤囉!
步驟 2. 將公開金鑰放到主機
你現在在自己的機器上已經有了三對金鑰,接下來我們要把公開的三隻 (*.pub) 放到我們要登入的主機上。
$ scp ~/.ssh/*.pub 你欲登入的主機:~/.ssh/.
接著登入該系統,在沒設定好之前當然還是得乖乖打密碼
$ ssh 你欲登入的主機
系統預設處理放置公鑰的檔案叫做 authorized_keys,所以我們要把剛剛所傳的公鑰附加到這個檔案中:
$ cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 711 ~/.ssh
$ chmod 644 ~/.ssh/authorized_keys
如果沒有意外,你登出再登入主機,就會看到它請你輸入 Passphrase 的訊息。
步驟 3. 設定 ssh-agent
前面所提到,每次都要打 Passphrase 就太麻煩了,所以這裡要設定管家 ssh-agent、以保管私鑰及 Passphrase。
在你每次啟動 shell 後,請照這樣的方式來做:
在你每次啟動 shell 後,請照這樣的方式來做:
a. 啟動 ssh-agent
$ eval `ssh-agent -s`
b. 將私密金鑰交給 ssh-agent 保管:ssh-add
我們將要用 ssh-add 來指定金鑰,如果你都照上面放預設的位置及相同的檔名,那就不用有任何的參數。
$ ssh-add
接著會要求你設定輸入 passphrase,如果三個都一樣,就只要打一次。
Enter passphrase for /home/username/.ssh/id_rsa:你的 Passphrase
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Identity added: /home/username/.ssh/id_dsa (/home/username/.ssh/id_dsa)
Identity added: /home/username/.ssh/identity (username@username.com)
接著再試看看登入已經放好公鑰的主機,應該就可以不用密碼登入了!
c. 自動化流程
如果每次進 Shell 都要做 a、b 動作,可能還是太麻煩且忘記,也因此我去找了可以放在 .bash_profile 的 script ( Joseph M. Reagle Jr ),
一進入 Shell 就會把該做的動作做好,且詢問你 Passphrase:
一進入 Shell 就會把該做的動作做好,且詢問你 Passphrase:
SH_ENV="$HOME/.ssh/environment"
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/lull
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn’t work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
三、公私鑰所需放的機器
我的歸納是,在本機上你必需一直保有這兩份以便後續的再製。而公鑰整理成 authorized_keys,以後有新機器需要登入時一律傳此檔案上去做附加。
而除了本機外,那些機器需要放私鑰呢?我的情況是最常用的那台開發機,因為你可能會利用他去 SSH 其它台機器。不然的話,應該減少私鑰的存放地點,以求安全。
四、延伸閱讀
訂閱:
文章 (Atom)