nohup sh -c "for ((i=0;i<${#a};i++));do echo ${a:$i:1};done"
nohup: 忽略输入并把输出追加到"nohup.out"
#tail -f nohup.out
Windows下星际译王(StarDict)的安装
        最早知道 " 星际译王" 这个程序,还是王垠的那篇《完全用linux工作》中知道的,以前一直是在FreeBSD系统上使用,安装也非常方便,直接ports就行了 :)
她非常精巧,可扩展的字典库和附录,以及可选安装的真人发声(比金山词霸发音标准多了!),这里所指的安装,只不过是解压复制而已
而且还是开源的,支持Linux,FreeBSD,Solaris,Win32
真是个好东西,别再为 金山词霸 的序列号发愁了~~~
OK,我们现在开始
一、在http://stardict.sourceforge.net/index.php下载以下3个文件
1、gtk-runtime-2.4.13-rev-a.exe (GTK 程序库)
2、stardict-2.4.4.exe (星际译王 程序)
3、WyabdcRealPeopleTTS.tar.bz2 (发声档案)
二、在http://stardict.sourceforge.net/Dictionaries.php下载所需的词典文件
比如我下载了:
stardict-cdict-gb-2.4.2.tar.bz2
stardict-kdic-computer-gb-2.4.2.tar.bz2
stardict-kdic-ec-11w-2.4.2.tar.bz2
stardict-langdao-ce-gb-2.4.2.tar.bz2
stardict-langdao-ec-gb-2.4.2.tar.bz2
stardict-oxford-gb-2.4.2.tar.bz2
stardict-powerword2007_pwqec-2.4.2.tar.bz2
stardict-xdict-ce-gb-2.4.2.tar.bz2
stardict-xdict-ec-gb-2.4.2.tar.bz2
在http://stardict.sourceforge.net/TreeDictionaries.php 下载附录资料
stardict-treedict-infoBrowse-zh_CN-2.4.2.tar.bz2
安装过程:
首先安装GTK运行环境,即先安装 gtk-runtime-2.4.13-rev-a.exe
安装星际译王主程序
安装WyabdcRealPeopleTTS.tar.bz2 (发声档案)
解压缩文件(过程有点漫长,慢慢等 :)      )后将其放入星际译王安装目录下,即      ..\StarDict 下
安装字典文件
将字典文件解压后放入安装目录下的dic目录内即可,即..\StarDict\dic 内
安装附录文件
将附录文件stardict-treedict-infoBrowse-zh_CN-2.4.2.tar.bz2解压缩后得到的3个文件
infoBrowse-zh_CN.dict.dz
infoBrowse-zh_CN.ifo
infoBrowse-zh_CN.tdx
放入安装目录下的treedict目录内即可,即 ..\StarDict\treedict 内
安装即完成,启动星际译王,敬请的使用吧~~       :)
一个用GTK与MySQL 数据库管理新闻的程序

1、 数据库为 gtk_php

create table code_news
(
id int(9) not null default 0 auto_increment,
title char(255) not null,
author char(30) not null,
author_contact char(75) not null,
news text,
PRIMARY KEY (id),
UNIQUE ID (id)
);

2 、GTK 程序部分,用于图形化管理新闻 - admin.php

CODE:
[Copy to clipboard]
#!/usr/local/bin/php -q
<?

if(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');


function destroy()
{
Gtk::main_quit();
}

function handle_select($clist,$row,$column,$event)
{
global $ret, $entry, $SELECTED_ID;
$id = $clist->get_text($row,0);
$SELECTED_ID = $id;
}

function add_record()
{
global $entry, $SELECTED_ID, $fields, $API_URL, $USERNAME, $PASSWORD;
while(list($f,$l) = each($fields))
{
$$f = $entry[$f]->get_text();
}
$news = $entry['news']->get_chars(0,$entry['news']->get_length());

$file = $API_URL.'?a=add&p='.$PASSWORD.'&u='.$USERNAME.
'&news[title]='.urlencode($title).'&news[author]='.urlencode($author).
'&news[author_contact]='.urlencode($author_contact).
'&news[news]='.urlencode($news);

$fp = fopen($file,'r');
if($fp)
{
$contents = trim(fread($fp,4096));
if(!eregi("^0:[A-Z]*",$contents))
{
clear_entries();
update_clist();
}
else
{
echo "n$contentsn";
}
}
reset($fields);
}

function delete_record()
{
global $entry, $SELECTED_ID, $USERNAME, $PASSWORD, $API_URL;
$file = $API_URL.'?u='.$USERNAME.'&p='.$PASSWORD.'&a=del&id='.$SELECTED_ID;
$fp = fopen($file,'r');
if($fp)
{
$contents = trim(fread($fp,4096));
if(!eregi("^0:[A-Z]*",$contents))
{
update_clist();
}
else
{
echo "n$contentsn";
}
}
}

function update_record()
{
global $entry, $SELECTED_ID;
echo "n************************* NOT IMPLEMENTED *************************n";
echo "nUPDATE RECORD : $SELECTED_IDn";
echo "n************************* NOT IMPLEMENTED *************************n";
}

function update_clist()
{
global $clist, $API_URL, $PASSWORD, $USERNAME, $ret;
// Grab everything from our API
$fp = fopen($API_URL.'?a=get&p='.$PASSWORD.'&u='.$USERNAME,'r');
if($fp)
{
$contents = fread($fp,4096);
if(!ereg("^0:[A-Z]*",$contents))
{
$clist->clear();
$ret = unserialize(trim($contents));
$clist->freeze();
while(list($id,$info) = each($ret))
{
// $info = $ret[$i];
$row = array($info['id'],$info['author'],$info['title']);
$clist->append($row);
}
$clist->thaw();
}
else
{
echo "nERROR: ".$contents."n";
}
}
}

function clear_entries()
{
global $entry;
$entry['title']->set_text('');
$entry['author']->set_text('');
$entry['author_contact']->set_text('');
// echo $entry['news']->get_text();
// $foo = $entry['news']->get_chars(0,$entry['news']->get_length());
// echo "n".$foo."n";
$entry['news']->backward_delete($entry['news']->get_length());
}

function delete_event()
{
return false;
}

$window = &new GtkWindow();
$window->connect('destroy','destroy');
$window->set_border_width(10);

$box = &new GtkVBox();
$window->add($box);
$box->show();

$fields = array(
title => 'Title: ',
author => 'Author: ',
author_contact => 'Author Contact: ');

// Set up our regular text fields
while(list($f,$l) = each($fields))
{
$vbox = &new GtkVBox();
$box->pack_start($vbox,false,false);
$vbox->show();
$vbox->set_border_width(3);

$hbox = &new GtkHBox();
$vbox->pack_start($hbox,false,false);
$hbox->show();

$label = &new GtkLabel("$l");
$label->set_usize(150,10);
$hbox->pack_start($label,false);
$label->show();

$entry[$f] = &new GtkEntry();

$hbox->pack_start($entry[$f],false);
$entry[$f]->show();
}

$vbox = &new GtkVBox();
$box->pack_start($vbox,false,false);
$vbox->show();
$vbox->set_border_width(3);

$label = &new GtkLabel('News:');
$vbox->pack_start($label);
$label->show();

$entry['news'] = &new GtkText();
$entry['news']->set_editable(TRUE);
$vbox->pack_start($entry['news']);
$entry['news']->show();

$buttons = array(
Add => 'add_record',
Delete => 'delete_record',
Update => 'update_record',
Clear => 'clear_entries',
Refresh => 'update_clist',
Quit => 'destroy');

$hbox = &new GtkHBox();
$hbox->set_border_width(3);
$vbox->pack_start($hbox,false,false);
$hbox->show();

while(list($l,$f) = each($buttons))
{
$button = &new GtkButton($l);
$button->connect('clicked',$f);
$hbox->pack_start($button);
$button->show();
}

$scrolled_win = &new GtkScrolledWindow();
$scrolled_win->set_border_width(5);
$scrolled_win->set_policy(GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

$titles = array('ID','Author','Title');
$clist = &new GtkClist(sizeof($titles),$titles);
$scrolled_win->add($clist);
$clist->show();

$USERNAME = md5('joestump');
$PASSWORD = md5('phpgtk');
$API_URL = 'http://127.0.0.1/gtk/news_api/api.php';

// Grab everything from our API
update_clist();

$clist->set_usize(400,300);
$clist->connect('select-row','handle_select');

$auto_resize = array(0,1);
for($i = 0 ; $i < sizeof($auto_resize) ; ++$i)
$clist->set_column_auto_resize($auto_resize[$i],true);

$vbox->pack_start($scrolled_win);
$scrolled_win->show();

$window->show_all();
Gtk::main();

?>

3、 用于执行管理程序,向数据库加入数据的代码 api.php
<?

// Change username and password accordingly
$link = mysql_connect('192.168.192.47','root','')
or die('0:DB ERROR');

mysql_select_db('gtk_php',$link) or die('0:DB ERROR');

// Create a username and password to protect the
// API from outside people. THIS IS VERY IMPORTANT!
$USERNAME = md5('joestump');
$PASSWORD = md5('phpgtk');

switch($a)
{
case 'add':
// Make sure we are getting the 4 fields
// we want
if(sizeof($news) == 4)
{
// Check the given username and password against
// the ones we have - $p and $u are md5()'d in the
// GTK app and then sent along so no one can easily
// decrypt them.
if($p == $PASSWORD && $u == $USERNAME)
{
// extract($news);
while(list($key,$val) = each($news))
$$key = addslashes($val);

$sql = "INSERT INTO code_news
(title,author,author_contact,news)
VALUES
('$title','$author','$author_contact','$news')";

$r = mysql_query($sql);
if($r)
{
if(mysql_affected_rows($r))
echo '1:SUCCESS';
else
echo '0:FAILURE';
}
}
else
{
echo '0:BAD PASSWORD';
}
}
else
{
echo '0:BAD INFO ARRAY';
}
break;
case 'get':
if($p == $PASSWORD && $u == $USERNAME)
{
$sql = "SELECT * FROM code_news";
$r = mysql_query($sql);
if(@mysql_num_rows($r))
{
while($row = mysql_fetch_assoc($r))
$ret[$row['id']] = $row;
echo serialize($ret);
}
else
{
echo '0:NO RECORDS';
}
}
break;
case 'del':
if($id)
{
if($p == $PASSWORD && $u == $USERNAME)
{
$sql = "SELECT * FROM code_news WHERE id='$id'";
$r = mysql_query($sql);
if(@mysql_num_rows($r))
{
$sql = "DELETE FROM code_news WHERE id='$id'";
$r = mysql_query($sql);
include('http://'.$SERVER_NAME.$PHP_SELF.'?u='.$USERNAME.'&p='.$PASSWORD.'&a=get');
}
else
{
echo '0:ID NOT ON RECORD';
}
}
}
else
{
echo '0:NO ID GIVEN';
}
break;
default:
echo '0:UNRECOGNIZED ACCESS';
}

?>

4 、显示新闻 不用多说了- news.php  
<?

// Change username and password accordingly
$link = mysql_connect('192.168.192.47','root','')
or die('0:DB ERROR');

mysql_select_db('gtk_php',$link) or die('0:DB ERROR');

$sql = "SELECT * FROM code_news";
$r = mysql_query($sql);

if(@mysql_num_rows($r))
{
while($row = mysql_fetch_array($r))
{
extract($row);
echo '<b>'.$title.'</b>
';

if(ereg("@",$author_contact))
$href = 'mailto:'.$author_contact;
else
$href = $author_contact;

echo 'Posted By: <a href="'.$href.'">'.$author.'</a>
';
echo $news.'<hr>';
}
}
else
{
echo 'NO NEWS!';
}

?>

<?
/*
A little sample script that takes SQL query from user, sends it to the MySQL server and
displays the result of query in new window.
DON'T FORGET TO CHANGE SERVER, USERNAME AND PASSWORD IN MYSQL_PCONNECT FUNCTION!!
I'll be glad for any comments.
Adam Rambousek - rambousek@volny.cz
*/

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');

$windows = array();

function delete_event($window, $event)
{
$window->hide();
return true;
}

function close_window($widget)
{
$window = $widget->get_toplevel();
$window->hide();
}

/*
Called when clist column is clicked. It sets sorting by the clicked column.
*/
function clist_click_column($clist, $column) {
$clist->set_sort_column($column);
$clist->sort();
}


/*
Function displaying the result of query.
*/
function do_query($query)
{
global $windows;

//if the query_window is opened, let's close it
if (isset($windows['query_window'])) {
close_window($windows['query_window']);
}

$window = &new GtkWindow;
$windows['query_window'] = $window;
$window->set_name('query_window');
$window->connect('delete-event', 'delete_event');
$window->set_policy(false, true,false);
$window->set_title('Query result');
$window->set_uposition(220,85);

$box1 = &new GtkVBox();
$window->add($box1);

//frame displaying entered sql query
$frame = &new GtkFrame('MySQL Query');
$box1->pack_start($frame,false);
$label = &new GtkLabel($query->get_text());
$frame->add($label);

//frame displaying clist with the query result
$frame = &new GtkFrame('MySQL Query Result');
$box1->pack_start($frame,true);

//we'll display the result with scrollbars
$scrolled_win = &new GtkScrolledWindow();
$scrolled_win->set_border_width(5);
$scrolled_win->set_policy(GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
$frame->add($scrolled_win);

/*here we deal with the result
if mysql_query called with the query entered in main window, return a result
we can display clist
*/  
if ($result = mysql_query($query->get_text())) {
/*
at first, keys array contains the names of columns
*/
if ($data = mysql_fetch_array($result)) {
$i=0;
$keys = array();
while (list($key,$val) = each($data)) {
if ($i%2) $keys[]=$key;
$i++;
}
}

/*
now we can prepare the clist, keys are the titles of columns and the number
of columns is equal to the number of keys
*/  
$clist = &new GtkCList(count($keys), $keys);
$clist->connect('click_column', 'clist_click_column');

//we sets the auto_resize for each column
for ($i=0;$i<count($keys);$i++) $clist->set_column_auto_resize($i, true);
$scrolled_win->add($clist);

/*
now the data from result
we get the data from each row to row_data array and then we append this
array to the clist as a new row
*/
do {
for($i=0; $i < count($data)/2; $i++){
$row_data[$i] = $data[$i];
}
$clist->append($row_data);
} while ($data = mysql_fetch_array($result));
}


$button = &new GtkButton('close window');
$button->connect('clicked', 'close_window');
$box1->pack_start($button,false);
$button->set_flags(GTK_CAN_DEFAULT);
$button->grab_default();

$window->show_all();
}

function main_window()
{
$window = &new GtkWindow();
$window->set_policy(false,true,false);
$window->set_name('main_window');
$window->set_title('MySQL Query sample');
$window->set_uposition(80,80);

$window->connect_object('destroy', array('gtk', 'main_quit'));
$window->connect_object('delete-event', array('gtk', 'false'));

$box1 = &new GtkVBox();
$window->add($box1);

$frame = &new GtkFrame('MySQL Query');
$box1->pack_start($frame,false);

$entry = &new GtkEntry();
$frame->add($entry);

$separator = &new GtkHSeparator();
$box1->pack_start($separator,false);

$button = &new GtkButton('Do Query');
$button->connect_object('clicked', 'do_query',$entry);
$box1->add($button);

$separator = &new GtkHSeparator();
$box1->pack_start($separator,false);

$button = &new GtkButton('Quit');
$button->connect_object('clicked', array('gtk', 'main_quit'));
$box1->add($button);


$window->show_all();
}

mysql_pconnect("SERVER","USERNAME","PASSWORD") or die("can't connect to server");
main_window();
Gtk::main();

?>





<?

if (!class_exists('gtk')) {

    if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')

        dl('php_gtk.dll');

    else

        dl('php_gtk.so');

}



function destroy() {

    Gtk::main_quit();

}



$window = &new GtkWindow();

$window->set_title("MySQL Manager");

$window->set_usize(300,300);

$window->connect('destroy', 'destroy');

$window->set_border_width(10);

$table=&new gtktable(5,3);

$window->add($table);



//add text boxes, button, and label

$usertext=&new gtklabel();

$usertext->set_text("Username:");

$table->attach($usertext,1,2,1,2);

$user=&new gtkentry();

$table->attach($user,2,3,1,2);

$passtext=&new gtklabel();

$passtext->set_text("Password:");

$table->attach($passtext,1,2,2,3);

$pass=&new gtkentry();

$table->attach($pass,2,3,2,3);

$sertext=&new gtklabel();

$sertext->set_text("Server:");

$table->attach($sertext,1,2,3,4);

$server=&new gtkentry();

$table->attach($server,2,3,3,4);

$conb=&new gtkbutton("Connect!");

$conb->connect('clicked','mconnect');

$table->attach($conb,1,3,4,5);



function put($what,$where) {

    $where->set_text($what);

}  



function mconnect() {

    global $window,$pass,$user,$server;

    $pass=$pass->get_text();

    $user=$user->get_text();

    $server=$server->get_text();

    $conn=mysql_connect($server,$user,$pass);

    mysql_select_db("simtown");

    $q="select * from users";

    while ($row=mysql_query($q)) {

        print $row[0];

    }

    mysql_close($conn);

}



$window->show_all();



Gtk::main();

?>
三星研究院招C/C++ GTK软件工程师

发信站: BBS 水木清华站 (Tue Mar 11 10:30:27 2008), 站内



招聘职位 :C/C++软件工程师

招聘人数 : 7人

工作地点 :北京



职位描述 :Linux平台下的手机软件开发



职位要求 :

l    本科(2年以上工作经验)及硕士以上学历

l    精通C/C++语言编程,有扎实的编程功底和丰富的编程经验

l    掌握GTK+或QT开发,掌握GTK+者优先

l    熟悉嵌入式Linux,具有丰富开发经验

l    有输入法框架开发经验者优先

l    有模式识别、图象处理背景者优先

l    具有较强的团队精神,学习能力较强,能吃苦耐劳

l    较强的英语能力



应聘简历 投递地址:yan5.wang@samsung.com (请注明应聘职位)

简历接收 截止期限:2008年06月01日
如何中文显示我的PHP-GTK程序

官方没有出台正式方案之前,暂时先用这个(学习中,高手有更好的解决方案请跟贴):

在php.ini的[PHP-GTK]部分

加入php-gtk.codepage = gb2312 ;将php格式保存为ansi格式
      php-gtk.codepage = uft-8     ;将php格式保存为utf8格式


在你创建的窗口时


$window = &new GtkWindow();
$window->style->font =
gdk::font_load("-unknown-宋体-normal-r-normal-*-*-120-*-*-p-*-gb2132-0");


这里调用gdk::font_load函数载入字体,注意是“GDK”,不是“GTK”

(顺便抗议一下,程序一长,居然自动截断掉,只好这样写了)

2、我的PHP-GTK程序为什么那么单调,而演示程序确有颜色?

首先要感谢hisunweb大师的耐心指导,本文才得以完成。

文章的开始,我要更正一下上次的笔误(没有人有意见吧 )

gdk::font_load("-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0");

同时,本文将给出中文化的更好的方法:

(1)、将PHP.INI中的[PHP-GTK]模块下
php-gtk.codepage = "gb2312"

(2)、在原PHP-GTK程序目录下新建mygtkrc文件,内容如下:
style "defaultfont"
{
font = "-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0"
}
class "GtkWidget" style "defaultfont"

(3)、在你的PHP-GTK程序的Gtk::main();之前加入
Gtk::rc_parse(dirname($argv[0]).'/mygtkrc');

现在你的PHP-GTK能够很顺利的现实中文了。

上面是开胃菜,下面开始重点:大家都看到了,我们在上面新建了一个文件(名字自己爱怎么写就怎么写,以下简称资源文件),这个文件有点类似HTML的 CSS样式,能够对PHP-GTK程序的风格进行解析,如字体、颜色等。如果我们需要鼠标移动到按钮上时,按钮显示颜色,可以在你的资源文件中这样定义:
style 'button_list' = 'button'
{
bg[PRELIGHT] = { 0, 0.75, 0x00 }
}
widget "main window.*GtkScrolledWindow.*GtkButton*" style "button_list"

同时,在你的程序中,我们要这样定义一个标志“main window”,就有点像HTML中的ID
$window = &new GtkWindow();
$window->set_name('main window');

这样一来,你的GtkScrolledWindow下的GtkButton鼠标经过时都有颜色,详见附带gtk.php程序。

资源文件如何定义了?我们前只有这些信息:
如假如一行
widget "main window.*GtkButton*" style "main_button"

该定义把"主窗口"中的所有按钮构件设置为资源文件中定义的"main_buttons"风格。

有几个指令用于改变一个构件的属性。
fg - 设置构件的背景色。
bg - 设置构件的前景色。
bg_pixmap - 设置构件的背景为一幅像素图。
font - 设置构件使用的字体。
另外,一个构件可以有几种状态,你可以为每种状态设置不同的颜色,图像和字体。这些状态是:
NORMAL - 构件的一般状态,如鼠标不位于构件上方,键未按下时构件所处的状态。
PRELIGHT - 当鼠标移到构件上方,在此状态下定义的颜色生效。
ACTIVE - 当处于构件上的鼠标键被按下或点击时,该构件被激活,相应的属性值将生效。
INSENSITIVE - 当构件被设置为不敏感(insensitive)时,它不能被激活,相应属性值起作用。
SELECTED - 选中一个对象时,取相应的属性值。
当用"fg"和"bg"关键字设置构件的颜色时,其格式是:
fg[<STATE>] = { Red, Green, Blue }

这里STATE是前述状态(PRELIGHT,ACTIVE,...)之一,Red,Green,Blue是范围0-1.0间的数值, {1.0,1.0,1.0}表示白色。这些数值必须是浮点型的,否则将被存为0,因此写为"1"的数值是无效的,应写为"1.0".0值写为"0"却不错,因为即使系统认不出也没关系。所有系统不认识的数值都会被设为0。
bg_pixmap除了用一个文件名取代颜色名外和以上格式很相似。
pixmap_path是一个由‘:’分隔开的路径表。当搜索你定义的图像文件时选择这些路径。

最后,可能你对font的定义很感兴趣,我把定义方法转过来,原汁原味,就不翻译啦~~(每一行对应一个参数)

foundry xxx (where the font was created. 'unknown' is okay)
family xxx (e.g. Arial)
weight xxx (e.g. bold, medium)
slant x (r - roman, i = italic, o = oblique)
setwidth xxx (e.g. normal, condensed)
addedstyle xxx (e.g. serif, sans. Leave blank for none)
pixelsize N (set either this or pointsize, not both)
pointsize N (point size, e.g. 120)
resx N (x res the font was created for, in dots per inch)
resy N (y res the font was created for, in dots per inch)
space x (m = monospaced, p = proportional, c = cell)
averagewidth N (average character width in pixels. 0 if unknown)
registry xxx (e.g. utf, iso8859 or adobe)
encoding xxx (e.g. 1 or 2 (for iso8859) or fontspecific)

例如:$font = gdk::font_load('-unknown-Arial-normal-r-normal--*-120-96-96-p-0-iso8859-1');

3、PHP-GTK的相关资源

作者:Verdana

http://kromann.info/php4-gtk.php
这里有从 CVS 源码编译的 php-gtk 的版本,每天更新
类似 php snaps, 不过容易出问题。
还有 php5 的 gtk 版本。

http://www.cweiske.de/phpgtk.htm
德国网站,但内容是英文的,很容易看懂

提供了 PHP-GTK AppWizard 下载
非常不错的软件,帮你自动生成 PHP GTK 程序,不需要写一行
代码,哈哈哈

提供 PHP-Themes 下载,非常漂亮啊~
http://www.cweiske.de/phpgtk_themes.htm

如果没有看上眼的也可以自己定制 :P

另外学 GTK 的话,就必须要提一下 winGlade ,呵呵~
一个 GUI 的 GTK 界面设计器。类似 VC 设计窗体一样
可以把控件拖来拖去,修改属性。
生成的是 xml 文件。

这里 http://wingtk.sourceforge.net/ 下载

4、AppWizard 确实很好,但是不能使用中文目录/文件,咋办咧^_^?

(1)、在同一目录下新建资源文件mygtkrc,内容如下:
style "defaultfont"
{
font = "-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0"
}
class "GtkWidget" style "defaultfont"

(2)、源程序解压后,appwizard.php-gtk的349行,也就是GTK::main();的前面一行加入:
Gtk::rc_parse(dirname($argv[0]).'/mygtkrc');

(3)、保存后,支持中文目录/文件名。第一次启动,需要等待一定的时间,俺的机器好像用了将近2分钟,不要认为是死机,值得等待。

以后遇到相同的中文问题,可以先尝试用上面的方法。
祝大家玩得开心,村民们有什么PHP-GTK的咚咚,全部贡献出来吧,人民会记住你的(村棍除外)。

注意:AppWizard第一次运行,不能放在带有中文的路径目录中,否则很可能会出错。

6、如何修改默认的PHP-GTK风格,比如我比较喜欢MAC风格?

将资源文件改名为“.gtkrc”,注意,前面有点号,这个过程可以通过DOS窗口实现(作者是这么说的),把它放到C:Documents and Settings{你的用户名}.gtkrc

例如有个文件内容如下

style "default"
{
bg[NORMAL] = "#ededed"
bg[PRELIGHT] = "#8db6cd"
bg[ACTIVE] = "#bababa"
bg[INSENSITIVE] = "#ededed"
bg[SELECTED] = "#8db6cd"

fg[NORMAL] = "#000000"
fg[PRELIGHT] = "#000000"
fg[ACTIVE] = "#000000"
fg[INSENSITIVE] = "#bababa"
fg[SELECTED] = "#000000"

engine "engradient"
{
use_gradient = TRUE
handlebox_marks = TRUE
scrollbar_marks = TRUE
}
}

widget "*" style "default"

style "tooltip"
{
bg[NORMAL] = "#ffffff"
}
widget "*gtk-tooltip*" style "tooltip"

将它改名.gtkrc,再放到:
C:Documents and Settings开心果目录下,以后你运行的PHP-GTK程序都是用这个风格。

当然,你必须拥有相应的风格库文件,否则只能显示主题颜色,框架不变,并提示找不到库文件。如果仅仅需要颜色主题,请把这一段删掉:
engine "engradient"
{
use_gradient = TRUE
handlebox_marks = TRUE
scrollbar_marks = TRUE
}

顺便提一句,AppWizard不能够生成我们所想要得PHP-GTK程序,它仅仅是个测试(JUST A TEST,作者又是这么说的),而且生成的代码垃圾一堆,继续寻找传说中的法宝~~

还有就是,PHP-GTK程序,得到ZEND的编码支持,也就是说,ZEND编译后PHP-GTK依然能够执行。
至此,2008全国高考本科线基本全部揭晓,很不幸,山东的苦孩子们又一次成为了高考最大的牺牲品,其文科一本二本线,理科一本二本线无一不领衔于全国高考各省市,连“难兄难弟”河南,都望尘莫及。尤其是山东的二本线,文理均超出全国第二高分四十分以上,这代表高考大军中的多数人——农村学子们,无本科可上(你不可能让他们拿出高额的学费去念三本)。



    在此我谨代表一名山东学子,为八十万山东考生感到深切的惋惜与遗憾,曾经的我们,现在的你们,一年又一年,受伤的总是山东人!看看青海的1批理科线,438,这意味着什么?同一个大学里的山东学子平均要比青海的高出150分,这已经是语数外单科的总分了,想到这里,真的不知道该说什么



   抱不平,有用吗?努力换来的是什么?遥遥无期的等待,只是盼望一次公平竞争的机会,仅此而已,然而却得不到。被认为死读书高分低能的山东人,也许只能在这样的事实面前,泪流心底。无语,真的无语




附:
     文科1批  理科1批  文科2批 理科2批  
山东  584分    582分    567分   557分



湖南  581分    536分    537分   482分  
重庆  576分    544分    510分   488分



黑龙江569分    577分    504分   508分    
贵州  566分    521分    503分   468分    
吉林  565分    569分    497分   493分    
甘肃  560分    558分    501分   507分    
河南  557分    563分    513分   517分    
陕西  557分    527分    520分   490分



安徽  553分    563分    513分   507分    
浙江  550分    550分    516分   504分    
云南  550分    530分    510分   475分



福建  547分    534分    487分   471分    
山西  545分    546分    510分   511分  
内蒙古543分    548分    502分   497分



辽宁  538分    515分    470分   433分    
河北  537分    552分    503分   514分



湖北  532分    548分    508分   516分  
宁夏  532分    498分    488分   457分    
广西  528分    501分    470分   440分  
天津  523分    522分    483分   466分    
江西  520分    512分    487分   461分  
北京  515分    502分    472分   455分    
青海  490分    438分    425分   388分  
江苏  330分    330分    300分   300分 (江苏实行课改,总分440)
在学校住一个飞鸽传书的哥们给大家发了个:中央民族大学网络中心业务宣传广告,如下,觉得很有意思,呵呵!

朋友!你想戒掉网瘾吗?你想从沉迷的网游世界挣脱吗?  

如果你想,那么,装中央民族大学校园网吧!  

你的孩子沉迷网游无法认真学习吗?装中央民族大学校园网吧!  

中央民族大学承诺,24小时质量保证让你的孩子无法正常游戏。强大的技术支持,保证让你的孩子5分钟掉一次线,练级、副本、任务、PK,一个都别想要。绝对让你体会宽带的价格,拨号的享受。  

下面是对用户王同学的调查:  

问:你觉得中央民族大学校园网好吗?  

王:太好了!  

问:为什么这么觉得呢?  

王:现在我的已经从网游中彻底摆脱了。  

问:效果这么好?  

王:是啊,现在我一看到电脑就会吐,一看见网游的广告就会休克。  

问:哇……了不起啊!  

王:是啊,是啊!中央民族大学校园网让我从虚拟世界走了出来。不仅如此,我还越来越喜欢和家长交流。  

问:为什么呢?  

王:说话不会掉线。不会说着说着人就消失,让我很有存在感。  

朋友!看到这里你还犹豫什么?拨打电话给我们吧!中央民族大学校园网,真正为用户着想!我们深知免费咨询会伤害用户的消费心理,让您的自尊受到伤害!所以,我们顶住社会压力,开放收费电话咨询!为了满足你奢侈的消费欲望,我们一直在努力!  

中央民族大学的承诺:没有最慢,只有更慢!  

中央民族大学的保证:没有掉线,只有无法连接
  忧郁奔向冷的天忧郁奔向冷的天
撞落每滴小雨点
张开口似救生圈
实现雨的酸与甜
搓起心爱的香烟
弄着脚底的软垫
酒醉与心醉沟起污染一片
无心睡眠
脑交战
踏着旧日怀念昨天的你
夜是渗着前事全挥不去
若是你在明日能得一见
就让我在怀内重得温暖
忧郁奔向冷的天
活在我的心里边
始终只有你方可
令逝去的心再甜
(音乐伴奏)
忧郁奔向冷的天
撞落每滴小雨点
张开口似救生圈
实现雨的酸与甜
搓起心爱的香烟
弄着脚底的软垫
酒醉与心醉沟起污染一片
无心睡眠
脑交战
踏着旧日怀念昨天的你
夜是渗着前事全挥不去
若是你在明日能得一见
就让我在怀内重得温暖
忧郁奔向冷的天
活在我的心里边
始终只有你方可
令逝去的心再甜
(音乐伴奏)
无心睡眠
脑交战
踏着旧日怀念昨天的你
夜是渗着前事全挥不去
若是你在明日能得一见
就让我在怀内重得温暖
忧郁奔向冷的天
活在我的心里边
始终只有你方可
令逝去的心再甜
忧郁奔向冷的天
活在我的心里边
始终只有你方可
令逝去的心再甜
忧郁奔向冷的天
http://www.phpe.net/articles/380.shtml
cookbook:http://www.kksou.com/php-gtk2/
http://www.youku.com/playlist_show/id_1167730.html
蜀山奇侠之仙侣奇缘
One way in, one way out. One thousand guards and one prisoner。
入口只有一个,出口,还是只有一个。守卫千百,只为一囚。

尽管是动画,但是觉得拍得好就是拿钱到电影院去看也值得,尽管看了个D版,分为两次看完,得到三条结论:
1.这个世界没有什么秘方,只有你相信它,你就会是,就会很成功./(主观了点)
2.人人都想得到什么秘籍,但是最终大家都是空悲叹,其实也就是没有什么直路可走,大家都一样。
3.对于同一件事情的发生会有不同的看法,比如:里面的太郎,一心想得到那个秘籍,最后得到了,却看到的是什么都没有,而很失落,而熊猫悟出了一个道理,那就是你就相信你能,你就能!
   Last:搞笑的是结束时候,我发现那个熊猫和它师傅好像长得一样,也从某种意义上说明了,并不是所有人都能达到一个很高的武功修为,除了你和那些高手是一个系统的,包括各种行为和长相,呵呵呵!
                                                                                        向东
                                                                                            2008-6-26
http://dl.360safe.com/setupbeta.exe
http://dl.pconline.com.cn/html_2/1/66/id=42941&pn=0&linkPage=1.html
/usr/bin/rsync -vzrtup ./video_user_20080625_004312.txt 10.69.2.48::usersource_video/

aoyuntongji.php

<?php
require_once ("/data0/vshare/app/rank/config.php");
define("USER_SEARCH_IASK_LOG_PATH", "/data0/vshare/logs/user_search/iasks/");//删除的用户及视频日志目录(爱问)
echo "程序于 " . date("Y-m-d H:i:s") . " 开始执行:\n";
$date_d=date("d")-1;
if($date_d<10)
{
  $date_d="0".$date_d;
}
$iask_filename = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".log";
$iask_filename_html = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".html";
$conn_db_3306_r = @mysql_connect(DBHOST_VIDEO_R_aoyun, DBUSER_VIDEO_R_aoyun, DBPASSWD_VIDEO_R_aoyun) or
    die(DBHOST_VIDEO_R_aoyun.DBUSER_VIDEO_R_aoyun.DBPASSWD_VIDEO_R_aoyun."Can't connect to 3306 port readonly database");//长连接
//统计昨天登录过的用户个人中心信息
echo "正在从MySQL数据库中取出所有的用户userid,请稍候....";
//exit(0);
//$select_dt_user_r = @mysql_select_db("dt_video", $conn_db_3306_r) or die("Can't select database");
$select_dt_user_r = @mysql_select_db("dt_manage", $conn_db_3306_r) or die("Can't select database");
//$sql_tb_usertotal_r = "SELECT videoid,up_userid FROM tb_video_total where activeid = 0 limit 10";/*上线后打开*/
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));
$endtime = date("Y-m-d 00:00:00");
$sql_tb_usertotal_r = "select videoid,up_userid from tb_video_activity where (adddate>'".$starttime."' or appr_time>'".$starttime."') and adddate<'".$endtime."' and appr_status=1 and active_status in(1,0) and conv_status=1 and del_status=0 and activeid=128;";/*上线后打开*/
$query_tb_usertotal_r = mysql_query($sql_tb_usertotal_r, $conn_db_3306_r) or die("Query Error:" .
    mysql_error() . "\n");
echo  $sql_tb_usertotal_r."\n";
echo "\n[取出所有的用户userid:完成]\n";
$i=0;
echo $iask_filename."\n";

if(file_exists($iask_filename))
{
    unlink($iask_filename);
}

while ($row_tb_usertotal_r = mysql_fetch_assoc($query_tb_usertotal_r))
{
     if (!($i % 2000))
    {
      sleep(1);        
    }
  $vid = $row_tb_usertotal_r['videoid'];
  $uid = $row_tb_usertotal_r['up_userid'];
  $result['vid'] = $vid;
  $result['uid'] = $uid;
  /*  
  echo "VID:". $result['vid'] = $vid."\n";
  echo "UID:".$result['uid'] = $uid."\n";
  */
  $content = getContent($result,$i);
  us_writeFile($content, $iask_filename, USER_SEARCH_IASK_LOG_PATH .date("Ym")."/".$date_d);
  $i=$i+1;
  
    
}
if (file_exists($iask_filename) && is_readable($iask_filename))
{
  echo "正在向爱问推送数据,请稍候....\n";
  //pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && /usr/bin/rsync -vzrtup {$iask_filename} 10.69.2.48::usersource_video/",
        //"r"));
  $command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@219.142.118.48::boke_2008_sum_olympic_video";
  echo $command."\n";
  pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
  
  $command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@172.16.153.70::olympic_video/";
  pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
    $command="/usr/bin/rsync -avu " . $iask_filename ." 172.16.6.198::vblog/";
    pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
    $command="cp {$iask_filename} {$iask_filename_html}";
    pclose(popen($command, "r"));
    $command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.30::v_blog_sina_com_cn/htdocs/ay_data/";
    pclose(popen($command, "r"));
    $command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.71::v_blog_sina_com_cn/htdocs/ay_data/";
    pclose(popen($command, "r"));
  
  echo "[推送完成]\n";
}



echo "\n[完成]\n";


echo "程序于 " . date("Y-m-d H:i:s") . " 执行结束。\n\n";

function us_path_validate($path)
{
    $arraypath = split("\/+", $path);
    $tmppath = "";
    for ($i = 0; $i < count($arraypath); $i++)
    {
        if ("" == $arraypath[$i])
            continue;
        $tmppath .= (0 == $i ? "":"/") . $arraypath[$i];
        if (!is_dir($tmppath))
        {
            if (!mkdir($tmppath, 0777))
            {
                return false;
            }
        }
    }
    return true;
}

function us_writeFile($content, $filename, $dirpath)
{
    if (!us_path_validate($dirpath))
        exit();
    $fp = fopen($filename, "a+");
    if (!@fwrite($fp, $content . "\n"))
    {
        @fclose($fp);
        return false;
    }
    fclose($fp);
    return true;
}

function getContent($result,$i)
{
  /*
         if($i==0)
  {
    $str  = "VID\tUID\t日期\n";
          $str .= $result['vid'] . "\t";//视频总量
          $str .= $result['uid'] . "\t";//userid,用户UID
          $str .= date("Y-m-d",strtotime("-1 day")). "";
    return $str;
  }else{
  */
    $str  = $result['vid'] . "\t";//视频总量
          $str .= $result['uid'] . "\t";//userid,用户UID
          $str .= date("Y-m-d",strtotime("-1 day"))   . "";
    return $str;
   //    }
}
?>


实践时发现:
在做shell执行:ls /data/htdocs/pro/logs/*
出现多个文件时,最好是对返回串进行:rtrim($returnStr,"\n");
再:explode($returnStr,"\n"); 这样就不会有空数组了。

Example:

<?php
error_reporting(E_ALL);
while(1)
{
        $handle=popen("more video_user_20080626_190223.txt|grep @docid:|wc","r");
        $read = fread($handle, 2096);
        echo $read;
        pclose($handle);
        sleep(1);
}

?>





二、调用PHP或其它语言有while(1)的特别注意点:
特别是调用串口的一直监控代码,尽可能要用到,读取返回值,否则就会启动不起来那个while的程序:


C:

vi  startAutoAnserSer.php
我首先要教你最重要的东西,就是怎样解决这个问题。当然,解决之后,你要补我的专家号,呵呵。(我有个熟人有40年牙龈出血的经历,可是它近年突然好了。你想知道原因吗?是我给了他一个新招)

⑴ 连服维生素C7天,每天100-300mg。(这个量不算多,意义你明白。)
⑵ 这7天内保持好睡眠,目的是调节好人的生理状态,使不容易感冒什么的,避免因发烧造成的微血管通透性能趋增,使容易出血。
⑶ 本条最重要:去药房买“阿奇霉素分散片”,买大厂出的,我建议买天津药业悦来牌的。每盒6片×0.25g,请单次口服4片,并详细阅读一下说明书。记住:只吃一次即可。若有严重的不良反应(极少有!!),带着这个药的说明书去看门诊,医生会处置。如果没有不良反应,可在48小时后把另2片吃了,仅此而已。
该药是目前极有名的药,4年前从国外进来现已完全本土化,真的是国外科学家对人类的大贡献!也不算贵,约20-30元1盒6片。主要用途是对付非淋菌性性病。
它是广谱抗菌药,更是☆靶向制剂☆。你明白这个吗?我说个白话以便你能听懂:这个药可跟随人的巨嗜细胞走。而巨嗜细胞又跟着炎症走,所以疗效显著。
⑷ 一般的牙科医生,都会建议你用利君沙和灭滴灵,外加维生素C和K。但我想你是老牙龈出血,这种药用过多次,不会太奏效,阿奇霉素毒副作用比上述两种都小,更重要的是你没用过,致病菌没有抗药性。
⑸ 炎症消除、出血停止之后,建议你去做一次牙垢清除。多年的出血肯定会导致牙根周围有比较多的牙垢,这些牙垢年复一年刺激着周围的牙龈,不但是细菌的温床,也使牙龈面持续受到创伤,牙龈出血还会卷土重来。
⑹ 此次牙龈炎症消除之后,口腔气味也会比以前好转,但牙根的一部分将暴露的比以前利害(以前被肿胀的牙龈包裹),产生龋齿的可能性将增加。因此要注意好口腔清洁。

附:
牙出血有多种原因造成,有的是牙石引起,有的是因为刷牙时用的力度不均和牙刷毛的硬度太大引起的,还有个别原因是内火导致的出血。
刷牙出血的原因有许多,有的时候是因为有牙结石,而有的时候则是血液系统出现了问题,白血病的前发症状就是牙出血。因此,刷牙出血不可小视,一定要到医疗机构就诊,看看到底是什么因素导致的。
口腔局部因素引起的牙龈出血最常见。多是由于口腔不清洁,使食物残渣、牙垢、牙石经常堆积在牙体周围,口腔内的各种细菌在此大量繁殖,导致牙龈炎而发生牙龈出血,病人常常伴有口臭。此外,其他牙龈病如牙龈瘤,由于血管异常丰富,在嚼东西时,瘤体因摩擦而溃破,也可引起出血。其他如刷牙方法不正确、残根(烂牙根)、残冠、制作不良的牙套、不良充填物等锐利的边缘刺激牙龈肿胀发炎均可引起牙龈出血。
所以首先要明确是什么原因引起的,病因不同治疗方法也不同

但就在上周我自已买了瓶专用SU口水,一盒专治牙周炎的药,竟然好了

PHP中时间运算

WEB2.0 jack 2008-6-25 15:40
$tomorrow = date("Y-m-d", mktime(0,0,0,4,1+1,2005));
  
$tomorrow = date("Y-m-d", mktime(0,0,0,date("m") ,date("d")+1,date("Y"))); //明天
  
$yesterday = date("Y-m-d", mktime(0,0,0,date("m") ,date("d")-1,date("Y"))); //昨天
  
$lastmonth = date("Y-m-d", mktime(0,0,0,date("m")-1,date("d"), date("Y"))); //上一个月
  
$nextyear = date("Y-m-d", mktime(0,0,0,date("m"), date("d", date("Y")+1)); //下一年
  
$today = date("Ymd",strtotime ("+1 day"));
  
$date1="2006-08-09″;
echo date(’Y-m-d’,strtotime("$date1 +5 day")); //相应地,要增加月,年,将day改成month或year即可
分页: 281/338 第一页 上页 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 下页 最后页 [ 显示模式: 摘要 | 列表 ]