highlight

2017年3月11日土曜日

Apache Tez を Ubuntu 16.10 にインストールする

Hive on Spark をセットアップしてみようと思ったが、上手くいかなかった。生(MapReduce) Hive で良いかと思ってたが、hive を使っていると相変わらず、hive 2 を使うなら on Spark か Tez を使え。嫌なら Hive 1 にしとけ、と警告が出てくる。じゃあ Hive on Tez を使うか、という事で Tez をインストールする。

まず、Hive on Spark が動かない原因について。 Hive から Spark のタスクを起動しようとするときに、JavaSparkListener クラスが無いという例外が発生する。 Hive のバグレポートにも挙がっているが、現在の Spark では SparkListener クラスを使うようになっていて、JavaSparkListener は Spark 2.0 では deprecated どころか、削除されてしまったらしく、これを使っている現行 Hive 2.1.1 では Spark 2 が使えない。Hive のソースリポジトリの trunk だと、既に SparkListener を使うようになっていたので、checkout してビルドしてみようとも思ったが、metastore のスキーマバージョンが変わったりするし、spark は開発が活発過ぎて、尖った変更がさらっと入ったりする。それがまあ魅力でもあったりする訳だが、この先も互換性が取れなって苦戦するケースがあり得そうだし、ということで、ここでは Tez を使うことにした。Hive on Spark 2 は、Hive 2.2 がリリースされたら、また試してみる事にしよう。

2017年3月8日水曜日

Spark を Ubuntu 16.10 にインストールする

Spark をインストールする。

方針

  • ローカルモードで動かしてみて、Standalone master-slave 方式で動かす。その後 YARN で動かしてみる。
  • YARN で動かすので、Spark History サーバを動かさないと、WebUI での実行履歴が見られない(私が誤解しているかもしれないが)様なので、History サーバは動かす
  • Hive は以前のエントリでセットアップした Metastore サーバを使用する
  • とりあえず spark ユーザは作らず、hadoop ユーザを spark 管理ユーザも代行させる方針。専用ユーザを作ったほうが良さそうなら、改めて設定し直す。

2017年3月2日木曜日

Hive を Ubuntu 16.10 にインストールする

方針

Hadoop はインストール済み、という前提

  • /opt/hive を $HIVE_HOME とする
  • Hive 用ユーザ hive を作成する
  • metastore には、mariadb を利用する
  • Hive ユーザ認証は取り敢えず設定しない。つまり NOSASL

2017年3月1日水曜日

Ubuntu で eclipse をインストールする

Ubuntu には eclipse がパッケージで用意されているが、バージョンを見てみると 3.8.1 だった。Indigo あたりになるのだとすると、流石にちょっと古すぎる。Neon をダウンロードしてインストールしたほうが良さそうだ。

eclipse はホームディレクトリに eclipse ディレクトリを作って、そこに tar xvzf するだけ。あとは、Ubuntu のランチャアイコンを用意すれば、一々端末を起動しなくて済む。

2017年1月27日金曜日

c++ 抽象クラスを関数テンプレート実引数に渡したい

c++ では、抽象クラスを関数テンプレートの実引数に使うことが出来ない事になっている。 これを何とかしてブチ込む必要がある場合には、どうすれば良いのか。

具体例を挙げる。以下のような AbstractName という純粋仮想クラスを、 関数テンプレートとして定義されている tfrun に渡したいような、func0() 実装中の様な場面。

2016年8月30日火曜日

WoWJapanizer を Legion expansion で使えるようにする

昨日のエントリで、とりあえず WoWJapanizer がエラーを出さないようにしたが、もう少しまともな変更を施す事にする。

GlyphFrame がエラーを出していた件については現 version では Glyph 変更用のフレームが廃止されたそうなので、 バッサリとコードを除去する、という対応で問題なさそうだ。ただ minor glyph は残るそうなので、 この対応をどうすればいいのか、WoW 自体久々な私にはちょっと良くわからず、必要があれば又の機会に対応する事にしよう。

あとの二つは Interface Option の設定を取得する方法が変更された様なので、現行仕様に沿う(と思しき)方法に書き換える。多分 InterfaceOptions~ 変数が使えなくなったのだろう。 GetCVar() の引数に直接 CVar の名前を与えることにする。

  • InterfaceOptionsHelpPanelEnhancedTooltips を使っているところでは、"UberTooltips"
  • InterfaceOptionsDisplayPanelShowSpellPointsAvg を使っているところでは、"SpellTooltip_DisplayAvgValues"

これで Interface option の該当箇所のチェックを on/off したときに、その振る舞いが変わる様になると思う。 が、元のコードの意図をキチンと汲み取っているかどうかについては、ちょっと良くわからない。

以下、patch ファイルを掲示しておく。cygwin を使っている人なら、World of Warcraft/Interface/Addon/WoWJapanizer ディレクトリに mv して、

$ patch -p1 -u < 以下のパッチファイル

を実行すればいい。試してないけど多分パッチが当たる。 mac の人はよく知らないけど、中身が bsd だそうだから patch コマンドは普通に使えるんじゃないかな? cygwin とか patch が入ってないなら、以下の内容をみて、直接ファイルを書き換えると良いです。 ざっと見たら想像つくと思いますが、該当する .lua ファイルを見つけて、- の行を消して + の行で置き換えて行けばいいです。

diff -ur WoWJapanizer.orig/Data/Item/WoWJapanizer_Item.lua "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/Data/Item/WoWJapanizer_Item.lua"
--- WoWJapanizer.orig/Data/Item/WoWJapanizer_Item.lua 2015-06-24 11:22:02.000000000 +0900
+++ "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/Data/Item/WoWJapanizer_Item.lua" 2016-08-30 23:14:43.177488500 +0900
@@ -12,10 +12,7 @@
     local text = self.Data[id][1]
 
     if self.Data[id][2] then
-        local checkbox = InterfaceOptionsDisplayPanelShowSpellPointsAvg
-        checkbox.cvar = "SpellTooltip_DisplayAvgValues"
-
-        if tonumber(GetCVar(checkbox.cvar)) == 1 then
+        if tonumber(GetCVar("SpellTooltip_DisplayAvgValues")) == 1 then
             local n = {}
             for k, v in pairs(self.Data[id][2]) do
                 local i1, i2 = v:match('(%d+)-(%d+)')
diff -ur WoWJapanizer.orig/WoWJapanizer.toc "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizer.toc"
--- WoWJapanizer.orig/WoWJapanizer.toc 2015-06-24 11:22:02.000000000 +0900
+++ "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizer.toc" 2016-08-29 22:10:18.188131500 +0900
@@ -1,4 +1,4 @@
-## Interface: 60200
+## Interface: 70000
 ## Title: WoWJapanizer
 ## Notes: Translate Quest data, Item ToolTips and Spell ToolTips into Japanese text.
 ## Version: 3.0.0
diff -ur WoWJapanizer.orig/WoWJapanizerGlyphToolTip.lua "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizerGlyphToolTip.lua"
--- WoWJapanizer.orig/WoWJapanizerGlyphToolTip.lua 2015-06-24 11:22:02.000000000 +0900
+++ "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizerGlyphToolTip.lua" 2016-08-29 22:40:23.687407600 +0900
@@ -4,44 +4,6 @@
 WoWJapanizerGlyphToolTip.GlyphStore = nil
 
 function WoWJapanizerGlyphToolTip:OnEnable()
- hooksecurefunc("GlyphFrame_LoadUI", function()
-  for _, button in next, GlyphFrameScrollFrame.buttons do
-   button:HookScript("OnEnter", function(_button)
-    if _button.isHeader then
-     return
-    end
-
-    local name, glyphType, isKnown, icon, glyphID = GetGlyphInfo(_button.glyphIndex)
-
-    if not WoWJapanizer.db.profile.spell.tooltip then return end
-    if not WoWJapanizer:LoadAddOn("WoWJapanizer_Spell") then return end
-
-    local spell = WoWJapanizer_Spell:GetGlyphByName(name)
-
-    self:OnShow(spell, glyphID)
-   end)
-
-   button:HookScript("OnLeave", function(_button)
-    self:OnHide()
-   end)
-  end
-
-  hooksecurefunc("GlyphFrameGlyph_OnEnter", function(_button)
-   local enabled, glyphType, glyphTooltipIndex, glyphSpell, icon = GetGlyphSocketInfo(_button:GetID())
-
-   if not glyphSpell then return end
-   if not WoWJapanizer.db.profile.spell.tooltip then return end
-   if not WoWJapanizer:LoadAddOn("WoWJapanizer_Spell") then return end
-
-   local spell = WoWJapanizer_Spell:Get(glyphSpell)
-
-   self:OnShow(spell, nil)
-  end)
-
-  hooksecurefunc("GlyphFrameGlyph_OnLeave", function(_button)
-   self:OnHide()
-  end)
- end)
 end
 
 function WoWJapanizerGlyphToolTip:OnShow(spell, glyphID)
diff -ur WoWJapanizer.orig/WoWJapanizerToolTip.lua "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizerToolTip.lua"
--- WoWJapanizer.orig/WoWJapanizerToolTip.lua 2015-06-24 11:22:02.000000000 +0900
+++ "../Blizzard/World of Warcraft/Interface/AddOns/WoWJapanizer/WoWJapanizerToolTip.lua" 2016-08-30 23:12:59.041724400 +0900
@@ -170,9 +170,7 @@
 end
 
 function WoWJapanizerToolTip:CheckEnhancedTooltips()
-    local checkbox = InterfaceOptionsHelpPanelEnhancedTooltips
-    checkbox.cvar = "UberTooltips"
-    if tonumber(GetCVar(checkbox.cvar)) == 1 then
+    if tonumber(GetCVar("UberTooltips")) == 1 then
         return true
     else
         return false

久々の Wow で addon を使うときの話

World of Warcraft に復帰しようかなと思っている。

2年以上放ったらかしていたり、利用端末を入れ替えていたりするので、使えなくなった Addon もある。Bliz のデフォルトの UI では遊べない体になっているので、どうにかしないとやる気が出ない。 大体は Curse client でアップデートできるので問題ないが、使えなくなってしまった Addon や、使うまでに一手間かかるものもあるので、その時のメモ。

バージョン番号の更新は、*.toc ファイルの一行目 ## Interface: のあとの数値を 70000 にすれば、とりあえず Legion の最初(2016/08/30)のバージョンで outdated になることは無いので、70000 未満だったら書き換えておくこと。

Wowjapanizer

Legion 用にはアップデートされていないようだ。エラーがでて鬱陶しいが、日本語のテキストは表示されているようだ。とりあえずエラーが出ないよう、エラーが出る部分は削除かコメントアウトしとけばいいか。.toc ファイルのバージョンも 70000 にしておく。

  1. WoWJapanizerToolTip.lua の CheckEnhancedTooltips() は return false だけを残してあとはコメントアウトする。
  2. WoWJapanizerGlyphToolTip.lua の OnEnable() の中身を空にする。
  3. Data/Item/WoWJapanizer_Item.lua の Get(id) の if self.Data[id][2] then の中身、else 以降は残して、そこ以外を除去する。

これでとりあえずエラー表示無しで、日本語のクエストログが表示されるようになった。他にもエラーが出るかもしれないが、その都度対応すれば良かろう。 根本的に解決したいが、GryphFrame というのが何なのか、まだよく分かっていない。

SavedVariables

Bartender4, Shadow Unit Frame を使っていたが、これを設定し直すのは面倒なので、古いディスクから設定ファイルを持ってくる。設定ファイルは WTF/Account/<アカウント名>/SavedVariables 以下の *.lua ファイルなので、これをコピーすればそのまま使える。画面サイズなどが異なっていると、ずれたりするのかもしれない。

WowPro

Waypoint の矢印を表示するには、TomTom というアドオンをインストールしておく必要があるというのは完全に忘れていた。予めインストールしておく事。

Prat

Prat の fonts ディレクトリに使いたいフォントファイルをコピーしてから、以下の行を fonts.lua に追加する。
LSM:Register("font", "<フォント名>", [[Interface\Addons\]] .. folder .. [[<フォントのファイル名>]])