あおみかんのブログ

フリーランスのIT系エンジニア。つくば在住。

科学×中学生がテーマなノベルゲーム「EVERETT EFFECT」 開発途上版 "interpretation" 公開予定

f:id:akn_ep:20160729005618j:plain

everett-effect.com

僕がシナリオとか演出とか企画全体の概ね半分くらいをやっている「EVERETT EFFECT」というゲームの開発途上版を5月6日に東京ビッグサイトで行われるコミティア120にあわせて公開します。

ノベルゲーム部公式ページ

ノベルゲーム部、という名前のコミティア部活動の一員としての出展です。

ブースは K04b Sapience です。よろしくおねがいします。

Mac OSXでRPGツクール2000製のゲームを遊ぶ(EasyWine+IPAモナーフォント)

RPGツクール2000や2003の時代、名作フリーゲーム多いですよね。

久しぶりにやりたい作品があったので、手元のMacで動くようにしてみました。

ちなみに、クリアまでやった訳じゃないので、もしかしたらセーブデータの扱いとかでおかしくなることがあるかもしれないです!

2003とかでも似たような感じで動く気がします。まだやってないのですが、上手く行った/行かなかった人がいたらコメントください。

1. EasyWineのインストール

以下のページを参照。 NAVERまとめが公式配布先っていうちょっと変わり種ですね。

🍎 EasyWine.app 🍷 - 😃 mattintosh note 📝

2. RPGツクール2000RTPのインストール

2000時代はRTP同梱は稀ですよねー…ってことで。

RTPをダウンロードして、インストーラーのexeを開くだけです。

もしexeが他のソフトに関連付いてしまってる場合は、副ボタンクリック(二本指とかCtrl+クリックとか)からeasywineを選んで開く。

3. IPAモナーフォントのインストール

以下のサイトからIPAモナーフォントを持ってきてインストール

各ファイルを開くとFontBookが開くので、流れに従えばインストールできるかと。

IPAモナーフォント

4. user.cfg の編集

レジストリ編集。しないと文字が汚くて遊べたもんじゃない。

参考サイトによると、IPAモナー明朝は下が途切れちゃうから明朝もゴシックにした方がいいとあり、 やってみたら確かに途切れちゃったので僕もゴシックにしてみました。

ここのやり方は、以下の通り。

  1. Finderで適当なウィンドウを開いて Cmd+Shift+G でフォルダ移動ダイアログを開く
  2. ~/Library/Caches/Wine/prefixes/default/ と入れて開く
  3. user.cfg というファイルがあるので、CotEditorなどで開く
  4. [Software\\Wine\\Fonts\\Replacements] と書かれたエリアに以下の内容を書き足す
"MS Gothic"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"MS Mincho"="IPA \x30e2\x30ca\x30fc \x660e\x671d"
"MS PGothic"="IPA \x30e2\x30ca\x30fc P\x30b4\x30b7\x30c3\x30af"
"MS PMincho"="IPA \x30e2\x30ca\x30fc P\x660e\x671d"
"MS UI Gothic"="\x30d2\x30e9\x30ae\x30ce\x4e38\x30b4 Pro W4"
"\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"\xff2d\xff33 \x660e\x671d"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"\xff2d\xff33 \xff30\x30b4\x30b7\x30c3\x30af"="IPA \x30e2\x30ca\x30fc P\x30b4\x30b7\x30c3\x30af"
"\xff2d\xff33 \xff30\x660e\x671d"="IPA \x30e2\x30ca\x30fc P\x660e\x671d"

尚、念のためuser.cfgのバックアップを取っておいた方が安心です。

参考:

参°ぼっくす: Mac上のWineでRPGツクールのゲームを動作させてみる

🎮 Mac で『Ib(イヴ)』をプレイする 🍎 - 😃 mattintosh note 📝

GAE/Goの基本的な設定の覚え書き

Go言語は昔(1.4まで?)はパッケージ管理の標準的な仕組みがなくて、1.7あたりでvendorディレクトリを必ず読むようになったらしい。 デファクトスタンダードは、今の所glideというものらしい。 godepsも良いみたいだけど、個人的に何となくglideの方が扱いやすく思えたので。

GOPATHを指定する必要があり、僕はautoenvを使う事にしたけど、何にせよこの後のプロセスを踏む前に必ず、作業ディレクトリがGOPATHに含まれてるようにする。

echo $GOPATH
/Users/akn/go:/Users/akn/Documents/TimeCard/time-card-gae

普通の $PATH と同様 : で区切っていいらしい。

で、とにかくディレクトリ構造が肝心。僕はこんな風にした。(srcなしとかも試したけど、srcがないと上手く動作しなかった)

your-app-dir
└── src
    ├── app.yaml
    ├── glide.lock
    ├── glide.yaml
    ├── main.go
    ├── server
    │   └── server.go
    └── vendor

主要なファイルの中身を晒しておく。

app.yaml

application: my-app
version: 0
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

nobuild_files:
- vendor

skip_files:
- vendor/.*$

main.go

package main

import (
    "server"
)

func init() {
    server.Start()
}

良く分かんないんだけど、main.goから直接vendor以下のを読みに行くと上手く行かなかったので、server packageを定義して、そっちから読むようにしてる。

あとは以下で開発

goapp serve

もしくはデプロイ

goapp deploy

これだと覚え書きすぎて分かりにくいので、丁寧めの記事へのリンクを貼っておきます。 ただし、僕は goenv を使って app/srcでディレクトリを分ける方法はCan’t findとか言われてライブラリが読まれず、上手く行かなかった。

www.freegufo.com

qiita.com

qiita.com

Refile+S3のpresignにSwiftからダイレクトにアップロードする

画像等のファイルをS3(とかのクラウドストレージ)に置くのが当たり前になってきた昨今、クライアントから画像をアップロードするときにアプリケーションサーバーを経由するのは、そこからさらにS3に挙げるという点ではムダ。

この改善方法として、クライアントサイド(ブラウザやネイティブアプリ)からS3に直接アップロードして、アプリケーションサーバーには「ここに置いといたよ」とだけ伝える方法がある。 このアプローチは、特にherokuのようなアプリケーションサーバーに負荷をかけたくない環境では高い効果を発揮する。

で、このエントリの対象読者は、上の文で何が言いたいか分かってくれる人。

そうじゃない人は、諦めてアプリケーションサーバーに頼ってCarrierWaveかPaperclipの安定版を使う事を強くオススメする。

さて本題。

CarrierWaveの後継と噂される(同じ人が開発している)Rails向けの画像取り扱いgemのRefileというのがある。まだ安定バージョンではないし、Rails5系に組み込もうとするとSinatraとrakeのバージョンがぶつかってしまったり面倒が多いが、設計はCarrierWaveよりもさらに洗練されているっぽい。

GitHub - refile/refile: Ruby file uploads, take 3

Refileにはdirect uploadとPresigned uploadsという機能がある。(大文字小文字はREADMEに倣った)

direct uploadはフォームをsubmitしようとしたときにファイルを1個ずつRails側に送って、それが完了してからフォームをsubmitする方式。

Presigned uploadsは、上記で言ったS3に直接上げる方式。

Refileでは、Javascriptからのアップロードのみ実装されているので、これをSwift側で実装する。

ざっくり言えば refile/refile.js at master · refile/refile · GitHub の移植。

// まずはpresign情報を取得する
request("https://example.com/attachments/cache/presign").validate().responseSwiftyJSON { (presignResponse) in
    // ※エラー処理は自分で書いて下さいね。 switchで .Success / .Failure 分岐するのが個人的には好き。
    let url = presignResponse.value!["url"].stringValue
    let fields = presignResponse.value!["fields"].dictionaryValue
    let asName = presignResponse.value!["as"].stringValue
    
    Alamofire.upload(multipartFormData: { (multipartFormData) in
        
        for (name, value) in fields {
            multipartFormData.append(value.stringValue.data(using: .utf8)!, withName: name)
        }
        
        // 以下のNSDataを用意する部分もお好みで。 UIImagePNGRepresentation を使っても良いし、拡張子などで分岐しても良い。
        let image = UIImage(named: "image1.jpg")!
        let imageData = UIImageJPEGRepresentation(image, 1.0)!
        
        multipartFormData.append(imageData, withName: asName)
        
    }, to: url, encodingCompletion: { (encodingResult) in
        // ここにもAlamofireのドキュメントを参照してエラー分岐等を書く必要があると思います。
        print("uploaded")
    })
}

ここで得たデータをPOSTやPUTしてruby側でActiveRecordに渡してやる必要があるけれど、そこはまだやってないので追記するつもり。

ちなみに現状のGemfileの中身はこんな感じ。

tagすら切られてない中途半端なバージョンなので、不用意にバージョンが上がってバグらないように一応refを固定。

gem 'rails', '~> 5.0.1'

# Refile (最新版, unstableなので依存解決のために無理して入れてます)
gem "refile", require: "refile/rails", github: 'refile/refile', ref: 'd7a42dcd7c'
gem "refile-mini_magick"
gem "refile-s3"
# Refileのために以下が必要っぽい
gem "sinatra", github: "sinatra/sinatra", tag: "v2.0.0.beta2"

そういえば、全然関係ないんですが、最近Skyrimにハマってます。めっちゃ面白いですね。

JWTで認証するGem「Knock」でRSA認証する

Knockのデフォルトは secret_key_base を使ったHMAC using SHA-256らしい。

つまり、公開鍵暗号じゃないので、クライアントサイドで自由に中身を見れるというJWTの利点を半分失ってる(安全性については問題ないと思うけど…)

(追記)…と適当な事を書いてたら補足を頂きました。その通りですね! @koniyan ありがとう。

※この辺とても難しいし、僕は暗号の専門家じゃないので、重要なプロジェクトで使う場合は、鵜呑みにしないで裏を取ってくださいね。

で、このメモで書いておきたいのは、KnockでRSA認証する方法。ただそれだけ。

まず、g knock:install で生成される knock.rb の各項目に以下のような感じで書く。 File.readにしてるけど、ENVに設定すればENVから引っ張り出しても良いと思う。(ENVに改行入れる手段とかは知らない…)

# knock.rb
config.token_signature_algorithm = 'RS256'
config.token_secret_signature_key = OpenSSL::PKey.read(File.read(Rails.root.join('keys','jwt-private.pem')))
config.token_public_key = OpenSSL::PKey.read(File.read(Rails.root.join('keys','jwt-public.pem')))

で、以下のコマンドで鍵ペアを生成する。

openssl genrsa 2048 > jwt-private.pem
openssl rsa -in jwt-private.pem -pubout -out jwt-public.pem

あとは所定の位置にpemファイルを置いておくだけ。 クライアントサイドで複合したい時は、jwt-public.pem を誰でも見れるところに置いておくなりして、複合すればOK。お手軽。

特に分かりやすい利点としては、複合したトークンのexpをチェックするだけで期限がチェックできるので、トークンの延長をすべきか否かの判断とかが手軽にできる。とか。そのへん。

いばらきクリエイターズハウスの次期入居者募集が開始になりました

僕が4th clusterの活動でお世話になっている県の事業「いばらきクリエイターズハウス」が、新しい入居者を募集することになりました。

www.i-contents.jp

せっかくなので、ちょっと使い勝手とかについて紹介してみようと思います。

これは、あくまで一期生である4th clusterのメンバーとしての僕の個人的な感想なので、もしかすると間違いが含まれているかもしれません。鵜呑みにしないようにお願いします。まだ立ち上がったばかりの企画ですから、廃止される制度や、変更される制度もあると思います。

個人的には、この記事を公開することで、入る事で自分にとってメリットがある人が尻込みせずに入れると良いな、と思ってます。

立地

立地は、そんなに良くないです。東京が日本の中心だと思っている人からすると、もの凄く悪く感じると思います。 つくば駅からの移動には「松代循環」というバスを使うことになります。バス停からは徒歩10分程度なのは少し救いですね。 僕としては、立地が悪いから逆に目の前の仕事に集中出来るって言うのもあって、悪くないと感じています。

近場にスーパーマーケット(※21時閉店)があったり、そこに100円ショップが入ってたり、少し行くとハナマサがあったりするので、最低源の昼食調達には困らないです。

あと、すぐ裏に運動公園(グラウンド?)があるので、日曜日や平日の夕方は野球練習の声が聞こえてきて、割とうるさいですね。これは、ちょっと残念。 …まぁ、音楽をガンガンかけてると気にならないですし、僕が人の声に過敏なだけっていうのもあります。 それに、都会の喧噪に比べればかなり静かです。

建物

建物はちょっと古いですが、バブルの時期にコンクリートもりもりで建てたゴツいRCなので、割とイイカンジです。 冬場の水回りは寒いんですが、個室はファンヒーターで暖めれば割と快適です。

窓が薄めなので、気になるようなら防寒シートとか貼ったりカーテンを取り替えたり、まぁ普通の家と同じ様な対策をするといいです。

ウォシュレットとかはついてないです。勝手につけることも物理的には可能そうですね。

当然ですが、家電類は備え付けではないので、自前で用意する必要があります。

制度

いろいろと支援制度があります。フリーランスのデザイナーさんだったら、県からの案件を紹介して貰えたり、僕らみたいな立場だと出展の支援が貰えたりします。

お金

家賃は無料なんですが、水道光熱費とかがかかります。月に1万〜2万程度を見ておけば足りると思います。

あと、ネットは自前で用意する必要がありますね。

他の入居者との交流

サイトを見ると分かるんですが、第一期は「理系バンド」から「イラストレーター」まで、さまざまなクリエイター(のたまご)がいました。交流はそこそこありましたが、これは次期入居者のメンツ次第で変わりそうですね。 良い空気を作ってくれると、第一期入居者としては、嬉しいです。

まとまらない

まとめを書こうと思ったけど、五月雨式だったのでまとまりませんでした。もう眠いし、この辺で終わりにしようと思います。

クリエイターズハウス、有用な人にとってはめっちゃ有用だし、そうじゃない人にとっては役に立たないです(当たり前だw) 気になっている人は、現地に見に来てみたり、僕にコメント欄で相談してみたりすると良いかもしれませんよ。

ClipMenu, Clippy がハングアップするので Pastebot に乗り換えたら神だった

クリップボード管理アプリで ClipMenu や、その思想を受け継ぐClippyがありますが、僕の環境だと度々CPUが100%に張り付きます。

何かないかなーと思っていたら、Tweetbotなどで有名なチームTapbotsが、Pastebotというアプリを出してました。 かなり使いやすいのでオススメ。

Pastebot Beta