網頁

2012年8月30日 星期四

Deploy前必備

最近一件事,讓我想起剛創業時在某大電信業的機房Deploy的日子,做到清晨4點所有人都還在辦公室,而幫忙的機房人員在家等待我們做好的好日子。若你跟我一樣是沒有好的系統工程師幫忙,要自己進機房或進入Server去Deploy的苦命工程師,那我分享幾件事吧....(有個預感,我可能又要進機房了....Orz)

進機房Deploy前,有幾件事要注意

  1. 新程式碼記得先壓縮備份好,確認目錄owner及權限是沒有問題的
  2. 程式碼備份在要帶去的usb、Server的ftp或某個目錄(可以http下載或scp可以找到的地方),最差的狀況可能要從測試站的目錄拿取更動的程式碼檔案,而不是預備好的程式碼
  3. 要熟悉Command line操作,別認為機房內的主機有GUI介紹操作
    這部分當然要看你的系統環境,若是Linux系統,就好好練習命令列操作吧
  4. 非系統工程師不用懂太多指令,但基本的tar、 ftp、scp、ssh、wget、chown、 chmod,若程式有version control使用,至少要會直接匯出的指令,例如svn的co或export,git的clone,之前寫了篇CentOS筆記-scp用法,之後再補充其他的好了,重點是想要檔案時,可以用command line的方式就很快取得
  5. 到達現場時,第一件事備份所有舊程式、檔案資料及DB資料,Deploy最重要的永遠是備份、備份、備份、備份、備份~~最好是能備份到另一台Server去或先上傳到測試站上測試過
  6. 除非必要,否則別刪掉原目錄,直接覆蓋通常是最安全的做法(這點純是個人經驗,有些人好像是反過來)

雖然都會確認owner及權限,但常常在測試站上是沒問題,進了Server就開始這邊權限不對,那邊owner怪怪的,不然就是都正確,但你還是不能用,尤其是目錄,所以常常就是還原這個目錄,裡頭的檔案手動一個個換掉,神奇的是,有時還不能用usb上的,得ftp去測試環境拿,有時我在用我的mac時,也多少有這類狀況,我相信windows也可能有

我只能說我不是系統工程師~~我不是系統工程師~~我不是系統工程師~~,我的專業不在此啊~~ 麻煩找專業的來

謎之音:專業的看了看,可能會說這是程式的問題,要問那個工程師,問他是怎麼搞出來的



2012年8月28日 星期二

AdSense-申請 part 2

之前申請AdSense一直馬上就被退回,想想可能是文章數太少,這陣子事情不少,所以累積了不少文章(我的機歪個性也是原因),看看每日讀的人數及文章數都到一個量了,立刻申請~~~

沒想到就收到一封通過初步審查的信了~~ 爽了一陣子,但仔細一看,之前好像有收過類似的,最後還是沒過,收起興奮的心情,仔細看了看信的內容,看到這幾句

重要注意事項:

* 您必須安裝廣告程式碼,我們才能完成審查手續。如果不知道怎麼在 Google 擁有的 API (如 YouTube) 上安裝廣告程式碼,請參考:xxxxx

* 您的廣告開始出現後,請不要點擊自己的廣告,就算是為了測試也不可以,否則就算違反 AdSense 計劃政策 (https://www.google.com/adsense/policies)。


廣告程式碼???我怎都不知道哪來的程式碼.....查了查,發現在blogger上的好處是,直接擺上配置就好,如AdSense 的廣告欄位無痛安裝 (Blogger)這篇所述(這傢伙申請10來次才上,真的是效法國父 @__@ ),細節就這篇就不想寫了,改天再寫,總之
1. 先到“收益”,兩個選項都選“是”就對了
2. 到“版面配置”
3. 點選新增小工具->AdSense(記得最多廣告內容3則、3則連結、2個搜尋框)

這樣就開始等吧,本想說ok了~~ 正爽著,晚上就收到了

感謝您對 Google AdSense 感興趣。

在審查過您的申請之後,我們的專員發現您的申請並不符合我們的計劃條件。因此,我們無法讓您加入我們的計劃。

真的是#@#@$%%~~

這次火了,一定要完成才行!!!!

查了下 ,看起來可能是版面問題,這幾天開始加些讓版面好看點~~再來申請,下次再加上搜尋框,看我能寫幾個part~~

待續.....

參考網址:
請問如何安裝廣告程式碼,才能完成審查手續?
AdSense 的廣告欄位無痛安裝 (Blogger)
申請 AdSense 的幾個建議
官方網站:
如何在我的 Blogger 網站加上搜尋框?

放置廣告建議
最佳化建議

2012年8月25日 星期六

iOS開發筆記-如何讓UILabel的字能置中且在頂端

這陣子有個需求
1. UILabel的字要置中且置頂
2. 能支援多字,自動調整UILabel的高度

只是這樣2個,困擾很久,最後還是找到方式,寫了出來。

UILabel是沒有置又置頂的,但有類似效果的方法如下:


UILabel *label = [[UILabel allocinitWithFrame:CGRectMake(10, 10, 50, 10)];

label.textAlignment = UITextAlignmentCenter; //置中

[label setFont:[UIFont boldSystemFontOfSize:14]]; //設定字型
label.numberOfLines = 0;        //為了讓字能置頂的特別做法
label.text = @"1111111111111";  //隨便一堆字

CGRect frame = label.frame;
CGFloat width = frame.size.width;
//底下調整高度
CGSize maximumSize = CGSizeMake(width, 9999);
CGSize labelSize = [label.text sizeWithFont: [UIFont boldSystemFontOfSize:14]
                                       constrainedToSize:maximumSize 
                                           lineBreakMode:label.lineBreakMode ];

CGRect newframe = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, labelSize.height);
label.frame = newframe;


這樣就可以做到想要的效果了。

參考網址
Vertically align text within a UILabel
Vertical Text Alignment for UILabel?

CentOS筆記-CentOS 6安裝php-mcrypt

今天想安裝一個PHP的framework,遇到兩個問題,一個是權限問題,開到777,一樣無法寫入,最後自己手動加上檔案,就正常了,只有在server上會如此,可能不知道哪有問題了吧,codeigniter就很正常,怪。

第二個是Call to undefined function Laravel\mcrypt_create_iv()

發現是沒有mcrypt,查了查modules也是沒看到,但CentOS的yum指令就是查不到,總不會自行編譯吧,是可以啦~但很不方便...

查了查資料,才知正好CentOS 6.0的yum資料庫沒有,只好先更新套件
1. rpm -ivh ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm

2. yum update

3. yum install php-mcrypt

這樣就行了。

PS. 參考網址上的link有問題,我的download是從底下這網址來的
http://rpm.pbone.net/index.php3/stat/4/idpl/15297742/dir/fedora_6/com/epel-release-6-5.noarch.rpm.html

參考網址
CentOS 6 PHP Mcrypt 支援問題
CentOS 安裝 EPEL (Extra Packages for Enterprise Linux) 套件庫

2012年8月23日 星期四

Tomcat筆記-建置https

這幾天在趕著要處理某個專案,要在Cent OS下建立測試環境,面臨到要在Tomcat上用HTTPS,主站上的Tomcat用的是5.x,測試站上用的是tomcat 6.0,除了要java檔要自動build之外,設定檔也不同,不過會選擇用6.0也是因為https的設定容易。

1. 產生keystore檔,這邊就不多說了,可以參考我列出的網址,記得要用JAVA/bin底下的keytool
指令:keytool -genkey -alias tomcat -keyalg RSA -keystore {檔案置放位置}/server.jks

2. 更動server.xml檔,此檔放在{tomcat目錄下}/conf
用8443當keyword,找到設定的位置,若沒有註解,用“<!-- -->”,註解起來,如下:

<!--
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
-->

加入成

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               keystoreFile="{你剛做好的keystore的檔案位置}" keystorePass="{密碼}"
               clientAuth="false" sslProtocol="TLS" />


3. restart tomcat
回到{tomcat目錄下}/ bin
指令: catalina.sh stop; atalina.sh start

這樣就可以了

參考網址:
http://ssl.wis.com.tw/guide/install_tomcat.asp

2012年8月22日 星期三

Wordpress開發筆記 - 取得特色圖片再加上link

取得post的特色圖片的方式,可以用the_post_thumbnail()來取得,並且加上img的tag,但有時正好只是要link,要改成以下的方式:

1. 先取得post id,link的p($GET['p']),用get_post_thumbnail_id取得id

$image_id = get_post_thumbnail_id($_GET['p']);


2. 在img中放入,範例如下:

<img src="<?php echo wp_get_attachment_thumb_url( $image_id ); ?>" width="195" height="235" />


這樣就行啦

參考網址:
http://wordpress.org/support/topic/the_post_thumbnail-image-sizes
http://codex.wordpress.org/Function_Reference/query_posts

2012年8月21日 星期二

CodeIgniter開發筆記-安裝

安裝CodeIgniter超簡單,先確定server有安裝php,我用的是php 5.3

1. 下載CodeIgniter,目前是2.1.2
網址:http://codeigniter.com/downloads/ 或 http://www.codeigniter.org.tw/downloads

2. 上傳至server上的apache root directory

3. 解壓縮

這樣就可以用了,容易吧

若要放入中文,可至https://github.com/CodeIgniter-TW/CodeIgniter-Language,最底下有安裝方式。
1. 先至system/language
2. git clone https://github.com/CodeIgniter-TW/CodeIgniter-Language.git
3. mv CodeIgniter-Language zh_tw
4. 編輯 applicaion/config/config.php,

找到$config['language'] = 'en';
改成$config['language'] = ' tw-zh';


參考網址:
原文官網:http://codeigniter.com/
中文官網:http://www.codeigniter.org.tw/
中文文件:http://www.codeigniter.org.tw/user_guide/

2012年8月20日 星期一

CentOS筆記-安裝ORACLE(sun) jdk

1. 先到http://www.oracle.com/technetwork/java/javase/downloads/index.html下載需要的jdk

2. 上傳到cent os上(想要直接用wget下載,不過看來都是javascript的轉址動作)
3. chmod 775 jdk-6u34-linux-x64-rpm.bin(我下載的是jdk 1.6)
4. ./jdk-6u34-linux-x64-rpm.bin
5. alternatives --config java(會有選項出現,就選擇自己剛安裝的那個,我的狀況是只有一個)

若不想執行第5步,其實可以用JAVA_HOME的方式,在執行的script前,寫入

JAVA_HOME=(java安裝的目錄)
export JAVA_HOME

[更新]
安裝好是放
/usr/java
在此可以看到剛才案裝好的,就
export JAVA_HOME=/usr/java/(java安裝的目錄)
export PATH:/usr/java/(java安裝的目錄)/bin:$PATH

這樣就可以的

參考網址:
CentOS – Install Java Sun JDK

jQuery Validate中文訊息的設定方式

工程師當久了,尤其是一開始在外商幫忙過,習慣看英文,但出來做了這段時間,客戶還是對中文感覺比較親切,雖然jQuery Validate好用,但放中文上去,就是都不行,找了找才發現,原來是我的問題,哈哈,設中文要如下:

var cnmsg = {
  required: "必選字段",
  remote: "請修正該字段",
  email: "請輸入正確格式的電子郵件",
  url: "請輸入合法的網址",
  date: "請輸入合法的日期",
  dateISO: "請輸入合法的日期 (ISO).",
  number: "請輸入合法的數字",
  digits: "只能輸入整數",
  creditcard: "請輸入合法的信用卡號",
  equalTo: "請再次輸入相同的值",
  accept: "請輸入擁有合法後綴名的字符串",
  maxlength: jQuery.format("請輸入一個長度最多是{0} 的字符串"),
  minlength: jQuery.format("請輸入一個長度最少是{0} 的字符串"),
  rangelength: jQuery.format("請輸入一個長度介於{0} 和{1} 之間的字符串"),
  range: jQuery.format("請輸入一個介於{0} 和{1} 之間的值"),
  max: jQuery.format("請輸入一個最大為{0} 的值"),
  min: jQuery.format("請輸入一個最小為{0} 的值")
};
jQuery.extend(jQuery.validator.messages, cnmsg);


我copy了我參考的網址,再都弄成繁體,我想很多人會想用吧,呵~
網路果然是共享的天堂。

參考網址:
http://blog.csdn.net/ecjtuxuan/article/details/5731130

2012年8月18日 星期六

Wordpress開發筆記 - 設定後台某個選單子選項的權限

最近出了個bug,是權限的問題,對wordpress不熟,找半天,才知道在設定後台menu時,其中的capability,是有差別的,而且現在的版本不再以1~10來分配,不過用到的那個plugin還是以數字來處理,看到裡頭設定為manager_options,想給這個管理者這個權限,又發現放進去後,就多了很多的選單,再找找看來這個使用者是"editor"這角色,只能針對那個功能給。

基本上walk around的解法是,在加上那個功能時,直接設定level,如:

add_submenu_page(basename('showdata.php'), '新功能', '新功能', 7,basename('showdata.php') ,'show_page');


如上述紅色數字,editor的level是7,自然可以使用這個功能。

不過後來的解決是,就挑個只有"Editor"能用的權限,設定進去就行了,例如'edit_private_posts'這個權限,就可以寫成
add_submenu_page(basename('showdata.php'), '新功能''新功能''edit_private_posts',basename('showdata.php') ,'show_page');

這樣不用動到任何的東西。似乎有點取巧,哈哈

參考網址:
http://codex.wordpress.org/Roles_and_Capabilities#manage_options
http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/
http://justintadlock.com/archives/2009/08/30/users-roles-and-capabilities-in-wordpress

2012年8月10日 星期五

iOS開發筆記 - app內直接播放YouTuBe影片

最近有個需要,客戶想要做到的效果是YouTuBe影片在iOS上能
1. 在原有的app中執行,不可離開
2. 全螢幕
3. 橫向看

我的方式是先加入一個ViewController ,命名為YouTuBeController,為了設成橫向,如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == (UIDeviceOrientationLandscapeLeft) );
}

再來是要加入YouTuBe影片,用WebView來載入,我拿足球影片來當範例(取得影片的url,請參考我最底下網址參考的最後一個link,有官方說明)程式碼如下:

UIWebView *youTubeWebView = nil;
if (youTubeWebView == nil) {
        UIScreen *screen = [UIScreen mainScreen];
        CGRect frame = [screen applicationFrame];
        youTubeWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.height, frame.size.width)];
        youTubeWebView.delegate = self;
}

NSString* embedHTML = @"\ 
    <html><head>\ 
    <style type=\"text/css\">\ 
    body {\ 
        background-color: transparent;\ 
        color: white;\ 
    }\ 
    </style>\ 
    </head><body style=\"margin:0\">\ 
   <iframe width=\"%0.0f\" height=\"%0.0f\" src=\"%@?rel=0\" frameborder=\"0\" allowfullscreen></iframe> \
    </body></html>";
    
    NSString* html = [NSString stringWithFormat:embedHTML, youTubeWebView.frame.size.width, youTubeWebView.frame.size.height, @"http://www.youtube.com/embed/yGS6F-buYZw"];

[youTubeWebView loadHTMLString:html baseURL:nil];
self.view = youTubeWebView; //將view設成剛建好的webview

參考網址
How To Play YouTube Videos Within an Application
How to play youtube movie?
How to Watch YouTube Videos on Your iPhone
YouTube APIs + iPhone = Cool mobile apps

官網:
如何嵌入 YouTube 影片