yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/11 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
カテゴリ表示
 カテゴリ お知らせ に当てはまるもののみを表示します。

 存在する記事 11 件の中から 1-5 件を表示しています。
TBのUTF-8対応化
2006/06/25(Sun)16:58:11
 UTF-8を使ってトラックバックすると文字化けしてしまうこのブログ。
 何とかできないものかと考えてはいましたが、対策は容易ではなく、放置状態になっていました。しかし、このほどcoolmintさんからのトラックバックが化け化けになり、さすがにこれを放置ではまずいということで、UTF-8変換機構を実装しました。このサーバーではjcode.pmも使えるのですが、これを使うと移植性が損なわれるため、文字通り「実装」を行っています(PHPならmb_convert_encoding("文字列" , "Shift_JIS" , "UTF-8")だけで良いわけですが、Perlに標準でそういう機能はありません)。
 条件としては、エンコードを指定した「charset」データが送られてくることが必要です。charsetにて「UTF-8」が指定されていた場合、文字化けなくトラックバックを行うことができます。逆に、今後もなお文字化けしてしまうようなら、そういう仕様であるとしてあきらめるか、ブログの提供元にcharsetを入れるようご相談ください。
 レンタルブログなどのトラックバックが正常に行えるかはまだ確認していませんが、UTF-8でデータを送るタイプのトラックバックテスト用CGIを実装し、実際にトラックバックを行ってみたところ、正常に動作することを確認しました(ただし、Shift_JISとUnicode同士は完璧にマッピングできるわけではないため、状況によって文字化けが出る可能性はあります。これはもう、どうしようもありません)。

※2日後追記
 文字コード自動認識機構を搭載しました。相手側からcharsetが送られてくればそれを信用しますが、もし送られてきていない場合、文字コードの自動認識機構を使って文字コードを判定します。
 ただし、文字コード認識機構は、どれほど精密に作ったとしても、100%正しい判定を行うようにすることはできません。これまでの動作テストによれば、100%正しい変換がなされてはいますが、当ブログ以外のブログにとってもcharsetがある方がありがたいことを考えれば、charsetを入れることをおすすめします。
 この機能拡張は、レンタルブログを利用されている方など、ユーザーがソースを改変できない状況を考慮したものです。

 私の落ち度もあるのでしょうが、このブログ、

05.02:「ブログ 管理者の戦記」初公開。ほとんど日記アップロードの簡略化用
05.07:RSS自動生成機構を導入
05.07:トラックバックに対応
05.12:トラックバックにGETを使うブログからも送れるよう、トラックバックの仕様を変更
05.12:ブログのデザインとコーディングをチューニング
06.01:携帯電話に対応
06.01:検索機構を導入
06.03:文字コードの関係で誤ったヒットが行われなくなるよう検索を改良
06.06:アドバンスドサーチを導入
06.06:トラックバック送信CGIを導入
06.06:UTF-8トラックバックに対応

 など、様々な更新を重ねています。常に進化するブログ、及び常に進化する管理者でありたいものです。
カテゴリ [お知らせ] [トラックバック 0][コメント 0]

「トラックバッカー」登場
2006/06/07(Wed)21:17:50
 ブログといえばトラックバック、日記とブログの最も大きな違いは、何といってもトラックバックと考えられます。実際のところ、日記にトラックバック機能が付加されたものがブログであるといっても過言ではありません。
 しかし、ブログ自体の機能であったり、ISPやページスペースの制限であったり、あるいは日記を愛用していてブログに乗り換えるのが難しい方などは、残念ながらトラックバックを使用することができません。また、会員制で会員同士でしかトラックバックできないブログというものもあり、こちらもやはり私のブログスクリプトにトラックバックすることはできません。
 こうした方は結構いらっしゃるようですが、トラックバックという双方向メディアを使えないのは極めて残念なことですし、閲覧者の方の利便性の面でもよろしくありません。何とかならないものでしょうか。
 そこで、次のようなものを開発しました。

管理者の戦記 トラックバック

 これはトラックバックを生成して送信するスクリプトですが、あくまでトラックバックできないブログなどをお使いの方のために開発したものであり、ブログからトラックバックを使用できる方は、可能な限りそちらを用いてください。通常はブログが勝手に送信してくれるデータまで手入力が必要であるため、手順も通常のトラックバックより少々面倒です。
 また、この送信スクリプトはローカル環境で可能な限りテストを行いましたが、必ずしもバグがないと言い切ることはできません。何かお困りの点がありましたら、ご遠慮なくご意見・ご報告をお寄せください。

 なお、このスクリプトは理論上、特別な制限を課していないあらゆるブログに対してトラックバックを送信できますが、このスクリプトを用いて他のブログにスパムトラックバックを送信されては困るため、管理者の戦記以外のブログにトラックバックすることはできません
 トラックバックを送信される場合には、入力ミスなどにご注意ください。また、元記事にはできるだけ当ブログの記事へのリンクをお願いします(閲覧者の方の利便のため)。
 ついでに、もはやメリットはないと判断したため、HTML版ブログの自動生成機能は終了しました。HTML版を利用されていた方は、お手数ですが今後はCGI版をご利用ください。
カテゴリ [お知らせ] [トラックバック 0][コメント 0]

「簡易者の戦記」登場
2006/01/10(Tue)22:12:08
 「ブログを携帯電話で読みたい」という要望がありましたので、この際作ってみました。管理者の戦記・携帯電話バージョン。通称「簡易者の戦記」です。
 表示としては極めてシンプル、無駄なものは全部省きました。ただ、それでもブログ自体が長いので、携帯電話で読むのは辛いかもしれません。また、本文中のリンクやタグなどがPC向けになっている場合がありますので、その点もご注意ください。
 Openwave SDKを使って表示を確認したところ、とりあえず及第点という印象でした。少々骨ですが、過去の記事を探して読むこともできます。機能限定版ですから、PCで使った方がずっと高機能で読みやすいですが、そこは携帯電話ですから。同じ「携帯」でもPDAを組み合わせて使った方が楽なのは確かです。
 ちなみに、これは利用者の方々には関係ありませんが、ついでに携帯電話からも書き込める機能を実装しました。ただし、書き込めるだけです。トラックバックは送れません。修正も削除もコメントやトラックバックの削除もできません。携帯電話でそういうことができても仕方ありませんし、携帯電話では複雑怪奇なフォームが表示できなかったり崩れたりするため、あまり色々なことができないのです。

 肝心の使い方ですが、代表的な3携帯電話(DoCoMo/Vodafone/au)であればそのままブログを表示するだけです。それ以外の携帯電話であったり、これらの携帯電話であっても専用画面が表示されない場合は、ブログURLに「blog.cgi?mode=lite」のように引数を付加してアクセスしてください。
 どれもこれも、このブログが当サイト仕様の上、私が偶然にも運良くプログラムなどを少しばかり扱えるからできた芸当です。これだから開発者は幸せです。
 携帯電話用「簡易者の戦記」、PC用「管理者の戦記」ともどもご愛用ください。
カテゴリ [お知らせ] [トラックバック 0][コメント 0]

Namespace 小泉:偽改革
2006/01/03(Tue)14:22:19
 同じ組織で同じ名前の人間がいたら紛らわしいものです。上の名前が同じ人がいるからと、下の名前で区別しようとしてみても、やっぱり同じ名前の人が。大体、下の名前を知る機会はせいぜい名刺しかありませんし、フリガナなしの名刺だと一巻の終わりです。田中や鈴木といった名はありがちですし、地方によって多い苗字というのもあるそうです。
 ストーリーなどでも、「イリアス」はともかく「サーラ」はありがちな名前です。バッティングすると感情移入度が下がります。さすがに「騎士サーラ」が他に存在する可能性は低いでしょうが。ですから、サーラさんを呼ぶ時には「騎士サーラ」と接頭語をつけると確実に区別がつくわけです。当サイトでは今からこれを推奨することにします。ゲーム中の会話でも、キャラ名は「騎士サーラ」「剣聖ハードゥン」「聖騎士シェイン」のように表示されますし。
 ここまではともかく、さらに深刻なのがプログラミング時のバッティングです。例えばC/C++やJavaで「int」という名前の変数や関数は作れませんが、これはint型とバッティングするからです。その他、標準関数などでバッティングが起こりやすいので、既存の名前をうっかり使わないように注意する必要があります。
 ちなみに、Javaはこれを「パッケージ」の考え方で解決しています。例えば「Integer」というクラスを定義した場合、これを普通に呼び出すと自分が作ったIntegerが呼び出されることになります。しかし、Javaに用意された同名のクラスが使えなくなるわけではなく、「java.lang.Integer」と指定してやることでそちらのクラスも呼び出せます。
 といっても、パッケージ名までデタラメにつけられるようでは、これまた他とバッティングする恐れがあるため、ドメイン名を「com.yamicha.任意のパッケージ名」のように用いることが推奨されています。ドメインなら世界に1つしかないため、誰もがこの規則に従っている限り、バッティングすることがなくなります。
 さて本題。XMLにもこれと似たような機構があり、「Namespace」と呼ばれています。例えば私がブログのインデックスにXMLを使ったとして、「title」というタグが用いられている場合を考えると、これはHTMLのタイトル指定なのか、ブログのタイトルなのかが分かりません。別に分からなくても良いのですが、Namespaceでこれを解消できるとのこと。
 さて、Namespaceを使う際には、まず「宣言」なる面倒な工程を踏まなければなりません。とりあえず書いていればどんな風でも動くHTMLと違って、XMLは平気でパースエラーを投げてきますから。というわけで、宣言の文法ですが、
<Base 
xmlns="http://www.yamicha.com/default"
xmlns:ilias="http://www.yamicha.com/ilias" >
	<ilias:elementname ilias:attributename="value" />
</Base>

「Base」及び「ilias」部分はもちろん任意の名前でも可
 といったところです。まずお約束の記述として「xmlns」を用いなければならないのですが、宣言は「xmlns:ネームスペース名="URL"」のように行います。上の例のようにネームスペース名を省略すると、それがデフォルトのネームスペースになり、明示的にネームスペース名を指定しなかった時にはこれが用いられるとのことです。
 さて、上で指定されているURLですが、実は何の意味もありません。もちろんアクセスしても404エラーが返ってきます。何のために使うかといえば、これもまたURLは1つしかないからバッティングが避けられるというJavaそっくりの理由なのです。上の「ilias」というのは、いわばURLにエイリアス名をつけているようなものであって、つまりは「http://www.yamicha.com/ilias.elementname」とみなされているわけです。
 上の例の場合はデフォルトのネームスペースがありますから、ネームスペース名を指定せずに要素なり属性なりを書くと、自動的に「http://www.yamicha.com/default.elementname」のようにみなされることになります(実際にJavaのパーサもそのように認識しています)。
 ここまで分かれば十分でしょう。早速実装に参ります。色々と試行錯誤しつつ、例によって以下のようなXMLを作成しました。
<Base 
xmlns:ilias="http://www.yamicha.com/ilias" 
xmlns:sara="http://www.yamicha.com/sara">
	<ilias:Ability ilias:use="108">Conflagration</ilias:Ability>
	<sara:Ability sara:use="0">Hado-fueiken</sara:Ability>
	<sara:Ability sara:use="75">Hishu-renzan</sara:Ability>
	<ilias:Ability ilias:use="86">Resurrect Life</ilias:Ability>
	<sara:Ability sara:use="350">Soryu-kikoken</sara:Ability>
	<ilias:Ability ilias:use="126">Ruined World</ilias:Ability>
	<ilias:Ability sara:use="200">Ryufu-reigeki</ilias:Ability>
</Base>
 どれもアビリティを表すものなのですが、魔道士イリアスと騎士サーラではアビリティの性格も正反対です。ですから、イリアスさんのuse属性は消費MRを表しているのですが(消費MR量はサンプル用のデタラメです)、サーラさんにMRなんざありません。というわけで、こちらのuseは反動による消費LAを表しています。
 しかし、世の中には例外というものもありまして、魔道士イリアスといえども技が使えないわけではありません。となると、LAの方を消費するわけですが、そこで「ilias:Ability」としながら「sara:use」と記述、両方を混在させています(例の1番下のAbility要素参照)。
 これを踏まえて実装を書くと、このようになりました。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
// 重要。これがないとNamespaceが認識されない
DocumentBuilder db = dbf.newDocumentBuilder();

Document d = db.parse("webapps\\ROOT\\ns.xml");

out.print("消費MR\t消費LA\tアビリティ\t使用者ネームスペース\n");

Element base = d.getDocumentElement();
NodeList nl = base.getChildNodes();
for(int i = 0; i < nl.getLength(); i++){
	if(nl.item(i).getNodeType() == Node.ELEMENT_NODE){
		Element e = (Element)nl.item(i);
		out.println(
		// ilias:use(消費MR)を表示
		e.getAttributeNS("http://www.yamicha.com/ilias" , "use") + "\t" +
		// sara:use(消費LA)を表示
		e.getAttributeNS("http://www.yamicha.com/sara" , "use") + "\t" +
		// Textノードを表示
		e.getFirstChild().getNodeValue() + "\t" +
		// ネームスペースを表示
		e.getNamespaceURI());
	}
}
 見ての通りこれはJSPですから、Content-typeをtext/plainにして吐き出させるなり、preタグで囲むなりすると、フォーマット化されて表示されます。大方ご想像の通りでしょうが、以下のような出力が得られました。
消費MR	消費LA	アビリティ	使用者ネームスペース
108		Conflagration	http://www.yamicha.com/ilias
	0	Hado-fueiken	http://www.yamicha.com/sara
	75	Hishu-renzan	http://www.yamicha.com/sara
86		Resurrect Life	http://www.yamicha.com/ilias
	350	Soryu-kikoken	http://www.yamicha.com/sara
126		Ruined World	http://www.yamicha.com/ilias
	200	Ryufu-reigeki	http://www.yamicha.com/ilias
 ちなみに、言うまでもありませんが、属性名が同じでもネームスペースが違う2属性を混在することは可能です。
<ilias:Ability ilias:use="154" sara:use="255">Inclusion</ilias:Ability>
 XMLもなかなか面白いではありませんか。絶対に使う気にはなれませんが。

 Excelにも数学関数は用意されているため、昨日に続いて少しばかりベクトルの計算をしてみました。具体的には、これは色々な局面で使えそうなのですが、「跳ね返り」について。
 例えば80度の位置から物体が横の壁にぶつかった場合、反射方向ベクトルは
COS(RADIANS(80)) * -1 = -0.17
SIN(RADIANS(80)) = (約)0.98
 であり、これに物体の速度を掛け合わせたものが反射後に飛ぶベクトル及びスピードになるわけです。では、これを角度にするとどうなるのか。DeltaライブラリではACOSを使って計算しているのですが、ATAN2を使うと非常に楽であることが分かりました。
(DEGREES(
	ATAN2(
		COS(RADIANS(80)) * -1 ,
		SIN(RADIANS(80))
	)
) + 360) % 360 = 100
 つまり、100度の方向に反射することが分かります。ちなみにATAN2は180度以上の数値でマイナスを返す(185度なら-175、355度なら-5)のですが、逆に言えばマイナスの時のみ360を足すか、もしくは360を足してから360で割った余剰を求めれば、飛ぶ方向を角度で得ることができるわけです。難しい条件判定を使わずとも、上のように1行で記述することすら可能です。これが左右でなく上下の壁に反射する場合には、COSではなくSIN側の符号を反転させれば良いだけです。
 なお、三角関数は右(X 1 , Y 0)から始まって反時計回りに角度が増えていきます。それを頭の中で描いてやれば、計算が比較的容易に行えます。クイックファストのエフェクトを作った時など、時計が3時15分の位置から反時計周りに回転して驚いたものです。

 ここでお知らせなのですが、ブログのRSSの書式を変更しました。RSSリーダーをお使いの方はすぐにお分かりになったことでしょう。descriptとして記事の内容を500バイト程度まで表示するようにしてみたのですが、何といっても苦慮したのがタグの扱い方です。
 CDATAで囲んでいるため、HTMLのタグをそのまま書き出せるとはいっても、500バイト制限によってうっかり閉じタグが消えたりしては冗談になりません。それに、descriptの文字が大きくなったり太くなったりされても、HTML式のRSSリーダーなどをお使いの方にとっては大変迷惑でしょう。しかし、改行なしでは書式がぐちゃぐちゃになりますから、brだけは残したいところです。
 そこで出てきた課題が「<>以外のタグを全部削除せよ。ただし<日本語>のような明らかにタグではないものは削除しない」「文字制限に引っかかり、タグが<brのように中途半端な切れ方をした時に備え、これを消せるようにせよ」の2つです。とりあえず後者は簡単ですが、前者がなんとも。
 タグだけ消したいなら「s/<[0-9a-zA-Z\/!][^>]*>//g;」で何とかなりますし([^>]部分を.*?にすると、改行でマッチが行われないので不可。見落としがちなので注意)、これまたbrだけ残したいなら「s/<[^(?:br)][^>]*>//ig」とすれば良いわけですが、では「<br>ではなく、その上に先頭が英数字のもののみ削除」とするにはどうすれば良いのでしょう。
 探してみたのですが、あいにくカッコにOR(「|」で区切り)はあってもANDはありませんでした。だからといって、「s/<([^(?:br)]|[0-9a-zA-Z\/!])[^>]*>//g;」などと書こうものなら、「brでないもの、または先頭が英数の少なくとも片方に当てはまるもの」が削除されますので、<>で囲まれたあらゆるものが削除されてしまいます
 しばらく悩んだ挙句、トリッキーな方法を用いることにしました。分かりづらくなるばかりなので、本当は使いたくなかったのですが。「s/<(?!br|[^a-zA-Z0-9\/!])[^>]*>//ig」とすれば、「先頭がbr、もしくは英数以外の値」の場合に真になりますが、カッコの先頭で「?!」によって条件が反転されているため、「先頭がbrではなく、かつ英数であること」が条件になり、改行以外のタグのみを削除することができます。
 これでRSSも少しは読みやすくなるでしょうか。

 本日はどこの社説もなぜか「少子化」や「福祉」を取り上げているのですが、そういえば育児休暇を取らせた中小事業所に対して100万円を支給するという地域振興券並みの愚策が始まったのでした。念のために言っておきますが、事業所に対して支給するのであって、親の側には1円も入りません。それほど金が余っているのなら、いくらでも少子化対策できるというのに。
 これを発表したのがちょうど選挙の時でした。こんなザル制度、どうせまともに利用する企業の方が珍しく、育児休暇を創設すると見せかけて100万だけ取り上げる企業の方がよっぽど多いでしょうから、おそらく少子化対策を隠れ蓑にしたバラマキにより、中小企業票を呼び込む作戦だったのでしょう。このようなことをする内閣を選ぶ人間も選ぶ人間といったところです。
 この問題に関しては、あまりにバカバカしすぎてこれ以上語る気にもなれません。これは「小泉改革の代名詞」として、以前の「地域振興券」「IT革命」とともに3大愚策として語り継がれるべきものでしょう。
カテゴリ [開発魔法][社会問題][お知らせ][ゲーム開発] [トラックバック 0][コメント 0]

謹賀新年
2006/01/01(Sun)02:20:42
 皆様、あけましておめでとうございます。
 今回のブログは少々趣向を変えまして、「コメント・トラックバックフリー記事」とさせていただきます。(スパムを除き)どなた様も新年の挨拶代わりにコメント、トラックバック、反撃トラックバックなどご自由にどうぞ。
 ブログをお持ちの方に対しては、まことに勝手ながら挨拶記事と思われる記事にトラックバックさせていただきました。

 それでは、旧年中お世話になった皆様にメッセージを。

・ruvaさん(うにうに画像倉庫
 旧年は素晴らしい画像などをありがとうございます。活用させていただいております(ここの左上とか)。早速移転とのこと、作業お疲れ様でした。「おみやげ」の騎士サーラも楽しみにしておりますので(旧年は1日数回アップロードをチェックしていたほどです)、無理をしすぎない程度にがんばってください。

・月夜影ひさめさん(月夜影
 旧年は大変お世話になりました。私がインターネットで手に入れた最も大きな収穫は、こうした方に出会えたことと言っても過言ではありません。なぜ私のような頭の良くない人間が、このような聡明な方と出会えるのでしょうか。が、一言言わせていただきますと、「年賀状画像の日付、2005.01.01になっていますよ」。

・るうさん(るううるる。
 余計なモノを送りつけた上にトラックバックまで。あつかましいマネを失礼します。旧年中はお会いする機会があってうれしい限りでした。ブログには隠れファンが多いようですが、何を隠そう私もその1人なのです。

・coolmintさん(Endless Ultimate
 例によっておかしなものを送らせていただきました。旧年中は様々な面からご支援をいただきありがとうございます。全世界中の人々が1人残らず見限りそうなことばかりしている私ではありますが、本年もよろしくお願いいたします。

・NORさん及びお絵かきチャットでご同席いただいた皆様(North by West
 これまた大変お世話になりました。本当は年賀メールの1つでも送りたかったのですが、さすがに内容が微妙で、送信して大丈夫かの確認が取れなかったため、見送らせていただきました。新年もお目汚しにうかがうことになりそうですが、よろしくお願いいたします。

・技術者集会参加者の皆様
 ご参加ありがとうございます。大変楽しめました。yamicha.comももうすぐ2周年ですが、このように様々な方と交流できるのですから、本当に運営してきて良かったです。そのうちまた気分の問題で、いきなりチャットを立ち上げるかもしれませんが(ちなみに今度こそフレーム式HTMLチャットであるServletチャットです。IE 3.23、Netscape 3以上で動くタイプ)、もし見かけたらご参加をお願いします。

 それでは、良いお年を。
 この記事はコメント・トラックバックフリー記事です。管理者にメッセージを送ったり、新年の挨拶でもしてやろうかという方は、ご遠慮なくこの記事にコメントやトラックバックを送りつけてください。

2006/01/01 yamicha.com/魔道士イリアス/Developer Soul Project/管理者の戦記
カテゴリ [お知らせ] [トラックバック 0][コメント 0]

[1] [2] [3] 次のページ->
- Blog by yamicha.com -