我的备忘录


mplayer mac osx 更新 svn-27466

Posted in MacosX, mplayer by Kafeifei on the 08月 16th, 2008

mplayer mac osx 更新 svn-27266

Posted in MacosX, mplayer by Kafeifei on the 07月 12th, 2008

NTFS for Mac® OS X 6.5

Posted in MacosX by Kafeifei on the 05月 31st, 2008

终于可以不用忍受ntfs-3g那蜗牛速度了,特别是写入速度!
相比6.0版,没有了打开大文件错误和特定情况下的传输速度问题。
http://www.paragon-software.com/home/ntfs-mac/download.html

Preference pane is added;
Preference pane allows enabling/disabling POSIX permissions on an NTFS volume;
Preference pane allows turning off/on Paragon NTFS for Linux driver;
Preference pane allows disabling/enabling NTFS file/folder compression;
Preferences pane allows disabling/enabling Last Access Time attribute update;
Improved performance;
Improved driver stability.

mplayer-mscosx更新

Posted in MacosX, mplayer by Kafeifei on the 05月 25th, 2008

用Mplayer播放高清电影(蓝光原盘)

Posted in Linux, MacosX, mplayer by Kafeifei on the 05月 10th, 2008

前提还是你的cpu必须强劲,默认情况下mplayer是单线程的,所以显得力不从心,如果你的cpu是双核或支持超线程,那么试试加上一下参数:

-lavdopts threads=8

或者,来自这里:http://ubuntuforums.org/showthread.php?t=629701

-vfm ffmpeg -lavdopts lowres=2:fast:skiploopfilter=all:threads=8

---------
蓝光原盘抓出来的文件一般以 .ts 结尾 h264 标准
------- update ------
mac下,mplayer的性能明显差很多,经过大量测试,发现问题主要在音频驱动上,我的配置:

−vf scale=-2 -lavdopts lowres=1,1400:fast:skiploopfilter=all:threads=8 -ao openal -vo macosx

播放《汽车总动员》时勉强不卡!或许因为ntfs-3g的性能不佳吧,另外lowres这个配置未生效。
−vf scale=-2 可以修正字幕被拉扁的问题(视频质量未见异常)。

新装 Leopard 安装开发环境全记录

Posted in MacosX by xdanger on the 03月 16th, 2008

前期工作

安装光盘里的 Xcode,或者下载 iPhone SDK,2.1G,包括了最新的 Xcode 和 iPhone SDK。

安装好后会有 apache-2.2.6 / php-5.2.5 / ruby-1.8.6 / rails-1.2.6 / python-2.5.1 / java-1.5.0_13 / sqlite-3.4.0 …… gcc 会有2个版本:4.0.14.2.1,默认 /usr/bin/gcc 软连到 gcc-4.0,我们先让默认的 gcc 改用 4.2(2007年1月就 release 了,Changelog

cd /usr/bin
sudo unlink gcc
sudo ln -s gcc-4.2 gcc

设置全局编译参数,编辑 /etc/profile,加上下面的全局变量,保存后重启终端

export MACOSX_DEPLOYMENT_TARGET=10.5
export ARCHFLAGS='-arch x86_64'
export CFLAGS='-arch x86_64 -O3 -pipe'
export CXXFLAGS=$CFLAGS
export LDFLAGS='-arch x86_64 -bind_at_load'

如果需要编译兼容 i386、ppc、ppc64 版本的(编译出来的文件会增大不少),只要加上相应的 -arch 即可

export CFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -O3 -pipe"
export CXXFLAGS=$CFLAGS
export LDFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -bind_at_load"

如果需要编译针对 CPU 优化的,Apple 全系列已经升级到 Intel Core Duo,所以可以加上以下参数

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=nocona -O2 -pipe"
CXXFLAGS="${CFLAGS}"

-O 使用 O3,其他详见 http://www.gentoo-wiki.com/Safe_Cflags

因此我自己编译的最终参数是

export MACOSX_DEPLOYMENT_TARGET=10.5
export ARCHFLAGS='-arch x86_64'
export CFLAGS='-arch x86_64 -march=nocona -pipe -O3 -pipe'
export CXXFLAGS=$CFLAGS
export LDFLAGS='-arch x86_64 -bind_at_load'

Java

虽然 Apple 总算在 2008年2月 放出了 JDK6 Preview,但是问题还是非常多。我们还是用 BSD 的一个移植版本 Soylatte,直接下载 64-bit JDK for Mac OS X 10.5: soylatte16-amd64-1.0.2.tar.bz2 (Username: 'jrl',Password: 'I am a Licensee in good standing')
解压后放到 /usr/local/soylatte16-amd64,软连 /usr/local/java 到这个目录:

cd /usr/local; sudo ln -s soylatte16-amd64 java
cd /System/Library/Frameworks/JavaVM.framework/Versions/; sudo mkdir soylatte16-amd64
cd soylatte16-amd64; sudo ln -s /usr/local/java Home; sudo ln -s ./Home/bin ./Commands
cd ../A; sudo mv Commands Commands.bak; sudo ln -s ../CurrentJDK/Commands ./
cd ..; sudo unlink CurrentJDK; sudo ln -s soylatte16-amd64 CurrentJDK
java -version

显示如下,Java 就算搞定了

java version "1.6.0_03-p3"
Java(TM) SE Runtime Environment (build 1.6.0_03-p3-landonf_03_feb_2008_01_32-b00)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-p3-landonf_03_feb_2008_01_32-b00, mixed mode)

基本库和命令

libtool

curl http://ftp.gnu.org/gnu/libtool/libtool-1.5.26.tar.gz > libtool-1.5.26.tar.gz
tar xzf libtool-1.5.26.tar.gz
cd libtool-1.5.26
./configure
make
sudo make install

zlib

curl http://www.zlib.net/zlib-1.2.3.tar.gz > zlib-1.2.3.tar.gz
tar xzf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
sudo make install

openssl/libssl

curl http://www.openssl.org/source/openssl-0.9.8g.tar.gz > openssl-0.9.8g.tar.gz
tar xzf openssl-0.9.8g.tar.gz
cd openssl-0.9.8g
./config --prefix=/usr/local --openssldir=/openssl threads zlib-dynamic
vi Makefile
# OPTIONS 里去掉 no-sse2 来开启 CPU 的 SSE2 指令集支持
# CFLAG 里 -arch i386 改为 -arch x86_64
# SHARED_LDFLAGS 同上
make
sudo make install
cd /usr/local/bin
sudo ln -s ../openssl/bin/* ./

wget

curl http://ftp.gnu.org/gnu/wget/wget-1.11.tar.bz2 > wget-1.11.tar.bz2
tar xjf wget-1.11.tar.bz2
cd wget-1.11.tar.bz2
./configure --with-libssl-prefix=/usr/local/openssl
make
sudo make install

libpng

wget http://downloads.sourceforge.net/libpng/lpng1225.tar.bz2 -O libpng-1.2.25.tar.bz2
tar xjf libpng-1.2.25.tar.bz2
cd libpng-1.2.25
./configure
make
sudo make install

libjpeg

wget http://freshmeat.net/redir/libjpeg/5665/url_tgz/jpegsrc.v6b.tar.gz
tar xzf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo mkdir -p /usr/local/man/man1
sudo make install -lib

freetype

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.gz
tar xzf freetype-2.3.5.tar.gz
cd freetype-2.3.5
./configure
make
sudo make install

fontconfig

wget http://fontconfig.org/release/fontconfig-2.5.91.tar.gz
tar xzf fontconfig-2.5.91.tar.gz
cd fontconfig-2.5.91
./configure --prefix=/usr/local --with-zlib --with-jpeg --with-png --with-freetype --disable-dependency-tracking
make
sudo make install

gd2

wget http://www.libgd.org/releases/gd-2.0.35.tar.bz2
tar xjf gd-2.0.35.tar.bz2
cd gd-2.0.35
./configure --with-fontconfig=/usr/local/bin --disable-dependency-tracking
make
sudo make install

ImageMagick

wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.9-7.tar.bz2
tar xjf ImageMagick-6.3.9-7.tar.bz2
cd ImageMagick-6.3.9
./configure --with-fontconfig
make
sudo make install

mysql

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a.tar.gz/from/http://mirror.services.wisc.edu/mysql/
tar xzf mysql-5.0.51a.tar.gz
cd mysql-5.0.51a
./configure --with-mysql-user=mysql --with-mysql-group=mysql --with-innodb --with-archive-storage-engine --with-ndbcluster --with-zlib-dir=/usr/local --with-pthread --with-extra-charsets=utf8 --disable-dependency-tracking
make
sudo make install

neon

wget http://www.webdav.org/neon/neon-0.25.5.tar.gz
tar xzf neon-0.25.5.tar.gz
cd neon-0.25.5
./configure --with-ssl=openssl
make
sudo make install

Berkeley DB

# 为了让 subversion-1.4.6 使用,只能用 db-4.4 版本的
wget http://download.oracle.com/berkeley-db/db-4.4.20.tar.gz
tar xzf db-4.4.20.tar.gz
cd db-4.4.20/build_unix
make
sudo make install
cd /usr/local/; sudo ln -s BerkeleyDB.4.4 bdb

subversion

wget http://apache.mirror.phpchina.com/httpd/httpd-2.2.8.tar.bz2
tar xjf httpd-2.2.8.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-1.4.6.tar.bz2
tar xjf subversion-1.4.6.tar.bz2
cd subversion-1.4.6
cp -r ../httpd-2.2.8/srclib/apr* ./
./configure --with-apxs=/usr/sbin/apxs --with-berkeley-db=/usr/local/bdb --with-ssl
make
sudo make install

libevent

wget http://www.monkey.org/~provos/libevent-1.4.2-rc.tar.gz
tar xzf libevent-1.4.2-rc.tar.gz
cd libevent-1.4.2-rc
./configure
make
sudo make install

memcached

wget http://www.danga.com/memcached/dist/memcached-1.2.5.tar.gz
tar xzf memcached-1.2.5.tar.gz
cd memcached-1.2.5
./configure
make
sudo make install

pcre

wget http://nchc.dl.sourceforge.net/sourceforge/pcre/pcre-7.6.tar.bz2
tar xjf pcre-7.6.tar.bz2
cd pcre-7.6
./configure --enable-utf8
make
sudo make install

pkg-config

wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
tar xzf pkg-config-0.23.tar.gz
cd pkg-config-0.23
make
sudo make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

libxml2

wget ftp://xmlsoft.org/libxml2/libxml2-2.6.31.tar.gz
tar xzf libxml2-2.6.31.tar.gz
cd libxml2-2.6.31

lighttpd

wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.bz2
tar xjf lighttpd-1.4.19.tar.bz2
cd lighttpd-1.4.19
./configure --with-openssl --with-zlib --without-bzip2 --with-pcre  --with-gdbm --with-memcache --with-ldap
make
sudo make install

好像大功告成了,还缺啥嘛?

iphone 1.1.3/1.1.4 完美破解指南

Posted in Bsd, MacosX, Unix, shell by Kafeifei on the 03月 15th, 2008

首先用itunes将iphone升级至1.1.3/1.1.4
然后运行ziphone激活,破解,解锁……
安装openssh
root登陆,密码:alpine
安全起见 #chmod -x /usr/bin/passwd
这里生成密码,salt为/s,用它替换root密码(/etc/master.passwd)
然后移动 /Application /Library 到第二分区

Leopard 编译 universal php5

Posted in Bsd, MacosX, Unix, bash, php by Kafeifei on the 12月 11th, 2007

因为自带的php没有gd所以要重编
因为服务器用的是x86_64 httpd+php5所以要编 x86_64
因为自带的httpd+php是 universal ,所以要这样做
自带的httpd很好,所以不搞它了
参考:
ppc就不要了

export MACOSX_DEPLOYMENT_TARGET=10.5
export ARCHFLAGS='-arch i386 -arch x86_64'
export CFLAGS='-arch i386 -arch x86_64 -O3 -pipe'
export CXXFLAGS='-arch i386 -arch x86_64 -O3 -pipe'
export LDFLAGS='-arch i386 -arch x86_64 -bind_at_load'

make时候可能出现这样的提示:

gcc-4.0: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags

在 configure 的时候加上 --disable-dependency-tracking

'./configure' \
'--prefix=/usr' \
'--with-config-file-path=/private/etc' \
'--sysconfdir=/private/etc' \
'--with-apxs2=/usr/sbin/apxs' \
'--with-iconv=/usr/local' \
'--with-mhash=/usr/local' \
'--with-gettext=/usr/local' \
'--with-mysql=/usr/local' \
'--with-mysqli=/usr/local/bin/mysql_config' \
'--with-pdo-mysql=/usr/local' \
'--with-openssl=/usr' \
'--with-zlib=/usr' \
'--with-curl=/usr' \
'--with-gd' \
'--with-png-dir=/usr/X11' \
'--with-jpeg-dir=/usr/local' \
'--with-freetype-dir=/usr/X11' \
'--with-xpm-dir=/usr/X11' \
'--enable-gd-native-ttf' \
'--enable-mbstring' \
'--enable-sockets' \

已有的库就不重装了,只需自己安装 gawk, libiconv, mhash, gettext, mysql, jpeg
需要特别注意:系统自带的liviconv有问题,需要自己编一份到/usr/local(小心不要覆盖以前的,否则可能连sh都不能执行了),php在configure时就算指定了 --with-iconv=/usr/local 它还是首先找到 /usr/include/iconv.h ,而且 --help 里只提到 --with-iconv-dir=,应该使用 --with-iconv=
解决方法:

sh#mv /usr/include/iconv.h /usr/include/iconv.h.bak

Macosx Universal Binaries 减肥瘦身

Posted in MacosX by Kafeifei on the 11月 11th, 2007

三种方法

ditto –rsrc –arch i386 /Applications/Foo.app /Application/Foo-ppc.app
lipo -thin i386
lipo -remove ppc

iPhone的通讯录以拼音排序

Posted in MacosX, php, shell by Kafeifei on the 10月 6th, 2007

在iphone中安装php
将代码保存为py.php
ssh 登陆iphone或者在iphone安装Term-vt100
执行 php py.php 等待重启完成
结束

支持的中文貌似很有限,拼音表的处理看来要自己搞一个了,这个在网上找的。

py.php

<?php
/**
 * @desc 将iPhone的通讯录以拼音排序, 需要安装PHP
 * @author Kafeifei <http://www.nimab.org>
 * @version 0.2beta
 */
error_reporting(0);
$sqlite_file = '/private/var/root/Library/AddressBook/AddressBook.sqlitedb'; // 1.1.3 以前的版本
$sqlite_file = '/private/var/mobile/Library/AddressBook/AddressBook.sqlitedb'; // 1.1.3 以后的版本
if (!file_exists($sqlite_file)) {
	println("SQLiteDB:File Notfound.");
	die;
}
$dsn = "sqlite:{$sqlite_file}";
try {
    $dbh = new PDO($dsn);
    println("Open {$dsn}   OK.");
} catch (Exception $e) {
    println("Open {$dsn}   ERROR:".$e->getMessage());
    die;
}
$stmt = $dbh->query("SELECT ROWID, First, Last FROM ABPerson");
while ($person = $stmt->fetch(PDO::FETCH_ASSOC)) {
	$first = ucfirst(Py::parse(u2g($person['First'])));
	$last  = ucfirst(Py::parse(u2g($person['Last'])));
	$dbh->query("update ABPerson set FirstSort='{$first}', LastSort='{$last}' where ROWID = {$person['ROWID']} ;\n");
	println("{$person['ROWID']}\tOK.");
}
println("done.");
println("rebooting...");
system('launchctl stop com.apple.SpringBoard');

function u2g($str) {
    return iconv('utf-8', 'gbk', $str);
}

function println($str) {
    echo "$str\n";
    flush();
}

class Py {
    private static $table = array(
        array("a",-20319),
        array("ai",-20317),
        array("an",-20304),
        array("ang",-20295),
        array("ao",-20292),
        array("ba",-20283),
        array("bai",-20265),
        array("ban",-20257),
        array("bang",-20242),
        array("bao",-20230),
        array("bei",-20051),
        array("ben",-20036),
        array("beng",-20032),
        array("bi",-20026),
        array("bian",-20002),
        array("biao",-19990),
        array("bie",-19986),
        array("bin",-19982),
        array("bing",-19976),
        array("bo",-19805),
        array("bu",-19784),
        array("ca",-19775),
        array("cai",-19774),
        array("can",-19763),
        array("cang",-19756),
        array("cao",-19751),
        array("ce",-19746),
        array("ceng",-19741),
        array("cha",-19739),
        array("chai",-19728),
        array("chan",-19725),
        array("chang",-19715),
        array("chao",-19540),
        array("che",-19531),
        array("chen",-19525),
        array("cheng",-19515),
        array("chi",-19500),
        array("chong",-19484),
        array("chou",-19479),
        array("chu",-19467),
        array("chuai",-19289),
        array("chuan",-19288),
        array("chuang",-19281),
        array("chui",-19275),
        array("chun",-19270),
        array("chuo",-19263),
        array("ci",-19261),
        array("cong",-19249),
        array("cou",-19243),
        array("cu",-19242),
        array("cuan",-19238),
        array("cui",-19235),
        array("cun",-19227),
        array("cuo",-19224),
        array("da",-19218),
        array("dai",-19212),
        array("dan",-19038),
        array("dang",-19023),
        array("dao",-19018),
        array("de",-19006),
        array("deng",-19003),
        array("di",-18996),
        array("dian",-18977),
        array("diao",-18961),
        array("die",-18952),
        array("ding",-18783),
        array("diu",-18774),
        array("dong",-18773),
        array("dou",-18763),
        array("du",-18756),
        array("duan",-18741),
        array("dui",-18735),
        array("dun",-18731),
        array("duo",-18722),
        array("e",-18710),
        array("en",-18697),
        array("er",-18696),
        array("fa",-18526),
        array("fan",-18518),
        array("fang",-18501),
        array("fei",-18490),
        array("fen",-18478),
        array("feng",-18463),
        array("fo",-18448),
        array("fou",-18447),
        array("fu",-18446),
        array("ga",-18239),
        array("gai",-18237),
        array("gan",-18231),
        array("gang",-18220),
        array("gao",-18211),
        array("ge",-18201),
        array("gei",-18184),
        array("gen",-18183),
        array("geng",-18181),
        array("gong",-18012),
        array("gou",-17997),

        array("gu",-17988),
        array("gua",-17970),
        array("guai",-17964),
        array("guan",-17961),
        array("guang",-17950),
        array("gui",-17947),
        array("gun",-17931),
        array("guo",-17928),
        array("ha",-17922),
        array("hai",-17759),
        array("han",-17752),
        array("hang",-17733),
        array("hao",-17730),
        array("he",-17721),
        array("hei",-17703),
        array("hen",-17701),
        array("heng",-17697),
        array("hong",-17692),
        array("hou",-17683),
        array("hu",-17676),
        array("hua",-17496),
        array("huai",-17487),
        array("huan",-17482),
        array("huang",-17468),
        array("hui",-17454),
        array("hun",-17433),
        array("huo",-17427),
        array("ji",-17417),
        array("jia",-17202),
        array("jian",-17185),
        array("jiang",-16983),
        array("jiao",-16970),
        array("jie",-16942),
        array("jin",-16915),
        array("jing",-16733),
        array("jiong",-16708),
        array("jiu",-16706),
        array("ju",-16689),
        array("juan",-16664),
        array("jue",-16657),
        array("jun",-16647),
        array("ka",-16474),
        array("kai",-16470),
        array("kan",-16465),
        array("kang",-16459),
        array("kao",-16452),
        array("ke",-16448),
        array("ken",-16433),
        array("keng",-16429),
        array("kong",-16427),
        array("kou",-16423),
        array("ku",-16419),
        array("kua",-16412),
        array("kuai",-16407),
        array("kuan",-16403),
        array("kuang",-16401),
        array("kui",-16393),
        array("kun",-16220),
        array("kuo",-16216),
        array("la",-16212),
        array("lai",-16205),
        array("lan",-16202),
        array("lang",-16187),
        array("lao",-16180),
        array("le",-16171),
        array("lei",-16169),
        array("leng",-16158),
        array("li",-16155),
        array("lia",-15959),
        array("lian",-15958),
        array("liang",-15944),
        array("liao",-15933),
        array("lie",-15920),
        array("lin",-15915),
        array("ling",-15903),
        array("liu",-15889),
        array("long",-15878),
        array("lou",-15707),
        array("lu",-15701),
        array("lv",-15681),
        array("luan",-15667),
        array("lue",-15661),
        array("lun",-15659),
        array("luo",-15652),
        array("ma",-15640),
        array("mai",-15631),
        array("man",-15625),
        array("mang",-15454),
        array("mao",-15448),
        array("me",-15436),
        array("mei",-15435),
        array("men",-15419),
        array("meng",-15416),
        array("mi",-15408),
        array("mian",-15394),
        array("miao",-15385),
        array("mie",-15377),
        array("min",-15375),
        array("ming",-15369),
        array("miu",-15363),
        array("mo",-15362),
        array("mou",-15183),
        array("mu",-15180),
        array("na",-15165),
        array("nai",-15158),
        array("nan",-15153),
        array("nang",-15150),
        array("nao",-15149),
        array("ne",-15144),
        array("nei",-15143),
        array("nen",-15141),
        array("neng",-15140),
        array("ni",-15139),
        array("nian",-15128),
        array("niang",-15121),
        array("niao",-15119),
        array("nie",-15117),
        array("nin",-15110),
        array("ning",-15109),
        array("niu",-14941),
        array("nong",-14937),
        array("nu",-14933),
        array("nv",-14930),
        array("nuan",-14929),
        array("nue",-14928),
        array("nuo",-14926),
        array("o",-14922),
        array("ou",-14921),
        array("pa",-14914),
        array("pai",-14908),
        array("pan",-14902),
        array("pang",-14894),
        array("pao",-14889),
        array("pei",-14882),
        array("pen",-14873),
        array("peng",-14871),
        array("pi",-14857),
        array("pian",-14678),
        array("piao",-14674),
        array("pie",-14670),
        array("pin",-14668),
        array("ping",-14663),
        array("po",-14654),
        array("pu",-14645),
        array("qi",-14630),
        array("qia",-14594),
        array("qian",-14429),
        array("qiang",-14407),
        array("qiao",-14399),
        array("qie",-14384),
        array("qin",-14379),
        array("qing",-14368),
        array("qiong",-14355),
        array("qiu",-14353),
        array("qu",-14345),
        array("quan",-14170),
        array("que",-14159),
        array("qun",-14151),
        array("ran",-14149),
        array("rang",-14145),
        array("rao",-14140),
        array("re",-14137),
        array("ren",-14135),
        array("reng",-14125),
        array("ri",-14123),
        array("rong",-14122),
        array("rou",-14112),
        array("ru",-14109),
        array("ruan",-14099),
        array("rui",-14097),
        array("run",-14094),
        array("ruo",-14092),
        array("sa",-14090),
        array("sai",-14087),
        array("san",-14083),
        array("sang",-13917),
        array("sao",-13914),
        array("se",-13910),
        array("sen",-13907),
        array("seng",-13906),
        array("