サーバーサイドでMarkedを使いたかったので。Node.js 20系はC++やclangのバージョンが古くエラーになると思われるので18系にした
前提
- さくらのレンタルサーバースタンダードプラン
- zshを利用している
手順
所要時間はさくらのレンタルサーバースタンダードプランで2時間丁度くらい
- nodebrewを落としてくる
wget git.io/nodebrew
.zshrc
にパスを通すPATH=${HOME}/.nodebrew/current/bin:${PATH}
コンパイルして使えるようにする
perl nodebrew setup
## バージョン確認
# nodebrew ls-remote
## プロセスが殺されるのを防ぐためにniceで優先度を下げている
## コンパイルには2h程かかる
nice -n 20 nodebrew compile v18.19.0
nodebrew use v18.19.0
試したけどうまくいかなかったやつ
nvm
nice
が効かないのでプロセスキルされて終わる
フルスクラッチコンパイル
OpenSSL周りに何か問題があるらしくコンパイルがこける。バージョンが合ってないのかも
# OpenSSL
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/home/$USERNAME/openssl --openssldir=/home/$USERNAME/local/openssl
make
make install
# Node.js
wget https://nodejs.org/dist/v18.9.1/node-v18.9.1.tar.gz
tar -zxvf node-v18.9.1.tar.gz
cd node-v18.9.1
./configure --shared-openssl --shared-openssl-includes=/home/$USERNAME/openssl/include/
export LD_LIBRARY_PATH=/home/$USERNAME/openssl/lib
make install DESTDIR=/home/$USERNAME/local PREFIX=
所感
Node.jsなので負荷が心配だったが、Markedでブログ記事をMarkdownからHTMLに落とす程度なら問題なく動いて安心した。
ここ数年、誰かと話をしたりしているときに話のネタ元を探すのに苦労することが増えた。恐らく昔は根拠なく話していたことが、今は根拠を求められたり、必要になるケースが増えたからだと思う。相手を納得させる話には説得力が必要で、それには根拠があると捗るためだ。
例えば、「以前ほげほげで見た話なのですが~」と切り出したときに「ほげほげ」がどこだったかというところだ。私は大抵の情報をWebから得ているので話の元には大抵URLがあるのだが、これを失念していると根拠が出せないうえに記憶が壊れているケースもあり、誤った情報を話してしまうことがある。しかしこんなのを普通にブックマークしていても探すのが大変だし、ブックマークもすごいことになってしまう。そこで、記憶のインデックスとしてソーシャルブックマークを使うのはどうかと、ふと思いついたのだ。
最初はdeliciousを使おうと考えたのだが、これはサービスを終了していた。Diggも頭の中を過ぎ去ったが、今ひとつパッとしなかった。そこで行き着いたのがはてなブックマークだ。
ここはインターネット黎明期のころにインターネットをしていた人たちにとってお馴染みのサービスだろう。私も黎明期にはよく使っていたが、その時は特に理由もなく、流行で楽しいからという理由だったと思う。
しかしある時を境に私は利用をやめてしまった。理由はホッテントリの存在である。控えめに言わずとも荒れているし、スパムも多い。これは別に最近に始まったことではなく、以前からこうだった。最近はより酷くなってきている気さえする。しかし別にホッテントリを見ずに純粋に自分だけのブックマークとして使えばいいのではないか?そういう部分に気づいたのである。他者を気にせずに使う分にはストレスがない。そう思い使い始めることにした。
取り合えず今は思い出したときに、過去に見つけた有益情報をブックマークしていっているところだ。きっといつか情報を引き出す時に役に立ってくれることだろう。そう思い今は登録するフェーズにいる。勿論、過去だけではなく、現在見つけた情報についても関心があるものはブックマークしていっているが、どちらかというと過去を引き出したい側面の方が今は強い。
現在私のブックマークは技術的なものや地域の話題のようなものが多い。特に技術の話については引き出しから出したときに中身が抜け落ちていることが多々あるので、これをインデックスの一つにして、すぐに引き出せるようにしておきたい。
ここからは余談だが、実は久々にはてブを使うにあたり、IDの再登録をした。これは過去に、はてなというサービスに失望してこのIDを消してしまったところに所以する。
悲しいことはIDがアッパーケースで登録できなかったところだ。今のIDはlycoliaであって、Lycoliaではない。過去のIDが再び取れたら最高だったのだが、まぁ昨今のサービスだとなかなかないだろう。大昔はよくあったものだが。
まぁ、世の中には小文字しか使えないサービスもあるので、それと同じだと思えばいい。正直大文字が使えるサービスでも小文字で登録しまっている例があるので、深く気にするだけ負けだ。中には過去にアカウントを作ったが消してしまったので、既に使えないサービスもいくつかある。今後はIDを不用意に消さないようにしていきたいものだ。(とはいえIDが多いと管理コストもかかるので難しいところではあるが)
Athenaクエリ周りのメモ。
Athena前提知識
Amazon Athena とはによると、次のようにあるが、癖があることは覚えていた方が良い。
Amazon Athena は、標準的な SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析することを容易にするインタラクティブなクエリサービスです。
関数についてはAmazon Athena の関数を見るとよいのだが、Prestoのサイトを見たほうが多分早い。
UTCのISO日付書式文字列をJSTロケールのtimestampに変換する
SELECT
date_parse('2020-01-05T23:21:00.53Z', '%Y-%m-%dT%H:%i:%s.%fZ') AT TIME ZONE 'Asia/Tokyo' AS jst
timestampをdate型に変換する
SELECT
CAST(TBL.TSTMP AS date)
FROM (
SELECT timestamp '2020-11-20 01:00:00' AS TSTMP
) TBL
TO_DATEはtimestampを受け付けないので役に立たない。TO_CHARはドキュメント上扱えるように見えるがフォーマット文字でエラーになる。
以下の様にしてもサポート外の数値型が渡る様で上手くいかない
TO_CHAR(year(TBL.TSTMP)) || '-' || TO_CHAR(month(TBL.TSTMP)) || '-' || TO_CHAR(day_of_month(TBL.TSTMP))
date型をWHEREで比較
date YYYY-MM-DD
として、型を明示しないと上手くいかない
SELECT
*
FROM
TBL
WHERE
TBL.createAt = date '2023-11-22'
この書式で行ける
from:@hoge with:@piyo is:スレッド
タイトルの通りさくらのレンタルサーバーにTiny Tiny RSSを構築する話。いつの間にかDockerコンテナにされてたが本体は単純なPHPのままなのできちんと設定してやるとDocker環境がなくとも動く。
確認環境
Env | Ver |
---|---|
Tiny Tiny RSS | dc25a9cf6816b756cb38490eab93f02589c44a10 |
手順
以降Tiny Tiny RSSをTTRSS表記とする。
- さくらのコンパネからTTRSSで利用するDBを作る
- 以下のセットアップスクリプトを適宜書き換えて実行する
git clone https://git.tt-rss.org/fox/tt-rss.git
cd tt-rss/
cat <<'EOF' | > config.php
<?php
# This file can be used to customize global defaults if environment method is not available (i.e. no Docker).
#
# Use the following syntax to override defaults (options are declared in classes/config.php, prefixed by TTRSS_):
#
# putenv('TTRSS_SELF_URL_PATH=http://example.com/tt-rss');
#
# Plugin-required constants also go here, using define():
#
# define('LEGACY_CONSTANT', 'value');
#
# See this page for more information: https://tt-rss.org/wiki/GlobalConfig
putenv('TTRSS_PHP_EXECUTABLE=/usr/local/bin/php');
# Sets admin user access level to this value.
# Valid values:
# -2 - forbidden to login
# -1 - readonly
# 0 - default user
# 10 - admin
putenv('ADMIN_USER_ACCESS_LEVEL=10');
# Database
putenv('TTRSS_DB_TYPE=mysql');
putenv('TTRSS_DB_HOST=database.example.com');
putenv('TTRSS_DB_PORT=3306');
putenv('TTRSS_DB_USER=hoge');
putenv('TTRSS_DB_NAME=piyo');
putenv('TTRSS_DB_PASS=fuga');
# You will likely need to set this to the correct value, see README.md
# for more information.
putenv('TTRSS_SELF_URL_PATH=https://example.com/');
EOF
php update.php --update-schema
- TTRSSを設置したURLにアクセスする
- ID:
admin
, PW:password
でログインする - ログインパスワードを変更する
- 適当にフィードを登録する
php update.php --feeds
を流す- TTRSSの画面でフィードが取得できることを確認する
- cronに以下のコマンドを適当に登録する
/usr/local/bin/php /home/<USER>/www/tt-rss/update.php --feeds --quiet 1> /dev/null
トラブルシューティング
TTRSS画面を開くとエラーが出る:Exception while creating PDO object:could not find driver
.env
に設定を書いても読み込まれないのでconfig.php
に書く
TTRSS画面上にRSSの取得失敗エラーが出る:Update process failed with exit code: 127 ()
以下のコマンドを実行したときにエラーが出る筈なので、それを見て対処する
php update.php --force-update
php update.php --feeds
phpのパスが見つからないと言われた場合はconfig.php
にputenv('TTRSS_PHP_EXECUTABLE=<PHP_PATH>');
を追加して、phpのパスを設定すれば直る
フィードを追加しても更新されない
勝手に更新されることはないのでCRONが走るのを待つか以下のコマンドを流す
php update.php --feeds
Androidアプリが欲しい
Google Playにはなく、公式サイトからapkを落としてくる必要がある。
昔は有料だったが今は地味に無料化されている。
参考情報
- Tiny Tiny RSS
- 公式サイト
- Installing on a host machine
- ホストマシンへのインストール方法に関する公式資料