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周りはいじってる途中なので、今度書くかもしれません。
netflixのux
## 1
日々UXシリーズ
生活の中で感じるサービスのUX改善を考える。
## 2
netflixはサービスに対する姿勢としては好きな企業に分類される。
全てのプラットフォームが十分に使いやすいかと言われると難しいがUI自体はチャレンジしている。正しくはチャレンジした結果、悪いことにはなっていない。
自分の感じるnetflixの一番大きなチャレンジはユーザの見たいコンテンツへのアクセス方法だろう
自分もここ2,3年ぐらい使っていて感じるのがカテゴリからのアクセスを減らそうとしていることである。
カテゴリは便利なようにも感じるが、境界ずけられた中から探そうとする行為はユーザーの満足度を高めない
今のnetflixはカテゴリというより、タグというか“雑なカテゴリ”ででてくる。説明しにくいがカテゴリとが認識できないもの。
ユーザーの好みごとにいい感じの集合を提示してくる。
これがカテゴリではないと思わせるのが、例えば自分はドキュメンタリをよく見るが、おすすめに「イギリスのドキュメンタリ」とか「ドキュメンタリ」といった微妙にかぶったものが出てくる。
当然、推薦だけですべてが済むようになるのは理想だけど、それだけだとつまらなさ、雑誌を雑にパラパラみる感じを提供しつつレコメンドしようとしてこうなったように感じる
## 3
そんなことより、netflixからおすすめの作品みたいなものがメールでくるのは別にいい
別にいいけど、そのおすすめに対してこちらからフィードバック出来ないのが仕上げが欠けているんじゃないの、と思ってしまった。
マイリストに追加できるとか興味がないとかメール自体にフィードバックできる仕組みがある良いんだけどね。そんなに実装難しくないだろうし
睡眠
## 1
おおよそインターネットは便利で中学生のころ知りたかったシリーズ
突然だが、頭痛で意識を失ったことがある人はどれぐらいいるだろう
自分はある、だいたい20回ぐらい。
記憶が正しければ中学時代から大学を卒業したぐらいにかけてその症状に悩まされていた。
急に目がおかしくなり激しい頭痛に襲われ、途中で意識を失い、目が覚めると嘔吐する。
順番は日によって違ったが、「頭痛」「嘔吐」がセットで起こる。
今でこそわかった情報だが、おそらく閃輝暗点だった。
当時はいくつ病院に行っても何なのかなぜ起こるのかがわからなかった情報がインターネットを通じてふと流れてくる。
## 2
文章にしてみれば数行の苦しみだが、当時の自分にとってはかなりの負担であった。
余談だが文章量におおじて苦しみが増えるのなら、「死」はそこまで苦しくないかも知れない。
特に中高生時代に頻発しており、医者にかかってもわからない症状をなるべく予防するために、どういう状態だと起きるのかを分析するようにした。
とはいえ、月1で起こるわけでものないのでそう詳細にわからないが、最終的に睡眠時間が大きなファクターになっていることがわかった。
## 3
それからの自分はなるべく睡眠を重要視した。
正確には睡眠がとれていない状態を危険視した。
とはいっても、あまり理解されるものではない。
当然ある程度の部分は理解される。寝なくて体調を崩さない人間はヒロポンを打っているか、超人である
だけど重要視する度合いに対してはあまり理解されない。
## 4
他人に理解されて頭痛が治るなら嬉しいが、そんなこともないので結局他人の理解はどうでもいいのである。
そう思わせるほど頭が痛くなるのだ。
音と声と会話
1
おおよそインターネット、特にtwitterは便利なもので幼少期の自分が知りえなたかった情報が平気で流れてくる。
もし、過去にこのことを知っていたら困らなかったのにな、と思うことは多々ある。
もしかしたら今も困っている人がいるかも知れない人にむけて記事を書きインターネットに流すことにした。なるべく習慣にしたい。
2
自分自身でもこの1〜2年で気づいたことであまり認知できていなかったことだが、 どうやら自然言語を音声経由で解釈するのが苦手である。
特に話しかけられた時に最初のセンテンスから聞き取れることが稀なので、「えっ」と聞き返してしまう。
聞こえていそうな状況でも聞こえるわけではない。そのせいで、小さいときは「おまえ、聞こえとるやろぉ?!」とか言われて叩かれることもあった。
健康診断などである聴覚テストはパスできるので耳が悪いわけではない。むしろ高音はかなり聞こえる方で、街を歩けば猫避けの高音発声装置がかなりうざったい。
3
まぁそんなこんなでtwitterか何かで知ったのだが、聴覚情報処理障害というものがあるらしい
詳細はwikipediaを見てもらった方がわかりやすいかもしれないが、もしこれを読んでいてよくわからないという"健常"な人に意識して欲しいことは
「あなたの声が聞こえているからといって言葉として聞こえているとは限らない」
ということだけである。
wikiにあるように原因は多々あるようで自分がどういう理由でこうなっているのかはわからない。
どちらかといえば会話の文脈がない状態で単語だけ聞き取った際にひどく聞き取れないことが多いので、発音から脳内の記号にする過程の認知能力が低い可能性がある。 ただ、会話の途中で全ての内容がわからなくなることもあるので、一概にそうとはいえない気もする。
4
過去に思いを馳せると小学校のとあるテストが思い出される。
ラジカセ(今となっては死語かもしれない)から流れる会話の内容を聞き取って、音声が終了したあとで渡される問題に回答するというテストがあった。
聞き取りテスト、という名だったかもしれない。
おおよそ小学校のテストは間違えることが少ないものだったが、そのテストに関しては2割ほどしか点が取れなかった。
当時は何故答えられないのか不思議だった。会話が流れてそのあとで聞かれる内容も難しいわけではないのに。
当時から、本当にただ不思議、という感情だった。
いまだにこういうテストをやっているかどうかわからないけど、まだやっているなら小学校の先生にお願いがある。
他の項目と比べて聞き取りテストの点に差がある子供がいたら、そういった障害の可能性を考えてほしい。
それだけで少しでも生きやすいようになるから。
はい
タイトルの元ネタはこちら
小林銅蟲先生の"飯にしましょう"面白いのみんな買いましょう。
1
正直、あんまり昆布が好きになれない。
生まれと育ちは三重県であるが、三重県を関西にカテゴライズしてしまう雑な他県の人間からすると不思議であるかもしれない。
一般的に関西は昆布だしで関東は鰹という風潮は広く認知されているが、三重は関西ではないので当然だが昆布だしではない(あくまで自分の観測範囲)
西東における出汁は食べていた食品の違いや醤油に含まれる旨味成分説がある。
そこをベースに考えると三重(主に松阪、伊勢をさす)は魚介類が多く取れて消費される点、醤油発祥の地である和歌山が近いこともあってグルタミン酸の多いたまり醤油を使う点を考えると当然のようにも思える。
2
と言いつつ、真鯛の昆布締めが好きなので今日はそれを作っていきたいと思います。
刺身包丁がないので、いい感じの切断(デデキント)が難しい。
[
包みます。
数時間放置するとエロそうな色に仕上がります。
値段の高い昆布はgradient の低いxy平面っぽいので、それを使うと波打った状態になりません。
味
良いですね。
なんか一口目には、あれ味薄くないかって思ってしまうけど噛んでるうちにいらないかなという気持ちに変化します。 インパクトが欲しければ塩を足します。
3
試しにマリネにもしました。
- レモン
- オリーブオイル
- バルサミコ酢
- 胡椒
- たまり(少し)
いい感じの盛り付けができなかった図です。参考しにしてください。
味
すごい味気なさを感じる。今までにない何か
旨味、なんだろう少ない確実に
中途半端はやめよう、とにかく最後までやってやろうじゃん。
ということで、たまりやバルサミコ酢や塩をつけながら食べた。
チーズとかもっとサラダにぶっこむとか変化が必要そう
強くあたってあとは流れでお願いします。