「Unixという考え方」読了
去年買って積読になっていた「Unixという考え方」を読了した。
技術書というよりも考え方や哲学についての本。
Unixがどういう思想で作られているのか、そしてそこからプログラマは何を学ぶことができるのか、ということが書かれている。
個人的には「小さなツールをたくさん作る」「シンプルな実装にする」というところあたりが刺さった。
「やりたいことを実行するための大きなアプリ」を作ってしまいがちなので、「個別の機能を満たす小さなアプリをたくさん作る」そして「それらを組み合わせて目標を達成する」ということを大切にしていきたい。
今のところ電子書籍化されていないのが残念。
比較的大きな本屋でないと見かけないことも多いのだが、それほど分厚い本でもないので、特にプログラマの人は一度読んでみてもいいと思う。
QuadGKを使って数値積分する。
関数を渡して数値積分を計算する。
出力は (I, E)
となり、 I
が結果、 E
が誤差。
一つの変数についての積分しかできないので注意。
体感速度だと、SymPyでintegrateするよりもはやい(そもそもSymPyのRecompileが遅い)。
using QuadGK # quadgk: 数値積分を計算する # quadgk(function, from, to) quadgk(cos, 0, pi/2) # => (1.0, 2.220446049250313e-16) quadgk(x -> x^2, 0, 1) # => (0.3333333333333333, 5.551115123125783e-17) quadgk(x -> exp(-4 * abs(x - 1/2)), 0, 1) # => (0.4323323583816937, 4.996003610813204e-16)
参考
juliaをコンパイルして実行可能ファイルを作る
juliaで書いたコードをコンパイルし、実行可能なファイルにしてくれるライブラリを見つけた。
以下、githubのREADMEを参考に使ってみたときの手順をまとめている。
まず、このサンプルを元に実行ファイルを作成する。
module Hello Base.@ccallable function julia_main(ARGS::Vector{String})::Cint println("hello, world") return 0 end end
次に、これをPackageCompilerを使用してコンパイルする。
build_executable
関数について、第一引数がコンパイルしたいファイルへのパス、第二引数がコンパイル後の実行ファイル名になる。
$ julia -e 'using PackageCompiler; build_executable("hello.jl", "hello")'
これを実行すると自動的にbuilddirというディレクトリが作られ、この中に成果物が格納される。
builddirの中には、コンパイルされたファイルを実行するための各種ライブラリも置かれている。
$ ./builddir/hello hello, world
このライブラリについては、他にもライブラリを作ったりできるようなのだが、いかんせんドキュメントが少ない。
これからいろいろ試してみようと思っている。
参考
mysqlでdatetimeカラムの年と月だけを取得する
mysqlのdatetime型のカラムについて、年月日でうまく集計してくれるような関数は用意されていない。
そこで、 DATE_FORMAT
関数を使いdatetime型から年や月から文字列を作り、これをつかってgroup byで集計するようにする。
SELETE DATE_FORMAT(date_col, '%Y-%m') AS fdate, COUNT(*) FROM table GROUP BY fdate
参考
ローカルに残っているリモートで削除されたブランチへの参照を削除する
仕事でgitを使っていると、すでにリモートで削除されたブランチへの参照が git remote --all
したときに出てくるようになる。
これを整理したかったら以下のコマンドを実行すれば、削除済みブランチを一覧表示から削除できる。
git fetch --prune
参考
slackのリマインダーの設定
# /remind [@メンバ-/#チャンネル/me] [何を(日本語OK)] [いつ(英語)] # 以下だと「平日17:00に日報記入というリマインドを自分に送る」という内容になる /remind me 日報記入 at 17:00 every weekday いつの情報が柔軟に設定できる 時間経過 `in 10 seconds`, `in 5 minutes` `in 2.5 hours` 時刻指定 `at 11:00pm` `at 17:00` `at midnight` 日時指定 `on 8 Aug` `on January 1` `on 04/30/2019` 繰り返し `every weekday` `every Monday, Tuesday, and Wednesday`
参考
gormのPluckを使う
テーブル上の特定のカラムだけから結果を取得したい場合に使う。
structになっていなくても結果を取得できる。
var ids []int64 db.Table("target").Pluck("id", &ids)