技術系日記

signal.Notify したチャンネルを close すると死ぬ(可能性がある)

TL; DR signal.Stop しよう https://golang.org/pkg/os/signal/#Stop 検証 ダメな例 package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) clo…

Rails で全部のモデルについて何かの処理をしたい

eager_load = true にした上で ↓ のスクリプトを bundle exec rails r する ar_classes = [] ObjectSpace.each_object do |obj| next if obj.class.name.to_s != 'Class' if obj.ancestors.include?(ActiveRecord::Base) && obj != ActiveRecord::Base ar_cl…

読了: 『ドラゴンクエストXを支える技術ーー 大規模オンラインRPGの舞台裏』

読み終えました。ざっと俯瞰する感じで面白かった。とても深いところがあったりとかめっちゃ参考になる〜みたいな本ではないです。タイトルどおり、まさに舞台裏を教えてくれる本という感想でした。 自分のバックグラウンドとしてはweb系の業務システムをや…

macOS Mojave + nasm の Hello world

nasm の Hello world 記事はそこそこあるもののコピペで動かなかったのでメモ。 TL;DR エントリポイントは start ではなくて _main という名前にしておく ld コマンドに -lSystem と -macosx_version_min 10.13 を指定しておく 前提 macOS Mojave 10.14.1 un…

読了: 『Go言語による並行処理』

読みました。ちょっと駆け足気味だけど。 全体的に良書でこういったことが知りたかったんだということが書いてあってよかったです。一方で悪い点もほんのちょっとありました。先に悪いと思っている点について書いておこうと思います。 悪かったと思った点 ま…

go のパッケージで特定の型のメンバをもった構造体が定義されていないことを確認したい

モチベ swagger 定義から go client を生成するときに、 type: "number" はデフォルトでは float32 型として定義される。これは type: "number", format: "double" とすることにより float64 型に変更可能である。 該当プロジェクトでは精度的な観点から flo…

読了: Clean Architecture 達人に学ぶソフトウェアの構造と設計

『Clean Architecture 達人に学ぶソフトウェアの構造と設計』を読み終えたので感想です。 なにか新しいことが書いているというわけではなく、ちゃんと依存関係について考えようねという本だと捉えている。ソフトウェア設計の原則を、クラスなどの細かい粒度…

Rails におけるパフォーマンス検証パターン: action 抜けた後が遅いケース

TL; DR アクション抜けたあとは action の callback, rendering, rack middleware の世界 おもそうなものを特定して抜こう bullet は重いぞ 事象 新機能開発中に、大量データ突っ込むか〜と思って突っ込んで開いたらまあ全然返ってこない。 はあ、まあそうい…

WIP: ast でメソッドコールを探すやつを作り始めました + designing data-intensive application を読んでいます

本日は2本立てでお送りします(特にネタがないので小ネタというか終わってないネタを2つ合わせて記事にしとくか……という記事です。 ast でメソッドコールを探すやつを作り始めました ほしくない?と思って作っています github.com 使い方は何かと言うとある特…

「AESで暗号化した時の文字列の長さってどれくらい変わるの?」という質問に答えようと調べた話

経緯 「AESで暗号化した時の文字列の長さってどれくらい変わるんだろう、って調べているけど全然出てこねえ。実際試してみると1.5倍くらいっぽいが。」 という質問が友人から投げられてきたので調べました。 前提 AES256 平文は 99 文字 調査ログ padding …

icfp pc 2018の問題を解く、前準備を勧めている

だいたいタイトルどおりの話です。なおまだ問題全然解いてないです。 ICFP Programming Contest 2018 icfp pc はなんか数日間頑張って最適化とかの問題を解いてスコアを競うやつです。今回のはざっくりいうと3Dプリンタの最適化問題で、指定の座標を塗りつぶ…

『[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』読了

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識 結構前に読了してたけど書いてなかったので書きます。 ざっというと、OS初心者向けの解説本ですね。タイトルから受ける印象とレベル感が合っていたと思います。 僕自身も適当に ubun…

RubyVM::AST を用いた Ruby 製 Ruby インタプリタを作っている話

Ruby では v2.6 から RubyVM::AST というのが入ることになりまして、Ruby ランタイム上から AST を取得できるようになります。この話は以前に書いたので省略しますが、ASTがとれるということはASTを解釈して実行することもできるわけです。やるしかないです…

オフラインリアルタイムどう書く E25 の解答

qiita.com オンライン参加で解けました。17:02なので45分くらいでしょうか。 #yhpg とけたー— はくどー (@HKDnet) July 7, 2018 方針としては、たかだか200x200マス = 40000通りなので、スタート地点以外の1点を選んでベクトル作ってベクトル回して伸ばして…

TaPL読書録 #5

前回: hkdnet.hatenablog.com 今回は6章まるごと。 アルファ変換を許可する、というのは第5章で学んだが、しかし変数名が重複してるんだっけ?という疑念は常につきまとう。特に理論的な部分ではなく実装するという観点においては「標準の」の表現を定めてお…

RubyKaigi2018 基調講演2日目レポートで書かなかったことの補足

gihyo.jp 本記事は上記リンクの記事に関する補足です。プログラミング初心者です、Rails しかやってません、みたいな人でもわかることが望ましいとは思っていたのですが紙面の都合及びやたら技術解説がある記事になってもなあと思い書きませんでした。 明ら…

datadog の ruby ライブラリ dogapi で batch_metrics をネストするとダメそう

NOTE: v1.3.0 で見てます。 先日 datadog にメトリクスなげてーなと思ったのでライブラリの使い方を見てたのですがあんまり出来がよくなさそうです。気になったのはここ。 dog.batch_metrics do dog.emit_point('test.api.test_metric',10) dog.emit_point('…

RubyVM::AST に関するメモ書き

hkdnet.hatenablog.com 作ったけど微妙ですわこれ(手のひら返し 使い始めたら、 children にアクセスするのに node_type とかそんなに意識したくないんだよなーということに気づきました いまやろうとしてるのは RubyVM::AST を使って Ruby インタプリタを R…

RubyVM::AST を便利に使いたいので gem を作った

github.com さっと作りました。 rubygems には登録してません(名前が重複してるかすら調べてないや) 経緯 Ruby 2.6.0preview2 から RubyVM::AST モジュールが使えるようになりました。 Ruby 2.6.0-preview2 Released RubyVM::AST [Experimental] Ruby 2.6 in…

オフラインリアルタイムどう書く E24 の回答

負けました。ほっとんどのテストケースは通るが4つほど通らない、というのがあるというのが時間内の回答です。 が、終わったあとの懇親会でぼーっと考えてたらあそこじゃね?というところに気づいて解けました。そしてその diff がしょーもない。 とりあえず…

Swift製webアプリケーションフレームワーク Vapor を読むやつ #2

hkdnet.hatenablog.com 前回テンプレートの configure まで読んだので boot 以降を読もうかと思いましたが、routesのところを読み損ねていたことに気づいた ので読みます。 https://github.com/vapor/api-template/blob/3df9b5518b510f5959c75ad04c1b51996a7…

Swift製webアプリケーションフレームワーク Vapor を読むやつ #1

Vapor とは SSS(Server Side Swift) のwebアプリケーションフレームワークです。 docs: https://docs.vapor.codes/3.0/ セットアップ CLI ツールの使用を推奨しているので brew でいれておく。プロジェクトの作成は vapor new で。Swift 初心者過ぎてよくわ…

Python3 script を雑に heroku で動かせるようにする

手元で動かしてた python スクリプトを web サービス化したときの備忘録です。

『わかばちゃんと学ぶ Googleアナリティクス』の献本をいただきました

はいどうも、 ハイクオリティ神レビューア のはくどーです。 頂いたの3月末なのですが……。遅くなりましてすみません。 感想 ざっくりGAの使い方が紹介されていてよいんじゃないでしょうか。アクセス解析にまつわる諸概念についてもざっと紹介され、各概念を…

『現場で役立つシステム設計の原則』感想

読んだ。 雑多に感想を書く。 いわゆる Rails Way において到達できるところと、実際にシステムが要求するところの水準に乖離があるような現場はそこそこあると思っていて、Rails から入ったけどそういうところに困っている人(= つまり僕だ)にいい本だと思っ…

秒速でサイト作ったら反響がよかったので振り返り

github.com きっかけは、隣に座ってた人がいきなりやり始めたんだけど、検索ロジックとかが ガバそう 改善の余地がありそうだったので口出ししてたところから。 やったことは主にこんな感じです。 (PRになってないけど) 検索ロジックに口出しした とりあえず…

jewel polisher

最近自分たちのプロジェクトが依存する gem 関連で何かが起きて対応が必要だったことが続いたのでメモっておく。 rails-html-sanitizer 0.4.0 CVE-2018-3741 対応。これは依存が多いので追うのがちょっとめんどかった。情報としては以下の issue が非常によ…

TaPL読書録 #3

前回: hkdnet.hatenablog.com 今回は4章終わりまで。 私物ノートPCのエンターキーがぶっ壊れているため今回のメモは控えめ。 定理3.5.12. 整礎集合の1要素へとマッピングできる関数 f を用いて無限降下列にならないことを示す論法は他の箇所でも見た気がする…

どうかくE22とjit

問題: 辞書順に数を並べる 2018.3.3 実装: github.com とりあえずナイーブに解いたやつ。鍋谷さんは「Rubyでは解けないくらいの計算量にしたつもりだった」と言っていたが案外解けている。 $ ruby -v ruby 2.6.0preview1 (2018-02-24 trunk 62554) [x86_64-d…

Ruby の ! について

はいどうも ! メソッド Ruby における ! ってご存知ですか? Ruby は演算子っぽいようなものもメソッドとして実装されているという話があったりします。 1 + 1 # Integer の + メソッドが呼ばれている class Integer # 上書き def +(other) 42 end end 1 + 1…