Windows で GoLand を使うに当たって Font の設定にインストール済みの Myrica が候補に出てこなかったので、出てくるようにしたときの覚え書き。
%LocalAppData%\JetBrains\Toolbox\apps\Goland\ch-0\183.4886.44\jre64\lib\fonts
に ttc
ファイルを置いて GoLand を再起動して終わり。
Windows で GoLand を使うに当たって Font の設定にインストール済みの Myrica が候補に出てこなかったので、出てくるようにしたときの覚え書き。
%LocalAppData%\JetBrains\Toolbox\apps\Goland\ch-0\183.4886.44\jre64\lib\fonts
に ttc
ファイルを置いて GoLand を再起動して終わり。
たまには Python を使ってみるかというノリで、いつも読んでる Web 小説のページをスクレイピングして最新のものがあれば Slack に通知するやつを作ってみました。 Pythonをほとんど知らず、調べながらやったので、その過程で調べた内容についてのメモを残します。
パッケージ管理をプロジェクト毎にしたかったので、よく使われている virtualenv を使おうと思いましたが、 Python 3.3 からは venv として Python の標準機能にもほぼ同様のものが備わったようです。
$ python3 -m venv project_name
でサクッと生成しました。
追加パッケージなしでこれができるのはありがたいです。
定番らしい組み合わせでスクレイピングします。
幸い対象が静的 html だったので、requests で GET して、BeautifulSoup4 で必要な DOM を取り出すだけの超シンプルな実装ですみました。
途中、大きく詰まったところとしては GET したファイルの日本語が文字化けしていたことです。
r = requests.get(TARGET_URL) r.encoding = r.apparent_encoding
といったように apparent_encoding
を指定することで charset から文字コードを検出してくれます。
apparent_encoding のソース
対象の html は以下のような構造でした。
<div class="index_box"> <dl class="novel_sublist2"> <dd class="subtitle"> <a href="url">タイトル1</a> </dd> <dt class="long_update"> 20xx/xx/xx xx:xx <span title="20xx/xx/xx xx:xx 改稿"> (<u>改</u>)</span> </dt> </dl> … <dl class="novel_sublist2"> <dd class="subtitle"> <a href="url">タイトルN</a> </dd> <dt class="long_update"> 20xx/xx/xx xx:xx <span title="20xx/xx/xx xx:xx 改稿"> (<u>改</u>)</span> </dt> </dl> </div>
今回必要だったのはタイトルおよび更新日時なので dl タグ一覧を取り出して、dd, dt タグをそれぞれ処理しました。 必要な情報が取れたところで、あとは最終更新日時を比較して最新が来て入れば Slack に通知を適当に実装して完了です。
VS Code でコーディングするにあたり、Python 拡張をインストールしました。 Python拡張をインストールすると pylint が見つからないだの警告を出してきます。 せっかくなので使いたいですが、今回は venv で使いたかったのでワークスペースの設定が必要でした。
{ "python.pythonPath": "./bin/python", "python.linting.pylintPath": "./bin/pylint", "python.linting.pylintEnabled": true, "python.linting.enabled": true, }
これでこのワークスペースを開いたときは venv の pylint を参照してくれるようになりました。
こんな感じ
このメモ書いてる時に気づいたんですが、a タグのリンクを Slack に投稿した方が絶対に使いやすい
puppetteer を使って html を PDF に変換する node.js アプリケーションを作っている過程でキャッシュに悩んだのでメモ
クライアントから送られてきた html 文字列を以下のように PDF 化するコードを書いていました。
しかし、ポストするhtmlの一部が変わっても出来上がるPDFに変化がありません。
クライアント側や node の express 等を疑っていましたが、いずれもキャッシュの対応などを入れても効果がありませんでした。
そこで puppetteer で何かキャッシュされているのではと疑い、ググったところ以下がヒットしたので試したら当たりでした。
How can I disable cache in puppeteer?
setCacheEnabled
フラグを設定して reload
すればいいようです。
setCacheEnabled
フラグを page.goto()
直前にセットしても特に意味がなく、リロードする必要がありました。
ページ生成時に page.setContent()
を使用していない理由としては、 waitUntil
が指定できないためです。
ワークアラウンドとして date:text/html,
に html 文字列を結合して page.goto()
に渡して waitUntil
するようにしました。
Angular の *ngFor
は *ngFor="let n of ['a', 'b']"
のように配列のループはできるが、 Vue.js の v-for
のように指定回数のループもできるディレクティブが用意されていない。
v-for="n in 4"
相当のことを Angular でやりたかったので、パイプを使って実現してみた。
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'range' }) export class RangePipe implements PipeTransform { transform(value: number): Array<number> { return Array(value); } }
これは引数に与えられた長さを持つ配列を返すパイプである。
*ngFor="let n of 4 | range"
のように使う。
上記の例では、4 | range
で長さ4の配列ができ、*ngFor
は4回実行されるといった寸法だ。
今回は指定回数ループさせるためだけを考えている。
そのため、例えば
<span v-for="n in 4">{{ n }}</span>
と同等のことするには以下のように index を使う必要がある。
<span *ngFor="let n of 4 | range; index as i">{{ i + 1 }}</span>
多少長いが、標準的な機能で完結しているのでひとまずこれでいいかなと思っている。
もっとスマートな実装方法あれば教えて欲しい!
パイプの生成もAngular CLIのコマンドひとつで簡単だし最高
今回対応はできたけど、原因がわからなかったので次回調べるためのメモ
+-----+ +----+ | PC +-----+DAC +---+ アンプ、スピーカー +-----+ +----+
見返してみると、順序がこれでいいのかというところもあるけど、とりあえず時系列で実行したもの
pulseaudioのプロセス削除
$ pgrep pulseaudio|xargs kill
pulseaudioのconfig削除
$ rm -f ~/.config/pulse/*
pulseaudioの停止
$ pulseaudio -k
pulseaudioの起動
$ pulseaudio --start
対応のために仕組みを理解する必要がありそうなので、あとで読むためのリンクを置いておく
cargo-tree はプロジェクトの依存クレーをツリー表示してくれるやつらしい。
今回依存関係を調べたくて入れてみたので覚書。
name | version |
---|---|
macOS | 10.12.5 |
homebrew | 1.2.4-61-g4ca2efb |
rustc | rustc 1.20.0-nightly |
cargo | cargo 0.21.0-nightly |
バージョンは前述を参考に
$ brew install cmake $ cmake --version cmake version 3.8.2 CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ cargo install cargo-tree $ cargo tree --version cargo-tree 0.13.0
cmake
がねぇよって怒られたerror: failed to run custom build command for `libgit2-sys v0.6.12` process didn't exit successfully: `/var/folders/80/fmp4sy_d2jq8q_gv5q6gy42w0000gn/T/cargo-install.8xN8YVpcZ19O/release/build/libgit2-sys-edfed1ba91536559/build-script-build` (exit code: 101) --- stdout running: "cmake" "/Users/ahiru/.cargo/registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.6.12/libgit2" "-DBUILD_SHARED_LIBS=OFF" "-DBUILD_CLAR=OFF" "-DCMAKE_INSTALL_PREFIX=/var/folders/80/fmp4sy_d2jq8q_gv5q6gy42w0000gn/T/cargo-install.8xN8YVpcZ19O/release/build/libgit2-sys-f696556cc2dc8abe/out" "-DCMAKE_C_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64" "-DCMAKE_C_COMPILER=/usr/bin/gcc" "-DCMAKE_CXX_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64" "-DCMAKE_CXX_COMPILER=/usr/bin/c++" "-DCMAKE_BUILD_TYPE=Release" --- stderr fatal: Not a git repository (or any of the parent directories): .git thread 'main' panicked at ' failed to execute command: No such file or directory (os error 2) is `cmake` not installed? build script failed, must exit now', /Users/ahiru/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.24/src/lib.rs:593:4 note: Run with `RUST_BACKTRACE=1` for a backtrace. warning: build failed, waiting for other jobs to finish... error: failed to compile `cargo-tree v0.13.0`, intermediate artifacts can be found at `/var/folders/80/fmp4sy_d2jq8q_gv5q6gy42w0000gn/T/cargo-install.8xN8YVpcZ19O` Caused by: build failed
homebrew で cmake インストールしてリトライしたら成功した。
Compiling petgraph v0.4.5 warning[E0122]: trait bounds are not (yet) enforced in type definitions --> /Users/ahiru/.cargo/registry/src/github.com-1ecc6299db9ec823/petgraph-0.4.5/src/algo/mod.rs:169:1 | 169 | type DfsSpaceType<G> where G: Visitable = DfsSpace<G::NodeId, G::Map>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
出ても先に進むしビルドに成功してしまう。
気が向いたらなんか情報出てないか調べよう。