記事一覧

.htaccessでアクセスコントロール

サイトへのアクセスコントロールには実施すべき優先順位があります。

  1. .htaccessによるアクセス遮断
  2. robots.txtによるアクセス拒否意思表示
  3. HTMLファイルのmetaタグによるインデックス拒否意思表示

基本的に一番目の.htaccessによるアクセス遮断のやり方さえ覚えておけば十分だと思います。ただし、レンタルサーバで.htaccessが使えない場合は二番目の方法を、robots.txtをサイトトップに配置できない場合は三番目の方法を、仕方なく選択し、アクセスする側の対応に期待する場合もありえます。

実験

pick up - Wiz★の防備録

いままでは作者の側では事実上、制御不可能*1でしたが、この更新で希望を示せるようになったわけですね。

(少なくとも.htaccessが利用できるレンタルサーバでは)今までも、(SiReFaSo以外の更新巡回捕捉サイトに対しても)制御可能でしたよ、ということを今から実証してみます。今回検証に使用するサーバはland.toです。

test.zip

このzipにはアクセス制限をかけているのでブラウザからはダウンロードできません。しかしSSPのゴーストにDnDするとnarフォルダ内にダウンロードされます(ゴーストではないダミーzipなのでインストールはできません)。同一ディレクトリ内の.htaccessに以下のように記述しています。

SetEnvIf User-Agent "SSP" ssp

order Deny,Allow
Deny from all
Allow from env=ssp

Firefoxの拡張などでUser AgentをSSPに偽装すればダウンロードできるかもしれませんが、少なくともSSPに偽装した検索クローラなど聞いたことはないのでアクセスされることはないでしょう。更新ファイルについても同様の効果が期待できます。要するにSSPでのネットワーク更新を有効にしつつ、更新捕捉サイトのアクセスをシャットアウトできます。必要に応じてmateria,CROW,偽林檎,ninix-ayaなどのホワイトリストを作成しておくとよいでしょう。

まとめ

最初に紹介した3つの方法の特長をまとめます。

.htaccessの問題点
  • サーバによっては利用できない場合がある
robots.txtの問題点
  • サーバによってはサイトトップに設置できない場合がある
  • 意思表示でしかない
  • 大手検索エンジン以外にはほとんど実効性がない
metaタグによる記述の問題点
  • HTMLファイルにしか記述できない(画像ファイル・ZIPファイルにmetaタグは書けない)
  • インデックス拒否の意思表示であってアクセス拒否ではない(そもそもアクセスしないことにはmetaタグは読めない)
  • 意思表示でしかない
  • 大手検索エンジン以外にはほとんど実効性がない

一番目の方法が使えない事情がある場合にそなえて、SiReFaSoはrobots.txtに対応しました。「検索避けしてるけど更新捕捉は別にいいよ」って場合は更新ディレクトリを許可すれば登録を受理します。具体例:

User-agent: *
Disallow: /
Allow: /ghost/your-update-directory/

二番目の方法が使えない(サイトトップに設置できない)場合は検討すべき課題と考えています。ゴーストの更新ファイルはHTMLではないのでmetaタグは書けないですしね。これについては三番目の方法に相当する独自の仕様を固めて実装した上でお知らせしたいと思います。

参考リンク

今回参考にさせて頂いたサイトをご紹介しておきます。検索避けに関しての情報がとても平易な表現で書かれています。自分のサイトは検索避けしないから…という方でも、一度目を通されると知識として覚えておく分には色々と役立つと思います。

検索避け覚書

SiReFaSoのrobots.txt対応

プチリニューアル

所々小さなバグが目立ってきて修正の必要に迫られたので修正ついでにSiReFaSoを少し改装しました。

HTMLの構造が変わったのでゴーストに関する投稿を表示するUserScriptが動かなくなります。修正版をアップロードしたので必要な方は更新願います。Operaの拡張はこちら。→sirefaso.oex

ついでにrobots.txtに対応しました。Pluginによる登録時および更新時に更新用サーバーのrobots.txtを見に行って、製作者によるアクセス拒否の意思表示がされていた場合は登録および更新を不受理とすることにしました。

参考→ ゴーストを紹介してほしくない場合の話

robots.txtの仕様は不勉強なもので私も詳しくないのですが、SiReFaSoのUser Agentを指定している人などいないと思うので、ワイルドカード指定のみを見ることにしています。具体的な例を挙げると、以下のようなrobots.txtを確認した場合は不受理となります。

User-agent: *
Disallow: /

巡回の度に見に行くのはつらいので登録時および更新時のみです。既に登録されてしまったものについては、更新時に不受理の場合に既に登録済みのものを登録抹消する仕様を検討しています(検討中)。

インストールされていない追加シェルを紹介する

type,shell_notinstalled

非公式シェル仕様書を眺めていたのですが、一番下の方に shell_notinstalled なんていう知らない項目を見つけました。(みんな知ってた?)

type,shell_notinstalled
name,せりこver.To
craftmanurl,http://www.abc.or.jp/sakura/index.html
craftman,Tomohiko
craftmanw,ともひこ

こんな風に書いたdescript.txtを該当ディレクトリに入れておくとシェルが"見える"ようになります。切り替えようとするとダイアログが開いて配布ページに誘導されます。

ウチのゴーストの場合

ファイル 103-1.png

ファイル 103-2.png

注意点

NARを作成するときに含めます。ネットワーク更新に含めてはいけません(既にインストール済の人でも上書きされてまだインストールされていない状態として認識されてしまうため)。

ネットワーク更新に含められないのが残念ですが、追加シェルの存在するゴーストのNARを作成するときは含めてみるとよいかもしれませんね。

ゴーストの更新Widgetを設置する

新年明けましておめでとうございます

新年一発目からSiReFaSoの宣伝のようなものを思いついたのでお付き合い頂ければと思います。

自分のサイトに更新情報を表示する

SiReFaSoには作成した当時からRSSの他にJSONPというAPIのようなものが利用出来るようにしています。まだ作りたてで不安定だったもので(今でも不安定ですけど)積極的に紹介していなかったのですが、もういいやと思って何か一つデモのようなものを書いてみました。

続きを読む

イベントを開催するときに役立つサイト

伺かアドベントカレンダー2010

12-05より上記イベントを開催し、無事に終了致しました。ご参加下さった方々、ご支援頂いた皆様へ、心より感謝申し上げます。ありがとうございました。

今回利用したWebサイトなど

突発的に思いついた企画であっても、そういったイベントの開催を支援するサイトを利用すると管理がしやすくなりますので、いくつかご紹介したいと思います。このエントリをご覧の皆様が今後イベントなどを企画する際にお役に立てましたら幸いです。

ATND

今回利用させて頂いたサイトです。OpenIDや各種Webサービスのアカウントでログインすることができ、参加申し込みやキャンセルの受付管理、日程・会場等の告知、コメント機能、参加者リストのダウンロードなどができます。WebのUIも非常に洗練されていて使いやすいと感じました。小規模な技術系勉強会の告知などにもよく利用されているようです。今の時期は忘年会などでの利用も多いようですね。

PARTAKE

ATND同様、イベント管理ツールです。新着イベントやイベント検索機能が見やすい位置にあって良いですね(ATNDは検索フォーム無いんだろうか?)。何故か関数型言語関連のイベントの利用実績が多いようです。

駄でべろぱの小ネタWiki

イベント管理ツールというわけではないですが、今回併せて利用させて頂いたWikiです。簡易な記法で誰でも編集できるので、リンクまとめや日程調整などの補助的な利用に適していると思います。伺か関係者の間でよく利用されますので、そういった方々向けのイベントであれば宣伝を兼ねることもできます。

最後に

年末のご多忙な時期にお付き合い頂きました方々へ、改めて御礼申し上げます。来年もまた素敵なゴーストさんに出逢えますように。それでは、良いお年を。

Opera11を使ってみた

Opera11が一昨日リリースされたようで、更新したら拡張が使えるようになっていました。Firefox, Google Chrome, Safariに続いて、ついにOperaも拡張対応ブラウザの仲間入りですね。

拡張を作ってみた

ざっと見た感じ、Google ChromeのExtensionとほぼ一緒のようでした。何かひとつ作ってみようと思いましたが、特にネタが無かったので以前作ったゴーストに関する投稿を表示するUserScriptをOpera拡張にしてみました。

sirefaso.oex (※アイコンにNishiki-tekiフォントを使わせて頂きました)

Operaで上記リンク先を一旦ダウンロードしてOperaにDnDするとインストールできます。インストールしたらSiReFaSo以前紹介したような表示が見れるはずです。

UserScriptなら以前のバージョンのOperaでも動くわけなのですが、設定が面倒でしたし、拡張ならブラウザのメニューから簡単に追加も削除もできて良い感じです。

追加シェルとバルーンのネットワーク更新時にもトークさせるYAYA版

伺かアドベントカレンダー2010/追加シェルとバルーンのネットワーク更新時にもトークさせるお話

知らなかった。ショック。

YAYAの場合

はろーYAYAわーるど」ならこんな感じですね。OnUpdateOtherBeginとOnUpdateOtherCompleteだけshellとballoonに対応してみた版。他はghostの更新と共通にしてあります。

// This document is in the public domain.

OnUpdateOtherBegin
{
  if ISFUNC('OnUpdateOtherBegin_' + reference[3]) {
    EVAL('OnUpdateOtherBegin_' + reference[3])
  }
  else {
    "\0\s[5]%(reference[3])に更新はあるかなー?\w8\1\s[10]どうだろな。\e"
  }
}
OnUpdateOtherBegin_shell
{
  "\0\s[5]流行のファッションをチェック!\w8\1\s[10]無駄遣いはするなよ。\e"
  "\0\s[0]クリーニング屋さんに行ってくる。\w8\1\s[10]何か預けてあったか?\e"
}
OnUpdateOtherBegin_balloon
{
  "\0\s[5]丸文字フォントのバルーンになーれ!\w8\1\s[11]やめろ。\e"
  "\0\s[0]Apric○tっぽいバルーンをお願いします。\w8\1\s[10]諦めろ。\e"
}
OnUpdateOtherComplete
{
  if ISFUNC('OnUpdateOtherComplete_' + reference[3]) {
    EVAL('OnUpdateOtherComplete_' + reference[3])
  }
  else {
    OnUpdateComplete()
  }
}
OnUpdateOtherComplete_shell
{
  if reference[0] == "none" {
    OnUpdateComplete()
  }
  else {
    "\0\s[5]わーい!\w8ちょっと新しくなったよ!\w8\1\s[10]どれどれ。\e"
    "\0\s[0]どう?\w8ナウい?\w8\1\s[11]ナウいってお前‥\w5‥\w5。\e"
  }
}
OnUpdateOtherComplete_balloon
{
  if reference[0] == "none" {
    OnUpdateComplete()
  }
  else {
    "\0\s[2]びっくりしてフォントがでっかくなっちゃった!\w8\1\s[10]んなこたーない。\e"
    "\0\s[0]音声読み上げに対応しました。\w8\1\s[10]バルーンだけじゃ無理だろ。\e"
  }
}
OnUpdateOtherReady                 { OnUpdateReady() }
OnUpdateOtherFailure               { OnUpdateFailure() }
OnUpdateOther.OnDownloadBegin      { OnUpdate.OnDownloadBegin() }
OnUpdateOther.OnMD5CompareBegin    { OnUpdate.OnMD5CompareBegin() }
OnUpdateOther.OnMD5CompareComplete { OnUpdate.OnMD5CompareComplete() }
OnUpdateOther.OnMD5CompareFailure  { OnUpdate.OnMD5CompareFailure() }

ウチのYAYAゴースト(自前のミドルウェア使ってるので少し書式が違いますが)にも搭載してみました。

SSPのエラーログを見よう!

surfaces.txtを正しく書こう

今更surfaces.txtの書き方など、私より絵を描かれるみなさんの方が詳しいと思いますが、時々エラーログを吐くsurfaces.txtに遭遇することがあります。そこで今回は主にsurfaces.txtを正しく書くためのチェック方法について取り上げてみたいと思います。

なぜ正しく書く必要があるのか

間違った書き方をしても、SSPは頑張って描画してくれます。でも、それは本当に自分が意図した通りの動きをしているでしょうか。アニメーションをさせようとして、「なかなか思い通りに動かないなー」って悩んだ経験はありませんか?
それはもしかしたら、記述法が間違っているのかもしれません。また、正しくないsurfaces.txtではSSP以外のベースウェアでは表示すらされないかもしれません。効率的に記述ミスを発見して自分の思い通りの動きをさせるために、異なるベースウェア間でも同じ動作をすることを保証するために、SSPをあまり困らせないように、自作のシェルにエラーが無いかどうか、以下に紹介する方法で一度チェックしてみましょう。

surfaces.txtのデバッグ方法

まず自作のゴーストを立たせます。シェル作者さんは自分のシェルを使ったゴーストを立たせましょう。私は『ポストと狛犬』を説明用に使わせていただきます。

まずオーナードローメニューから、「機能」>「開発用パレット」を選択します。

ファイル 98-1.png

「エラーログを表示」を選択します。

ファイル 98-2.png

NoticeやErrorといったものが表示されました。今表示されているものがすべて消えることを最終目標とします。

まずErrorから。"[SERIKO]Surface=7 画像が存在しません。"とあります。 『ポストと狛犬』のshellフォルダの中にはSurface=7にあたる画像は見当たりません。しかしsurfaces.txtには以下の指定が記述されています。

surface7
{
collision0,10,50,200,90,Head
collision1,69,138,85,163,LeftEye
collision2,116,137,132,162,RightEye
collision3,18,117,187,242,Face

point.kinoko.centerx,145
point.kinoko.centery,30
}

これはSurface=7にあたる画像を入れ忘れた可能性がありますね。このままでは\s[7]としても描画されません。surface0007.pngを作成してshellフォルダに入れる、もしくはGHOST側で\s[7]を使わないのであれば、上記の記述を削除することでこのエラーは消えます。

次にNotice。"[SERIKO]Surface=** どこからも使われていません。"とあります。shellフォルダには確かにsurface00**.pngが入っていますが、surfaces.txtにはそれに関する記述がありません。つまり、このサーフィスは使われていない可能性があります。起動時にSSPが読み込んでしまう分、起動が遅くなってしまうので、このサーフィス画像は削除したほうが賢明です。

「いやいや、そのサーフィス使うんだよ!」っていう場合。surface0011.pngはそもそも狛犬の刮目サーフィスで実際使われていますし、surface0021.pngからsurface0023.pngまでは「らぼ」メニューの「ちんぼつ」で使われています。

*ちんぼつ
:(0)(21)(22)(23):何、してるんだ。
:沈没。
:な……
:(23)(22)(21)(0)どうかな。
:どうかな、じゃなくてだな……。

当たり判定もアニメーションも画像の合成もしていないのでsurfaces.txtには何も書かれていませんが、実際にはSSPが画像のファイル名から当該番号のサーフィス定義を補っていると考えられます。でも、実際に使われていないファイルと区別がつかないのでNoticeが出ています。画像を使用する旨をきちんと定義することでこのNoticeを消すことができます。

surface11
{
}

ただ、これをやると偽林檎で死ぬらしいです。(参考:殊海夕音/やってはいけない - 駄でべろぱの小ネタWiki

ダミーの記述を入れておけば問題ないでしょう。

surface11
{
element0,overlay,surface0011.png,0,0
}

他の3つのNoticeも同様の記述で消すことができます。

まとめ

いかがでしたでしょうか。これでエラーの無い真っ当なシェルをリリースすることができます。中にはSERIKO/1.xとSERIKO/2.0のアニメーションの記述が混在していてエラーが出る場合もあるでしょう。SERIKO/2.0については以下のサイトが参考になります。

非公式 SERIKO 仕様書

surfaces.txt付きのフリーシェルを作成する場合や、他のGHOSTの追加シェルを作る際にもぜひエラーなどがないようチェックしておきましょう。

ここまでくるとsurfacetable.txtの書き方に関するTipsなども欲しくなりますが、今回はここまでとさせていただきます。

宣伝

このエントリは以下の企画用に書き上げたものです。

伺かアドベントカレンダー2010

特に技術的なテーマに限定しませんので、伺かに関して何か書いてみたい方は、お気軽にご応募下さい。

伺かアドベントカレンダー2010

本日12月1日より,プログラマ有志による技術系Advent Calendarが各所ではじまる

最近技術系ブログが賑わっていると思ったらこんな企画があったのですね。

例えばMySQLはこんな感じ → http://mysql-casual.org/2010/12/mysql-advent-calendar-2010.html

JavaScriptとかめっちゃ面白そう。 → http://atnd.org/events/10497

毎日持ち回りで一人ずつTips的な何かを書いていく企画、みたいです。楽しそうですね。

伺かでもやりましょう

既に4日ですが、明日からやりましょう。

伺かアドベントカレンダー2010

突発的な思い付きですが、1人1エントリ書くだけなのでなんとかなるでしょう。各記事へのリンクまとめとかは駄デベWikiとかお借りすればよいかな?Bolgを持ってない人はWikiに書いてもいいよ!

伺かにまつわる記事であればプログラミングに限らず何でもOKです。各種Webサービスのアカウントに加え、OpenIDなどでも登録できます。お気軽にご応募下さい。

創作に役立つ知識がみんなで共有されるとよいですね。

SSPで画像を選択肢に使用する

選択肢のタグは通常 \q[表示名,選択肢ID] を使用しますが、SSPでは \__q[選択肢ID]表示名\__q というタグが利用できます。

さくらスクリプト@wiki - さくらスクリプト/基本コマンド

これを使うと何が良いかというと、"表示名"の部分にタグが利用できます。 \_b タグを使用すれば画像を選択肢にすることも可能です。

\__q[menu]\_b[menu_icon.png,inline]\__q

使用例としては、「れいちぇるのれすとらん~ねこのいるおみせ~」の着せ替えメニューがあります。画像を見ながら着せ替えを指定できるのでわかりやすいです。

拙作の「BalloonSelector」でも利用させて頂いています。