Better Javascript Syntax Support

近来需要看一段被混淆的Javascript,所有代码都挤在一行,很是难过。看那一屏的乱码,手动整理自然不可能,好在vim有自动格式化。

不过Vim Bundle自带的Syntax格式化出来,那叫一个惨不忍睹。网上搜了一下,将信将疑的下载了这个脚本至C:Program Files (x86)Vimvim73syntaxjavascript.vim,真的很是好用啊,呵呵

  1. Copy & Paste 拷贝粘贴
  2. :g/;/s//;r/g 以分号换行
  3. :g/{/s//r{r/g 以{换行
  4. :g/}/s//r}r/g 以}换行
  5. :set filetype=javascript 使用新下载的那个Syntax脚本文件
  6. gg=G 格式化
  7. :g/^$/d 删掉空行

打完收工,格式化得很是完美…

Video and photo solution on WordPress

1. Video Solution

在Wordpress的Plugins->Add New页面里搜索”HTML5 and Flash Video Player”,安装完成并激活后,就可以用下面的方式嵌入视频:

  • Without Html5 Video Support:
    [ videoplayer file=”video/xxx.flv” /]
  • With Html5 Video Support:
    [ videoplayer file=”video/xxx.(mp4, ogg, webm)” /]

注意, 去掉'[‘后面的空格,但保留 ‘/]’前面的空格。具体效果,见这里

2. Photo Solution

在Wordpress的Plugins->Add New页面里搜索”NextGEN Gallery“和”NextGEN Monoslideshow“,安装完成后,需要先下载相关SWF文件到’wp-contentuploads’,然后再激活。

需要下载的文件有:

  • JW Image Rotator – 非商业用途,免费
    下载地址是这里:http://www.longtailvideo.com/players/jw-image-rotator/
    解压缩后,释放imagerotator.swf文件到’wp-contentuploads’目录。
  • Mono Slideshow – 收费,25欧
    Demo地址:http://www.monoslideshow.com/demo
    需要的文件是monoslideshow.swf,同样需要释放到’wp-contentuploads’目录。
    如果你很邪恶或者你很穷困潦倒,欢迎使用google的filetype:swf,自行查找,大家共同鄙视之…
    小声说,最好的偷窃地方是这里

好了,最后配置一下路径:

  • Gallery->Options->Slideshow下面的路径;
  • Gallery->Monoslideshow下面的路径;

在Gallery里放好图片,获得Gallery的ID,你就可以开始插入图片了:

  • 基于JW Image Rotator的Slide show方式:
    [ slideshow id=2 ]
  • 基于Mono Slideshow的Mono Slideshow方式:
    [ monoslideshow id=2 ]

注意去掉'[‘后面和’]’前面的空格,效果如下:(如果要指定长宽,请用w和h参数)

  • Slide Show – 这种方式很实用,一定要试试全屏按钮,很震撼…
    [slideshow id=2 w=500 h=375]
  • Mono Slide Show – 这种方式有很多参数,特别是preset参数可以选择,具体请参考上面的Demo地址和下面的附录,效果也很炫…
    [monoslideshow id=2 w=500 h=375]

附:Mono Slideshow的preset参数:

  • preset=’iris’
  • preset=’melt’
  • preset=’ news-flash’
  • preset=’ rgb-separation’
  • preset=’ simple-focus-fade’
  • preset=’ simple-shatter’
  • preset=’ sparkles’
  • preset=’ spot’
  • preset=’ tv-swap’
  • preset=’ widescreen’
  • preset=’ white-water-drop’
  • preset=’ wipe-3d’
  • preset=’ zoom’

Steps to install mirrorrr and birdnest to GAE

  1. Create a GAE application named ‘<xxx>-proxy’;
    @ https://appengine.google.com
  2. Download the GAE SDK and then unzip it;
    @ https://code.google.com/appengine/downloads.html
  3. svn checkout http://mirrorrr.googlecode.com/svn/trunk/ <xxx>-proxy
  4. Change application name to ‘<xxx>-proxy’ and version to ‘1’ in app.yaml file
  5. Delete index.yaml file
  6. appcfg.py update xxx-proxy

自己建一个是好习惯,表老抢别人的流量用,霍霍~~~

Updated: Steps to install Birdnest to GAE

  1. Create a GAE application named ‘<xxx>-twitter’;
    @ https://appengine.google.com
  2. Download the GAE SDK and then unzip it;
    @ https://code.google.com/appengine/downloads.html
  3. svn checkout http://birdnest.googlecode.com/svn/branches/gae/
    DO NOT USE TRUNK
  4. Change application name to ‘<xxx>-twitter ‘ in app.yaml file
  5. Remove the following codes from code.py file.

    import socket
    import re
    ua = web.ctx.environ.get(“HTTP_USER_AGENT”, ‘None’)
    if ua.find(‘jibjib) >= 0:
    socket.setdefaulttimeout(60)
    elif ua.find(‘zh-CN’) >= 0:
    #raise Exception(‘unknown error’)
    socket.setdefaulttimeout(2)
    else:
    socket.setdefaulttimeout(2)

  6. appcfg.py update xxx-twitter

Slice as a copy

Fine, I have no choice, but to say I am an outman… I’ve no idea that python slice can be used as a copy of the original array, which, of course, can save us a tons of typing.

Again, when I talked about slice, I mean array slice, not immutable/optimized string slice.

>>> a = [ 1, 2, 3 ]
>>> b = a[ : ]

>>> id( a )
12822008
>>> id( b )
17547792

>>> id( a[ 0 ] )
505408872
>>> id( b[ 0 ] )
505408872

>>> a = ‘123’
>>> b = a[ : ]

>>> id( a )
12578656
>>> id( b )
12578656

BASH取得脚本所在路径

脚本所在路径通常来说,比pwd好用得多。以前,总是直接dirname $0,或者在perl里从__FILE__里取。今天又要写这个,看恶心了,想起bash自己就能做这种事情,但不记得语法了。于是google了一下”bash string manipulate”。

果然很好很强大:http://tldp.org/LDP/abs/html/string-manipulation.html

用得上的是这段:
${string%substring}
Deletes shortest match of $substring from back of $string.

于是${0%/*}把末尾’/’以后的全删掉就行了。
当然,这是相对于pwd的路径,不过已经够用了。

Notes from “Systems that never stop” by Joe Armstrong

1. isolation;
2. concurrency – built in programming language instead of operating system;
3. must detect failures – must work across machine boundaries;
4. failure identification;
5. live code upgrade – for post hock debugging;
6. stable storage;

不知道为什么,一直挺喜欢Joe Armstrong的讲座,虽然每次都是差不多的内容。可能是因为他的声音很有特色,非常的comedy 😀

一根黄瓜

# language: zh-CN
功能:加法
为了避免一些愚蠢的错误
作为一个数学白痴
我希望有人告诉我数字相加的结果

场景: 两个数相加
假如我已经在计算器里输入6
而且我已经在计算器里输入7
当我按相加按钮
那么我应该在屏幕上看到的结果是13

第一眼,Cucumber, 嗯, 不错…但是突然,想起一个怪物, 易语言,身躯一震:

.版本 2
.子程序 _编辑框1_内容被改变
.如果真 (取文本长度 (编辑框1.内容) = 2)
编辑框2.获取焦点 ()
.如果真结束

复又觉得,如果仅局限于配置文件,尚可接受…
复又觉得,DSL已然模糊了二者的界限…

复又觉得,区别在于是LL parse抑或Regular parse…
复又觉得,区别在于复杂程度…

好吧,最后觉得,自己是个白痴…

Camtasia Studio 6

下周要负责录一个内部产品的Tutorial,于是先行用Camtasia Studio来录了一个测试教程,还是蛮好用的。

缺点有:

Smart Focus显得移动过于频繁;

生成Flash预加载缓冲内容过多,将近5%;(不知有没有配置选项)

机器embeded的话筒录下来,感觉完全是另外一个人的声音;

突然发现,”嗯啊哈”的,如此之多,呵呵。

附测试结果:【教程整个很白痴,纯粹测试性质】

http://www.axqd.net/hotkey/ for Hotkey Power on http://www.axqd.net/

PS: 工作后真是没法坚持定期写Blog了,一切随缘吧,想起了又无事,就多写几篇。