2012年1月12日 星期四

Xcode 4.2 - iOS SDK Storyboard學習心得分享(二)- Navigation Controller Transition

這次要分享的是Navigation Controller在Storyboard上的使用方法,我們可以從上次的學習心得的Project繼續做下去,關於Storyboard的基本用法,可參考下列網址:
Xcode 4.2 - iOS SDK Storyboard學習心得分享(一)- Modal View Controller Transition


1.從右下角的Objects裡將Navigation Controller拖拉至Storyboard。
2.點選右上角的Attribute Inspector。
3.勾選Is Initial View Controller,將此Navigation Controller變成初始頁。













4.拖拉一個Bar Button Item至Root View Controller的Navigation Bar右側。
5.在按鈕上按右鍵,出現關聯選單。
6.從Storyboard Segues的Push右側的小圓圈拖立至Main View Controller。













7.建立關係後,Root View Controller和Main View Controller之間會建立一個Push關係鏈,Push關係鏈的動畫只有一種從右側滑入的動畫,沒得選。


















8.執行動畫如下圖。


2012年1月10日 星期二

Xcode 4.2 - iOS SDK Storyboard學習心得分享(一)- Modal View Controller Transition

Xcode 4.2出來到現在已有一段時間了,這一版有一個很特別的功能就是Storyboard,他可以方便讓UI設計者在這個Storybaord上拖拉UI的Layout,並可在各View之間建立關係,也可以直接在上面設定各View之間的過場動畫,有了這個功能,將更有利於UI設計人員來使用。



先來介紹如何做出有Storyboard的Project:

1.從選單中選取File -> New -> New Project。

2.在這裡,我們先選擇最簡單的Single View Application,選好點選右下方的Next。

3.輸入Product Name,要用Storyboard的,記得要勾選Storyboard,選好點選右下方的Next。
4.選擇你要存放的路徑,選好點選右下方的Create。

5.在左方的Navigators欄,點選MainStoryboard.storyboard,即可在中間的主視窗看見Storyboard,由於選的是Single View Application,所以預設就有一個ViewController。

接下來可以開始在Storyboard上設計UI了:

1.先從右下角的控件列表中拖拉出ViewController和Button, Label等其他控件到Storyboard上,做成了Main View和Modal View兩個ViewController。

2.在Main View的To Modal View按鈕上按右鍵,會出現按鈕的關聯選單,將Storyboard Segues - Modal右側的小圈圈拖拉到Modal View上。

3.關閉關聯選單,可看到兩個ViewController之間已建立了Modal的關係,點選該關係鏈上的圓圈,右側的Utility欄會出現該Modal鏈的屬性設定,其中Transition欄即為過場動畫效果設定。

4.點選左上角的Run鈕即可執行結果。

執行結果影片如下,點選To Modal View按鈕,自動從下方推上來一個Modal View,此為Default Transition,到此為止,不需寫任何程式即可做到這個程度,至於其他基本的動畫效果,只要改一次Transition的設定,再Run一次就可以看到,有興趣的可以自行測試。



接下來要注意了,要如何按下To Main View按鈕回到Main View呢?
有一個很簡單的做法,就是再從To Main View按鈕,再拉回MainViewController,
雖然可以這麼做,但這不是好的做法,因為他會再從ModalViewController上方,再蓋上一層MainViewController,如果兩個按鈕一直重覆按下去,就會像堆疊一樣不斷堆高,記憶體也就會不知不覺地被耗盡。
較理想的做法還是遵循既有的ModalViewController的處理方式,只要在ModalViewController.m中所對應的IBAction中加一句:
[self dismissModalViewControllerAnimated:YES];
即可將ModalViewController移除,回到MainViewController,且動畫會自動從相反方向動作。


2012年1月3日 星期二

用 CentOS 架設 VPN 學習心得

之前每次一去到大陸,就上不了Facebook, YouTube等網站,後來看到有人去了大陸,照樣能上FB,一問才知道是用了VPN。

後來有朋友要去大陸,說要跟人租VPN來上FB,我就稍微研究了一下架設VPN Server的方法,當時有找到Windows XP的VPN Server架設教學,但我實在不想在家裡整天開一台Windows XP,只為了讓他從大陸連進來上FB,這樣還要花我的電費,而且有問題時還要我幫他處理,而另一方面,我家的頻寬也很有限,萬一他中了木馬什麼的,把我家的網路搞掛了,我還很麻煩,所以還是建議他去租VPN來用。

後來我自己要去大陸出差時,本來有考慮在XP上裝個VPN Server,但想到Windows比較容易當機的問題,到時候家裡又沒人能幫我處理,又找了一下Linux的VPN Server架設方法,稍微在CentOS試了一下,覺得跟教學的狀況有很大的出入,而當時時間也蠻趕的,也就沒搞下去了。

最近剛好有空,而且前一陣子發現要Google找CentOS的設定方法應該要用CentOS來查找,而不該用Linux,因為Linux版本太多了,很可能設定方法都不大一樣,換了關鍵字一查之後,果然很快就找到方法,也設好了,詳細設定方法可參考下列網址:
CentOS 5.3 下快速安装配置PPTP VPN 服务器- 张宴的博客- Web系统 ...

抄錄內容如下:

VPN的英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”。顾名思义,虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路,就好比是架设了一条专线一样,但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线,但是不用给铺设线路的费用,也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一,目前在交换机,防火墙设备或Windows等软件里也都支持VPN功能,一句话,VPN的核心就是在利用公共网络建立虚拟私有网。

  虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。

  PPTP 全称为 Point to Point Tunneling Protocol -- 点到点隧道协议,是VPN协议中的一种。

  一、CentOS 5.3 下 PPTP VPN 服务器安装

  1、安装相关软件
  32位版:
yum install -y ppp iptables
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

  64位版:
yum install -y ppp iptables
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm


  2、配置文件编写
  ①、配置文件/etc/ppp/options.pptpd
mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
vi /etc/ppp/options.pptpd

  输入以下内容:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 8.8.8.8
ms-dns 8.8.4.4



  ②、配置文件/etc/ppp/chap-secrets
mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
vi /etc/ppp/chap-secrets

  输入以下内容
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
myusername pptpd mypassword *

  注:这里的myusername和mypassword即为PPTP VPN的登录用户名和密码



  ③、配置文件/etc/pptpd.conf
mv /etc/pptpd.conf /etc/pptpd.conf.bak
vi /etc/pptpd.conf

  输入以下内容:
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.9.1
remoteip 192.168.9.11-30

  注:为拨入VPN的用户动态分配192.168.9.11~192.168.9.30之间的IP



  ④、配置文件/etc/sysctl.conf
vi /etc/sysctl.conf

  修改以下内容:
net.ipv4.ip_forward = 1


  保存、退出后执行:
/sbin/sysctl -p



  3、启动PPTP VPN 服务器端:
/sbin/service pptpd start



  4、启动iptables:
/sbin/service iptables start
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE

使用Windows和iPhone都順利連上VPN之後,我想上網,卻發現連不上,於是又找到了CentOS share IP的方法,詳細內容如下:
把CentOS Linux 當IP 分享器@ 光速世界:: 痞客邦PIXNET ::

抄錄內容如下:


其實花個一、二千元買了一台功能強IP分享器都遠不及
在一台舊主機上自己架Linux來當IP分享器的效能好
但缺點是比較耗電
當然如果這台主機能再上面提供其他服務
例如檔案伺服器做家中的檔案分享或是FTP、WEB伺服器之類的多功能用途的話
那就比較能物盡其用了
也可以剩下萬把元再去買一台NAS來做檔案分享

以下介紹如何設定Linux的iptables,讓Linux能變身成為超強的IP分享器
其實IP分享說穿了就只是修改封包標頭並轉寄而已
所以要讓Linux當成IP分享器用,並不需安裝什麼特別的套件
只需要對iptables做設定,讓封包轉寄就可以達成IP分享器的功能

首先先開啟Linux封包轉寄的功能
修改
 /etc/sysctl.conf將 net.ipv4.ip_forward的值改為 1接著輸入 sysctl -p 使剛才修改的值生效

接著使用 iptables 指令將內網封包轉至外網
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE(將來自 192.168.100.x IP的封包,轉寄至 ppp0)

以上二個動作就可以讓Linux變成IP分享器了,是不是很簡單。
下面提供一個完整的範例,可以存入文字檔,並給予執行權限直接執行

vim /ipshare
-------------------------------------------------------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
(如果有其他對外服務,如網頁伺服器(port 80),可將對映的port打開)
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
/sbin/iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP

-------------------------------------------------------------------------------------
chmod +x /ipshare
/ipshare


看了一下,發現跟VPN設定中的某些步驟差不多,但他的說明比較清楚,其中:
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
這條指令中的ppp0指的是Public IP的路徑,於是我用ifconfig查了一下,Public IP的網卡為eth1,把指令改成如下:
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.100.0/24 -j MASQUERADE
再下一次指令之後,iPhone和Windows都能從這個IP上網了。

因為公司有在用CentOS,這樣一來,如果公司有人去到大陸去,想上某些網站,或需要連回公司內網,就很方便了,另一方面,公司也有MIS人員,有什麼問題都可以找到人來協助處理。


*有需要下載CentOS的可以到下列網址,就近下載。
CentOS Mirror List

自製Xperia Play專用PlayStation遊戲心得

Xperia Play出到現在都超過半年了,官方提供的PS遊戲還是那幾款,再加上目前台灣現在不能從Android Market上買付費軟體,而前一陣子Android升到2.3.4之後,連PS模擬器都被禁用了。

前幾天在Mobile01上找到了可以把PS ISO檔轉成apk檔的教學,在安裝apk後,可以直接用Xperia Play上自帶的PS模擬器PlayStation@Pocket來玩。


有關教程的部份可參考下列網址:
[教學]PsXperia,PS遊戲轉Xperia Paly專用格式轉換器- Mobile01

如果是Android 2.3.4版的Xperia Play手機,可參考下列網址:
PSXPeria2.0(Beta)釋出!!

如果想要下載遊戲,可使用電驢下載:
《索尼家用综合电脑娱乐平台游戏经典回顾 第一季》(PlayStation Games Collection Vol.1)[PS] 第一季 ~完结~_VeryCD电驴下载

但電驢有時候不見得能下載得完全,也可以到FileCrop網站輸入「psx 遊戲名」來搜尋,用Http下載。

如果自己有原版或翻版的PS遊戲,也可以使用Alcohol 120%來製作.iso檔。

目前測試.iso, .bin, .img檔都可以轉成.apk。

目前試過的遊戲如下:

遊戲名測試結果
機器人大戰Alpah能玩,但開頭動畫會lag,遊戲語音後半會消音
機器人大戰Alpah外傳能玩,遊戲中語音後半會消音
妖精戰士完全正常
妖精戰士2完全正常
刀魂能玩,背景破圖一半
生死格鬥完全正常
Tear Ring Saga能玩,部份畫面有細微的破圖
實感賽車能玩,但車子跑到某些點會嚴重lag
鐵拳3能玩一下下,打完第一場就會Crash
鐵拳2不能玩,人體嚴重扭曲
惡魔城年代紀不能玩,只能看開頭動畫

由於妖精戰士2代可以使用1代破關的記憶繼續玩下去,所以試著把記憶卡中的資料從妖精戰士1的存檔目錄copy到2的存檔目錄,之後再開啟2,可以從記憶卡中找到1的記錄。
同理,兩片裝以上的遊戲應該也可以比照此做法來繼續玩下去。

記憶卡的記錄檔放在遊戲資料目錄(/Android/data/com.sony.playstation.遊戲名/)下的files/save/xxx/0.raw(記憶卡1)和1.raw(記憶卡2)。

*ps: xxx為亂數產生之16進位目錄名。


裝了幾款能玩的遊戲之後,原廠附的8G記憶卡已經被我塞滿了,所以有點想買32G記憶卡了,有人說原廠附的記憶卡速度比較快,本來想買class10的記憶卡來換,但又嫌貴,從機器裡拿出原廠的一看,的也只有class2,看來買較平價的class4應該也夠用,但說不定有些遊戲效果不佳是跟記憶卡的速度有關,class10說不定真的比較牛,後續狀況就等我換了記憶卡再說吧!