ポピュラスみたいなゲームがやりたくて探していたら Godus というのを見つけたのでプレイしてみました。
ヒーター・モリニューの最新作でまだベータ版らしいです。
ポピュラスみたいなゲームがやりたくて探していたら Godus というのを見つけたのでプレイしてみました。
ヒーター・モリニューの最新作でまだベータ版らしいです。
とりあえず一通り見終わりました。
第一話の段階で特に目を引いたものはありませんでした。
最近、伊藤園の緑茶のティーバッグを色々試しています。これまでに次の三種類を飲みました。
どれも十分美味しいと思います。味の評価としては、
深蒸し=ぞっこん>抹茶入り
という感じですね。価格相応です。
抹茶入りは伊右衛門みたいな味がします。いかにも抹茶でごまかされたという感じがしてしまいますが、安いことを考えれば妥当かもしれません。
ぞっこんは最近ペットボトルのおまけでティーバッグが付いていたので、飲んだ方も多いと思います。とにかくまろやかさを前面に出したような味ですね。
深蒸しはちゃんと深蒸し茶っぽい香りと味がします。綺麗な緑色、強い甘みと弱めだが確かに感じる渋みのバランス。
どれを買っても後悔はしないと思います。
個人的にはやっぱり普段から飲み慣れている深蒸し茶が好きかなぁ。
深蒸しだと20袋で36gと書いてますね。お茶屋さんで1000円/100gくらいで買った方が安いのですが、いつも全部飲みきる前に悪くなってしまうので、それを考えるとそんなに高くはないのかも。
Amazonで見かけて最初の数ページ読んでみて、続きが気になったので購入しました。
なかなか読ませるじゃないですか。ちゃんと魔法使いの弟子の成長物語になっています。最後まで一気に読んでしまいました。
物語中では「オートマトン」とかその手の専門用語は極力出てこないようになっていて、物語中の設定に従った用語に置き換えられています。
なので知識の無い人でも小難しい単語に翻弄されることはありません。
一応巻末で物語中に出てきた概念と計算理論での概念との対応付けや、それについて詳しく学びたい場合の参考文献が紹介されています。
私はこのあたりの理論は大学や独学で少しかじったり、プログラミング言語などを製作する上で必要な部分を多少知っていたりするだけですが、物語を読みながら「ああ、これはε遷移のことを言ってるんだな」とか記憶を呼び起こされながら読みました。
でもそういう知識が無くても普通に物語として読めるのでは無いかと思います。
後半になるにつれて少し難しくなっていきますが、そういう所は適当に流して読んでも問題ないと思います。
時間があれば、主人公が直面する問題について一緒に解きながら読んでみても面白いかもしれません。
この手の抽象的な理論は、身近な応用と結びつけるとより分かりやすくなると思うのですが、そういった例は自動販売機の例くらいでしょうか。
そういう例がもっとあると、読んだ後にもっとスッキリするのかなぁと思いました。
少し疑問に思ったのは、偽クフ語と万能機械について。偽クフ語の詩集は万能機械に入れる命令を表しているということだと思うのですが、それは偽クフ語をそのまま万能機械に入力すると言うことなのでしょうか。万能機械は、入力された偽クフ語を構文解析して実行する?
偽クフ語は、作中において手作業で解析をしていましたが、字句の区切りを見つけるのが難しく、また、かなり曖昧な部分が出る言語です。
なので、実際に万能機械を作るとしたら、どのようになるのだろうというのが気になりました。
おそらく命令として有効な文にはさらなる制約があるのでしょうね。
GIGAZINEで紹介されてた冷やし味噌ラーメンを食べてみました。まぁ、普通のコンビニの冷やし麺かなぁ。
食べログ評価4.1を超えるラーメン店麺屋 彩未監修の「冷し味噌ら~めん」をローソンで買って食べてみた - GIGAZINE
JavaScriptでHTML5のAudio要素を使う方法について、軽くおさらいします。
仕様書:
WHATWGとW3Cの関係とかバージョン違いとかありますが、リンク先が変わってしまうと嫌なので以下ではW3CのCRへリンクします。
[NamedConstructor=Audio(), NamedConstructor=Audio(DOMString src)] interface HTMLAudioElement : HTMLMediaElement {};
DOM的には new Audio(url)
(urlは省略可能)という形で HTMLAudioElement というインタフェースを持つオブジェクトを生成できます(他にもdocument.createElement("audio")という形で生成できたりもします)。
HTMLAudioElementインタフェースはHTMLMediaElementを継承しただけのものなので、具体的な中身(メソッドやプロパティ)についてはそちらを参照します。
Audioの場合、基本的な使い方は次のようになるでしょうか。
部分的なループは難しそうです。厳密でなくても良いのならtimeupdateイベントを使ってできると思います。
イベントの一覧については 4.8.10.16 Event summary に書いてあります。
仕様書を読んでみるともっと詳しく面白いこと書いてあります。
少し変わった構成の曲ですよね。最初は軍歌っぽい部分がイモっぽいなぁと思っていたのですが、カッコいい部分もあって何度も聞いているうちにやみつきになりました。
私も「もぅそぅシドニッアッ」と聞こえた口ですが、歌詞カードを見てはじめてなんと言っているのか知りました。うーん、まぁ、納得。
何となくヒロイックエイジのOPを思い出したり。歌い手と宇宙ものというくらいしか共通点はありませんが。
今日は朝から雨。
当分は雨が降りやすい天気が続くようです。
速報では今日ごろから梅雨入りと考えられるみたいです。
雨対策を十分して出かけましょう。
PCを増やして配線を色々いじるのが面倒だったので、VirtualBoxにWindows8.1 Updateを入れることにした。
幸いVirtualBoxの方ではすでに8.1に対応済みで、ゲストOSの種類として8ではなく8.1を指定すれば問題なくインストールできた(間違えて8を選んだらエラーが出て進まなかった。あとBIOS設定でIntel VTを有効にしておくこと)。
初期ユーザはローカルアカウントで作った。Microsoftアカウントで初期ユーザーを作ってしまうと、ユーザ名やユーザフォルダ名が汚らしいものになってしまうので。しかし8.1では8にはあった「Microsoftアカウントを使わずにサインインする」が最初の選択肢に表示されなくなっている。しかし諦めるべからず。「新しいアカウントを作る」を選択して「Microsoftアカウントの作成」の画面に行くと、下の方に「Microsoftアカウントを使わずにサインインする」という項目があるのでそれを選ぶべし。他にもネット接続を切ってインストールしたり、サインインにわざと失敗すると、この選択肢が出てくるらしい。なぜ最初からこの選択肢を出さないのか。
インストールが終わって再起動し、サインインすると、いきなりデスクトップが現れた。スタートスクリーンではない。よく分かっているじゃないか。
Windows8といえばスタートメニューの問題が有名だ。私はスタートメニューをキーボードで操作できるランチャーとして使用していたので、無くなるとやはり不便だ。下手なショートカットキーに割り当てるとEmacs等に支障を来すのでやりたくない(デスクトップに置いたアイコンのプロパティからCtrl+Alt+?が割り当てられるが、この組み合わせはEmacsでよく使う)。スタートメニューが無くなったのなら何か代わりになるランチャーでも探そうかなと思ったのだが、スタートメニューを復活させるアプリもいくつかあると聞いていたので、それを探してみた。
Windows8 でスタートメニューを取り戻す方法 - NAVER まとめ
なんか沢山あるみたい。結局どれが良いんだろう。海外の誰が作ったか分からないようなアプリをホイホイ入れるのも少し心配な昨今(今更だけど)。
秀丸スタートメニューにした。うん、私の用途ではこれで十分だ。
NMEからOpenFlになってずいぶん経ちますが、久しぶりに使ってみようと思いました。
OpenFlのサイト 右上にあるDownloadを選択して指示に従ってインストールすればOK。
Haxe、Lime、OpenFLの順にインストールする。
直接ダウンロードするのはhaxeのインストーラだけ。後はhaxelib経由でダウンロード&インストールできる。
lime.bat create openfl:project ExampleProject
ExampleProjectは適切なプロジェクト名を入れる。
生成されたExampleProject.hxprojやproject.xmlを適切に修正する。com.exampleやCompany Nameと書いてある部分を適切な物に変える。
試しに画面を余白10px空けて赤く塗りつぶしてみる。Source/Main.hxを次のようにする。
package; import flash.display.Sprite; class Main extends Sprite { public function new () { super (); graphics.beginFill(0xff0000, 1.0); graphics.drawRect(10, 10, stage.stageWidth-20, stage.stageHeight-20); graphics.endFill(); } }
lime.bat build html5
とか lime.bat build flash
とか。
(Cygwinのmakeから実行したいので.batを付けている)
html5なら cygstart Export/html5/bin/index.html
とか。
flashなら cygstart Export/flash/bin/ExampleProject.swf
とか。
(cygstartは引数で指定されたファイルをWindowsで関連づけられたアプリケーションで開くCygwinのコマンド)
Webブラウザでhtml5を表示したにせよデスクトップのFlashプレイヤーでswfを実行したにせよ、ウィンドウサイズを変更したときに右端や下端の余白が10pxで無くなってしまいます。
なので、リサイズされたらグラフィックスを変更するようにします。
package; import flash.display.Sprite; import flash.events.Event; class Main extends Sprite { public function new () { super (); resize(); stage.addEventListener(Event.RESIZE, function(e:Event){resize();}); } function resize():Void { // stage.stageWidth, stage.stageHeight変更直後の処理を書く。 updateBackground(); } function updateBackground():Void { graphics.clear(); graphics.beginFill(0xff0000, 1.0); graphics.drawRect(10, 10, stage.stageWidth-20, stage.stageHeight-20); graphics.endFill(); } }
試しに赤いボールを画面端でバウンドさせながら移動させてみる(超適当)。
package; import flash.display.Sprite; import flash.display.Shape; import flash.events.Event; class Main extends Sprite { public function new () { super (); // ボールを作る。 var ballShape = new Shape(); ballShape.graphics.beginFill(0xff0000, 1.0); ballShape.graphics.drawCircle(0,0,16); ballShape.graphics.endFill(); addChild(ballShape); var ball = { x:100, y:100, vx:4, vy:4, shape:ballShape }; // フレーム毎に移動させる。 addEventListener(Event.ENTER_FRAME, function(e:Event){ ball.x += ball.vx; ball.y += ball.vy; if(ball.x > stage.stageWidth){ ball.x = stage.stageWidth; ball.vx = -ball.vx; } if(ball.y > stage.stageHeight){ ball.y = stage.stageHeight; ball.vy = -ball.vy; } if(ball.x < 0){ ball.x = 0; ball.vx = -ball.vx; } if(ball.y < 0){ ball.y = 0; ball.vy = -ball.vy; } ball.shape.x = ball.x; ball.shape.y = ball.y; }); } }
(赤いボールはグラデーションで影を付けたかったのだけど、html5版のGraphics.beginGradientFillはまだ実装されていなかった)