MySQLのCTE

SQLアンチパターンをパラパラめくっていて、 ナイーブツリーの項で SQL-99標準では、WITHキーワードの後に共通テーブル式(CTE:common table expression)を指定する形式の再帰クエリ構文を定義しています。 という一文を目にし、ふとMySQL 8からCTEが使え…

HTML Canvasでバイリニア法、バイキュービック法、ランチョス法

ディレクトリを漁っていたら、10年ぐらい前に書いたHTML CanvasとJavaScriptによるバイリニア法の画像拡大のコードが出てきた。これが酷いコードだったので最近の文法も使って書き直し、ついでなのでバイキュービック法とランチョス法による拡大縮小も書いて…

プログラミングが役立つIT業界と役立たないIT業界

現役SEですけど、プログラミングできてもあんま役に立たないっすよ。給与高い管理系の仕事にシフトしていくほどなおさら使わない。IT職でさえ、こんなもんです。子供の習い事は習字がいいと思います。会議でホワイトボードにシステム設計ガシガシ書いてると…

Railsのbefore_forkで接続を閉じる必要あるの?

Railsのunicornやpumaのconfigをネットでググってみると以下のような設定が見つかる。 # unicorn preload_app true before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |serve…

rapportdとxartstorageremoted

新品のMacBook proに見知らぬportが開いていたので調べてみた。 $ netstat -nat | grep LISTEN tcp6 0 0 *.49298 *.* LISTEN tcp4 0 0 *.49298 *.* LISTEN tcp6 0 0 *.61500 *.* LISTEN tcp4 0 0 *.61500 *.* LISTEN $ sudo lsof -i:49298,61500 Password: C…

日本の最高気温記録が更新された

暑さ番付、東の横綱熊谷市で日本の最高気温記録を塗り替える41.1度をマークしたそうです。 今日の熊谷、午前中の最低気温がなんと28.0度、日の出とともに気温が上がり、正午に39度、13時に40度近くまで上昇。その後も勢いは衰えず、14時23分に41.1度に到達し…

nginxのlocationの優先順位を誤解していた

最近nginxを触っていて、locationの優先順位、主に^~の有無による前方一致の扱いについて誤解していたことに気づいた。 まず正解から。locationは以下の流れで決定される 完全一致チェック -> location = path {} locationとURIが完全一致すれば、この設定で…

Scalaのimplicitパラメータは何のための機能?

最近Scalaのコード読むことが増えたんですが、implicitパラメータのついた関数が多用されるとメッチャコード読みにくいんすよねアレ。このドワンゴのScala研修テキストにあるようなコード この3つのメソッドは共通してConnection型を引数に取るのに、呼びだ…

2018冬アニメ

完走4作品 宇宙よりも遠い場所 ゆるキャン△ オーバーロードII ヴァイオレット・エヴァーガーデン 世間的にはポプテピが流行っていたようだが、内輪ネタの悪ふざけには興味がないので見ていない。 宇宙よりも遠い場所は久々の大当たり。早見沙織が出るから見…

bundlerでmysql2のインストールが失敗する

bundle updateしたらエラーが出た。 MacOSX high sierra 10.13.4 Ruby 2.5.1 (rbenv/ruby-buildでインストール) MySQL 5.7.21 (brewでインストール) linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker comm…

Rubyのバッチを直してメモリ1/1000、速度4倍にした話

弊社、GoやScala、Node.js、Pythonに比べてRubyの地位があまり高くありません。そんな中メモリを20GBも使い、2時間もかかるRubyのバッチがあって、やっぱRubyダメじゃんと思われていたりします。 いやいやそれRubyのせいじゃないでしょう、と。私もRubyプロ…

DBのタイムアウトはサーバ側をクライアント側より長くする

多くのデータベースにはコネクションのタイムアウトという設定が存在します。指定した期間使われていないコネクションを解放するというもので、クライアント、サーバ双方で設定可能になっています。 タイムアウトはサーバ側の寿命がクライアント側よりも長く…

mongoDBクラスタにrestoreする時の高速化テクニック

developers.cyberagent.co.jp この記事のように新しいmongoDBクラスタにrestoreでデータを移行する場合のテクニックですが、新クラスタへの移行前にバックアップデータ等でrestoreを行って暖気しておくというものがあります。 mongoDBの大規模なクラスタに巨…

JavaScript配列の空要素の話

gfx.hatenablog.com 配列の空要素の問題ですね。容量は確保されてるが値が(undefinedさえも)入っていない状態。 $ node -p -e "new Array(3)" [ <3 empty items> ] この配列のlengthは3になるのだが、forEachなどのイテレーション関数では空要素は列挙され…

ニンテンドーラボの懸念点

ゼルダを筆頭に高品質なコンピュータゲームをリリースしながら、なおアナログとの融合を狙ってくるあたり任天堂は他のゲーム会社とは一線を画していますねー。あの会社には遊びは身体性を抜きに生まれないとかそんな感じの開発の哲学でもあるんでしょうかね…

2017年視聴アニメ

2017年の視聴アニメメモ 冬(1月〜) 完走3作品 幼女戦記 リトルウィッチアカデミア けものフレンズ けものフレンズが話題を独占した2017冬、俺的にはけもフレよりも幼女戦記で悠木碧の役の幅を再確認できたシーズンでした 春(4月〜) 完走4作品 終末なにして…

ちょっと変わったフィボナッチ数の作り方

15歳女子が「フィボナッチ数列は2進数でも美しいのか」を考察 算数・数学の自由研究作品コンクール「MATHコン」で日本数学検定協会賞を受賞 | プレスリリース | 公益財団法人 日本数学検定協会 フィボナッチと聞いて、昔編み出した少し変わったフィボナッ…

Jenkinsでgithubのpull requestをビルドする

Jenkins上でGithubのプルリクエストをビルドできたのでその方法を記録しておく。もちろんGithub enterpriseでも可能 この方法では通常のブランチをビルドできないのでブランチ用とプルリク用にジョブを2つ作らなくてはならないのが欠点 パラメータの設定 プ…

ブルームフィルタ

お花フィルタ?ではなく、ブルームという人が発明したアルゴリズムらしい。 ブルームフィルタ(bloom filter)とは ある要素が集合に含まれているかどうか高速に判定できる 空間効率がいい ただし 要素そのものを保持してるわけではないので、要素は別に保存…

Node v8.9.0 LTS & v9.0.0リリース

Node v8.9.0 LTSがリリースされました。 今回のリリースで機能的に特筆するようものはありませんが、今後はエッジな変態プログラマじゃない人もasync awaitを積極的に使ってOKという事で記念すべきリリースですね。コールバック地獄も過去のものになりました…

Node v8.xのHTTP/2を試す、その2

続き HTTP/2のpushも試す 今度はこんな感じ。createSecureServerにenablePushオプションを付けないとダメっぽい。 const http2 = require('http2'); const fs = require('fs') const server = http2.createSecureServer({ key: fs.readFileSync('./server.ke…

Node v8.xのHTTP/2を試す

Node v8.8.0がリリースされたが、まだLTSにならない。どうやらv8.x LTSは10/31リリース目標でまだお預けらしい。 気を取り直してv8.8.0のchange logを眺めると、今回のリリースからHTTP/2モジュールがデフォルトで有効になったようだ。実験的実装という位置…

golangのappendの速度比較

Go

appendって毎回新しいスライスが作られているような感じに見えるので、なんか遅そうなイメージがあるんすよね。まぁ、実際には内部で参照している配列のキャパシティに余裕があれば空きに追加されるだけなのでキャパシティさえあれば高速なのだが。 では、実…

Golangの構造体、値のスライスとポインタのスライス

Go

構造体の値のスライスとポインタのスライス、どちらがいいのか? こんな構造体とJSON文字列を定義して… type Hoge struct { Nyan int64 Wang string } const jsonStr = `[{"nyan":1, "wang":"aaaa"}, {"nyan":1, "wang":"bbbb"}]` ポインタのスライスの場合 …

JSコード片をObjectURL化してWeb Workerで実行

今Web WorkerといえばService Workerの話題ばかりですが、これからするのは普通のWorker(Dedicated Worker)の話です。 Web Workerはバックグラウンドでスクリプトを実行できるものです。 重い処理をJSで実行するとUIが固まって何の操作も受け付けなくなり…

Golangの構造体比較

Go

Goでは構造体を == で比較できるらしい。 package main import ( "fmt" "unsafe" ) type Hoge struct { t bool d int s string } func main() { a := Hoge{t: true, d: 1, s:"nyan"} b := Hoge{t: true, d: 1, s:"nyan"} c := a // 値コピー d := &a // ポイ…

絶対ハマるらしいgolangのnilにハマった件

絶対ハマる、不思議なnil - Qiita nil だと思ってやつが nil じゃなかった - Golang · m0t0k1ch1st0ry ハマりましたwwww func main() { var e1 error e1 = x() if e1 == nil { fmt.Printf("e1 == nil: %v\n", e1) } else { fmt.Printf("e1 != nil: %v\n"…

scannerで読み込んだ行を並列でjson.Unmershalすると壊れる

golang歴4時間です。 1行1JSONなファイルを処理するため、以下のようなコードをかいたところjson.Unmarshalでエラーになりました。 func main() { scanner := bufio.NewScanner(os.Stdin) ch := make(chan bool, 3) var wg sync.WaitGroup for scanner.Scan(…

Node.jsでセグメンテーションフォルトが発生したので調査した

Node.js v4.3をv4.8にアップデートしたところsegmentation faultが多発するようになった。 /var/log/messages を見ると以下のようなログが残っている May 15 08:51:32 hostname-hoge001 kernel: node[11262]: segfault at a764a503788 ip 0000000000aecd71 s…

Node.jsのヒープサイズ表示が修正されていた

以前、–max_old_space_sizeに大きな値を指定するとヒープサイズの表示がおかしいなー、もしかして4GB以上は指定できないのかなー、どうせそんな値指定しないからいっかー、とか思っていたのだが、表示のバグで6.10.1で修正されていた。 $ nvm use v6.10.0 No…