Author Archives: csslayer
How to make your application support Input method under Linux
As an Linux application developer, one might not aware that there could be certain effort required to support Input Method (or Input Method Editor, usually referred as IME) under Linux. What is input method and why should I care about … Continue reading
一趟神奇的 Debian 环境变量之旅
更正:startx 进行 unset DBUS_SESSION_BUS_ADDRESS 的行为是来自上游,而不是来自 debian ( https://gitlab.freedesktop.org/xorg/app/xinit/-/issues/9 ),而过去这样做的理由应该主要是让 startx 和已有的 session bus 相互隔离吧,但是在 systemd 的 user session bus 成为主流的现在,这个行为反而会导致问题。arch 只是获得这个修复更早,并不是 debian 自己的 patch 增加的这一行。 这是一件一个月之前的事情,有一个人来到 fcitx 的 telegram 群说他在 debian lxqt 不能在 chromium 下输入。在他贴了一下 chromium 在终端输出的结果之后,事情开始变得奇怪了起来。 $ [12752:12787:1013/110502.625383:ERROR:bus.cc(399)] Failed … Continue reading
Get event order right (Try 2!)
TL;DR: this is not considered as a user facing change. In a previous post, we discussed the issue between the input method event order and the blocking dbus call. To put it simple, input method may generate multiple different outcomes … Continue reading
Redmi AirDots 3 Pro 原神版体验兼我的十年耳机史
本来想要标题写个「评测」但是想了想,觉得自己完全不是那种能认真客观评价这种产品的。耳机从来我要求也就是听个响。而买这款的主要原因当然也是觉得这次联动做的特别有诚意想要收藏。 所以最多也就是横向对比一下用过的其他耳机了。 老实说,这几年买过的蓝牙耳机加起来可能有8个了,算上非蓝牙可能一共得有十几个,与其说这次是评价这款耳机,倒不如说是某种对我不断尝试蓝牙耳机的总结。 首先,我对音质是真的没有要求,通俗的说就是听个响。这么多耳机音质方面我其实分不出什么高下。真要说的话,我看中的大概最重要的是舒适度。 把时间倒回10年前,从10人民币级耳机毕业的第一款……是 Panasonic RP-HTX7,纯粹是因为看了《花开伊吕波》之后觉得这个耳机颜值很好才买的。当然因为是头一次买上百元级别的,至少是真的发现音质不一样了。唯一的问题是我太能造耳机了,侧躺着也经常强行带着,以至于耳罩坏的很快。 当时考虑的是买个入耳式的蓝牙,因为也确实体验到了有线毕竟是不够爽。下一款就是 Avantree Sacool Bluetooth 这个蓝牙耳机。牌子自然是没听过的,买来之后总之是觉得不太爽,结果反而入了 Comply 的记忆海绵耳塞的坑。而我这个人老实说,耳油是特别重的,以至于 Comply 的消耗速度在我这实在是太快。所以又打起了要不要试试骨传导的想法。 AfterShokz TREKZ Titanium 然后就尝试了骨传导。总之下场是这个被我最后造坏了……另外舒适度来说,实在也没有达到预期。贴在后脸上的位置总之是感觉也怪怪的。 之后又尝试了另一个 Bose Soundsport ,也试了用别的耳塞,总之是怎么戴怎么不得劲。然后我觉得我可能不适合戴入耳式的耳机,想起HTX 7是覆耳式的,于是又鬼迷心窍去买了有线的 AKG Q 701 。AKG Q 701 可能是这么多耳机里我最后悔的一个了。因为 TM 这玩意它压脑袋,戴上之后头顶会很痛。我尝试了许久各种姿势乃至自己用尼龙扣强行让某些地方减轻用力都没有得到什么效果。 之后又听说了主动降噪……我是真的听一个什么新玩意就想要试试…这次学乖了,买了个二手的 Sony MDRNC500D。效果来说是还不错,舒适度也可以,然而最后连接杆被我造坏了…… 然后就进入到正题,也就是我还在用的几个耳机。首先是 Bose QuietComfort … Continue reading
libime 原理介绍(二)
之前第一篇主要介绍了关于 beam search 和输入切分相关的内容,以及提供的一些基础数据结构。接下来主要着重补全介绍上次没有提及的 UserLanguageModel 和 HistoryBigram 的实现细节。 声明,本文需要的很多前置知识都可以在大学本科的自然语言处理类课程找到,关键词「统计语言模型」,「N-gram」。概括的说,N-gram模型是对现实语言的不精确概括,它不关心语法,只关心词与词之间出现的频率,尽管不精确,但对于输入法,机器翻译,语音识别等等领域都有不错的效果。 首先上一篇当中提到了我们的输入法的算法核心是 N-gram 和 beam search。一般对采用这种算法的输入法来说,N会取 3 或者 2。可以取得效果和内存占用的平衡。这里姑且来说我们也继承了一部分 Sunpinyin 的精神,因为最初最初的数据就是采用 Sunpinyin 使用的 Open-Gram。当然这里顺便一提,在最新的版本我们重新用全新的数据训练了语言模型。但依然采用了和 Sunpinyin 一样的 Trigram。 HistoryBigram,顾名思义,是一个存储用户输入的 Bigram。它干的事情其实非常之简单,就是把用户的输入的句子根据词一条一条的储存起来。而在内存中,它被存储在 DATrie 中。你也许想问一个问题,就是 DATrie 抽象起来看,可以被看作一个字符串到 4 byte 数据的映射,那么它究竟是怎么存储 Bigarm 这样有两个级别的 Key 的映射表呢? 答案其实很简单,就是你把 Key … Continue reading