タグ

ブックマーク / susisu.hatenablog.com (8)

  • 共通化すれば良いとは限らない - Object.create(null)

    ここのところ偶然なのか「共通化」という言葉を多く聞いているのですが, その言葉を聞くたびに身構えていることに気がついたので, この気持ちの出どころを共有しておきます. なぜ身構えているかというと, 共通化が必ずしもコードを良い状態にするとは限らないにも関わらず, それ自体が目的になってしまっている (ように見える) ことが多いからです. この手のリファクタリングの目的はあくまでコードの改善のはずで, そのことを忘れて共通化するだけで満足してしまうと, 良くてリファクタリングの効果が半減, 悪ければ逆効果になってしまいます. 個人的にコードを共通化する上で注意してほしいと思っているのは以下の二つです. コードを共通化すべきでない場合もある 共通化されたコードは一般的な原則にしたがって設計されなければならない 似たようなことは歴史の中で何度も繰り返し言われていることだろうと思いますが, 改めて

    共通化すれば良いとは限らない - Object.create(null)
    hitode909
    hitode909 2022/07/04
    いい話
  • 劇的シルバニアファミリー - Object.create(null)

    シルバニアファミリー 赤い屋根の大きなお家 ランダム ツイート 助けて

    劇的シルバニアファミリー - Object.create(null)
    hitode909
    hitode909 2021/09/19
    おもしろすぎる
  • Template String Types でパス文字列を解析してクエリする - Object.create(null)

    ※この記事に含まれる内容は TypeScript 4.1 のプレビュー版のものです. 今後仕様が変わり動かなくなる可能性もありますのでご注意ください. 話題の template string types で早速遊んでみます. ゴール .foo[1].bar といった形のパス文字列を型レベルで解析してクエリしちゃいます. こういう感じ: type R1 = Query<{ foo: number }, "">; // R1 = { foo: number } type R2 = Query<{ foo: number }, ".foo">; // R2 = number type R3 = Query<[number, string, boolean], "[1]">; // R3 = string type R4 = Query<{ foo: { bar: string } }, ".fo

    Template String Types でパス文字列を解析してクエリする - Object.create(null)
    hitode909
    hitode909 2020/09/01
  • テストの説明に安易に「正しく」とか書かない - Object.create(null)

    みなさんテストは書いていますよね. 書いていなければふりだしに戻る. 例えば関数 add に対して, 以下のようなテストコードがあるとします. describe("add", () => { it("正しく計算できる", () => { expect(add(1, 2)).toBe(3); }); }); よさそうですね? もしよくないと思うのであればここから下は読まなくても大丈夫なくらい理解している方だと思います. 続いて関数名を変えただけのこちらをどうぞ. describe("sub", () => { it("正しく計算できる", () => { expect(sub(1, 2)).toBe(3); }); }); なんだか明らかに間違っている気がします. もしこのテストが通過してしまったとき我々はどうすればよいのでしょうか. 考えられるパターンは 2 つあります. 実装もテストも正

    テストの説明に安易に「正しく」とか書かない - Object.create(null)
    hitode909
    hitode909 2020/07/23
    いい話
  • ISUCON7 予選通過反省会 - Object.create(null)

    ISUCON7 の予選に @amaya382, @spring_raining とチーム名「チーム名を考えるのが苦手すぎる」で参加しました. 私自身は初参加です. 最終スコア 89,047 で学生枠 2 (3) 位通過でした. 私がやったこと ほぼ完全にアプリケーション (Node.js) だけを担当しました. ESLint 導入 治安維持のためと思ってとりあえず導入したけど潜在バグ見つけられたりしてよかった ICONS_FOLDER という未使用の定数が見つかって, アイコンをファイルに書き出してほしそうな顔をしていたのでそのようにした (実際速い) JS のパフォーマンス改善 CPU プロファイル見て遅そうなところに小細工を加えた といってもアプリケーション側で改善できるところはほとんど見つけられず, ほぼ誤差の範囲だと思われる ごめんなさい, それ Node v8 からなんですよ で

    ISUCON7 予選通過反省会 - Object.create(null)
    hitode909
    hitode909 2017/10/23
    ESLint入れるのよさそう
  • 株式会社はてなに入社しました - Object.create(null)

    株式会社はてなに入社しました 株式会社はてなに入社しました - hitode909の日記

    株式会社はてなに入社しました - Object.create(null)
    hitode909
    hitode909 2017/04/01
    よろしくおねがいします!
  • Atom のカーソル上下移動を改良するパッケージを作った - Object.create(null)

    相変わらず Atom の環境を整備し続けています. というわけでまたパッケージを作りました. atom.io カーソルを上下に動かしたとき, デフォルトではこんな感じに全角文字などが間に入るとカーソルの水平位置がぐちゃぐちゃと動いてしまいます (水平位置を文字数 (正確には code unit 数) で見ているため). この動作を修正して見た目通りの位置に移動させるというものです. ちなみにこれは Atom がエディタを自前で描画しているためで, Sublime Text をはじめ大体のテキストエディタはデフォルトで修正後のような動作のはずです.

    Atom のカーソル上下移動を改良するパッケージを作った - Object.create(null)
    hitode909
    hitode909 2017/03/23
    便利そう
  • Sublime Text から Atom へ乗り換えチャレンジ - Object.create(null)

    なぜ JavaScript を書いているときにやたらと React のスニペットが表示されるようになって*1, これが大変迷惑だったためです. destroy を補完するために destroy と入力する必要があるのクソでしょ— susisu (@susisu2413) 2017年2月16日 💢 pic.twitter.com/8bu5h7Lb5W— susisu (@susisu2413) 2017年2月17日 来は同ファイル内に存在する識別子名を補完してくれるのですが, 謎のスニペットが出るものの欲しいものが出てくれません. 他にも constructor が補完されたと思って適当に確定すると constructor(props){ super(props); } みたいになるなどもあります. あと, こちらは割とどうでも良い理由として Haskell のシンタックスハイライトが

    Sublime Text から Atom へ乗り換えチャレンジ - Object.create(null)
    hitode909
    hitode909 2017/02/20
  • 1