網頁

2012年12月31日 星期一

Javascript學習筆記-Array initial

不管什麼事,總是會忘記,所以才需要記錄,最近太忙,更新沒以前來的多,在這個2012的最後一天,記個最近做的,又很簡單的事,javascript的Array初始化

javascript的Array初始化大概有幾個

<1>
var test = new Array("a", "b", "c", "d");


<2>
var test = new Array();
test[] = "a"
test[] = "b"
test[] = "c"
test[] = "d"


加值進去也可以寫成下述

test[0] = "a"
test[1] = "b"
test[2] = "c"
test[3] = "d"


或用test.push("a"); //效果一樣

<3>
var test = [ "a", "b", "c", "d" ];


若想做成跟map一樣,則

var test = new Array();
test["A"] = "a"
test["B"] = "b"
test["C"] = "c"
test["D"] = "d"




var test = { "A":"a", "B":"b", "C":"c", "D":"d" };

複雜一點,內含陣列的,也可以寫成
var test = {
    "A" : "a",
    "B" : [ "ba", "bb", "bc" ],
    "C" : { id: "ba", label: "bb", text: "bc" },
    "D" : "d"
};


在json上很常用,就這幾種吧

2012年12月24日 星期一

CentOS筆記-開機自動啟動httpd及mysqld

主機放在公司,停電就活生生的被關機了,開機後一堆服務都不在,還是設定一下,開機自動啟動httpd及mysqld

/sbin/chkconfig httpd on
/sbin/chkconfig mysqld on

chkconfig --list |more //可以查看每個服務在哪些level有開

參考網址:
第十八章、認識系統服務 (daemons)-chkconfig
Author 說: phpmailer使用經驗(解決無法寄信的問題)

2012年12月23日 星期日

SQL學習筆記-SET IDENTITY_INSERT

有個案子用的是sybase,正好要重新建置,想說就把資料都備份成SQL出來後,再重新放入就好,沒想到重建好後,insert不進去了,出現下列訊息

ERROR: Explicit value specified for identity field in table 'xxxx'
when 'SET IDENTITY_INSERT' is OFF.


查詢了下才知道,id是primary key,是不能指定的,但我偏偏是備份耶,id是一定會用到的,沒指定到時程式整個混亂,最後找到個解法,但還是不是很好用

set IDENTITY_INSERT table名稱 on
{執行此talbe相關所有sql}
set IDENTITY_INSERT table名稱 on


這樣就可以了


參考網址:
set IDENTITY_INSERT on 和 off 的设置

2012年12月20日 星期四

Mac學習筆記-在Mountain Lion安裝Macport

Mountain Lion上好像不再有port這個好用的command line指令了,但我又需要用到它,只好找找看

先找到MacPorts的官網:http://www.macports.org/,找到Download,看起來是有


按下後就下載了dmg檔可以直接安裝,我個人是安裝在預設的目錄下,但直接打port仍然沒回應,於是我用下列指令建一個link,讓我之後可以直接使用

cd /sbin
sudo ln -s /opt/local/bin/port port


sudo port install pkgconfig

就發現可以安裝成功了

參考網址:
Installing MacPorts
OS X 10.8 Mountain Lion Preview + MacPorts

2012年12月13日 星期四

iOS開發筆記-利用UITableCell取得正確的index

使用tableView時,總會有個問題,就是資料是直接就load進來,但veiw不是,也就是往下捲動後,未呈現者才會load進view,但最近出現個狀況,就是用tag來存放到時要刪除的index,但因為後來才load進來,所以發現超出範圍的tag值只有剛好load到者會被設定,其他變成重新計算,如下圖


說實在搞不懂為什麼,但最近實在太忙,沒時間去細想問題點(大概就出在loadview這function),基本上我要刪除時,是按下按鈕後,找出這按鈕是哪一個row,對應到array中的值時,所以只要取得是點選到哪一列cell就好,改用底下的寫法就可以了

UIButton *btn = (UIButton*)sender;
//取得UITableViewCell
UIView *superView = btn.superview;
while (![superView isKindOfClass:[UITableViewCell class]]) {
  superView = superView.superview;
}
//一定有UITableViewCell,直接指定
UITableViewCell *cell = (UITableViewCell*)superView;

__delItemIndex = [__list indexPathForCell:cell].row;

這就__delItemIndex就是我們要的index值了

2012年11月26日 星期一

iOS開發筆記-橫向model mode啟動

花了一整個晚上的時間查這長久困擾我的問題,就是presentModalViewController似乎無法在橫向時使用,不甘心決定花時間下去找出問題,心中一直想著是否是viewController無法取得,若是,那要如何取得,最後終於找到方法,我的直覺是對的,取得ViewController的方法也很簡單

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//上述的AppDelegate指的是在建立整個專案時,那個唯一的ApplicationDelegate
appDelegate.viewController <-- 就是目標viewController


所以整個code如下,就用下面這幾行就搞定了:
UIViewController *file = [[UIViewController alloc] ......];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

[appDelegate.viewController presentModalViewController:file animated:YES]
[file release];


這花了我一堆時間,我還是太嫩....

參考網址:
iOS模态窗口的实现。(横屏问题)

2012年11月23日 星期五

iOS開發筆記-WebView中點擊link直接開browser以及放在UIScroll中會有的問題

有個需求
  1. 在一個上View載入不知多長的網頁,不要用到WebView的scroll
  2. 點擊上面的link,是開browser瀏覽

基本上在UIWebView Class Reference提到
Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.

不過還是有人提出方法解決,用以下的方式就可以解,可能只是walk around的方式,不過用了至少可以達到我要的需求
webView.opaque = YES;

可以放在UIScroll下後,就解決長度問題,可以用iOS開發筆記-動態更動UIWebView的長度,達到第一個需求

再來第二個,保有WebView目前在看的,要看內容開瀏覽器,在WebViewDelegate中有個function:
(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
可以達到這要求

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;

}

紅字部分就是要求另開app打開url,由os自動決定(似乎就是看預設是哪個app開啟)

參考網址:
UIWebView cannot click link
iPhone: After UIWebView opens external browser, then retruning to app opens it a second time

另外:

2012年11月21日 星期三

iOS開發筆記-動態更動UIWebView的長度

需求:一次載入網頁,動態更動UIWebView的長度

使用UIWebViewDelegate中提供的- (void)webViewDidFinishLoad:(UIWebView *)aWebView,程式碼如下:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
    CGRect frame = aWebView.frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

 
    [self setContentSize:CGSizeMake(self.contentSize.width, self.contentSize.height + fittingSize.height)];
}


我在這邊使用的self是個UIScroll,所以直接設定ContentSize的長寬,這樣就行了

參考網址:
How to determine the content size of a UIWebView?

Spring、J2EE學習筆記-數字百分比呈現,是double? int?

不知道是不是太久沒寫java的程式了,今天只是想寫個呈現百分比的字串,結果....嗯~先這樣講好了,我寫成以下樣子

int x = 20;
int y = 100;
double z = x / y;
Numberformat nf = Numberformat.getPercentInstance();
nf.setMinimumFractionDigits(2);
Sytem.out.println(nf.format(z));

結果是:0.00%

一看就知道是有問題的 orz,改成底下這樣子


double x = 20;
double y = 100;
double z = x / y;
Numberformat nf = Numberformat.getPercentInstance();
nf.setMinimumFractionDigits(2);
Sytem.out.println(nf.format(z));

結果是:20.00%


這....我該說是我沒注意,還是compiler或run time是要寫明....

2012年11月20日 星期二

Spring、J2EE學習筆記-中文在input傳送的亂碼問題

在J2EE中,傳送input資料時,預設是使用ISO-8895-1編碼,英文傳送是沒問題,但中文傳送就會變成亂碼,解決方式就是在tomcat的server.xml中,收

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/XXX/.key" keystorePass="AAAA" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS" />

改成

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/XXX/.key" keystorePass="AAAA" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS" URIEncoding="UTF-8" />

不過,在我的狀況,是用8443,若我使用跟參考網址一樣的8080的那個部分,中文一樣會亂碼,猜測這部分也是要看你實際使用的port

參考網址:
http://wenku.baidu.com/view/4148a2e8f8c75fbfc77db25e.html

如何block submit form by Robots-後續

這篇是繼上篇文章:如何block submit form by Robots的後續,實驗了2~3天,看來都沒有任何的亂七八糟文章進來了,真的有用,我個人是用方法一,但我多加了用css,而不是在tag後寫入display:none,例如

<style>
.xxx{
   display:nonee;
}
</style>
<input name="check" type="text" value="" class="xxx" />

這樣可以達到相同效果,但對機器人而言,要處理就更麻煩

2012年11月19日 星期一

如何block submit form by Robots

最近maintain的一個網站一直被攻擊,但明明那位置要登入才能寫入,查了查原因,看來當初設計有問題,回應部分是不需要登入,但回應又設計成跟文章是一塊的,真是有夠怪,但這次重點在一直有機器人塞廣告進來,客戶不堪其擾,但又不想又要客戶看什麼鳥圖示鍵入文字,所以需求如下:
  1. 擋掉機器人
  2. 不要另外又要鍵入
查了查資料,真有聰明人寫出了一些方式,方法有兩種:
  1. 利用css中的display:none
  2. 利用javascript(但javascript關掉就沒用了)
方法1,利用css中的display:none,例如

<input name="check" type="text" value="" style="display:none" />

這是利用機器人看到input就會填滿,但display:none讓使用者看不到,所以在server端去檢查這變數是否被塞值,來判定是否是機器人,有值就跳掉。

方法2,利用javascript,例如

<form name="myform" method="post" action="empty.php">...</form>

<script type="text/javascript">
var NameInFormTag = "myform";
var ActionURL = "youwant.php";
eval("document."+NameInFormTag+".action='"+ActionURL+"'");
</script>


這樣讀完網頁後,實際要傳值的php存放在瀏覽器中,但機器人看到的是empty.php

實際用方法1,目前看起來還算ok

參考網址:
Protect Your Forms from Spam
One Way to Block Form Submission Robots

2012年11月17日 星期六

iOS開發筆記-Missing Localized Screenshots的處理

Apple store上的蠢事有增無減,承繼上次的upload事件是java問題後,再來一個所謂“Missing Localized Screenshots”。

本來看到這次預設語言有了Traditional Chinese,正在想Apple終於看到我們了,上傳都沒有問題,正在爽時,突然status改成“Missing Localized Screenshots”,完全不知道狀況,以為跟Localizations這個有差,硬是在info.plist中加入Localizations:Chinese (Traditional),重傳依然沒用,查了下才知道,要上傳iphone 5尺寸的screen shot,這是什麼錯誤回應,jobs掛了後,Apple是失神了嗎?


參考網址:
Missing Localized Screenshots Simplified Chinese

2012年11月15日 星期四

資料庫學習筆記-Table is marked as crashed....

最近多災多難,壞事通常一塊發生,昨天主機空間不足,造成網站crash,清出空間後,以為沒事了,但還是有人回報沒法使用,在mysqld的log中發現類以這種log

121114 22:44:51 [ERROR] /usr/libexec/mysqld: Table './xxxxx' is marked as crashed and should be repaired

查了下資料,有工具可以修,但不知道原因為什麼,不過先弄好他吧,指令如下:

REPAIR TABLE `TableName`

這樣就正常了

參考網址:
MYSQL 資料表 顯示 #145 - Table './xxxx/' is marked as crashed and should be repaired

2012年11月13日 星期二

Spring、J2EE學習筆記-HttpOnly設定

有個案子安全檢測來了個底下這個低風險的問題


[1/2] 在階段作業 Cookie 中遺漏 HttpOnly 屬性 


說實在,第一眼看到時,完全不知道是什麼,總之,就是要我處理掉它(內心os:處理掉不知道會有什麼問題)。

查了下資料,Tomcat 7及spring 3後,都可以在web.xml中的session-config去設定,例如:

<session-config>
        <session-timeout>10</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
            <secure>true</secure>
        </cookie-config>
</session-config>

只是,我用的好像是很舊的,但還是有法子,就是在server.xml中的Context加入

<Context docBase="{你的專案路徑}" path="{你的專案路徑}" reloadable="true" useHttpOnly="true"/>

這樣就ok了,查了下是說防止xss的方法之一,只能說年頭要防的東西太多了

參考網址:
Java EE 6.0 的 Cookie 类已经有设置 HttpOnly 的方法
Spring安全控制
How do you configure HttpOnly cookies in tomcat / java webapps?
HttpOnly介绍以及防止XSS攻击时的作用(转)
How do I set httpOnly and secure cookies with Spring Security?

2012年11月11日 星期日

iOS開發筆記-設定User Header Search Paths 記得用雙引號包起來

之前的公司的一個產品我用到static library,對這東西一直是一知半解(現在依然),在使用上常常出錯,常見的就是找不到.h檔,有時build成功了,但使用Archive時,又找不到了,路徑的設定如下:

(自己的project路徑)/Build/Products/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/(static library project folder名)


其中$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)是讓xcode決定是在Debug還是在Release中(這部分我也還是在一知半解中,沒時間好好看)。總之,這設定是ok的,但重點在,沒有雙引號包起來,會造成compiler在處理時,找不到路徑folder,尤其是若Configurations中,像我習慣設定Distribution hoc這樣的字眼,中間有空格,那就是自討苦吃,找半天也不知道錯在哪,在這記下,要記得寫成

"(自己的project路徑)/Build/Products/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/(static library project folder名)"

2012年11月6日 星期二

Eclipse筆記-jdk on mac版本問題

這篇不知道該歸在哪個範圍,主要是因為這篇iOS開發筆記-上傳app發生”an error occurred uploading to the itunes store“所做的動作,造成的後續問題,就是Eclipse打不開了,出來了個畫面



果然是Work around的做法,一個問題解了,另一個問題出來了。這時只能再改回去用1.7才行,ooxx的不知道該怎說,太忙了沒時間去找root cause(一般工程師都會用的藉口),先這樣吧。

2012年11月3日 星期六

LARAVEL開發筆記-使用Route,卻一直無法成功

昨天一直想用Laravel先做出一個網頁,當作一個開端,但只是在route.php上加上

Route::get('hello', function(){
   return 'Hello!';
});


就一直無法成功。
php artisan route:call get hello

發現有成功回傳,但怎做都無法成功,不服氣的一直徹夜查到的結果是

在httpd.conf中加上一段

<Directory /volume/html/booiki/courses_demo>
   AllowOverride All
</Directory>


原來是無法Override掉網址,就完全ok了....我被ko了....orz 昨天真的不是很順,雖然最後因為知識的累積,想起這麼做....

2012年11月2日 星期五

iOS開發筆記-上傳app發生”an error occurred uploading to the itunes store“

一個很蠢的問題,但最近總覺得Apple發生的狀況越來越多....今天上傳app時,發生了以下的問題,以為是認證出錯(太自以為是,沒有先查查google),為此更正了數次的認證,最後Google了下才發現很多人都有這問題


主要的問題在於Java版本,最近正好整個作業系統重灌,當然Java就用最新的1.7(因為Mac OS不再內建Java),而這正好是因為版本太新,查了以下的網址


全都是一樣的解法,如下:

cd /System/Library/Frameworks/JavaVM.framework/Versions

sudo ln -s CurrentJDK /System/Library/Frameworks/JavaVM.framework/Versions/1.5

sudo ln -s CurrentJDK /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0

可惜的是,這服藥我服下後,沒有任何用處,還回應了我
ln: /System/Library/Frameworks/JavaVM.framework/Versions/1.5/CurrentJDK: File exists

說穿了,就是找java version嘛,查了下java查詢的路徑
ls -l /usr/bin/java
回應:/usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

直接
cd /System/Library/Frameworks/JavaVM.framework/Versions

查了底下有1.5、1.5.0、1.6、1.6.0及Current,作了底下的動作
sudo mv Current Current1.7
sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0 Current


再打java -version,就回應
java version "1.6.0_37"

這時再重新上傳就正常了....要命的蠢問題,而且沒法真正解決

2012年11月1日 星期四

CentOS筆記-修改防火牆

做個記錄

修改防火牆的規則
vim /etc/sysconfig/iptables

重啟防火牆
/sbin/service iptables restart

這樣就可以用載入剛才寫的了

下次再來寫防火牆的規則寫法好了....太多事情要做了 orz

2012年10月30日 星期二

LARAVEL開發筆記-安裝

PHP可用的工具超級多,之前朋友介紹Laravel這套,一直因為權限問題而沒成功,找不出系統哪邊出問題,之前解決系統上權限問題(見CentOS筆記-php執行在正確的使用者下,仍回應permission deny的原因之一),回想起這件事,今天就來試了下,果然是同個原因。

Step 1. 下載且解壓縮
到官網,右上角就有個Download按鈕,按了就下載到zip檔,上傳到主機上網站根目錄,再解壓縮,如:
unzip laravel-laravel-v3.2.10-11-g115f59b.zip

git下載
git clone https://github.com/laravel/laravel.git

記得將目錄改成自己要的名稱,例如我是:lav

Step 2. 進入目錄下的application/config/,找到application.php
更動

# 網站根目錄設定
'url' => 'http://localhost/lav/public/',


再執行http://localhost/lav/public/,這樣就ok了


參考網址:
官網:http://laravel.com/
輕量級 A Clean & Classy PHP Framework Laravel 簡介安裝

2012年10月29日 星期一

iOS開發筆記-NSLayoutConstraint crashes ViewController

升級到XCode 4.5後,新增xib檔就會遇到底下的error


查了一陣子,發現是在xib編輯畫面中,多了個新工能“Use Autolayout”


只要將這個勾選拿掉就行了。

說到這,這個有什麼功能呢?好奇心起查了下,這篇Beginning Auto Layout in iOS 6: Part 1/2寫得不錯,該再往前邁進囉 @@

參考網址:
NSLayoutConstraint crashes ViewController [closed]
Beginning Auto Layout in iOS 6: Part 1/2

2012年10月25日 星期四

健康比較重要

昨晚突然間發高燒,還好下午因全身虛脫而去附近中醫看,勉強靠自己度過昨晚,現在全身痛,出門都成問題,還好有平板電腦,讓我可以打打字,最近身體狀況越來越多,得注意了

2012年10月23日 星期二

Wordpress開發筆記-資料內容有html special code又要呈現縮減字數問題

之前維護的一個網站,最近使用者一直在用,所以慢慢的很多問題及外觀問題,一個個接著來,其中最有問題的,就是文章的簡介中有亂碼的問題如下圖:

一看就知道是跟&nbsp;這種特殊字元有關,主要的問題在於,有些文章是用自動產生格式的html碼產生好後再填入值,在文章顯示時是正常的,但若是簡介時,這時就會出現問題了,有些是自動的,有些不是,無法簡單用統一的縮減字數的方法秀出來。

最後的方法只好,先filter掉html,再filter掉special code,再縮減字數,再加上“....”

$content = get_the_excerpt();
$content = html_entity_decode($content,ENT_QUOTES,'UTF-8');
$content = iconv_substr($content,0,50,'UTF-8').'....';


這樣就可以解決大部分的問題。

ps. get_the_excerpt() 是worpdress內建的function。

2012年10月22日 星期一

Mac學習筆記-GIT安裝

最近重灌mac作業系統,發現Git在預設下是沒有的,現在GIT不是主流嗎??

後來看到Git “Command Not Found” Error In Mountain Lion [Quickfix],原來安裝好Xcode就有了,重灌後還沒安裝,果然安裝好了,打開終端機,打入git,就ok了

打入git --version,回應為
git version 1.7.10.2 (Apple Git-33)

看來Xcode 4.5.3是很新的了。

不過,也是有人沒有Xcode,所以又特別看了下其他方式,如Mac Lion 升級內建的 Git 版本,不過一直沒成功,蠻怪的。

後來直接到http://code.google.com/p/git-osx-installer/這邊下載安裝,看起來在Mountain Lion下似乎是還ok的。

不過後來我還是拿掉它了,哈哈哈

參考網址:
Git “Command Not Found” Error In Mountain Lion [Quickfix]
Mac Lion 升級內建的 Git 版本

2012年10月18日 星期四

下SQL從Sybase資料庫中Random取得資料

軟體工程師的日子真是一堆有的沒的學不完,可怕的是根本沒時間從頭看到尾,最後加重學不完的壓力,想想我從來沒有好好學過sql,哈哈哈,不過我還是能用

這次的需求是要Random,但不是很想用程式去Random產生,加上我用的是Sybase,並不是很常見的,只好去找找,找到些資料

Sybase
SELECT column FROM table ORDER BY NEWID()

實際使用,發現重覆的機會蠻高的,大概是沒有下seed吧....,查了些資料,大多都用rand(),但下法複雜許多,也許暫時先這麼做,反正最差也就再用程式去random出id,再select

順便列下其他的

MySql
SELECT column FROM table ORDER BY RAND()

PostgreSQL
SELECT column FROM table ORDER BY RANDOM()

MS Sql
SELECT TOP 1 column FROM table ORDER BY NEWID()


參考網址:
SQL to Select a random row from a database table
Sybase: get random records from a table!!

2012年10月15日 星期一

iOS開發筆記-File is universal (2 slices) but does not contain a(n) armv7s slice


今天在Build以前正常可用的project時,發生以下的問題:

(null): File is universal (2 slices) but does not contain a(n) armv7s slice: iOS/CorePlot_1.0/Binaries/iOS/libCorePlot-CocoaTouch.a for architecture armv7s

看來換成新的xCode依然是問題不少,每次換都有新發現,總之,如下圖,將Build Active Architecture Only改成Yes即可。



看來libCorePlot-CocoaTouch.a的使用只能在armv7以下,這次多了armv7s,所以才有問題

參考網頁:

Blogger瀏覽紀錄突然不見了

怎我的慶祝文一po出去,我的瀏覽記錄就reset了,這是怎麼回事~

Google現在是怎回事,不讓我進AdSense就算了,連瀏覽紀錄都給我reset....!#!#$!$#q#$qr$%%︿%︿

2012年10月13日 星期六

Mac學習筆記-Mac / Mac book pro無法開機的處置方式

想查資料時才發現Apple將原本的文章拿掉了,變得無法解決真不爽,找到了一篇是貼上之前Apple上的原文:mac無法開機?,另一篇是自行整理過的文章:Mac無法開機時的處理

這邊放上原本第 2 課:無法開機原文(轉貼自mac無法開機?

========================================
第 2 課:無法開機
當 Mac 開機時,您會預期聽到熟悉的開機聲音、看到親切的蘋果標誌,最後出現桌面與 Finder。但有時您的 Mac 可能會停在藍色或灰色畫面、出現破碎的檔案夾圖像、發生 kernel panic 情況、顯示閃爍的問號,或者發生其它不正常開機狀況,打亂了您原本的計畫。 

別擔心,這些問題通常不難解決。只要點選下列主題,便可得到疑難解決步驟。若您遇到的問題並未涵蓋於下列,請按一下最後一個連結,以獲得更多疑難解答。 

Mac 根本無法開機

Mac 可以開機,但停在開機畫面不動

Mac 開機後出現黑色文字畫面或出現許多無意義的文字

Mac 開機時顯示閃爍的圖像

Mac 可以開機,但沒有影像

Mac 開機時發出奇怪的嗶嗶聲

這裡找不到我的問題

Mac 根本無法開機
若電腦根本無法開機 — 您沒有聽到開機聲、磁碟運轉聲音或風扇聲 — 請一一嘗試以下步驟,直到解決問題為止。 

確認電源線插入可供應電力的電源插座(若要確認電源插座是否可供應電力,請插入檯燈或其它電器設備的電源線並打開它)。 
確認電源線牢牢地插在電腦與電源插座上(若使用電源延長線,請確定電源延長線上的電源開關已經打開)。 
試試在電腦上插上另外一條電源線(若確定那一條是可以正常使用的)。若電腦可以開機,請更換原來那條電源線(請見“呼叫支援”一節,進一步瞭解如何訂購電腦所需零件)。 
將電腦上所有外接設備一律移除(例如印表機、集線器或 iPod),但保留滑鼠與鍵盤,再開機試一次。 
若您使用 iBook、PowerBook 或 Mac mini,同時按下 Control 鍵、Command 鍵及電源鍵試試能否啟動電腦。 
若您最近加裝記憶體,確定該記憶體已正確安裝。試試先將加裝的記憶體移除,看看電腦是否能正常開機。 
若您使用 iBook 或 PowerBook,需確認電腦的電池已經充飽電,方能開機 — 若電池已無電力,插上電源轉換器可讓電腦開機。 
若您使用 iMac G5,請閱讀這篇“iMac G5: Troubleshooting when it wont turn on”文章,以獲得進一步的疑難解決步驟。 
若嘗試以上步驟之後,電腦還是無法開機,請呼叫支援。 
Mac 可以開機,但停在開機畫面不動
若 Mac 可以開機,但停留在空白的藍色或灰色畫面,或畫面上只出現開機進度指示,請一一嘗試下列解決方式,直到解決問題為止。 

可能有不相容的協力廠商開機項目。採取以下方式以暫時停用開機項目,看看電腦是否能正常開機:
將電腦關機。 
按下電源鈕,立即按住 Shift 鍵不放,以“安全模式”開機。 
當您看到“安全啟動”畫面,放開 Shift 鍵。 
當電腦完成開機,將協力廠商的檔案項目拖出“/資源庫/StartupItems”與“/系統/資源庫/StartupItems”檔案夾。 
重新啟動電腦,看看是否能正常開機。 
某個不相容的登入項目可能是引發此症狀的病因。採取以下方式移除項目,看看電腦是否能正常開機:
將電腦關機。 
按下電源鈕,立即按住 Shift 鍵不放,以“安全模式”開機。 
當您看到“安全啟動”畫面,放開 Shift 鍵。 
電腦完成開機後,由“蘋果”選單中選擇“系統偏好設定”。 
按一下“帳號”,然後點選“登入項目”標籤頁。 
選擇所有登入項目,按下減號 (-) 按鈕以移除這些項目。 
重新啟動電腦,看看是否能正常開機。 
若您的電腦上已連接乙太網路線,請先暫時將它拔起,然後重新啟動電腦,看看是否能正常開機。 
試試重新設定一些偏好設定檔案,請進行以下步驟:
將電腦關機。 
按下電源鈕,立即按住 Command 鍵及 S 鍵不放,以“單一使用者模式”開機。 
當您在螢幕上看到白色文字出現,放開按鍵。 
在提示符號後,輸入 mount -uw / 
按下 Return 鍵。 
然後輸入 mv /Library/Preferences/com.apple.loginwindow.plist preferences2.old 
按下 Return 鍵。 
輸入 mv /Library/Preferences/com.apple.windowserver.plist preferences3.old 
按下 Return 鍵。 
輸入 reboot 
按下 Return 鍵。此時 Mac 應該可以正常開機。 
若 Mac 還是在開機到一半停止,請參考“Your Mac wont start up in Mac OS X”這篇文章以採取更多疑難解決步驟。 
Mac 開機後出現黑色文字畫面或出現許多無意義的文字
Mac 開機時,您可能會看到一個黑色文字畫面,以多國語言顯示“You need to restart your computer”。這就是所謂的“kernel panic”,這種類型的錯誤訊息可能是由於軟硬體受損或不相容造成的。這也有可能在桌面圖片最上方出現一串黑底白字的意義文字。 

在大部分的情況下,只要重新啟動電腦,就可以解決 kernel panic(按住電源鈕不放,直到 Mac 關機為止,等 10 秒鐘過後,再按一下電腦鈕以再度開機)。然而,若這個情況不斷發生,請利用以下步驟解決問題:

首先,想想 kernel panic 發生之前您做了些什麼。安裝了新軟體或新記憶體?是否因為看到警告或錯誤訊息才重新開機?是否因為應用程式停止回應,才讓您重新開機? 
若您安裝了任何新硬體(例如加裝記憶體、新擴充卡,或新的周邊設備),請將電腦關機,移除新硬體(或是拔開其連線),然後重新啟動電腦。若電腦可以正常開機,那就要聯絡該硬體的經銷商。這可能是某個新驅動程式造成此問題;請參考下一個步驟來移除軟體,看看是否能解決問題。 
若剛安裝協力廠商軟體,試試採取以下方式反安裝:
重新開機,開機時立即按住 Shift 鍵,由光碟開機,直到見到“安全啟動”畫面為止。 
使用協力廠商原本的安裝程式,將最近安裝的軟體移除,或找到該軟體與所有相關偏好設定、驅動程式等檔案,將它們移到垃圾桶。 
若您搞不清楚最近安裝哪一個軟體,請以列表顯示方式打開“/資源庫/StartupItems”及“/系統/資源庫/Extensions”檔案夾,按照修改日期排序。 
暫時移除所有最近修改過的協力廠商 .kext 檔案,然後重新啟動電腦。 
利用“磁碟工具程式”來修復硬碟與使用權限:
將 Mac 隨機附贈的“軟體安裝”光碟放入光碟機中。 
重新開機,並立即按住 C 鍵,由光碟開機。 
看到“安裝程式”畫面時,自“安裝程式”選單中,選擇“打開磁碟工具程式”。 
在左方面板中選擇磁碟卷宗,點選“修理工具”標籤頁,然後按下“修復磁碟”。 
當“磁碟工具程式”完成磁碟修復工作,按下“修復磁碟權限”。 
完畢後,由“蘋果”選單中選擇“重新開機”以重新啟動電腦。 
已損毀的開機項目或登入項目可能會造成 kernel panic。若要找出有問題的項目:
按下電源鈕,立即按住 Shift 鍵不放,以“安全模式”開機。 
由“蘋果”選單,選擇“系統偏好設定”。 
按一下“帳號”,然後點選“登入項目”標籤頁。 
注意您擁有的登入(開機)項目。然後選擇其中一個項目,按下減號 (-) 按鈕將它移除。 
重新啟動電腦。若可以正常開機,將登入項目一次一個加回“登入項目”列表,然後登出再登入,一次次測試。若發生無法開機的問題,剛剛加入的那個項目就是罪魁禍首。 
Mac 開機時顯示閃爍的圖像
有時當您試著開機,Mac 可能會顯示空無一物但只有一個問號或閃爍圖像的畫面。這是電腦正在告訴您,它找不到用來開機所需的系統軟體。 

有時閃爍圖像只是暫時性的,然後您的電腦就會照著正常程序開機;有時,Mac 卻無法繼續完成開機程序。通常,您需要做的就是提醒它系統軟體在哪裡。這裡是如何解決這些情況的方式。 

My Mac 在稍微停滯之後,即正常開機 
由“蘋果”選單,選擇“系統偏好設定”。 
按一下“啟動磁碟。” 
在面板中選擇您的 Mac OS X 卷宗。 
Mac 無法開機 
置入 Mac 機附贈的“軟體安裝”光碟。 
重新開機,立即按住 C 鍵不放,以光碟開機。 
看到“安裝程式”畫面時,自“安裝程式”選單中,選擇“打開磁碟工具程式”。 
在左方面板中選擇開機磁碟卷宗,點選“修理工具”標籤頁,然後按下“修復磁碟”。 
完成後,重新啟動電腦。 
若您仍然看到閃爍的問號,請試試:

重新開機,立即按住 X 鍵不放。 
電腦將開機直到灰色螢幕出現,然後再度重新開機。 
在 Mac 第二次開機後,放開 X 鍵。 
若這方法無效,試試重置電腦的 PRAM(parameter random access memory,參數隨機存取記憶體),然後重複以上按下 X 鍵以後的步驟。 

重新啟動電腦,在灰色螢幕出現以前,立即同時按下 Command、Option、P 與 R 鍵不放。 
繼續按住這四個鍵,直到第二次聽到開機聲。 
放開這些按鍵,讓您的電腦按照正常程序開機。 
若您還是看到閃爍的問號,請呼叫支援。 

Mac 可以開機,但沒有影像
若 Mac 可以開機(您可以聽到開機聲,以及風扇與磁碟運轉的聲音),但在顯示器上看不到任何色彩或影像,請一一嘗試下列步驟,直到解決問題為止。 

若 Mac 為內建螢幕機種(iMac、eMac、iBook、PowerBook): 

重置電腦的 PRAM(parameter random access memory,參數隨機存取記憶體): 
重新啟動電腦,立即同時按下 Command、Option、P 與 R 鍵不放。 
繼續按住這四個鍵,直到第二次聽到開機聲。 
放開這些按鍵,讓您的電腦按照正常程序開機。 
試著重置電腦的 PMU(Power Management Unit,電源管理單元)。重置步驟依蘋果電腦機種而異。若要知道對於您的電腦該採取什麼樣的步驟,請至蘋果電腦的支援服務網站,在搜尋欄位中輸入 computer reset pmu (computer 這裡輸入您電腦的機型 — 例如,iMac G5 或 PowerBook),以便找到相關說明文章。 
由“軟體安裝”光碟啟動電腦:
將電腦隨機附贈的“軟體安裝”光碟置入 Mac。 
重新開機,立即按住 C 鍵不放,以光碟開機。 
若由光碟開機時可以看到影像,可能是軟體的問題。利用 Mac OS X 安裝程式的“存檔並安裝”功能,以重新安裝 Mac OS X。這種安裝方式將安裝全新的 Mac OS X,但也不會遺失電腦上的任何資料,因為這些資料已經先存檔起來。 
若您試過以上所述所有步驟,但電腦仍無法顯示影像,請呼叫支援。 
若 Mac 為外接螢幕機種(Power Mac、Mac mini): 

確認顯示器已打開並有電源,顯示器的電源線也插入確實能夠提供電力的電源插座裡,並牢牢連接著。(若要檢查插座是否提供電源,插入檯燈或其它電器設備試試。) 
確認電腦視訊顯示埠的接線端與螢幕的接線端均牢牢地接上。 
檢查視訊連接線接頭的針數,確定完全沒有彎曲或損毀。 
若您有另外一台螢幕,將它接上您的電腦。若這樣做可以看到影像,請更換您原來的螢幕。 
重置電腦的 PRAM(parameter random access memory,參數隨機存取記憶體): 
重新啟動電腦,立即同時按下 Command、Option、P 與 R 鍵不放。 
繼續按住這四個鍵,直到第二次聽到開機聲。 
放開這些按鍵,讓您的電腦按照正常程序開機。 
試著重置電腦的 PMU(Power Management Unit,電源管理單元)。重置步驟依蘋果電腦機種而異。若要知道對於您的電腦該採取什麼樣的步驟,請至蘋果電腦的支援服務網站,在搜尋欄位中輸入 computer reset pmu (computer 這裡輸入您電腦的機型 — 例如,Power Mac 或 Mac mini),以便找到相關文章。 
由“軟體安裝”光碟啟動電腦:
將電腦隨機附贈的“軟體安裝”光碟置入 Mac。 
重新開機,立即按住 C 鍵不放,以光碟開機。 
若由光碟開機時可以看到影像,可能是軟體的問題。利用 Mac OS X 安裝程式的“存檔並安裝”功能,以重新安裝 Mac OS X。這種安裝方式將安裝全新的 Mac OS X,但也不會遺失電腦上的任何資料,因為這些資料已經先存檔起來。 
若您試過以上所述所有步驟,但電腦仍無法顯示影像,請呼叫支援。 
Mac 開機時發出奇怪的嗶嗶聲
若 Mac 在開機過程中發出嗶嗶聲,通常代表著記憶體的問題。一般而言,這個問題會發生在在電腦上加裝新記憶體或更換原有的記憶體之後。這裡會說明如何解決這些嗶聲所代表的問題。 

嗶一聲—您的電腦並未偵測到任何記憶體。首先,確定記憶體已經牢牢插好。若您曾更換過電腦的記憶體,請將 Mac 關機,將現用的記憶體換回原來的記憶體,然後重新開機。若這樣做電腦在開機時就不發出任何嗶聲,表示需換下您新裝的記憶體。若這樣做還是發出嗶聲,請呼叫支援。 
不只一聲嗶聲—您的記憶體可能已損壞,或與您的電腦不相容。首先,確定記憶體已經牢牢插好,並驗證它相容於您的 Mac。若檢查無誤,將電腦關機,移除所有非原廠記憶體(若您已移除原廠記憶體,請重新將它插回去),然後重新啟動電腦,確認是否能正常開機。若這樣沒有聽到嗶聲,將 Mac 關機,一次一條將記憶體插回去。若您聽到嗶聲,代表最後安裝的那一條記憶體就是罪魁禍首。請聯絡記憶體經銷商。 
若您確定記憶體絕對相容於電腦,且品質無虞,也有可能是您的 Mac 需要維修服務。若您試過以上所有疑難解決步驟,確認不是記憶體損壞,請呼叫支援。 

這裡找不到我的問題
若您遇到其它開機問題並未列在這裡,那麼在我們龐大的技術文章資料庫中也許有方法能夠解決您的困擾。請務必參訪我們的支援服務網站,在右上角的搜尋欄位中輸入部分關鍵字。 

我們的搜尋引擎會找出所有符合您搜尋準則的文章與其它網頁。您可以在這裡進行進階搜尋,獲得更貼近您問題的較佳結果。若您還是無法自行解決問題,請呼叫支援。 

回到“疑難解決 101”目錄 第 3 課:周邊設備的困擾 
首頁>支援服務>Mac 101>疑難解決 101>無法開機

========底下為舊文=========
前陣子我的mac掛點,沒想到mac也會這樣,但我只知道怎重開windows @@",這時還好有ipad,趕緊上網查查,找到官網的Trouble shot~ 第 2 課:無法開機,內容太多,不一一貼過來了,大伙就直接去看,畢竟官網會隨時更新

心情好多了 哈哈

2012年10月12日 星期五

jQuery開發筆記-Travel

jQuery是非常好用的javascript的library,現在沒它我還真的寫不大出來好用的javascript,這邊做個筆記,主要是剛在用時,想要找上一個及下一個元素,及簡寫和全寫的記錄

等待load完再run
$(function(){ 程式內容 });
jQuery(document).ready(function(){ 程式內容 });

往上一個元素找
$(expression).prev([expr]);
jQuery(expression).prev([expr]);

往下一個元素找
$(expression).next([expr]);
jQuery(expression).next([expr]);

遞迴所有取得的元素
$(expression).each(function(){
    alert($(this).html());
});
jQuery(expression).each(function(){
    alert(jQuery(this).html());
});

取得子元素再一個個處理,例如要取得table下每個tr,有底下三種做法
直接在expression輸入目標
$("table tr").each(function(){
alert($(this).html());
});
jQuery("table tr").each(function(){
   alert($(this).html());

});
//其中table tr表示在table底下的第一層tr
//改成table > tr,這樣是限定tr在table接下來的第一層子結點,中間不能有其他不同的tag

使用children(這是tr為子結點時,一般也一定是)
$("table").children("tr").each(function(){
alert($(this).html());
);
jQuery("table").children("tr").each(function(){
   alert($(this).html());
});

//使用find(這方式是找尋table底下符合tr的子結點),效果如同第一種的$("table tr")
$("table").find("tr").each(function(){
    alert($(this).html());
});

jQuery("table").find("tr").each(function(){
    alert($(this).html());
});

參考網址:
jQuery 篩選元素 (Traversing)

iOS開發筆記-更換新的開發認證

iOS在申請時分個人及公司,公司雖然在申請時比較麻煩,但它的Member team可以直接請人加入,依那個人的權限,可以直接控制Provisioning Portal及iTune Connect,但個人是容易申請,但真的就是個人了,換電腦時,記得要將當時產生出來的Cert私鑰匯出到新電腦,否則只有重新來的地步

最近幫朋友一個案子,就是原案是別人做,但他申請時是個人,所以認證全都要重來 @@。以下就是做法

Step1. 登入iOS Dev Center
link: https://developer.apple.com/devcenter/ios/index.action

Step2. 點擊iOS Provisioning Protal



Step 3. 點擊Certificates


Step 4. 產生認證
應用程式 > 工具程式 >鑰題圈存取

選“憑證輔助程式”> “從憑證授權要求憑證”,使用者電子郵件及CA電子郵件都打入要用的電子郵件位址,再來就“下一步”即可。


以下是apple官方的做法
How to create a development certificate:

1. Generate a Certificate Signing Request (CSR) with a public key
In your Applications folder, open the Utilities folder and launch Keychain Access.
Choose Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.
In the Certificate Information window, enter or select the following information:
In the User Email Address field, enter your email address
In the Common Name field, enter your name
In the Request is group, select the Saved to disk option
Click Continue.
The Certificate Assistant saves a Certificate Signing Request (CSR) file to your Desktop.
The public/private key pair will be generated when you create the Certificate Signing Request (CSR) if you use the Key Chain Assistant to create the CSR.

2. Submit the CSR through the Provisioning Portal.
Click the Development tab
Upload the certificate by choosing the file
Click Submit

Step 5. 點擊Development,Revoke原本的認證再上傳剛才產生的認證即可

Step 6. 點擊Distribution,Revoke原本的認證再上傳剛才產生的認證即可

Step 7. 若原本已存在的Provisioning Profiles不需要刪除,只要重新修改,指定到新的認證就好

2012年10月9日 星期二

iOS開發筆記-原來誤會了UIAlertViewDelegate的alertViewCancel

好一陣子沒法好好寫的個筆記,事情都是成堆進來,不然就是浪費在無謂的事情上,例如這篇就是一例 orz

今天寫個function,是多個request發出去後,若沒有回應,則Alert個訊息出來,所以很簡單的如下寫了


UIAlertView *_alert =   [[UIAlertView alloc] initWithTitle: @"提醒" message: @"網路連線有問題" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
_alert.delegate = self;  //這個應該是多餘的
[_alert show];
[_alert release];


因為是多個request可能都回傳fail,所以先設定這個class實作UIAlertViewDelegate再改成


if (__alerting == NO) {
    __alerting = YES;
    UIAlertView *_alert =   [[UIAlertView alloc] initWithTitle: @"提醒" message: @"網路連線有問題" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
    _alert.delegate = self;
    [_alert show];
    [_alert release];
}



- (void)alertViewCancel:(UIAlertView *)alertView
{
    NSLog(@"Cancel!!");
    __alerting = NO;
}

本以為這樣是ok的,試半天都無效,看到另一個function: - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex,想想該不會預設cancel按鈕是index 0,alertViewCancel是另外一件事吧,再寫出

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"button index: %i",buttonIndex);
    if (buttonIndex == 0) {
        __alerting = NO;
    }
}

這次就如我所想的了,回頭看alertViewCancel這function,找了找文件,才知道這是system去呼叫的....莫名其妙浪費一堆時間 orz

2012年10月4日 星期四

Wordpress開發筆記-修改密碼

早上為了要重設wordpress的密碼,搞了好久,以往直接去資料庫設定的方式居然行不通,總之,先講有三種方法

  1. 直接點選在登錄頁面下的“忘記密碼”,會再要求你輸入帳號或密碼
    但我正好沒設email...
  2. 用phpmyadmin進資料庫去設定,找到wp_user,找到自己的帳號,password那欄記得改用MD5
    不過不知道為什麼,我還是沒法設定
  3. 最後,也是我成功的方法,就去找到index.php,在第一行(或任何地方)加入
    $user = get_userdatabylogin('管理者帳號');
    wp_set_password('新密碼',$user->ID); 

真的氣死人了....

參考網址:
WordPress密碼健忘症群?註冊Email失憶症?輕鬆重設你的WP密碼!

2012年10月3日 星期三

IIS上不能使用ajax回應給html, htm的網頁

最近實在太忙,一堆草稿在文章中,堆到91篇了,但~這篇還是新加的,噗!幫朋友做了一個mail的功能,在他的虛擬機器上跑得很開心,一到客戶那邊就夭折了,原因是客戶用的是IIS,老天我還真沒用過,一直回應405,本以為是 mail問題,但客戶在php.ini設好stmp後就ok了,但405還是一直出現,查了查看到這篇Query富客户端框架 DWZ 之 Http 405原因是IIS不允许ajax访 html后缀的网页,才知道是IIS本身的問題,這篇寫的很詳盡。再附上HTTP error code好了,免得以後要找


參考網址:
Query富客户端框架 DWZ 之 Http 405原因是IIS不允许ajax访 html后缀的网页
網頁開發人員應了解的 HTTP 狀態碼

2012年9月26日 星期三

GIT筆記-新建一個repository

$ mkdir /path/to/your/project
$ cd /path/to/your/project
$ git init
$ git remote add origin {server的git repository}//若有server的話,連接到server的repository
$ echo "# This is my README" >> README.md
$ git add README.md
$ git commit -m "First Commit. Adding a README."
$ git push -u origin master

參考自:bitbucket的建置說明

2012年9月24日 星期一

CentOS筆記-postfix服務與php mail()

最近在解決送信的問題,CentOS 6上執行PHP 5.3的mail(),要利用postfix來送信,明明  postfix己經啟動,但仍然是無法送信。說實在我不熟悉mail server的設定,但所有的事情都一樣,有問題就先找log,所以先找找log在何處,搜尋網路上的資料,才知在/var/log/maillog。看到底下這個錯誤:

postfix/sendmail[10710]: fatal: chdir /var/spool/postfix: Permission denied

蠻怪的,怎會是權限問題,再找了找資料,看到這個Posftix Permission denied problem
嗯,我也是要fast solution。

先用getsebool -a | grep httpd_can_sendmail看看目前設定,果然結果是:httpd_can_sendmail --> off

就用setsebool httpd_can_sendmail 1,再/sbin/service postfix restart及/sbin/service httpd restart

就可以發送了。

不過,因為是fast solution,沒考慮到什麼資安問題,預設是off,也許要注意一下有什麼狀況

參考網址:
建置 POSTFIX 伺服器
[請益]postfix之log解析問題
請問postfix怎樣查錯呀?
Posftix Permission denied problem
setsebool指令
SELinux Booleans

2012年9月22日 星期六

CentOS筆記-php執行在正確的使用者下,仍回應permission deny的原因之一

今天真的學到一課了!!!!

明明網站的目錄權限是770,user及group都apache的情況下,無法在此目錄建立任何資料,可以看到不能建立、修改、刪除。

利用echo `whoami`來取得php的執行user,看是不是有錯,但仍是apache,是沒有問題的,雖然如此但設定成777也無法存取,只好猜測是否有多出來的權限設定,先試用了getfacl,也沒問題,最後找到File permissions with no sense (Linux, Apache)這篇,猜測是restorecon的問題,再找到鳥哥-restorecon文中所提到重設 SELinux 安全性本文,執行步驟如下:

Step 1: 將安全性文本都回到預設值
restorecon -Rv {目錄}

Step 2: 將類型改成httpd_sys_content_t
chcon -R -t httpd_sys_content_t {目錄} //-R是目錄下所有目錄都要更動

這樣就可以回復成正常的apache可讀取權限

耗了我3個小時的時間去處理~~~@@"

參考網址:
File permissions with no sense (Linux, Apache)
鳥哥-restorecon

2012年9月21日 星期五

Wordpress開發筆記-程式發送簡訊

有個客戶的老闆聽說有強迫症,希望每次有問題po上來時,都要能馬上知道,為了解決這症頭,就提出用簡訊來解決好了,為此,找了家簡訊公司先登記,我用的是台灣簡訊,主要是朋友介紹他有用過,跟那幾家大廠(例如:中華xx啦)便宜太多了,一千封980的樣子,加上API簡單,就介紹給這位客戶了,先申請帳號->存值,再來就可以發送了(當然我要幫他把功能做上去)。

他的API還蠻簡單易用的,那案子用的是wordpress,就直接使用wp_remote_post來處理即可(範例用的是fopen,也可以用curl來處理),唯一的缺點就是,一次一個手機

$message = '123456';

$phone_lists = Array('09xxxxxx','09xxxxxx');
foreach($phone_lists as $phone_no) {
  $response = wp_remote_post( 'http://api.twsms.com/smsSend.php', array(
    'method' => 'POST',
    'timeout' => 45,
    'redirection' => 5,
    'httpversion' => '1.0',
    'blocking' => true,
    'headers' => array(),
    'body' => array( 'username' => 'test', 'password' => '123456', 'mobile' => $phone_no, 'message' => urlencode($message) ),
    'cookies' => array()
    )
  );
  if( is_wp_error( $response ) ) {
    echo "<div'>簡訊傳送失敗</div>";
  } else {
  if ($response['response']['message'] == 'OK') {
    echo "<div'>簡訊傳送成功</div>";
  }
}

2012年9月19日 星期三

vim筆記

vim在linux系統上是好用到不行的編輯器,功能之強大到我完全不知道他能幹嘛,但他能做非常多的事,太多了,從朋友Beakdoosan's Weblog那邊轉貼過來....


## 移動 ##
1.往右找第一個n開頭的字: fn, 反方向(向左): Fn
2.游標移動到目前畫面的最上方, 中間及最下方,分別是H,M,L
3.上一頁:C-U or C-B, 下一頁:C-D or C-F
4.游標移動到整個文件的n%位置: n%, 列如 50%
5.找到對應的括號: %
6.將游標目前位置移動到整個畫面的中間位置: zz
7.標記目前游標位置: m[a-z], 回到標記位置: '[a-z], [a-z]代表26個標記名稱, 列出所有標記: marks

## 搜尋 ##
1.往下找: / 往上找: ?
2..*[]^%\/?~$ 這些符號有其他意義,若要搜尋這些符號必須用\規避
3.往下找下一個符合項目: n,反方向: N
4.搜尋不分大小寫: set ignorecase, 反之: set noignorecase
5.以目前游標所在的字當key word搜尋: *
6.搜尋斷句符號: 開頭\<, 結尾\>, 例如:\當條件搜尋時,只會找the而不會找到there
7.搜尋支援正規表示式

## 常用操作 ##
1.當利用dd或x刪除時,其實vim會將刪除的資料除存起來,可利用p貼上(p:貼於游標下, P:貼於游標上)
2.複製整行: yy, 複製2個單字: y2w(會包含單字後方的空白, 若不要空白用ye), 從游標複製到最後: y$
3.複製一整行到剪貼簿上(如此可以任意貼上到不同的應用程式): "+yy, 若要複製部份文字要配合 virtual mode使用
4.將剪貼簿的資料貼到vim: "+p
5.取代: r(取代一個字) or R(取代直到你按ESC)
6.置換大小寫: ~ (可結合virtual mode整批修改)
7.向前刪除一個字元: X, 向後刪除一個字元: x
8.從游標處刪除到行尾: d$ or d
9.從游標前刪除到行頭: d^ or d
10.刪除一整行:dd, 向後刪除一個單字:dw, 刪除游標處一整個單字: daw
11.接續下一行: J
12. 全部取代: %s/BEGIN/LEFTCB/g

## 模式的切換 ##
1.在游標處進入insert mode: i
2.在游標下新增一行並進入insert mode: o
3.在游標上新增一行並進入insert mode: O
4.將游標移動到最前面後進入insert mode: I
5.將游標移動到最後面並進入insert mode: A
6.在游標後方進入insert mode: a
7.以字元式進入virtual mode: v, 以行式進入virtual mode: V, 以區塊式virtual mode: C-V

## 檔案復原 ##
在編輯的過程因不明原因當機,可利用 vim -r yourfile.txt來復原尚未儲存的資料
復原後建議儲存到另外的檔案 w yourfile.txt.recovered

## 分頁 ##
開啟分頁: tabnew
關閉分頁: tabc(若當前只有一個分頁時指令會失敗), 關閉第N個分頁: tabc N
切換分頁: gt(下一個) or gT(上一個)



參考網址:
Replace word in VIM
VIM筆記 - 常用操作

CentOS筆記-查詢目錄所用空間

最近需要看下每個網站的使用空間,突然就傻了,啊在linux中怎用,詢問下才知道超簡單

du -sh {目標folder}
du -h --max-depth=N {目標folder} //N是目標folder下幾層要列出

有夠easy,但~還是做下筆記

2012年9月13日 星期四

iOS開發筆記-UITapGestureRecognize避開UIButton的方式

最近有個需求如下:

  1. 一個Root View,上頭一個ImageView及兩個縮圖(UIButton實作),按了縮圖後,ImageView會顯示此縮圖的原圖
  2. 點一下畫面,會出現此圖的說明
嗯~基本上不難,直接針對這個View實作touch event也ok,不過我要的是用UITapGestureRecognize,但這會有個問題,針對Root View去加入UITapGestureRecognize後,連同Button的touch event都被劫走了,那時以為除了一個個都實作成class後再加上touch實作才行,說穿了

我的狀況是“在一個複雜的View之中,想在View上直接觸點一下,就能執行我要的效果,但原本在上頭的Button一樣要正常運作

以下就以這個樣一段需求來實作。

Step 1. 加入UITapGestureRecognize,記得要在class加入UIGestureRecognizerDelegate
- (void)viewDidLoad
{
    [super viewDidLoad];

    //加入單點觸發
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapScreenShot:)];
    [self addGestureRecognizer:tapGesture];
    tapGesture.delegate = self;
}

Step 2. 寫好要要觸發的function,這邊單純印出字串
- (void)singleTapScreenShot:(UITapGestureRecognizer *)gestureRecognizer
{
    NSLog(@"Tap In");
}

Step 3. 加入觸發後,辨別UIGestureRecognizer是否要觸發,在這我是return NO,讓Button的touch能被取得
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
   
    if ([touch.view isKindOfClass:[UIButton class]]) {
        return NO;
    }
    return YES;
}


touch.view這邊可以自行改成要比對的object,這樣就可以很容易的實作出來了

2012年9月12日 星期三

GIT筆記-收集

===================================
2014/08/27 更新
寫給大家的 Git 教學
歡迎光臨 LearnGitBranching!
一个成功的Git分支模型

===================================
最近有點發神經,Version Control改用git,用的非常非常的不習慣(我還是很愛SVN可以隨便的export),不過不知道為什麼,我還是有種大家都在用了,不習慣一下,以後真的變恐龍,這邊先收集一下不錯的網址吧

網址收集:
Git 初學筆記 - 指令操作教學(我常看這人的blog,蠻仔細的)
Git Magic
Using git with Xcode(我有需要用到xCode,還是放了的好)
Git Study
Git Submodule 的常見錯誤(看來有些方法可以讓GIT跟SVN一樣)
Git Tutorial

Tech Talk: Linus Torvalds on git(Linux之父親自加持...)

2012年9月9日 星期日

iOS開發筆記-switch語法在Object-C中的怪問題

最近寫iOS程式用到switch寫法,寫著寫著一直出現fail的問題,如下:


ListXml是我自訂的class,我以為是這個問題,後來改用ios內建的也一樣,找了找網路上的資料,才知道這是本來就有的問題,如下,在前面加個“;”號,就通過了....




參考網址:
Objective-C Tip: Switch Statements

2012年9月8日 星期六

iOS開發筆記 - app內直接播放YouTube影片(3)

上次寫了iOS開發筆記 - app內直接播放YouTube影片(2)後,實際用了一陣子,使用者實在不大可能去抓取嵌入的src,最愛直接抓網址,頂多能去按分享就很不錯,當然還是得教使用者去按分享按鈕取得連結,只是前篇的方式在url上,就要改成以下的寫法。


NSString *embedHTML =@"<html><head>"
    "<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = device-width\"/></head>"
    "</head>"
    "<body style=\"background:#FFFFF;margin-top:20px;margin-left:0px\">"
    "<div><object width=\"%0.0f\" height=\"%0.0f\">"
    "<param name=\"wmode\" value=\"transparent\"></param>"
    "<embed src=\"%@&f=user_favorites&app=youtube_gdata\""
    "type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"%0.0f\" height=\"%0.0f\"></embed>"
    "</object></div></body></html>";

紅字是更改的部分,後續的參數我是沒有刪除,但一樣可以自動執行

2012年9月5日 星期三

iOS開發筆記-解決下載中文網址或檔案

現在使用中文人口越來越多,遇到中文檔名的機會也越來越大,正好遇到做個筆記。我使用的是NSConnection這個class來下載,這邊暫時不多說它如何使用,只先講 initial它時,在NSURL時,要如下紅字設定


NSURL *url = [NSURL URLWithString:
       [urlpath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [[ [NSURLRequest alloc] initWithURL:url
                             cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                             timeoutInterval:DL_DELAY] autorelease];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];


這就不怕中文名稱的網址或檔名了。

參考網址:

2012年9月4日 星期二

iOS開發筆記 - 做出一個圓角的UIButton

需求
1. 像是UIButtonTypeRoundedRect的圓弧按鈕
2. 可以自由設定

第2點可以自由設定(例如背景顏色啦~等等)這件事,若UIButton初始化時style是UIButtonTypeRoundedRect,之後是改不了的(apple預設的ui,很多都是動不了),所以只能用UIButtonTypeCustom做出自己想要的

這次的例子是做出一個圓弧有外邊緣線的按鈕

Step 1. import <QuartzCore/QuartzCore.h>

Step 2. 初始化一個UIButton

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(x,y,50,50); // x,y自行設定
btn.layer.borderWidth = 1.0f; //設定邊線寬度
btn.layer.borderColor = [UIColor blackColor].CGColor//設定邊線顏色
btn.layer.masksToBounds = YES;  //這行要有才能顯示出來
btn.layer.cornerRadius = 15.0f//邊角15.0f,自行設定邊角圓弧度


Step 3. 使用.....

就這麼簡單,有些事說穿了不值半毛錢(但我花很久的時間........orz)

參考網址
替 UIImageView 加上圓形遮罩(mask)
为UIButton设置边框等属性

2012年9月3日 星期一

CentOS筆記-載入flahs(隨身碟)

先用底的指令查看剛才放上的隨身碟的名稱
fdisk -l

可以看到類似

Disk /dev/sdc: 16.2 GB, 16225665024 bytes
256 heads, 51 sectors/track, 2427 cylinders
Units = cylinders of 13056 * 512 = 6684672 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1        2428    15842392    c  W95 FAT32 (LBA)


可以看出是/dev/sdc1,這時在你想mount的地方建個folder,我是在/mnt
mkdir /mnt/flash
mount -t vfat -o iocharset=cp950 /dev/sdc1 /mnt/flash

這樣就成功了,可以做你想要的事了

參考網址:
第八章、Linux 磁碟與檔案系統管理

iOS開發筆記 - app內直接播放YouTube影片(2)

之前曾寫過一篇iOS開發筆記 - app內直接播放YouTuBe影片

那篇做法有幾個問題
  1. 用iFrame內篏,不知道為什麼就是無法autoplay,找了官方文件很久相關資料也無法解決
  2. YouTuBe全螢幕會自動旋轉成橫向,當然也可以轉回直向
  3. 要自己用iOS開發筆記-加button到NavigationBar加Button
  4. 用presentModalViewController去play,即使用第三點所述之方法,會有個問題是恢復後無法操作,會當機

根據以上幾點,那篇的做法,只能UIWebView直接加上去,然後,程式在原UIViewController轉橫向,然後等待使用者按Play,不知道為什麼我就是覺得這樣有點蠢,加上YouTuBe全螢幕後,會出現個按鈕,自己再加上個按鈕,多此一舉.....

最後找到了Auto Play youtube video in iPhone / iPad,重新設計我的概念,大致如下

  1. 用舊式的embeded
  2. 要實作WebView的delegated method
  3. 直接在原 view加上這個WebView

Step 1. ViewController或要使用的那個Class記得加入WebDelegate,如:

@interface RootViewController : UIViewController<UIWebViewDelegate>
@end


Step 2. 建一個新的WebView及實際運作的程式

- (void)showYouTuBe:(NSString*)url
{
    if (__youTubeWebView == nil) {
        __youTubeWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; //這邊故意設成橫向大小,不過說實在我不覺得有用就是了
       
        __youTubeWebView.delegate = self;
    }
    
    NSString *embedHTML =@"<html><head></head>"
    "<body style=\"background:#FFFFF;margin-top:20px;margin-left:0px\">"
    "<div><object width=\"%0.0f\" height=\"%0.0f\">"
    "<param name=\"wmode\" value=\"transparent\"></param>"
    "<embed src=\"%@?version=3&f=user_favorites&app=youtube_gdata\""
    "type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"%0.0f\" height=\"%0.0f\"></embed>"
    "</object></div></body></html>";
    
    NSString* html = [NSString stringWithFormat:embedHTML, __youTubeWebView.frame.size.width, __youTubeWebView.frame.size.height, url, __youTubeWebView.frame.size.width, __youTubeWebView.frame.size.height];
    
    [__youTubeWebView loadHTMLString:html baseURL:nil];
    __youTubeWebView.backgroundColor = [UIColor clearColor];
    
    [self.view addSubview:__youTubeWebView];
}


Step 3. 寫入Delegate

- (void)webViewDidFinishLoad:(UIWebView *)_webView {
    
    UIButton *b = [self findButtonInView:_webView];
    [b addTarget:self action:@selector(finish:) forControlEvents:UIControlEventTouchUpInside];
    [b sendActionsForControlEvents:UIControlEventTouchUpInside]; //Autoplay
    
}


- (UIButton *)findButtonInView:(UIView *)view {
     UIButton *button = nil;
     if ([view isMemberOfClass:[UIButton class]]) {
          return (UIButton *)view;
     }
     if (view.subviews && [view.subviews count] > 0) {
          for (UIView *subview in view.subviews) {
               button = [self findButtonInView:subview];
               if (button) return button;
          }
     }
     return button;
}

- (void)finish:(id)sender
{
    [__youTubeWebView removeFromSuperview];
}



我在裡頭加上了
[b addTarget:self action:@selector(finish:) forControlEvents:UIControlEventTouchUpInside];

是為按下那個Done按鈕,讓整個WebView消失,見finish這個function

在實測中發現少了sendActionsForControlEvents這個method,就無法自動播放。不想自動播放,可以拿掉它。

感覺還是很多地方是可以調整的,不過要真的試一陣子才知道。

[注意]
這篇所寫所用的YouTuBe的連結,並非直接使用YouTuBe中按下“分享”按鈕的那個連結,而是按下“嵌入”按鈕並勾選“使用舊版內嵌程式碼”,再取得其中的src,例如:

Steve Jobs 賈伯斯 史丹佛大學畢業典禮演說

紅線框起來的部分就是要的網址,後續的變數都在程式碼的embedHTML紅字內,不然就是記得src的內容全copy下來後,將embedHTML中的src內容全改成%@,url的內容就該是copy下來的內容