タグ

ブックマーク / motemen.hatenablog.com (17)

  • C/C++のコードを静的解析する(clang-tidyのカスタムチェック) - 詩と創作・思索のひろば

    C/C++のソースコードに対して、独自のlintを行いたくなるシチュエーションもときどき発生しますね。 この問題については、現代ではClangにLibToolingというライブラリがある。これによって、Clangの資産を使ったC/C++の静的解析・リファクタリングツールを作ることができる。とくにASTMatcherによって、ソースコードのAST(Abstract Syntax Tree、抽象構文木)に対する走査はわりと簡単に書ける。 インタフェースを考える 公式のチュートリアルとして、LibToolingでスタンドアロンのツールを書く方法が紹介されている。けどこれはLLVMのソースツリー内にファイルを置くのでちょっと不格好かな。別のソースツリーとしていちから書く方法は、How to create a C/C++ Static Code analysis tool が参考になった。 しかしl

    C/C++のコードを静的解析する(clang-tidyのカスタムチェック) - 詩と創作・思索のひろば
    gfx
    gfx 2023/07/25
  • 自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば

    低レイヤを知りたい人のためのCコンパイラ作成入門 まさに低レイヤのことが分かっておらず、以前から気になっていたこの。取り掛かってみたところ思いのほかスイスイ進められて、勢いに乗ってセルフホスト(自分が書いたコンパイラで自分自身をコンパイルするところ)までいけたので記念に書いておく。正確には C コンパイラのサブセットです。 GitHub - motemen/mocc 全体的な進め方は、 上記のの通りに進めていく。 それ以降は自作の 8queen が普通に書けるように機能を強化。 それ以降はセルフホストを目標に進める。 プリプロセッサやリンカは作らず、C からアセンブリまで。 という感じ。自分は手を動かさないと進んでる気がしないので、まずは書いてみつつわからない所があれば調べる、というスタンスでいく。 あと、せっかくなので RISC-V の勉強もしたかったのでこれ向けに書く。なので実行は

    自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば
    gfx
    gfx 2022/11/21
    おお…やばい。 / "ちなみに GitHub Copilot を有効にしたら補完されまくってモリモリ書けたのだが、これはたぶん本家の 9cc や chibicc 由来のコードなので細かいテクは自力では書いてないのであった" / www
  • Baba Is You をクリアした - 詩と創作・思索のひろば

    追加レベルパックはまだですが……。ルール改変型倉庫番パズルの Baba Is You の全ステージをクリアした。一晩やっても進捗がでない日もある、非常に難しいパズルだった。買ってからいちおうのエンディング(スタッフロールを見る)まで休み休み1年、そこからコンプリートまで9ヶ月ということで長く楽しめた。最初にやったステージは解法を忘れてるのでもう一周しても遊べそうだ。 長い戦いだったがやりきれたのは id:akiym が最後までやるべきとオススメしてくれたからだ……ありがとうございます! プレイ時間は70時間ほどだったらしいけど、ゲーム外で考えていた時間が長いのでもっともっと費やしている。 Baba Is You|オンラインコード版 HempuliAmazon 自分がやったのは Switch 版。時間をとらないのでアクセスしやすいスマホ版がオススメかもしれない。 下の方にややゲームの内容に触

    Baba Is You をクリアした - 詩と創作・思索のひろば
    gfx
    gfx 2022/10/19
    “こうやって書いてみると、ゴールが動くことを含めて、完全に仕事ですね!”
  • 「半年早く動く」を目標にして半年が経った - 詩と創作・思索のひろば

    社内に「来年の今年の目標は『半年早く動く』です」というエントリを書いて半年が経った。 こういう目標を立てたきっかけは、自分が変化のタイミングとして会社の会計年度(半期)を考えるようになっていたことに気づいたことだった。 同じ会社でマネージャも長いこと続けていると、部下や同僚の退職を見送る経験も多い。これは一般的に言っても、あまり楽しい体験ではない。辞める理由は人それぞれで、ひと括りにすることはできないものであるし、こう考えるのはおこがましい感じもするが、立場的には、自分が何かアクションを起こすことでまだこの会社で活躍してもらえていたんじゃないかと思うのも常だ。そして実際、そのための、たとえば環境を変えるといったことを考えて、準備もしていた場合も多かった。来期まで待っててくれればな……、という具合。 けれど、自分が制度や組織の設計を仕事の手段としてるのでそう考えていたとしても、ひとの人生はそ

    「半年早く動く」を目標にして半年が経った - 詩と創作・思索のひろば
    gfx
    gfx 2022/01/11
  • mod_perlのDockerイメージをghcr.ioに上げた - 詩と創作・思索のひろば

    趣味で mod_perlDocker イメージを作っています。 Docker Hub の無料版における autobuild が終了となり、GitHub Packages Container Registry に移行することにした。 https://github.com/motemen/docker-mod_perl/pkgs/container/mod_perl {perl_version}-{httpd_version}-{mod_perl_version} て感じのタグ付けです。httpd ベースなので OS のバージョンは勝手に上がる(!) リポジトリでは、Perl のバージョンごとにディレクトリを掘っている。これを Autobuild するにはウェブからポチポチするのが必要で、バージョンを増やすたびに一つひとつ追加するのが面倒だったんだけど、GHCR なら GitHub Ac

    mod_perlのDockerイメージをghcr.ioに上げた - 詩と創作・思索のひろば
    gfx
    gfx 2021/07/29
    "fromJson() を使うと、別のジョブの output から matrix を動的に生成できる" (GitHub Ations)
  • ターミナルでSlackを読む - 詩と創作・思索のひろば

    Slackはそのクライアントがそれなりに、かなりよくできていて、これでほとんど困ることはないんだけど、そうは言ってももうちょっとプログラマブルに取り扱いたいこともある。 そういう場合にもよいAPIが用意されていて、Real Time Messaging API ってのがある。こいつはWebSocketでSlackの発言をはじめ、あらゆるイベントのJSONを送りつけてくれるやつ。ひとまずこれを標準出力に流すことができれば、あとは好きに料理できるはずだ。 というわけで作ったのがこちら。書いたことなかったのでRustです。ちょうどいいネタだった。 GitHub - motemen/slack-stream-json slack-stream-json というバイナリが、SLACK_TOKEN 環境変数を設定した上で起動してやると、RTM APIによって得られたイベントのJSONをそのまま標準出力

    ターミナルでSlackを読む - 詩と創作・思索のひろば
    gfx
    gfx 2019/11/22
  • ISUCON9予選敗退(H::W::A::Abyss::Abyss::Abyss) #isucon - 詩と創作・思索のひろば

    ISUCON9 2日目結果と選出場者決定のお知らせ : ISUCON公式Blog 日曜日に行われたISUCON9予選に参加し、敗退してきました。前掲の記事の「失格となったチーム」がわたしたちです。チームメンバーは id:t_kyt と id:mechairoi。 去年も予選敗退していて、最近LINE社に行ってないな~と思っていたので今年は勝ちたかった。今年もはてな京都オフィスで予選に参加。 事前の作戦が大事なので、「コミュニケーションが大切」「マニュアルを読む」を確認した。 だいたいハマり出すとコミュニケーションが減ったり同じことをやりだしたりしてチームとしての効率が下がってしまうので、一時間ごとにタイマーを鳴らしてそこで話そう、という作戦を立てていた。あとは alp と pprof と pt-query-digest でボトルネックを見ていくというシンプルな戦略。 あと、1日目の結果

    ISUCON9予選敗退(H::W::A::Abyss::Abyss::Abyss) #isucon - 詩と創作・思索のひろば
    gfx
    gfx 2019/09/10
    "パスワードを平文で保存するのはレギュレーション違反である" / ベンチマーカーからは検出しようがないけど、ウェブアプリとしてそれはやっちゃいけないよねってことでレギュレーションになってるのか。
  • Ether を送金した人だけコンテンツを閲覧できる Ðapp を書いた - 詩と創作・思索のひろば

    Ethereum はブロックチェーン上でアプリケーションを動かせる(スマートコントラクト)ってので興味を惹かれて、どんなことができるのか調べてたんだけど、感じを掴むために一つ書いてみた。 やりたいことは、ウェブページに送金ボタンがあって、そこから特定のアドレスに Ether を送金し、送金が確認されたら秘密のコンテンツをページ上に表示する、てなもの。送金の確認はスマートコントラクトで行えるが、秘密の情報をブロックチェーン上に記録するわけにはいかないのでこれはウェブサーバに秘匿することになる。とすると、ウェブサーバに私はこの Ethereum アドレスです、とセキュアに伝えてやる必要がある。後で書くけど、あまりいい解法ではない。 知識ゼロの状態から分からないことを潰しつつなんとか動くところまでこれたので、ウェブアプリケーション開発者がつまづいたところをメモっとく。 デモ MetaMask W

    Ether を送金した人だけコンテンツを閲覧できる Ðapp を書いた - 詩と創作・思索のひろば
    gfx
    gfx 2018/03/08
  • GraphQLのレスポンスJSONに対応するstructからクエリを生成できるgo-graphql-query - 詩と創作・思索のひろば

    このあいだ GitHub が公開していた GraphQL API が便利そうだったので使おうと思ったのだけど、求めたライブラリがなかったので作った次第です。 ここで GraphQL についての説明はしませんが、結果の JSON とクエリが同じ形を持っているのが便利で美しいですね。ということは API の結果の JSON を受け取る struct から GraphQL のクエリが生成できるのが自然でしょう。そういうことをやってくれるシンプルなライブラリです。 GitHub - motemen/go-graphql-query API シンプルな例 ディレクティブとエイリアス 引数と変数 インラインフラグメント 複雑な例 軽い気持ちで書きはじめたところ GraphQL に予想外の表現力があることがわかったのでけっこう無理をしているところもあります。一般的にどんな使い方がなされるのかわかってない

    GraphQLのレスポンスJSONに対応するstructからクエリを生成できるgo-graphql-query - 詩と創作・思索のひろば
    gfx
    gfx 2017/06/06
  • GoogleカレンダーとSlackステータスをワンクリックで連携できるアプリをGoogle Apps Scriptで書いた - 詩と創作・思索のひろば

    Googleカレンダーで現在進行中のイベントをSlackステータスに反映させるようにしておくと、チームメンバーに、移動中や不在やミーティング中といった状況を自然に共有できるので便利ですね。そのように設定している人も多いと思います。 似たアイコンが並んでいるように見えますが一方はモザイクです 巷では Google Apps Script でこの連携を行うような方法が公開されていて、自分でも書いて使ってました。これは一度動かしてしまえば大変便利なんですが、インストールの方法はけっこう面倒で、非エンジニアをふくめ会社のみんなに薦めるには少しハードルが高い。 そこで、Google Apps Script を用いて、(初回のインストール手順を除いて)ワンクリックで Google カレンダーと Slack ステータスの連携を行えるウェブアプリを作りました。 GitHub - motemen/gas-g

    GoogleカレンダーとSlackステータスをワンクリックで連携できるアプリをGoogle Apps Scriptで書いた - 詩と創作・思索のひろば
    gfx
    gfx 2017/05/16
  • はてなの3代目CTOに就任しました - 詩と創作・思索のひろば

    はてな退職の辞 - stanaka's blog にある通り、id:stanaka の引退に伴い、2016年8月1日付で私の勤務する株式会社はてなのCTOに就任いたしました。初代のはてなCTOが id:naoya でしたので、3代目のCTOということになります。 はてなで働きはじめたのは2006年、アルバイトの学生としてでした。まだはてな社が東京にあったころの話です。もともとはてなはユーザとして使っていて、すごいエンジニアが面白いものを作っている憧れの会社だったのを覚えています。入社すると社内で使っているグループウェア(はてなグループ)のメンバーにしてもらいましたが、そのグループ日記やキーワードにそれまでのはてなのサービスづくりにまつわる議論ほかもろもろのログが残っていて、全てにアクセスすることができたのは印象に強く残る経験でした。 はてなが京都に社を移転した2008年より正社員とし

    はてなの3代目CTOに就任しました - 詩と創作・思索のひろば
    gfx
    gfx 2016/08/01
  • Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば

    5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止まってしまっていたで、家を掃除しているときに見つけたもの。その後も趣味Android アプリを書くなど Java に触れる機会はあったけれど、せいぜいが AsyncTask を使うくらいで、マルチスレッドを強く意識してコードを書くこともなかった。 Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua Bloch,Doug Lea出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/22メディア: 単行購入: 30人 クリック: 442回

    Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば
    gfx
    gfx 2016/05/31
  • 第三者のための『リーダブルコード』 - 詩と創作・思索のひろば

    新人エンジニアにオススメののひとつだよねー、などと言いつつ自身は読んだことがなかったので慌てて買って読んだ。 お題「リーダブルコードリーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典出版社/メーカー: オライリージャパン発売日: 2012/06/23メディア: 単行(ソフトカバー)購入: 68人 クリック: 1,802回この商品を含むブログ (131件) を見る なるほど当たり前のようなことでありながら短期的に意識して身につけるのは難しかったことばかりで、これがこのようにまとまった形の書籍になっていることはとてもありがたいことだと思う。規約を押しつけてるわけじゃなくて指針の集合なので、気楽さもある。 プログラム中で使用する英語動詞

    第三者のための『リーダブルコード』 - 詩と創作・思索のひろば
    gfx
    gfx 2016/04/06
  • 2015年に作ったもの20点(セルフレビューつき) - 詩と創作・思索のひろば

    いちおう振り返っておかないと 2016 年を迎えられないという心持ちになったので、全部ではないけど列挙する。また、作ってブログに書いたけど自分では使ってません、というのも無責任なので、現在自分で利用中かどうかも添える。 go-typeswitch-gen (Go、コマンドラインツール) Pocket Expose(Go、ウェブサービス) gore(Go、コマンドラインツール) goquickfix(Go、コマンドラインツール) lgtm.sh(シェルスクリプト) hub-pr(Go、コマンドラインツール) go-cli(Go、ライブラリ) google-apps-script.d.ts(TypeScript、型定義ファイル) Mackerel APIホスト名を補完(いろいろ) gobump(Go、コマンドラインツール) Goの簡易ベンダリングシェルスクリプト(シェルスクリプト) go-

    2015年に作ったもの20点(セルフレビューつき) - 詩と創作・思索のひろば
    gfx
    gfx 2016/01/05
    使ってるかどうかのステータスよい。真似しよっと。
  • git commit --fixup とは何か - 詩と創作・思索のひろば

    git commit --fixup というオプションの存在を最近知って調べた。 ヘルプとリリースノートより "git commit" learned the --fixup and --squash options to help later invocation of interactive rebase. Git v1.7.4 Release Notes --fixup=<commit> Construct a commit message for use with rebase --autosquash. The commit message will be the subject line from the specified commit with a prefix of "fixup! ". See git-rebase(1) for details. 1.7.4 から入って

    git commit --fixup とは何か - 詩と創作・思索のひろば
    gfx
    gfx 2015/10/19
  • コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば

    タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気をお察し下さい。 (スクリーンキャストは cho45/KeyCast を使って撮影しました) 特徴 gore の特徴は以下の通りです。 ラインエディタと履歴 複数行入力 パッケージのインポート、補完つき 式および文を実行可能 コード補完(nsf/gocode を利用) プリティプリント(k0kubun/pp か davecgh/go-spew がおすすめ) ドキュメントも引ける(godoc が必要) 以上のように、非常に便利なものになっております。むしろこの程度 REPL には当然あってほしい機能だとも言える。 イン

    コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば
    gfx
    gfx 2015/02/19
  • Git の diff を美しく表示するために必要なたった 1 つの設定 #git - 詩と創作・思索のひろば

    Git に同梱されている contrib/diff-highlight を使います。 あとは README に書いてあることの引き写しですが、PATH の通ったディレクトリに置いて、~/.gitconfig に以下のように設定を書く。 [pager] log = diff-highlight | less show = diff-highlight | less diff = diff-highlight | less すると、対応するコマンドの出力がこんな風になります。 行レベルの diff に加えて、単語レベルでの diff もハイライトされ、GitHub での diff のように描画されました。 組み込みのオプションで --color-words というのがありますが、こちらを使うと行レベルの diff 情報が失われるので、少し不便だったわけですね。とすべて README に書いてあ

    Git の diff を美しく表示するために必要なたった 1 つの設定 #git - 詩と創作・思索のひろば
    gfx
    gfx 2013/11/26
  • 1