kurrunk

不停转圈的人

“几束”目录存档

关于go语言的种种

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

发现自已有洁癖,总是想找一个完美的东西,以前喜欢过java php python,现在又喜欢上go语言了,这一次我都有些瞧不起自己的善变相了。

但学习了go语言后的确发现了它在很多场景中的表现比我掌握的其它语言要更合适。

简洁的语法和适时的表现

计算机语法对我来讲很重要,习惯了C语言的语法形式后我很难去接受其它语法;只使用过命令式语言,对于函数式语言也不容易接受;go语言语法继承了C语言,同时力求简洁,比如去除while,去除if后的括号,行尾不必加分号,等等。

相比较如C这样的语言,go语言开发起来要轻松很多,我感觉主要是go语言本身就支持现在开发必要的一些模块,比如字符串处理,比如是unicode,比如一些常用的库,像json xml http rpc,甚至websocket,而且有垃圾回收的功能,这样开发时要轻松很多。

运行速度

学习了go语言后第一任务就是测试速度,官方宣称接近C的速度,但结果并不是那样。

第一次,功能是从一个文本文件中逐行读数据依次写入在新文件中,印象中记得用的时间值是:go 1s,php 2s,python 3s。

第二次,用正则表达式解析日志格式,php最快,go要远远慢于php的速度。

第三次,基于第二次的代码,把go中的正则表达式改写(去除.*)后,处理20万行日志时,go用时2分38秒,php用时3分35秒;内存方面go表现的突出,只用了1.8M内存,而php用4.3M。

第四次,基于第三次的代码,去除go的正则表达式,用Split代替,结果go处理20万行的日志只用37秒。

总体来讲并不甚理想,真的应该试试在php中用split后的表现。

官方网站写着应该用go的方式使用GO开发,这个等后面更深入的使用吧。

代码量上看,go还是很不错的,比php写的程序的代码量要小一点。

不习惯的地方

以前都在使用动态语言,动态语言的数据结构很灵活,比如python中的字典,value可以是任何数据类型,而go中的map只能是一种value。这样我在开发复杂的结构时,GO的复杂程度就提高了很多。这一点琢磨了很长时间不得其解,网上相关的中文知识太少了,英文又看不懂,又没有静态语言的编程经验……

总之

语法喜欢,速度满意也期待新的版本,无英文能力学习门槛相对高,期待中文内容的丰富。

加上go的并行特性,我的工作中比较适合用go来开发,今后会优先考虑go语言来开发。

在linux上安装nginx-FastCGI-Flask

Flask是基于pythonWerkzeug Jinja 2的一个轻量级WEB框架。python的web框架很多,个性差别很大,找到很久找到了flask,主要是几个原因:轻量级、久仰jinja、pocoo的名声不错。

主流的linux发行版本上,安装nginx和python都是非常轻松的,比如在archlinux上:
#pacman -S nginx python2

利用easy_install安装flask:
#easy_install flup
#easy_install flask

新建WEB目录:$mkdir www
新建主PY文件:$vim www/app.py

#!/usr/bin/env python
# encoding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def helloworld():
        return "Hello World!"

创建fcgi文件:$vim www/fcgi.py

#!/usr/bin/env python
# encoding: utf-8
from app import app
from flup.server.fcgi import WSGIServer
WSGIServer(app,bindAddress='/tmp/flask_le5le.sock').run()

配置nginx站点:
# vim /etc/nginx/conf/vhosts/flask.le5le

server{
         listen 80;
         server_name flask.le5le.com;
         location / {
             include fastcgi_params;
             fastcgi_param SCRIPT_FILENAME "";
             fastcgi_param PATH_INFO $fastcgi_script_name;
             fastcgi_pass unix:/tmp/flask_le5le.sock;
                 }
         }

#vim /etc/nginx/conf/nginx.conf
在http{}中加入vhosts目录:

include vhosts/*;

运行fcgi.py:
$ python www/fcgi.py

用ROOT帐户修改sock文件权限:
# chmod 777 /tmp/flask_le5le.sock

重启nginx:
# /etc/rc.d/nginx restart

现在用浏览器访问站点就能看到”hello world”了。

重回到那个世界:archlinux fcitx …

最早用linux是redhat,那时只是玩玩,乐在其中,后来接触到UBUNTU,再后来是DEBIAN,DEBIAN用了很长时间,直到后来安装了archlinux。再后来用过一段时间的gentoo,因为ubuntu用起来太简单,最近一年一直在用ubuntu。

也算是把各个重要的linux发行版本都折腾过了,对各个系统也有一点自己的认识。

这两天,ubuntu11.04发布,手贱。升级就要完的时候,因为下载flashplugin半天没动静,又不能取消,我就强制关机。结果就是ubuntu启动不了了,好像是硬盘怎么了。

又因为不习惯ubuntu的新界面(家用电脑一直是那界面),索性换系统吧。

没怎么考虑debian,原因我也不知道,好像是觉得少了些特色,或者是其它什么原因;

gentoo不错,就是需要时间去收拾,因为是工作用的电脑,空闲的时间不是很多。

还有就是archlinux了,archlinux用的人似乎不多,很多时候是自己在官方WIFI上摸索,还有archlinux配置起来也是需要一些时间,但相比gentoo要少很多工作。但archlinux的”KISS”很符合我的喜好。

结果是安装了archlinux。而且配上了gnome-shell。界面用的很上手。

总的安装过程比想象中的复杂了一些,因为gtk是3,折腾了很长时间的输入法,还好在刚刚可以输入五笔了。在若干年前,fcitx就给过我不小的惊喜,今天的惊喜又是fcitx带来的。

现在,还有一大遗憾,就是不能收音,就是不能录音,这个可不行,我还得再摸索摸索。

在linux上搭建flex(flash)开发环境

习惯了在WINDOWS中用FLASH或FLEX Builder,在LINUX中开发多少有些不习惯,但在LINUX中搭建FLASH开发环境还是很简单的。

首先去ADOBE网站下载FLEX SDK压缩包,当前最新版本是4.0

下载在本地后解压缩:
$unzip flex*.zip -d tempdir
建立FLEX运行目录:
$sudo mkdir /opt/flex
转移文件到新目录:
$sudo mv tempdir/* /opt/flex/
删除临时目录
$rmdir tempdir

现在可以用/opt/flex/bin/mxmlc编译SWF文件了,如果在bash中希望直接用命令编译SWF,在~/.bashrc中加入:
export PATH=/opt/flex/bin:$PATH

环境搭建完成,可以进行FLASH的开发了。

新建kurrunk.as文件:

package{
    import flash.display.*;
    import flash.text.*;
    public class ad extends Sprite{
        public function ad(){
            var t:TextField = new TextField();
            t.text = 'kurrunk.com';
            addChild(t);
        }
    }
}

编译到swf文件:
$mxmlc kurrunk.as
在浏览器中查看结果:
$chromium-browser kurrunk.swf

在Moblin中播放mp3、avi、rmvb

Moblin默认支持的音频和视频格式非常有限,似乎只支持OGG\OGV格式,而软件仓库中并没有必要的解码器。

首先确认yum可以安装哪些相关的软件,搜索“gstreamer”的结果:
gst-plugins-base.i586
gst-plugins-base-devel.i586
gst-plugins-farsight.i586
gst-plugins-good

如果列表中有还没安装的gstplugin就先都安装上。

接着开始下载、安装了,记得在configure的时候prefix=/usr。

  • 下载lame源码包,编译安装
  • 下载文件:libid3tag、libmad、madplay(下载地址),编译安装。
    这时我遇到error:
    cc1: error: unrecognized command line option "-fforce-mem"
    解决方法就是编辑Makefile,删除字符串“-fforce-mem”
  • #yum install liboil-devel
  • 下载yasmxvidFFmpeg,并编译安装
  • 去下载gst-plugins-bad、gst-plugins-ugly、gst-ffmpeg(下载地址),编译安装

正常情况下,这时Moblin已经可以播放mp3 avi rm文件了。