Lys

"Lys!"男子回了下头,没有答应,仍然往山上走。
"Lys,你别往山上走了。"男子小声嘟囔了一句:"我不是Lys。"
"你就是,你知道多少人找你吗?" "我知道有人找我,但是真不该找我。"

FireBoard的登录跳转

最近在一个Joomla上架论坛,用着FireBoard。这个东西有个毛病,就是登录之后跳转到主页,而不是到论坛,看着很不行。
为了解决这个问题,回去看代码。FireBoard那个登录链接在template/default/plugin/profilebox/profilebox.php里面生成的,原来是这样:

$loginlink = sefRelToAbs(‘index.php?option=com_login&Itemid=’ . $Itemid));

我想先把返回地址传过去。于是改成:

$loginlink = sefRelToAbs(‘index.php?option=com_login&Itemid=’ . $Itemid . “&return=” . sefRelToAbs(‘index.php?option=com_fireboard’));

接下来看看/joomla/components/com_login/login.html.php:

$return = $params->get(‘login’);

以及:

<form action=“<?php echo sefRelToAbs( ‘index.php?option=login’ ); ?>” method=“post” name=“login” id=“login”>

看来是转到index.php进行登录工作。再看看index.php:

  • // frontend login & logout controls
  • $return = strval( mosGetParam( $_POST, ‘return’));
  • $message = intval( mosGetParam( $_POST, ‘message’, 0 ) );
  • if ($option == ‘login’) {
  • $a = $return;
  • $mainframe->login();
  • $return = $a;
  • // JS Popup message
  • ……

  •  
  • if ( $return && !( strpos( $return, ‘com_registration’ ) || strpos( $return, ‘com_login’ ) ) ) {
  • // checks for the presence of a return url
  • // and ensures that this url is not the registration or login pages
  • mosRedirect( $return );
  • } else {
  • mosRedirect( $mosConfig_live_site .‘/index.php’ );
  • }
  •  
  • 看来原来就有跳转的代码。这样就好办了。
    我原来尝试在那个login链接后面加&return=xxx,但是试了一个晚上,一点用都没有。
    后来才发现,貌似是那个$return的变量在起作用。
    最后,修改com_login/login.html.php:
    把原来的$return=xxx改成:

    $return_old = $params->get(‘login’);

  • $return = strval(mosGetParam($_REQUEST, ‘return’, $return_old));
  • 终于,问题解决,FireBoard登录之后,又跳转回FireBoard了~
    其实看原来那个$return=$param->get啥的,应该是有更好的办法的,但是这样也挺通用的,就行了吧……

    协作翻译

    本学期体育课选的板球。某节板球课上,快下课的时候,老师开始向大家布置一个作业:翻译。
    每人发两到三页复印材料,来自于某本板球初学者启蒙的书籍。几周之内,必须完成这些材料的翻译,上交到网络学堂去。
    过了几天,网络学堂上还挂出了一些板球名词的标准翻译,说让大家照着这个翻。

    翻译工作倒是比较轻松,毕竟也就几页,一会儿就能够完成。
    翻完之后我在想,这个不就是协作翻译么。类似于wikipedia的方式,每人贡献一小部分,合起来就是一项成品。
    这个办法倒是不错,比如说看见一本外国教材,没有中文版,然后找上这个课的学生,每人发几页,翻译一下交上来,集中起来就成了翻译版了么。

    但是也有些问题,比如怎么保证翻译质量。估计这些译稿最后还是要人工审核一遍,否则不但文字不统一,错漏之类的应该也不少。
    另一个是版权的事情,别人没有授权,你随便翻译了,就算不谋利也不见得就可以。不过其实这方面学校盗版的事情干得多了。不谈从前那个算法导论中文版,就说我上过一门课,那门课的教材不印了,外面买不到,学校就靠复印解决问题。这个现象应该也很常见吧。

    新的键盘 & usbhidaction

    从同学那边借了一个键盘用,反正他有好几个键盘,这个放在旁边也不用。型号是 Microsoft Natural Ergonomic Keyboard 4000,很大的一个键盘,还是人体工程学设计的。
    装载ukbd和uhid模块,插上键盘,显示出来两个设备: ukbd0 和 uhid0。
    貌似ukbd0马上就被Xorg接受了,插上后按键就能够被Xorg接收到。
    而那个uhid0,貌似就是用来发送特殊键的了。这个键盘上有不少特殊键,比如一对滚轮一样的Zoom键,Back/Forward, 控制音量和播放器的,启动程序的,以及可以自定义的特殊键。
    研究了一下,有两个现成的工具。usbhidctl能够接受并显示 uhid 设备发过来的信息,而 usbhidaction 能够根据预先指定的配置文件,在接收到 uhid 设备的时候,执行对应的程序。
    其实 FreeBSD 自带的 usbhidctl 和 usbhidaction 都有问题,他们对于 Report ID 这个HID设备的参数没有处理好。
    一个HID设备允许其上的各个组件利用同一个接口发送信息,而这些信息就通过 Report ID 区分。在信息格式描述符中提到 Report ID 的设备,在发出来的数据包的前面会多一个字节,就是这个数据包所属部分的Report ID。
    usbhidaction没有处理这个多出来的字节,导致它每次都少收一个字节,然后再收一个一字节的包…… 改了就好了。但是这个修改其实涉及到libusbhid,因此光修改usbhidaction还不行。但是要把这整个需要修改的地方做成patch提交,还要花一些功夫。
    于是我改了一下 usbhidaction 和 usbhidctl,还有libusbhid,临时把 Report ID 指定为1,并且根据描述符的处理结果决定接受的字节数。原来的 usbhidaction 默认的 Report ID 是用一个ioctl获取的,这个令我难以理解…… 不是可以有不止一个么…… 关于这个,我发了封信给freebsd-stable,但是没人回…… 看来还是需要完整的patch才比较容易得到接受。
    顺便贴一下我现在用的 usbhidaction 的配置文件。我改了devd.conf使得插入键盘的时候自动运行之,效果还是不错的。
     1 # Volume Control: Up, Down & Mute
     2 Consumer:Unassigned     233  0   /usr/sbin/mixer vol +3
     3 Consumer:Unassigned     234  0   /usr/sbin/mixer vol -3
     4 Consumer:Unassigned     226  0   /usr/sbin/mixer vol 0
     5 # Pause or Play
     6 Consumer:Unassigned     205  0   /usr/local/bin/mpc toggle &
     7 #                                alt+F11
     8
     9 # Calculator
    10 Consumer:Unassigned     402  0   su henryhu -c “/usr/bin/env DISPLAY=:0 tiemu &”
    11
    12 # Back & Forward
    13 Consumer:Unassigned     548  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key alt+Left”
    14 Consumer:Unassigned     549  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key alt+Right”
    15
    16 # Zoom Up & Down
    17 Consumer:Unassigned     557  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool click 4”
    18 Consumer:Unassigned     558  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool click 5”
    19
    20 # 1 .. 5
    21 Consumer:Consumer_Control.Microsoft:0xff05  1   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+Up”
    22 Consumer:Consumer_Control.Microsoft:0xff05  2   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 1”
    23 Consumer:Consumer_Control.Microsoft:0xff05  4   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 2”
    24 Consumer:Consumer_Control.Microsoft:0xff05  8   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 3”
    25 Consumer:Consumer_Control.Microsoft:0xff05  16  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+Down”
    26
    27 # My Favorites
    28 Consumer:Unassigned     386  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xscreensaver-command -lock”
    29 #/usr/local/bin/sudo -u henryhu /usr/local/bin/xdotool key ctrl+alt+l >& /var/log/xdotool.log
    30
    31 # Web/Home, Search & Mail
    32 Consumer:Unassigned     547  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefix &”
    33 Consumer:Unassigned     545  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefox http://www.google.com &”
    34 Consumer:Unassigned     394  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefox http://www.gmail.com &”
    35