圣叹

我们面对现实.我们忠于理想
Mac OS 10.5下我安装了多个版本的Python,目录结构有些乱,安装一些库的时候如何确定site-packages目录呢?

from distutils.sysconfig import get_python_lib
print get_python_lib()

或者直接在终端中运行:
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

记录一下,自己编译/运行一些OpenSource的大型工程时,其脚本系统往往是Python或Lua写就,有很多库要安装,这段代码就很实用了.
Jan
24
2010
Allegro是著名的C开源游戏开发库,最初由Shawn Hargreaves设计,很多社区开发者后来为其添加了各种扩张.虽然有些功能在当前技术条件下已经过时,但是阅读Allegro的源代码仍然给我很多的提示.
MAC OS X已经预装了zlib包, 安装Allegro需要先安装libpng:http://www.libpng.org/pub/png/,下载源码包后解压编译并安装:

$ cd libpng
$ cp scripts/makefile.darwin makefile
$ make
$ make install
$ make clean

然后下载安装新版的CMake(2.6+)工具:http://www.cmake.org/. 在Allegro的源代码目录下新建并进入build目录,运行cmake命令自动创建makefiles:

$ cmake .. -DGRADE_DEBUG=on -DSHARED=off

..表示目标源文件加是当前目录的父目录.之后就是哗啦啦满屏飞字符.很快就过去了.然后依然是编译并安装命令:

$ make
$ make install

Configuring done.http://software.skoobalon.com/a5.php是最新版(Allegro5)的入门. Allegro5仍然处于开发中,是彻底重构后的一个版本.
编译并测试:
gcc demo.c -o demo1 `allegro-config --libs`

完成.
类别:Programming | Tags: , , 评论(0) 阅读(89)
Jan
23
2010
  Tamarin很早就开源了,最近在读它的源代码,偶尔做做笔记.
  As3中有很多顶级常量,比如NaN, Infinity等.Adobe的文档解释NaN依据IEEE-754定义,该值表示不是数值. Infinity表示正无穷大.那么究竟As3是如何实现这些定义的呢?
  Tamarin中包含两部分代码实现,分别是C++和AS3(Python另有他用,几乎与语言实现无关).这些常量就是使用AS3实现的.
  这些常量实现只有一句话:

public const NaN:Number = 0/0;
public const Infinity:Number = 1/0;
public const undefined = void 0;

  很简单:)
Actionscript.lang.aa中定义了两个命名空间,"AS3"和"nativeHookNS".处于AS3命名空间下的代码就是我们平常见到的builtin代码,而nativeHookNS下的代码我们不可见.
  比如Object.as中, isPrototypeOf是AS3中所有Object都有的方法:

AS3 function isPrototypeOf(V=void 0):Boolean
{
  return _isPO(this,V)
}

  而tostringHook则处于nativeHookNS命名空间下.

nativeHookNS function tostringHook():*
    {
      var s = this.public::toString()
      if (!_isScriptObject(s))
        return s
      return this.public::valueOf()
    }

  最后,来看看Math.as的源代码就会知道为什么有的方法很慢了,因为他们压根也是用AS3实现滴,和我们自己去实现没有本质上的差别sweat

public static function max(x:Number = CONFIG::NegInfinity, y:Number = CONFIG::NegInfinity, ...args:Array):Number
  {
    if (x !== x) return x
      if (y !== y) return y
      if (y > x) {
          x = y
      } else {
          if (y === x)
              if (y === 0)
                  if (1/y > 0)
                      x = y  // -0
      }
    for each (y in args)
    {
      if (y !== y) return y // isNaN
      if (y > x)
      {
        x = y;
      }
      else if (y === x && y === 0)
      {
        /*
          Lars: "You can tell -0 from 0 by dividing 1 by the zero, -0 gives -Infinity
          and 0 gives Infinity, so if you know x is a zero the test for negative
          zero is (1/x < 0)."
        */
        if ((1 / y) > 0)
          x = y;  // pick up negative zero when appropriate
      }
    }
    return x;
  }

除了Math.max和Math.min以及一些常量定义,其他算法都是C++实现.比如:

//C++
AVMPLUS_NATIVE_METHOD(double, Math_abs)
  {
    return MathUtils::abs(args->x);
  }

  MathClass.cpp中的源代码还告诉了我们一些有意思的小插曲,比如Tamarin AVM2实现ES3 15.8.2定义时,所有函数的参数都要Call一次ToNumber方法.他们没有这么做(所以标记为ISSUE)而是换了一种更有效的方法,看注释:
  // ISSUE. ES3 15.8.2 says all these functions call ToNumber on its argument.
  // this is more forgiving than declaring the args to be Number.  We either
  // have to declare these Object and to ToNumber internally, or add some special
  // type support so compiler will have ToNumber.
  //
  // for E3 compatibility all args should be optional=NaN and rest args ignored,
  // except for min, max where rest args are processed.

  TO BE CONTINUED.
  
Jan
10
2010
  昨天参加了Adobe博客日,在南锣鼓巷过客酒吧。很多都是熟人,终于有幸见到了Kenshin活人。Adobe很有诚意的在推广自己的平台、自己的技术,对各种社区都很支持。与微软相比,推广产品的风格只是过于nice了些。
  说起Flash Plantform,重复我自己的话就是其技术想比较其他RIA平台而言已经比较成熟了,但是国内仍然处于四处推广的阶段。一些高端性质的技术交流会议都比较少,国外要成熟一些,如flash on the beach,也纯属于民间性质,但他们的Speakers和Sessions都要优秀很多。当然,国内如D2、RIAmeeting也逐渐有了影响。
  尽管Flash Plantform是一个非常非常优秀的平台,我有一些想法:
  1、硬件加速。这是海内外多少人多年的呼声,Flash Player 10才遮遮掩掩露个面,作用不大。尽管Flash Player的渲染速度在同类插件中出类拔萃,缺了硬件加速,我们写游戏时就是很痛苦。迫不得已才使用各种处理矢量到位图的缓存手段,这毕竟抛弃了矢量的很多优点。
  2、多线程。也许这会和打开潘多拉的盒子一样,让网络上的各种Flash应用变的更加具备毁灭性。没有多线程,用时间片我们也能做一些事情,但是性能低下,不易维护。或许要等到AIR10才有希望。
  3、3D支持。不是Fp10的一些简单的API,AWAY3D Fp10版也只能缓存成2D性能也才说的过去。从我们做游戏的角度讲,尽管3D未必就好,毕竟能让设计师们轻松一些,不然NPC换个装扮,几十套动作下来设计师们要画到手抽经了。
  4、为什么编译后的SWF, const常量没有被优化?比如定义const A:int = 10, 使用到常量A的地方仍然是引用?什么时候才有inline关键字?什么时候有Enum?等等等等。我自己的答案是Haxe有这些,语言的进化需要时间,我们这样安慰自己,但看不到时间表,也没人站出来透露几句。
  5、LLVM,Alchemy这些相关的技术仍然在Lab阶段,如果有时间表的话大家会很开心。
  6、如果Flash CS5的运行速度还和安装速度一样慢的话,我想我们该考虑购买超级计算机了。

  对于有些人关心的HTML5是不是会kill了Flash,SilverLight是不是会打败Flash,AJAX与Flash,这些都不是我关心的话题。即便真有一天SilverLight占有率到了90%,我们只不过是换一种开发语言而已,程序员不该成为某个语言的粉丝,用户也不会在意我们的产品是使用什么语言开发的。只要吃肉就可以了,何必亲自去养猪呢?
Jan
9
2010
最近把Blog换到了godaddy.com, 直接刷信用卡就可以,比较方便.原有的域名是新网的,不支持URL转接,所以只能在代码里设置跳转.
域名改变后常用的重定向方式有: 301 redirect, 302 redirect.
301 redirect: 301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
302 redirect: 302代表暂时性转移(Temporarily Moved ).

$the_host = $_SERVER['HTTP_HOST'];
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';

if($the_host != "www.qizhi.me")
{
  Header( "HTTP/1.1 301 Moved Permanently" );
  Header( "Location: http://www.qizhi.me".$request_uri );
}


"Header( "HTTP/1.1 301 Moved Permanently" )"这一句一定要加上,不然跳转时Http Code是302,表示临时跳转.
Dec
26
2009
分页: 1/46 第一页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]