やるきなし

2019/12/11 21:32 / MHonArc+Namazu での Namazu の UTF-8 対応

ひさしぶりに MHonArc (2.6.19-2) と Namazu (2.0.21-22) をつかってメール検索システム構築(対象はFMLで送られてきたメール).いろいろ嵌ったのでメモ.

MHonArc が生成する HTML を X-Mail-Count の値(整数)にしたい

mhonarcの出力ファイル名の数字を特定のフィールドから決める場当たり的改造」で紹介されているパッチをあてる.mhonarc 実行時に mhonarc -seqnumfield x-mail-count というオプションをつける.以下念の為の 2.6.19 向け版パッチ.

diff --git a/perl/mhamain.pl b/perl/mhamain.pl
index 7af1fcc..eefca45 100644
--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -771,7 +771,7 @@ sub write_mail {
 sub read_mail_header {
     my $handle = shift;
     my($date, $tmp, $i, $field, $value);
-    my($from, $sub, $msgid, $ctype);
+    my($from, $sub, $msgid, $ctype, $seq);
     local($_);
 
     my $index  = undef;
@@ -927,6 +927,14 @@ sub read_mail_header {
     }
     @refs = remove_dups(\@refs);        # Remove duplicate msg-ids
 
+    ##------------------##
+    ## Get seq number   ##
+    ##------------------##
+    if (defined($SEQNUMFIELD)) {
+        $seq = $fields->{$SEQNUMFIELD}[0];
+        $seq =~ s/(\d+)/$1/;
+        print STDOUT "($seq)";
+    }
     ##------------------##
     ## Get Content-Type ##
     ##------------------##
@@ -941,6 +949,10 @@ sub read_mail_header {
     my $t = $index;
     $index .= $X . sprintf('%d',(defined($msgnum)?$msgnum:($LastMsgNum+1)));
 
+    if (defined($SEQNUMFIELD)) {
+        $IndexNum{$index} = $seq;
+    }
+
     ## Set mhonarc fields.  Note how values are NOT arrays.
     $fields->{'x-mha-index'} = $index;
     $fields->{'x-mha-message-id'} = $msgid;
@@ -970,7 +982,11 @@ sub read_mail_header {
    $IndexNum{$index} = $msgnum;
    ++$NumOfMsgs; # Counteract decrement by delmsg
     } else {
-   $IndexNum{$index} = getNewMsgNum();
+   if(defined $SEQNUMFIELD) {
+       &getNewMsgNum();
+   }else{
+       $IndexNum{$index} = getNewMsgNum();
+   }
     }
 
     $Refs{$index} = [ @refs ]  if (@refs);
diff --git a/perl/mhopt.pl b/perl/mhopt.pl
index 939109b..587ccab 100644
--- a/perl/mhopt.pl
+++ b/perl/mhopt.pl
@@ -221,7 +221,8 @@ sub get_resources {
    'readdb',   # Just read db
 
    'v',        # Version information
-   'help'      # A brief usage message
+   'help',     # A brief usage message
+   'seqnumfield=s',    # Sequence number field name
     );
 
     ## Check for help/version options (nothing to do)
@@ -576,6 +577,8 @@ sub get_resources {
 
     $IdxPageNum  = $opt{'pagenum'}   if defined($opt{'pagenum'});
 
+    $SEQNUMFIELD = $opt{'seqnumfield'}   if defined($opt{'seqnumfield'});
+
     $AttachmentDir = $opt{'attachmentdir'}  if defined($opt{'attachmentdir'});
     $AttachmentUrl = $opt{'attachmenturl'}  if defined($opt{'attachmenturl'});
 

MHonArc が抽出する添付ファイルのファイル名を MD5SUM 由来のものにしたい

Default だとランダムな文字列(しかも実行する度に異なる)ファイル名になる.

ということもあって MD5SUM 由来のものにする.以下パッチ.やるきなしなのでオプション切り替え不能なパッチ.ファイルが存在する場合は上書きしないことにしてある.

diff --git a/perl/mhmimetypes.pl b/perl/mhmimetypes.pl
index deb806b..c723ead 100644
--- a/perl/mhmimetypes.pl
+++ b/perl/mhmimetypes.pl
@@ -28,6 +28,7 @@
 package mhonarc;
 
 use File::Basename;
+use Digest::MD5 qw(md5_hex);
 
 $UnknownExt     = 'bin';
 
@@ -336,26 +337,27 @@ sub write_attachment {
    $fname =~ tr/\0-\40\t\n\r?:\57\134*"'<>|\177-\377/_/;
     }
 
-    ## Write to random file first
-    my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
-    binmode($fh);
-    print $fh $$sref;
-    close($fh);
-
-    ## Set pathname for file
+    my $target;
     if ($fname) {
-   # need to rename to desired filename
-   $pathname .= $DIRSEP . $fname;
-   if (!rename($tmpfile, $pathname)) {
-       die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
-   }
+        $target = $pathname . $DIRSEP . $fname;
     } else {
-   # just use random filename
-   $pathname = $tmpfile;
-   $fname    = basename($tmpfile);
+        my $md5 = md5_hex($$sref);
+        $fname = $md5.".".$ext;
+        $target = $pathname . $DIRSEP . $fname;
+    }
+    if(! -e $target) {
+        ## Write to random file first
+        my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
+        $pathname = $target;
+        binmode($fh);
+        print $fh $$sref;
+        close($fh);
+        if (!rename($tmpfile, $pathname)) {
+            die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
+        }
+        file_chmod($pathname);
     }
     $url .= '/' if ($url); $url .= urlize_file_path($fname);
-    file_chmod($pathname);
 
     if ($rel_outdir) {
    $pathname  = $path;

なお m2h_external::filterusename argument (添付ファイル名をそのまま用いる,ただし日本語は_に変換される)は活かしておく.誰も使わないだろうけど.usename を使う場合はrcfileに以下を書いておく(See https://www.mhonarc.org/MHonArc/doc/resources/mimeargs.html).

<MIMEArgs>
m2h_external::filter; usename
</MIMEArgs>

Namazu で PDF が検索対象にならない (pdftotext オプション問題)

PDF ファイルは pdftotext で一旦テキストに変換されてインデックスされるが,日本語環境(LANG=ja_JP mknmz . -O indexとか)だと Unable to convert pdf file (maybe copying protection) と怒られてインデックスされない.これ,Namazu の内部処理文字コードの EUC-JP に変換しようとして pdftotext のオプションの箇所でコケている(copy protection が原因ではない).

手元のpdftotextは version 0.71.0 (poppler)なのだが,mknmz はなぜか pdftotext -eucjp で EUC-JP 出力をしようとする(古いやり方).これをpdftotext -enc EUC-JPに変更する.以下パッチやるきなしなし.どこでバージョンのカウントを間違えたのだろうか?...

diff --git a/perl/pdf.pl b/perl/pdf.pl
index 5d63763..2d12946 100644
--- a/perl/pdf.pl
+++ b/perl/pdf.pl
@@ -61,12 +61,13 @@ sub status() {
         if (util::islang("ja")) {
             if ($pdfconvver >= 1.00) {
                 @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
             } else {
                 @pdfconvopts = ('-q', '-raw', '-eucjp');
             }
+        @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
         } else {
             @pdfconvopts = ('-q', '-raw');
         }
         if (defined $pdfinfopath) {
             my @cmd = ("$pdfinfopath");
             my $result = "";

Namazu でエクセルファイルが検索対象にならない

というかxlhtmlって今手に入るの? 問題.xlhtmlでHTMLに変換してそれをインデックスすることになっている.

python-excelerator付属のpy_xls2htmlで代用する.PATHの通っているところにxlhtmlとしてシンボリックリンクを作る(これだけでOK).

MHonArc で日本語をそれなりに...

Default だと UTF-8 ではなく数値文字参照(&#xXXXX;とか)を大量に含む HTML になって極めて感じ悪い.http://www.mhonarc.jp/MHonArc の日本語化 (for v2.6.x)を行う.具体的には以下をrcfileに書いておく.

<Include>
/usr/share/doc/mhonarc/examples/utf-8-encode.mrc
</Include>

<DefCharset>
iso-2022-jp
</DefCharset>

<DecodeHeads>

MHonArc のインデックスファイルと Namazu の連携で文字化け

<IdxPgBegin> に Namazu の form を置いておくと便利かと思ったら,Namazuに適切にクエリが渡らない.これは MHonArc が UTF-8 で Namazu が EUC-JP だから.今どき EUC-JP て...

対策は以下のように別 script (ラッパー)でクエリを一旦受け取り,それを EUC-JP に変換して namazu を呼び出すというもの.

perl で書かれているものは手元では動かず,http://www.ne.jp/asahi/music/marinkyo/namazu/utf8.html.ja の下の方にある ruby 版を利用することにした (真ん中あたりに書いてある iconv 版は,今どきのruby には iconv が付属しないので注意...String#encodeを使うことになる).ほぼ同じだが以下私版.

#!/usr/bin/env ruby

require 'cgi'

cgi = CGI.new
query_str = ""

cgi.params.each{|key, values|
    values.each{|a_value|
        query_str += key + "=" + CGI.escape(a_value.encode("EUC-JP")) + ";"
    }
}
print "Location: https://myn.example.com/namazu/?"+query_str+"\n\n"

MHonArc でインクリメンタルにファイルを追加できない

MHonArc では -add オプションにより,追加されたファイルのみ処理するモードがある.ただし以下でコケる.

% mhonarc -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add
This is MHonArc v2.6.19+, Perl 5.028001 linux
Reading database ...

Can't locate output/.mhonarc.db in @INC (@INC contains: lib /usr/share/mhonarc /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/mhonarc/mhopt.pl line 401.

もうやるきなしなので,以下で @INC. を追加して MHonArc 実行.

% perl -I. `which mhonarc` -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add

2019/11/25 14:45 / nvidia-kernel-dkms 418.74-1 with Linux 5.4

以下の nvidia のドライバが Linux 5.4 でコンパイルできない話.

まず以下のエラー.

The Module.symvers file is missing, or does not contain any
symbols exported from the kernel. This could cause the NVIDIA
kernel modules to be built against a configuration that does
not accurately reflect the actual target kernel.
The Module.symvers file check can be disabled by setting the
environment variable IGNORE_MISSING_MODULE_SYMVERS to 1.

これは modpost: add support for symbol namespacesModule.symvers に1つエントリ(namespace)が追加されたことによる.conftest.shModule.symvers の symbol をチェックするがその箇所はただの grep なので影響なし.IGNORE_MISSING_MODULE_SYMVERS=1 にしても問題ないが conftest.sh を修正する.

次,以下のエラー.

In file included from /var/lib/dkms/nvidia-current/418.74/build/nvidia/nv.c:14:
/var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:1852:6: error: "NV_BUILD_MODULE_INSTANCES" is not defined, evaluates to 0 [-Werror=undef]
 #if (NV_BUILD_MODULE_INSTANCES != 0)
      ^~~~~~~~~~~~~~~~~~~~~~~~~

これ,なに由来のエラーか不明.NV_BUILD_MODULE_INSTANCES = 0 で問題ないはずなので,Kbuild ファイルで define してしまう.

次,以下のエラー.

/var/lib/dkms/nvidia-current/418.74/build/nvidia-drm/nvidia-drm-drv.c:657:44: error: ‘DRIVER_PRIME’ undeclared here (not in a function); did you mean ‘DRIVER_PCI_DMA’?
     .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
                                            ^~~~~~~~~~~~
                                            DRIVER_PCI_DMA

これは drm/prime: Actually remove DRIVER_PRIME everywhereDRIVER_PRIMEが削除されたことによる.削除する.

次,以下のエラー.

/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c: In function ‘nv_drm_gem_prime_export’:
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:33: error: passing argument 1 of ‘drm_gem_prime_export’ from incomp
atible pointer type [-Werror=incompatible-pointer-types]
     return drm_gem_prime_export(dev, gem, flags);
                                 ^~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘struct drm_gem_object *’ but argument is of type ‘struct drm_device *’
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:38: warning: passing argument 2 of ‘drm_gem_prime_export’ makes int
eger from pointer without a cast [-Wint-conversion]
     return drm_gem_prime_export(dev, gem, flags);
                                      ^~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘int’ but argument is of type ‘struct drm_gem_object *’
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:12: error: too many arguments to function ‘drm_gem_prime_export’
     return drm_gem_prime_export(dev, gem, flags);
            ^~~~~~~~~~~~~~~~~~~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: declared here
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~

これdrm/prime: Align gem_prime_export with obj_funcs.exportによりdrm_gem_prime_exportの引数が変更になった(3つの引数のうち1つ目が削除された)ことが原因.

以下まとめてパッチ.ただし5.3でコンパイルするためのパッチがあたっていることを想定.

nvidia-kernel-dkms 418.74-1

diff --git a/Kbuild b/Kbuild
index 6a65185..ff3417c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -62,6 +62,7 @@ EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-
 EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"418.74\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE
 EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
 EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
 
 #
 # Detect SGI UV systems and apply system-specific optimizations.
diff --git a/conftest.sh b/conftest.sh
index d17ba21..087fda5 100644
--- a/conftest.sh
+++ b/conftest.sh
@@ -3708,7 +3708,7 @@ case "$6" in
         TAB='  '
 
         if [ -f "$OUTPUT/Module.symvers" ] && \
-             grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
+             grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
                      "$OUTPUT/Module.symvers" >/dev/null 2>&1; then
             exit 0
         fi
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 6ec01f4..18cf167 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -654,7 +654,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 
 static struct drm_driver nv_drm_driver = {
 
-    .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+    .driver_features        = DRIVER_GEM | DRIVER_RENDER,
 
     .gem_free_object        = nv_drm_gem_free,

nvidia-legacy-390xx-kernel-dkms 390.116-1

diff --git a/Kbuild b/Kbuild
index 0665f50..992a48c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -61,6 +61,7 @@ EXTRA_CFLAGS += -I$(src)
 EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wsign-compare -Wno-cast-qual -Wno-error
 EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.116\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args
 EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
 
 #
 # Detect SGI UV systems and apply system-specific optimizations.
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 90ce30b..d9f3961 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -634,7 +634,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 
 static struct drm_driver nv_drm_driver = {
 
-    .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+    .driver_features        = DRIVER_GEM | DRIVER_RENDER,
 
     .gem_free_object        = nv_drm_gem_free,
 
diff --git a/nvidia-drm/nvidia-drm-gem.c b/nvidia-drm/nvidia-drm-gem.c
index 3d51196..addff14 100644
--- a/nvidia-drm/nvidia-drm-gem.c
+++ b/nvidia-drm/nvidia-drm-gem.c
@@ -46,10 +46,9 @@ void nv_drm_gem_free(struct drm_gem_object *gem)
 
     nv_gem->ops->free(nv_gem);
 }
-
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
-                                        struct drm_gem_object *gem, int flags)
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags)
 {
+    struct drm_device *dev = gem->dev;
     struct nv_drm_device *nv_dev = to_nv_device(dev);
 
     struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
@@ -61,7 +60,7 @@ struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
         return ERR_PTR(-EINVAL);
     }
 
-    return drm_gem_prime_export(dev, gem, flags);
+    return drm_gem_prime_export(gem, flags);
 }
 
 struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
diff --git a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h
index c3cb875..c4da335 100644
--- a/nvidia-drm/nvidia-drm-gem.h
+++ b/nvidia-drm/nvidia-drm-gem.h
@@ -156,8 +156,7 @@ done:
 
 void nv_drm_gem_free(struct drm_gem_object *gem);
 
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
-                                        struct drm_gem_object *gem, int flags);
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags);
 
 static inline struct nv_drm_gem_object *nv_drm_gem_object_lookup(
     struct drm_device *dev,

Related articles

2019/11/04 15:59 / VcXsrv での「半角/全角 漢字」キーのキーリピートがおかしい

薄々気づいていたのだが,手元の Debian on WSL with VcXsrv で 「半角/全角 漢字」キーのキーリピートがおかしい.日本語キーボードを無理やり英語キーボードとしてつかっているため,「半角/全角 漢字」キーは ` (Shiftで ~ )に割り当てられるのだが,一度押すだけで,位置文字 ` が入力された後に連続で ` が入力される.` を打ったあとに間髪入れずに他のキーを押すと問題ない...

これ,X の設定で解決できて,手元の環境ではxset -r 49で直る (もとのキーリピートにするにはxset r 49とする.しないけど).49は「半角/全角 漢字」キーのkeycode.xev等で調べられる.

参考:

Related articles

2019/10/26 18:45 / ScanSnap S1500 -> iX1500

ScanSnap S1500 をずっと使っていたのだが,先日 ScanSnap iX1500 を購入.

Windows 10 で ScanSnap S1500 (USB接続のみ)を使う場合,何故か PC Hibernate/Resume 後に ScanSnap Manager (ドライバに近いところのソフトで,S1500 で取り込みボタンを押すと,プロファイルに従ってスキャン開始し,適切なソフトに取り込んだデータを送ってくれる) が ScanSnap S1500 を認識してくれない状態になってしまう (Device Manager で見た感じ ScanSnap S1500 自体は Windows 10 に認識はされている).仕方なく S1500 を使う時は再起動していた...

で,iX1500 だが,管理ソフトは Windows/Android 両方ある.

ScanSnap Cloud は iX1500 から直接 Google Drive 等に送るような使い方が想定されている様子(一旦設定してしまうと iX1500 単体でクラウドにデータを送ることができるようになる).ScanSnap Home は S1500 での ScanSnap Organizer のような位置づけで,スキャンした PDF を管理できるソフト (スキャン開始は PC からでも iX1500 のパネルからでも,どちらからでも可能).ScanSnap Home でもクラウドにデータが送れるが,これは一旦 PC に保存して,それを Google Download Backup and Sync 等の同期機能で Google Drive に送る感じ.

Could との連携やライセンスのこともあって,ScanSnap Account を作らされるが,これ,私の Android (英語で使用)だと国が United States になってしまい,Windows 10 (こちらも英語で利用)は Japan (日本)になってしまう.かつ,それらのアカウントは別扱いになっている様子で,かなり悩んだ...(オンラインゲームで使うサーバ毎にアカウントが別みたいな...)

あと,英語インタフェースで使っているのだが,説明書もそうだが,日本語版がオリジナルのようで,英単語のチョイスが極めて悪く,使い勝手が非常に悪い(それの逆の理由でOSは英語で使っている).

以下,ScanSnap Home メモ.

ということで,基本はクラウドに送る感じで利用予定.

追記 (2019/10/28)

書き忘れたが,当然 ScanSnap S1500 に比べて iX1500 の方が読み取り速度が早く,かつ OCR については,以前は Organizer に取り込んで OCR を待つ感じだったが,クラウドに送るともうその時点で OCR がかかっている.

追記 (2019/11/12)

ScanSnap Home で名刺を取り込むと OS が英語モードだと日本語のOCRをしてくれない...

2019/10/23 19:22 / Twitter ユーザー名変更

Twitter はユーザー名(@以降の部分)変更が容易に可能ということを知る.Webではログインした状態で,以下のように辿ると変更可能.

表示名は以下のように Edit profile から変更.

なお,ユーザー名を変更すると変更前のリンク https://twitter.com/username は無効になって,かつ @username のメンションもリンクされなくなる.

というのは,ちょっと中の人を担当していたアカウントのユーザー名変更をすることがあったのだが,いろいろ怖いので,ユーザー名を変更したあとに,古いユーザー名で再度ユーザー登録し,新ユーザー名への誘導 Tweet をしておいた(というのが無難な対応っぽい).

ちなみにメールアドレス1つに付きTwitterアカウントは1つしか作成できないので,Gmail のサブアドレス(@gmail.com の @ の前に +example 等任意の文字列追加)を利用する(Postfix では拡張メールアドレスとか address extension と呼ばれるもの,もしくは RFC 5233).