你怎么用iPhone?

iPhone的操作系统是mac os x,越狱的iPhone通常都会带上unix subsystem,也就意味着iPhone已经不再是手机那么简单,反正在我的眼里它就是一台可以随身携带的迷你unix server,不过要借助ssh客户端软件,比如putty。

列一下我在iPhone上最常用的命令行工具:

> svn:用于从开源社区,如Google Code获取源码;

> wget:命令行下载工具;

> apt:基于命令行的软件管理工具,可以完成cydia所能做的事;

> links:基于命令行的浏览器,超屌,应用场景嘛,自己想想,类似的工具还有lynx,可以用apt-get安装;

> top:类似windows任务管理器,不过不能直接关掉进程,需要使用kill/killall来关闭;

> killall:关闭指定程序名称的所有进程,killall SpringBoard;

> vim:用来代替subsystem自带的vi,我是直接用apt-get install vim安装的,支持大部分语法高亮,我另外安装了actionscript 1.0 - 3.0的语法包;

> httpd:http服务器,可以装php5,当开发用的server来跑;

> sqlite:命令行下访问通讯录等数据库;

> google appengine sdk:开发使用google ape服务python应用;

> 3proxy:在iPhone上架设代理服务器,特殊情形下,用于笔记本利用wifi通过iPhone GPRS上网,包含socks/http(s)/imap;

> iphone sdk:可以在iPhone上开发iPhone使用的xcode代码(有点绕),需要安装gcc for iphone;

还有不少东东就没有写,总而言之,你还真“别拿iPhone不当电脑” ,如果你愿意,可以把iPhone当网站服务器用,嘿嘿...

这些东东已经小用了数月,也小有体会,如果有同样需求要的同学,可以留言,一起发掘iPhone的潜力,下面上几张小图。

iphone_putty_sqlite3

sqlite

links for iPhone

links

 

actionscript syntax

actionscript syntax

google ape

google ape

 

python

python

有用的formatString,支持Actionscript1.0

有用过C#, C/C++, PHP的人都应该知道string.Format或者printf吧! 下面我们让AS也有这样的功能. 什么? 没听说过 ... 拖出去TJJ ...

 
var formatString = function(m)
{
  if (m.indexOf("{")==-1) return m;
  var r="",n="";
  for(var i=0;i<m.length;i++)
  {
    if (m.charAt(i)=="{")
    {
      i++;
      for(n="";m.charAt(i)!="}";i++)
        n+=m.charAt(i);
      if (isNaN(parseInt(n)))
      {
        r+="{";
        i-=n.length+1;
        continue;
      }
      i++;
      r+=arguments[parseInt(n)+1];
    }
    r += m.charAt(i);
  }
  return r;
};
 
/* usage:
var model = "<font size='{2}'><b>{0}</b>+<b>{1}</b>=<b>{0}</b></font>";
var str = formatString(model, 100, 0, 9);
trace(str);
// output: <font size='9'><b>100</b>+<b>0</b>=<b>100</b></font>
*/ 就这么简单, 如果觉得不爽, 你可以继续使用:
var str = "<font size='"+9+"'><b>"+100+"</b>+<b>"+0+"</b>=<b>"+100+"</b></font>";
trace(... 狂呕中 ...
 

顺便说一句: 函数体不用修改, 直接拿到html里当Javascript使, 也可以

瘦版的Delegate,支持Actionscript1.0

 Actionscript 2.0 内置了mx.utils.Delegate的类, 用法就不说了, 自己查查Google, 写了个瘦版的, 经测试可以支持Actionscript 1.0 ...

 
var fns = [];
var delegate = function(o, f)
{
    var i = fns.length;
    var fn = function(){ fns[i].f.apply(fns[i].o, [arguments,this]); };
    fns[i] = {o:o, f:f};
    return fn;
}
 
/* usage:
var onStart = function()
{
    trace(this);
};
 
btn_start.onRelease = delegate(this, onStart); // output: _level0
//btn_start.onRelease = onStart; // output: _level0.btn_start
*/
 

为什么说是廋版的呢, 其实就是编译后的文件小了一些, 看数据:

使用 mx.utils.Delegate, 文件大小会增加841 byte, 使用上面的代码, 文件大小只增加379 byte, 瘦了462 byte, 相当于小了一半多, 如果算上调用语法所占的大小, 应该不只少462 byte.虽然按字节数来说, 瘦得不多, 可是大家都知道积少成多的道理, 环保呀 ...