ろむのシ的メモ+α

Web系のブラウザゲーのツールとか作ったりつくらなかったりしてます

sedで連続する空白を処理するメモ

普通にしたらうまく置換できなかったのでメモ

環境
gnu bash 4.2.10(1)
gnu sed 4.1.1

正規表現メモ SEDの項目を確認しつつ最初やってみたコマンド

echo " 3409 pts/0    00:00:00 bash" | sed 's/\s+/ /g'

結果は変わらず。

 3409 pts/0    00:00:00 bash


manを見たら-rをつけるとPerl5互換の正規表現が使えるらしい

echo " 3409 pts/0    00:00:00 bash" | sed -r 's/\s+/ /g'

変わった。

 3409 pts/0 00:00:00 bash

オプションの-rを付けずにする方法ないかなと思って色々試行錯誤してみた。
1.うまくいくけどなんかね・・・

echo " 3409 pts/0    00:00:00 bash" | sed 's/\s\s\+/ /g'

2.classは使えない・・・?なんかキャラクタリストとして解釈されてた。

echo " 3409 pts/0    00:00:00 bash" | sed 's/[:space:]\+/ /g'

3.ここで考えて、\s+の時は最短マッチで置換してるのでは・・・と思い以下にした。

echo " 3409 pts/0    00:00:00 bash" | sed 's/\s{2,}/ /g'

うまくいった。
うーん・・・どうなのこれ。使い方が間違ってるのだろうけど・・・
よくわからない。

サカつくのブラウザバトルしてます。

8月に出たサカつく7にはまってました。

J.リーグ プロサッカークラブをつくろう! 7 EURO PLUS

J.リーグ プロサッカークラブをつくろう! 7 EURO PLUS

最近はこのサカつく7と連動して遊べるブラウザバトルなるゲームしてます。
連動ありの場合PSPで育てたチームを全国の人が育てたチームと対戦させたりできます。
また”連動なし”でも遊べます。

連動なしの場合、スカウトを使って優秀な選手を取得し、ホームゲームでお金を稼ぎつつ
さらに優秀な選手を獲得するという事の繰り返しなわけなのですが、以外に面白い。
相手チームの強さにもよるけど、PSPで育てたチームにも勝てたりするんです。

で、なぜこんなエントリーを書いてるかというと
関連スクリプト書きました。とはいえブラ3のbeyondみたいに便利なものでもないです。
某スレにも貼り付けたりもしました。

ついでに1行バージョン。

グリモンスクリプトでは無いため、ブックマークレットにするか自分でグリモンスクリプトにしちゃってください。
使った感じはこんな感じ。

一応ブラウザバトル自体がAjaxで動いてるのでページ遷移してもある程度は対応できてるはず。
消えちゃったらまた実行してください。

対象ブラウザはブックマークレットとしての動作はGoogle ChromeSafariのみ
Opera,Firefoxはグリモンスクリプトとしてなら多分動くと思います。
IEはIE9の場合もしかしたら動くかもしれない程度です。


あと、上のスクリプトとはまったく別ですが
ブラウザバトルには、重症選手が回復までの残り時間0:00なのに、回復しないバグがあります。
こうなると運営側が何かするか、手放すかしないと対処できなかったっぽいのですが、自分も発生した為、色々調べました。
そしたらリクエストを送れば回復するという・・・。つまりJS関連でのミスっぽいです。
それらを対処するためのスクリプトを作りました。

javascript:(function () { 
var cond = document.getElementById("condmenu_select"); 
onPageChange( "gamedisp", "TeamCreate", "selID="+cond.value+"&pageIndex=110&rec_zyushou="+cond.value, ''); 
})(); 

これもブックマークレットです。

使い方としては、調整タブで対象の重症患者を選択
上記のブックマークレット発動で重症が治ります。

追記。プレイヤーのステータスやらも表示出来るようにする予定。

Greasemonkeyスクリプトのデバッグ方法

Firefoxで、Greasemonkeyスクリプトを効率よくデバッグする方法を知らないので、
Greasemonkeyスクリプトを書く場合Google chrome extensionとして書き、テストとかをしてます。
extensionと言ってもパッケージ化等は全くしてませんし、内容も特に違いはありませんが。

3gokushi-beyondを例として書きます
任意のディレクトリにmanifest.jsonと3gokushi-beyond.user.jsファイルを入れるだけ。
manifest.jsonの内容はこんなの

{
   "content_scripts": [ {
      "exclude_globs": [  ],
      "include_globs": [ "http://*.3gokushi.jp/*", "https://*.3gokushi.jp/*"],
      "js": [ "3gokushi-beyond.user.js" ],
      "matches": [ "http://*/*", "https://*/*" ]
   } ],
   "description": "browser 3gokushi beyond user script ",
   "name": "3gokushi-Beyond",
   "version": "1.28.1.7"
}

あとはこのディレクトリをデベロッパモードにした拡張機能から2つのファイルを入れたディレクトリを選択し読み込ませる。
たったこれだけです。Google Chromeだと標準機能のDeveloper Toolsが使えて便利です。

Firefoxの場合firebugがあるけれど、firebugGreasemonkeyスクリプトをデバッグする方法がわからない・・・。それに4.0だと重いし。
どなたかFirefoxGreasemonkeyスクリプトをデバッグする便利な方法しりませんか?
主に使いたい機能はbreakやらvalue内容みたりとかなのですが。

beyondを51x51マップに対応させてみた。

既存の機能でmapに関連するものを全て51x51のマップに対応させてみた。
51x51マップの場合アイコンだと解りづらい?かもしれないので、
文字にしてみたけどどうなんだろう・・・
出兵、削除、建築等の完了時間はマウスオーバーで表示されるようになってます。

あ、それはそうとデバッグの時に気付いたけど、
ブラ3ってOperaって非対応だったんですね・・・

バグ報告等あれば下記記事で。
3gokushi-Beyondの記事
3gokushi-Beyond for Operaの記事

Operaのグリモンとかについてのメモ

  • Operaのグリモンは*.user.jsと*.jsでは挙動が違う。
  • 公式では*.user.jsとするとグリモンと同じような動きをすると書いてあるが実は実行タイミングが違う。
  • 実行タイミングを同じにするにはDOMContentLoadedイベントで実行するようにする。
  • 他のブラウザと違ってサンドボックスが生成されないのでグローバル汚染されやすい。
  • 他のスクリプトで生成された関数等も利用可能。
  • Prototype.jsが使われていた場合JSON.stringifyがまともに使えない(prototype.jsのバージョンにもよる?)
  • 9以前のバージョンではcontextmenuを上書き出来ない。
  • 9以前のバージョンで右クリックを使う場合はclickイベントを設定し、右クリックかを調べる。
  • 10以降のバージョンでcontextmenuを使う場合は「コンテキストメニューのイベントを検知するスクリプトを許可」にチェックを入れないとだめ。

あとは思い出すか見つけたら書こう。

ファイルのミラーに関して

今回ファイルの置き場所をgithub上にすべて変更しました。
なので基本的にはファイルが消えるという事はありません。
またgithub上から過去のバージョンもインストールできるようになります
(現在以降にリリースするバージョンに関してのみですが)。

なので出来ればオリジナルのままをミラーするのはやめて頂きたいです。
改変・修正した物をアップするのはご自由に。

追記:wescriptとかは定期的に更新確認して最新版にしてくれるからまだ良いんですけどね・・・
さらに追記:出来ればでいいのですが、改変・修正する場合はgithubでforkしていただけると・・・

mapstar for Opera追加のお知らせ

というわけで追加してみました

動作確認したバージョン
Opera:11.10

スクリプトの場所
https://github.com/romer/browser-3gokushi-mapstar/raw/master/3gokushi-mapstar-opera.js

Operaの場合インストールというものは無く
ダウンロードして各自が設定したUserscriptのフォルダに配置してやる必要があります

設定する場所は
設定→詳細設定→コンテンツ→JavaScriptオプション→ユーザーJavaScriptフォルダ
から設定できます

Opera版のバグはこちらへお願いします