cout float的显示问题

Posted on 2009-04-03 in Linux, Program | No Comments »

在c++,使用cout直接显示float类型的数据,在不同系统上显示方式可能有所不同。
测试代码:
#include <iostream>

using namespace std;

int main()
{
float t=0.000000277;
cout<<t<<endl;
return 0;
}

在LINUX上:

2.77e-07

而在WINDOWS上结果如下:

2.77e-007

标签:, , ,

ubuntu下使用netcdf库

Posted on 2009-03-26 in Linux, Program | No Comments »

netcdf自身带了C++接口,可是按照例子,怎么也连接不了,最后发现是要加参数:

g++ -lnetcdf_c++ -lnetcdf -o test *.cpp

标签:, ,

ubuntu intrepid下安装envi 4.6.1

Posted on 2009-03-25 in Linux | 2 Comments »

方法和原来的相似:

tar -zxvf envi_linux.x86.tar.gz
cd envi461linux.x86
sudo mkdir /usr/local/itt
sudo mv idl708 /usr/local/itt/
sudo mv install /usr/local/itt/
sudo mv license /usr/local/itt/
cd /usr/local/itt
sudo ./install

然后拷贝license到/usr/local/itt/license,命名为license.lic,就可以运行envi。
但发现我的机器明明是64位的,怎么是按照32位模式运行的呢?
仔细查找后发现,是由于idl的启动脚本里用到了/bin/arch命令,而这个命令已经被取消了,参考ubuntu的BUG
若不想修改脚本的话,就可以建一个/bin/arch的脚本:

#!/bin/bash
uname -m

标签:, , , ,

evolution的中文附件问题

Posted on 2009-03-21 in Linux | 1 Comment »

在ubuntu intrepid上,evolution发出的中文附件(指文件名是中文打头),如果另外一端是采用OUTLOOK活Outlook Express,则不能收到中文附件,或附件的文件名是奇怪的名称(att***.dat)。
在下个版本里这一问题已经得到修正,需要等ubuntu jaunty发布才可以。若现在就想修正这个问题,可以把这个PPA加入到源中:

deb http://ppa.launchpad.net/hggdh2/ppa/ubuntu intrepid main

然后升级系统应该就可以了。

参考:
1 ubuntu bug
2 gnome bug

标签:, , , ,

ubuntu amd64下使用skype

Posted on 2009-03-20 in Linux | 1 Comment »

目前,skype还没有专门的64位版本,在UBUNTU intrepid amd64下使用需要进行一些特殊的处理:
首先:下载skype,从medibuntu库中:
skype-common
skype-static
然后安装:

sudo aptitude install ia32-libs libqtcore4 libqtgui4
wget -N boundlesssupremacy.com/Cappy/getlibs/getlibs-all.deb
sudo dpkg -i getlibs-all.deb
sudo getlibs -p bluez-alsa
sudo dpkg -i *.deb

然后要配置skype,在我的机器上(dell optiplex 755),需要在音量控制里选择最后一个:Capture ...Pulse
然后在skype的声音设置里选择:输入声音 hwintel,0,别的都用pulse,这样就可以正常使用skype了。

最全的howto请参考:
HOWTO: Install Skype on 64-bit Ubuntu

标签:, , ,

postgresql serial 不自动增长的问题

Posted on 2009-03-10 in Computer | No Comments »

在手工导入原始数据后,其中的id项为serial类,由原始数据赋值,会遇到不自动增长的问题。

解决方案参考:http://bbs2.chinaunix.net/thread-1353824-1-1.html

serial key其实是由sequence实现的,当你手动给serial列赋值的时候,sequence是不会自增量变化的,当你插入customer 6的时候看看customer_id sequence是多少?

最好不要给serial手工赋值

SELECT setval('序列名称', max(id)) FROM 表;

select setval('offlineapp_id_seq',max(id)) from offlineapp;

标签:,

phpbb3的anti-spam

Posted on 2009-03-05 in phpbb | No Comments »

phpbb3自身带的anti-spam系统已经被破解,导致论坛上出现了大量的垃圾帖子和用户。
经搜索,可以暂时使用PHPBBCHINA上的这个方案:

Administration Control Panel -> Users and Groups -> Custom profile fields
[Create new field]: antibot (Field identification: antibot, Field type: Numbers)
Display in user control panel: Yes
Display on registration screen: Yes
Required field: Yes
Field name: Anti-Bot check
Field description: 如果您不是机器人,请输入一个130到139之间的数字:
[Profile type specific options]
Lowest allowed number: 130
Highest allowed number: 139
没有用mod,目前为止好像有效,是俺搞完后做的记录,看不明白的可以问,

还有一个办法是使用初始发帖审核,可阻止垃圾帖泛滥,但不能应对注册,设置很简单:
Administration Control Panel -> General -> Post settings
Enable queued posts: Yes
默认的最大帖子数是3,也就是说,只有前3帖通过审核发表后,用户才能自由发帖。
否则你发了他也不显示。。。
注意这个是3.0.0以后版本才有的功能(3.0.0本身木有)

标签:,

在UBUNTU下替换坏键

Posted on 2009-02-21 in Linux | No Comments »

笔记本有一个按键已经坏掉了,之前一直想换个键盘,但觉得不值得。那个向下的键在浏览网页的时候要经常使用,因此就想尝试用软件的办法解决。

首先找到那个替换的键,我是用WINDOWS键来代替DOWN键,必须知道WINIDOWS键的CODE,可以使用xev命令来测试。

xev | grep keycode

然后就可以使用xmodmap命令替换:

xmodmap -e "keycode 135=Down"

若你想替换的键不知道其名称,可以在/usr/include/X11/keysymdef.h里查找。
也可以在当前用户家目录下创建一个~/.Xmodmap文件:

keycode 135=Down

黑河草场图

Posted on 2009-01-01 in General | No Comments »

看看PINGBACK能否成功
黑河草场图

用PHP处理中文PDF

Posted on 2008-12-20 in Program | No Comments »

因项目需要,现在想在服务器端动态生成PDF文件,已一个PDF为模板,然后把所需的数据动态填入。
本来在使用zend framework,因此很直接的就使用zend_pdf类来进行测试,代码实现如下:

$pdf = Zend_Pdf::load($this->view->config->offline->template);
$pdf->pages = array_reverse($pdf->pages);
$style = new Zend_Pdf_Style();
$font = Zend_Pdf_Font::fontWithPath($this->view->config->offline->font, ( Zend_Pdf_Font::EMBED_DONT_SUBSET));
$pdf->pages[0]->setFont($font, 10);
$pdf->pages[0]->saveGS();
//datalist
$pdf->pages[0]->drawText(str_replace(";","\n",$datalist), 100, 570,"UTF-8");
//project
$pdf->pages[0]->drawText($formData['project'], 100, 430,"UTF-8");
$pdf->pages[0]->drawText($formData['realname'], 100, 78,"UTF-8");
$pdf->pages[0]->drawText($formData['realname'], 130, 590,"UTF-8");
$pdf->pages[0]->drawText($formData['unit'], 95, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['address'], 285, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['postcode'], 470, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['email'], 95, 40,"UTF-8");
$pdf->pages[0]->drawText($formData['phone'], 295, 40,"UTF-8");
$t=getdate();
$pdf->pages[0]->drawText($t['year'], 465, 40,"UTF-8");
$pdf->pages[0]->drawText($t['mon'], 500, 40,"UTF-8");
$pdf->pages[0]->drawText($t['mday'], 525, 40,"UTF-8");
$pdf->pages[0]->restoreGS();
$fn=$formData['realname'].date('YmdHis').".pdf";
$pdf->save($this->view->config->offline->savepath."/".$fn);

这样,的确能完成要求,但是令人恼火的是,其把中文字体内嵌到PDF文件中去,因此导致PDF文件过大,而且导致PHP所需内存也增大(64M)。
因此,就开始尝试别的办法,开始锁定fpdf,PHP能完美支持,而且也能支持中文(所要单独下载chinese.php和chinese-unicode.php)。
但是,FPDF不支持打开已有的PDF文件作为模板,因此还需要使用fpdi进行模板的支持,还要修改fpdi,使其父类为PDF-UNICODE。

然后就可以这样使用:

$pagecount = $this->setSourceFile($this->template);
$tplidx = $this->importPage(1, '/MediaBox');
$this->addPage();
$this->useTemplate($tplidx);
$this->AddUniGBhwFont('ugb','AdobeSongStd-Light-Acro');

$this->SetFont('ugb','',$this->fontsize);
$this->setXY(45,65);
$this->Write($this->fontsize,$this->data['realname']);

其中,字形由默认的AdobeSongStd-Light改成AdobeSongStd-Light-Acro,是为了防止英文字体变宽和变窄,格式才会整齐,英文字不会挤在一起。(参考: http://bbs.erp100.com/thread-18424-1-1.html)

标签:, , , , , ,