linux下让pdf使用单一字体

很多pdf文件的字体没有嵌入到文件中,以致于在windows下可以正常阅读到文件在linux下面是乱码或者不显示相关内容,为解决这一问题,可以为pdf文件分配单一的字体。
代码如下:

<?xml version=”1.0″?>

<!DOCTYPE fontconfig SYSTEM “fonts.dtd”>

<fontconfig>

<!–

If the font still has no generic name, add sans-serif

–>

<match target=”pattern”>

<test qual=”all” name=”family” compare=”not_eq”>

<string>URW Bookman L</string>

</test>

<test qual=”all” name=”family” compare=”not_eq”>

<string>URW Bookman L</string>

</test>

<test qual=”all” name=”family” compare=”not_eq”>

<string>URW Bookman L</string>

</test>

<edit name=”family” mode=”append_last”>

<string>URW Bookman L</string>

</edit>

</match>

</fontconfig>

将上述代码拷贝至新建文件中,命名为:49-sansserif.conf,并将文件移动至:/etc/fonts/conf.d/49-sansserif.conf

如果仍然不起作用,在终端输入下列代码:
sudo apt-get install poppler-data

emacs简单配置

1 自动启动ecb

;;;; 自动启动ecb,并且不显示每日提示

(setq ecb-auto-activate t

ecb-tip-of-the-day nil)

2显示行号

1.下载扩展文件linum.el,可以在http://stud4.tuwien.ac.at/~e0225855/linum/linum.html进行下载,它有不同的版本供你使用,我选择emacs22及以上版本。
2.设置.emacs文件:
(add-to-list ‘load-path “/usr/share/emacs/mylisp”)
(require ‘linum)
(global-linum-mode 1)

3鼠标的支持

默认情况下,使用鼠标点击ECB窗口中的内容,不起作用,并不能打开它,要回车才可以。可以在Emacs中执行“M-x ecb-customize-most-important”,找到“Ecb Primary Secondary Mouse Buttons”选项,将其设为“Primary: mouse-1, secondary: mouse-2”,并且以“Save for Future Sessions”保存。

4全屏
(defun my-fullscreen ()
(interactive)
(x-send-client-message
nil 0 nil “_NET_WM_STATE” 32
‘(2 “_NET_WM_STATE_FULLSCREEN” 0))
)
;该函数用于最大化,状态值为1说明最大化后不会被还原
;因为这里有两次最大化 (分别是水平和垂直)
(defun my-maximized ()
(interactive)
(x-send-client-message
nil 0 nil “_NET_WM_STATE” 32
‘(1 “_NET_WM_STATE_MAXIMIZED_HORZ” 0))
(interactive)
(x-send-client-message
nil 0 nil “_NET_WM_STATE” 32
‘(1 “_NET_WM_STATE_MAXIMIZED_VERT” 0)))
(my-maximized)

5自定义按键
(global-set-key [f1] ’shell);F1进入Shell
(global-set-key [f5] ‘gdb);F5调试程序
(setq compile-command “make -f Makefile”)
(global-set-key [f7] ‘do-compile);F7编译文件
(global-set-key [f8] ‘other-window);F8窗口间跳转
(global-set-key [f10] ’split-window-vertically);F10分割窗口
(global-set-key [f11] ‘delete-other-windows);F11 关闭其它窗口
(global-set-key [f12] ‘my-fullscreen);F12 全屏
6简单配置
(fset ‘yes-or-no-p ‘y-or-n-p)                      ;以 y/n代表 yes/no
(tool-bar-mode nil)                                   ;去掉那个大大的工具栏
(setq x-select-enable-clipboard t)          ;支持emacs和外部程序的粘贴
(setq frame-title-format ‘(“” buffer-file-name “@emacs” ));在标题栏显示buffer名称
(setq default-fill-column 80)                  ;默认显示 80列就换行
(show-paren-mode 1)                              ;当指针到一个括号时,自动显示所匹配的另一个括号

用递归求排列

通常我们希望检查n 个不同元素的所有排列方式以确定一个最佳的排列。比如,a,b 和c 的排列方式有:a b c, a c b, b a c, b c a, cab 和c b a。n 个元素的排列方式共有n !种。

由于采用非递归的C + +函数来输出n 个元素的所有排列方式很困难,所以可以开发一个递归函数来实现。令E= {e1 , …, en }表示n 个元素的集合,我们的目标是生成该集合的所有排列方式。令Ei 为E中移去元素i 以后所获得的集合,perm (X) 表示集合X 中元素的排列方式,ei . p e r m(X)表示在perm (X) 中的每个排列方式的前面均加上ei 以后所得到的排列方式。例如,如果E= {a, b, c},那么E1= {b, c},perm (E1 ) = ( b c, c b),e1 .perm (E1) = (a b c, a c b)。

对于递归的基本部分,采用n = 1。当只有一个元素时,只可能产生一种排列方式,所以perm (E) = ( e),其中e 是E 中的唯一元素。当n > 1时,perm (E) = e1 .perm (E1 ) +e2 .p e r m  (E2 ) +e3.perm (E3) + ⋯ +en .perm (En )。这种递归定义形式是采用n 个perm (X) 来定义perm (E), 其中每个X 包含n- 1个元素。至此,一个完整的递归定义所需要的基本部分和递归部分都已完成。

当n= 3并且E=(a, b, c)时,按照前面的递归定义可得perm (E) =a.perm ( {b, c} ) +b.perm ( {a,c} ) +c.perm ( {a, b} )。同样,按照递归定义有perm ( {b, c} ) =b.perm ( {c} ) +c.perm ( {b}), 所以a.perm ( {b, c} ) = ab.perm ( {c} ) + ac.perm ( {b}) = a b . c + ac.b = (a b c, a c b)。同理可得b.perm ( {a, c}) = ba.perm ( {c}) + bc.perm ( {a}) = b a . c + b c . a = (b a c, b c a),c.perm ( {a, b}) =ca.perm ( {b}) + cb.perm ( {a}) = c a . b + c b . a = (c a b, c b a)。所以perm (E) = (a b c, a c b, b a c, b c a,c a b, c b a)。

注意a.perm ( {b, c} )实际上包含两个排列方式:abc 和a c b,a 是它们的前缀,perm ( {b, c} )是它们的后缀。同样地,ac.perm ( {b}) 表示前缀为a c、后缀为perm ( {b}) 的排列方式。

程序1 – 1 0把上述perm (E) 的递归定义转变成一个C++ 函数,这段代码输出所有前缀为l i s t [ 0:k-1], 后缀为l i s t [ k:m] 的排列方式。调用Perm(list, 0, n-1) 将得到list[0: n-1] 的所有n! 个排列方式,在该调用中,k=0, m= n – 1,因此排列方式的前缀为空,后缀为list[0: n-1] 产生的所有排列方式。当k =m 时,仅有一个后缀l i s t [ m ],因此list[0: m] 即是所要产生的输出。当k

1-10 使用递归函数生成排列

template
void Perm(T list[],int k,int m)
{
int i;
if(k == m)
{
for(i = 0;i <= m;i++)
{
cout << list[i];
}
cout << endl;
}
else
{
for(i = k;i <= m;i++)
{
Swap(list[k],list[m]);
Perm(list,k+1,m);
Swap(list[k],list[m]);
}
}
}

1-11 Swap函数

template inline void Swap(T& a, T& b)

{// 交换a和b

T temp = a; a = b; b = temp;

}

cedet和ecb在emacs中的配置

最近,研究emacs的使用,期间遇到很多配置方面的问题,在http://www.emacer.com上面寻找到一些相关的教程,但中间仍然出现了很多难以预料的问题,在这里,把我用的的相应配置过程记录一下,一是为自己以后备用,二来为那些和我一样挣扎的新手提供一些帮助,废话少说,进入正文。

我使用的系统是ubuntu 9.10, 在这里我主要是配置cedet和ecb的相关内容,内容全部在.emacs 文件中(.emacs文件一般在/home/你的用户名 目录下,一般是隐藏的,按ctrl+h可以查看隐藏文件)。

1 安装前的准备

1.1 Emacs已经安装好,且版本号必须高于或等于21.(我用的是Emacs23.1)

1.2 安装Cedet套件:

1.2.1 首先下载cedet的cvs版本(请先安装cvs)

cvs -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet login

cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P

cedet

1.2.2 编译Cedet

进入到cedet

$ cd cedet-1.0pre6

编译:

$ make EMACS=emacs

如果这里没有安装texinfo, 会出现makeinfo命令未找到的出错. 请把texinfo安装就行了.

更多的编译过程, 请参阅cedet目录下的INSTALL文件.

1.2.4 配置Cedet

打开.emacs, 在最后加入:

(load-file “/home/你的用户名/cedet/common/cedet.el”)

(require ’semantic-ia)

(require ‘eldoc)

(require ’semantic-gcc)

(global-ede-mode 1)                      ; Enable the Project management system

(semantic-load-enable-code-helpers)      ; Enable prototype help and smart completion

(global-srecode-minor-mode 1)            ; Enable template insertion menu

更多的配置, 请参阅cedet目录下的INSTALL文件.

到此, Cedet套件已安装好, 接下来安装Ecb.

注1:XEmacs用户及Java-coder请参阅: http://ecb.sourceforge.net/docs/Requirements.html#Requirements

2 安装Ecb

2.1 下载Ecb

cvs -z3 -d:pserver:anonymous@ecb.cvs.sourceforge.net:/cvsroot/ecb co -P ecb

2.2 添加Ecb目录到load-path变量

你可以在.emacs文件最后添加以下代码, 也可以在site-list/site-start.el文件下添加:

(add-to-list ‘load-path

“/path/to/your/ecb/installation/directory”)

注意:上面那行代码里的” “里面是指你解码完的那个目录. 例如我的是/home/zneil/ecb

2.3 加载Ecb

在.emacs文件最后加上以下代码:

(require ‘ecb)

(require ‘ecb-autoloads)

重启Emacs, 打开一个C/CPP文件, 选择tool->start code browser, 试一下效果吧.

当然, 做到这一步, 仅仅只是让Emacs看起来像个IDE, 实际上还有很多功能, 例如像Smart Completion, Symbol References, Code Generation, UML Diagrams等功能都要动手配置.emacs文件才可以完成.

以下的配置可以利用DECET让你更好的编写代码:(这些代码必须放在加载CEDET之后和ECB之前)

(require ’semantic-ia)

(require ’semantic-gcc)

;; Enable template insertion menu

(global-srecode-minor-mode 1)

(setq-mode-local c-mode semanticdb-find-default-throttle

‘(project unloaded system recursive))

(defun my-semantic-hook ()

(imenu-add-to-menubar “TAGS”))

(add-hook ’semantic-init-hooks ‘my-semantic-hook)

(require ’semanticdb)

(global-semanticdb-minor-mode 1)

(defun my-cedet-hook ()

(local-set-key [(control return)] ’semantic-ia-complete-symbol)

(local-set-key “\C-c?” ’semantic-ia-complete-symbol-menu)

(local-set-key “\C-c>” ’semantic-complete-analyze-inline)

(local-set-key “\C-cp” ’semantic-analyze-proto-impl-toggle))

(add-hook ‘c-mode-common-hook ‘my-cedet-hook)

(defun my-c-mode-cedet-hook ()

(local-set-key “.” ’semantic-complete-self-insert)

(local-set-key “>” ’semantic-complete-self-insert))

(add-hook ‘c-mode-common-hook ‘my-c-mode-cedet-hook)

更多的信息请参阅:

http://ecb.sourceforge.net/

http://cedet.sourceforge.net/

约瑟夫环问题

约瑟夫环 是一个数学的应用问题:

已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head

解决问题的核心步骤:
1.建立一个具有n个链结点,无头结点的循环链表
2.确定第1个报数人的位置
3.不断地从链表中删除链结点,直到链表为空

void JOSEPHUS(int n,int k,int m) //n为总人数,k为第一个开始报数的人,m为出列者喊到的数
{
/* p为当前结点  r为辅助结点,指向p的前驱结点  list为头节点*/
LinkList p,r,list;

/*建立循环链表*/
for(int i=0,i<n,i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(list==NULL)
list=p;
else
r->link=p;
r=p;
}
p>link=list; /*使链表循环起来*/
p=list; /*使p指向头节点*/

/*把当前指针移动到第一个报数的人*/
for(i=0;i<k;i++)
{
r=p;
p=p->link;
}

/*循环地删除队列结点*/
while(p->link!=p)
{
for(i=0;i<m;i++)
{
r=p;
p=p->link;
}
r->link=p->link;
printf("被删除的元素:%4d ",p->data);
free(p);
p=r->link;
}
printf("\n最后被删除的元素是:%4d",P->data);
}

证明:
Josephus(约瑟夫)问题的数学方法(转)约瑟夫 (转)

无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n
,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,
而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。
为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出
,剩下的人继续从0开始报数。求胜利者的编号。我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):

k   k+1   k+2   … n-2, n-1, 0, 1, 2, … k-2
并且从k开始报0。
现在我们把他们的编号做一下转换:
k      –> 0
k+1    –> 1
k+2    –> 2


k-2    –> n-2
k-1    –> n-1
变换后就完完全全成为了(n-1)个人报数的子问题,假如我们知道这个子问题的解:例如x是最终的胜利者,那么根据上面这个表把这个x
变回去不刚好就是n个人情况的解吗?!!变回去的公式很简单,相信大家都可以推出来:x‘=(x+k)%n
如何知道(n-1)个人报数的问题的解?对,只要知道(n-2)个人的解就行了。(n-2)个人的解呢?当然是先求(n-3)的情况 —- 这显然就是
一个倒推问题!好了,思路出来了,下面写递推公式:令f表示i个人玩游戏报m退出最后胜利者的编号,最后的结果自然是f[n]
递推公式
f[1]=0;
f=(f[i-1]+m)%i;   (i>1)
有了这个公式,我们要做的就是从1-n顺序算出f的数值,最后结果是f[n]。因为实际生活中编号总是从1开始,我们输出f[n]+1
由于是逐级递推,不需要保存每个f,程序也是异常简单:

#include <stdio.h>
main()
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}

这个算法的时间复杂度为O(n),相对于模拟算法已经有了很大的提高。算n,m等于一百万,一千万的情况不是问题了。可见,适当地运用数学策略,不仅可以让编程变得简单,而且往往会成倍地提高算法执行效率。

c 代码示例:


	#include <stdio.h>
	main()
	{
	 int n, m, i, s=0;
	 printf ("N M = "); scanf("%d%d", &n, &m);
	 for (i=2; i<=n; i++) s=(s+m)%i;
	 printf ("The winner is %d\n", s+1);
	}

35个air(flex)教程

什么是 Adobe AIR


Adobe AIR and Flex – 开始


Flex创建Adobe AIR 应用程序



创建高效的AIR应用程序



Performance Apps for AIR (video)

Christmas is in the Air (building a to-do list app)

How to Build a Contact Manager in AIR using XML Part I and Part II


Building a Desktop Application with Ext, AIR, Aptana and Red Bull


Developing Cross-Platform Adobe AIR Applications


Create a Drag and Drop MP3 Player with Adobe AIR


Building Lupo: A Case Study in Building Commercial AIR Applications


Building Web and Adobe AIR Applications from a Shared Flex Code Base


Creating Desktop Applications for the Cloud with Adobe Flex, AIR, and Amazon S3


Adobe Air Tutorial for HTML/JavaScript Developers


Implementing Drag and Drop Between the OS and AIR


Notification Windows with JavaScript and AIR


Recreating MapCache on Adobe AIR


Creating a Downloader for YouTube with Flex/AIR


Walk on AIR: Create a To-do List in Five Minutes


Adobe AIR & Flash Tutorial


Developing AIR in Flash (video)

Webcams, PNGs, and AIR (video)

How to Store Adobe AIR Application Preferences Using JavaScript


Take Your CSS to the Desktop with AIR


Adobe AIR: Supercharged Development with Debugging


Creating an AIR RSS Reader Application from Scratch with Flex and PureMVC


Building an XML Viewer on AIR with Flex


Synchronizing Drupal Modules with Adobe AIR


Getting Started with Adobe AIR as a Web Developer/Designer


Simple Zip Viewer with JavaScript and AIR


Reducing CPU Usage in Adobe AIR


Performance Tips for Adobe AIR


Create Your Own Adobe Air Application with Flash


Build a Custom File Extension AIR App