星期二, 四月 21, 2009

Freebsd 上Glassfish不能启动的问题

装好Openjdk6和Glassfish之后,启动出错,提示是rmi的URL不能绑定。
解决方法:
查看自己的机器名能不能解析到自己的IP地址。不能就在/etc/hosts里加上。
看来glassfish想绑定到机器名解析出来的ip地址上。

星期二, 三月 31, 2009

mylyn连接trac乱码问题解决

eclipse 3.3 + mylyn 3.1.0.v20090315连接trac 0.11.3。
连接方式为xmlrpc。

发现提交的内容里带汉字时就失败了。检查发现,汉字用的是XML转义方式发送的。
正常情况下应该是用UTF-8编码发送。python端不能解析这个问题。
通过跟踪发现,问题出在ws-common-utils这个jar里的,CharsetXmlWriter。
从apache下载最新的ws-common-utils,单独吧这个class文件取出来,重新打包到eclipse的plugins目录下的相应jar包里,问题解决。

星期五, 三月 27, 2009

结合MGtalk和JXA

好久不用MGtalk了,发现MGtalk已经连不上Gtalk服务器了。
找到MGtalk的网站,发现好久不更新了,下载了MGtalk的代码想自己修改,可是看XmlNode的处理代码比较费劲。所以想不如整个换掉。

找来找去,找到了Jxa的代码,把MGtalk的XMPP处理部分换成了Jxa,添加X-GOOGLE-TOKEN认证支持,添加Google的SharedStatus支持。在WTK上调试都通过了。

装到我的NOKIA 6030上发现,SSL连接的时候出错。调查发现,talk.google.com:5223是geotrust发的数字证书,我的Nokia 6030不认识geotrust的根证书,没办法,只能不用SSL连接。

项目地址 http://code.google.com/p/m-im/
估计我不会有太多的时间维护这个项目。

星期日, 十二月 07, 2008

升级Freenas固件

FreeNAS到0.69b4之后img的大小变了,不能直接从0.686升级了。
查看升级的代码,system_firmware.php,发现升级调用的是/etc/rc.firmware文件,
检查rc.firmware里定义的内存盘是30M大小,随把它改为50M,从Web页面升级成功。

星期一, 十一月 24, 2008

由家校通想到

我早已不是学生,目前也尚不是家长,我也不是老师。家校通本来与我无关,但是,当我听到家校通这个系统是,它还是触动了我的一些思考,从名字可以看出,他考虑的是家与校,而教学的焦点是什么?是学生,整个系统不是为学生而生。

从系统的功能描述来看,怎么都像是一个监控系统,是否会对被监控的对象产生心理阴影。
也许有人会说这个一个家校联合的信息化网络,对学生提供无微不至的关怀。即使这样也不对,关怀太多对学生的独立性没有好处。

学生的隐私保护问题。学生有权保留自己的秘密,哪些问题应该在家校之间沟通,哪些不应该。谁来规定这个度,谁又来保证。

连家庭作业这种事都通过短信传输?!,是学生记不得有什么作业?作业本来就是学生的是,这会不会在潜意识里是学生认为作业时家长的事。

还有明天带什么这种事,这些都对学生的独立能力没有好处。

公布学生成绩排名没有任何意义,应该是打印学生的成绩分析情况,学生的偏科状况呀,同以前相比的变化情况,这些才对家长有意义,单独一个排名,或者是分数有什么用,况且很多都是群发,我人么把一个学生的成绩泄露给其他家长是不对的,成绩应该成为学生的隐私,只有自己的任课老师,班主任,家长才能知道。

记得小时候开家长会没有学生的事,老师和家长说了什么都不知道。当然回去后家长会告诉我们一些。这也说明历来,学生没有被大人公平对待。什么时候家长会变成三方会谈。学生,家长,老师一起谈。

我对家校通这种东西不看好。我希望我能通过自己的孩子来了解他在学校里过的怎样,学习怎样,以及他有什么想法。而不是短信。

星期五, 十一月 14, 2008

Emacs-CVS的Win32版本输入太快丢失汉字

前天下载了最新的Source编译了一下Emacs-CVS发现Windows输入法部分的处理现在已经是接收的UNICODE的字符了,处理方法是对WM_IME_CHAR这个消息进行处理。不过在Emacs里用了一个标志ignore_ime_char来判断是否处理后续的WM_IME_CHAR消息。因为Windows默认的是为每个字符都生成一个WM_IME_CHAR消息,这个消息如果没有被程序处理,转入默认处理程序,就会变成两个WM_CHAR消息,分开传高字节和低字节。Emacs-CVS的WM_IME_CHAR的事件里调用了ImmGetCompositionString把整个输入都取出来了,所以必须要这个标志来跳过后续的WM_IME_CHAR消息。

这个标志在WM_IME_ENDCOMPOSITION消息被收到事回复的。也就是如果输入法没有发这个消息过来,比如我用日文输入法是,自动上词的时候就没有这个消息,所以标志没恢复,只要一直是自动上词就一直输入不了。

另一个问题是,光标跟随无法工作。
由于以前修改过Emacs的输入法部分,所以对Win32输入法的部分还是有点了解的。
所以对Emacs的输入法部分做了些修改再编译。改成监听WM_IME_COMPOSITION消息。
另外添加了光标跟随。
如果要完美的话,还应该添加字体设置,把光标处的字体信息传给输入法。这个以后有空再做吧。


Index: src/w32fns.c
===================================================================
RCS file: /sources/emacs/emacs/src/w32fns.c,v
retrieving revision 1.349
diff -U 3 -r1.349 w32fns.c
--- src/w32fns.c 30 Oct 2008 01:27:07 -0000 1.349
+++ src/w32fns.c 14 Nov 2008 01:40:32 -0000
@@ -255,6 +255,9 @@
typedef HMONITOR (WINAPI * MonitorFromPoint_Proc) (IN POINT pt, IN DWORD flags);
typedef BOOL (WINAPI * GetMonitorInfo_Proc)
(IN HMONITOR monitor, OUT struct MONITOR_INFO* info);
+typedef HWND (WINAPI * ImmReleaseContext_Proc) (IN HWND hWnd, IN HIMC himc);
+typedef HWND (WINAPI * ImmSetCompositionWindow_Proc)
+ (IN HIMC himc, IN LPCOMPOSITIONFORM compform);

TrackMouseEvent_Proc track_mouse_event_fn = NULL;
ClipboardSequence_Proc clipboard_sequence_fn = NULL;
@@ -262,11 +265,11 @@
ImmGetContext_Proc get_ime_context_fn = NULL;
MonitorFromPoint_Proc monitor_from_point_fn = NULL;
GetMonitorInfo_Proc get_monitor_info_fn = NULL;
+ImmReleaseContext_Proc release_ime_context_fn = NULL;
+ImmSetCompositionWindow_Proc set_ime_composition_window_fn = NULL;

extern AppendMenuW_Proc unicode_append_menu;

-/* Flag to selectively ignore WM_IME_CHAR messages. */
-static int ignore_ime_char = 0;

/* W95 mousewheel handler */
unsigned int msh_mousewheel = 0;
@@ -3134,15 +3601,14 @@
}
break;

- case WM_IME_CHAR:
+ case WM_IME_COMPOSITION:
/* If we can't get the IME result as unicode, use default processing,
which will at least allow characters decodable in the system locale
get through. */
if (!get_composition_string_fn)
goto dflt;
-
- else if (!ignore_ime_char)
- {
+ if (lParam & GCS_RESULTSTR)
+ {
wchar_t * buffer;
int size, i;
W32Msg wmsg;
@@ -3159,14 +3625,47 @@
my_post_msg (&wmsg, hwnd, WM_UNICHAR, (WPARAM) buffer[i],
lParam);
}
- /* We output the whole string above, so ignore following ones
- until we are notified of the end of composition. */
- ignore_ime_char = 1;
+ release_ime_context_fn (hwnd, context);
}
+ else
+ {
+ goto dflt;
+ }
break;
-
+ case WM_IME_STARTCOMPOSITION:
+ if (!set_ime_composition_window_fn)
+ goto dflt;
+ HIMC context = get_ime_context_fn (hwnd);
+ if (!context)
+ {
+ break;
+ }
+ f = x_window_to_frame (dpyinfo, hwnd);
+ COMPOSITIONFORM compform;
+ struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
+ compform.dwStyle = CFS_RECT;
+ compform.ptCurrentPos.x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
+
+ compform.ptCurrentPos.y = WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y);
+
+ compform.rcArea.left = (WINDOW_BOX_LEFT_EDGE_X (w)
+ + WINDOW_LEFT_MARGIN_WIDTH (w)
+ + WINDOW_LEFT_FRINGE_WIDTH (w));
+
+ compform.rcArea.top = (WINDOW_TOP_EDGE_Y (w)
+ + WINDOW_HEADER_LINE_HEIGHT (w));
+
+ compform.rcArea.right = (WINDOW_BOX_RIGHT_EDGE_X (w)
+ - WINDOW_RIGHT_MARGIN_WIDTH (w)
+ - WINDOW_RIGHT_FRINGE_WIDTH (w));
+
+ compform.rcArea.bottom = (WINDOW_BOTTOM_EDGE_Y (w)
+ - WINDOW_MODE_LINE_HEIGHT (w));
+ set_ime_composition_window_fn(context, &compform);
+ release_ime_context_fn (hwnd, context);
+
+ break;
case WM_IME_ENDCOMPOSITION:
- ignore_ime_char = 0;
goto dflt;

/* Simulate middle mouse button events when left and right buttons
@@ -7258,6 +7842,10 @@
GetProcAddress (imm32_lib, "ImmGetCompositionStringW");
get_ime_context_fn = (ImmGetContext_Proc)
GetProcAddress (imm32_lib, "ImmGetContext");
+ release_ime_context_fn = (ImmReleaseContext_Proc)
+ GetProcAddress (imm32_lib, "ImmReleaseContext");
+ set_ime_composition_window_fn = (ImmSetCompositionWindow_Proc)
+ GetProcAddress (imm32_lib, "ImmSetCompositionWindow");
}
DEFVAR_INT ("w32-ansi-code-page",
&w32_ansi_code_page,
Index: src/w32term.c
===================================================================
RCS file: /sources/emacs/emacs/src/w32term.c,v
retrieving revision 1.308
diff -U 3 -r1.308 w32term.c
--- src/w32term.c 27 Oct 2008 22:20:27 -0000 1.308
+++ src/w32term.c 14 Nov 2008 01:43:34 -0000
@@ -33,6 +33,7 @@
#include
#include
#include
+#include

#include "charset.h"
#include "character.h"
@@ -5059,7 +5060,11 @@
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
HWND hwnd = FRAME_W32_WINDOW (f);
-
+ if (f == FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame)
+ {
+ PostMessage (hwnd,
+ WM_IME_STARTCOMPOSITION, 0, 0);
+ }
w32_system_caret_x
= WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
w32_system_caret_y




星期五, 十月 31, 2008

玩数独

最近几天玩数独游戏。发现在电脑上玩还是不方便。
难怪很多日本人都是买的数独的书在电车上玩。
为了自己玩方便,最近写了一个小程序,利用SudokuExplainer
生成数独。再用iText打印成PDF来玩。

这个程序放在GoogleCode上。
http://code.google.com/p/sudoku-pdf

截图