タグ

ブックマーク / www.kaoriya.net (25)

  • HHKB Studio レビュー — KaoriYa

    2023/10/25発売のHHKB Studioを購入し、構成・構造を細部まで検証したのでレビューします。 注意: 詳細レビューは執筆中で、随時追記しています。ひとまず総評まで読んでいってください。 レビューする私の立場 私はHHKB Studioの購入者です。 特にどこからか提供や依頼を受けてのレビューではありません。 またHHKBの従来品の愛用者でした。 初期のHHKB Professionalから始まり、 Pro 2、Type-S、HYBRID Type-Sまで色違いや予備品も含めて 合計7台を所有しています。 加えて2020年末より自作キーボードに傾倒しました。 短期間で大量のキットを組み立てたり、 自ら回路を設計したり、 ファームウェアを書き起こしたり、 あのKeyballシリーズのファームウェアを担当したり と 自作キーボードとポインティングデバイスに関する一定以上の知見を持っ

    HHKB Studio レビュー — KaoriYa
    peketamin
    peketamin 2023/10/27
  • 自作キーボードを始めて5か月の歩み — KaoriYa

    はじめに 2020年の11月末。 なんとなく自作キーボードでも始めて見るかと思い付きました。 それまで自分にとって自作キーボードはハードウェア技術的にも既知で、 さらに長年使い続けたHHKBから乗り換える気も起こらず見向きもしなかったわけですが 「実際にやってもいないのにわかった気になるのは頭でっかちでよくないな」 と考えてやってみることにしたのです。 ということでやってみて見事にハマりまして 始めて1か月で数台のキーボードを組み立て この5か月で10台を超え20台に迫る勢いでキーボードを組み立て・設計・制作するに至りました。 この記事では自分が作ってきたキーボードたちを振り返ってみたいと思います。 なにぶん数が多いので1つのキーボードにつきなるべく量を絞って以下の観点から書き下していきます。 なぜそのキーボードを選択したのか(作ろうと思ったのか) 作った際の特徴、思い出話とかあれば 作っ

    peketamin
    peketamin 2021/04/23
  • その後のgolangと(Dockerと)OOM — KaoriYa

    前の記事:golangDockerとOOM を書いた後で Go側の事情に変化があったため、 あの記事に書かれた方法は現実的な選択肢ではなくなってしまいました。 この記事では私が使っているGo 1.14以降でのOOM対策と、 どうしてそうせざるを得なかったのか解説をお届けします。 TL;DR Goの64ビット版はVSZの最小要求量が大幅に拡大した (500MB超) 前の記事で紹介した方法が現実的ではなくなった VSZの制限をRSSに転用する=最低でも500MBのRSSを設定することになる 代わりに自プロセスのRSSを監視して閾値を超えたらアポトーシスするようにした RSS取得用のkoron-go/phymemパッケージを作成した Background あの記事を書いた翌月末にGo 1.14がリリースされました。 その変更点の中に以下の記述があります。 The page allocator

    peketamin
    peketamin 2020/08/17
  • go get の動作メモ — KaoriYa

    TL;DR module 有効下の go get は -u 相当 (バージョン未指定なら) go.mod の module には /v{2以上の値} という suffix でメジャーバージョンを書く必要がある 省略すると v0 もしくは v1 とみなされる 取得時には go get example.org/foo/bar/v2 のようにする パッケージを取ってくるときはこれで良いが、コマンドの時はリリース済みのメジャーバージョンを機械的に知る方法がないのでキツいね 髄記 言わずと知れた go get 、Goのパッケージをインストールしたり、コマンドをインストールしてくれたり、バージョン管理してくれる偉いやつ。 調べてみると module が有効かどうかで振る舞いが変わるらしい。 src/cmd/go 下をみると module かどうかでコマンドそのものが入れ替わってる。 internal/

    peketamin
    peketamin 2020/06/14
  • テストのためだけに`interface`を書きたくないでござる — KaoriYa

    golangでテストのためだけにinterfaceを書くのが死ぬほど嫌だったので編み出した技を紹介します。 TL;DR テスト(=mock)のためだけにinterfaceは切りたくない 型エイリアスとビルドタグを組み合わせるとinterfaceがなくてもモックが作れる この手法に必要なモックを自動生成するプログラムを作った interfaceは当に必要なシーンで使うべき Background 現在モックを使った単体テストは一般的です。 Javaでの例を挙げると、モックしたいコンポーネントについて予めinterfaceを定義しておき、モックではそのインターフェースを実装するのが定石です。 しかしgolangのinterfaceはJavaなどのそれとは若干性質が異なるため、テスト=モックのためだけにinterfaceを書くのはオーバーワーク気味です。 そうテストのためだけにinterface

  • golangとDockerとOOM — KaoriYa

    golangで書いたプログラムをDockerで動かしOOMが発生した際になるべく情報を残して殺される方法を紹介します。 2020/08/16追記: この記事の内容はgolangに関してはやや現実的ではなくなってしまいました。 詳しくは続編を参照してください。 TL;DR golang製のプログラムは仮想メモリ(VSZ)の確保に失敗するとgoroutineのダンプを吐いて死ぬ DockerのOOMはRSSベースで検出時にSIGKILLを投げてくる Docker利用時にVSZで制限をかけるスクリプトを書いた golang製のプログラムはlinux-amd64において最低でも101MBのVSZを要求する VSZの制限がそれより小さいと当然起動できない 実際のRSSは3MB程度で起動する Background コンテナ内で動いているプロダクション上のgolang製のプログラムが時々OOMに殺されて

    peketamin
    peketamin 2020/01/19
  • Vimmerに捧げる正規表現の基礎中の基礎 — KaoriYa

    正規表現はVimに限らずコンピューター上でのテキスト操作において非常に強力です。 しかし学習の難しさも非情で多くのIT技術者、Vimmerが正規表現に苦しんでいるのを幾度となく目の当たりにしています。 ただ正規表現は当にそんなに難しいのでしょうか。 いいえそんなことはありません。 正規表現は来とても簡単な原理で学習も容易なのです。 にも関わらず難しいと思われてしまうのは、原理を理解しないまま外見上の機能をそのまま覚えようとするからです。 記事では正規表現の原理にフォーカスし解説することで、Vimを含む様々な正規表現実装の利用難度を適切にしようという記事です。 記事は Vim Advent Calendar 2019 の1日目の記事です。 「正規表現」はもともと形式言語という言語学の一分野の研究から生まれました。 言語学というのは言葉を科学的に研究する学問です。 形式言語はその中でも

    peketamin
    peketamin 2019/12/02
  • Golangでログを吐くコツ — KaoriYa

    この記事は Go Advent Calendar 2018 の16日目の記事です。 Golangでプログラムを書く時にログを吐くの、どうしてますか? 記事ではログを吐く際のコツというか気にして欲しい事項と、 なぜそうなるのかを解説していきます。 一概に「ログを吐く」と言っても、 ライブラリからログを吐く場合とアプリケーションから吐く場合では 相当に事情が異なります。 TL;DR ライブラリ(パッケージ)を書く時は… まずログを吐かないことを検討しましょう。 error で返してライブラリのユーザーにログへ吐かせるかどうかを選ばせましょう。 *log.Logger を使いましょう。 デフォルトは log.Printf に対して吐き(またはそれと同等のログを吐く)、 ライブラリユーザーの設定で任意の *log.Logger に切り替えられるようにしましょう。 自前の Logger インターフ

    peketamin
    peketamin 2018/12/16
  • カラー絵文字パッチ制作の経緯 — KaoriYa

    2017/11/26 19:30 頃に vim/vim へ pull request を出したカラー絵文字パッチが、 わずか3時間半のうちにマージされました。 制作に関わったのは mattn さん、k-takata さんそして私の3人で、 超優良な品質のパッチという自負はありましたが、 それでもこの短時間でのマージはまったく予想しておらず、 望外のことに喜びと達成感もひとしおです。 ではその余韻の残るうちに、 この色付き絵文字対応パッチ制作の時間的経緯を ログを掘り返して書き記しておきましょう。 来は Vim アドベントカレンダーのほうにも使えるネタなんですが、 まぁそちらには別のやつを考えましょうってことで。 あ、メッチャ長いんで要注意。 前日譚 まず以前から mattn さんは色付き絵文字を出したいと表明していました。 先日行われた VimConf 2017 でも言っていましたね。

    peketamin
    peketamin 2017/11/27
  • golang でループを手っ取り早く並列化する方法 — KaoriYa

    func execLoop(list []Item) { for _, item := range list { do_something(item) } } list に格納された各 item に対して do_something() を適用する、よくあるタイプのループ処理です。 goroutine で並列化、その副作用 golang ではこの do_something() の適用を超お手軽に並列化できます。あ、もちろん do_something() はリエントラントである前提ですね。

    peketamin
    peketamin 2017/04/10
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar

    peketamin
    peketamin 2016/12/29
  • Golang と SDL2 でゲームを作る — KaoriYa

    Golang で SDL2 を使って作ったゲームを RasPi3 で遊びました。 その方法を紹介します。 記事は Go Advent Calendar 2016 24 日目の記事です。 導入 皆さんは突然ゲームを書きたくなること、ありませんか? ありますよね? あるでしょ。あると言ってください! 私は最近 ドキュメントスキャナ を入手しまして、 手元にあった古いプログラミング雑誌をまとめてスキャンしてました。 あ、プログラミング雑誌ってのは若い人にはわからないかもしれませんが、 読者が投稿したゲームなどのプログラムのソースコードが掲載され、 それを他の読者が打ち込んで楽しむそういう雑誌です。 だいたいは BASIC で、 今となっては決して長いとはいえないソースコードなんですが、 それでも 超圧縮 されていたりして、 今読んでも「あー楽しいな(楽しかったな)」ってなるわけです。 私が所持

    peketamin
    peketamin 2016/12/25
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar

    peketamin
    peketamin 2016/06/26
  • Vim scriptによるゲームの新アーキテクチャの考察 — KaoriYa

    従来のVim scriptによるゲーム作成時の問題点を解消する、 新しいアーキテクチャを考察してみました。 この記事は Vim script Advent Calendar 2015 の 13日目の記事です。 まずは以下のデモ画像(別ウィンドウ)を見てください。 かなりスムーズに○リオが動いています。実はこれ、全部Vim scriptでできています。 ソースコードは koron/vim-ario に置いてありますので、チェックアウトして gvim -S game.vim することで試せます。ただし動作確認・保証は Windows版の +kaoriya な gvim でしかしておりません。また解像度も画面幅1920ドット無いとおかしなことになるので、異なる環境の場合は各自で調整してPRなどしてください。 操作は以下のとおりです。 h - 左ボタンのトグル l - 右ボタンのトグル f - ジ

    peketamin
    peketamin 2015/12/13
  • Vimが変なファイルを作るようになった — KaoriYa

    +kaoriya版として配布しているVimでは デフォルトで undofile がオンになった関係で ファイルの保存時に変な名前のファイルが作成されるようになりました。 その解説をします。 うちで配布している Vim は 7.4.227 から、デフォルトで undofile がオンの状態で配布されるようになりました。そのためデフォルトではファイルを保存した時に同時に.{ファイル名}.un~ を undo ファイルを作成します。この undo ファイルにより Vim は undo の情報をセッションを越えて保持できます。 しかしいきなりゴミのような名前のファイルが生成され、普通のユーザは驚くことでしょう。かく言う私も驚きました。っていうかそのまま間違えてレポジトリに commit しちゃいました。それでは困りますので、無効化する設定などを紹介しておきます。 完全に無効化する こう設定してくだ

  • 最近よく見かけるバッドエンジニアリング — KaoriYa

    最近よく見かけるバッドエンジニアリングの発生パターン。 イカしたフレームワーク/ライブラリが誕生する あるプロダクトがそのフレームワークを利用する フレームワークのスコープから少し外れたことをやるためにハックする フレームワークがセキュリティ問題などにより更新される 3のハックのせいでアップデートできない どーすんだよ、これ。 もちろんハックがシンプルで規模が小さい or 適切な方法ならば、アップデート時にフレームワークのソース読んでなんとかできるわけだけれど。 とくにフレームワークがカジュアルに使えるほど、3のハックを行う人がド素人で、どうにもならなくなるように感じてる。

  • スパルタンVim 4.0のPDF公開 — KaoriYa

    すっかり涼しくなってまいりましたが、夏の暑いさなかに行われたコミケ C86において頒布した スパルタンVim 4.0 のPDFを公開いたします。 http://files.kaoriya.net/goto/c86pdf Vim scriptがどう実装されているかを、そのソースコードを通じて理解してしまおうという、斜め&明後日な方向からの超Vim script入門書です。先日、私は Vimlambda()関数の実装 をお手伝いしていましたが、このを読めばあなたも同じようにできるようになるかもしれません(なれるとは言っていない)。 秋の夜長のお暇つぶしになれば幸いです。

    peketamin
    peketamin 2014/09/20
  • 書籍:Vim scriptテクニックバイブル 発売によせて — KaoriYa

    執筆に参加させていただいた「Vim scriptテクニックバイブル」が、 日、正式に店頭に並びます。 執筆に参加させていただいた「Vim scriptテクニックバイブル ~Vim使いの魔法の杖」が、日、正式に店頭に並びます。早いお店では1週間ほど前から先行販売として売っていたようで、かく言う私も著者見よりも先に、その先行販売 で購入したという状況です(苦笑 7/30 先行販売 『Vim script テクニックバイブル Vim使いの魔法の杖』 技術評論社 (978-4-7741-6634-6) Vim script サポーターズ 著 10冊入荷 http://t.co/QJ5nx2t0QN — 書泉ブックタワーコンピュータ書売り場 (@shosen_bt_pc) 2014, 7月 30 余談ですが、この先行販売により一時的にとある書店のコンピュータ書のベスト3にい込んだらしいです。

    書籍:Vim scriptテクニックバイブル 発売によせて — KaoriYa
    peketamin
    peketamin 2014/08/06
  • Go/Migemo の紹介 — KaoriYa

    Migemo とは Migemo とはローマ字を入力して漢字を検索するためのライブラリです。詳しく言うとローマ字をひらがなへ変換し、そのひらがなを基に漢字として変換可能な候補を列挙し、それら複数の候補を合成して正規表現パターンを生成する、それが Migemo の主機能です。Migemo が生成した正規表現パターンを用いて検索すれば「ローマ字を入力すれば漢字を含む日語を検索できる」ようになるのです。 1つ具体的な例を示しましょう。ローマ字「kikai」を考えましょう。これはひらがなで示すと「きかい」です。漢字に変換すると「奇怪」「機械」「機会」…まだまだありますが、ひとまず複数候補があるということはわかります。ここまであげた5個の単語に一度にマッチする正規表現は以下のようになります。

  • または私は如何にして例外するのを止めて golang を愛するようになったか — KaoriYa

    Java の finally よりも golang の defer のほうが筋が良さそうだ、 ということから考え始めた結果、 どうして私が golang を気に入ったのかがわかった気がしたので書いておきます。 ファイルをオープンし読み込みな処理で何かして終わったら閉じる、という関数を Javagolang で書き比べてみましょう。 Java で書くとこんな感じですね。 public static void readFile(String fname) throws IOException { InputStream s = null; try { s = FileInputStream(fname); // // Do something with "s". // } finally { if (s != null) { s.close(); } } }

    peketamin
    peketamin 2014/04/18
    ドクターストレンジラブ!