abechanta

ソフトウェアエンジニア向けに記事を書きます。 ゲームメーカー勤務の雑食系ソフトウェアエ…

abechanta

ソフトウェアエンジニア向けに記事を書きます。 ゲームメーカー勤務の雑食系ソフトウェアエンジニアです。 ここ最近は裏方として、開発チームを支援するための開発をしています。 結城浩と中井悦司と Joel Spolsky を敬愛。

最近の記事

  • 固定された記事

技術書典 14 と Power Automate 入門書のご紹介

技術書典をご存知ですか? テックベース合同会社と事務局が運営している、技術書オンリーイベントです。 年 2 回のペースで開催されており、オフライン会場(@池袋)は毎回なかなかの賑わいを見せています。 運営による書籍の出版や販売に関する情報発信なども手厚く、未経験者も安心してサークル出展できます。 一般参加する側から見ても、技術書典は注目のイベントです。 ノウハウをぎゅっと一冊にまとめましたみたいな技術書が、手軽に入手できるのが一番うれしいです[^1]。 商業書籍では見られ

    • 全角と半角に挟まれたスペースを一括削除するには

      テキストファイルの単純加工には sed コマンドを使うこと。 Linux を学んだことがある人なら、そう習っていると思います。 テキストファイルが手元にあって、その中に登場するスペースをすべて削除してください。 そう言われたら、間違いなく sed の出番です。 # sed “s/ //g” <(cat before.txt) > after.txt しかしすべてのスペースを削除する代わりに全角文字と半角文字に挟まれたスペースだけを削除したい、としたらどうでしょうか。

      • ゼロからはじめるスクリプト言語製作: リフレクションをもっと極める(21日目)

        前回の実装によって、ユーザーは任意の .NET クラスを指定し、生成することができるようになった。生成したインスタンスのメソッドを呼び出すこともできるので、.NET ライブラリを活用した記述が可能になった。 今回は .NET ライブラリの活用における細かな制約について触れながら、それぞれを取り除いていき、.NET ライブラリを最大限活用できることを目標にした。 Int32 以外の整数型引数を含むメソッドを呼び出せない問題 前々回の記事で、引数に整数型を求めているメソッド

        • ゼロからはじめるスクリプト言語製作: オブジェクト操作とリフレクション(20日目)

          前回は .NET 言語のリフレクション機能を利用して、String 型のメソッドやプロパティーへのアクセスを実現した。またスクリプト言語に objectv 型を導入して、.NET オブジェクトを保持できるようにした。 今回はメソッドやプロパティーへのアクセスを一般化させて、String 型だけでなくユーザーがプログラミングしたすべてのオブジェクト型の操作をリフレクションで利用できるよう、改良を加えていこう。 新たなインスタンスの生成 前回の実装で Type.Invoke

        • 固定された記事

        技術書典 14 と Power Automate 入門書のご紹介

        • 全角と半角に挟まれたスペースを一括削除するには

        • ゼロからはじめるスクリプト言語製作: リフレクションをもっと極める(21日目)

        • ゼロからはじめるスクリプト言語製作: オブジェクト操作とリフレクション(20日目)

          ゼロからはじめるスクリプト言語製作: 文字列操作とリフレクション(19日目)

          スクリプト言語製作もいよいよ終盤を迎えている。前回までの実装でプログラミング言語の基本的な文法や概念は実用レベルに達しているものの、定義されているシンボルについては不足がまだあるように感じている。 特に文字列の扱いについては 非常に雑な実装のままとなっているので、今回はこれを改善していこう。 一般的に文字列を操作する手段というのは、プログラミング言語側で潤沢に準備されていることが多い。例えば C# の String クラスには157ものメソッドがある。中にはニッチなものも

          ゼロからはじめるスクリプト言語製作: 文字列操作とリフレクション(19日目)

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する③(18日目)

          前回につづき、スクリプト言語製作の仕上げとして、やや実践的なプログラミング課題を解きながら、現状で欠けている機能の追加に取り組んでいこう。 今日は、プロジェクト・オイラーの第3問に挑戦だ。 繰り返しになるが、プロジェクト・オイラーのようなプログラミングによる回答タスクに対して、製作中のスクリプト言語が充分に機能を備えているかを確認することが真の目的である。 いま足りてない機能を求めて 製作中のスクリプト言語を駆使して、この問題を解いてみた。 あったら便利な機能、という

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する③(18日目)

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する②(17日目)

          前回につづき、スクリプト言語製作の仕上げとして、やや実践的なプログラミング課題を解きながら、現状で欠けている機能の追加に取り組んでいこう。 今日は、プロジェクト・オイラーの第2問に挑戦だ。 前回と同様、このプロジェクト・オイラーの目的はこれを(あなたが)プログラミングによってコンピューターに回答させることにある。 いま足りてない機能は何だろうか 早速、製作中のスクリプト言語を使い、この問題を解いてみた。 ↓以下のスクリプトには脳内で好き勝手に妄想した、今日現在定義され

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する②(17日目)

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する①(16日目)

          前回の実装によって、ユーザーは制御構文を駆使して 処理を分岐させたりループさせたりすることができるようになった。過去に変数宣言や関数宣言にも対応できているので、すでにプログラミングにおける重要概念はカバーできていると思う。 今回からはスクリプト言語の仕上げに入っていこう。やや実践的なプログラミング課題を解きながら、現状では欠けている機能の追加に取り組んでいく。 ここでの「やや実践的なプログラミング課題」には、プロジェクト・オイラーを活用しようと思う。 どんな内容なのか。今

          ゼロからはじめるスクリプト言語製作: プログラミング課題に挑戦する①(16日目)

          ゼロからはじめるスクリプト言語製作: 分岐とループを実装する(15日目)

          前回の実装によって、ユーザーはコードブロックとローカル変数を駆使して 自由に計算ができるようになった。今回も、いくつかの代表的な制御構文に取り組んでいく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 > (if True 1 2)===> 1> (if False 1 2)===> 2> (if False 1)===> nil > ($ 'v 0)===> v> (while (< v 10)>>> (writeln v)>>>

          ゼロからはじめるスクリプト言語製作: 分岐とループを実装する(15日目)

          ゼロからはじめるスクリプト言語製作: コードブロックとローカルスコープを実装する(14日目)

          前回の実装によって、ユーザーは変数と関数を駆使して 自由に計算ができるようになった。今回からは、いくつかの代表的な制御構文に取り組んでいく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 > (do 1 null 2)===> 2> (break 3 null 4 null)===> nil> (which null 5 null 6)===> 5> (list 7 null null 8)===> 7 nil nil 8 > (le

          ゼロからはじめるスクリプト言語製作: コードブロックとローカルスコープを実装する(14日目)

          ゼロからはじめるスクリプト言語製作: 関数を定義する(13日目)

          前回の実装によって、ユーザーは変数を定義して 自由に計算ができるようになった。今回は、いよいよ関数の概念をスクリプト言語に組み込んでいく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 > ($ 'square (lambda (' v) (' * v v)))===> square > (square 5)===> 25 言葉で言い表してみると要件2は少々厄介に見えるかもしれないが、これは変数スコープの概念を示している。上述のとお

          ゼロからはじめるスクリプト言語製作: 関数を定義する(13日目)

          ゼロからはじめるスクリプト言語製作: 変数を定義する(12日目)

          前回の実装を終えて、ユーザーは算術演算や論理演算を自由に組み合わせた計算ができるようになった。今回は、計算の幅を大きく広げるために欠かせない、変数の概念をスクリプト言語に組み込んでいく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 > (' 1 2 (+ 1 2))===> 1 2 (+ 1 2)> (writeln 'x 'y 'z)x y z===> nil > ($ 'x 5)===> x> (writeln (% x 5)

          ゼロからはじめるスクリプト言語製作: 変数を定義する(12日目)

          ゼロからはじめるスクリプト言語製作: 比較演算・論理演算を多彩に(11日目)

          前回、スクリプト言語の中で整数と浮動小数の算術演算に対応することができた。今回は、if による処理の分岐や for による繰り返しをサポートする際に欠かせない、比較演算と論理演算について取り組んでいく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 > (writeln (== "hello" "Hello") (== false true) (== 1 1. (+ 1 1)))False False False===> nil> (w

          ゼロからはじめるスクリプト言語製作: 比較演算・論理演算を多彩に(11日目)

          ゼロからはじめるスクリプト言語製作: 浮動小数の演算を多彩に(10日目)

          前回ようやく、スクリプト言語の中で整数の算術演算(四則演算と剰余)に対応することができた。今回も算術演算について取り組むが、今回は整数だけでなく浮動小数にも対応していく。 ということで今回の実装ゴールを以下のように課して、実装を進めていくことにしよう。 <使用例>(+ 1 2 3) ===> 6(+ .1 .2 .3) ===> 0.6(+ 1 2 (+ .1 .2)) ===> 3.3 <使用例>(- 1. 2 3) ===> -4(* 1.6 1.6) ===> 2

          ゼロからはじめるスクリプト言語製作: 浮動小数の演算を多彩に(10日目)

          【NVIDIA GTC 2022】新着情報ふりかえり

          NVIDIA 社が主催している AI と HPC 分野のカンファレンス「NVIDIA GPU Technology Conference 2022 秋」が 9/20~9/22 開催され、その中で恒例となっている NVIDIA 代表 Jensen 氏の基調講演が公開されました(日本時間 9/21 00:00~)。 基調講演の中ではエンジニアリングにおける最先端のブレイクスルーがたくさん紹介されていて、いつもながら とても多くの刺激や発見がありました。この記事ではゲーマー目線&

          【NVIDIA GTC 2022】新着情報ふりかえり

          ゼロからはじめるスクリプト言語製作: 整数の演算を多彩に(9日目)

          前回までで、S 式の基本的な評価が完成している。 今回はユーザー入力で呼び出せるスクリプト関数を増やして、整数演算のバリエーションを豊かにしていこうと思う。 まずは加算 前回「+」というシンボルを追加した。そのコードを提示していなかったので、Core.cs にある add() を↓以下に提示しておこう。 public delegate void reducer1<T1, TV>(T1 other, ref TV val); public static expr r

          ゼロからはじめるスクリプト言語製作: 整数の演算を多彩に(9日目)