东东东 陈煜东的博客

月份存档: 七月 2012

将WordPress的搜索替换成Google自定义搜索

为了减小后台的压力,将搜索功能使用Google自定义搜索引擎功能替换。这样也不会浪费Google的强大的搜索功能嘛。这里使用的是Google自定义搜索引擎的托管页面。

如果没有Google 自定义搜索,那么可以去申请一个。每个搜索引擎都有一个自己的id值,需要这个id值。在搜索引擎结果页面上可以少量修改外观,还可以赚钱呢,更多功能好好去探索吧。

查看Wordpress后台代码,发现使用了get_search_form()获得搜索框,上官网搜索所在文件,在/wp-includes/generate-template.php。但是在文件中的get_search_form()修改在我的主题下不起效果。

后来经过搜索在/wp-content/themes/twentyeleven/searchform.php中修改,这下可以使用了。

源文件中的表单如下:

<form id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get">
<label class="assistive-text" for="s"><!--?php _e( 'Search', 'twentyeleven' ); ?--></label>
 <input id="s" class="field" type="text" name="s" />
 <input id="searchsubmit" class="submit" type="submit" name="submit" value="<?php esc_attr_e( 'Search', 'twentyeleven' ); ?>" />
</form>

修改为

<form id="searchform" action="http://www.google.com/cse" method="get"><label class="assistive-text" for="s"><!--?php _e( 'Search', 'twentyeleven' ); ?--></label>
 <input id="s" class="field" type="text" name="q" />
 <input type="hidden" name="cx" value="002842556423191659620:3mb-gtj3uvw" />
 <input type="hidden" name="ie" value="UTF-8" />
 <input id="searchsubmit" class="submit" type="submit" name="submit" value="<?php esc_attr_e( 'Search', 'twentyeleven' ); ?>" />
</form>

其中的input中name=cx的value值为id值,ie为页面的编码。

这样在使用搜索框搜索时,就自动转入Google的自定义搜索页面进行搜索了。

分类: wordpress

在虚拟机中安装CentOS操作系统

打算在虚拟机中安装一个centos,然后用来学习服务器的配置,也算是为了将来买vps的准备吧,反正内存也比较大,尽管我自己使用的Ubuntu,但是不想乱安装软件,还是用来虚拟机来,免的捣鼓坏了可以快速还原。

下载centos光盘安装镜像

下载Centos的iso源文件, 我是在USTC上下载的,下载地址为http://mirrors.ustc.edu.cn/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-minimal.iso

在虚拟机中安装centos

在虚拟机中新建一个Linux系统,并在虚拟光盘中添加iso文件,运行虚拟机,进入系统。

  1. 运行后,有个选项,选择”Install or upgrade an existing system”,等待一系列检查,
  2. 有一个”Disc found”,检测光盘是否完整,一般没用,我选择跳过了。然后继续等待。
  3. 出现”Welcome to CentOS!”,选择”OK”。
  4. 在”Language Selection”语言选择中,我选择默认的英语”English”。
  5. 在”Keyboard Selection”键盘选择,默认”us”。
  6. “Time Zone Selection”时区选择,我选择”Asia/Shanghai”上海。
  7. 输入root密码。
  8. 选择分区,我将整块硬盘都使用了。然后又是等待,这次等待时间较长。不过它怎么就从网上下载东西呢,果断断网。貌似不结束,重启,唉。 估计得等到连接超时才跳过。
  9. 安装完后,重启计算机,就可以使用root用户登录了。

使用root账户登录成功。

系统默认使用DHCP获得ip,虚拟机中使用的是NAT转换,不支持ipv6,我使用桥接功能,这样我能使用ipv6。

接下来要安装一下ssh服务器功能。

分类: Linux, 网站建设

ISafeRunnable 类定义未找到

在开发swt应用中,使用了TableViewer类,导入了org.eclipse.jface_3.7.0.v20110928-1505.jar类库了,eclipse也不报错了,但是运行是就是报以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/ISafeRunnable
at gui.Table.(ZZZTable.java:23)
at gui.Table.main(ZZZTable.java:91)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.ISafeRunnable

根据给出的提示说org/eclipse/core/runtime/ISafeRunnable未找到,于是就引入了org.eclipse.core.runtime_3.7.0.v20110110.jar包,运行时还是报这个错误。

后来得知,这个错误是由于给类的定义是在org.eclipse.equinox.common_3.6.0.jar,这样运行是不报错了。在http://www.eclipsezone.com/eclipse/forums/m92035942.html说到

The ISafeRunnable interface is located in the equinox plugin (org.eclipse.equinox.common). If you add the SWT library to your project, it should be added to the build path automatically. You can do this by right-clicking your project, choosing Build Path/Add Libraries… and then selecting the SWT Library. Afterwards, your project should contain a new folder, having the same icon as the JRE folder, and containing a couple of jars, including org.eclipse.swt… and org.eclipse.equinox.common.

查看了下ISaftRunnable该类的定义说明

Safe runnables represent blocks of code and associated exception handlers. They are typically used when a plug-in needs to call some untrusted code (e.g., code contributed by another plug-in via an extension). This interface can be used without OSGi running. Clients may implement this interface.

不过我在导入这个类库是在eclipse rpc版中导入的,不知道其他的eclipse有没有这个类库。

分类: Java

探索linux的触摸板和fn键输入事件

因为上一篇文章Ubuntu12.04通过xinput禁用及启用联想笔记本的触摸板,想通过模拟Fn+F8按键输入禁用触摸板的功能,被禁用后的触摸板上的灯会亮,看着比较安心。于是通过查找各种方法模拟键盘输入。

本想通过bash模拟按键输入,没有成功,只找到一个小命令xdotool key Ctrl+F8,但是使用Fn也是不能识别。想通过C语言或者C++来模拟Fn输入,上网搜索英文、中文结果,也没发现,只介绍了其他普通键的模拟,没有更详细的说明Fn的模拟。网上有关Fn的按键模拟都没有结果。无奈。

在搜索中发现Fn不受OS控制,是由硬件实现的,有的笔记本可以通过BIOS的设置Fn和ctrl互换。但我还是继续查找,没有结果。那就先暂时认为Fn是由硬件实现的吧,不能通过软件模拟出来效果。以下是我做的小测试,勉强能说服我吧。以后再讨论Fn的事情。

我们可以查看下Linux系统中的 /dev/input/event事件, 我们先通过xinput查看一下笔记本的键盘,通过xinput list 看出结果

ddd@ddd:~$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ MLK rapoo 1800                            id=11   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ MLK rapoo 1800                            id=10   [slave  keyboard (3)]
    ↳ Lenovo EasyCamera                         id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
    ↳ Ideapad extra buttons                     id=15   [slave  keyboard (3)]

其中”AT Translated Set 2 keyboard“是我的笔记本键盘,查看对应的/dev/input/event是第几个事件。

ddd@ddd:~$ xinput list-props 13
Device 'AT Translated Set 2 keyboard':
    Device Enabled (132):   1
    Coordinate Transformation Matrix (134): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Product ID (249):    1, 1
    Device Node (250):  "/dev/input/event3"

可以看出,我的笔记本的键盘对应的是”/dev/input/event3“。接下来我们就可以通过查看”/dev/input/event3“来看看Linux系统中键盘都有那些数据输入。

sudo hexdump /dev/input/event3

然后就出现等待的状态,我们通过笔记本的键盘敲一下按键,会有9行的数据出来。

0000000 1d34 4fd7 0000 0000 68ae 0002 0000 0000
0000010 0004 0004 001e 0000 1d34 4fd7 0000 0000
0000020 68b4 0002 0000 0000 0001 001e 0001 0000
0000030 1d34 4fd7 0000 0000 68b5 0002 0000 0000
0000040 0000 0000 0000 0000 1d34 4fd7 0000 0000
0000050 57c3 0003 0000 0000 0004 0004 001e 0000
0000060 1d34 4fd7 0000 0000 57c9 0003 0000 0000
0000070 0001 001e 0000 0000 1d34 4fd7 0000 0000
0000080 57c9 0003 0000 0000 0000 0000 0000 0000

说明一下是什么意思吧。 这个在 /linux/input.h中的数据结构中有说明,我们看看具体的数据结构是什么

struct input_event {
         struct timeval time;   //事件发生的时间
         __u16 type;        //事件类类型:按键和移动鼠标就是不同类型
         __u16 code;
         __s32 value;       //事件值:按键a和按键b就对应不同值
};

其中有一行会出现自己敲的字符啊”a”,我在结果中省去了。因为我还有一个USB键盘,我在USB键盘中敲字符,在shell中不会出现16进制的数据,只出现我敲的字符。 通过按下Fn键,可以发现我的shell中不显示16进制数据,也不显示任何字符,空空如也。这可以说明,fn键没有触发Linux输入事件,没有收到Linux的监听。 通过 xinput set-prop ‘AT Translated Set 2 keyboard’ ‘Device Enabled’ 0 禁用笔记本的键盘,发现fn+f8照常能工作,即fn键不再Linux设备监控中。但是直接按Fn没有输入效果。和Fn组合就有效果了。奇怪,这个组合不知道在底层是怎么实现的? 不过在查看具体的头文件/linux/input.h,在618行中看见定义KEY_FN及一些其他组合例如

#define KEY_FN            0x1d0
#define KEY_FN_ESC      0x1d1
#define KEY_FN_F1       0x1d2
#define KEY_FN_F2       0x1d3
#define KEY_FN_F3       0x1d4

,难道可以模拟Fn键,这激发了我继续探索的动力,先留这下次查找一些资料看看。

分类: Linux

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑