- 運営しているクリエイター
記事一覧
Cコンパイラを写経して4ヶ月が経ちました。わからないことが増えました。
Ueyama Rui さんという Google のエンジニアの方が書いている『低レイヤを知りたい人のためのCコンパイラ作成入門』というサイトがあります。これをやるのに 4 ヶ月かかりました。今回はその経緯とか今後の展望とかを話そうと思います。
結論だけ先に言うと、言語処理系のざっくりした全体図と C 言語の基礎知識をいい感じに獲得できて良かったです。また、こうしていわゆる低レイヤの技術に触れられ
『Rubyのしくみ -Ruby Under a Microscope』を読んだ所感と次に勉強するもの
冬休みの課題図書として『Rubyのしくみ』を読みました。もうとっくの昔に冬休み終わってるんですけど。大まかな理由は単純に「使っているプログラミング言語の中身を知りたい」という欲求からでした。
この本を読んで得た知見を以下の通りざっくり紹介したいと思います。
Rubyコードが実行される流れがざっくり分かった普段書いている Ruby のコードがどのように機械が分かるように変換されていくか(実際は
VSCode のオートフォーマットが実行されない時は "editor.formatOnSaveTimeout" の値を疑う
ある日突然!というわけでもないんですけど、なんか VSCode のフォーマットの調子悪いなあ…と思っていろいろ調べてみました。
保存時に実行するフォーマットのオプションはこれらが代表的かと思います。
{ "files.trimTrailingWhitespace": true, "files.insertFinalNewline": true, "files.trimFinalNewli
Slack のカスタム絵文字を一括でダウンロードする Ruby のスクリプト書いた
いくつかのワークスペースを行き来してると「あの絵文字とかもろもろ引っ越ししたいんだよなあ…」と思うことあると思います。いや知らんけど。
そこで、Slack のカスタム絵文字を一括でダウンロードするコード書いてみみました。これを実行すると実行したディレクトリに /emoji が作られ、そこに絵文字の画像が全部入ります。
こんな感じのコード# frozen_string_literal: true
docker-compose up 時にポート指定してもコンテナ内のデフォルト設定も上書きしないと意味ない
複数のプロジェクトを同時並行で開発している時、ローカルの Docker 環境のポートがかち合うことってよくあると思います。こういう時は素直に片方のコンテナを docker-compose stop で一旦止めてから docker-compose up し直すのも手ですね。めんどいですね。
そんな時は docker-compose.yml でかち合わない port を指定してあげればうまくいきます
localhost を https にする方法が結構簡単だった(Nuxt)
必要なのは mkcert とそれによって生成される証明書と鍵を nuxt.config.js に入れ込む作業だけ。
$ brew install mkcert$ mkcert -install$ mkcert localhost
この段階で、カレントディレクトリに localhost.pem と localhost-key.pem が生成されます。
それらを nuxt.config.js の
layout ファイルに書く nuxt-link のパスが子ページでずれてしまう問題はどうすればよいのだ
今簡単なポートフォリオサイトを Nuxt.js で作ってるんですけど、現状構成はこんな感じになってます。
pages/--| works/-----| illustrations-----| webgl-sandbox--------| index.vue--------| foo.vue--------| bar.vue-----| webgl-sandbox.vue
pages/works
WebGL でマウスクリックしたら点が描画されるやつ作った
『WebGL+HTML5 3DCGプログラミング入門: 第3章 はじめの一歩』読了しました。
マージしました!
今回第 3 章に沿って学習してきましたが、buffer をバインドしなくても gl.vertexAttrib3f, gl.uniform4f で直接座標をシェーダ側に渡せるの初めて知りました。
よく CodePen とかで見かける WebGL のコードでは、gl.bindBuffe
Base64のしくみを理解するためにRubyで実装してみる
Base64とは、A-Z, a-z, 0-9, +, / の64文字のみを用いてデータを表現するためのエンコード方式です。電子メールや Basic 認証なんかによく用いられているそうです。
さて、この Base64 という方式。プログラミングしていたらよく聞く単語だと思うんですけど、具体的にどんな処理をしているかまではちゃんと理解していませんでした。ので、今回中身の処理を理解するために Ruby
Nuxt で子ページ共通の layout を使う
/foo/:param みたいにあるディレクトリ配下でいろんなページを表示する場合に、そこだけ共通の layout を使いたいときの方法。と言ってもやることはめっちゃ簡単なんですが。
まずはディレクトリ構成から。
pages/--| users/-----| _id.vue-----| index.vue--| users.vue
ユーザー関連のページがあったとして、/users はトップペ
WebGL におけるシェーダの変数についてのメモ
WebGL は OpenGL ES 2.0 から派生した仕様で、シェーダの記述には GLSL ES が使われています。シェーダをざっくり説明すると、頂点の位置と色を変化させることです(自分はそう理解しています)。
シェーダには頂点シェーダとフラグメントシェーダの 2 種類があります。OpenGL の場合はもっと色んな種類のシェーダがあるっぽいです。でも WebGL の場合はこの 2 つ。
頂点
削除したファイルの削除 commit まで探索する git log のオプションがあった
あるファイルのヒストリーを追っていると、ある時点で削除されてその先がないことがたまにあります。いや、結構あります。
単純に削除されたのか、それともファイル名をリネームして中身はそのままなのか、 GitHub 上では確認できません(あるならどなたか教えていただきたい)。
そんなときにこのコマンド。
$ git log --all --full-history -- <path-to-file>
Rubyにおいて暗黙の型変換を試みるメソッドを探す(途中)
たとえば "hoge" + 1 のような処理をするとき、足す側の値が String でない場合、暗黙的に to_str メソッドを実行して String に変換しようとします。
これを暗黙の型変換と呼ぶらしいですが、 + 演算子以外でこのような裏の処理を行うメソッドって他に何があるのかな?ってのが気になりました。
気にはなったんですが、どこかにまとまっているとかはなさそう…。なので、るりまサー
最初の値がほしいだけなら String#unpack1 が良いかも
バイナリデータを含む文字列とかと特定のフォーマットに変換するメソッドとして、 String#unpack があります。返り値は Array なので、中身を取り出したいときは、.first とか [0] のようにもうひと処理必要になってきます。
ただ、返ってくる Array に一つしか要素を持たないことがわかっているなら、String#unpack1 を使うのもありかも。
OpenSSL::Di