puppeteer.connectを試す
1
puppeteerの
https://github.com/GoogleChrome/puppeteer/blob/master/lib/Launcher.js
をながめていたら案外雑にchromiumを立ち上げていたのでpuppeteerではなく自分でchromiumのprocessを立ち上げて動くか試してみる。
この場合launchではなくconnectを使う
2
chromiumのversionは
Chromium 70.0.3538.77
以下でchromiumを立ち上げてみる
chromium --headless --hide-scrollbars --mute-audio --no-sandbox --disable-setuid-sandbox --remote-debugging-port=0 --disable-gpu --user-data-dir=/workdir/tmp about:blank
--remote-debugging-port=0
をつけないと起動即終了してしまう。--no-sandbox
はdockerのalpine上で動かしているため必要。
起動すると以下が吐かれるので、
DevTools listening on ws://127.0.0.1:33993/devtools/browser/dcc10d58-4c80-4e6c-9ad6-235039b0807d
このwsエンドポイントにpuppeteerからアクセスする。
puppeteer.connect({ browserWSEndpoint: `ws://127.0.0.1:33993/devtools/browser/dcc10d58-4c80-4e6c-9ad6-235039b0807d`, }) .then(async browser => { const page = await browser.newPage(); await page.goto('https://www.google.com'); await page.screenshot({path: '/workdir/dist/screenshot.png'}); })
動いた
3
まだ試せてないけどdockerの外とかつなぐ際に、localhostからしかまだ繋げなさそうな気がするのでbindするipを指定するオプションを調べる必要がありそう。
netflixで見た奴話すシリーズ2
1
ミート・イーター料理の達人、を見ました。
これ表示の方法によってはシーズン1だったりシーズン7だったりして若干謎い。最初は古いシーズンを探してしまった。
もしかしたら、netflixにはないけどtvとかでやってたシーズンがあるのかしら
2
シンプルな感想ですけど、「肉を獲って食うって最高ですよね」
だいたいはスティーブンとその仲間が狩りに出かけて仕留めた獲物を食べるという構成。
ハンティングかと言われればそうなんだけど、やっぱ狩猟とスポーツハンティングは明確に違うと思わせてくる姿勢がスティーブンにある。
でもその違いってなんだっけ?
食べる食べないの違いがまず浮かぶけどそれだけではないと思う。
じゃあ生活の糧になっているかどうか?
そりゃ今の時代は狩猟をしなくても生活ができる、というより生活だけにこだわれば狩りという選択肢は現実的ではない。
そもそも生活の糧かどうかで決めること自体が愚かだ。サラリーマン生活が現実的と感じてしまうのは一種の病だろう。
とはいえ食わざるを得ないので、食うための行為として会社員をするのも一つだしこの人見たく映像を作るのも一つで生活としての労働はある。
じゃあ狩猟はレジャー?それも違う気がする。
一生のうちから義務を引き算した空間にレジャーとして突っ込まれたものではない。
一生自体に営みとして混ざって分離できない体験ができるのが狩猟なんじゃないだろうか
3
そう思わせてくれる作品でした。
僕ぐらいの世代は小学生の時Lv100のカモネギを持っていた
1
タイトルあんま関係ないですが、鴨の皮がスープ用に売ってましたので出汁を取りたくなって買いました。
ちょっと前に昆布締めに買った昆布が余っていたのでまず昆布を
30分ほっておいて加熱
ぽい感じです。誤算があるとすれば昆布が案外デカかったことです。
2
加熱します。めちゃくちゃ脂が出ます。
ネギを(写り込んだニンニクはゲストです。今回は使われませんでした)
デカすぎて火が通らねぇ
電チンしました。(先にすればよかった)
3
出汁に
- たまり
- 日本酒(が少ししかなかったので紹興酒が8割)
- 砂糖
入れて煮込んだ図、菜箸についた脂のせいで見た目が脂汗をかいたオタク
それっぽいですね。
4
サトウキビから作られた砂糖だったので甘みが薄かったので調整
ネギを溶けたアイスぐらデロデロにしたので加熱中にこれを書いています。
この後、うどんにぶっかける可能性が高いです。
bucklescript自体をnixでbuild
1
ここ最近の自由研究としてbucklescript
、厳密にはbs-platform
自体をnixでbuildしようとてしました。
大変な部分もあって難航したが、一旦なんとかなったっぽいので公開します。
2
bs-platform
は結構たくさんのツールチェーンの集合体なので、まず付属のOCamlをビルドしていきます。
ちょっとバージョンが古いのですがそこはまぁ取り組んでいた期間を想像してください。
あと、ビルド方法はいろんなところにいろんな手法が記述されていますが、CONTRIBUTING.mdを見るのが現状正しいです。
nixなのでopamは使いません。
{ stdenv, fetchFromGitHub, }: let src = fetchFromGitHub { owner = "BuckleScript"; repo = "bucklescript"; rev = "484740cd56981130573efc81757c41f5662f4f0e"; sha256 = "1mcz283jjwbwq52r51nzz5wjwc7y6g4fhgv0zbgs1wwp496mpjpy"; }; in stdenv.mkDerivation { version = "4.02.3"; name = "ocaml-4.02.3+buckle-master"; inherit src; configurePhase = '' cd vendor/ocaml ./configure -prefix $out ''; buildPhase = '' make world.opt ''; installPhase = '' make install ''; meta = with stdenv.lib; { homepage = http://caml.inria.fr/ocaml; branch = "4.02"; description = "Most popular variant of the Caml language"; platforms = with platforms; linux ++ darwin; }; }
結構昔はgit submoduleになっていたのですが、現在はvendor/ocaml
にcommitされています。
nixなので./configure -prefix $out
をするのを忘れなければそんなに問題ないです
3
ここからが面倒でbsc.exe
などをビルドしていく上でopam install camlp4 cppo
する必要がありますがopam抜きで済まします。
(ここに)https://github.com/NixOS/nixpkgs/blob/13882234569e75df7ecc39e97bdac98709b57530/pkgs/top-level/ocaml-packages.nix便利なツールがあるのでこれを使うといい感じになります。
しかしcamlp4
がOCamlのversionを見てDLしてくるようなnixが書かれているのが若干不安ですが一旦なんとかなりました。(要検証)
最終的に以下のようになります。
{ stdenv, fetchFromGitHub, callPackage, ninja, nodejs }: let src = fetchFromGitHub { owner = "BuckleScript"; repo = "bucklescript"; rev = "484740cd56981130573efc81757c41f5662f4f0e"; sha256 = "1mcz283jjwbwq52r51nzz5wjwc7y6g4fhgv0zbgs1wwp496mpjpy"; }; ocaml = callPackage ./ocaml.nix {}; mkOcamlPackages = (callPackage <nixpkgs/pkgs/top-level/ocaml-packages.nix> {}).mkOcamlPackages; ocamlPackages = mkOcamlPackages ocaml (self: super: { }); in stdenv.mkDerivation rec { name = "bucklescript-${version}"; version = "4.0.6"; inherit src; buildInputs = [ ocaml ocamlPackages.cppo ocamlPackages.camlp4 ]; phase = [ "buildPhase" "installPhase" ]; buildPhase = '' mkdir -p $out cp -R lib jscomp Makefile bsconfig.json package.json $out cd $out make make install ln -s ${ninja}/bin/ninja $out/lib/ninja.exe ''; installPhase = '' mkdir -p $out/bin ln -s $out/lib/bsb $out/bin/bsb ln -s $out/lib/bsc $out/bin/bsc ln -s $out/lib/bsrefmt $out/bin/bsrefmt ''; }
Makefile中に中間ファイルを容赦無くsrc中にぶっこんでくるので、一旦全て$outにcpするなど辛い構成になっています。
document中ではnpm -g install .
するように書いてありますが、npmのinstall hookなどでアクロバットにninjaなどがdlしたりビルドしたりするためのものなので不要です。
突然pythonが要求されて何故?ってなります。
今回はnixpkgsからninjaを持ってきてlinkしていますが、若干versionがずれてしまうのできにする場合がninjaのversionを固定するようなnixが必要になります。
4
最終的なnixファイルを見るとそんなに辛そうに見えませんがビルド周りがイケてない場合、このファイルを各仮定でかなりのソースを読むことになります。 終わり。
folio(ios)のui/ux辛いところ
folioのアプリで諸々の諸行無常をチェックするのだが、UI上辛いところがあるので書く。株価が上がらなくて辛いところは書かない。
リバランス手続き
リバランス手続きというものがあって、あるテーマの株のバランスが価格の変動で変わってきたから情弱の君にサジェストしてあげるよっていう機能である。
このソニー+1株というのは新しく1株足すというのはわかるんだけど、元の株数が幾つなのかわからないのである。
一応、リバランス前のタブを押せばわかるんだけどこのように複数の種類についていちいち切り替えるのがクソ面倒で手続きする気を失ってしまう。
今4株持っているので、4(+1)
か 4 -> 5
とかでいいでしょ。
株価表示
まぁ、株価が見れるんですけど。
そもそもこの画面は結構操作しにくいんだけどそれは日付を見てわかるように結構長いスパンなのだ。
あと、いつこの株を買ったのか出して欲しい。それかなり大事な情報じゃない?
テーマの価格遷移
あるテーマの価格遷移を見ることができる。それがこれだ。
この2018/10/26の部分を見て欲しい。ここは株が爆上げしてHappyという図ではなく、ただ単にリバランス手続きをして持ち株が増えただけなのである。
これはマジ???っていう気持ちになって、このグラフ結構無意味やんけ...ってなった。気持ちの問題としてリバランス手続きが損に思えてしまう。
複数テーマをリバランスした際に
あるテーマでは会社Aの株が減るんだけど、別のテーマでは会社Aの株が増える時にそれ手続き的にどうなるねん、って思って何もしなかった。
割とマイナー部分で調べたけど出てこなかった感じ。
全ての資産
アプリトップで全ての資産が見える。(ちょっと出すわけには行かない、低いので)
実はこれ持っている株の合計じゃなくて、folio中の株の価格+folio口座の中の購入金額になっている。
しかも、その下に含み損益の金額とパーセントが出ているが過去に買った株の価格に対するパーセントなので、全ての資産に対するパーセントを期待すると違和感がある。
儲かってる感のUX
今まで書いた部分を若干含んでしまってはいるが「テーマを買っておいて良かったな」という部分があまり訴求される感じがない。
例えば、持ち株の中でこの一ヶ月で変動が大きかった株を出すとか。テーマ全体で下がることよりある会社が原因で下がる方が多いように感じる。
あと、テーマ自体が何故下がっているか何故上がっているかのレポートがあると嬉しいと思った。
あまりに漠然とマイナス、プラスというだけで(そして本当にプラスなのかもよくわからんグラフ)心理的にプラスにさせる部分がない。
まぁ全テーマが結構プラスな人はどうでもいいかもしれませんけどね(いるのか?)。
nixでmacにclamavを入れる
概要
darwin向けのclamavがnixpkgsにないのでnixファイルを作りながらやっていきます。
手法
nixpkgsのfileを見ます。
nixpkgs/default.nix at 00b555ef889b900c32c36ef9ef7fa3fb725ae4b5 · NixOS/nixpkgs · GitHub
これですね。
このブログを時間がたってから読んだ人はmasterを見た方がいいかもしれません。
このままでは失敗するので修正していきます。
まず失敗する理由として, derivationのmetaのplatformがlinuxになっているのでdarwinにします。
platforms = platforms.darwin;
適当に修正しながらやっていくと以下のようなfileになると思います。
{ stdenv, fetchurl, pkgconfig , gcc , zlib, bzip2, libiconv, libxml2, openssl, ncurses, curl, pcre2 , libmspack }: stdenv.mkDerivation rec { name = "clamav-${version}"; version = "0.100.2"; src = fetchurl { url = "https://www.clamav.net/downloads/production/${name}.tar.gz"; sha256 = "1mkd41sxbjkfjinpx5b9kb85q529gj2s3d0klysssqhysh64ybja"; }; # don't install sample config files into the absolute sysconfdir folder postPatch = '' substituteInPlace Makefile.in --replace ' etc ' ' ' ''; nativeBuildInputs = [ pkgconfig ]; buildInputs = [ zlib bzip2 libxml2 openssl ncurses curl libiconv pcre2 libmspack gcc ]; configureFlags = [ "--libdir=$(out)/lib" "--sysconfdir=/etc/clamav" "--disable-llvm" # enabling breaks the build at the moment "--with-zlib=${zlib.dev}" "--with-xml=${libxml2.dev}" "--with-openssl=${openssl.dev}" "--with-libcurl=${curl.dev}" "--with-system-libmspack" "--disable-clamav" # "--enable-milter" ]; postInstall = '' mkdir $out/etc cp etc/*.sample $out/etc ''; meta = with stdenv.lib; { homepage = https://www.clamav.net; description = "Antivirus engine designed for detecting Trojans, viruses, malware and other malicious threats"; license = licenses.gpl2; platforms = platforms.darwin; }; }
--enable-milter
はちょっとメール関係の機能っぽい?かつビルドが成功しなかったので消しました。
--disable-clamav
をconfigure flagに入れておかないと ./configure
した時にuserとgroupを作られるのでこのオプションはつけた方がいいと思います。(流石にマジかって気持ちになりました)
その代わり以下の操作をする必要があります。
clamav-faq/Steps-macOS.md at master · Cisco-Talos/clamav-faq · GitHub
ただ nix-darwinを使っている人間は以下の操作をすることで、上記の操作の一定部分を回避できます。
{config, pkgs,}: let clamav = pkgs.callPackage ./clamav.nix {}; stateDir = "/var/lib/clamav"; runDir = "/run/clamav"; clamavUser = "clamav"; clamdConfigFile = pkgs.writeText "clamd.conf" '' DatabaseDirectory ${stateDir} LocalSocket ${runDir}/clamd.ctl PidFile ${runDir}/clamd.pid TemporaryDirectory /tmp User ${clamavUser} Foreground yes ExcludePath ^/System/ ExcludePath ^/Volumes/ ExcludePath ^/Network/ ExcludePath ^/bin/ ExcludePath ^/sbin/ ExcludePath ^/nix/ ''; freshclamConfigFile = pkgs.writeText "freshclam.conf" '' DatabaseDirectory ${stateDir} Foreground yes Checks 12 DatabaseMirror database.clamav.net ''; in { environment.etc."clamav/freshclam.conf".source = freshclamConfigFile; environment.etc."clamav/clamd.conf".source = clamdConfigFile; users.users.clamav.uid = 599; users.users.clamav.gid = config.users.groups.clamav.gid; users.users.clamav.home = stateDir; users.users.clamav.shell = "/bin/false"; users.users.clamav.description = "clamav service user"; users.groups.clamav.gid = 799; users.groups.clamav.description = "group for clamav service"; users.knownGroups = [ clamavUser ]; users.knownUsers = [ clamavUser ]; }
上記は以下のnixos向けの設定を見ることで作ることができます。
ちょっとlaunchd周りはいじってる途中なので、今度書くかもしれません。