Small Changes

週刊ニュース Lv11(2023年1月28日~2023年2月3日)


Metadata


1月28日(土)

特になし

1月29日(日)

Go言語で対戦シューティングゲームを作る1

  • 仕事でデジタルスペースで会議などができるGatherを使っていて、RPGのような2Dキャラクターが動いていてオンラインで同期させる仕組みなどが気になっていました。そのときは色々調べてみたものの結局どういう技術を使って実現させているかわかりませんでした。

  • そこからだいぶ時間が空いたのですが最近はGo言語をやっていてモチベーションがあがる教材はないかなと探していたらベストな記事を見つけました。

  • https://qiita.com/tashxii/items/75b99c32b024a1c06eb7

  • Go言語でWebSocketサーバーを立てて2クライアント間で対戦シューティングゲームを作るというものです。

  • Gatherと全く同じ技術ではないにしてもどのように同期を取るのか、ゲームはどんな仕組みがあれば作れるのか、そしてGo言語を実際にどう使っていくのかという自分のモチベーションを保てそうな教材でした。

  • この日はサーバーにアクセスしたらindex.htmlを返して、index.htmlが描画されるときにWebSocketサーバーに接続するという部分をやりました。

  • 初めて、GinやMelodyといったGo言語のライブラリに触れられてみたのですが面白いです。

1月30日(月)

rubyXLで入力規則を設定すると、特定の条件のときにExcelが壊れる

  • rubyXLはExcelを扱うときに便利なライブラリです。

  • Excelの知識がなくても扱いやすいように色々な処理をrubyXLがやってくれているっぽいのですが、rubyXLで生成したExcelを開く時に「一部の内容に問題が見つかりました」となって壊れてしまう不具合がありました。

  • ある程度前回調べた時にアタリはついていたもののExcel側の知識を必要とする不具合でした。

  • 下記のツイートは参考です。

  • 内容は違いますが、Formula1に記号が入ってしまうとうまくExcel側が読み込めないというものでした。Excelはunzipしたら実態はXMLになっていると先週学びましたがExcelの知識がないとXML側の<formula1>文字列</formula1>がどのように使われるのかとか全然わからないなーと思いました。Excelムズいです…

Go言語で対戦シューティングゲームを作る2

  • 参考コードで下記のようなコードが出てきたので調べました。

  • make(map[*melody.Session]*TargetInfo)

  • makeでmapを初期化

  • mapのkeyは*melody.Sessionです。これはmelody.Sessionのポインタ型です。

  • mapのvalueは*TargetInfoです。これはTargetInfoのポインタ型です。

  • もっと噛み砕くために型は組み込み型を使って理解してみます。

  • // mapのkeyはstring型のポインタ型です。
    // mapのvalueはint型のポインタ型です。
    x := make(map[*string]*int) // map[]
    
    // string型の変数を宣言
    var str1 string = "hello"
    // int型の変数を宣言
    var int1 int = 1
    // string型の変数str1のポインタを&をつけて引き出しそれをmapのkeyに指定
    // int型の変数int1のポインタを&をつけて引き出しそれをmapのvalueに指定
    x[&str1] = &int1
    fmt.Println(x) // map[0xc00009e020:0xc0000b4008]

  • 最後の結果を見ればわかるように最初にmap[*string]*intと宣言している*stringには、string型のポインタが、*intにはint型のポインタが代入できます。

  • これらのことから最初のコードはmelody.Sessionのポインタ型TargetInfoのポインタ型の組を保存するために宣言しているんだなーというのが読み取ることができました。

1月31日(火)

slack-notifierのattachmentはSlackのattachmentに対応している

2月1日(水)

早くプロダクトで売上を上げられるに頑張りたい

  • 今はMVPと同時並行でプロダクトを開発している感じなのでガンガンいろんな人に使ってもらうぞーというフェーズではありません。そのためお金を稼ぐプロダクトにはまだ遠い状況です。つまり、お金を稼ぐコードにもなっていないので自分が頑張って実装したコードも無駄になる可能性はまだまだあります。だからこそ、早く世に出してお金を稼ぐコードになって自分の頑張りが報われるように頑張りたいです。

2月2日(木)

google-protobufってリポジトリの構成が難しい

  • 大体のgemはgem専用のリポジトリがあるのでそのリポジトリのリリースを追っていればいいのですが、google-protobufはモノレポみたいな感じで一つのリポジトリで色々な言語の実装があり、Ruby実装もその一つです。

  • Ruby3.2のバージョンアップでgoogle-protobufのバージョンアップを追っているのですが、Ruby実装の元となる方はプレリリースされたみたいなのですが、まだRubyGemsを見る限りRuby実装のバージョンアップはきていないようです。

  • こういう構成のリポジトリはバージョンアップを追跡するのが難しいですね。

AWSの請求が500円きていた

  • 年始にAWSを無料で使いだしたのですが、無料の範囲を超えた部分の請求がありました。

  • EC2インスタンスは削除しておいたのにと思いながら見るとたしかにEC2インスタンスの請求ではありませんでした。

  • ECSインスタンスの料金ではなく、Elastic IPやNATゲートウェイでお金がかかってしまっていたみたいでした。

  • Elastic IPやNATゲートウェイって使われていなくて確保?しているだけでお金がかかるんですね…一旦削除したのでこれで来月は請求がこないはずです…

2月3日(金)

Go言語で対戦シューティングゲームを作る3

  • 少しずつ楽しくなってきました。

  • 参考コードはindex.htmlのscriptタグにjavascript直書きなのですが、モジュールに分割したいと思いやってみるとできました。今はすべてのブラウザがモジュールの仕組みを使えるんですね。(普段からフロント側は他のコードを見ながら雰囲気で書いているのがバレますね…)

    • JavaScriptには、モジュールという仕組みがあります。ECMAScript 2015のModulesの標準仕様として策定されており、現在はすべてのブラウザで利用できます。 https://ics.media/entry/16511/

  • そうなってくると今度はTypeScriptを使いたいなーとなってきたのですがいろんなライブラリを入れてガッチリではなく最小限で導入したいとなり、できるのだろうかと思っていたのですができました。ポイントはRequireJSを使うというところでした。HTMLとtypescriptのライブラリとRequireJSがあればTypeScriptの実行環境をつくれました。

  • ただ、今後はGinで静的ファイルをホスティングするのがうまくいかなくなりました。。

References