2017年7月17日月曜日

部品移植と目標評価設定:”アイドレスSystem4 部品作成ツール” v0.3_rc1

BEITEL アプリケーションを更新しました。追加した機能は2点(最初に予告してたやつ)です。
更新する場合は、BEITELの[ヘルプ]-[アプリケーションの管理...]-[更新チェック]からどうぞ。

■部品移植対応(部品のRD・評価を直接指定)

 部品の設定文(ノードの2行目)が以下の書式による記述のみだった場合、その部品は指定されたRDないし評価を持つものとして扱います。


  1. "RD:【数値】" :その部品は記述されたRDを持つものとして扱います。
  2. "評価:【数値】":その部品は記述された評価と、評価から計算されたRDを持つものとして扱います。
    (RDは 1.5 ^ 【数値】で計算した後、小数点以下を切り捨てています)
 以下のケースでお使い下さい。

  1. 先のイベントで定義された部品(RD,ないし評価定義済み)を再利用する
  2. 下位部品を分業で作成しているものの、概算でアイドレス全体の評価を計算したい。

■目標値設定

 メニューの[idress]-[目標値設定]から表示されるダイアログより、目標値を設定できます。
 これを設定した場合、画面下部のRD・評価表示が変化し、目標までのRD差分を表示します。
(メニュー項目)

(ダイアログ)

(目標値表示)

必要な残り部品数を確認したい、ノルマに追われたい人はご利用下さい。
 

2017年7月16日日曜日

樹形図生成機能を追加:”アイドレスSystem4 部品作成ツール” v0.2_rc1

 BEITEL アプリケーションを更新しました。提出用の樹形図テキストを生成します。

 上部メニュー[Idress]-[樹形図]をクリックすると、樹形図テキストがクリップボードにコピーされます。
 あとはエディタにペーストするなり、プレイボード掲示板に投稿するなりしてお使い下さい。

 BEITELのアプリケーション管理機能で最新バージョンに更新する操作は以下の通り:


  1. [ヘルプ]-[アプリケーションの管理...]をクリック
  2. 「更新チェック」ボタンをクリック

 なんか変だったら黒埼(Twitter : @kurosaki_koh)まで。

 これくらいできなきゃ使い物にならんだろ、と慌てて作りました。はい。

アウトラインプロセッサ”BEITEL"で部品を書く(導入編)

” BEITEL (バイト) "は、JavaScriptで機能拡張ができる アウトラインプロセッサです。

今回、私は BEITEL を部品記述用ツールとして使えるよう、部品の文字数表示、及びRD・評価値表示機能を開発しました。

この記事では、BEITEと機能拡張用スクリプトの導入方法を説明します。
(使い方は次のエントリで説明します)

■BEITELのインストール


 こちら(http://beitel.carabiner.jp/download.html)のページから、Windows版もしくはMac版のインストーラーをダウンロードし、実行してください。
  Java実行環境(JRE)抜きのZip版もありますが、今時のPCにJRE 6が入っているとは考えにくいので、 Java実行環境同梱版を選んだほうが早いと思います。

■”アイドレスSytem4部品作成ツール”のインストール

 BEITELのアプリケーション管理機能からインストールできます。

  1. BEITELを起動する。
  2. メニューから[ヘルプ]-[アプリケーション管理]をクリック
  3. 「アプリケーションの管理」ダイアログ内の「アップデートサイト」タブを開く
  4. 「新規Update Site」ボタンをクリック
  5. 「新規Update Siteの追加」ダイアログ内のURL:欄に以下のURLを入力し、「OK」ボタンをクリック。
    http://dev.empc.wanwan-empire.net/beitel/parts-dev_package.xml
  6.  「アプリケーションの管理」ダイアログ内の「アプリケーション」タブを開く
  7. 「新規アプリケーション検索」ボタンをクリック
  8. 「アプリケーションの一覧」ダイアログ内に”アイドレスSystem4部品作成ツール Version ***”のチェックボックスをチェックして、「インストール」ボタンをクリック。
  9. 「了解」ボタンをクリックして、BEITELを終了する。

次回BEITEL起動時より、部品作成用の文字数チェック・RD計算が有効になります。

■最低限の使い方

 BEITEL起動後、ウィンドウ右のスクロールバーの上にある十字のボタンをクリックして、カラムを一つ追加してください。ここにノード(アウトラインプロセッサの記述の一単位。GoogleSheetでいうところのセル)の文字数が表示されます。



 一つのノードには部品名と設定文を書き、1行目を部品名、2行目以降を設定文として扱います。よって、ノードの文字数は2行目以降のみがカウントされます。

 ノード内での改行はALT+Enterです。Enterのみはノードの追加になります。

 RDは「2行目以降の文字数が50文字以上の末端ノード」一つ毎に1加算されます。

 大部品(末端でないノード)は文字数にかかわらず、RD0として扱います。


(実はこの辺、ルール解釈が曖昧です。質疑にて確定されたら仕様変更します)

 ノードの移動は、ノード先頭の●とか▼をドラッグするか、CTRL+ALT+カーソルキーで行います。

 ノード単位でのコピー&ペーストができます。多人数で作業する際は下位部品でファイルを分割し、後でコピー&ペーストで1ファイルにまとめると良いでしょう。
 (DropBoxで共有して1ファイルを皆で編集するのはやめましょう。上書き保存で衝突するのが関の山です。いや、DropBoxならファイル履歴から復元もできますが)

■今後の予定


  • 移植部品対応:
     設定文(2行目以降)が「評価:(数値)」のみ書かれていた場合、その部品はイベント提出済みの再利用として扱い、評価相当のRDを持つものとます。
  • 評価目標設定:
     予め「評価目標」を設定しておくことで、ウィンドウ下部の表示に「目標まであとRDいくら」を表示します。
 しかし、他の人がもっと良いツールを作るようだったら、これ以上の更新はしません。
 がんばれ黒霧さんとか山内さんとか。


■問い合わせ先

 Twitter:@kurosaki_koh
 もしくは最寄りの藩王経由で黒埼までご連絡を。

 Blogのコメント欄も開けておきますが、読む保証はありません。

アウトラインプロセッサ”BEITEL"で部品を書く(駄前置き編)

 ハロー、ニューワールド。いや、セルフクラフトワールド?

 というわけで、どこもかしこも目下絶賛激務中のアイドレスです。
 皆さんお疲れ様です。公休日、休めていますか? 私はさっぱりです。

 公休日前の数日、私はリアル激務から帰宅してみたらだいたい締め切り40分前。
 仕方ないので申し訳程度のチェック作業をお手伝いしてました。

 その現場たるや。

  • GoogleSheetで部品を書く。大部品ごとに別タブにわかれてたりする。
  • テキストエディタで樹形図に起こしてプレイボード掲示板に投稿
  • 部品名の類似だの漏れだの重複だのみつけて慌てて直す
  • 直ってない(*)
  • 慌てて直す
  • (*Repeat)
 ……てな感じの阿鼻叫喚。こら、あかん。

アウトラインプロセッサってどうだろう?


 さて。木構造のテキストを書くツールとして”アウトラインプロセッサ”というものがあります。
 大見出し・中見出し・小見出しを並べた目次みたいなものを書いてから、末端のテキストを書き加えていく。エクスプローラーとエディターのあいのこ見たいなもの。
 普通のエディタより全体を把握しやすく、大枠から詳細へという論理の構造を意識できる。そういうものです。

 これに、末端部品の文字数表示とRD・評価計算が付いたら、そこそこ使えるんじゃない?
 じゃあ、プラグインなりで機能追加ができるアウトラインプロセッサを探してみよう。
 わーい黒埼、人のフンドシで勝負するのだいすきー。

 というわけで、アウトラインプロセッサとプラグインのインストール方法は次のエントリで。

2015年5月28日木曜日

火事場から逃げ出す方法 もとい、@bbs から記事を引き上げる方法

問題:

無料レンタル掲示板の @bbs  (atbbs.jp) と@bb (www3.atbb.jp) が、5月末でサービスを終了する。
 これらサービスに記事をまとめてダウンロードする機能はない。
 運営側も記事ダウンロードに対応する気はない。なんてこった!

 いかに手間をかけず、月末までに掲示板内の記事を引き上げようか?

解決策:


  1. Anemone (Ruby によるクローラーフレームワーク)で掲示板記事をまとめてダウンロードする
  2. ダウンロードした記事は、とりあえずAnemone経由でMongoDBに突っ込む
  3. とりあえずlocalhost でMongoDBに突っ込んだ記事を読めるよう、Sinatraで簡易Webサーバー作ってこれで読み出す。


 「とりあえず」ばっかである。時間が無くてさあー!

1.Anemoneで掲示板記事をまとめてダウンロード


require 'anemone'
require 'bson'
require 'mongo'

db = Mongo::Connection.new.db('taigen_support_bbs')
opts = {
    delay: 1,
    storage:Anemone::Storage.MongoDB( db ),
    depth_limit: 4 
}

ForumsURL = 'http://bb2.atbb.jp/echizenrnd/'

Anemone.crawl(ForumsURL , opts) do |anemone|
  #クロール対象とするページのURLを指定する。
  anemone.focus_crawl do |page|
    page.links.keep_if {|link|
      link.to_s.match %r"http://bb2.atbb.jp/echizenrnd/(forum|topic)/\d+(\?page=\d+)?$"
    }
  end

#特定のページに対しての処理を記述する。
#  anemone.on_pages_like(%r"/topic/\d+") do |page|
#  ... (今回なにもやっていない)
#  end

#クロール対象となった全ページに対しての処理を記述する。
# anemone.on_every_page do |page|
#  ... (今回なにもやっていない)
# end
end

 これだけである。
 予めMongoDBを起動してから、このスクリプトを動かすだけで、とりあえずMongoDBにクロール結果が一切合切取り込まれる。今回の例では20分くらいかかっただろうか。
 Anemoneがクロール対象とするのはHTMLだけ。画像やスタイルシートは取ってこないので、必要最低限の分だけ手動でダウンロードしておいた。なに、大した数ではない。


2.Sinatraで簡易Webサーバーを書いて、MongoDB内に保存した記事を読めるようにする

取り込んだ記事それぞれをHTMLファイルとして保存しておければ一番シンプルで扱いやすいのだが、フォルダごとに分けたり等の処理が面倒な気がした。
 ので、MongoDB内の記事データをSinatra経由で読めるようにしてみた。

 今回引き上げた掲示板は、各記事へのリンクが絶対URL(http:/bb2.atbb.jp/~)で記載されているため、ブラウザからlocalhost 上の簡易Webサーバーで読もうとすると具合が悪い。そのため、ここはNokogiriで記事内のリンクを相対URLで書き換えている。

 アイコンの類はめんどいので無し。スタイルシートだけは提供して、レイアウト崩れを最低限防ぐ。

gem 'tilt' , '1.4.1' ; require 'tilt' #よくわからんけど、バージョン衝突だかでこれ入れないと動かない。多分今更Ruby1.9環境でやってるせい。
require 'sinatra'
require 'sinatra/reloader'
require 'mongo'
require 'nokogiri'

before do
  db_con = Mongo::Connection.new('localhost', 27017)
  @db    = db_con.db('taigen_support_bbs')
  @pages = @db.collection('pages')
end

BaseURL = 'http://bb2.atbb.jp/'

#各記事へのリンク内に含まれる絶対URLを、全て相対URLで置換する。
def replace_url(content)
  doc = Nokogiri::HTML(content)
  doc.css('a').each do |link|
    if link['href']
      link['href']= link['href'].gsub(/#{BaseURL}/ , '/')
    end
  end
  doc.to_html
end

#掲示板のRoot
get /\/(echizenrnd)?$/ do
  replace_url(@pages.find({url: BaseURL+'echizenrnd/'}).first['body'].to_s)
end

#各フォーラムないし各記事
get %r"/echizenrnd/(forum|topic)/(\d+)?" do |kind , id |
  url = BaseURL + "echizenrnd/#{kind}/#{id}"
  url += "?page=#{params['page']}" if params['page']
  replace_url(@pages.find(url: url).first['body'].to_s)
end

#別途ダウンロードしておいたスタイルシートを読み込んで置く
StylesheetPath = File.join(File.dirname(__FILE__) , 'assets/stylesheet.css')
Stylesheet = open(StylesheetPath).read

#CSSファイル
get /stylesheet.css/ do
  Stylesheet
end


 こんだけ、というにはちょっと書いたが、こんなもんである。 

所見

こんなもんでも作るのに2日かかった。私も衰えたな……などといらん感慨をもったり。
 全ての@bbsユーザーにおいそれと利用できる解決方法ではない(RubyとMongoDBと各種gemをインストールできる人向け)が、まあ何も無いよりはマシだろうか……。


 アイドレスプレイヤーで@bbs終了についてお困りの方へ。

とりあえずこの方法で、黒埼の手元にな記事を保存できるようになりました。あと数日もらえれば、HTMLファイルをZipしたものを渡せるようになるでしょう。
 どうしても自己解決できない場合、黒埼までご相談ください。連絡はTwitter:@kurosaki_koh までどうぞ。  やっつけで使い始めたBlogなので、この記事のコメント欄にかかれても黒埼が気付ける保証はありません。(ひどい)