Tuesday, July 5

MAC下FLAC到ALAC, 加Artwork的办法

1, 转换FLAC到ALAC, 注意AAC和ALAC是不一样的, 一个有损, 一个无损
工具: Max
输出格式: "MPEG-4 Audio (Apple Lossless)", 选择Apple MPEG-4 Audio以后, 再选择Apple Lossless
设置自动追加到itunes, 但有的时候会出现The variable audio_item is not defined 这样的error, 没关系, 按ok继续

2, 找到Artwork
先用itunes的Get Album artwork功能, 还有一些找不到的,
下载Fetch Art 选中没有art的专辑, 打开fetchart, 它会自动去amazon找到封面, 然后选中所有文件,按copy to itunes

Monday, June 13

调试airplay的利器

airprint有工具可以调试了, airplay原来也有Airmac 免费,但是没有看到source支持airplay的youtube app可以通过airmac播放到开发机器上.
如何让uiwebview对应airplay呢?
文档. 在iOS5里面UIWebview缺省支持airplay了.
我实验了mp4文件的播放, 放不了,好像airmac不支持mp4

UPDATE 1: 当然还有更高级的 AirServer 不到$5, 安装到27inch mac上, 绝对爽. 不过我另外安装到macmini上以后, iphone找不到这个airserver, 不知原因.

Sunday, June 12

Google App Engine SUCKS!

用过了mongodb, 再使用GAE的bigtable, 简直是受罪啊!
都什么年代了, google还停留在5年前的技术上, 当时bigtable看上去比oracle这样的sql数据库进步,可是现在明显落后了哦
摸版库还是django, 幸好tornado可以很好地支持gae, 糟糕的是数据库不给力

跳不出自己的公司无法进步啊!Google!

Tuesday, June 7

如何调试iOS的AirPrint功能

我在测试QR Pro的打印功能时, 因为没有airprint对应的打印机,很是头疼. 家里的那台HP喷墨打印机都很少使用,再买一台太浪费了吧.
还好找到了替代方案:AirPrint Activator + CUPS-PDF for Mac OS X
AirPrint Activator是一个通过mac共享打印机给iOS的解决方案: 网址和下载
网页上有详细的介绍,一看就会安装了.

CUPS-PDF for Mac OS X是一个PDF虚拟打印机: 网址下载
CUPS-PDF是一个mpkg安装包,双击安装结束以后,
通过mac的[System Preferences] - [Printing]可以增加打印机, 在Default的tab里面应该可以看到CUPS-PDF, 选择安装上以后,设置share, 分享它. 这样在AirPrint Activator的窗口里就可以看到他了.

这样的设置,在真机和模拟器上都可以看到air print的打印机了.
打印的结果保存在 /Users/Shared/CUPS-PDF 目录下

调试程序怎么能没有这样的利器呢. 打印多少页也不用担心浪费纸张和墨盒了. 墨盒可是很贵的啊,我的HP打印机只花了2000日元, 每次换墨盒都是这个价格的好多倍



Saturday, January 1

HAPPY MMXI YEAR


Google的罗马数字新年

I - 1 unus
II - 2 duo
III - 3 tres
IV - 4 quattuor
V - 5 quinque
VI - 6 sex
VII - 7 septem
VIII - 8 octo
IX - 9 novem
X - 10 decem
XI - 11 undecim
XII - 12 duodecim
XIII - 13 tresdecim
XIV - 14 quattuordecim
XV - 15 quindecim
XVI - 16 sedecim
XVII - 17 septendecim
XVIII - 18 duodeviginti
XIX - 19 undeviginti
XX - 20 viginti
XXI - 21 viginti unus
XXII - 22 viginti duo
XXVIII - 28 duodetriginta
XXIX - 29 undetriginta
XXX - 30 triginta
XL - 40 quadraginta
L - 50 quinquaginta

1~10: I II III IV V VI VII VIII IX X
11~20: XI XII XIII XIV XV XVI XVII XVIII XIX XX
21~30: XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX
31~40: XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL
41~50: XLI XLII XLIII XLIV XLV XLVI XLVII XLVII XLIX L
其中,I 为1
V为5
X为10
L为50

LI, 51
LV, 55
LX, 60
LXV, 65
LXX, 70
LXXX, 80
XC, 90
XCIII, 93
XCV, 95
XCVIII, 98
IC, 99
C, 100
CC, 200
CCC, 300
CD, 400
D, 500
DC, 600
DCC, 700
DCCC, 800
CM, 900
M, 1000
MC, 1100
MCD, 1400
MD, 1500
MDC, 1600
MDCLXVI, 1666
MDCCCLXXXVIII, 1888
MDCCCXCIX, 1899
MCM, 1900
MCMLXXVI, 1976
MCMLXXXIV, 1984
MCMXC, 1990
MM, 2000

Wednesday, October 27

在MacOSX Server上编译,安装使用NGNIX

MacOSX自带Apache服务器,如果是MacOSX Server的话,所带的Server Admin图形界面的管理器很好用,可是他的Proxy管理功能比较弱,必须修改直接去修改conf文件,如果有virtual host的需求不好对应。所以经多简单的调查,决定使用ngnix。ngnix的好处网上有很多介绍,下面主要考虑如何安装到macosx上,找到一篇很好的介绍文章Compiling Nginx on OS X Leopard in 5 minutes
按照这篇文章所诉的步骤,可以很简单地编译安装最新版的ngnix
  • 首先编译PCRE 到官方网站上下载最新版的代码,现在是8.10,解压缩以后,通过terminal进入代码的目录编译

$ cd pcre-8.10
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

  • 下载最新的nginx源代码,下载是nginx-0.8.53,解压缩以后,通过terminal计入代码目录,编译安装
$ cd nginx-0.8.53
$ ./configure --prefix=/usr/local --with-http_ssl_module
$ make
$ sudo make install

  • 设置PATH。一般缺省的mac安装里面nginx所在的目录/usr/local/sbin不会被包含在PATH里面的,一般which ngnix也是没有结果的,可以这样先export PATH就可以找到了。如果希望机器一启动PATH就设置好了,可以将下面这行加入~/.profile文件里。
$ export PATH=$PATH:/usr/local/sbin
  • 尝试启动ngnix,使用safari访问一下http://localhost, 看看是否可以看到
Welcome to nginx!

  • 启动和关闭的命令
$ which nginx
/usr/local/sbin/nginx
$ sudo nginx
$ sudo nginx -h
nginx version: nginx/0.8.53
Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file

$ sudo nginx -s stop
  • 设置conf文件。nginx的配置文件位于/usr/local/conf/nginx.conf, 用编辑器打开,编辑之。我需要一个静态文件服务,一个redirect和一个proxy pass,那就类似下面的写法
server {
listen 80;
server_name cn.bbshare.com;
access_log logs/cn.bbshare.com.access.log;
index index.html;
root /Users/myname/CNWebserver;
}
server {
listen 80;
server_name ja.bbshare.com;
access_log logs/ja.bbshare.com.access.log;
rewrite ^(.*) http://www.yahoo.com:80$1 permanent;
}
server {
listen 80;
server_name redmine.bbshare.com;
access_log logs/redmine.bbshare.com.access.log;
location / {
proxy_pass http://127.0.0.1:8080/;
}
}

Friday, September 24

windows 2008 backup script

WBADMIN start backup命令居然会覆盖制定的备份目标文件夹,这样每次只有最近的一次备份留了下来,这有什么意义呢? 如果是在备份开始的前一刻系统发生故障,备份下来的也是失败的版本! 为什么ms没有提供apple的time machine呢???
参考各种网站的建议,得到下面的脚本,他可以备份最近一周的脚本,分别放到week1到week7的目录里,适当修改一下可以备份任意期间的系统。
让task schedule每天自动执行backupsystem.bat就OK了。

主脚本:BackupSystem.bat

@echo off
::BackupSystem.bat
::demonstration script using WBADMIN.EXE on a
Windows Server 2008 Server

rem backup share UNC
set backupshare=\\mycompany-dc01\Backup

rem files and folders to include
set include=c:,d:

rem define date time variables for building the folder name
set m=%date:~5,2%
set d=%date:~8,2%
set y=%date:~0,4%
set h=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
FOR /F "tokens=*" %%A IN ('CSCRIPT c:\temp\WEEK.VBS //NoLogo') DO SET %%A

rem defining a new folder like \\mycompany-dc01\backup\RESEARCHDC\20091215_132532

set newfolder=%backupshare%\%computername%\Week%Week%

echo Creating %newfolder%

mkdir %newfolder%

rem run the backup
echo Backing up %include% to %newfolder%

wbadmin start backup -backuptarget:%newfolder% -include:%include% -vssFull -quiet

rem Clear variables
set backupshare=
set include=
set m=
set d=
set y=
set h=
set min=
set sec=
set newfolder=



星期取得脚本:WEEK.VBS
Wscript.Echo("Week=" & DatePart("w",Date,vbMonday,vbFirstJan1))

Tuesday, September 21

applicationHost.config 的损坏

IIS7一个很弱智的设计就是将所有的host信息保存在applicationHost.config这样的文件里
这个文件位于%windir%\system32\inetsrv\config\目录下,里面保存了IIS里面的各种app信息。
公司的sharepoint有一个周1,突然不能启动了,调查发现是IIS里面的信息消失了,IIS启动失败,看log就是这个applicationHost.config文件的错误。经过千辛万苦,用了一上午尝试手工重建这个applicationHost.config文件,最终根据以前的备份,修复成功了。这是万幸。这是半年前发生的故障了,当时前一个周末,公司大厦做了停电维修,我们的服务器没有UPS保护,不知什么原因导致这个applicationHost.config发生了错误。按理说作为系统的重要文件,OS有责任保证这种情况下不出问题的。

备份,备份,是唯一的手段。虽然ms的backup也不是那么好用!

Windows 2008 Backup Schedule ERROR: 2147942402

Windows Server 2008的备份功能居然不是缺省安装,需要手工安装上。
自动schedule backup的wizard无法选择备份目的为一个文件夹,只能选择分区,选择分区以后则会问你是否要全部格式化,这真是一个无理的选择。
解决办法是用命令行
wbadmin start backup -backupTarget:\\127.0.0.1\backupfolder -include:e:,d:\mountpoint,\\?\Volume{cc566d14-44a0-11d9-9d93-806e6f6e6963}\

可你要就这样把此命令行加入windows的schedule定时执行程序里,就会收到如下的信息:
タスク スケジューラは、タスク "\system backup" のインスタンス "{24f661d8-534e-4415-8dc6-a784d61ca0fc}" の操作 "WBADMIN START BACKUP" の起動に失敗しました。追加データ: エラー値: 2147942402。
问题发生的缘由不得而知,解决办法是修改你的task
执行的程序写全路径:C:\Windows\System32\wbadmin.exe
参数是start backup -backupTarget:\\127.0.0.1\backupfolder -include:e:,d:\mountpoint,\\?\Volume{cc566d14-44a0-11d9-9d93-806e6f6e6963}\



Thursday, August 12

iPhone4的震动部件需要锻炼

iPhone4的震动功能太弱,就放在手边,震动起来都感觉不到,搜索了一下,遇到同样问题的人很多,有的人遇到根本不振的问题。
解决方案居然是找个软件训练一下,这个软件的名字叫:iBrate,用免费版本就好了,放在那里震几分钟。居然就有修好的。
世界真奇妙,iPhone4的BUG就是多

iphone4的感光BUG

iphone4有重大BUG,问题应该来自感光部件或者相关的程序,同使用的case也有关。

症状1:接打电话时,要么屏幕不自动关闭,脸会接触到屏幕上的按钮,要么屏幕常暗,手动无法按按钮
症状2:环境的光线变化时,屏幕的亮度随之改变需要的时间远远超过3GS的1,2秒,达到10秒以上

iphone4感光部件的调整,导致一些老的case,特别是上部太宽的case无法继续使用。表面的涂装层可能也有问题。

Tuesday, August 10

添付忘れ,outlook 忘记附件

虽然已经很久不用outlook了,找到以前写的代码,怀念以下

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=8&topic=23826

使い方:
1:下記のソースをOutlook2003->ツール->マクロ->Visual Basic 
Editor->ThisOutlookSessionに入れてください。
2:ツール->マクロ->セキュリティー>セキュリティレベルを「中」または「低」に
設定してください。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim strSubject As String
Dim strBody As String


strSubject = Application.ActiveInspector.CurrentItem.Subject '件名
strBody = Application.ActiveInspector.CurrentItem.Body '本文

'件名がありませんか
If Trim(strSubject) = "" Then
If MsgBox("このメッセージには件名がありません。本当に送信しますか?", vbYesNo + vbExclamation) = vbNo Then
Cancel = True
Exit Sub
End If
End If

'添付ファイル忘れてませんか
If InStr(strSubject & strBody, "添付") > 0 And Application.ActiveInspector.CurrentItem.Attachments.Count = 0 Then
If MsgBox("添付ファイル忘れてませんか? 本当に送信しますか?", vbYesNo + vbQuestion) = vbNo Then
Cancel = True
Exit Sub
End If
End If

End Sub

[ メッセージ編集済み 編集者: 重粒子 編集日時 2005-10-13 18:56 ]

Monday, August 2

mac os下安装redmine+mercurial+apache+ldap

如果只是简单地希望安装redmine+apache的话,那么就去下载bitnami::redmine,安装使用是非常的轻松。
如果认证方式想使用ldap,那就需要周折一番了。mac自带的apache就没有支持ldap认证,bitnami也没有。我们只能自己重新编译apache一条路可以走。按照找的这个参考指南
1,首先下载指定版本的mac版的apache代码,我将其放在了/Downloads/下

2,在console下做编译之前的准备工作
./configure --prefix=/Downloads/httpd-2.2.11/usr/local/apache2 --enable-mods-shared=all --enable-ldap --enable-authnz-ldap --enable-ssl --with-included-apr --with-ldap --enable-proxy


3,开始编译
make; make test; make install


4,拷贝得到的apache2版本到bitnami的redmine,取代原来的apache2,记得暂时不要删除原来的版本,因为需要拷贝几个配置文件过来,主要是conf下的httpd.conf和ssl.conf。
然后在使用./ctlscript.sh restart apache的时候,看看是否成功。主要是httpd.conf里面有的module找不到的话,那就注释上。

5,配置httpd.conf到支持ldap
首先增加如下两行到LoadModule的区域,
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so


然后设置目录认证方式,类似


ScriptAliasMatch ^/hg/test(.*) /repository/mercurial/test/hgweb.cgi/$1
ScriptAliasMatch ^/hg/project1(.*) /repository/mercurial/project1/hgweb.cgi/$1

<LocationMatch ^/hg(.*)>
AuthType Basic
AuthName "Welcome to HG Server"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
#AuthLDAPBindDN uid=testaccount1,cn=users,dc=myserver,dc=sample,dc=com
#AuthLDAPBindPassword [plaintext password for user 'testaccount1']
AuthLDAPURL ldap://127.0.0.1/dc=myserver,dc=sample,dc=com
require valid-user

Order allow,deny
Allow from all
Options ExecCGI

</LocationMatch>

上面的操作使得mercurial代码库出于LDAP认证的保护之下。在redmine里面也可以简单地设置LDAP认证,方便的很

删除所有的.svn目录


// You did a checkout when you really wanted to do an export.
// Now there are tons of .svn folders in your project, and you need them to go away.
// Shell scripting to the rescue.

// Credit: Zed Shaw, at the Mongrel mailing list.

find . -name ".svn" -exec rm -rf {} \;

Tuesday, July 13

水银代码管理

这几天学习了Mercurial这个代码管理工具,一点心得记录下来。
首先是代码管理工具的选择,现在流行的主要是svn,git和Mercurial了。用了svn好几年了,不满还是很多的,不再一一细说,考虑换得话,就上网找资料看看大家的说法,这篇翻译文章《Git 與 Mercurial 的分析》写得不错,没什么好说的,跟着google走,准没错。这几篇文章值得细看《Mercurial - 分布式版本控制系统》《分布式版本控制系统——Mercurial》,《在Google Code上用 Mercurial 取代 Subversion 管理你的项目

我使用的是mac osx snowleopard,在这上面Mercurial的安装比较容易,但是也遇到一些挫折
1)安装,到官方网站下载安装包,安装之。
2) 安装MercurialEclipse, 今后就用Eclipse这个强大的GUI管理代码了,同时还可以兼顾svn和git
3)将我的svn库转换到Mercurial,参见攻略。这时候遇到了问题,见解决办法


有趣的障碍是,很多文章里说需要修改.hgrc这个文件,可是他在哪呢???,找遍硬盘也没有,其实自己建立一个叫.hgrc名字的文本文件就好了,放在/Users/yourname

刷DD-WRT成功,step by step

按照各位大王的暗示,一阵研究,在mac下刷DD-WRT成功
1,首先去  http://www.dd-wrt.com/site/support/router-database
输入自己的无线路由器的型号,我的是 whr-g54s,找到了相应的设备
看一下FLASH大小,我的是 4 MB,据说如果是2M,就要下载micro和mini版本,4M可以下载标准版,
标准版还有多个选择,什么usb,voip和vpn,我选择了 Standard Generic dd-wrt.v24_std_generic.bin,下载

2,恢复无线路由器的出厂状态,按住reset一会,据说30秒,我感觉5秒不到他就回复了

3,联网线,从路由器的lan口(注意不是wan口)到电脑,设置网卡IP,至192.168.11.2,mask255.255.255.0,router:192.168.11.1
,用http连上路由器,确认一下原厂管理界面,留恋一下

4,开两个terminal,一个ping 192.168.11.1按回车(mac的ping不像windows会只ping4,5次,它会一直ping下去), 另一个输入tftp -e 192.168.11.1,先不按回车

5,拔路由器电源,然后再接上,看ping的窗口,一旦发现ping通了,在另一个tftp窗口的窗口,立即按回车,然后粘贴下面的命令put dd-wrt.v24_std_generic.bin
这将下载好的firmware刷入路由器,结束以后会看到类似Sent 3710976 bytes in 13.2 seconds这样的文字


macbook-pro:g$ tftp -e 192.168.11.1
tftp> put dd-wrt.v24_std_generic.bin
Sent 3710976 bytes in 13.2 seconds
tftp>



6, 经过路由器检测灯的一顿闪,似乎成功了,将网卡IP改为192.168.1.2,router:192.168.1.1
http://192.168.1.1/
成功,看到了要求设置用户名和密码的窗口,找个好记的输入,成功
进入admin页面,改变language,改成简体中文,应用之,这一步 safari会出错,用firefox没问题

7,到无线页面,设置ssid,和安全密码,我选的安全模式是wpa personal,接好wan端的网线,打开浏览器(这时候firefox居然上不了网,关闭,重新打开),上网成功

8,测速:我这里下载速度 14.30Mbps (1.787MByte/sec),上传速度19.26Mbps (2.407MByte/sec)
直接用网线的速度是下载 22.11Mbps (2.763MByte/sec),56.63Mbps (7.079MByte/sec)


刷路由器之前最好也测试一下,我忘记了,所以没法比较到底哪里好


接下来怎么玩?听听大家的

[iphone]Code Sign error: Provisioning profile XXXX can't be found

如果你更新了profile,再编译iphone项目,发现下面的错误,那你无论如何clean也不会成功,那真是让人恼火阿







这时候,先copy上面那行出错信息,然后关闭这个项目,打开 finder到你的项目文件xxxx.xcodeproj上面按鼠标右键,选择Show Package Contents菜单,在新打开的finder的,找到project.pbxproj,使用一个文本edit打开它,用查找功能找到所有的有那行编码的位置,删除那一行,至少应该有两个地方







删除以后,保存这个 project.pbxproj 文件,用xcode重新打开你的项目,再编译一下试试

[iPhone]command /usr/bin/codesign failed with exit code 1

如果你在编译iPhone App的时候遇到command /usr/bin/codesign failed with exit code 1

可以确认以下的步骤,打开Keychain Access,找到你的开发者key,Get Info,看一下Access Control这个Tab,选择allow all applications to access this item。再重新编译一下,试一下,看看是否OK了


如何在Tab Bar Controller里面使用ABPersonViewController

如果你想将ABPersonViewController嵌入一个Tab Bar Controller里作为一个Tab,就像下图,该如何作呢?



Step By Step

1:制作xib的时候,不要在相应的tab里加入view controll,如下图:


2,创建自己的NavigationController,继承自UINavigationController,加入ABPersonViewControllerDelegate的protocol


@interface ProfileNavigationController : UINavigationController {


}


3,在自己的NavigationController里面相应 -(void)awakeFromNib,这个方法在xib被调入内存的时候,会被执行,在其中调用 initWithRootViewController,就可以将需要的ViewController显示出来。




-(void)awakeFromNib


-(void)awakeFromNib
{
NSLog(@"bundleLoader waked");
// Fetch the address book
ABAddressBookRef addressBook = ABAddressBookCreate();
// Search for the person named "Appleseed" in the address book
CFArrayRef people = ABAddressBookCopyPeopleWithName(addressBook, CFSTR("Appleseed"));
// Display "Appleseed" information if found in the address book
if ((people != nil) && (CFArrayGetCount(people) > 0))
{
ABRecordRef person = CFArrayGetValueAtIndex(people, 0);
ABPersonViewController personPicker = [[[ProfileViewController alloc] init] autorelease];
personPicker.personViewDelegate = self;
personPicker.displayedPerson = person;
// Allow users to edit the person’s information
personPicker.allowsEditing = YES;

[self initWithRootViewController:personPicker];
}
else
{
// Show an alert if "Appleseed" is not in Contacts
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Could not find Appleseed in the Contacts application"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
[alert release];
}
CFRelease(addressBook);
CFRelease(people);
}

Tuesday, June 9

Google太客气了

今天的Google Developer Day 2009居然一人发了一台HTC制的Android手机 :P ,触摸屏带2G MicroSD。真是笑纳笑纳了





这次Google Developer Day 2009 YOKOHAMA的主题是A More Powerful Web
强调手机,社区和易用性


精彩的新产品是http://wave.google.com/ 融合mail,chat和sharing的新工具,值得期待

全部照片在
http://picasaweb.google.com/baryon/2009_06_09YOKOHAMA#