Hatena::ブログ(Diary)

ばぐとらぶごる このページをアンテナに追加 RSSフィード

2015-12-25

[]新イベントOnHourTimeSignalについて

※本記事は伺か Advent Calendar 2015の12/25の記事です。

新イベント "OnHourTimeSignal"

SSP 2.3.71で新イベント "OnHourTimeSignal" を実装しました。

詳しくはこちら↓~

http://ssp.shillest.net/ukadoc/manual/list_shiori_event.html#OnHourTimeSignal

しかし、よく見たらReference群はOnSecond/MinuteChangeと同じだし、わざわざ新イベント名をつける意味って何なの?という疑問が間違いなく出てくると思います。

今回はこのイベント新設の狙いと、今後の展開についてです。

実装目的

OnSecond/MinuteChangeの説明をよく見ると「喋れないときはNOTIFYで通知され、トークは無視される」という重要な記述があります。

この部分が大事で、今までの時報処理ではたいてい「時」が前から数値が変わったらトークとか、そういう簡易的な実装だと思いますが、その場合、最小化されていたり、passivemodeだったり、そもそも前のトークを喋っている最中だったりと、この条件設定でトークが無視される機会はたくさんあります。

それならOnSecond/MinuteChange自体をトーク可能なタイミングにずらして通知すれば良いのではないか、という案も出てきますが、時刻をきちんと通知する定期処理イベントとしての役割が失われるので、できれば避けたいところです。

結局ゴースト内部で「トークできないフラグが外れるまでトークを保留してから処理」する実装で今までなんとかしてきたのですが、これが処理のフラグ管理が面倒で…

「本体側でどうせフラグ持ってるんだからなんとかそのへんよしなにやれよ!時報だけでなんでオオゲサな処理が要るねん!」ということで、このイベント実装となりました。*1

応用

単純な時報の簡易実装目的だけではなく、日付が重要になる処理をしているゴーストでの確実な日付変更イベントなどに応用できると思います。

今後実装要望の状況によっては、日付変更専用イベントや、?時30分用も作ったほうがいいのかもしれませんが、イベント名をいっぱい作りまくると仕様に埋もれてしまいそうなので、とりあえず今はこのくらいで。*2

意見ください

他にも「今でも実装できることはできるけどちゃんと作るのは超面倒」なものがあれば、本体側の実装を検討するので、今できるからいいや…と投げるのではなく、思いついたらBTSへ。

http://ssp.shillest.net/bts/guest.cgi?project=ssp&action=top

*1:「時報しゃべらないのでSSPのバグでは」という報告が複数上がってついに面倒になったからという本音は秘密である

*2:On30MinTimeSignalだのOn15MinTimeSignalだのOnDateTimeSignalだの乱立したら大惨事であります

2015-04-02

[]RouterBOARD RB750GLでやらかした時のメモ

RouterBOARD RB750GLでやらかした恥ずかしいメモ類。

#1 パケットロス祭り→MTU/MRUの設定

フレッツ光ネクストのMTUは1454。明示的に設定しないと色々悲惨なことになる。RouterOS初心者が最初につまづく定番らしい。

Interfacesの該当設定を開けて、General内のMax MTU/MRUを両方とも1454に設定しよう。下記の上のほう。

http://blog.livedoor.jp/vigonetlabs/archives/1011870605.html

#2 ファームウエア更新は手動でやろう

自動(System->Packages / Check for Update)だと時々トラブるらしい。ダウンロード完了前に再起動がかかるバグがある時があったとかなんとか…

WinBoxで接続して、Upgrade Package (NPK) を手動でダウンロードし、WinBoxのウインドウ内にドラッグ&ドロップするとアップロードが始まる。あとはSystem->Rebootで再起動するだけ。

#3 Firewall設定をしないと外からいじれるよ

System -> Passwordでパスワード保護するのは当たり前として…

下記の下のほうを見てFirewallを設定し、必ず外から管理用ポートへのアクセスをブロックしよう。

http://blog.livedoor.jp/vigonetlabs/archives/1011870605.html

#4 設定ミスでやらかした→ボタンでリセットする前にNeighbourを試してみよう

http://www.mikrotik.com/download

ダウンロードリスト内のNeighbour。これ何やねん?

→設定ミスでLayer4(TCP/UDP)レベルでアクセス不能になった時に、Layer2(MACアドレス指定)でTelnetできるツール。とりあえずリセットする前にダメ元で試してみよう。

RouterBOARD直下にWindows機をつなぎ、NeighborViewerを実行すると、RouterBOARDのMAC Addressが出てくるので、Mac Telnetボタンでログインできる。

または、MACアドレス直打ち(MAC Telnet to...)も可。

#5 MNDP無効化

念のため、外向きのインターフェース上でのデバイス探索を無効化しておく。

IP->Neighbor の Discovery Interfaces 内の外側に向いているInterface(PPPoEなど含む)を開き、Disableで無効化。

2014-12-25

[]SSP 2.3.53〜54の更新内容について

この記事は、伺か Advent Calendar 2014の12/25担当です。

2.3.53〜54にかけて、いくつか重要部の更新を行いました。

内容はものすごい地味なのが1つ、ものすごい破廉恥なのが1つです。

地味編:SERIKO描画仕様の変更

f:id:ponapalt:20141224222352p:image

上の画像のように、アニメーション指定の中から、複数のelement指定のあるsurface番号を呼び出した場合の挙動がまともになりました。

今までもoverlayだけならきちんと動いていましたが、それ以外でも「真っ当な」結果を生むようになりました。

以上です。

…いや、この「真っ当な」というのが曲者です。

仕組みは非常に単純で、上の例でいけばsurface101内のelementをあらかじめ背景が透明な画像に対して指定通り全部合成しておき、その合成結果の画像をsurface0の着せ替え指定でinterpolate指定で合成しています。

今まではelementを1つ1つ毎回合成していたので、overlay指定以外でこれをやると、なかなか意図しない怪しい結果になってしまっていました。

この変更のメリット
  • シェル画像を各部品ごとにバラバラに用意しておき、部品ごとに合成していく自由度の高いシェルを構築可能
  • 合成結果は内部でキャッシュされているので、複雑にelementまみれな定義でも合成コストは1回のみ(高速になる)
    • 上記の通りにアニメーションで使わなくても、element指定が複雑なシェルはすべてこのキャッシュの対象になるので、どれだけ超ド変態な定義を書いても合成コストがほとんどかからなくなります。
デメリット
  • ちょっとメモリ消費が増える
  • もしかしたらすごく怪しく複雑な合成処理をしている既存ゴーストに影響があるかも

破廉恥編:タッチパネルでホイールイベントを起こせるようになった

これの何が重要なのか。

マウスホイールでぐりぐりやるとスカートがめくれるゴーストさんを、タッチパネルで直接指を使ってめくれない!!!!!

こんな事態は許せないので、マウスジェスチャ機能で上または下のジェスチャを行った場合にゴーストがジェスチャイベントに反応しない場合は、タッチパネル上からの操作に限り、ホイールイベントを内部で起こすことにしました。

SSP上のマウスジェスチャは右ドラッグですが、これはタッチパネル上でも簡単に起こせます。

目標位置を1本指でタッチ、そのまま1秒ぐらい動かさないで居ると、下の画像のように□マークが出ます。

f:id:ponapalt:20141224222353p:image

マークが出たら、指を上に動かしてください。

めくれます。

以上です。

そのほか編:SSPヘルプがWeb上に移行しました。

Windowsのヘルプシステムにまともに使えるのがなくなったのも理由ですが、ヘルプをWeb上に移行した上で、ukadocプロジェクトに丸投げしました。これはひどい。

ここからも見られます→ http://ssp.shillest.net/ukadoc/ssphelp/

おおむね もっしょくしさん奈良阪さん あたりを主としてukadocのコミッター担当さんが超がんばってくれたようです。ありがとうございます。

私はだいたい見てただけです。これは超ひどい。

ukadocの本来のおしごと、まともな仕様書の編集についてもよろしくです。

2014-05-17

[]里々のユリウス日計算スクリプト(修正版)

id:Umihotaru:20081226 のスクリプトが整備班版里々で怪しい動きをしていたので、下記の通り修正です。

@ユリウス日
(calc,
365*(ユリウス日要素)+(ユリウス日要素)/4
+3059*((if,(A1)>2,−2,10)+(A1))/100
+(ユリウス日要素)/400
−(ユリウス日要素)/100
+(A2)+1721089)

@ユリウス日要素
((A0)−(if,(A1)>2,0,1))

修正箇所は1箇所だけで「@ユリウス日要素」の部分です。

A1パラメータ(年月日の月)が2以上の場合、旧版では、

  • ((A0)(if,(A1)>2,,-1))
  • ((A0)(if,5>2,,-1))
  • ((A0))
  • (2014)
  • \s[2014]

というふうに、数値のみを括弧で再評価した結果、\sタグに化けて以降の演算を壊してしまう問題がありました。

修正分では、ダミーのゼロを入れているため、

  • ((A0)−(if,(A1)>2,0,1))
  • ((A0)−(if,5>2,0,1))
  • (2014−0)
  • 2014

というふうに数値として扱われ、以降の演算で異常は起きなくなります。

里々改修版の互換バグか記述の不具合か怪しいところですけど、とりあえず修正まで。

2013-03-28

[]Coral CDNを使って、ダウンロードの負担を分散する

フリーのレンタルサーバを借りて、ページを作って、NAR上げて、さあゴースト公開したぞー!

……と意気込んでいるのもつかの間、ダウンロードが集中してサイトが403/500エラー……

という話をちょくちょく聞きます。

本来このような無料レンタルサーバは、アクセスが集中するサイトの利用をあまり想定しておらず、通信が集中したら当然一時的に止められてしまいます

これをうまいこと分散するテはないものか。

そこで、SSPの配布でも一時使用していた、Coral CDNの出番です。

これを使えば、世界各国のキャッシュサーバに、このような負担を分散することができます。

使い方は簡単で、たとえば

このように、http:の後のサーバ名の部分に、".nyud.net"を足すだけです。簡単ですね。

あとは、サービス運用チームに感謝の意を捧げつつ、適用後のURLをダウンロードリンクとして貼るだけです。

注意:海外にしか配信サーバがないサービスなので、なんでもかんでも適用するとやたらと遅くなります。

2013-01-21

[] CD-ROM トレイを取り出せる 伺か/SSP拡張、「eject」作った。

伺か 使ってると良く CD-ROM を取り出したくなりますよね。

ならないとしたら、今すぐこの記事を読むのをやめて病院に行って下さい。*1

独立伺か研究施設 ばぐとら研究所 倉庫 eject PLUGIN

http://ssp.shillest.net/warehouse.html

インストールすると

f:id:ponapalt:20130121220317p:image

というメニューが追加されるので、押すだけで CD-ROM トレイがゲロっと排出されます。

便利ですね!

皆さんもぜひ、使ってみて下さい。

*1:こういうテンプレで書くのが鉄の掟らしいので気にしないでください。