新blog暂时是弄好了

原定是rMBP修回来之后就开工转移blog,于是今天rMBP拿回来了就费了点时间创建了个WP,虽然目前算是基本完工但是还有一堆东西要弄,比如插件和主题什么的。

URL的话原本是想直接用blog.bi119ate5hxk.net的,结果发现各种调试失败,而且WPMU又不支持这种带端口号的。然后Server上设置二级域名又无效,只能在域名管理页面上设置…

还有咱的域名不知道为啥会被Twitter给屏蔽了,发了几次解封请求都木有人受理的样子,于是同步到Twitter之类的似乎目前无解…>A<

然后旧blog虽然说不关闭不过已经停用了,重要的文档比如教程之类的可能会转移过来,不过日常的文章就不打算转移了。所以如果想找咱的黑历史的话可以去咱的旧blog。

 

话说昨和前天是漫展呢,咱按照之前的计划当然去啦~而且也拉上了咱的之前的高中童鞋。然后M酱(就是之前blog里说的Mike酱啦~)因为去应聘NPC(场内工作人员)然后被选上了,于是票就免费让给咱童鞋了….

本来咱是想开车去的,第一天本来是有机会,不过没要到,结果第二天连机会都木有了。于是2天都是坐公车,话说看见各种coser在等公车有种穿越的感觉(喂

不过要说的话感觉这次比上次人少好多,参展商也少好多,也似乎没发现什么有趣的看点,所以就不晒图了。不过day2倒是好多同人志开始贩卖…..可惜咱不买这些的…

发现街机厅扛去的是头文字D的机台(强烈要求下次换jubeat),然后咱去试了下….感觉和RR或者NFS操作差别好大..不过练多了应该也能上手…

这次的话还看到各种跳舞,刚开始竟然是赞助商德克士的一群妹纸员工带头的…然后day2甚至直接有个小专场跳了一下午….各种V家歌曲…

不过最让咱郁闷的是看到各种情侣,嘛..如果只是cos各种CP的话咱还是能接受/看得出的,但是尼玛现场超多闪光弹…

于是咱一直在想咱去漫展的意义….最后发现不如在家()更好。于是不知道下次还去不去呢…..据说7月还有次…….

 

 

话说回rMBP,因为买得早所以买到了屏幕有残影问题的第一批货。

之前问售后是需要2周的时间才能换屏幕,而最近去问则是7个工作日内就可以了,于是7天也不算特别长而且看着屏幕残影确实不爽,于是干脆就直接换了。

于是今天下午接到售后的电话,咱的电脑已经换了屏幕了。

20130325-164451.jpg

 

继续阅读“新blog暂时是弄好了”

让Mac程序支持键盘iTunes控制和AppleRemote控制

对于iPod的话方法实在是太简单了,因为iOS都内置有完整的remote控制(耳机线控)API,直接使用
- (void)remoteControlReceivedWithEvent:(UIEvent *)event就可以了。
但是Mac上并没有给出这个API(NSEvent并没有这方面的说明,看起来是私有API),所以必须另外想办法。
为了这个咱查找了很多资料,非常恶心的是网上居然几乎都没有这方面的教程。
最后从Mac上比较强大的播放软件VLC的源代码入手,终于找到了remote控制的方法。

如果开启了ARC的话会报错,那么就在Xcode的project的Target里的Build Phases,在下面的Compile Sources里面找到提示ARC报错的文件,双击他们并填上-fno-objc-arc。然后重新编译即可~

AppleRemote也就是红外线遥控器部分比较简单,但是代码似乎是VLC针对自己而写的,虽然可以直接移植过去之后使用,但是需要修改过才可以,于是咱自行进行修改,屏蔽掉了VLC自有的部分(似乎是为了错误提示做的log,并没有太大用途)。于是文件下载在这里:戳我啊!来戳啊!
下载之后将2个文件导入到project,并#import “AppleRemote.h”。
接下来在头文件里创建AppleRemote *appleremote;
然后在m文件里进行初始化并且设置其开始监听:

appleremote = [[AppleRemote alloc] init];
[appleremote setClickCountEnabledButtons: kRemoteButtonPlay];
[appleremote setDelegate:self];
[appleremote startListening: self];

然后就到了重点:接收到按键操作之后

- (void) appleRemoteButton: (AppleRemoteEventIdentifier)buttonIdentifier
pressedDown: (BOOL) pressedDown
clickCount: (unsigned int) count
{
switch( buttonIdentifier )
{
case k2009RemoteButtonFullscreen:
//似乎是进入全屏模式
break;
case k2009RemoteButtonPlay:
//开始播放
break;
case kRemoteButtonPlay:
//开始播放
break;
case kRemoteButtonVolume_Plus:
//上按键,同音量+
break;
case kRemoteButtonVolume_Minus:
//下按键,同音量-
break;
case kRemoteButtonRight:
//右按键,同下一曲
break;
case kRemoteButtonLeft:
//左按键,同上一曲
break;
case kRemoteButtonRight_Hold:
//右按键一直按,同快进
break;
case kRemoteButtonLeft_Hold:
//左按键一直按,同快退
break;
case kRemoteButtonVolume_Plus_Hold:
//上按键一直按
break;
case kRemoteButtonVolume_Minus_Hold:
//下按键一直按,同静音
break;
case kRemoteButtonMenu:
//目录(menu)按键按下
break;
case kRemoteButtonPlay_Sleep:
//播放键一直按,同进入睡眠模式
break;
default:
/* Add here whatever you want other buttons to do */
break;
}
}

到这里AppleRemote已经可以正常工作了,剩下的就看自己的需要修改代码了。

而键盘上的iTunes播放控制键虽然同样没有API,但是却有公开的代码实现,可访问Media keys hook in Mac OS X来下载代码和例子。
使用方法和上面的remote差不多,同样是import之后设置为SPMediaKeyTap *keyTap;接着init:

[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[SPMediaKeyTap defaultMediaKeyUserBundleIdentifiers], kMediaKeyUsingBundleIdentifiersDefaultsKey,nil]];
keyTap = [[SPMediaKeyTap alloc] initWithDelegate:self];
if([SPMediaKeyTap usesGlobalMediaKeyTap])
[keyTap startWatchingMediaKeys];
else
NSLog(@"Media key monitoring disabled");

而方法官方也在例子中给出了:

-(void)mediaKeyTap:(SPMediaKeyTap*)keyTap receivedMediaKeyEvent:(NSEvent*)event;
{
NSAssert([event type] == NSSystemDefined && [event subtype] == SPSystemDefinedEventMediaKeys, @"Unexpected NSEvent in mediaKeyTap:receivedMediaKeyEvent:");
int keyCode = (([event data1] & 0xFFFF0000) >> 16);
int keyFlags = ([event data1] & 0x0000FFFF);
BOOL keyIsPressed = (((keyFlags & 0xFF00) >> 8)) == 0xA;
//int keyRepeat = (keyFlags & 0x1);
if (keyIsPressed) {
switch (keyCode) {
case NX_KEYTYPE_PLAY:
//播放键按下
break;
case NX_KEYTYPE_FAST:
//下一首按下
break;
case NX_KEYTYPE_REWIND:
//上一首按下
break;
default:
break;
}
}
}

如果对上面2个方法有问题的可以留言或者单独联系咱~

Mac OS X Server Mountain Lion 10.8下配置VPN并开启数据转发

好吧,其实这个早就应该解决了的才对,不过直到最近重新尝试才发现之前没做成功是因为完全没按照文档操作,所以当然会失败!
现在根据我的经验重新写一下做法,比原文好的是关于私有IP部分。至于图的话直接看原文就好了,不再进行转贴。
原文地址:http://www.macminicolo.net/mountainlionvpn

OS X Server自带的VPN原本是提供外网接入内网访问的,并不提供数据转发。如果不需要走数据的直接设置就行了,不需要看本教程。而如果想要拿来挂代理要走数据的话怎么办呢?
继续看下去吧~

首先先确认iCloud的Back to my Mac已关闭,根据官方说明:“在 NAT 模式下配置 AirPort 基站或 Time Capsule 上的“回到我的 Mac”会妨碍与 NAT 模式下的 OS X Server VPN 服务的连接“。所以必须关掉Back to my Mac以防止对VPN进行干扰。

然后建立一个VLAN,设置其为手动设置IPv4。
IP地址和路由为你的本机IP,子网掩码255.255.255.0。比如咱的服务器被路由器分配的IP是192.168.0.100的话,那么VLAN里填写的IP和路由都应该为192.168.0.100。
原文中博主是使用10.0.0.1是因为他本机的IP就为这个。而至于10.0.0.0/24则是CIDR,具体可以查看wiki关于CIDR。如果子网掩码不是255.255.255.0的话需要自己去重新计算喔。

设置好VLAN之后就去设置Server.app里的DNS,添加几个常用的就好,比如8.8.8.8之类的,然后开启DNS服务(默认都应该开启的)。

然后是开启NAT就是转发功能,需要修改到系统文件。先说明咱使用的都是vim,如果连最简单的操作都不熟悉的话自己去学,连这个都不会别想去管服务器了。

开终端,然后按照咱说的做:
输入sudo vim /etc/pf.anchors/com.apple
在文件里找到:scrub-anchor "100.InternetSharing/*"
然后在它的前面加上个#号,也就是注释掉。
接着找到文件最末尾。将最后一行改成:(倒数第二行不要动)
load anchor "400.AdaptiveFirewall" from "/Applications/Server.app/Contents/ServerRoot/private/etc/pf.anchors/400.AdaptiveFirewall"
其实也就是开头的load anchor “400.AdaptiveFirewall/”多了个”/”,是10.8.2的bug。需要手动清除。
最后在文件里添加三行东西:

nat-anchor "100.customNATRules/*"
rdr-anchor "100.customNATRules/*"
load anchor "100.customNATRules" from "/etc/pf.anchors/customNATRules"

保存退出。
接着运行:sudo touch /etc/pf.anchors/customNATRules
然后运行:sudo vim /etc/pf.anchors/customNATRules
接着添加以下两行:

nat on en0 from 192.168.0.0/24 to any -> (en0)
pass from {lo0, 192.168.0.0/24} to any keep state

注意和上面说的一样,原文10.0.0.0/24代表10.0.0.1~254,而我们的网络如果是192.168.0.1~254的话,则需要修改成192.168.0.0/24。
保存并退出,继续输入以下命令:(都是一行)
sudo /usr/libexec/PlistBuddy -c 'add :ProgramArguments:3 string -e' /System/Library/LaunchDaemons/com.apple.pfctl.plist

echo 'net.inet.ip.forwarding=1' | sudo tee -a /etc/sysctl.conf
当返回是:net.inet.ip.forwarding=1的时候说明配置成功了。这时候需要重启一下电脑让这些改动生效。

重启之后接着就是去设置VPN了,填写好域名和共享密匙之后在DNS设置里将原有的DNS全部清空,输入192.168.0.100也就是本机的IP地址。
然后到客户端地址,设置起始IP为192.168.0.150(只要是IP段内就好)。正确的话在点OK之后是不会弹出IP地址段错误的提示的。
最后开启VPN服务,理论上应该就能走数据了。

客户端的配置就不多说了。网上教程到处都是,而且这么简单的设置不用教程应该都能配置好的。
不过经过咱的测试,PPTP似乎是无法连接,L2TP倒是一切正常,所以目前全部切换到L2TP了。

Mac下讓XLD支持CUE+TAK

前一陣因為手動解密硬盤導致3個wine都失效了:CrossOver、MikuInstaller以及MacPorts的。
於是在沒有wine的情況下XLD是沒辦法讀取CUE+TAK文件的,會提示一個錯誤…(可惜忘記截圖下來了..

解決方法就是裝wine,但是MikuInstaller是最簡單的方法可惜並不被XLD所支持..而CrossOver是收費軟件。於是就用MacPorts最好了。
安裝wine前的準備,首先需要一個Xcode,Lion之後的系統應該都是去AppStore裡下載了。目前最新版本應該是4.4.1。如果不想裝大體積的Xcode也可以只裝命令行工具(Command Line Tools),LionML都有(地址是Aug,7,2012的,以後肯定會有新的,建議去開發者中心下載會比較好,網上也應該能搜索到下載地址)。
安裝好Xcode之後打開應用程序裡的實用工具裡的終端。接著修改Xcode的地址,因為Xcode3的時候都是默認的/Developer,而現在Xcode已經是單獨一個app文件了。於是終端裡輸入sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer
然後輸入sudo xcodebuild -license,會出現條款,按空格鍵到最後輸入agree即可..
接著去macports.org下載MacPorts,並且安裝,雖然安裝文件比較小但是耗時倒挺長…
安裝完MacPorts之後再回到終端,輸入sudo port -v selfupdate,進行一次更新檢測。完成之後輸入sudo port install wine即可。

而我在這之後就提示各種文件已存在的Error,之後XLD還是無法讀取CUE+TAK,而關閉掉XLD再重新打開則就能讀取了…
因為經過wine的緣故所以讀取的時候電腦會卡好一陣…不過也正說明正在運行著了..(解碼的時候速度倒是和別的文件一樣)。
話說貌似多少年前就說TAK支持要C了?至今還是在用坑爹的wine+exe真心不夠Mac化啊!!
而且也奇怪為啥那麼多人喜歡TAK而不用APE…

嘛…總的來說操作不算繁瑣,希望有所幫助~
如果上述操作之後還有問題可以留言提出….

后记:另外个更简单的方法就是使用homebrew。安装只需要一条命令行(不过同样需要先安装Command Line Tools)ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
安装完毕之后直接执行brew install wine即可。

Ubuntu(Debian)下使用rinetd进行端口转发

先说一下我的网络环境吧,应该有些人和我一样的:
Internet接入(非内网,有公共IP)<==>Ubuntu服务器(双网卡)<==>集线器<==>Mac或者其他的电脑

Ubuntu的服务器负责宽带拨号网络接入和文件共享,然后我的其他电脑需要使用到外网的端口。iptables的NAT转发比较麻烦,由于是非固定IP所以每次都要自己手动输入命令,实在是没效率。
rinetd就很好的解决了这个问题,而且配置起来也非常简单,只需要内网IP(一般都是固定的),不需要外网IP也不用网卡编号。

首先安装:sudo apt-get install rinetd
开启ip foward(不过好像不是必须):echo "1" >/proc/sys/net/ipv4/ip_foward
然后配置文件:sudo vim /etc/rinetd.conf
然后根据以下格式按实际情况更改:
[绑定地址] [绑定端口] [内网IP] [内网端口]
比如说我想让所有从外网访问我机器的82端口的是访问内网的某台服务器的http也就是80端口的就是:
0.0.0.0 82 192.168.1.101 80
当然也可以根据需要设置allow和deny的IP,不过很少用上就是了..

保存之后还没生效,需要先sudo pkill rinetd一次,再执行rinetd -c /etc/rinetd.conf就能正常执行了。
当然也可以添加为开机启动,sudo vim /etc/rc.local然后写入sudo rinetd -c /etc/rinetd.conf即可。

于是TCP和UDP的应该都能像普通路由器那样进行端口转发,但是uPnP好像就不行了。所以Share EX2还是会提示内网而无法下载。

后记:此方法主要针对新手,对于linux高手来说直接修改iptables映射就好。