リリースしなければ、インディーズゲームはただのDLLだ。

  • リリースに至れるまでの脳内マイルストーン
    1. まず、ゲームのコア部分を作ってみる。
      • 面白さの核となる部分を、必要最小限の作りこみで。
    2. プラットフォーム周りを作る(スタート画面、コンフィグとか)。
    3. 1. と 2. を統合して、ゲームとしての体をギリギリ成すようにする。
    4. あとは、リリースできるレベルまで仕上げる。

最近の所感

  • いいものは、突然はできない。
    • こつこつ続けるしかない。
  • 年月は、あらゆるものを腐らせる。
    • 腐りにくいものを作りたいし、自分自身も腐りにくくありたいものだ。
    • 長く作り続けるものがあるなら、なおさら。
    • 十年前に自分がブックマークしたページのほとんどが死んでいたことから、ふとそう思った。
    • ソフトウェア自体はすぐ腐るが、アルゴリズムや考え方は(それほど)腐らないはず。
  • 英語とプログラミングさえできれば、ある程度、食うには困らないはずだ。
    • 英語人口は14億人らしい。日本語の10倍以上も吸収・発信効率がある。
      • 勉強しておいて損なことはないはず。
      • ただ、クッソねむくなる。

会社のPCでよくやるネットワーク設定の意味でも振り返ってみる

  • DNSサーバ
    • OSに設定する(正確には、ネットワークアダプタに対して設定する)。
    • これを設定しないと:
      • 例えば、ブラウザで「shanai.infla.co.jp」「google.com」などのページを表示しようとする。
      • するとブラウザは、OSにこのホストへの通信を依頼する。しかし、OSはIPアドレスが分からない※。結果、通信ができない。
        • DNSサーバは、それを教えてくれる。
        • ※: hostsファイルに記載があれば別。
  • プロキシサーバ
    • ブラウザに設定する。
    • これを設定しないと:
      • 例えば、各自のPCが直接「社外へのHTTP/HTTPS通信」を試みようとする。
      • しかし、その会社の(FW等の設定により)ネットワークが「社外へのHTTP/HTTPS通信は、プロキシサーバを介してのみ可能」という設定/運用になっていたとする。すると、これが不可能になる。
        • ブラウザにプロキシサーバが設定されていると、ブラウザはそのサーバを介して通信を行おうとする。
        • 実際にはプロキシ自動構成スクリプトにより、宛先によって複数のプロキシサーバを使わけていることもある。

勉強メモ2015

● セキュリティ
  • Sender Policy Framework
    • 受信側メールサーバが、「受信したメールが他のドメインになりすましているものではないか」を確認するもの。
    • 具体的には:
      1. 受信側メールサーバは、受信したメール中のエンベロープの中の「送信元IPアドレス」を調べる。
      2. 受信側メールサーバは、メールアドレスのドメイン(@以降の部分)について、送信元にDNS問い合わせをおこなう。
        • MXレコード→Aレコード→TXTレコード
      3. TXTレコードの "v=sfp1" 行(SPFレコード)に書いてある許可IPアドレスと一致していたら、正規のメールだと判断する。
      • そうでなかったら(許可アドレスにどれも一致しなかったら、すなわち拒否アドレス "-all" に一致していたら)、なりすましメールだと判断する。
    a-sha.co.jp      IN  MX   10 msv.a-sha.co.jp
    msv.a-sha.co.jp  IN  A    x1.y1.z1.4
    a-sha.co.jp      IN  TXT  "v=spf1 +ip4:x1.y1.z1.4 -all"  # ←「a-sha.co.jp から送るのは x1.y1.z1.4 だけやで〜」
  • DMZ
    • 宇宙船のエアロックみたいなもん。
      • 「非武装地帯」と聞くと、そこに入った時点で「安全ゾーン」みたいなニュアンスを自分は受けてしまうが、そうではない。
        • そうするためのものではあるが。
    • 公開サーバ群は、(FWをかませているとはいえ)グローバルなセグメントに晒されている。
  • リバースプロキシ
    • Webサーバを公開する際、クライアントに直接Webサーバにアクセスさせるのではなく、いったんリバースプロキシを介してアクセスさせるようにする。
      • リバースプロキシは、クライアントとWebサーバのやりとりを仲介する。
      • その名の通り、プロキシサーバみたいなことを、ダウンリンク側で行う。
    • こうすることで、たとえば「リバースプロキシをDMZに配置し、Webサーバを別の(内側の、守られた)セグメントに配置」することで、Webサーバをインターネットに晒さずに済む。
      • 仮にリバースプロキシが乗っ取られても、被害を少なくできる(Webサーバが乗っ取られたときと比べると)。
● ネットワーク
  • HTTPのメソッド
    • GET
      • ボディなし。
      • 基本的にはデータ受信用だけど、クエリ・ストリングで送信もできる。送信内容モロバレだけど。
    • POST
      • ボディあり。
      • レスポンスを返すのは、実は必須ではない(普通は、投稿後のページ情報とかを返すけど)。

ネットワークコマンドメモ

Windows編。

  • netstat -a
    • TCP(UDP)の状態(各ポートの LISTENING/ESTABLISHED とか)を確認する。
  • tracert <ホスト名>
    • 目的地までのネットワーク経路を表示する。
    • 疎通できてないときのトラシューとか、現状のルーティング状態の確認とかに使う。
  • nslookup <ホスト名>
    • ネームサーバへ名前解決の問い合わせを行うコマンド。
      • コンテンツサーバに対して行うもので、フルサービスリゾルバに対して行うものではないっぽい?
    • 参考:3 Minutes Networking No.67

C#勉強メモ

MSIL(Microsoft Intermediate Language) って?

  • 「特定のプラットフォームに依存しない、移植可能な命令のセット(アセンブリ言語)」。
  • MSIL は、その実行時に実行可能なコードに変換される(by JITコンパイラ)。
    • C#コンパイラの成果物は .EXE ファイルだけど、その実態(中身)は MSIL。
    • やろうとしていることは、Java バイトコードに似ている(厳密には違うらしいが)。
  • プログラマにとってのメリットは、「プラットフォームの依存性」を気にすることなくコードをコンパイルできる点。
    • 「プラットフォームの依存性」は、.NET Framework がきっと何とかしてくれる。

C#で、はろーわーるど

01: using System;
02: class Sample() {
03:     static void Main() {
04:         Console.WriteLine("Hello, World!");
05:     }
06: }
  • 01 行目:
  • 03 行目:
    • C#アプリケーションの実行は、必ず Main() を呼び出すことによって開始される。
  • 04 行目:
    • Console は、コンソール I/O をサポートする定義済みクラスの名前。

コードレビュー、自分用の心得(自分がレビュワー側の時)

  • 自分のことは(ひとまず)棚に上げる
  • 以下の観点を分けて考える
    1. コードの作法(きれいさ、読みやすさ)
    2. ロジックの正しさ
    3. 異常系のとき大丈夫かどうか

「良いコード」についての共通認識を持つと良いらしい。
うちのコードだと、どこのどんなコードがふさわしいだろうか?

インディーズゲームを世に出す気なら、少なくとも自己満足レベルを逸脱して、「面白い」か「壮快な」ものを作りたいですね。

  • でも最初は自己満足レベルでいいと思う。
  • それを最終的に「人に触ってもらって耐えられるもの」に昇華できればよいと思う。

コマンドプロンプトで時報

時報の音はBEEP音(制御文字)を使う。
1秒スリープだと判定を見逃すかもしれないので、0.5秒スリープでもいいかも。

@echo off
:HEAD

REM ----- 10分報
if "%time:~6,2%"=="00" (
  if "%time:~4,1%"=="0" (@echo ^G)
)

REM ----- 時報
if "%time:~6,2%"=="00" (
  if "%time:~3,2%"=="00" (@echo ^G)
)

timeout 1 >NUL
goto :HEAD

コマンドプロンプトで0.5秒スリープ

VBスクリプトの力を借りる。

まず、こんな感じでVBスクリプトのファイル (sleep500.vbs) を用意する。

if not exist sleep500.vbs (ECHO WScript.sleep 500 >sleep500.vbs)

そして、バッチ文中で以下のように書くと、その行で0.5秒スリープできる。

cscript.exe sleep500.vbs >NUL