iCal形式の日本の休日を探す

Nectcloud holidays Calendar

最近カレンダーをNextcloudに移行しています.AndroidでもCaldav Sync Free Betaというアプリ経由で同期できています.

問題無さそうかなーと思っていたのですが,日本の休日が無くてちょっと不便です.外部カレンダーの読み込みは出来るのでiCal形式のものがあると良いはずです.

国民の休日は以下にあるのですがiCalは無く,自分で入力するのは面倒です.CSV形式での配布もされているので変換するのもありですが何度か仕様が変わっているのでまた仕様が変わると追従が面倒そうです.

iCal形式で配布されているものがないか探してみました.

yaml形式の世界の休日リポジトリもあった.date-holidays-icalと組み合わせてiCalも作れるよう.いざとなったらこれを使うと良さそう.

Apple謹製

AppleのiCloud向けのものですが,Nextcloudでも読み込めました.

  • webcal://ical.mac.com/ical/Japanese32Holidays.ics

Google謹製

以下はGoogle Calendar向けのものです.これもNextcloudで読み込めました.以前はGoogle Calendarの画面から各種フォーマットのアイコンがあってリンクの入手が簡単だったのですが今は隠されています.そのうち使えなくなるのかも?

余録

日本の休日を探しているときにライブドアのiCal天気というものを見つけました.これも便利そうです.Nextcloudでは数値文字参照はそのまま表示されてしまうようなのでそれ以外を選んだほうがいいです.

Nextcloud環境
$ sudo -u www-data php ./occ --version
Nextcloud 16.0.5
$ sudo -u www-data php ./occ app:list|grep -i calendar
  - calendar: 1.7.1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10

Ubuntu 19.10 (Eoan Ermine)のインストーラにZFSの選択肢が

Ubuntu 19.10のインストーラでZFSを選択できるようになったと見かけて試してみました.

現在BETAのインストーラ( Ubuntu 19.10 (Eoan Ermine) Beta )には未だ入っていなくて,dailyのみのようです.
今回は daily-live 20191011 を利用しました.

イメージを入手して確認
$ wget -c http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/SHA256SUMS \
          http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/SHA256SUMS.gpg \
          http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/eoan-desktop-amd64.iso
$ sha256sum -c SHA256SUMS
eoan-desktop-amd64.iso: OK
$ gpgv --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg ./SHA256SUMS.gpg ./SHA256SUMS
gpgv: Signature made Fri 11 Oct 2019 04:48:37 PM JST
gpgv:                using DSA key 46181433FBB75451
gpgv: Can't check signature: No public key
gpgv: Signature made Fri 11 Oct 2019 04:48:37 PM JST
gpgv:                using RSA key D94AA3F0EFE21092
gpgv: Good signature from "Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>"

インストーラを起動して画面を進めていくと,「インストールの種類」でZFSの選択がありました.
eaon zfs Screenshot ubuntu19.04 2019 10 13 00:55:43

EXPERIMENTAL: Erase disk and use ZFS
Warning: This will delete all your files on all operating systems, This is experimental and ma cause data loss. Do not use on production systems.

仮想マシンのテスト環境なのでZFSを選んで進めます.

eaon zfs 20191013 01:10:48 17155

確認画面のメッセージが ext4 になっていますがそのまま進めるとZFSになったのでメッセージの書き換えがまだされていないのでしょう.

よく見たら vda1 のことでここは /boot/grub に割り当てられていました.

$ mount |grep vda1
/dev/vda1 on /boot/grub type ext4 (rw,relatime,errors=remount-ro)

add)
解りにくからってことでバグとして上がっていました.20.04で修正されそう.

  • Bug #1847719 “zfs “Write to change disks” message prints that an…” : Bugs : ubiquity package : Ubuntu
  • インストールが終了してインストーラからの再起動でフリーズしたようで1時間ほど前っても進まなかったので強制再起動しましたが無事起動しました.

    eaon zfs 20191013 01:10:30 12924

    ファイルシステムもZFSになっています :)
    eaon zfs Screenshot ubuntu19.04 2019 10 13 01:35:03

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu Eoan Ermine (development branch)
    Release:        19.10
    Codename:       eoan
    $ sudo fdisk -l /dev/vda
    Disk /dev/vda: 15 GiB, 16106127360 bytes, 31457280 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xc32b4703
    
    Device     Boot   Start      End  Sectors Size Id Type
    /dev/vda1  *       2048   104447   102400  50M 83 Linux
    /dev/vda2        104448 31457279 31352832  15G  5 Extended
    /dev/vda5        106496  4300799  4194304   2G a5 FreeBSD
    /dev/vda6       4302848 31457279 27154432  13G a5 FreeBSD
    $ zfs list
    NAME                                               USED  AVAIL     REFER  MOUNTPOINT
    bpool                                             65.6M  1.69G      176K  /boot
    bpool/BOOT                                        64.9M  1.69G      176K  none
    bpool/BOOT/ubuntu_qblb6g                          64.7M  1.69G     64.7M  /boot
    rpool                                             3.31G  8.80G       96K  /
    rpool/ROOT                                        2.57G  8.80G       96K  none
    rpool/ROOT/ubuntu_qblb6g                          2.57G  8.80G     2.09G  /
    rpool/ROOT/ubuntu_qblb6g/srv                        96K  8.80G       96K  /srv
    rpool/ROOT/ubuntu_qblb6g/usr                       200K  8.80G       96K  /usr
    rpool/ROOT/ubuntu_qblb6g/usr/local                 104K  8.80G      104K  /usr/local
    rpool/ROOT/ubuntu_qblb6g/var                       486M  8.80G       96K  /var
    rpool/ROOT/ubuntu_qblb6g/var/games                  96K  8.80G       96K  /var/games
    rpool/ROOT/ubuntu_qblb6g/var/lib                   484M  8.80G      378M  /var/lib
    rpool/ROOT/ubuntu_qblb6g/var/lib/AccountServices    96K  8.80G       96K  /var/lib/AccountServices
    rpool/ROOT/ubuntu_qblb6g/var/lib/NetworkManager    136K  8.80G      136K  /var/lib/NetworkManager
    rpool/ROOT/ubuntu_qblb6g/var/lib/apt              75.8M  8.80G     75.8M  /var/lib/apt
    rpool/ROOT/ubuntu_qblb6g/var/lib/dpkg             29.9M  8.80G     29.9M  /var/lib/dpkg
    rpool/ROOT/ubuntu_qblb6g/var/log                  2.07M  8.80G     2.07M  /var/log
    rpool/ROOT/ubuntu_qblb6g/var/mail                   96K  8.80G       96K  /var/mail
    rpool/ROOT/ubuntu_qblb6g/var/snap                  112K  8.80G      112K  /var/snap
    rpool/ROOT/ubuntu_qblb6g/var/spool                 112K  8.80G      112K  /var/spool
    rpool/ROOT/ubuntu_qblb6g/var/www                    96K  8.80G       96K  /var/www
    rpool/USERDATA                                    2.93M  8.80G       96K  /
    rpool/USERDATA/matoken_vyi27f                     2.72M  8.80G     2.72M  /home/matoken
    rpool/USERDATA/root_vyi27f                         112K  8.80G      112K  /root
    rpool/swap                                         758M  9.54G       92K  -
    $ dpkg -l|grep -i zfs
    ii  libzfs2linux                               0.8.1-1ubuntu13                      amd64        OpenZFS filesystem library for Linux
    ii  libzpool2linux                             0.8.1-1ubuntu13                      amd64        OpenZFS pool library for Linux
    ii  zfs-initramfs                              0.8.1-1ubuntu13                      amd64        OpenZFS root filesystem capabilities for Linux - initramfs
    ii  zfs-zed                                    0.8.1-1ubuntu13                      amd64        OpenZFS Event Daemon
    ii  zfsutils-linux                             0.8.1-1ubuntu13                      amd64        command-line tools to manage OpenZFS filesystems

    実機のeaon環境が1つあるのでこれをインストールし直してZFSを試すのもいいかもしれません.でもその環境はRAMが少ないので辛いかな?

    可愛いシステム情報表示ツールのpfetch

    screenfetchやneofetchと同じようなものですが,shell script 1本で動いてロゴが可愛いです.

    $ git clone https://github.com/dylanaraps/pfetch
    $ pfetch/pfetch
      _____      matoken@t430s
     /  __ \     os     Debian GNU/Linux bullseye/sid
    |  /    |    host   23533KJ ThinkPad T430s
    |  \___-     kernel 5.2.0-2-amd64
    -_           uptime 8d 3h 7m
      --_        pkgs   5796
                 memory 13560M / 15924M

    fpetch

    現在のバージョンではロゴはこれだけあるよう.

    $ grep PF_ASCII: pfetch -A999|grep \*\)
            [Aa]lpine*)
            [Aa]ndroid*)
            [Aa]rch*)
            [Aa]rco*)
            [Aa]rtix*)
            [Cc]ent[Oo][Ss]*)
            [Dd]ebian*)
            [Dd]ragon[Ff]ly*)
            [Ee]lementary*)
            [Ff]edora*)
            [Ff]ree[Bb][Ss][Dd]*)
            [Gg]entoo*)
            [Gg]uix[Ss][Dd]*|[Gg]uix*)
            [Hh]aiku*)
            [Hh]yperbola*)
            [Ll]inux*[Ll]ite*|[Ll]ite*)
            [Ll]inux*)
            [Mm]ac[Oo][Ss]*|[Dd]arwin*)
            [Mm]ageia*)
            [Mm]anjaro*)
            [Mm]inix*)
            [Mm][Xx]*)
            [Nn]et[Bb][Ss][Dd]*)
            [Nn]ix[Oo][Ss]*)
            [Oo]pen[Bb][Ss][Dd]*)
            [Oo]penSUSE*|[Oo]pen*SUSE*|SUSE*|suse*)
            [Pp]arabola*)
            [Pp]op!_[Oo][Ss]*)
            [Pp]ure[Oo][Ss]*)
            [Ss]lackware*)
            [Ss]un[Oo][Ss]|[Ss]olaris*)
            [Uu]buntu*)
            [Vv]oid*)
            *)

    環境変数 PF_INFOPF_ASCII で指定したものを表示できるようです.そこでこういうscriptで表示して,

    #!/usr/bin/perl
    use strict;
    use warnings;
    use Time::HiRes 'sleep';
    
    my @LIST=('alpine','android','arch','arco','artix','centos','debian','dragonfly','elementary','fedora','freebsd','gentoo','guixsd','haiku','hyperbola','lite','linux','macos','mageia','manjaro','mint','minix','mx','netbsd','nixos','openbsd','suse','parabola','pop!_os','pureos','slackware','sunos','ubuntu','void');
    
    foreach my $dist ( sort @LIST ){
      my $pfetch = `clear`;
      $pfetch .= "$dist\n";
      $pfetch .= `PF_INFO=ascii PF_ASCII=$dist pfetch`;
      print $pfetch;
      sleep(0.5);
    }
    `PF_INFO=ascii pfetch > /dev/null`;
    print "done\n";

    asciinemaへのアップロード……に失敗したのでttyrecして,ttygifしてみました.

    pfetch logos
    $ ttyrec pfetch.tty # 録画開始
    $ perl pfetch-logo.pl # logo表示
    $ exit  # 録画終了
    $ vi pfetch.tty # テキストエディタで頭と最後のゴミ削除
    $ resize -s 11 25 # terminalを小さくしておく
    $ ttygif -in pfetch.tty # gifに書き出し
    $ WINDOWID=`xdotool getactivewindow` ttygif -in pfetch.tty # `cannot get screenshot` と言われる場合

    元のロゴはこの ufetch の一部が使われているよう.こちらにはRaspbianもありますね.

    ufetch raspbian

    余録:ufetchのロゴを楽しむ
    $ git clone https://gitlab.com/jschx/ufetch
    $ find ./ufetch/ -name "ufetch-*" -executable \! -name "*.png" -print0 | sort -n | xargs -0 -n1 -I{} sh -c "{} 2>/dev/null; sleep 0.5"
    環境
    $ git log -1
    commit 1ff17055b958fb2436bb9810bfba0d97c64390a4 (HEAD -> master, origin/master, origin/HEAD)
    Author: Dylan Araps <dylan.araps@gmail.com>
    Date:   Tue Oct 1 15:09:43 2019 +0300
    
        pfetch: fix bug
    $ ttygif -v # https://github.com/sugyan/ttygif
    0.0.3
    $ ls -l `which sh`
    lrwxrwxrwx 1 root root 4 Jul 19 03:15 /usr/bin/sh -> dash
    $ dpkg-query -W dash perl ttyrec
    dash    0.5.10.2-6
    perl    5.28.1-6
    ttyrec  1.0.8-5+b2
    $ lsb_release -dr
    Description:    Debian GNU/Linux bullseye/sid
    Release:        unstable
    $ uname -m
    x86_64

    localeが足りなくてmcomixが起動しなくなっていた

    mcomix が起動しなくなりました.こないだのエンバグ?と思ったけど

    エラーが違う.

    $ mcomix
    Traceback (most recent call last):
      File "/usr/bin/mcomix", line 11, in <module>
        load_entry_point('mcomix==1.2.1', 'console_scripts', 'mcomix')()
      File "/usr/lib/python2.7/dist-packages/mcomix/run.py", line 127, in run
        i18n.install_gettext()
      File "/usr/lib/python2.7/dist-packages/mcomix/i18n.py", line 71, in install_gettext
        locale.setlocale(locale.LC_ALL, '')
      File "/usr/lib/python2.7/locale.py", line 581, in setlocale
        return _setlocale(category, locale)
    locale.Error: unsupported locale setting

    localeぽいので適当に指定してみると起動.

    $ LC_ALL=C mcomix

    しかし,C だと日本語ファイル名などでエラーとなる.

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/mcomix/file_chooser_base_dialog.py", line 215, in _response
        if os.path.isdir(path):
      File "/usr/lib/python2.7/genericpath.py", line 49, in isdir
        st = os.stat(s)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)

    en_US.UTF-8 だととりあえず利用できるけど,ja_JP.UTF-8 とかで日本語を指定すると……うまく行かない?

    $ export LC_ALL=ja_JP.UTF-8 mcomix
    bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)

    localeを確認するとインストール時に設定していたつもりの ja_JP.UTF-8 がありません.

    $ grep -v ^# /etc/locale.gen |uniq
    
    en_US.UTF-8 UTF-8

    /etc/locale.gen を編集して,ja_JP.UTF-8 のコメントを外して locale-gen コマンドで生成したら動くようになりました.

    $ sudo git diff HEAD~~ /etc/locale.gen
    diff --git a/locale.gen b/locale.gen
    index c432a9a..afb6141 100644
    --- a/locale.gen
    +++ b/locale.gen
    @@ -287,7 +287,7 @@ en_US.UTF-8 UTF-8
     # it_IT@euro ISO-8859-15
     # iu_CA UTF-8
     # ja_JP.EUC-JP EUC-JP
    -# ja_JP.UTF-8 UTF-8
    +ja_JP.UTF-8 UTF-8
     # ka_GE GEORGIAN-PS
     # ka_GE.UTF-8 UTF-8
     # kab_DZ UTF-8
    $ sudo locale-gen
    Generating locales (this might take a while)...
      en_US.UTF-8... done
      ja_JP.UTF-8... done
    Generation complete.
    環境
    $ dpkg-query -W locales mcomix
    locales 2.29-1
    mcomix  1.2.1-1.1
    $ lsb_release -dr
    Description:    Debian GNU/Linux bullseye/sid
    Release:        unstable
    $ uname -m
    x86_64

    略語郎のサンプルテキストをstardict形式に変換してGoldenDictで利用

    過去に購入したことのあるEDPさんが新しいその他書籍を公開しました!

    略語郎 Ver.144(2015年3月20日版)のテキストデータ
    その他書籍 略語郎 Ver.144(2015年3月20日版)のテキストデータ ¥ 150

    EDPの英辞郎はStarDict形式に変換して辞書閲覧ソフトのGoldenDictで利用していおます.
    略語郎も同様に利用できないかとサンプルテキストで試してみました.

    以前英辞郎を変換したときと同じ手順で試しました.

    $ time perl eiji2sd-text.pl ryakugoro-sample.txt
    
    Sorting...
    
    Done.
    
    real    0m0.277s
    user    0m0.178s
    sys     0m0.017s

    20190906 21:50:35 8570

    変換した辞書ファイルをGoldenDictに設定して試してみるとうまく動いているようです.
    150円だし買ってもいいかも.

    環境
    $ dpkg-query -W perl goldendict
    goldendict      1.5.0~rc2+git20181207+ds-1
    perl    5.28.1-6
    $ lsb_release -dr
    Description:    Debian GNU/Linux bullseye/sid
    Release:        unstable
    $ uname -m
    x86_64

    awesome wmでパスを追加する

    bashだと~/bin とかにパスが通っているのにawesomeからmod4 +r で起動しようとするとコマンドが見当たりません.

    20190830 14:08:46 21926

    AppImageやFlatpakなんかのアプリを格納したりしているのですがこれだと /home/user/bin/command とかフルパスで書かないと駄目です.

    bashだとパスが通っています.

    $ type -a MQTT-Explorer
    MQTT-Explorer is /home/matoken/bin/MQTT-Explorer
    $ ls -l /home/matoken/bin/MQTT-Explorer
    lrwxrwxrwx 1 matoken matoken 71 Aug 25 21:22 /home/matoken/bin/MQTT-Explorer -> /home/matoken/opt/AppImage/MQTT-Explorer-0.3.6-no-delete-limit.AppImage

    awesomeで,mod4 + r して sh -c "$PATH >> ~/tmp/awesomepath" とかして PATH を確認してみるとこれだけしかパスが通っていません.

    $ cat ~/tmp/awesomepath
    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

    ~/.xinitrc でパスを追加してみましたが反映されません.
    多分lightdm経由で起動しているので関係なかった.

    $ ps auxf|grep -B3 awesome
    root     32202  0.0  0.0 309612  5532 ?        SLsl  8月29   0:00 /usr/sbin/lightdm
    root     32208  1.2  0.5 430424 82396 tty7     Ssl+  8月29  10:48  \_ /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
    root     32283  0.0  0.0 163604  5856 ?        Sl    8月29   0:00  \_ lightdm --session-child 12 21
    matoken  32293  0.1  0.6 350760 99060 ?        Ssl   8月29   1:18      \_ awesome

    ~/.Xsession に`PATH=$HOME/bin:$PATH` のような感じでパスを追加するとパスが通りました.でもパスの追加しか書いていないと色々と起動しないサービスがあります.
    大本の`/etc/X11/Xsession` をcpしてきてそのファイルにパスの設定を追加したらOKでした.

    $ cp /etc/X11/Xsession ~/.Xsession
    $ echo 'PATH=$HOME/bin:$PATH' >> ~/.Xsession

    これパスの管理一緒にしたいですね.

    環境
    $ dpkg-query -W awesome lightdm
    awesome 4.3-4
    lightdm 1.26.0-5
    $ lsb_release -dr
    Description:    Debian GNU/Linux bullseye/sid
    Release:        unstable
    $ uname -m
    x86_64

    OsMo.mobiがDownしたのでPhoneTrackを使う

    近頃はOsMoで検索すると,DJIのドローンやジンバルが出てくるようになっていますがOsMoはそういうものではなく,位置情報共有サービスです.スマートフォンにアプリを導入して共有URLで今自分の居る場所を共有できます.Glympseなどが類似サービスになると思います.

    このOsMoですが,最近サーバがダウンして利用できなくなりました.(一応オフラインでローカルにログを取得することは可能)
    OsMoのアプリ(OsMoDroid)を導入していると,telegramに誘導するメッセージが表示されるようになりました.

    IMG 20190821 235148

    20190824 20:08:03 4249

    このチャンネルを覗くとサーバが(物理的に?)失われて,更にバックアップが05/15のものしか無いようで,そのデータで復旧を試みようとしているけど未だホスト先を探している状態のようです.
    復旧までにはまだまだ掛かりそうなです.

    Константин Гам, [22.08.19 02:57]
    Что произошло? Сервер приложения OsMo и сайта повреждён, сгорел диск. Потеряны все данные пользователей. Из-за несработавшего бекапа, последняя полная копия проекта датируется 15 мая 2019 года.
    Диск заменили, но требуется много работы по запуску проекта с нуля и дальнейшее накатывание копии от мая…​

    Собираем на восстановление сервера осмо (часы + сервера + тонна кофе), 5200/60000 руб

    VISA: 4083 9720 5573 2954
    QIWI: +7 (921) 426-74-00

    В комментарий указывайте email аккаунта, если есть или будущего. Всем кто донатит 1500+ рублей, максимальный PRO пожизненно.
    Если комментарий недоступен, кидайте время и место платежа в почту osmo.mobi@gmail.com

    OsMoが使えない間の代替サービスを探そうと思いましたが,そういえば以前PhoneTrackというアプリケーションを導入していたのを思い出しました.

    PhoneTrackはNextcloudのアプリケーションとして導入して,位置情報アップロード用のURLを発行して各種アプリケーションで位置情報をアップロード,この情報を共有URLで共有することも出来ます.
    対応アプリケーションも色々あります.私はOsmAnd+,Uloggerを利用しています.
    以下はOsmAnd+での設定例です.

    IMG 20190827 084323
    IMG 20190827 084402

    位置情報共有用のURLは長いのですが,QRcodeで読み取ることも出来ます :)

    20190827 08:08:46 30083

    長時間動かすことが多いので消費電力の少ない設定やアプリを探そうと思います.

    API経由でpocketに投稿した記事を取得してみたけどRSSで十分だった

    最近放置がちだったpocketを活用し始めました.Android端末で隙間時間にRSS消化して気になったものをpocketに投げておいて後でPCで読むという感じのブックマーク代わりな感じです.

    ここに投稿したものを日毎に保存しておくと便利かもと試した記録です.

    アプリケーション登録

    まずはアプリケーション登録をする

    記事が読めればいいので,permissionsは`Retrieve`
    にした.登録すると,CONSUMER KEY が入手できる.

    REQUEST TOKENを入手する

    $ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
       https://getpocket.com/v3/oauth/request \
       -d '
    {
      "consumer_key" : "XXXX-XXXXXXXXXXXXXXXXXXXXXXXX",
      "redirect_uri":"http://matoken.org/"
    }
    '

    結果

    code=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX

    アプリケーションをアカウントに紐付ける

    ウェブブラウザで
    `https://getpocket.com/auth/authorize?request_token=&redirect_uri=http://matoken.org/’
    にアクセスしてアカウントにリクエストを許可する.urlは適当.

    20190816 01 08 26 22616

    アクセストークンを入手する

    $ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
    https://getpocket.com/v3/oauth/authorize \
    -d '
    {
      "consumer_key":"<CONSUMER_KEY>",
      "code":"<REQUEST_TOKEN>"
    }
    '

    結果

    access_token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX&username=user%40example.com

    投稿を取得する

    application/json で求める.とりあえず1件だけ(count'':1”)

    $ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
    https://getpocket.com/v3/get -d '
    {
      "consumer_key":"<CONSIMMER_KEY>",
      "access_token":"<ACCESS_TOKEN>",
      "count":1
    }
    ' | jq
    {
      "status": 1,
      "complete": 1,
      "list": {
      "2692971736": {
        "item_id": "2692971736",
        "resolved_id": "2692971736",
        "given_url": "https://www.patreon.com/posts/29180933",
        "given_title": "DUVET | 1041uuu on Patreon",
        "favorite": "0",
        "status": "0",
        "time_added": "1565885008",
        "time_updated": "1565885011",
        "time_read": "0",
        "time_favorited": "0",
        "sort_id": 0,
        "resolved_title": "",
        "resolved_url": "https://www.patreon.com/posts/29180933",
        "excerpt": "",
        "is_article": "0",
        "is_index": "0",
        "has_video": "0",
        "has_image": "0",
        "word_count": "0",
        "lang": "",
        "domain_metadata": {
        "name": "Patreon",
        "logo": "https://logo.clearbit.com/patreon.com?size=800",
        "greyscale_logo": "https://logo.clearbit.com/patreon.com?size=800&greyscale=true"
        },
        "listen_duration_estimate": 0
      }
      },
      "error": null,
      "search_meta": {
      "search_type": "normal"
      },
      "since": 1565886741
    }

    application/x-www-form-urlencoded で求める.結果は同じでjson形式で帰ってくる.

    $ curl -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d \
      "consumer_key=<CONSUMER_KEY>&access_token=<ACCES_TOKEN>&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq .

    引数の意味はこんな感じ

    • state=all : 全ての投稿形式(既読未読の両方)

    • sort=oldest : 古いものから順に

    • detailType=simple : 基本的な情報

    • since=date -d'1days ago' +%s : 指定したUNIX
      Time以降の記事を取得.取得する開始UNIX TimeをGNU coreutilsのdate
      commandで過去1日(-d’1days ago’)時点のUNIX Time(+%s)を取得して指定

    毎日前日分のpocket投稿titleとurlをDokuwikiに書き込み(Markdown形式)

    $ sudo -u www-data crontab -l | grep wiki
    0 0 1 * *       mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/%m`
    2 0 * * *       curl -s -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d "consumer_key=87275-eea7fa53556961262450492d&access_token=27847a46-0ff9-f9a3-ea7f-31279b&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq -r '.list[] | [.given_title,.given_url] | @csv' | sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/' | sed '1s/^/\n/' >> /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt

    1行目

    • 0 0 1 * * : 毎月1日の00:00に実行

    • mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date
      +%Y/%m`
      : 月のディレクトリを掘る.%がエスケープされているのはcrontabの使用に合わせて.

    • 1 0 * * * : 毎日 00:01 に実行

    2行目

    • jq -r '.list[] | [.given_title,.given_url] | @csv' :
      pocketからの結果からtitleとurlを抜き出してcsv形式で出力

    • sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/'
      : markdownのリンクに変換

    • sed '1s/^/\n/' :
      先頭行を空けないとmarkdownを認識しないようなので改行を入れる

    • /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt`
      : 保存先,dokuwikiでは memo:2019:08:2019-08-16 のようになる

    実はRSSで吐き出せる……

    pocketのオプションのプライバシー管理の中にRSSフィードの項目が!

    20190816 12 08 10 2311

    これを公開にして「すべてのアイテムフィード」を取得すればやりたかったことが出来た…….

    細かい制御をしたいならAPIのほうがいいと思いますが,今回自分がやりたかったのは毎日のバックアップだったので…….もう設定終わったからこれは見なかったことに.

    $ rsstail -l -1 -n5 -H -u "http://getpocket.com/users/*sso1456706866592e34/feed/all"
    Title: エロの秘密結社 ドシコルド EP.38 夢現のエモーション - 無料コミック ComicWalker
    Link: https://comic-walker.com/viewer?tw=2&dlcl=ja&cid=KDCW_MF00000086010039_68&bs=1
    Title: 次世代衛星向け「グリーン燃料」 月探査でも使用か 日米が開発競争
    Link: https://sankei.com/life/news/190815/lif1908150010-n1.html
    Title: ArchiveBox
    Link: https://archivebox.io
    Title: セキュリティ企業が管理する約2800万件の生体認証記録が流出していたことが判明
    Link: https://gigazine.net/news/20190815-data-breach-biometric-security
    Title: DUVET | 1041uuu on Patreon
    Link: https://patreon.com/posts/29180933

    環境

    $ dpkg-query -W curl sed jq rsstail dokuwiki
    curl    7.64.0-4
    dokuwiki        0.0.20180422.a-2
    jq      1.5+dfsg-2+b1
    rsstail 1.8-1+b1
    sed     4.7-1
    $ lsb_release -dr
    Description:    Debian GNU/Linux 10 (buster)
    Release:        10
    $ uname -m
    x86_64

    Nextcloud 15にアップデートして出現した「セキュリティ&セットアップ警告」を解消

    php5のサーバでNextcloud 14系だったのですが,php 7.0 に出来るようになったのでNextcloud もアップグレードして15にしました.
    するといくつかの「セキュリティ&セットアップ警告」が出てきたので対応したメモです.

    MariaDBのデータベースの4バイト文字のサポート

    20190814 01 08 48 4287

    MySQLをデータベースとして使用していますが、4バイト文字をサポートしていません。たとえば、ファイル名やコメントの問題なしに(絵文字のような)4バイト文字を処理できるようにするには、MySQLで4バイトサポートを有効にすることをお勧めします。 詳細についてはこれに関するドキュメントページを読んでください。

    ここでいうドキュメントページは以下のリンクでした.

    現在のデータベースのバージョンを確認します.

    $ mysql --version
    mysql  Ver 15.1 Distrib 10.1.38-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

    innodb_file_format を確認して,Barracuda でない場合は`Barracuda` に変更します.

    $ mysql -udebian-sys-maint -p
    MariaDB [(none)]> show variables like 'innodb_file_format';
    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | innodb_file_format | Antelope |
    +--------------------+----------+
    MariaDB [(none)]> show variables like 'innodb_file_format';
    +--------------------+-----------+
    | Variable_name      | Value     |
    +--------------------+-----------+
    | innodb_file_format | Barracuda |
    +--------------------+-----------+
    MariaDB [(none)]> quit;
    Bye
    $ sudo service mariadb restart

    ここからはMySQL/MariaDBのソフトウェア,バージョン毎に少し設定が異なります.

    MariaDBの設定ファイルの`[mysqld]` セクションに`innodb_file_per_table=1` を設定

    innodb_file_per_table=1

    MariaDBを再起動して設定反映.

    $ sudo service mariadb restart

    データベースの文字コードなどを変更

    MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

    Nextcloud側の設定も4バイト文字を有効にする

    $ sudo -u www-data php ./occ config:system:set mysql.utf8mb4 --type boolean --value="true"
    System config value mysql.utf8mb4 set to boolean true

    repairを掛けるとエラーに
    20190814 01 08 35 31677

    $ sudo -u www-data php ./occ maintenance:repair
    Nextcloud is in maintenance mode - no apps have been loaded
    
     - Repair MySQL collation
    	 - Change row format for oc_addressbooks ...
    	 - Change collation for oc_addressbooks ...
    
    In AbstractMySQLDriver.php line 115:
    
      An exception occurred while executing 'ALTER TABLE `oc_addressbooks` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;':
    
      SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
    
    
    In PDOStatement.php line 107:
    
      SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
    
    
    In PDOStatement.php line 105:
    
      SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
    
    
    maintenance:repair [--include-expensive]

    max key length is 767 bytes ということで以下の設定も追記して

    [mysqld]
    innodb_large_prefix=true
    innodb_file_format=barracuda
    innodb_file_per_table=1

    MariaDBを再起動して設定反映.

    $ sudo service mariadb restart

    再度repairを掛けると正常に終了.

    $ sudo -u www-data php ./occ maintenance:repair

    メンテナンスモードを抜けてNextcloudを開き,エラーメッセージが消えているのを確認

    $ sudo -u www-data php ./occ maintenance:mode --off
    Maintenance mode disabled

    PHP OPcacheの設定

    20190814 01 08 05 2116

    PHP OPcacheが適切に設定されていません。よりパフォーマンスを向上させるには、php.iniで次の設定を推奨します:
    opcache.enable=1
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.memory_consumption=128
    opcache.save_comments=1
    opcache.revalidate_freq=1

    /etc/php/7.0/apache2/php.ini を編集してapache httpd2の設定を再読込して反映.

    $ sudo vi /etc/php/7.0/apache2/php.ini
    $ sudo service apache2 reload

    データベースにインデックスを作成

    20190814 01 08 43 6355

    データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices”を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
    テーブル “oc_share”のインデックス “share_with_index”が見つかりません。
    テーブル “oc_share”のインデックス “parent_index”が見つかりません。
    テーブル “oc_share”のインデックス “owner_index”が見つかりません。
    テーブル “oc_share”のインデックス “initiator_index”が見つかりません。
    テーブル “oc_filecache”のインデックス “fs_mtime”が見つかりません。

    occ db:add-missing-indices を実行して解決.

    $ sudo -u www-data php ./occ db:add-missing-indices

    imagickモジュールの導入

    20190814 01 08 54 8885

    このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
    imagick

    php-imagick パッケージを導入してapache httpd2を再読込

    $ sudo apt install php-imagick
    $ sudo service apache2 reload

    データベースのbig intへの変換

    20190814 01 08 22 10566

    データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 ‘occ db:convert-filecache-bigint’を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
    activity.activity_id
    activity.object_id
    activity_mq.mail_id
    filecache.fileid
    filecache.storage
    filecache.parent
    filecache.mimetype
    filecache.mimepart
    filecache.mtime
    filecache.storage_mtime
    mimetypes.id
    storages.numeric_id

    occ db:convert-filecache-bigint で反映

    $ sudo -u www-data php ./occ db:convert-filecache-bigint
    Following columns will be updated:
    
    * activity.activity_id
    * activity.object_id
    * activity_mq.mail_id
    * filecache.fileid
    * filecache.storage
    * filecache.parent
    * filecache.mimetype
    * filecache.mimepart
    * filecache.mtime
    * filecache.storage_mtime
    * mimetypes.id
    * storages.numeric_id
    
    This can take up to hours, depending on the number of files in your instance!
    Continue with the conversion (y/n)? [n] y

    Nextcloud 16にも上げてみたいのですが,phpのバージョンを上げないといけないしE2EEプラグインが未対応だったりするのでとりあえず今回は見送りです.

    20190814 17 08 22 16312

    環境

    $ sudo -u www-data php ./occ --version
    Nextcloud 15.0.10
    $ dpkg-query -W mariadb-common mariadb-server-10.1 php7.0 php7.0-mysql php-imagick
    mariadb-common  10.1.38-0+deb9u1
    mariadb-server-10.1     10.1.38-0+deb9u1
    php-imagick     3.4.3~rc2-2
    php7.0  7.0.33-0+deb9u3
    php7.0-mysql    7.0.33-0+deb9u3
    $ lsb_release -dr
    Description:    Debian GNU/Linux 9.9 (stretch)
    Release:        9.9
    $ uname -m
    x86_64

    Google Chrome 76 でまた特定のサブドメインが表示されなくなったので表示するようにする

    Google Chrome 69 のときも一時的に表示されなくなっていたのですが,

    Google Chrome 76 でまた特定のサブドメインが表示されなくなりました.

    例えば, www.matoken.orgmatoken.org と省略されます.

    20190811 16 08 30 974

    ちなみに 69 のときは www.hoge.www.matoken.orghoge.matoken.org に見えるというバグらしき動きもありましたがこれは hoge.www.matoken.org に見えるようになっていました.

    20190811 16 08 11 478

    今回も Google Chrome 69 のときと同じように chrome://flags/#omnibox-ui-hide-steady-state-url-trivial-subdomains を Disabled にすると以前の挙動に戻ります.

    20190811 16 08 11 3832

    今回 Chromium 76 でも試してみましたが,この変更は入っていないようでサブドメインは省略されませんでした.

    環境
    $ dpkg-query -W google-chrome-stable chromium
    chromium        76.0.3809.100-1
    google-chrome-stable    76.0.3809.100-1
    $ lsb_release -dr
    Description:    Debian GNU/Linux bullseye/sid
    Release:        unstable
    $ uname -m
    x86_64