Tipsの最近のブログ記事

OSXです。他のプラットフォームは試してません(・ω・)

例えばこんなディレクトリ構成で

$ tree .
.
├── a
│   ├── 1.rb
│   └── b
│       ├── 2.rb
│       ├── c
│       │   └── 3.rb
│       └── x -> ../../x
└── x
    └── y
        └── 4.rb

$ rvm use ruby-2.0.0-p247
$ ruby -e 'puts Dir.glob("a/**/*.rb")'
a/1.rb
a/b/2.rb
a/b/c/3.rb

ホントはa/b/x/y/4.rbも入って欲しい(・ω・)

StackOverflowにこんな事が書いてあった。

http://stackoverflow.com/questions/357754/can-i-traverse-symlinked-directories-in-ruby-with-a-glob

Dir.glob("**/*/**/*.rb")は、とてもいいかんじだけど、

$ ruby -e 'puts Dir.glob("a/**/*/**/*.rb")'
a/b/2.rb
a/b/c/3.rb
a/b/x/y/4.rb

$ ruby -e 'puts Dir.glob("a/b/**/*/**/*.rb")'
a/b/c/3.rb
a/b/x/y/4.rb

ここまではいいとして、次の場合はcの下が見つかって欲しい。

$ ruby -e 'puts Dir.glob("a/b/c/**/*/**/*.rb")'

次だと見つかるので。

$ ruby -e 'puts Dir.glob("a/b/c/**/*.rb")'
a/b/c/3.rb

次は惜しいけど重複して見つかる場合がある。

$ ruby -e 'puts Dir.glob("a/**{,/*/**}/*.rb")'
a/1.rb
a/b/2.rb
a/b/c/3.rb
a/b/2.rb
a/b/c/3.rb
a/b/x/y/4.rb


$ ruby -e 'puts Dir.glob("a/b/c/**{,/*/**}/*.rb")'
a/b/c/3.rb

uniqすれば期待通りの結果。

$ ruby -e 'puts Dir.glob("a/**{,/*/**}/*.rb").uniq'
a/1.rb
a/b/2.rb
a/b/c/3.rb
a/b/x/y/4.rb

$ ruby -e 'puts Dir.glob("a/b/c/**{,/*/**}/*.rb").uniq'
a/b/c/3.rb

MRIじゃないけどRubinusでこんなIssueを見つけた。
https://github.com/rubinius/rubinius/pull/2481

今(2013/08/21)からひと月前にmasterにマージされてます。ちょっと試す。

$ rvm install rbx -n master
$ rvm use rbx-head-master
$ ruby -e 'puts Dir.glob("a/**/*.rb")'
a/1.rb
a/b/2.rb
a/b/c/3.rb

あれ?変わらない(-ω-)

まぁRubinusでできたとしても実際には利用できないのでいいんですけど。

今のところベストプラクティスは

Dir.glob("**{,/*/**}/*.rb").uniq

これですかね?

新しく来た開発マシン(OSX Mountain Lionになった)に開発環境を構築しようとしたらGemfileに指定されているRMagickのバージョン2.13.1に対応するImageMagick 6.7.7-6がなぜかHomebrewでエラーとなり入らなかったので、良い機会だと(これを書いた当時)最新のRMagick 2.13.2、ImageMagick 6.8.6-3に変えてみました。

新開発機ではテストは綺麗に通って問題なく動いたのでステージング環境でも同じバージョンのImageMagickを更新してデプロイしてみたところJenkinsさんが定期実行しているテストがコケまくり( ゚д゚)

あろうことかすべてのテストがこけている。RMagickがImageMagickのライブラリが見つけられず起動すらしていない有り様でした。

どうやらOSXの環境では最新の組み合わせで実行可能なようですが、まだすべてのプラットフォームで動くわけではなさそう。

時期尚早ということで以前から使っているバージョンの組み合わせに戻して、新開発機の方を対応させることにしました。新開発機にImageMagick 6.7.7-6をどうにかして入れられればひとまずやり過ごせる。

なぜ入らなかったのか確かめるためにHomebrewのコマンド出力をverboseにして実行します。

この辺りは少し前に書いたHomebrewで複数のバージョンのパッケージをインストールして使い分けるを参照していただけると何をやっているかわかると思います。

$ cd $(brew --prefix) 
$ brew unlink imagemagick
$ brew versions imagemagick
6.8.6-3  git checkout 870d5e9 /usr/local/Library/Formula/imagemagick.rb
6.8.0-10 git checkout 321b293 /usr/local/Library/Formula/imagemagick.rb
6.7.7-6  git checkout 7d951fb /usr/local/Library/Formula/imagemagick.rb
  :
$ git checkout 7d951fb /usr/local/Library/Formula/imagemagick.rb
$ brew -v install imagemagick
  :

しばらく待ってるとエラーで終了。

  :
brew: superenv removed: -L/usr/X11/lib -O2
brew: superenv removed: -g -O2 -Wall
ld: library not found for -lXext
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [magick/libMagickCore.la] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [install] Error 2
  :

どやらX11のライブラリlibXextが見つからないようです。ただ、/usr/X11/libを確認してもちゃんと存在します。

ここで、少し前の行に表示されている見慣れないbrew: superenv removed...という行に気付きました。

homebrew superenvでググってみたところ、こちらのQiitaの記事「Homebrew の superenv」を発見。

実行時の環境変数 PATH は無視され、Homebrew によって再構築される
...
コマンド実行時に --env=std オプションをつけることで superenv を回避可能
...
ニッチなツールをインストールするために自分で Formula を書くとか、だいぶ昔に書かれた野良 Formula を使うときとか、そういう時に影響がでそうな話。

これじゃないっすか〜

$ brew install imagemagick --env=std

するっと入ったヽ(´ー`)ノ

Mac OS Xファイル選択ダイアログの知ってると捗るTips

知っていると格段に捗るMac OSXのファイル選択ダイアログのTipsを紹介します。

以降でのディレクトリと言っているのはフォルダの事です。私はUnix育ちなのでディレクトリの方がしっくりくるので...

選択しているファイルの確認がスペースでできる

ブログを書いていて、アップロードする写真を選択しているときなど、ファイル選択ダイアログから写真自体を確認したときが良くあります。

OSXのFinderやファイル選択ダイアログのアイコン表示はかなり小さいので似ている画像が複数ある場合、分かりにくいです。

そんな場合、確認したいファイルを選択状態にしてスペースキーを押すと画像をポップアップで大きく表示してくれます。

この機能はファイル選択ダイアログだけでなくFinder全般で使えますし、画像意外にもPDFやエクセルを含むスプレッドシートやワープロ系ドキュメントなど非常に多くのファイルフォーマットに対応しています。

アプリを起動して確認するのに比べて高速なのも使い勝手の良い点です。

パス指定で入力できる

ファイル選択ダイアログが表示されている状態でCommand+Shift+Gを押すと1行入力がポップアップします。ここにファイルパスを入力することによって直接ファイルやディレクトリを指定することができます。

ディレクトリを指定するとそのディレクトリを開いた状態に、ファイルを指定するとそのファイルが格納されているディレクトリを開いて、指定したファイルを選択状態にします。

ディレクトリを辿って指定しづらいファイルを、Terminalなどからコピーしたパス文字列で指定できて非常に便利です。

非表示ファイルを表示できる

デフォルトではドット"."で始まる隠しファイルや、/usrディレクトリなどのシステムファイルはファイル選択ダイアログでは表示されません。

システム全体で隠しファイルを表示状態にすることもできますが、ごちゃごちゃするので普通の時は隠しておいて、必要なときだけ表示したい。

上記のスクリーンショットの状態でCommand+Shift+.を押すと次のように一時的にずらっと非表示ファイルが表示されて指定できます。

現在開いているディレクトリをFinderで表示できる

ファイルを指定しようとして何かのアプリからファイル選択ダイアログを開いているわけですが、ちょっとそのディレクトリをFinderで作業したいという事がたまにあります。

そういうときはCommand+Rを押します。

表示しているディレクトリが選択状態でFinderを開いてくれます。

Finderからドラッグ&ドロップできる

すでにFinderでは開いているのに、アプリから表示されたファイル選択ダイアログは全く違う場所にいる場合、ディレクトリを辿って指定するのは面倒です。

そんな場合はFinderからファイル選択ダイアログにファイルやディレクトリをドラッグ&ドロップできます。

ディレクトリをファイル選択ダイアログにドロップすると、そのディレクトリに移動します。

ファイルをファイル選択ダイアログにドロップすると、そのファイルが格納されているディレクトリに移動して、ファイルを選択状態にしてくれます。

まとめ

  • 選択しているファイルの確認がスペースでできる
  • パス指定で入力できる
  • 非表示ファイルを表示できる
  • Finderからドラッグ&ドロップできる

知ってれば少し便利になる機能なので活用してください。

パズドラのちょっとしたTips

知ってる人には当たり前すぎるかもしれませんが、知らないとだいぶ損な機能をいくつか紹介します。

ランクアップまでの経験値の確認

ダンジョンをクリアしたときにも、あといくつと表示されますが、タッタッターンとタップして確認するの忘れますよね?私は忘れます。

自分の名前やランク、魔法石の数、スタミナなどのステータス、所持コイン数が表示されている上部のヘッダの部分を長押しすると表示されます。

あとどのくらいでランクアップするかコレで確認してからダンジョンを選択するとスタミナの無駄遣いを少し抑えられるかも。

今まで蓄積してきた経験値のトータルも表示されますが、何に使うのか分かりません(笑)

一番上にスクロール

ダンジョンリスト、モンスターBOXなど上下にスクロールする画面では、緑のラベル部分

をタップすることで一番上に一気にスクロールすることができます。

モンスターBOXでお気に入り順に並べ替えた後、一番上のお気に入りが表示されている部分に戻りたい時などに便利です。

ビュンビュンスクロールさせようとして、うっかりモンスターやダンジョンを選択して変な事をするミスも防げますね。

一番下にスクロール

これは結構分かりにくいと思うのですが、スクロールする部分の直下でタブメニューの上の運営からのメッセージがティッカー的に流れている場所があります。

ここをタップすると、一番下に一気にスクロールすることができます。

モンスターBOXで闇や光のモンスターの選択や入手順で売却したいとか火のダンジョンでルビリットを捕まえたい時など一番下にスクロールさせたい事も多いですから便利です。

モンスター売却価格を安全に調べる

モンスターの売却価格は、売却確認画面に行くと見られますが、そこだとミスってOKを押してしまうとお仕舞いです(-ω-)

実はよく見ると売却するモンスターを選択する時に、一番下に表示されています(笑)皆さん知ってましたか?実は私は最近友達に教えてもらうまで知りませんでした(滝汗)

お気に入りやチームに設定しているモンスターの場合、それらから外さないと確認できませんが、売却確認画面まで行くのに比べたら相当気楽に確認できますよ。

まとめ

  • ランクアップまでの経験値確認
  • 一番上・一番下へのスクロール
  • モンスター売却価格を安全に知る

でした。

あえてブログエントリーを書くほどのネタか?という気もしないでもないですが、一つでも知らない機能があれば、読んで損はなかったのではないかと...普通知ってますか?(汗)

こちらでパズドラ日記始めました( ˘ω˘)

Mac OSX EvernoteでMarkdownを書いてMarkedでプレビューする

Evernoteは思い付いたことをメモしておくインフラとして重宝していますが、標準のマークアップがイケてない上に、プレインテキストでもないためどうにも扱いが難しいです。プレインテキストで全プラットフォーム対応のメモアプリ作ったら結構、需要あるんじゃないかと思うくらい(笑)

今回はその話ではなくて少しでもEvernote.appを使いやすくするためのTipsとなります。

Evernote.appを使った表示・編集がいささかイケてないマークアップなのはもう諦めて、ほぼプレインテキストでも可読性が高いMarkdownで書いておくことにします。

特別な修飾をせずにMarkdownでノートを書き、書きながらプレビューする方法がないか探してみたところ、こちらを発見した次第です。

Marked Bonus Pack (scripts, commands and bundles)

サイトのWatchers>Evernoteというところにeverwatch.rbを起動しておくと最新のノートをMarkedでプレビューして確認できるということが書いてある。

これは捗りそうとダウンロードしてきて試してみましたが動きません...

短いRubyプログラムなので中をみてみると、

と書いてあるのですが、ここをlsしてもNo such file or directoryである。

おそらく先日のEvernote.appのメジャーバージョンアップでデータのローカルでの格納場所が変わってしまったのでしょう。

ここを修正するだけで済むなら簡単なので、Googleで今の場所を探すために検索してたらメンテされている版がGitHub上に見つかりました。

GitHub spetschu / everwatch

起動する前に、ローカルデータの格納場所のパスにEvernoteのユーザ名が含まれていてスクリプトを編集する必要があります。

こうなっている行です。

youraccountをEvernoteユーザ名に変更すれば動くのですが、直接埋め込むのはちょっと気持ち悪いので少し改造しました。

GitHub iwazer / everwatch

最初のコマンドラインオプションとして、もしくはEVERWATCH_ACCOUNT環境変数としてEvernoteアカウント名を指定するか、Mac OSXのユーザIDがEvernoteアカウント名と同じであれば、何も指定しなくてもパスを生成できるようにしました。

また、オリジナルではMarkedがすでに起動している状態ですとプレビュー用のファイルを開けなかったのを修正してあります。

README.mdに追記しておいたとおりスクリプトを起動するだけで使えます。

やってみると思いの外、快適でして、このエントリーもEvernote+Markedで下書きしております。

スクリーンショット 2013-05-28 11.25.20.png

パズドラのモンスターレベル上げ

最初の頃は雑魚モンスターを素材にしてもどんどん強化できるので工夫しなくても大丈夫なのですが、育てているお気に入りのモンスターを進化させたあと、さらにレベルMAXまでにしようとすると、これが大変。雑魚の素材ではすぐに限界が来ます。

強化合成用キングドラゴンで上げる

モンスターを効率よくレベル上げするには、時間限定でやってくるメタドラゲリライベントを使うのが効果的です。経験値が大量に手に入るキングが、そこそこ高確率で出現しドロップします。

「キングメタルドラゴン」なら同属性の闇モンスターの強化に使えば7万5千。別属性でも5万の経験値が得られます。

少しスタミナ消費が多くなりますが、火水木光もゲリライベントがありますからそれぞれ強化したいモンスターと同じ色の強化ドラゴンを使って上げるのが効果的です。

pzdr_20130407_1.png キングサファイアドラゴン

ゲリライベントダンジョンは超メタドラ以外は時間をかければ問題ないはずです。超メタドラは消費スタミナも多いし、ボスが強敵なので強くなるまでは行かない方がいいですよ。

ゲリライベントの時間は教えてくれるサイトやアプリがあります。私はこのiOSアプリを使っています。(どうやって時間を調べてるのか私は知りませんが...

メタドラアラーム&攻略forパズドラ

追記: 最近はこっちを見ています⇢ パズドラゲリラ時間割

高い能力を持つモンスターのレベル上げは、この強化合成用ドラゴンのキング以上を使わないと実質不可能です。雑魚モンスターではコインがかかり過ぎる。

ただ、せっかくゲリラダンジョンを回ったのにキングが落ちなかったらガッカリですね。ところが通常の強化ドラゴンでも火、水、木の3色にはもう一つ良い方法があって非常に捗ります。

ペンドラ上げ

その素になるのがペンドラと呼ばれる「ホノペンドラ(火)」「ペンペンドラ(水)」「ジュペンドラ(木)」です。

ホノペンドラ ホノペンドラ

ペンペンドラ ペンペンドラ

ジュペンドラ ジュペンドラ

「塔の番竜」でランク上げをし、少しずつノーマルダンジョンを進めてモンスターを強化して「魔王の城」まで攻略できたら、ダンジョン選択メニューに「テクニカル」が追加されます。

テクニカルダンジョンの最初の3つ「豊穣の大地」「氷の大迷宮」「紅蓮街道」は、それぞれ木、水、火のペンドラが頻繁に出現します。

「魔王の城」を攻略できているレベルなので、少し厳し目ではありますがなんとかなると思います。唯一の注意点は「神化の紅面」「神化の蒼面」「神化の碧面」がまれに出現することです。非常に堅い上に攻撃を受けると9999も削ってきます。HPをそれ以上にできない場合はリーダーやフレンドに根性、半減のリーダースキル、威嚇のスキルを持つモンスターなどを連れて行って凌ぐ必要があります。

各ダンジョンの詳細な攻略方法は、有名なAppBankのダンジョン攻略ページを参照して頑張ってください。

「ペンペンドラ」を例にとって説明します。

「ペンペンドラ」を捕まえたら、おそらく同時に「バブルキメラ」や「サファイアカーバンクル」も何匹か捕まえていると思います。それらに比べたら落ちにくいですが「アイスオーガ」や「フロストデーモン」でもOK。

バブルキメラ バブルキメラ

サファイアカーバンクル サファイアカーバンクル

アイスオーガ アイスオーガ

フロストデーモン フロストデーモン

「ジュペンドラ」に、それらのどれかを2匹強化合成してすると経験値3000以上を得られるのでMAXになります。経験値3000を超えるなら、上記以外でもなんでも構わないです。

pzdr_20130407_4.png

こんどはMAXになった「ペンペンドラ」に「塔の番竜」貯めておいた「ドラゴンプラント」と、ゲリラダンジョンで貯めておいた「サファイアドラゴン」2匹を進化合成すると「サファペンドラ」に進化します。

pzdr_20130407_5.png

この「サファペンドラ」を合成に使うと、なんと4万5千の経験値を得ることができます!「キングサファイアドラゴン」の7万5千には及びませんが、キングよりは手に入れやすいので、この手順を回すことによってたくさんストックできます。ペンドラ5匹はキング3匹で同じ効果という事ですね。

「ドラゴンプラント」は「塔の番竜」で貯めた分はすぐに無くなってしまうと思いますが、とても簡単な木曜ダンジョンを何度も回れば大量にゲットできます。

木曜ダンジョンで「ドラゴンプラント」の在庫をいつも確保しておけば、狙いの色のゲリラダンジョンを自分のスタミナが許す分(今の私だと3回)回っておいて、スタミナの回復を待ちつつテクニカルダンジョンでペンドラをノーマル強化ドラの1/2個数取るまで回る。そうするとこんな感じにできあがります。

pzdr_20130407_6.png

今回はゲリラダンジョンでキングが3匹とノーマルが12匹落ちたのでサファペンドラを6匹作れました。(使ってなかった2匹あったので8匹表示されてますが)同属性の水に与えれば75000×3 + 45000×6 = 495000の経験値となりますからレベル1の「セイレーン」に全部与えたら一気にレベルMAXになって「大海の歌姫・セイレーン」に進化させる準備完了!ということですね。

ペンドラ上げをまとめると

  • 木曜ダンジョンにはできるだけ行ってドラゴンプラントをある程度在庫しておく
  • カラーのゲリラダンジョンに行ってノーマル強化合成用ドラゴンも取っておく
  • 持っている強化合成用ドラゴンと同色のテクニカルダンジョンに行ってペンドラと素材をゲット
  • 強化ペンドラを強化育成したいモンスターにまとめて素材として与えて大量レベルアップ

これを繰り返せばコインの消費をかなり節約できるはずです。テクニカルダンジョンはコインもかなり落ちるので合成費用も十分まかなえると思います。

無駄なく素材を与える

ところで各モンスターの強化にはMAXという最大値があります。

例えばレベルMAX70のモンスターで現在68だった場合に、どのくらい素材を与えれば良いんでしょうね?

偉い人が既に調べてくれていてパズル&ドラゴンズ非公式wikiの経験値テーブルから計算することができます...

しかし自分でやるのはめんどくさすぎる(笑)

そのページの最初にも紹介されてますが「ぱずどらけいけんち」がステキMAXな便利さです。iPhoneのアイコンショートカットを作ってパズドラアプリの隣に置いておくレベルです!

使い方は簡単で、強化したいモンスターをベースに選んで「パワーアップ合成の画面」を表示します。

pzdr_20130407_2.png

「現在の経験値」という表示があるので、モンスター名とその値をページに入力して検索するだけです。

pzdr_20130407_3.png

この例だと、あと18万6449の経験値が必要だと分かります。キングメタドラを使うとすると3匹以上必要だと分かります。仮に4匹以上持っている場合でも無駄な1匹を使ってしまう事がないので素材もコインも節約できる。(大成功や超成功を引いたら無駄になりますが滅多にないことですし...)

少々面倒ではありますが、素材もコインも貯めるのは大変なので、できるだけ効率よく使いたいものです。

まとめ

  • ゲリライベントに潜って強化合成用キングドラゴンを捕まえて使う
  • キングが出なくても火水木の3色ならばペンドラがある
  • 大事な素材を無駄遣いしないようあとどれだけ経験値が必要かを調べる

これで、モンスターの強化が捗るはずです!

(ある程度のレベルまでは...w)

こちらでパズドラ日記始めました( ˘ω˘)

パズドラの始め方

私は始めるのが遅かった(今年に入ってから!)ので巷に情報が溢れていて自分でブログに書くことはないよな〜と思っていました。

しかしアプリのダウンロード数はとどまるところを知らず伸びているし、これから始める人も多いはず。そして意外と初級〜中級辺りの情報はそれほどまとまっていない。

すぐにそれなりのレベルになって当たり前の知識となるから仕方ないですよね

面白くなるのはレアガチャで手に入れた高スペックモンスターをパーティーに入れられるようになる中級以降なので、それまでにやめてしまってはもったいない。

できるだけ効率よく、楽しくなる中級レベルまでたどり着きたい。私も後から知って無駄なことしてたなという事が結構あるので。

ただ、私は目的があれば同じ事を繰り返す作業があまり苦にならないタイプなので、そうでない方にはしんどいかもです(汗)

序盤

ノーマルダンジョンでは後々ずっと使えるモンスターをほとんどドロップしません。最初にもらったドラゴンと、最初に引いたレアガチャモンスターをメインで育てて行くことになります。

レアガチャで引いたモンスターがくせ者で、あまり高いレベルのモンスターだと使用コストが大きすぎて、それを入れたら他に1体しか入れられないとかになる(笑)まぁでもこの後に出てくるランク上げのためのダンジョンまでは、そのモンスターだけの力で行けたりするので楽かもしれませんが。

ドロップしないとは言っても「ウルカヌ火山」「ネプトゥ氷河」「ディメティル樹林」で各色の「コドラ」がドロップすることがあり使えます。「コドラ」は友情ガチャでもちょいちょい引けますから育てましょう。自分はそんな僥倖に出会ったことはないですが「マーメイド」や「ナーガ」もドロップすることがあるそうなので、ゲットできたら本当にラッキー。

レッドコドラ レッドコドラ

ブルーコドラ ブルーコドラ

グリーンコドラ グリーンコドラ

マーメイド マーメイド

ナーガ ナーガ

他に友情ガチャではオーガも引けますし、序盤ではかなり使えます。特にボスキャラのダメージが大きすぎて一撃死するようなシチュエーションでも、リーダースキルの根性で耐えられるので戦い方によっては少し上のレベルのダンジョンも行けるようになるので助かる。ただオーガはHPがきわめて高く回復がきわめて低いので回復が難しくなります。良くできたシステムです。

レッドオーガ レッドオーガ

ブルーオーガ ブルーオーガ

オーガ オーガ

フレンド申請ってわりとハードル高い操作ですよね。でもパズドラはお互いにとってデメリットがそれほどないのでじゃんじゃん申請しましょう。特に最初はフレンド頼みの冒険なので強そうなモンスターを持ってる人には申請しておいた方が楽しいです。

モンスターのレベル上げは、この段階では1体を集中的に育成するよりは、できるだけ同色のモンスターを複数徐々に上げる方が良いと思います。レベルが高いほど強化に必要なコインが増えるため1体を集中的に育成するにはある程度のコインが必要になりますが、まだそれほど持ってないはずです。

また、私がそうでしたが直感的にはいろいろな色を育てた方が有利な気がしますけど、このゲームのパズルの特性では同じ色で固めた方が有利なことが多い。

同色のリスクとしては画面から攻撃色が無くなるとか、あっても遠すぎて消せないなどあります。

しかし実は複数色のパーティーでは複数色のドロップを消してコンボさせない限り複数攻撃にならないため毎回ショボイ攻撃になりやすいし、特に初心者にはパズルが難しいので、

  • 攻撃できる決まった色を一つ消す
  • 余裕があればあと1,2個何色でも良いのでコンボさせる

という単純なステップの繰り返しでそれなりのダメージを与えられる同色で固めるパーティーが楽です。

もうひとつのリスクとしては苦手な色のモンスターが多く出てくるダンジョンが難しくなるということがある。それを回避するために苦手がない闇や光を集めたくなりますが、闇や光は序盤に使えるモンスターがほぼ手に入らない...

仕方ないです。1色に固めるとは言っても最初からそうそう都合良く揃ってないはずなので、苦手色のダンジョンは組み替えて工夫して攻略しましょう。

友情ガチャでヴァンパイアがゲットできた人は闇パーティーを目指すと良いみたいです。先人が皆そう言ってます。ダンジョン攻略では一番楽と。

ヴァンパイア ヴァンパイア

ランク上げ

そうやってモンスターのレベルの上げながら徐々にノーマルダンジョンをクリアしていけば「巨人の塔」というダンジョンがやってきます。序盤の超重要ダンジョンです。

これも先人がみな言います。「巨人の塔」の3F「塔の番竜」を延々とやってランクを上げるべし!70くらいまで上げましょう。そのくらいまで上げないとコストが低すぎて良いモンスターを手に入れても使えない。宝の持ち腐れです。

「レッドコドラ」を進化させると最後には「メテオボルケーノドラゴン」になりますが、使用コストは15です。このレベルを5体並べようとしたら15×5=75のコストが必要で、それを超えるのはランク70からです。ドラゴンは使用コストが少ない方(だから序盤にも最適)なので、これくらいで済みますが神タイプは25〜必要でコストが高くないと使えません。

レッドコドラ レッドコドラ

メテオボルケーノドラゴン メテオボルケーノドラゴン

土日はスタミナ消費1/2なのでスタミナを使い切る前にランクアップし続けられとても効率的。土日でなくてももちろん大丈夫です。飽きたら少しずつノーマルダンジョンを進めながら基本「塔の番竜」ぐるぐる。

これはおまけですが「塔の番竜」では「ドラゴンプラント」というモンスターがちょいちょい落ちるので、モンスターBOXが許す限り取っておきます。これは後で高レベルモンスターの強化の時にとても捗ります。その他はレベル上げの素材にしたりレベル上げにも使えないような雑魚は売ってしまう。

ドラゴンプラント ドラゴンプラント

「塔の番竜」ではコインも平均3000獲得できるので、低レベルのモンスターを強化しているだけならコイン不足になることもないと思います。

魔法石の使い方

魔法石はイベント中にログインすると1日1個もらえたり、ダンジョンをクリアする度に1個もらえたり、サーバダウンのお詫びにもらえたりして、使わなければ貯まってきます。

ただ最初はレアガチャで使えるモンスターをゲットしたい気持ちをぐっとこらえて、モンスターBOXの拡張に使います。レアガチャで良いのを引いても、まだ簡単には強化・進化させられない。

また、ダンジョンクリアのコンティニューで使うのはやめた方が良いです。序盤ダンジョンではそうそうおいしいドロップはないので負けたら諦めたほうが無難です。スタミナが回復するのを待ってもう少しモンスターを強化したり、そのダンジョンに効果的なスキルを持つモンスターを連れて行ったりしてやり直した方が良い。

ランクが70くらいになって魔法石に余裕があればレアガチャを引いてみて、使えるモンスターをゲットしていきましょう。ハズレを引く可能性を下げたければ、できるだけイベント中のフェスを狙って引いた方が良いですよ。特に狙っているモンスターが出やすいフェスをやっているときは少々突っ込んでも良いのではないでしょうか。

無課金には全然こだわらないし、本当に面白いので必要ならば課金して買っても良いと思います。

私は友達がレアガチャ引いて良いのを出したら、誘惑に負けて引くことが多いですが(爆)

長くなってきたので、モンスターのレベル上げは次回に

※モンスター画像とリンク先は「パズル&ドラゴンズ非公式wiki」を使わせてもらってます

現在、こちらでパズドラ日記始めました( ˘ω˘)

新しいRailsアプリを作りたくてRMagickをインストールしようとしたらImageMagickが見つからないと怒られた。

経験上これは使おうとしたRMagickのバージョン2.13.2に対してインストールされているImageMagickのバージョンが古い時になる。おそらく新しいImageMagickをHomebrewで入れてあげればうまくいくはず。

Install Specific Version of Tool With Home Brew にやり方が載っていました。

まずはHomebrewが認識しているパッケージを最新に更新します。

$ cd$(brew --prefix)
$ brew update

現在は6.7.7-6がインストールされているのですがはたして...

$ brew versions imagemagick
6.8.0-10 git checkout 45a4978 Library/Formula/imagemagick.rb
6.7.7-6 git checkout 834ce4a Library/Formula/imagemagick.rb
6.7.5-7 git checkout f965101 Library/Formula/imagemagick.rb
  :

より新しい6.8.0-10が登録されています。

先程のversionsでリストされた対象バージョンのgitコマンドを実行するとインストールできるようになります。

$ git checkout 45a4978 Library/Formula/imagemagick.rb
$ brew install imagemagick
Error: imagemagick-6.7.7-6 already installed
To install this version, first `brew unlink imagemagick'

あら?エラー。6.7.7-6があるのでインストール先からunlinkするように言われています。

$ brew unlink imagemagick
Unlinking /usr/local/Cellar/imagemagick/6.7.7-6... 65 links removed

再びインストール実行。

$ brew install imagemagick
==> Installing imagemagick dependency: freetype
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/freetype-2.4.11.mountain_lion.bottle
######################################################################## 100.0%
==> Pouring freetype-2.4.11.mountain_lion.bottle.tar.gz
   /usr/local/Cellar/freetype/2.4.11: 57 files, 2.5M
==> Installing imagemagick
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/imagemagick-6.8.0-10.mountainlion.bo
Already downloaded: /Library/Caches/Homebrew/imagemagick-6.8.0-10.mountainlion.bottle.tar.gz
==> Pouring imagemagick-6.8.0-10.mountainlion.bottle.tar.gz
   /usr/local/Cellar/imagemagick/6.8.0-10: 1422 files, 45M

無事インストールされました。確認してみます。

$ brew list imagemagick
/usr/local/Cellar/imagemagick/6.8.0-10/bin/Wand-config
/usr/local/Cellar/imagemagick/6.8.0-10/bin/stream
 :

さて、新しく作るアプリはこれでいいとして、既存のをメンテしたくなったらどうするの?という疑問が浮かびますね。そちらのRMagickもバージョンアップするというのも手ですが依存ライブラリの関係上難しいこともあるでしょう。

そんなときのためにHomebrewでインストールされているパッケージはバージョンを切り替えることができます。

$ brew switch imagemagick 6.7.7-6
Cleaning /usr/local/Cellar/imagemagick/6.7.7-6
Cleaning /usr/local/Cellar/imagemagick/6.8.0-10
65 links created for /usr/local/Cellar/imagemagick/6.7.7-6

これで、前のバージョンが使えるようになりました。戻すのも同様にbrew switch <package name> <version>ですよ。

この記事は RubyMotion Advent Calendar 2012 の 16 日目の記事です。

いきなりRubyMotionで書き始めるのはなかなか辛いので、最初は語彙を増やすたObjective-CのサンプルプログラムをRubyMotionで実装するというのを結構やりました。

Objective-Cのコードをコピペして文法をRubyに書き換えていくのは慣れればそれほど難しくないのですが、最初は簡単なことで次々と引っかかって手が止まることが多かったので覚えている限りですがリストアップしていこうと思います。

形式プロトコルの指定は悩まないで省略してよし

モジュールのincludeとかそういうのかなー?といろいろやったりしましたが、RubyはObjective-Cよりもっと動的な言語なのでメソッドは実行時に存在すればOKという事(たぶん)で次のような形式プロトコルの採用の指定 は無視しても良さそうです。

また非形式プロトコルは既存クラスを開いてメソッドを追加する(オープンクラス)だけです。

オーバーライドして親の実装を呼ぶのはsuperだけでよい

パラメータが必要な場合でもsuperを呼ぶだけで、パラメータもそのまま親クラスのメソッドに渡されます。

型の宣言はすべてばっさり落とす

先ほどの例のメソッドパラメータのBOOLの宣言を無視したようにRubyは型の宣言は一切ないので落としてしまいます。

ターゲットにメッセージを送るの書き換え

Rubyの文法が拡張されていてパラメータ名の指定に対応されています。 (Ruby1.9の簡易Hash指定とどう区別してるのだろう...)

括弧は省略してもかまいません。

target.message3 arg1, with:arg2

クラスメソッドも同様ですので、よく見るオブジェクトの生成は

@propertyはインスタンス変数

@property指定はそのクラスのメンバーなのでRubyではインスタンス変数として扱うのが適切だと思います。

@synthesizeはattr_accessor

@synthesizeはsetter/getter生成の指定なのでRubyではattr_accessorにするのが適切だと思います。オプションによってはattr_reader/attr_writerで指定する方が適切かもしれません。

ちなみに、RubyMotionでattr_accessorを使用すると通常のrubyのアクセサ(property,property=)の他にsetPropertyというsetterも生成されます。

このsetProperty、property=と同じなのかと思いきや

cオブジェクト自身を返してます。メソッドチェーンできると言うことですね!

定数の最初の文字に気をつけよう

iOS SDKの定数は小文字から始まりますがRubyMotionではRubyの規約にあわせて大文字から始まるように変換されています。Objective-Cのソースコードをコピペして修正すると、定数の先頭を大文字にするのを忘れがちです。

エラーメッセージを見れば分かるのですが、慣れてくると見つけたらすぐに大文字にするのが習慣になります。

if文の条件に気をつけよう

Rubyの偽はnilとfalseですがObjective-CはCなので偽は0のみです。
#nilやNULLやNO(BOOL)も値としては0です。

なので、これをそのまま置き換えたらダメ。0以外が真と明示的に書かないといけない。

また、真偽値(BOOL)はObjective-CではYES(1)/NO(0)ですが、すべてtrue/falseに置き換える必要があります。

ファイルの依存関係

RubyMotionではappフォルダの中に入っているRubyソースコードをディレクトリが階層になっていてもすべてコンパイルしてくれますが、コンパイルの順番が単純な辞書順なためファイルを分けると未定義でコンパイルエラーになることがあります。

RubyMotionがリリースされたばかりでまだ情報がほとんどなかった頃は困って全部1ファイルにしたりしていましたが、依存関係をRakefileに書けば大丈夫なのでした。

ところが最近リリースされた1.28から自動で解決するようになったようです。
#が、まだうまく動かないことが多いらしいです(-ω-)

ブロック呼び出し方

Objective-Cにはクロージャを実現するブロック構文があって、アニメーションのコールバックなどでよく使います。lambdaを使います。

#この例は公式ガイドそのものですが...

lambdaじゃなくてprocでも動きますが、procはパラメータ数に無頓着だったりreturnで外側のメソッドを抜けてしまったりObjective-Cのブロックとは違う動きをするのでlambdaの方が安心です。

ポインタ

描画系のAPIを使う場合にCのポインタをライブラリに渡さなければいけないシチュエーションが多々あります。

RubyMotionのPointerを使えばC言語のポインタ操作ができますが、Objective-Cから移植していると、表記方法を混乱しがちなので落ち着いて対応していきましょう。

こういうのでもGLubyte(OpenGLESの型)をXcodeで調べればサイズはunsigned charと分かるので、

とかけます。アクセス方法は配列と同じですが相手はCの配列=メモリエリアなので何を格納するのがプログラムの意図として正しいのかよく考えて移植しましょう。

写経に使えるサンプルコードの紹介

元になるコードはGithubなどでObjective-CやiOSで検索してもたくさん出てくるでしょうが、まずは小さなプログラムから始めたいところです。

私が参考にしたサンプルコードを紹介します。

iOS Developer Library Sample Code

Appleのサンプルコード集です。

cocoa controls for iOS

iOS用のUIパターン実装例が大量にあります。移植したものが動くとかなり嬉しいです。

iOS 6 新機能のサンプルコード/ライブラリのまとめ22個 - Over&Out その後

iOS 6の新機能を紹介したブログエントリーですが、新機能をRubyMotionで実装してみる実験に良さそうです。

まとめ

Objective-Cで実装できていることは、なんでもできる...と言い切れるかはまだ分かりませんが、私がいろいろやってみたサンプルコードではひとつ(OpenELGSを使っているもの)を除いてすべて動きました。

もっといろいろ突っかかった事があった気がするのですが、思い出せたのはこのくらいでした。簡単なことでも気づいたことをブログに書くなどして残しておいた方がいいですね。

Rubyベストプラクティス -プロフェッショナルによるコードとテクニックを読んでいて発見がありました

ハッシュの各要素にはデフォルト値をあらかじめ指定しておけるのですね。

しかし、配列で初期化したい場合、先ほどのように単純にインスタンスを渡したら意図した結果になりません。

どんなキーの時でも生成時に渡した同じ配列のインスタンスが使われるためです。

これを避けるためにブロックを渡して再生成すればいいのかな?と思い、やってみたら毎回新しい配列が生成されてダメでした(笑)

このケースのための初期化方法もちゃんと用意されていて次のようにします。

ハッシュを使うときに要素がnilだったら[]を入れて...ってやっていたところをリファクタリングしなきゃ。

リファレンスマニュアルにもしっかり書かれています(笑)

http://doc.ruby-lang.org/ja/1.9.3/method/Hash/s/new.html

このアーカイブについて

このページには、過去に書かれたブログ記事のうちTipsカテゴリに属しているものが含まれています。

前のカテゴリはthinkingです。

次のカテゴリはTitaniumです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。