2008/10/03

graphviz , python-yapgvb

没有评论:

Graphviz是画各种流程图,网络图的软件,主页是http://www.graphviz.org/,他是AT&T Labs-Research开发的图形绘制工具, 可以很方便的用来绘制结构化的图形网络,支持多种格式输出, 生成图片的质量和速度都不错。

python-yapgvb is a python binding for Graphviz, using Boost.python.



2008/10/02

VPython

没有评论:
Vpython 是一个显示3D几何图形动画的python GTK程序。 目前py.CGAL.visual想继续把CGAL -python支持的包
bind进来(已binding的有polygon, kd-tree等)。

VPython homepage http://vpython.org/

py.CGAL.visual project
http://cgi.di.uoa.gr/~compgeom/pycgalvisual/

Installation under Ubuntu
sudo apt-get install python-visual # need gtk, boost,numpy

Example : 一个小球撞击地板的动画
(from http://vpython.org/vpythonprog.htm )

#!/usr/bin/python

from visual import *
floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01
while 1:
rate (100)
ball.pos = ball.pos + ball.velocity*dt
if ball.y < ball.radius:ball.velocity.y = -ball.velocity.y
else:ball.velocity.y = ball.velocity.y - 9.8*dt

2008/10/01

Install CGAL and CGAL-python

没有评论:
0. Prerequisites
Boost http://www.boost.org
sudo apt-get install libboost-python1.34.1
GMP http://gmplib.org/
sudo apt-get install python-gmpy # will also install libgmp3c2
MPFR http://www.mpfr.org/
(search in synaptic )
1. Install CGAL 3.3.1
sudo apt-get install libcgal2 libcgal-dev libcgal-demo
or
Goto http://www.cgal.org/cgi-bin/cgal_download.pl
./install_cgal -i

2. Install CGAL-python 0.9.3
https://gforge.inria.fr/frs/?group_id=320
follow "readme" instruction.
Homepage: http://cgal-python.gforge.inria.fr/

图简单,可以安装 0.9.1版本。http://amcg.ese.ic.ac.uk/~pfarrell/python-cgal/ 有一个python-cgal 0.9.1的deb安装包,可用


安装 python-cgal 0.9.3 (with Ubuntu 8.10, python2.5)

按readme安装后,输入
$python
>>> from CGAL.Triangulations_2 import *
出现如下错误:
Traceback (most recent call last):
File "", line 1, in
File "CGAL/__init__.py", line 3, in
from Kernel import *
ImportError: CGAL/Kernel.so: undefined symbol: _ZN4CGAL8ROTATIONE

代替make, 用Patrick Farrell写的一个安装程序 http://lists.gforge.inria.fr/pipermail/cgal-python-users/attachments/20080910/8d96239f/setup.py

Put it in your CGAL-python source directory and type:

python setup.py build
sudo python setup.py install
and it works.


---------------------------------------------------
#setup.py
from distutils.core import setup
from distutils.extension import Extension
import os
import os.path
import glob

# Author: Patrick Farrell
# patrick.farrell06@imperial.ac.uk

def MakeExtension(directory):
try:
os.stat(os.path.join("bindings", directory, "All_files_at_once.cpp"))
files = [os.path.join("bindings", directory, "All_files_at_once.cpp")]
except OSError:
files = glob.glob(os.path.join("bindings", directory, "*.cpp"))

ext = Extension(
"CGAL/%s" % directory,
files,
include_dirs=["../.."],
libraries=["CGAL", "boost_python", "gmp", "mpfr"],
define_macros=[('CGAL_DONT_USE_LAZY_KERNEL', None)]
)
return ext

directories = [directory for directory in os.listdir("bindings") if os.path.isdir(
os.path.join("bindings", directory))]
extensions = [MakeExtension(directory) for directory in directories]

setup(
name='CGAL-Python',
version='0.9',
description="Python bindings for the Computational Geometry Algorithms Libra
ry",
author = "CGAL team",
url = "http://cgal-python.gforge.inria.fr/",
packages=["CGAL"],
package_dir={"CGAL": "cgal_package/CGAL"},
ext_modules=extensions,
)

---------------------------------------------------


CGAL-Python is a collection of python modules corresponding to CGAL.
Currently CGAL-Python contains the following modules:
  • CGAL.Kernel: Point_2 , Point_3 ....
  • CGAL.Triangulations_2: Triangulation_2, Delaunay_triangulation_2, Constrained_triangulation_2 ...
  • CGAL. Triangulations_3: Triangulation_3, Delaunay_triangulation_3
  • CGAL.Mesh_2
  • CGAL. Geometric_Optimisation: Min_annulus_2, Min_annulus_3, Min_circle_2, Min_ellipse_2 , Min_sphere_2, Min_sphere_3
  • CGAL.Alpha_shapes_2(3)
  • CGAL.Polyhedron
  • CGAL.Convex_hull_2
To use CGAL as Python package you have to import the module you expect to use by typing :
from CGAL import * # this will import the whole CGAL.
from CGAL.Kernel import * # you have to import this module.

Example:
----------------------------------------------------------------------
from CGAL.Kernel import *
from CGAL.Triangulations_2 import *
from random import *
dt = Delaunay_triangulation_2()
vert = {}
for i in range(20):
vert[i] = dt.insert(Point_2(random(),random()))
# the finite vertices:
for v in dt.vertices:
print v.point()
# the finite edges
for e in dt.edges:
print e.vertex()
# the finite faces
for f in dt.faces:
for i in range(3): print f.vertex(i).point()
# compute the finite faces incident to Vertex = vert[0]
finites_faces = []
f1 = cir_faces.next()
if dt.is_infinite(f1) == False:
finites_faces.append(f1)
for f in cir_faces:
if f == f1:break

finites_faces.append(f)
---------------------------------------------------------------

Other useful packages under Ubuntu:
pyste是boost.python自带的代码生成器,利用pyste可以很方便的为c++ 的 lib加一层python的shell。pyste依赖gccxml. dependent on boost
mapnik 地图渲染引擎,其渲染的地图效果堪和googlemaps媲美. 里面的底层绘制是使用Agg库,Agg是一个高效的2D图形引擎库. python-mapnik, dependent on boost

geomview http://www.geomview.org 画二维图最好用GnuPlot,而画三维图的时候最好用geomview


----

2008/08/08

GPS 坐标转换

没有评论:
GPS 坐标转换

1 longitude = 85.276 km, 1 latitude = 110.94 km

def latlon_to_xy( lat, lon):
x, y = lon, lat
return x*85.276, y*110.94

def xy_to_latlon( x, y ):
x, y = x /85.276, y/110.94
lat, lon = y, x
return ( lat, lon )


GPS reading 格式 (lat, lon)
Singapore Bukit Timah hill (0121.3055N, 10346.6611E) => (1.35509167, 103.77768500)

小数点左边两位为 minutes, 剩下最左边的为degree,右边为minute的1/10。
如 0121.3055N 为北纬 1度21.3055分,或 1度21分0.3055*60=18.33秒,转换成十进制为 1+ 21.3055/60 = 1.35509167 度。

10346.6611E 为 东经103度46.6611分。

Note: 1 degree = 60 minutes = 3600 seconds

miniGPS:利用gsm cell 定位

没有评论:

Psiloc miniGPS是一款网络定位工具,可以让你在GSM网络中确定你自己的位置!它的主要目标是根据你在网络中的不同位置执行设定的任务.它也可以显示你的手机所登录的网络单元的详细信息.你可以根据你已登录的单元和输入新的数据来创建自己的网络单元数据库.
  miniGPS 一个通过GSM移动电话网络定位的软件。通过mimiGPS你可以将自己所在的不同位置保存下来,比如公司,家中等,然后可以用mimiGPS进行监视,一进入或离开特定的范围就可以做出改变情景模式、发送短消息、响铃和关机等不同的操作。

首先是 cell ,我们知道,由于地球本身的原因,不管发射塔建的有多高,总有其无线电波覆盖不到的地方,为了让网络覆盖到服务区的每一块区域,只有每隔一段距离,就建一 个发射塔,也称之为基站。把每个基站都连接起来,就构成了一个巨大的网络。在海上,只能用卫星来覆盖了。一个城市,从规模的大小,可以有几十甚至几百个基 站,这款软件就是利用基站的位置来进行手机使用者的定位的。 Cell 的含义就是基站的意思,每一个基站都有一个 id ,也就是标示符,是唯一的。上面的 cell id 为 30211 。 Signal 是信号,其用数量的方法描述了信号的强弱, 100% 就是我们平时说的满格信号。 Area id 是区域标示符,也是唯一的, Area 与 cell 的关系是:一个 Area 可以有多个 cell ,就像一个鱼缸有多条鱼一样,一个 Area 需要不仅一个 cell 来覆盖。


Another interesting software:

TrackMe* GPS/CellID Tracking tool for Google Earth & Google Maps

http://luisespinosa.com/trackme_eng.html

http://forum.xda-developers.com/showthread.php?t=340667


一个解读Bluetooth GPS的python程序

没有评论:
在NMEA GPS receiver中,GPGGA is not the only one to read GPS position, with all receivers, since not all receiver use it.

Should be able decode at least :
GPGGA
GPRMC
GPGLL
(注: 那些含有lon&lat的 sentence应该都可以)

Download and review Python for Series 60 Documentation bundle at http://forum.nokia.com/main/0,6566,040,00.html?fsrParam=1-3-/main/0,,034-821,00.html&fileID=6534

At "Programming with Python for Series 60 Platform" there is section dedicated to the topic - Bluetooth Sockets. There is example of services discovery and reference to Python's Bluetooth console and Bluetooth socket stdio.

Here is a sample BT program that reads a position from a BT GPS and displays it.

import socket
class BTReader:
def connect(self):
self.sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)
address,services=socket.bt_discover()
print "Discovered: %s, %s"%(address,services)
target=(address,services.values()[0])
print "Connecting to "+str(target)
self.sock.connect(target)

def readposition(self):
try:
while 1:
buffer=""
ch=self.sock.recv(1)
while(ch!='$'):
ch=self.sock.recv(1)
while 1:
if (ch=='\r'):
break
buffer+=ch
ch=self.sock.recv(1)

if (buffer[0:6]=="$GPGGA"):
(GPGGA,hhmmssss,l1ddmmmmmm,l1,l2dddmmmmmm,l2,q,xx,pp,ab,M,cd,M,xx,nnnn)=buffer.split(",")
return (l1+l1ddmmmmmm, l2+l2dddmmmmmm)
except Error:
return None

def close(self):
self.sock.close()

bt=BTReader()
bt.connect()
print bt.readposition()
print bt.readposition()
print bt.readposition()
bt.close()

gps and gsm locations from python s60

没有评论:
Goal: periodically obtain 1) BT GPS (i.e. $GPRMC and $GPGGA sentences) and 2) GSM cell id at the same time and save.

____________________________________

# Simple BT App
#$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10

import socket,location,urllib

class BTReader:

def connect(self):
self.sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)
address,services=socket.bt_discover()
print "Discovered: %s, %s"%(address,services)
target=(address,services.values()[0])
print "Connecting to "+str(target)
self.sock.connect(target)

def readposition(self):
try:
buffer=""
ch = self.sock.recv(1)
while(ch !='\n'):
buffer+=ch
ch = self.sock.recv(1)
# print buffer

if (buffer[0:6]=="$GPRMC"):
(GPRMC,utc,status,lat,latns,lon,lonew,knots,course,date,xx1,xx2)=buffer.split(",")
return "GPS (%s,%s,%s,%s,%s)"%(utc,lat+latns,lon+lonew,knots,course)
except Error:
return "Error!\n"
return ""

def close(self):
self.sock.close()

class GSM_loc:

def upd(self):
self.loc = location.gsm_location()
return "GSM (MCC:%s MNC:%s LAC:%s CID=%s)"%(self.loc[0], self.loc[1], self.loc[2], self.loc[3])

gsm = GSM_loc()

bt=BTReader()
bt.connect()

i=0
while (i<15):
print gsm.upd()
print bt.readposition()
i+=1

bt.close()

Secondlife and Google maps

没有评论:
“尼奥,你曾经作过这样的梦吗,你坚信不移的东西都是真的吗?你能从那样的梦中醒来吗?你能分辨出梦境与现实世界的区别吗?”-------《黑客帝国》

csail-mit

或许Google Earth实景版和Google Metaverse还比较遥远,我们不妨先来看看当Google Earth遇上SecondLife,会发生什么事?GeoGlobe正是这样的一个mashup,它将KML、GeoRSS及普通的RSS feed作为输入,然后将它们变成SecondLife里的GeoGlobe地理位置。换言之,将真实世界的数据有效地在SecondLife里形像化。感兴趣的朋友可到开发者的blog里了解详细。

http://envirolink.blogspot.com/2007/03/google-earth-in-second-life.html

使用Google Map API

没有评论:
AJAX是Asynchronous JavaScript + XML的缩写。它的目标是创造和基于桌面系统的应用一样丰富和相同响应方式的Web应用,并可以使用多种浏览器方便的访问。

  AJAX模型的一个著名应用就是Google Maps。你可以在http://maps.google.com上充分的使用它,并且惊讶于它的快速缩放能力和拖动能力。那么能不能把它强大的能力结合到你自己的应用程序里呢,这样不但你可以使用到它那强大的数据库,也可以使用它非常cool的界面。

  Google已经提供了一个免费的 Google Map API ,使得你很容易实现以上的想法。只要你同意使用规定,并且不要未经允许使得页面拥有超过每天50000的浏览量,你可以随意在自己的web站点使用Google的地图技术。本文将介绍如何实现这一点,尤其你将学会如何将地图集成到页面里,给用户标识出感兴趣的地点,甚至可以在点击某个关联的图标时给出一个地点相关的描述。目前使用Google这项技术的有http://www.chicagocrime.org,http://www.housingmaps.com/ 等等。

  系统需求

  使用Google Map API,你无需其他特别的web开发工具,所需的仅是文本编辑器,Web浏览器,和一个保存写好的web页面和脚本的web服务器。注意这里必须使用公开的web服务器,你不能使用内部服务器,因为每个请求都必须和Google Map的服务器交互。你需要在Google上注册并获取一个API的Key来使用,注意先访问这个站点了解相关的使用规则和申请方式:

  http://www.google.com/apis/maps/signup.html

  你需要将key和你的脚本进行集成以正确创建和显示你所需要的地图。

  第一个地图

  使用Google Map非常简单,只需要短短几行代码即可。你可以将以下的代码存储为HTML文件,并且将ADD_YOUR_KEY_HERE替换成你得到的API的Key,然后上传到自己的web服务器上。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps?file=api&v=1 &key=ADD_YOUR_KEY_HERE" type="text/javascript">
</script>
</head>
<body>
<div id="map" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
//<![CDATA[ var map = new GMap(document.getElementById("map")); map.centerAndZoom(new GPoint(-83.022206, 39.998264), 3); //]]>
</script>
</body>
</html>

  访问web服务器上的这个html文件,你在浏览器中看到俄亥俄州立大学的地图:

  在以上的脚本里有4个关键的地方,以下的代码片断是使得你可以使用Google Map服务的,但是你必须提供你自己的API Key:

<script src="http://maps.google.com/maps?file=api&v=1&key=ADD_YOUR_KEY_HERE" type="text/javascript">

  下面一些代码规定了html页面中页面的显示大小:长度,宽度。你可以把它放置到页面文件中的任何一行,使用表格和CSS都可以:

<div id="map" style="width: 400px; height: 300px"></div><script type="text/javascript">

  下面的代码创建一个GMap的对象(从Goolge的JavaScript脚本中的一个类进行实例化),使用它操纵其他的显示和控制部分:

var map = new GMap(document.getElementById("map"));

  最后,显示的地图的中心的经度是-83.022206和纬度39.998264。Gpoint的构造器的第二个参数是表明地图的俯视高度,1是最低的高度,16是最高的高度。

Google Map API: Get a marker's lat/lon

没有评论:

This script is to make a marker when you click the map. The idea is at first to obtain lat/lon parameters, then draw a marker overlay on the map.

GEvent.addListener(map, “click”,
function(marker, point) {
map.addOverlay(new createMarker(point));
}
);

function createMarker(point) {
var marker = new GMarker(point);
GEvent.addListener( marker, “click”,
function() {
//show the longitude
document.getElementById(”message1″).innerHTML = point.lat();
//show the latitude
document.getElementById(”message2″).innerHTML = point.lng();
}
);
return marker;
}

怎样使用google maps查地图

没有评论:

网址 http://maps.google.com

方法1. 输入邮政地址

然后在上面的搜索条内直接输入想要找的城市名称如“100 Memorial Drive #2-1c, Cambridge, MA 02142”,然后点右边的search maps 就可以找到大概位置了,然后再点地图上右上角中间的satellite按钮,就可以看到城市的卫星地貌了。滚动鼠标可以缩放地图大小。界面上面是录入框, 可直接输入地名定位地图。地图左上角是工具按钮。上下左右四个方向键,中间按钮回到最后一次查找的结果。左侧下面是分辨率,点+即放大一级,点-即缩小一 级,也可以拉动中间的滚动条直接改变分辨率。

利用这个卫星地图,还可以反查经纬度。将目标位置拉至最大分辨率,并将其拉至中心位置,在右侧“Link to this page”处点击右键,选中复制快捷方式,在文本编辑工具,如记事本中粘贴,可以看到一个形如“http: //maps.google.com/maps?ll=22.283084,114.174417&spn=0.004796,0.007918& t=k&hl=en”这样的地址,其中参数ll,就是纬度与经度,可以按需要对获取的经纬度小数点后保留适当的位数。如果要与朋友分享某一特定目 标特定分辩率的图片,直接将上述地址发送给朋友即可。
 
方法2. 直接输入经纬度

for example: 在search maps搜索框内输入
42.362686, -71.087029
会指到cambridge的broadway。

或者将经纬度代入
http://maps.google.com/maps?ll=纬度,经度&spn=0.1,0.1&t=k&hl= en

Note: =(latitude north, longtitude west),经纬度都使用十进制。经度一度约是 85.276公里,纬度一度是110.94公里。不同区域最大的分辨率会有所不同。地图显示后,可用鼠标拖动地图以显示不同区域。

智能手机安装 bluetooth GPS

没有评论:

问:我的手机是否适合配置GPS,什么方案?

1.推荐使用蓝牙GPS方案。因为蓝牙GPS是主流GPS设备,通用性强,可以和笔记本、PDA、手机等具有蓝牙功能的设备配合使用。
2.只要你的手机具备蓝牙功能,同时是智能手机(比如nokia s60系统),你的手机就具备了使用蓝牙GPS实现导航功能的条件。
3.如果是车载导航使用,推荐同时选配PDA/手机两用车架。
4、GPS导航地图软件一般在200M以上,而且往往你喜欢装几款软件同时测试。如果你的手机存储卡不够用,可以选配一个大一些的容量的MMC卡、RS-MMC卡、SD卡、MINI SD卡。
注意,新卡,一般要用手机进行格式化。诺基亚手机在“附加功能”里的“储存卡”里选择格式化储存卡)对于大容量的卡,最好用读卡器读,速度比数据线快很多。

安装完软件后,手机需要和蓝牙gps进行连接
把充好电的蓝牙GPS接收机打开,然后调整手机用蓝牙搜索蓝牙GPS。方法:功能/连接功能/蓝牙/打开/搜寻/开始搜寻设备,当搜到蓝牙gps时,要求你输入通行码,一般是“0000”。默认连接就可以了。

二、s60系统第二版可以安装的软件:

1、ROUTE66
2、MapKing
3、Smartcomgps(可自制地图)
4、MapViewGPS-II(可自制地图)
5、Power Navigation2.02_简体中文汉化完全版for s60

软件安装
配置: 智能手机+蓝牙GPS模块+导航软件

如果有nokia蓝牙S60系统的手机,装个Route66软件+新加坡地图,去买个蓝牙GPS接收器就可以导航用了。或者用蓝牙 PPC,windows 系统的,装个mapking+新加坡地图+蓝牙GPS接收器也可以,或者现在有直接集成GPS芯片的PPC比如Asus A632等型号更方便。

将下载的SIS文件拷贝到手机中,进入手机的功能表》事物管理》文件管理中找到拷贝的文件安装即可,安装完成后在我的应用里面找到运行。
安装完成后将地图文件拷贝到储存卡的E:\system\apps\ROUTE66\maps里面就可以使用了。(目录可能隐藏)

买一个LD-3W蓝牙GPS,然后,为N73安装GPS导航软件,推Route66 Mobile7中国版(S60第三版专用),最新版本号是520。软件安装后,我们还要安装地图后,才可以使用。最新版配合R66使用的中国地图是 216M。安装好软件后,打开LD-3W的电源,长按2秒即可开启。然后在打开手机的蓝牙功能,搜索蓝牙设备,搜索到LD-3W后,和其进行配对,LD- 3W默认的蓝牙通行码是0000。配对后在手机上打开R66软件的界面,软件会自动搜索GPS设备,搜索到设备后,我们确认即可,这时我们的N73就和 LD-3W通过蓝牙连接成功了。这时LD-3W上中间的灯会闪烁蓝色的灯光。然后等待一下,LD-3W就会自动寻找天上的卫星来定位了,打开软件的视图 -“GPS信息”功能,可以看到GPS信息情况,可以看见卫星信号强度。然后打开软件的选项,选择”开始”,输入目的地,软件就会计算路程,规划路径。规 划完毕后,下面显示了当前时间,路径距离,这时就已经实现GPS定位导航了


GPS概念及常用术语

没有评论:

(copy)

随着整个GPS市场的发展,导航产品在人们生活中的的应用范围越来越广。今天笔者就将一些和GPS相关的概念和常用术语做了一个汇总。

智能手机GPS

智能手机GPS是手机、GPS、PDA掌上计算机三合一产品,可通过运营商网络进行实时数据更新。最快可在5秒内实现卫星定位,这是目前最快的定位 速度。在接收不到卫星信号,但有移动信号的情况下,该类手机会迅速转换搜索模式,链接电信运营商的后台,实现定位。只要能接收到手机信号,就可进行卫星定 位。而且此类产品信号稳定性较好。

最后我们在来看看在使用GPS导航产品过程中能接触到的一些相关术语及概念,对它们有一个较深的理解和认识会更有助于大家对导航产品的认识和把握。

1.坐标

大部分GPS是以经/纬度(Lat/Long)的方式显示坐标,另外还有一些也可用Universal Transverse Mercator等坐标系统来显示,具体到消费者使用的产品,则取决产品本身的坐标系统。坐标的精度在Selective Availability打开时,GPS的水平精度在100-50米之间,具体数据由接受到卫星信号的多少和强弱而定,若根据GPS的指示则应该在大约一 个足球场大小的面积内发现用户所指示的目标。

2.航点

GPS 产品内存中保存的一个点的坐标值。航点是GPS数据核心,它是构成“航线”的基矗标记航点是GPS主要功能之一,但是用户也可以从地图上读出一个地点的坐 标,手工或通过计算器接口输入GPS,使之成为一个航点。一个航点可以将来用于GOTO功能的目标,也可以选进一条航线Route,作为一个支点。一般 GPS能记录500个或以上的航点。

3.航线

航线是GPS内存中存储的一组数据,包括一个起点和一个终点的坐标,还可以包括若干中间点的坐标,每两个坐标点之间的线段叫一条"腿"。常见GPS 能存储 20条线路,每条线路30条"腿"。各坐标点可以从现有航点中选择,或是手工/计算器输入数值,输入的路点同时做为一个航点保存。实际上一条航线的所有点 都是对某个航点的引用,比如在航点菜单下改变一个航点的名字或坐标,如果某条航线使用了它,用户会发现这条航线也发生了同样的变化。可以有一条航线是"活 跃"的。“活跃”航线的路点是导向功能的目标。

4.前进方向

一般的GPS没有指北针的功能,静止不动时它是不知道方向的。但是一旦动了起来,它就能知道自己的运动方向。GPS每隔一秒更新一次当前地点信息, 每一点的坐标和上一点的坐标一一比较,就可以知道前进的方向,但是这里请大家注意这并不是GPS头指的方向,因为它是不知道自己的脑袋和运动路线是成多少 度角的。不同GPS关于前进方向的算法是不同的,基本上是最近若干秒的前进方向,所以除非哟凝固用户已经走了一段并仍然在走直线,否则前进方向是不准确 的,尤其是在拐弯的时候用户会看到通过GPD显示出来的数值在不停的变化。方向是以多少度显示的,这个度数是手表表盘朝上,12点指向北方,顺时针转的角 度。有很多 GPS还可以用指向罗盘和标尺的方式来显示这个角度。一般同时还显示前进平均速度,也是根据最近一段的位移和时间计算的。

5.导向

导向功能在以下条件下起作用︰

A.以设定"走向"目标。"走向"目标的设定可以按"走向"键,然后从列表中选择一个航点。以后"导向"功能将导向此航点。

B.目前有活跃航线。活跃航线一般在设置->航线菜单下设定。如果目前有活动航线,那么"导向"的点是航线中第一个路点,每到达一个路点后,自动指到下一个路点。

在“导向”页面上部都会标有当前导向路点名称。它是根据当前位置,计算出导向目标对你的方向角,以与"前进方向"相同的角度值显示。同时显示离目标 的距离等信息。些GPS把前进方向和导向功能结合起来,只要用GPS的头指向前进方向,就会有一个指针箭头指向前进方向和目标方向的偏角,跟着这个箭头就 能找到目标。

6.日出日落时间

大多数GPS能够显示当地的日出、日落时间,这对于用户计划出发/宿营时间时是很有用的。这个时间是GPS根据当地经度和日期计算得到的,是指平原 地区的日出、日落时间,在山区因为有山脊遮挡,日照时间根据情况要早晚各少半个小时以上。GPS的时间是从卫星信号得到的格林尼制时间,在设置菜单里可以 设置本地的时间偏移,对中国来说,一般情况下都应设+8小时,而且这个数值只与时间的显示有关。

7.航迹

GPS 每秒更新一次坐标信息,所以可以记载自己的运动轨迹。一般GPS能记录1024个以上足迹点,在一个专用页面上,以可调比例尺显示移动轨迹。足迹点的采样 有自动和定时两种方式自动采样由GPS自动决定足迹点的采样方式,一般是只记录方向转折点,但是长距离直线行走时GPS是不记点;用户可以定时采样功能中 提前规定采样时间间隔。在足迹线页面上可以清楚地看到自己足迹的水平投影。

“足迹”在线的点都没有名字,不能单独引用,查看其坐标,主要用来画路线图和“回溯”功能。很多GPS有一种叫做“回溯”(Trace back)的功能,使用此功能时,它会把航迹转化为一条“路线”(ROUTE),路点的选择是由GPS内部程序完成的一般是选用航迹上大的转折点。

同时,把此路线激活为活动路线,用户即可按导向功能原路返回。要注意的是回溯功能一般会把回溯路线放进某一默认路线(比如route0)中,看 GPS的说明书,使用前要先检查此线路是否已有数据,若有,要先用拷贝功能复制到另一条空线路中去,以免覆盖。回溯路线上的各路点用系统默认的临时名字 如"T001" 之类,有的GPS定第二条回溯路线时会重用这些名字,这时即使用户已经把旧的路线做了拷贝,由于路点引用的名字被重用了,所以路线也会改变,不是原来那条 回溯路线了。

GPS产品的开机定位可分为冷启动、温启动和热启动三种情况︰

冷启动︰以下几种情况开机均属冷启动。初次使用时;电池耗尽导致星历信息丢失时;关机状态下将接收机移动1000公里以上距离。

温启动︰距离上次定位的时间超过两个小时的启动。

热启动︰距离上次定位的时间小于两个小时的启动。

在nokia s60手机上编写 python 程序

没有评论:

s60: 为symbian os 的手机操作系统.这种可编程的手机通常称智能手机,如我的手机nokia 7610
PyS60:Python for S60

手机上安装 PyS60

下载点 http://sourceforge.net/projects/pys60/%E4%B8%8B%E8%BD%BD
* PythonForS60_1_3_20_2ndEd.SIS - PyS60
* PythonScriptShell_1_3_20_2ndEd.SIS - Python shell 否则没有运行界面

开发环境的选取

方法1。在windows里面写python程序。保存,手机拔卡,用读卡器把程序放到卡里,手机插卡,然后运行python for s60 然后运行脚本。调试起来比较麻烦。也可用bluetooth console传数据。

Q:Symbian python程序是否可以制作成独立软件包(sis)?
A:可以,使用Symbian Python SDK里面带的py2sis.exe.
用法:

py2sis.exe python程序名.py sis文件名称.sis --uid=0x12345678
例子:

E:\Nokia\Tools\Python_for_Series_60\py2sis>py2sis.exe sms.py smskiki.sis --uid=0x100039Cf
注意:目标文件名一定要添加sis后缀,不然会出现error: invalid destination file

方法2。安装nokia的sdk,这样就构造了一个模拟器,然后从模拟器里面安装python。
PythonForS60_1_3_20_SDK_2ndEd.SIS - SDK 开发环境,可不装,用 wxpython+pys60 emulation开发

方法3。wxPython 模拟器 (推荐
和nokia sdk模拟器不同的是,PyS60 emulation library利用wxPython gtk只写了主要两个图形包例如appuifw,e32。appuifw继承了wx的图形类。

software:
* python2.4 当然需要 (from http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi)
* PyS60 emulation library (4 files: "appuifw.py, e32.py, graphics.py, key_codes.py")
* wxPython (for win32 or linux, www.wxpython.org )

windows 下安装
安装办法:先去下载python 2.4,然后再去下载wxPython。然后下这个模拟器,把里面的四个py文件放到C:\Python2.4\Lib下。(具体放到哪里得看你的Python的安装目录了)

Ubuntu 下安装
- wxPython
(copied from http://wxpython.org/download.php#binaries)
Add the following to your /etc/apt/sources.list file:

# wxPython APT repository at wxcommunity.com
deb http://wxpython.wxcommunity.com/apt/ubuntu/dapper /
deb-src http://wxpython.wxcommunity.com/apt/ubuntu/dapper /

After the repository info has been added to /etc/apt/sources.list you can fetch and install the packages using one of the GUI package manager tools such as Synaptic or Adept, or by running the following commands from a terminal window:

sudo apt-get update
sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n

- pys60 compact library
put 4 files to PYTHONPATH directory, which is normally /usr/lib/python2.x. Show PYTHONPATH in "import sys, print sys.path".

手机与电脑之间的文件传输、控制

方法1:蓝牙控制台

能够让你通过个人电脑连接你手机上的Python命令行并执行命令。

  1. 在你的PC上打开比如一个超级中端(确定你已经安装了蓝牙设备并为超级终端选择了正确的端口)。
  2. 在你的手机上运行python -> optoins -> Bluetooth console。现在一个蓝牙连接将会被激活,python命令行将会显示在超级终端上

方法2。MIT PUTools: 使用bluetooth 在手机和pc之间传数据,实现同步。可以在PC上编程序,然后整个传到手机上去run over bluetooth。网址是http://people.csail.mit.edu/kapu/symbian/python.html

一个显示输入对话框的程序

import appuifw
import e32

def bexit():
app_lock.signal()
def addtext():
t = appuifw.query(u'Input text:','text')
r.add(unicode(t))
r = appuifw.Text()
r.set(u'info:\n')
appuifw.app.screen = 'normal'
appuifw.app.menu = [(u'Add',addtext),(u'Exit',bexit)]
appuifw.app.body = r
appuifw.app.exit_key_handler = bexit
app_lock = e32.Ao_lock()
app_lock.wait()

保存成1.py然后直接用python执行。。。

sample2: take photo and save

import camera
import graphics
img=camera.take_photo()
img.save("test.jpg")

Note: 如果有gps receiver with bluetooth, 可以在拍照的同时记录下照片经纬度

2008/07/30

Ubuntu: LAMP 安装

没有评论:

LAMP套件就是Linux+Apache+Mysql+PHP这四款软件,组成了一个可以使网站运行的套装工具软件。其中P也可代指 PHP/Python/Perl。如果只用后台数据处理,可以考虑用python编写。当然python 也有网页功能。

版本:
Apache 2
Mysql 5.0
Php 5.1

1.搭建基本的web环境,我使用的是apache2 + php5 + mysql 5.0
sudo apt-get install apache2 mysql-server php5-mysql
2.(optional)解决用户登录时图形验证码无法显示的问题
apt-get install php5-gd
3. 安装mysql的web管理软件phpmyadmin
apt-get install phpmyadmin
4. 基于浏览器的图形化管理工具软件 webwin (http://www.webwin.com)

MySQL更改root密码
刚安装mysql后可执行 mysql -u root -p 加上密码。
方法1:
shell>mysqladmin -u root password new_password

方法2:
mysql> SET PASSWORD FOR root=PASSWORD(’new_password’);

方法3:使用 mysqladmin命令
shell> mysql -u root
mysql> UPDATE user SET Password=PASSWORD(’new_password’) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;

2008/07/07

安装 Python for MySQL 的连接扩展

没有评论:

sudo apt-get install python-mysqldb

MySQLdb is an interface for connecting to a MySQL database server from Python. It implements the Python Database API v2.0 (http://www.python.org/dev/peps/pep-0249/), and is built on top of the MySQL C API. Can discuss using MySQL and Python in forum (http://forums.mysql.com/list.php?50).

一个Python访问mysql的 sample script
1. 建立一个 database 和 一个table:
mysql ->
create database my_db;
use my_db;
create table test(
id int,
name varchar(50)
);
insert into test values(1,”hello”);
insert into test values(2,”world”);

2.Python代码 sample.py

import MySQLdb
class Eb_db:
def __init__(self):
try:
connection = MySQLdb.connect(host=”localhost”, user=”root”, passwd=”123456″, db=”my_db” )
cursor = connection.cursor()
cursor.execute( “SELECT * FROM test ” )
except MySQLdb.OperationalError, message:
errorMessage = “Error %d:\n%s” % (message[ 0 ], message[ 1 ] […]

Another script:

#!/usr/bin/env python
# -*-coding:UTF-8-*-#这一句告诉python用UTF-8编码
"""
***** This is a MySQL test *****

select:
conn=Connection()
conn.select_db('test')
cur=conn.cursor()
cur.execute('select * from user')
cur.scroll(0)
row1=cur.fetchone()
row1[0]
row1[1]
row1[2]

insert:
cur.execute('insert into user (name,passwd) values(\'benyur\',\'12345\')')
cur.insert_id()

update:
cur.execute('update user set passwd=\'123456\' where name=\'benyur\'')

delete:
cur.execute('delete from user where id=2')

**********************************
"""

from MySQLdb import *

def conn():
conn=Connection()
conn.select_db('test')
cur=conn.cursor()
cur.execute('select * from user')
cur.scroll(0)
row1=cur.fetchone()
row1[0]
row1[1]
row1[2]

def usage():
print __doc__

if __name__=='__main__':
usage()

3. 使用
import MySQLdb
3.1. 连接
conn = MySQLdb.Connection(host, user, password, dbname)
3.2. 选择数据库
conn.select_db(’database name’)
3.3. 获得cursor
cur = conn.cursor()
3.4. cursor位置设定
cur.scroll(int, mode)
mode可为相对位置或者绝对位置,分别为relative和absolute。
3.5. select
cur.execute(‘select clause’)
例如
cur.execute(‘select * from mytable’)
row = cur.fetchall()
或者:
row1 = cur.fetchone()
3.6. insert
cur.execute(‘inset clause’)
例如
cur.execute(‘insert into table (row1, row2) values (\’111\’, \’222\’)’)
conn.commit()
3.7. update
cur.execute(‘update clause’)
例如
cur.execute(“update table set row1 = ‘’ where row2 = ‘row2 ‘ ”)
conn.commit()
3.8. delete
cur.execute(‘delete clause’)
例如
cur.execute(“delete from table where row1 = ‘row1’ ”)
conn.commit()

LAMP实例: 如何安装bbPress论坛系统

没有评论:
1. go to www.bbPress.org, and download software;
2. edit& save config-sample.php to config.php;
mysql> create database tigerbeach;
3. upload all package to /var/www directory (LAMP ready);
4. open http://155.69.149.85/ to run bb-admin/install.php.

bbPress: upgrade 0.8

(copied from bbpress.org)

To upgrade bbPress from a previous version takes just a few minutes.

First, you should always back up your files and your database in case something goes wrong.

Second, keep the following files and directories.

1. .htaccess
2. config.php
3. my-plugins/ (if you have it)
4. my-templates/ (if you have it)

and delete everything else.

Third, upload the newest version of bbPress to your server.

Fourth, log in and visit your bbPress’ admin panels. If you see an upgrade link instead of the normal screens, click it. If you don’t see an upgrade link (it would have been really obvious), continue to step five.

Fifth, sit back and relax; you’re done!


bbpress theme 主题:

mkdir my-tempates
在 ./my-templates/下拷贝了两个themes,但激活的时候有问题:告诉这是 themes for wordpress 。
需要修改才行!


Allow Images插件

With this plugin, users may include image tags in their posts. Currently the images only support pngs, gifs or jpegs.

== Installation ==
download "allow-images.php" from bbpress.org
Add the allow-images.php file to bbPress/my-plugins/ directory.

插入图片的 HTML 代码是:

csail-mit

<img alt="csail-mit" src="http://www.csail.mit.edu/images/csaillogo150.gif"
/>

所以现在也支持img 这个HTML 标签


MimeTex for WordPress & bbPress

mimetex http://www.forkosh.dreamhost.com/mimetex.html
是一个C语言编写的程序,它直接读入latex表达式,输出一个GIF文件(如果在linux下,输出一个ascii点阵)。编译成CGI文件后,放到支持CGI的服务器上就行了。mimetex如此强大,热门的blog,论坛程序都有专门开发的插件,WordPress也不例外。

1。将编译好的 mimetex.cgi (或直接下载 for linux http://www.forkosh.com/mimetex.exe/linux/mimetex.zip) 移到 /usr/lib/cgi-bin/ 目录下
sudo mv mimetex.cgi /usr/lib/cgi-bin/

访问以下网址,如果正常显示则 mimetex.cgi安装成功
http://155.69.149.85/cgi-bin/mimetex.cgi?x^2+y^2

注: Ubuntu 下 cgi-bin 目录在 apache配置文件中定义
cd /etc/apache2/sites-available
vi default
...
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
...

2 在 http://zhiqiang.org/blog/plugin/mimetex 下载一个 mimetex for bbpress的插件, 拷贝这两个文件 mimetex-plugin.php and Snoopy.class.php 到目录 my-plugins/ 。然后到bbpress admin中激活该插件。修改mimetex-plugin.php的$mimetex_server变量:

// change it to your server
$mimetex_server = "http://localhost/cgi-bin/mimetex.cgi"

// cache directory
$cache_path = BBPATH . '/bb-cache/';

修改 bb-cache/ 目录为可写
sudo chmod 777 bb-cache

3 如果显示 $$x^2+y^2=z^2$$ 而不是 x^2+y^2=z^2,则插件安装成功。

4. 目前是用 两个美元符号把公式括起来(如同latex ),如要修改,则
在mimitex-plugin.php 中 改 function parseTex() 中的变量 $regex

一个直接输入数学公式并直接以图片输出该公式的方法!!

***用此方法的前提是懂得Latex语言,即数学符号的代码,代如根号x就是\sqrt(x),a/b就是\frac{a}{b},等等...***
操作如下:
例如我要输入公式 a^2+b^2=c^2
那么我们只需输入
[img]http://www.imathas.com/cgi-bin/mimetex.cgi?a^2+b^2=c^2[/img ]

或者在bbpress中img tag可以接受如下形式:
<img src="http://www.imathas.com/cgi-bin/mimetex.cgi?a^2+b^2=c^2"
/>



mysqldump 备份:导入和导出

没有评论:

导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

导入数据库

mysql> create database gsmloc;
mysql> use gsmloc ;
mysql> source gsmloc.sql ;

MySQL 基本知识

一、连接MYSQL。

格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345

三、增加新用户。

(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作 (localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据 库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

(下篇)
在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。

四、显示命令

1、显示数据库列表。
show databases;
刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示库中的数据表:
use mysql;
show tables;


3、显示数据表的结构:
describe 表名;


4、建库:
create database 库名;

5、建表:
use 库名;
create table 表名 (字段设定列表);

6、删库和删表:
drop database 库名;
drop table 表名;


7、将表中记录清空:
delete from 表名;

8、显示表中的记录:
select * from 表名;


五、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default '深圳',
year date
); //建表结束
//以下为插入字段
insert into teacher values('','glchengang','深圳一中','1976-10-10');
insert into teacher values('','jack','深圳一中','1975-12-23');

注:在建表中

(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key

(2)将NAME设为长度为10的字符字段

(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别 呢,只有等以后的文章再说了。

(4)将YEAR设为日期字段。

如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:

mysql -uroot -p密码 <>

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。


六、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23

2、数据传入命令 load data local infile "文件名" into table 表名;

注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库 。


七、备份数据库

mysqldump --opt school>school.bbb

注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

2008/04/13

Python: classmethod & staticmethod 区别

没有评论:

classmethod:类方法
staticmethod:静态方法

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:

  • @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。
  • 普通对象方法至少需要一个self参数,代表类对象实例
  • 类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。
  • 静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少
Example 1:

>>> class a():

@staticmethod
def staticm():
print 'static'
def normalm(self):
print 'nomarl',self
@classmethod
def classm(cls):
print 'class',cls


>>> a1=a()
>>> a1.normalm()
nomarl <__main__.a instance at 0x84dddec>
>>> a1.staticm()
static
>>> a1.classm()
class __main__.a
>>> type(a)
<type 'classobj'>
>>> type(a1)
<type 'instance'>



Example 2:

class A(object):
@classmethod
def cm(cls):
print '类方法cm(cls)调用者:', cls.__name__
@staticmethod
def sm():
print '静态方法sm()被调用'

class B(A):
pass

A.cm()
B.cm()

A.sm()
B.sm()

输出:

类方法cm(cls)调用者: A
类方法cm(cls)调用者: B
静态方法sm()被调用
静态方法sm()被调用

2008/04/09

Python 下的图形界面开发

没有评论:

据我所知有三种:
1。 用 glade产生图形界面, 即 python + gtk + glade. 此法生成的界面最美观.
import pygtk, gtk, gtk.glade
一个只用 gtk, 没用glade工具的例子
import pygtk
import gtk

class HelloWorld:
def hello(self,widget,data=None):
print "Hello World!"

def delete_event(self,widget,data=None):
print "delete_event"
return gtk.FALSE

def destroy(self,widget,data=None):
gtk.main_quit()

def __init__(self):
self.window=gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event",self.delete_event)
self.window.connect("destroy",self.destroy)
self.window.set_border_width(10)
self.button=gtk.Button("Hello World!") self.button.connect("clicked",self.hello,None)
self.button.connect_object("clicked",gtk.Widget.destroy,self.window)
self.window.add(self.button)

self.button.show()
self.window.show()

def main(self):
gtk.main()

if __ name__=="__main__":
hello=HelloWorld()
hello.main()

2。 用 Tkinter 即 gui based on Tcl/tk .此绘图法最为简单,可能需要安装 python-tk.参考 python_notes.pdf -> Tkinter programming
example:
import Tkinter
#创建一个窗体:
wnd = Tk()
#加一个按钮:
btn = Button(master=wnd, text="Exit",command=wnd.quit)
btn.pack() #pack之后才显示

#或者通常把 btn 加到 wnd 下面:
wnd.btn = Button(master=wnd, text="Exit", command=wnd.quit)
wnd.btn.pack()

#最后, 让这个窗口跑起来:
wnd.mainloop()

3. 用 wxPython。一个例子是手机上的图形界面。参考python for S60 doc.pdf -> wxpthon 模块部分,或 www.wxpython.org .
import appuifw
import e32

def bexit():
app_lock.signal()

def addtext() :
t = appuifw.query(u'Input text:', 'text')
r.add(unicode(t))

r = appuifw.Text()
r.set(u'info:\n')
appuifw.app.screen = 'normal'
appuifw.app.menu = [(u'Add', addtext), (u'Exit', bexit)]
appuifw.app.body = r
appuifw.app.exit_key_handler = bexit
app_lock = e32.Ao_lock()
app_lock.wait()


python tkinter: 一个画圆的例子

from Tkinter import *

canvas = Canvas(width=300, height=300, bg='white')
canvas.pack(expand=YES, fill=BOTH)

canvas.create_oval(10, 10, 200, 200, width=2, fill='blue')

mainloop()


Python线程编程的两种方式

没有评论:

一种是函数式
一种是用类来包装的线程对象。

1、调用thread模块中的start_new_thread()函数来产生新的线程,请看代码:
### thread_example.py
import time
import thread
def timer(no,interval): #自己写的线程函数
while True:
print 'Thread :(%d) Time:%s'%(no,time.ctime())
time.sleep(interval)
def test():
thread.start_new_thread(timer,(1,1)) #使用thread.start_new_thread()来产生2个新的线程
thread.start_new_thread(timer,(2,3))
if __name__=='__main__':
test()

这个是thread.start_new_thread(function,args[,kwargs]) 函数原型,其中function参数是你将要调用的线程函数;args是讲传递给你的线程函数的参数,他必须是个tuple类型;而kwargs是可选的参数。
线程的结束一般依靠线程函数的自然结束;也可以在线程函数中调用thread.exit(),他抛出SystemExit exception,达到退出线程的目的。

2、通过调用threading模块继承threading.Thread类来包装一个线程对象。请看代码
### threading_example.py
import threading
import time
class timer(threading.Thread): #我的timer类继承自threading.Thread类
def __init__(self,no,interval):
threading.Thread.__init__(self) #在我重写__init__方法的时候要记得调用基类的__init__方法
self.no=no
self.interval=interval
def run(self): #重写run()方法,把自己的线程函数的代码放到这里
while True:
print 'Thread Object (%d), Time:%s'%(self.no,time.ctime())
time.sleep(self.interval)
def test():
threadone=timer(1,1) #产生2个线程对象
threadtwo=timer(2,3)
threadone.start()#通过调用线程对象的.start()方法来激活线程
threadtwo.start()
if __name__=='__main__':
test()

2008/04/08

Django开发及mod_python安装

没有评论:

python+Django+apache+mysql 开发网站,different from LAMP which mainly uses PHP

也许大伙都听说过 Ruby on Rails? 一个以 ruby 写的 RAD framework; django 与它大约同期诞生, 两者有着相近的目标, 各自的哲学. (有意思的是: RoR 和 django 的作者之前都是 php 开发方面的高手!)

django 现在官方站点上发布的版本是 0.91, 但是这不过这只是对外的一个静态的小版本, 而其 svn 中每天都有更新, 如果要学习 django 的话, 还是建议从它的 svn 中直接取出最新的版本. 尤其是 magic-removal 分支 - 这将会成为 django 下一个版本: 0.92.

magic-removal 是 django 开发人员们目前正在全力耕作的一个分支 (branch), 最大的目标就是将 django 多年遗留下来的一些疙疙瘩瘩的地方做一次 "大扫除", 以期提升 django 这一开发框架的简洁性与易用性.

如何安装
http://www.djangoproject.com/documentation/install/
简单说,下载version 0.96,解压,然后执行
sudo python setup.py install
如果用于开发,最好之前安装mod_python, which embeds Python within Apache and loads Python code into memory when the server starts. Code stays in memory throughout the life of an Apache process, which leads to significant performance gains over other server arrangements. Make sure you have Apache installed, with the mod_python module activated. Django requires Apache 2.x and mod_python 3.x.

但是据说mod_python和 mod_php冲突,所以现在还在犹豫是否安装Django。本机上原来装有bbPress based on LAMP(php).

Django 中文文档
http://www.yarshure.com/documentation/

Django step by step 中文
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc/


Ubuntu下mod_python的安装

目的: 为了能在网页中嵌入python代码
环境: Ubuntu, apache2, python2.5, 并且已安装 apache2-php5 (安装完后php依旧工作,哈哈)

步骤:
首先安装 mod_python .
sudo apt-get install libapache2-mod-python, 或用synaptic装亦可

(按mod_python的说明步骤要安装apxs,但是apache2找不到apxs,因为这种方式已过时了。apache将所有的载入的包都放在
/etc/apache2/mods-enabled 即可加载! 注: apache2的 ServerRoot = /etc/apache2 )

然后检查是否已在 mods-enabled目录下, 如有,则不用执行下面命令:
cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/mod_python.load mod_python.load

接着,编辑:
cd /etc/apache2/sites-available/
sudo gedit default

On line 10 you should have:

Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/

加入新行后变为:

Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all

AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On

# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/

(注: 该文件被链接到 /etc/apache2/sites-enabled/000-default 。)

现在重启 apache server:
sudo /etc/init.d/apache2 restart

测试:
sudo gedit /var/www/test.py
文件内容如下:
def index(req):
return "Test successful";

访问 http://localhost/test.py 应该可以看到 "Test successful" in plain text。


一个显示网页的python程序

import sys
import time

def index(req):

# Following line causes error to be sent to browser
# rather than to log file (great for debug!)

sys.stderr = sys.stdout

#print "Content-type: text/html\n"

#print """
blah1 = """<html>
<head><title>A page from Python</title></head>
<body>
<h4>This page is generated by a Python script!</h4>
The current date and time is """

now = time.gmtime()
displaytime = time.strftime("%A %d %B %Y, %X",now)

#print displaytime,
blah1 += displaytime

#print """
blah1 += """
<hr>
Well House Consultants demonstration
</body>
</html>
"""
return blah1

重载Python类对象的打印函数

没有评论:
class G:
def __init__(self):
g.nodes = "all nodes of G"
def __repr__(self):
return self.nodes
...
g = G()
print G

Python中的全局变量

没有评论:

全局变量

这里谈全局变量呢,倒不是说Python和c的全局变量概念不同,他们的概念是相同的。只是在使用机制上,是有一些差异的。举个例子:

– module.py –
globalvar = 1

def func():
print globalvar
# This makes someglobal readonly,
# any attempt to write to someglobal
# would create a new local variable.

def func2():
global globalvar
globalvar = 2
# this allows you to manipulate the global
# variable

在 func这个函数中,globalvar是只读的。如果你使用了globalvar = xxx这种赋值语句,Python会重新创造一个新的本地对象并将新值赋给它,原来的对象值不变。而在func2函数中,由于我们事先申明了 globalvar是global的,那么此时的更改就直接在全局变量上生效。

很明显这和c中的使用机制是不一样的,在c中,我们只要在函数外的全局区域申明了变量,就可以在函数中直接对其操作,不用还申明一个global。

Python中的时间操作

没有评论:

Python中的时间操作还是比较方便的,有专门的time模块提供多种接口形式。其中常用的两种操作数据格 式就是滴答和时间元组,关于这两个奇怪的名字,我也不便解释,总之在一本书上看着这么写,也就这么用,确实很难听。滴答是从1970年开始到现在的秒数, 在Python2.4.3中是一个浮点数,小数部分为更精密的部分,小于1秒的精细时间值。时间元组是一个具有9个成员的元组,依次为:年、月、日、小 时、分钟、秒、星期(0-6,0为周一)、一年中的哪一天(1-366,古罗马历)、Daylight savings(-1,0,1,我也不知是干什么用的)。

所以可以用如下方法提取当天的当时时间:

a,a,a,hour,minute,second,a,a,a=time.localtime(time.time())

这里的hour、minute、second分别是当时的时、分、秒,也是比较常用的参数。另外就是关于求时间差,如果使用 time.localtime()测定时间差,那么滴答值为0时的中国标准时间是1970年1月1日8:00,时间差无从谈起,所以对于时间差应该使用 time.gmtime()转换为TimeTuple再解包为各个时间参量。比如如下获得时间差:

a,a,a,hour,minute,second,a,a,a=time.gmtime(t1-t2)


对 dictionary of datetime排序

通常用 listObj.sort()排序,如果需要定义自己的排序方式,则:
1. 定义一个排序函数
def dictionary_datetime_sorter( d1, d2):
if d1 elif d1>d2: return 1
else: return 0

...
2. 将此函数作为sort()的input 对 list 排序。调用格式:
datetimeList.sort(dictionary_datetime_sorter)


2008/04/05

在source insight中添加 python language

没有评论:

语言包从该处下载:
http://www.sourceinsight.com/public/languages/

To import a custom language file into Source Insight:

1. Select Options > Preferences. Click the Languages tab.

2. Click the Import button. Select and load the custom language file (.CLF)

3. You should now see the new language in the list of languages.

4. Click the Document Types button to open the Document Options dialog box.

5. If you don't have a document type already created for the type of language file, you will need to create one now. If you already have a document type created, select it in the list and go to step 7.

6. Click the Add Type button to create a new document type. Give it a name that describes the type of file. For example, "Ant File". Click OK and then fill in the file filter text box with a wildcard. For example, "*.ant".

7. In the Parsing section of the Document Options dialog box, select the newly imported language in the language drop-down list. This is what associates your document type with the custom language.

8. Click the Close button to close Document Options. Then click OK to close the Preferences dialog box.

2008/04/04

Python的时间操作 2

没有评论:
字符串是使用静态的方式进行存储,只能读而不能直接修改字符内容。特别将一堆对字符串并在一起的时候,虽然可以直接相加,听说这样的速度奇慢,只有用其它函数的方式进行,好在也不太麻烦。

比如用 print ','.join(datelist)

就可以将datelist列表里面的所有项目并成一个字符串,当然这个表达式会在每一个项目中间插入一个逗号,这种方式比用循环的方式更简洁。

日期的操作必须使用time或datetime库

import time
>>> s="2006-1-2"
>>> time.strptime(s,"%Y-%m-%d)
这是将字符串格式的日期及时间转成日期对象
转义符对应意义如下
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%j 年内的一天(001-366)
%m 月份(01-12)
%M 分钟数(00=59)
%p 本地A.M.或P.M.的等价符
%S 秒(00-59)
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%Z 当前时区的名称
%% %号本身

============================================

#-*- coding:utf-8 -*-

import time
import datetime

# 2007-11-25 15:36:35

#使用datetime模块可以很方便的解决这个问题,举例如下:

d1 = datetime.datetime(2005, 2, 16)
d2 = datetime.datetime(2004, 12, 31)

# 结果:47
print (d1 - d2).days

#上例演示了计算两个日期相差天数的计算。

starttime = datetime.datetime.now()

endtime = datetime.datetime.now()
print (endtime - starttime).seconds

#上例演示了计算运行时间的例子,以秒进行显示。

d1 = datetime.datetime.now()
d3 = d1 + datetime.timedelta(days =10)

print str(d3)
print d3.ctime()

# 上例演示了计算当前时间向后10天的时间。
# 如果是小时 days 换成 hours

# 其本上常用的类有:datetime和timedelta两个。它们之间可以相互加减。
# 每个类都有一些方法和属性可以查看具体的值,如datetime可以查看:天数(day),小时数(hour),星期几(weekday())等;
# timedelta可以查看:天数(days),秒数(seconds) 等。

#
# time , datetime , string 类型互相转换
#
# string -> time
# time.strptime(publishDate,"%Y-%m-%d %H:%M:%S")
#
# time -> string
# time.strftime("%y-%m-%d",t)

date = '2007-01-01'

print type(date)

date = time.strptime(date,"%Y-%m-%d")

print type(date)

print date[0]

d4 = datetime.datetime(date[0], date[1],date[2])

print d4
print type(d4)

#将日期时间对象转成字符串则要用

date = time.strftime("%y-%m-%d",date)
print type(date)

#其中d为日期时间对象

2008/03/25

latex中如何添加附录,术语,符号

没有评论:
1. latex中怎样加附录

在开头加入
\usepackage[page,title,titletoc,header]{appendix}


在末尾加入
%%%%%%%%% Appendices
\begin{appendices}
\input{appa}
\input{appb}
\end{appendices}

%\appendix
%\include{appa} % doc for gps+cell scheme
%\include{appb} % tables for GPS



2. add glossary 创建术语表

\usepackage{glossary}
\makeglossary
\storeglosentry{pdf}{name=pdf, description=probability density function}
%%% storeglosentry必须放在引用的前面

\begin{document}
... \gls{pdf} is named ...

\printglossary
\addcontentsline{toc}{chapter}{Glossary}

\end{document}

完整的编译过程 How to generate PDF:

* use latex to generate PDF once. An *.ist file as well as a glossary file (*.glo) are generated. The glossary-file contains all the glossary entries found in the document in plain text.

* Next you type the following command in the command-line:

makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo

generating the two files with the extensions *.gls and *.glg.

* You now need to re-generate the PDF, using latex.



3. add notations 创建符号表

\usepackage{nomencl}
\makenomenclature

...
...

\nomenclature{$\mathbb{R}^2$}{two-dimensional space}
\addcontentsline{toc}{chapter}{List of Notations}
\printnomenclature

完整编译过程为:
* latex
* makeindex mydoc.nlo -s nomencl.ist -o mydoc.nls
* latex
源文件在第一次编译后,自动生成一个同名术语条目文件.nlo,运行 makeindex 工具程序和术语样式文件 nomencl.ist 对其编译,再生成一个同名术语排序文件.nls,当再次编译源文件时,\printnomenclature 命令将被这个文件的内容所取代。


refer to:
http://texblog.wordpress.com/2007/11/01/glossary-in-latex/

http://zzg34b.w3.c361.com/package/note-2.htm

2008/03/24

latex中的表格

没有评论:
\begin{table}[h]

\small % change the font size

\begin{tabular*}{1.0\textwidth}{ lll }
%\begin{tabular} {lll}
%\begin{tabular*}{0.75\textwidth}{ @{\extracolsep{\fill}} lll}

\hline
Name & Example Data & Description \\
\hline

Sentence Identifier & \$GPGGA & GPS Fix Data \\
Time & 031145.999 & 03:11:45.999 UTC \\
Latitude & 0120.3055, N & 1 degree 20.3055 minutes North \\
Longitude & 10346.6611, E & 103 degree 46.6611 minutes East \\
Fix Quality &1& Data is from a GPS fix \\
Number of Satellites &05& 5 Satellites are in view \\
Horizontal Dilution of Precision &00.0& Relative accuracy of horizontal position \\
Altitude &163.3, M& 163.3 meters above mean sea level \\
Height above WGS84 ellipsoid & 156.2, M& 156.2 meters \\
Time since last DGPS update &blank& No last update \\
DGPS reference station id &blank& No station id \\
Checksum &*6F& Checksum for transmission errors \\

\hline
\end{tabular*}
\end{table}

2008/03/22

latex 文献(bib)管理软件

没有评论:
Kbibtex (首选)
Ubuntu下bib 文件管理。在kile -> settings -> Tools->build中 view bib file by kbibtex.
安装 Applications->add/remove 或者 sudo apt-get install kbibtex

JabRef
一个用java写的文献管理器。可在ubuntu menu: Applications->add/remove下直接安装,但是restricted software (not open source)。或下载从
http://jabref.sourceforge.net/index.php

Referencer
一个GNOME 应用程序,它支持最终生成 BibTeX 格式的文献文件。 主要功能包括:
* 可自动检索元数据
* 智能化的 Web 链接处理方式
* 支持从 BibTeX、Reference Manager、EndNote 等软件导入文献文件
* 支持 Tagging
Referencer 的最新版本为 1.0.2,有源码包和 deb 包可用。

Bibus
BiBus基于Python,Windows和Linux版本都有,Ubuntu下安装Bibus只要敲 sudo apt-get install bibus,就OK(JabRef同理)。
第一次使用前要选择数据库,MySQL或SQLite任选其一。


Note:
windows下有EndNote, Biblioscape, NoteExpress,Reference Manager,ProCite.
在线版或者以浏览器插件形式存在的有EndNote Web和Zotero.

2008/03/21

latex文件头定义冲突

没有评论:
在latex中使用ACM proceedings格式文件(acm_proc_article-sp.cls)时,如果用到了algorithm2e的包,编译时会出现:
! Too many }'s.

该冲突可直接在文件开头加入下面5句话解决:

\makeatletter
\newif\if@restonecol
\makeatother
\let\algorithm\relax
\let\endalgorithm\relax

2008/03/19

latex的图片排版: subfigure

没有评论:
目的: 使用latex的subfigure并排放置两张图.

注意要使用宏包\usepackage{graphicx}和\usepackage{subfigure}

\begin{figure} \centering
\subfigure[figure 1 title.] { \label{fig:a}
\includegraphics[width=0.8\columnwidth]{fig1.eps}
}
\subfigure[figure 2 title.] { \label{fig:b}
\includegraphics[width=0.8\columnwidth]{fig2.eps}
}
\caption{ general title. }
\label{fig}
\end{figure}

Note:
如果前图漏掉 \caption{},后图的编号可能不会从(a)算起。改变编号用
\setcounter{subfigure}{0};
引用子编号\subref{fig:subfig};
改变间距用 \vspace{.3in} 和\hspace{.1in},置于两subfigure间.

2008/03/08

利用Python绘制论文图片: Gnuplot,pylab

没有评论:
python 生成 数据,gnuplot/pylab 画图, 嵌入到latex。 这里:python 调用 gnuplot 画图,set output 到 png or latex.

首先,安装数值计算包 numpy, scipy

1. NumPy 1.04 : numpy is a new version of numarray. numpy,已替代Numeric.
http://numpy.scipy.org

sudo apt-get install python-numpy

import numpy

2. SciPy library depends on NumPy

install scipy: (only for optimized package using LPAS, since numpy contains it.)
www.scipy.org


然后,安装 gnuplot 或者 pylab

安装PyLab: plotting with the pylab module from matplotlib, depending on numpy. free from: http://matplotlib.sourceforge.net/

install:
sudo apt-get install python-matplotlib
import math
import pylab # a new name of matplotlib


安装python-gnuplot module
(by Michael haggerty http://gnuplot-py.sourceforge.net/)

sudo apt-get install python-gnuplot


参考书 python scripting for computational science.pdf




Python-Gnuplot 1.7 interface

没有评论:

all python module files are located under ./build/lib/Gnuplot
demo.py
Gnuplot.py
PlotItems.py

Interface intrdocution:
PlotItems.Data()

if want to redraw, can use replot()
gp.plot(p1)
gp.replot(p2)

or add all into one itemlist, then plot()
gp._add_to_queue( (p1,p2,p3) )
gp.replot()

一些 tricks:

如果要在一个page上画多副图,可以
======================================
set multiplot ;会抹掉前面的图
plot ...

set parametric ;参数画图
plot [0:2*pi] cos(t),sin(t)
unset parametric ;恢复

plot ... ;标题会和第一条标题重叠

==========
如果不用set multiplot,可以 plot, replot,replot...

Gnuplot两种绘图模式:multiplot

没有评论:

在 gnuplot> 模式下,
plot 命令会冲掉前面的图,而
replot 会在原图上画,并且顺序排列图标志文字

在multiplot>模式下,
plot和replot都不会冲掉前面的图,但
plot 的标志文字会和前面的覆盖
replot的标志文字不会和前面的覆盖,顺序排列

但是参数画图不能用replot, 后面也不能接其他replot。
例如:
set parametric
plot [0:2*pi] cos(t), sin(t) notitle
unset parametric

所以如果目的是多图重叠绘制,并且要用到参数绘图,建议方案是:

* 使用multiplot模式,
* 非参数绘图用 replot
* 参数绘图用 set, plot, unset。缺点是参数绘图的图标文字会重叠,但设成title="" 也可接受。

279 unset multiplot # or else cannot set term to ps
280 set term postscript
281 set output "sample.ps"
282 set multiplot

283 plot x # no previous plot
284 plot x+2

285 set parametric
286 plot [0:2*pi] cos(t), sin(t) notitle
287 unset parametric

288 plot x+3

289 history

Gnuplot支持图片格式,保存,及插入到latex

没有评论:

在文件中置入 gnuplot 绘制的图形

目前支持格式 postscript(*.ps), enhanced postscript(*.eps), x11(screen)

set terminal postscript eps color lw 1 “Helvetica” 20
如果想让线条粗些,可以修改 lw 后面的 1
然后再加上一句这个来设置输出文件:
set output ‘sample.eps’

所有终端在能力上都不相同。其中的一些(如 LaTeX)可能不支持文本的旋转,所以如果您像我们前面那样设置 ylabel,在不同的终端中可能显示不一样。换句话说,您可以在 LaTeX 的特定终端中使用 LaTex 命令。例如, set ylabel "$sin(\\theta)$"(注意我们使用两个反斜杠产生一个 LaTex 所需的反斜杠 —— gnuplot 在将双引号中所括的字符串传送到终端驱动程序之前,先对其进行反斜杠处理)。现在,您可以使用 \input{output.tex} 将输出文件包含在 LaTeX 文件中。要在 PostScript 终端中获得相同的结果,使用相应的 PostScript 命令: {/Symbol q} 。在 enhanced PostScript 和 LaTeX 中,您可以使用表示法 x^{superscript}和 x_{subscript} 得到上标文字。还要注意缩写的终端和输出命令:

eps 驱动程序的能力set term post enh
# enhanced PostScript, essentially PostScript
# with bounding boxes
set out 'gplt.eps'
set xlabel '{/Symbol q_1}
set ylabel 'sin^2({/Symbol q_1})'
plot sin(x)**2

控制比例和长宽比

默认情况下,gnuplot 对 x 轴和 y 轴都使用比例系数 1,但是它对控制图形的长宽比(y 轴长度与 x 轴长度的比率)不起作用。终端驱动程序使用终端的默认长宽比。比例系数、长宽比或者两者都可以使用 set size 命令指定,例如:

# square is synonymous to an aspect ratio of 1;
# scale y-axis by 2, retain x-axis size
set size ratio square 1,2

gnuplot 使用给定的长宽比能否成功绘制图可能受到终端能力的限制。 set size 也是与 multiplot 命令一起使用才有用,multiplot 命令用于在同一输出屏幕或文件中生成多个图。

安装作图软件 gnuplot

没有评论:

如果 sudo apt-get install gnuplot 不行则从 www.gnuplot.info 下载 版本 4。2。0
然后解压缩,在root权限下执行
./configure
(may prompt to install "texinfo" package in advance)
make
make check # test
make install #install

注意: 如果 ./configure 失败,需要安装基本编程环境:
sudo apt-get install build-essential # for gcc 编译

sudo apt-get install xorg-dev #for "set term x11" 如果设置 x11终端失败

安装完毕后,在命令行下运行:
$ gnuplot
就进入了gnuplot
系统出现:
gnuplot>
画个最简单的吧,sin(x)
在提示符下面输入:
gnuplot> plot [-3.14:3.14] sin(x)

一般情况下使用gnuplot都是科学绘图,因此很多都是放在文章里面。一般优秀的科技文献都是用latex来编写的,所以gnuplot提供了直 接输出 tex文件的功能,只需要把output设置为latex就可以了。下面来看一个例子,就把上面的正弦曲线插入到你的文章中。在命令行下输入:
gnuplot> set terminal latex
set output "sin.tex"
plot [-3.14:3.14] sin(x)
那么程序自动生成了一个tex文件,其包含一系列代码,都是绘图用的,可以用写字板打开,里面都是一些指令,你完全可以忽略掉。你可以把这个文件直接插入你的文章中,例如
\begin{figure}
\begin{center}
\input{sin.tex}
\end{center}
\end{figure}


奇怪我安装的gnuplot不支持png, jpeg terminals,只有 ps图像格式。没办法,只好安装了imagemagick好使用convert命令

sudo apt-get install imagemagick

convert sample.ps sample.png

convert -rotate 90 sample.ps sample.png #图像旋转90度

2008/03/07

latex文件与图片转换

没有评论:

Latex 支持:
* latex, dvipdfmx: tex文件只能包含 eps, ps 图片。如是ps图片可能要指定图片尺寸
* pdflatex: tex文件只能包含 pdf, jpg, png图片

插入的外部图,可分点阵图和矢量图。 照片是点阵图, 如 jpg, png格式。 而示意图和数据图最好是矢量图,用 eps 和 pdf 格式. 矢量图的好处是,即使把文章中的图放大,线条仍然分明。

建议使用 latex + dvipdfmx , 图片用EPS. 因为科技论文一般要求提供EPS格式的图形,大多数的作图软件都能生成EPS格式图形且一般都是矢量形式。 Tex排版软件对EPS格式的支持最好。 为照顾jpg图片,也可用 pdflatex, pdf (示意图和数据图), jpg(照片) 输出。

这样写文本, latex, pdflatex会各自找所需的图片文件。

\usepackage{graphicx}.
\includegraphics{figure} %% no extension.
编译命令:
latex filename.tex
dvips filename.dvi
dvipdfm filename.dvi
dvipdfmx filename.dvi (ubuntu, kile下要sudo apt-get install dvipdfmx)
dvi2pdf filename.dvi
pdflatex filename.tex

转换图片:

epstopdf figure.eps
convert figure.ps figure.png # keep both files
jpeg2ps figure.jpeg



注:

PostScript打印输出默认的文件格式是prn,其实就是ps文件,把后缀该为ps即可。这个ps文件还不是标准的EPS格式,它的图形周围还有很多空白。所以还需要通过PS2EPS,输出成标准的EPS图形。如果你在文章中插入EPS图形时出现大片空白,或者文字跳动等怪异情况,则就需要考虑重新计算图形边界。

如果需要知道图片尺寸 bounding box,以下两方法可以告诉LaTeX:

格式: \includegraphics[parameters]{filename}
where parameters is a comma-separated list of any of the following:
bb=llx lly urx ury (bounding box),
width=h_length, height=v_length, angle=angle, scale=factor, clip=true/false, draft=true/false.

1. \includegraphics[bb=lbx lby rux ruy]{xxxx.yyy} 其中(lbx,lby), (rux,ruy)分别是图片左下角和右上角的坐标。

2. 用ebb xxxx.yyy产生xxxx.bb文件。LaTeX编译的时候会自动去寻找xxxx.bb文件。


由照片转成的EPS图片仍然是点阵式,放大后仍会失真。

dvi 可能预览不了某些图片,但生成ps 或pdf后可看。

latex+.bb 排版结果和pdflatex排版结果可能很不一样。


批量转换shell script:

#!/bin/sh
echo "pdflatex: *.png -> *.pdf"
for file in *.png
do
echo $file
convert $file `basename $file .png`.pdf
done

echo "pdflatex: *.jpg -> *.jpg"


echo "latex: *.png -> *.eps"
for file in *.png
do
echo $file
convert $file `basename $file .png`.eps
done

echo "latex: *.jpg -> *.eps"
for file in *.jpg
do
echo $file
convert $file `basename $file .jpg`.eps
done


2008/03/06

latex中的算法描述

没有评论:
Latex排版算法使用algorithm2e.sty 相较 algorithm+algorithmic 宏包为优.
它提供了各种控制流命令,可以加行号,显示对齐线,定义输入输出,而且作为浮动体,还能排版算法标题。 详情参见 algorithm2e.pdf

一个完整的algorithm2e例子
\documentclass{article}
\usepackage[linesnumbered,boxed]{algorithm2e}
\begin{document}
One example.
\begin{algorithm}
%% \SetLine
\KwIn{$r_i$ , $Backgrd(T_i)$=${T_1,T_2,\ldots,T_n}$ and similarity threshold $\theta_r$}
\KwOut{$con(r_i)$}
$con(r_i)= \Phi$\;
\For{$j=1;j \le n;j \ne i$}
{
float $maxSim=0$\;
$r^{maxSim}=null$\;
\While{not end of $T_j$}
{
compute Jaro($r_i,r_m$)($r_m \in T_j$)\;
\If{$(Jaro(r_i,r_m) \ge \theta _r) \wedge ((Jaro(r_i,r_m) \ge r^{maxSim}) $}
{
replace $r^maxSim$ with $r_m$\;
}
}
$con(r_i)=con(r_i) \cup {r^{maxSim}}$\;
}
return $con(r_i)$\;
\caption{identifyRowContext}
\label{algo:1}
\end{algorithm}
\end{document}

-----------------------------------------------------
一个algorithmic 的例子
\usepackage{algorithmic,algorithm}

\begin{algorithm}
\caption{MED approximation. } \label{algo_minball}
\begin{algorithmic}[1]
\STATE choose two points $ x,y $ randomly from $P$, and
construct a disk $B(c,r)$ whose center $c = \frac{x+y}{2}$
and radius $r = \frac{\|x-y \|}{2} $.
\STATE $ P = P - \{x,y\}$;
\WHILE {$P$ is not empty}
\STATE choose a point $w \in P$.
\IF { $B(c,r)$ does not cover $w$ }
\STATE $ r = \frac{r + \| w-c \| }{2} $,
\STATE $ c = c + \frac{w-c}{ \|w-c\| } r $, where $r$ is the updated.
\ENDIF
\STATE $ P = P - \{ w \} $.
\ENDWHILE
\STATE return $B(c,r)$
\end{algorithmic}
\end{algorithm}

2008/03/04

latex数学公式

没有评论:
more refer to: wiki

多行的数学公式


[GIF Image]
可以表示为:
\begin{eqnarray*}
\cos 2\theta & = & \cos^2 \theta - \sin^2 \theta \\
           & = & 2 \cos^2 \theta - 1.
\end{eqnarray*}
其中&是对其点,表示在此对齐。
*使latex不自动显示序号,如果想让latex自动标上序号,则把*去掉



矩阵[GIF Image]
表示为:
The \emph{characteristic polynomial} $\chi(\lambda)$ of the
$3 \times 3$~matrix
\[ \left( \begin{array}{ccc}
a & b & c \\
d & e & f \\
g & h & i \end{array} \right)\]
is given by the formula
\[ \chi(\lambda) = \left| \begin{array}{ccc}
\lambda - a & -b & -c \\
-d & \lambda - e & -f \\
-g & -h & \lambda - i \end{array} \right|.\]

c表示向中对齐,l表示向左对齐,r表示向右对齐。

括号和分隔符
()和[ ]和|对应于自己;{}对应于\{ \}; ||对应于\|。
当要显示大号的括号或分隔符时,要对应用\left和\right,如:

\[ f(x,y,z) = 3y^2 z \left( 3 + \frac{7x+5}{1 + y^2} \right).\]对应于
[GIF Image]
\left.\right. 只用与匹配,本身是不显示的,比如,要输出:]
[GIF Image]
则用
\[ \left. \frac{du}{dx} \right_{x=0}. \]


希腊字母[GIF Image]


[GIF Image]


[GIF Image]

2008/03/01

Ubuntu: 安装 latex 排版软件

没有评论:

安装 latex 排版软件


I only install the basic tetex package.

sudo apt-get install tex-common tetex-base tetex-bin tetex-extra

Use latex sample.tex to create sample.dvi file
Use pdflatex sample.tex to create sample.pdf file

For editing, i use kile, gedit or vi. Someone says emacs is powerful, but i got used to.


Ubuntu: Xfig, TexMaker, Winefish Latex Editor, Dia diagram editor

一些关于latex编辑和office的工具软件:
Xfig
TexMaker
Winefish Latex Editor 感觉一般,界面帮助不大,不如TexMaker
Dia diagram editor
Kile 推荐


在此之前我用的是
gedit - text editor
gimp - image editor


1) KILE可能是世界上最强大的LaTeX编辑器(集成环境)了。
有很多高级功能:
自动补全latex命令
跳跃到出错地点
警告和badbox提示
代码折叠
......
但是Kile依赖kde的库,你要安装kdelib等东西来安装。

2) Texmaker 的作者原来就是kile的作者之一。功能和kile相近,但是弱了一点。没有上面提到的高级功能。


No spell checker in new kile

The spellchecker in KDE is managed via KControl. By default, it uses ispell. That's why ispell works but not aspell.
Solution 1: install ispell directly.
$sudo apt-get install ispell

Solution 2: use kcontrol to change spellchecker to aspell.
1) $ sudo apt-get install kcontrol
2) $ kcontrol
3) Select KDE Components > Spell Checker
4) Choose aspell as client (and utf-8 as encoding)

2008/02/07

Ubuntu: 中文输入及 scim

没有评论:
The complete solution:
1. Use Synaptic to remove scim-* completely.
2. Remove previously installed SCIM files/data using terminal:
sudo rm -rf /usr/bin/scim
sudo rm -rf /usr/local/bin/scim
sudo rm -rf /etc/scim
sudo rm ~/.scim
sudo rm /root/.scim
3. Reinstall SCIM through System - Administration - Language Support.
基本等同于
sudo apt-get install language-pack-gnome-zh language-pack-gnome-zh-base language-pack-zh language-pack-zh-base language-support-zh
sudo apt-get install scim scim-chinese scim-pinyin

4. If Pinyin not found in scim setup-> IMEngine, then download scim-pinyin, scim-tables,
./configure
make
sudo make install
奇怪的是 sudo apt-get install scim-pinyin 无法成功
5. 如安装之后在firefox和google的输入框还是无法敲中文。可以如下处理:
im-switch -s scim -z default #设置 scim 为缺省输入法
logout and login again. In order to achieve this, you may need to install:
im-switch scim-qtimm
6. 有可能会遇到修改文件名时不能输入,在firefox中不能光标跟随,在gaim,pidgin,amsn,emesene,eva,gtalk等聊天软件不能输入文字等等的问题.解决方法如下:
修改 /etc/X11/xinit/xinput.d/scim
改成这样:
#GTK_IM_MODULE=xim
#QT_IM_MODULE=xim
GTK_IM_MODULE=scim
QT_IM_MODULE=scim
重启动,应该可以了
========
附:查看缺省语言
locale
say en_US is the locale, then using command:
im-switch -z en_US -s scim # set scim default
另:
我现在从windows xp 主机向 ubuntu 机器上传文件,用的ssh ftp client。上传的中文文件名在ssh ftp client中正常,但在ubuntu 下用ls 显示依旧是乱码(view encoding already changed to chn in terminal)。如果用
ls *.pdf | grep pdf
则可正常显示。 可能是ssh不支持编码转换。
设置LC_ALL和其它属性:
sudo gedit /etc/environment
在编辑器里,将内容修改如下(默认使用中文界面):
LANGUAGE="zh_CN:zh:en_US:en"
LANG=zh_CN.UTF-8
英文界面,将内容修改如下:
LANGUAGE="en_US:en"
LANG=en_US.UTF-8
保存,关闭编辑器
ubuntu 8.04 scim problem
Ubuntu 升级到8.04后,在Kile编辑状态或终端时,有时键盘输入失灵(但箭头键还能用),需要转到其他窗口有一番动作后回来才能用。上网search了一下,觉得是scim的问题。将之关闭则问题消失,但有时又要输入中文,唉,麻烦。
解决方案 1: 换用 scim-bridge 改善 scim 在 Ubuntu 中的表现
经实验: scim-bridge 未解决问题. ;-(
scim-bridge作为客户端用socket和scim通讯, 是用 C 代替了 C++ 编写的,可以解决原来 scim 和 acroread / realplay / vmplayer 等包不兼容的问题。
sudo gedit /etc/X11/xinit/xinput.d/scim
将GTK_IM_MODULE=xim
改成GTK_IM_MODULE="scim-bridge"
然后Restart system. 或者手工启动
scim -d
解决方案 2:
im-switch -s scim -z default
修改 /etc/X11/xinit/xinput.d/scim
改成这样:
#GTK_IM_MODULE=xim
#QT_IM_MODULE=xim
GTK_IM_MODULE=scim
QT_IM_MODULE=scim
重启后可以. ;-)
but it does not work for eric4, a python editor.
scim is a very bad input method, always resulting deadkey.
scim configuration:
去掉“scim设置”的 “前端”->“全局设置”->“将预编辑字符串嵌入到客户窗口中” 前的勾,就一切OK了
Gtk -> remove "embeded input table"

Ubuntu:中文文件名及内容编码转换

没有评论:

文件名的编码转换 convmv

有时通过ssh ftp上载下载文件时,文件名会变成乱码,这就需要用convmv转换文件名。
一个例子: 将”music”这个目录下的所有以 GB2312 编码的文件名的文件和子目录下的文件,转换成以 UTF-8 编码的文件名:
convmv -f gb2312 -t utf-8 --notest -r music
请注意这里的”--notest”选项:如果不提供这个选项,该命令只会做一个转换的测试,并不会真正的转换。因为这个命令有一定的”破坏性”,所 以,当你用这个程序的时候,最好是先不用”--notest”这个选项来做一遍测试,根据程序运行输出的信息来确定是否有个别的文件需要手动进行调整。
其他例子
convmv -f gbk -t utf8 --notest --nosmart *
#安装convmv
apt-get install convmv

转换内容编码用 iconv, 检测用enca

文件内容的编码检测及转换可以结合 2 个工具来完成。 convmv 的用法大致和 iconv 相似。
iconv -f gbk -t utf8 input.file > output.file

一般ubuntu下用utf8, windows下用 gbk。gb2312 (国标里最小最早的一个编码标准,6763个汉字),gb18030是最新的标准,涵盖27564个汉字,向下兼容gb2312和gbk。
1.如果你不知道你所要转换的文件的编码格式,你可以通过 enca 这个工具来检测编码。举例如下:
enca foo.txt
Universal transformation format 8 bits; UTF-8
2.如果你事先已经知道了文件的编码或者通过检测知道了文件的编码,可以通过 GNU 的 iconv 来进行编码转换。以下是一个例子用来把文件的编码从 GB2312 转换成 UTF-8:
iconv -f gb2312 -t utf-8 foo.txt > foot.txt.utf-8
提醒:iconv 的输出默认是直接输出到标准输出(standard output),通常就是你的屏幕上。所以,你需要使用”>”的重定向符号来把输出转存到一个”新”的文件里面去。切不可在”>”后面使用你 的原始的输入文件名作为输出文件名,因为”>”操作,会首先将其后面的文件清空,然后再运行 “>”前面的操作。也就是说,除了原始的输入文件被清空之外,你什么也得不到。这是很多 Linux 新用户经常会犯的一个”致命”错误。特此提醒。

2008/02/02

Ubuntu:GEdit和Evince显示中文的设置

没有评论:
在英文版Ubuntu下,Gedit文本编辑器默认显示的也是英文,那我们怎样把它设置成中文呢?
  •   在Applications菜单上点右键,选择Edit Menu.在Main Menu的对话框中勾选System Tools--Configuration Editor,并从Applications菜单中开启。
  •   依次开启/apps/gedit-2/preferences/encodings/双击右侧auto_detected,在弹出对话框中点选Add,添加Values值为GB18030,确定后选中,点选Up按钮将其移至第一位。
  •   同样方法,对show_in_menu进行设置,并将GB18030置于首位。
设置文档查看器 Evince 的中文支持

一般这种情况,都是PDF里没嵌入字体。可以
1. 装xpdf看
sudo apt-get install xpdf
sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional


或者

2. 依旧用evince,安装poppler彻底解决和xpdf的依赖关系
sudo apt-get install evince poppler-data

2008/01/31

Ubuntu启动菜单: 使XP变为默认启动系统

没有评论:
装Ubuntu和XP双系统后,启动菜单上 Ubuntu 是缺省项。如何修改使XP成为默认的操作系统?
其实很简单,修改 /boot/grub/menu.lst 文件,使其中default值变动一下即可。
过程如下:

1、打开命令行终端;
2、输入:
sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.bak
sudo gedit /boot/grub/menu.lst
注: 第一句做备份用。
3、假设文件内容如下:
-------------------------------------------------------------
# menu.lst - See: grub(8), info grub, update-grub(8)
# grub-install(8), grub-floppy(8),
# grub-md5-crypt, /usr/share/doc/grub
# and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default 0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout 10

## hiddenmenu
# Hides the menu by default (press ESC to see the menu)
#hiddenmenu

## ## End Default Options ##

title Ubuntu, kernel 2.6.15-23-386
root (hd0,2)
kernel /boot/vmlinuz-2.6.15-23-386 root=/dev/hda3 ro quiet splash
initrd /boot/initrd.img-2.6.15-23-386
savedefault
boot

title Ubuntu, kernel 2.6.15-23-386 (recovery mode)
root (hd0,2)
kernel /boot/vmlinuz-2.6.15-23-386 root=/dev/hda3 ro single
initrd /boot/initrd.img-2.6.15-23-386
boot

title Ubuntu, memtest86+
root (hd0,2)
kernel /boot/memtest86+.bin
boot

### END DEBIAN AUTOMAGIC KERNELS LIST

# This is a divider, added to separate the menu items below from the Debian
# ones.
title Other operating systems:
root
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/hda1
title Microsoft Windows XP Professional
root (hd0,0)
savedefault
makeactive
chainloader +1
-------------------------------------------------------------
现在default值为0,意即启动排行第一的操作系统,这里代表的就是Ubuntu, kernel 2.6.15-23-386。
现在把它修改成“default 4”,那么XP就成为默认的操作系统了。
因为从零数起,以title打头的Microsoft Windows XP Professional这一行排序为4。
另外我们还可以通过修改timeout的值来变更默认等待时间。

2008/01/22

双系统互访分区的软件

没有评论:

Tools to access Linux Partitions from Windows
来自: http://www.ubuntugeek.com

如果安装了 Windows 和 Linux 双系统,数据可能会分散在Linux 和 Windows分区上。
Ubuntu可直接读写Windows分区,Win需装如下软件才能读写Linux分区。


Explore2fs推荐
http://www.chrysocome.net/explore2fs
Explore2fs是一个访问ext2和ext3的浏览器工具。可运行在所有版本的Windows下面并可以读取几乎所有ext2 和 ext3 文件系统。最大的特点是体积小,无需安装,仅有一个exe文件,下载后即可使用. 只能读取,不能写入


DiskInternals Linux Reader
http://www.diskinternals.com/linux-reader/
DiskInternals Linux Reader 是一个比较新的东东。这个程序担当的角色是在Windows和Ext2/Ext3 Linux文件系统之间架起了一座桥梁。这个简单易用的工具运行在Windows下让您浏览Ext2/Ext3 Linux文件系统并从中提取文件。


Ext2 IFS
http://www.fs-driver.org/
给Windows安装Ext2 文件系统驱动. 它让Windows NT4.0/2000/XP/2003能够彻底获得Linux Ext2文件卷的能力(读写)。在安装过程中即可指定Linux分区的盘符,安装完成之后即可像访问windows分区一样访问Linux分区了.文件复制速度也非常之快


Ext2fsd http://www.ext2fsd.com/
安装之后和Ext2 IFS类似,能够给Linux分区加上盘符.不过不兼容Windows Vista.

rfsd: ReiserDriver
http://sourceforge.net/projects/rfsd/
ReiserDriver是一个可安装文件系统驱动 (IFSD),能够让您在Microsoft Windows (2K/XP)下轻松读取本地ReiserFS文件分区。ReiserFS分区将在Windows系统中显示为一个磁盘。

2008/01/19

Ubuntu下安装 Java

没有评论:
安装java

---Ubuntu: 在firefox里安装java插件

Sun Java5: 从菜单 应用程序 -> 添加/删除... 中安装(只适合 Ubuntu),或者安装 sun-java5-plugin 软件包。 它同时也会要求附带安装 Sun Java5 (sun-java5-bin)。

安装完后firefox仍不能执行java插件,需要手工链接文件

插件放在
/usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so

进入到firefox存放插件的目录
cd /usr/lib/firefox/plugins/
(cd ~/.mozilla/plugins )

作symlink:
sudo ln -s /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so

重起firefox,确定插件是否安装成功.在firefox输入
about:plugins.

有就成功了.

---选择默认的 Java 版本

在 Ubuntu 6.06 或者 5.10 中,如果你想使用 Sun's Java 代替开源的 GIJ (GNU Java bytecode interpreter),你需要将它设为默认,运行:

sudo update-alternatives --config java

并从列表中选择你的选项。

注意:你很可能想同样设置 jar, javac, javadoc, javah, javap and javaws:

sudo update-alternatives --config jar

为了使 Java 程序(使用 .deb 包安装的)能在你选择的 JVM 中运行,保证你也修改了 JVM 的配置文件:

sudo gedit /etc/jvm

# This file defines the default system JVM search order. Each
# JVM should list their JAVA_HOME compatible directory in this file.
# The default system JVM is the first one available from top to
# bottom.

/usr/lib/jvm/java-gcj
/usr/lib/jvm/ia32-java-1.5.0-sun
/usr/lib/jvm/java-1.5.0-sun
/usr


确认 /usr/lib/jvm/java-1.5.0-sun 在第一行.

2008/01/15

Ubuntu 播放rmvb等视频文件的配置

没有评论:
Linux里面的播放软件主要有四个:mplayer,xine,gstreamer,vlc
mplayer是一个全能的播放软件。xine是一个播放器后端。gstreamer是一个多媒体框架。vlc是一个简单但功能强大的播放软件。其中mplayer和xine能用w32codecs,而gstreamer和vlc不能. xine是一个播放引擎。很多软件拿他做后端。如totem-xine,kaffeine,kmplayer,gxine,amarok等。要是以xine做后端的程序能播放更多格式,就必须安装libxine-extracodecs和w32codecs. vlc播放DVD,VCD,HDTV,xvid+lame的avi不错。

视频解决方案: 有一个mplayer足够。支持所有的格式,占用资源少,播放效果也好,功能也强大。 totem是一个简单的播放软件,功能太弱,现在用的人多是因为他是很多发行版默认的。但是不管他用哪个后端,播放效果都不理想。 目前网上的电影带外挂字幕的大多是xvid+mp3的avi视频,加上srt的字幕,这个用vlc就可以搞定了。

安装mplayer播放器sudo apt-get install mplayer-fonts mplayer mplayer-skins mozilla-mplayer
在开始用它进行视频播放前还需要进行以下设置(先启动它),然后右键弹出主菜单 -> Preferences/属性 -> Video/视频,在”Available drivers/可用驱动”中选择”x11″或”xv”,在同一窗口下半部份钩上”允许掉帧/Enable frame dropping”。

安装vlc: sudo apt-get install vlc

安装 realplayer11 for linux 简体中文版
看rm, rmvb还真要靠他. RealPlayer 11在媒体支持格式上也更加丰富,不但可以播放RealNetworks自家的 RealVideo和RealAudio,还能支持Flash、Windows Media、QuickTime等格式。RealPlayer 11可以自动播放受DRM保护的视频内容,甚至可以对视频内容进行提取、复制和剪辑。

1)下载bin包,到realplayer主页上下载 http://www.real.com/linux
2)安装: sudo chmod 755 *.bin
sudo *.bin #一定要root安装,否则安装后无法启动。安装后不需要像realplayer10那样进行任何配置。


安装gstreamer的解码器
gstreamer是gnome主推的多媒体平台,目前是0.10。但是默认没有安装完全,导致mp3等不能播放。所以,我们要安装 gstreamer0.10 .
sudo apt-get install gstreamer0.10-*

安装xine的解码器 libxine-extracodecs
xine是另外一个多媒体平台,功能非常强大。我们还把系统自带的totem卸载,改为使用xine后端的totem-xine,这样才可以播放rmvb等视频。顺便安装上mplayer这个强大的播放器,我一般用它来播放dvd。注意如果是 amd的CPU,需要安装mplayer-k7,当然,大家也可以直接安装mplayer,这个比较通用。
sudo apt-get install libxine-extracodecs mjpegtools ffmpeg lame faad sox mplayer libxine-main1 totem-xine

安装w32codecs
这个解码器支持几乎所有的Windows AVI 格式的影像, win32 codecs在官方源里没有(版权原因),可以到Mplayer的官网上去下载,然后以root登录,解压到/usr/lib/win32,或者下载 deb 包,直接安装,deb包下载地址
http://mirror.ubuntulinux.nl/pool/dapper-seveas/extras /w32codecs_20060611-0.0_i386.deb
(已下载)

Possible problems:
1. 如果出现: Error opening/initializing the selected video_out (-vo) device,在 mplaer播放器的属性(preference)设置中,video标签下的可获取驱动要选xv X11/xv,因为你还有其他显卡

2. totem播放rmvb无声音. totem在Ubuntu中默认的解码器是gstreamer,但是用它来播放rmvb格式的文件都没有声音。解决办法是:
a.在新立得中安装totme-xine,新立得会自动卸载gstreamer。
b.编辑~/.xine/catalog.cache,找到/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so,将下面的decoder_priority=5选项值由5改为10即可。

3. 看RM,或RMVB提示装入库或解码器发生问题.
sudo ln -s /usr/lib/codecs/ /usr/local/lib/