ubichupas.net

【エロゲ規制】エロゲメーカーが海外からのアクセスを規制ъ(゚Д゚)グッジョブ!!

 路面電車が登場するエロゲ『Wind -a breath of heart-』で有名な『minori』が海外からのアクセスを遮断した結果、変態外人が発狂したのを受けて、海外向けの警告ページに気の利いたメッセージを掲載したということで話題になってました。


minoriのトップページ(英語)


【ニュース速報】minoriが海外からのアクセスを遮断 ゆずソフトも追随で英語圏の人間発狂
 何故、私たちminoriが外国からのアクセスを遮断しているのか。 私たちはこのアクセスブロックに関して外国人の方々から多くの反響を受けており少し当惑しています。
なので、私たちがあなた方のアクセスをブロックする理由をこのウェブサイトで簡単に説明します。
私たち日本のエロゲメーカーは言論の自由の危機に直面しているのです。
現在、全てのエロゲについて内容を制限させる法案(これは検閲に他ならないでしょう?)が国会で審議されています。
この事は識者と政治家たちが
「日本のエロゲは諸外国で問題となり、トラブルとなっている。 然るに、日本国は諸外国からエロゲを放逐すると共にその内容についても検査を行い、制限を設けるべきである。」
と主張しているからです。
成程、私たちminoriは彼らの言葉を信じる事にしました。
だからこそ、私たちはあなた方外国人のアクセスをブロックし、トラブルを遠ざけることにしたのです。
...この対策が気に入りませんか?
もし気に入らないのなら、あなたのアイデアを日本国の政府や政治家に直接伝えて下さい。
例えば、あなたはそこから日本の行政に直接手紙を書くことが出来るでしょう。
さもなければ、この問題についてのあなたの考えをブログに書くことも出来るでしょうし、
この問題の存在を広く伝える事が出来る他のメディアを使うことも出来るでしょう。
これは私たちにとって大きな助けとなります。
もしあなた方が動いてくれれば、私たちは言論の自由を回復することができ私たちとあなた方との間にあるバリケードを無くすことが出来るかもしれません。
私たちの力になって下さい。
私たちは日本と外国との間にあるこの隔たりがごく短い期間のものになることを願っています。
それでは。


 ちなみに原文のページを見たい場合は適当な海外プロキシを設定して、minoriのトップページにアクセスすればOKです。 『ゆずソフト』の方は単純に「403 Access Forbidden」となるみたい。

Firefoxでのプロキシ設定



 それにしてもコレは素敵な対応でしたね。ъ(゚Д゚)グッジョブ!!
ネット鎖国キタ━━━━(゚∀゚)━━━━!!って感じです。

しかしもともと日本国内からアクセスする日本人相手にしか商売してなかったわけですし、無防備に世界配信してしまっていた今までが迂闊だったとも言えますね。 もっと早くからアクセス遮断していれば、海外のフェミ団体に睨まれる事態にならなかったかも。(´・ω・`)ショボーン

そしてこの問題はエロゲメーカーに限らず、インターネットとの付き合い方として誰もが注意すべき事項だと感じましたね。 外国人に配慮していないコンテンツを世界配信するのは、ビジネスチャンスより高いリスクしか得られない結果になる可能性があると。( ゚Д゚)y─┛~~


 このブログだって「日本語だからどうせ外国人はアクセスしないだろ」程度の気持ちで公開してますけど、ある日突然外国語で書かれた脅迫メールが送りつけられてくる可能性はあるわけです。
(((( ;゚Д゚)))ガクガクブルブル  先手をうってアクセス遮断しておくのが利巧でしょう。
自分は外国人とコミュニケーションする気なんて皆無なんですから。

ちなみに国内からのリスクも考慮するなら、2ちゃんねるで使われている『BBQ あらしお断りシステム』などを活用すると良いでしょう。


 それにしても「ネット鎖国」いいですねぇ。(*´д`*) どこかのプロバイダが自社網内にインターネットから隔絶されたオタク専用の裏インターネットを提供してくれたら喜んで契約しますよ。
そこはきっとモザイクすら不要なワンダーランドになるに違いない。+(0゚・∀・) + ワクテカ +


 

 Windは新海誠の路面電車がカッコいいぜって話だけでプレイしたら、しばらく進めたところで登場人物全員が超能力持ちみたいな設定が突然でてきてビックリした。( ゚∀゚)・∵. ブハ

efは未プレイでアニメも観てねー。つかCircusのゲームだと思ってた。(ノ∀`)アチャー

【関連記事】
内務調査? 否!! 弾劾裁判? 否!! これは宗教裁判ですよ!!

Twitterを始めてしまった

 「あの有名人のつぶやきに5000件ものレスが集まってます」とか、最近立て続けに報じられていたWebサービス『Twitter』を使ってみました。 宣伝の仕方から二匹目のセカンドライフなのかと疑ってましたけど、ちょっと違うみたいですね。

なんでもTwitterはこのBloggerの開発者が開発したんだとか。
じゃあそのうちGoogleに買収されたりして。(・∀・)ニヤニヤ


 そんな理由があってかTwitterはBloggerに優しい仕様らしく、「Add Twitter to your Blogger blog」のページから自分のつぶやきをBloggerのウィジェットとして登録することができました。

今後はブログに投稿する程のものでないスパム発言をTwitterに吐き溜めて、それをBloggerの脇に表示させておくことにしよう。 みんながTwitterを利用すればネットから一行ブログみたいのが消え去るかも。+(0゚・∀・) + ワクテカ +


ところで平仮名で「ついったー」と書いてあるのを見るとイラッとくるよね。

【I10-002】XMLマスター:プロフェッショナル試験に合格した(`・ω・´)シャキーン

 先週落ちたXMLマスター:プロフェッショナル(アプリケーション開発)を再受験。щ(゚Д゚щ)コイヤァ!!
前回とほとんど同じ問題しか出題されなかったので拍子抜けでしたね。 バリエーション無いんでしょうか? 特に「XML要素技術の活用(総合問題)」

それに出題順も前回同様「DOMが5問、SAXが5問、XSLTが5問、・・・」みたいな感じで、問題集(試験範囲)の順番通りでした。 ベーシック試験のときは前半にスキーマの長文問題が集中していて苦労させられましたけど、そういうのが無いとわかってると気楽ですよね。


XMLマスター:プロフェッショナル(アプリケーション開発)スコアレポート


 結果は前回より5問多い87%(35/40問)で合格。(`・ω・´)シャキーン
点数の低かった「XSLT」「XML処理システム構築技術」が改善されました。


  【楽天】XMLマスター受験チケット

 試験対策はこの2冊をやっておけばOK。
どちらも正誤表(XMLマスター教科書問題集)のチェックを忘れずに。

ただしDOMXSLTは実際の試験の方が細かい動作について聞いてくるので、試験中に「どうだっけ・・・?」と悩まないためにも関数1つ1つの動作を入念に確認しておいた方が良いです。 例えばsetPrefix()で親ノードの名前空間接頭辞を変更した際のDOMツリーとか、xsl:copy-ofはselectしたノードが全部コピーされるけどxsl:value-ofは最初のノードの値だけですよとか。c⌒っ゚д゚)っφ メモメモ...

ついでにAPIの読み方をメモしておこう。c⌒っ゚д゚)っφ メモメモ...


【関連記事】
【I10-002】XMLマスター:プロフェッショナル試験に落ちてきた(´・ω・`)ショボーン
XMLマスター ベーシックV2を取得

【Java】XML文書をXSLTで変換してみるサンプル【C#】

DOM(Document Object Model)SAX(Simple API for XML)を使ったプログラムを書くのも良いけれど、XML文書の構造を変換するのならXLST(XSL Transformations)を利用した方が開発効率は遥かに高いです。 プログラミング言語の知識も必要ないですしね。 (・∀・)ベンリ!!

入力するXMLファイル

それでは試しに先日DOMとSAXで作ったプログラムと同じ結果を出力するXSLTスタイルシートを書いてみましょう。 ソースXML文書はGundamList.xmlを使います。

GundamList.xml
<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE gundamList SYSTEM "GundamList.dtd">

<gundamList xmlns="urn:gundam:anime">
    <gundam media="TV">
        <name>機動戦士ガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士Zガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0087</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムZZ</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0088</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="MOVIE">
        <name>機動戦士ガンダム 逆襲のシャア</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0093</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム0080 ポケットの中の戦争</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0080</calendar>
        <director>高山文彦</director>
    </gundam>
    <gundam media="MOVIE">
        <name>機動戦士ガンダムF91</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0123</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム0083 STARDUST MEMORY</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0083</calendar>
        <director>加瀬充子</director>
        <director>今西隆志</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士Vガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0153</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動武闘伝Gガンダム</name>
        <calendar jpn="未来世紀" eng="F.C.">60</calendar>
        <director>今川泰宏</director>
    </gundam>
    <gundam media="TV">
        <name>新機動戦記ガンダムW</name>
        <calendar jpn="アフターコロニー" eng="A.C.">195</calendar>
        <director>池田成</director>
        <director>高松信司</director>
    </gundam>
    <gundam media="TV">
        <name>新機動戦記ガンダムX</name>
        <calendar jpn="アフターウォー" eng="A.W.">15</calendar>
        <director>高松信司</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム 第08MS小隊</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>神田武幸</director>
        <director>飯田馬之介</director>
    </gundam>
    <gundam media="OVA">
        <name>新機動戦記ガンダムW Endless Waltz</name>
        <calendar jpn="アフターコロニー" eng="A.C.">196</calendar>
        <director>青木康直</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム 第08MS小隊 特別編 ラスト・リゾート</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>森邦宏</director>
        <director>仕舞屋鉄</director>
    </gundam>
    <gundam media="TV">
        <name>∀ガンダム</name>
        <calendar jpn="正暦" eng="C.C.">2345</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムSEED</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">71</calendar>
        <director>福田己津央</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムSEED DESTINY</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar>
        <director>福田己津央</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダムSEED C.E.73 STARGAZER</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar>
        <director>西澤晋</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダム00 ファーストシーズン</name>
        <calendar jpn="西暦" eng="A.D.">2307</calendar>
        <director>水島精二</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダム00 セカンドシーズン</name>
        <calendar jpn="西暦" eng="A.D.">2312</calendar>
        <director>水島精二</director>
    </gundam>
</gundamList>

XSLTスタイルシートの課題1

まずは「GundamList.xmlの中から富野由悠季監督のガンダム作品を抽出する」XSLTスタイルシートで、次のような出力結果を目指します。

cmd.exe
U.C.0079 機動戦士ガンダム
U.C.0087 機動戦士Zガンダム
U.C.0088 機動戦士ガンダムZZ
U.C.0093 機動戦士ガンダム 逆襲のシャア
U.C.0123 機動戦士ガンダムF91
U.C.0153 機動戦士Vガンダム
C.C.2345 ∀ガンダム
以上、7作品

色々な書き方で実現できるのですけど、今回はXMLマスター:プロフェッショナル試験に出題されるxsl:key関数を使用してみます。 XSLTスタイルシート(GundamSax.xsl)は次のようになりました。 文字列比較だらけになってしまうJavaやC#のコードよりスッキリしてますよね。

GundamSax.xsl
<?xml version="1.0" encoding="Shift_JIS" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ani="urn:gundam:anime">
    
    <xsl:key name="director" match="ani:gundamList/ani:gundam" use="ani:director" />
    <xsl:variable name="kantoku" select="'富野由悠季'" />
    
    <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:apply-templates select="key('director', $kantoku)" />
        
        <xsl:text>以上、</xsl:text>
        <xsl:value-of select="count(key('director', $kantoku))" />
        <xsl:text>作品</xsl:text>
    </xsl:template>
    
    <xsl:template match="ani:gundam">
        <xsl:value-of select="ani:calendar/@eng" />
        <xsl:value-of select="ani:calendar" />
        <xsl:text> </xsl:text>
        <xsl:value-of select="ani:name" />
        <xsl:text>
</xsl:text>
    </xsl:template>
    
</xsl:stylesheet>

XSLTスタイルシートの課題2

続いて「GundamList.xmlの中から宇宙世紀(U.C.)のガンダムシリーズを抜き出して、作中の年表順にソートする」XSLTスタイルシートで、次のような出力結果を目指します。

cmd.exe
U.C.0079 機動戦士ガンダム
U.C.0079 機動戦士ガンダム 第08MS小隊
U.C.0079 機動戦士ガンダム 第08MS小隊 特別編 ラスト・リゾート
U.C.0080 機動戦士ガンダム0080 ポケットの中の戦争
U.C.0083 機動戦士ガンダム0083 STARDUST MEMORY
U.C.0087 機動戦士Zガンダム
U.C.0088 機動戦士ガンダムZZ
U.C.0093 機動戦士ガンダム 逆襲のシャア
U.C.0123 機動戦士ガンダムF91
U.C.0153 機動戦士Vガンダム
以上、10作品

これはxsl:key関数で抽出した結果にxsl:sortを適用するだけでできます。 XSLTスタイルシート(GundamDom.xsl)は次のようになりました。 ソート処理が組み込まれていると楽チンなことこの上ない。

GundamDom.xsl
<?xml version="1.0" encoding="Shift_JIS" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ani="urn:gundam:anime">
    
    <xsl:key name="century" match="ani:gundamList/ani:gundam" use="ani:calendar/@eng" />
    <xsl:variable name="eng" select="'U.C.'" />
    
    <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:apply-templates select="key('century', $eng)">
            <xsl:sort select="ani:calendar" data-type="number" />
        </xsl:apply-templates>
        
        <xsl:text>以上、</xsl:text>
        <xsl:value-of select="count(key('century', $eng))" />
        <xsl:text>作品</xsl:text>
    </xsl:template>
    
    <xsl:template match="ani:gundam">
        <xsl:value-of select="ani:calendar/@eng" />
        <xsl:value-of select="ani:calendar" />
        <xsl:text> </xsl:text>
        <xsl:value-of select="ani:name" />
        <xsl:text>
</xsl:text>
    </xsl:template>
    
</xsl:stylesheet>

JavaでXSLTスタイルシートを処理する

XSLTスタイルシートが用意できたらXLSTプロセッサに処理してもらいます。 JavaとC#にはXSLTを処理するクラスが用意されてるので使ってみましょう。 Javaのコード(GundamXslt.java)は次のようになります。

GundamXslt.java
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;

public class GundamXslt
{
    public static void main(String[] args)
    {
        try
        {
            // XSLファイルを読み込む
            StreamSource tplXsl = new StreamSource("GundamDom.xsl");
            TransformerFactory trf = TransformerFactory.newInstance();
            Transformer xslt = trf.newTransformer(tplXsl);
            
            // XMLファイルをXSLTで変換して出力
            StreamSource srcXml = new StreamSource("GundamList.xml");
            xslt.setOutputProperty("encoding", "Shift_JIS");
            xslt.transform(srcXml, new StreamResult(System.out));
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

C#でXSLTスタイルシートを処理する

C#のコード(GundamXslt.cs)は次のようになります。

GundamXslt.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;

namespace GundamXslt
{
    class GundamXslt
    {
        static void Main(string[] args)
        {
            // XSLファイルを読み込む
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(@"..\..\GundamSax.xsl");

            // XMLファイルをXSLTで変換して出力
            XPathDocument doc = new XPathDocument(@"..\..\GundamList.xml");
            XsltArgumentList argList = new XsltArgumentList();
            xslt.Transform(doc, argList, Console.Out);
        }
    }
}

とりあえずXLSTで実装しておいて、もし速度が必要なら後でDOMやSAXで書き直す開発スタイルが良さそうですね。 ( ゚Д゚)y─┛~~

【Java】XML文書をSAXで処理してみるサンプル【C#】

DOM(Document Object Model)はXML文書全体を読み込んでツリー構造に展開するから遅いしメモリを喰うんだぜ、ってことで作られたのがSAX(Simple API for XML)です。 ただし順次参照専用のAPIなので、単純な構造のXML文書を読み込む処理にしか向きません。 (´・∀・`)ヘー

入力するXMLファイル

お題にはDOMプログラムのときと同じXMLファイルとDTDを使います。

GundamList.xml
<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE gundamList SYSTEM "GundamList.dtd">

<gundamList xmlns="urn:gundam:anime">
    <gundam media="TV">
        <name>機動戦士ガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士Zガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0087</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムZZ</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0088</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="MOVIE">
        <name>機動戦士ガンダム 逆襲のシャア</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0093</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム0080 ポケットの中の戦争</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0080</calendar>
        <director>高山文彦</director>
    </gundam>
    <gundam media="MOVIE">
        <name>機動戦士ガンダムF91</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0123</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム0083 STARDUST MEMORY</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0083</calendar>
        <director>加瀬充子</director>
        <director>今西隆志</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士Vガンダム</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0153</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動武闘伝Gガンダム</name>
        <calendar jpn="未来世紀" eng="F.C.">60</calendar>
        <director>今川泰宏</director>
    </gundam>
    <gundam media="TV">
        <name>新機動戦記ガンダムW</name>
        <calendar jpn="アフターコロニー" eng="A.C.">195</calendar>
        <director>池田成</director>
        <director>高松信司</director>
    </gundam>
    <gundam media="TV">
        <name>新機動戦記ガンダムX</name>
        <calendar jpn="アフターウォー" eng="A.W.">15</calendar>
        <director>高松信司</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム 第08MS小隊</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>神田武幸</director>
        <director>飯田馬之介</director>
    </gundam>
    <gundam media="OVA">
        <name>新機動戦記ガンダムW Endless Waltz</name>
        <calendar jpn="アフターコロニー" eng="A.C.">196</calendar>
        <director>青木康直</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダム 第08MS小隊 特別編 ラスト・リゾート</name>
        <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
        <director>森邦宏</director>
        <director>仕舞屋鉄</director>
    </gundam>
    <gundam media="TV">
        <name>∀ガンダム</name>
        <calendar jpn="正暦" eng="C.C.">2345</calendar>
        <director>富野由悠季</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムSEED</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">71</calendar>
        <director>福田己津央</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダムSEED DESTINY</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar>
        <director>福田己津央</director>
    </gundam>
    <gundam media="OVA">
        <name>機動戦士ガンダムSEED C.E.73 STARGAZER</name>
        <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar>
        <director>西澤晋</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダム00 ファーストシーズン</name>
        <calendar jpn="西暦" eng="A.D.">2307</calendar>
        <director>水島精二</director>
    </gundam>
    <gundam media="TV">
        <name>機動戦士ガンダム00 セカンドシーズン</name>
        <calendar jpn="西暦" eng="A.D.">2312</calendar>
        <director>水島精二</director>
    </gundam>
</gundamList>

SAXプログラムの出力

作成するSAXプログラムは「GundamList.xmlの中から富野由悠季監督のガンダム作品を抽出する」プログラムで、次のような出力結果を目指します。

cmd.exe
U.C.0079 機動戦士ガンダム
U.C.0087 機動戦士Zガンダム
U.C.0088 機動戦士ガンダムZZ
U.C.0093 機動戦士ガンダム 逆襲のシャア
U.C.0123 機動戦士ガンダムF91
U.C.0153 機動戦士Vガンダム
C.C.2345 ∀ガンダム
以上、7作品

SAXプログラムの設計

それでは設計開始。 (`・ω・´)シャキーン SAXはイベント駆動型APIなので、欲しいデータがどのイベントで手に入るのか、 データが揃って処理できるタイミングはいつなのかを整理していきます。

  • eng値 => startElement("calendar")イベントのAttributes.getValue("eng")。
  • year値 => startElement("calendar")イベントに続くcharactersイベント。
  • name値 => startElement("name")イベントに続くcharactersイベント。
  • 出力判定 => startElement("director")イベントに続くcharactersイベント。
  • 出力位置 => endElement("gundam")イベント。

Javaでの実装

Javaでの実装(GundamSax.java)は次のようになりました。 SAXではstartElementイベントとcharactersイベントを繋ぐ一時変数が必須ですね。

GundamSax.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class GundamSax extends DefaultHandler
{
    public static void main(String args[])
    {
        try
        {
            // XMLReaderオブジェクトの生成
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader reader = sp.getXMLReader();
            reader.setFeature("http://xml.org/sax/features/validation", true);
            reader.setFeature("http://xml.org/sax/features/namespaces", true);

            // イベントハンドラを登録
            DefaultHandler handler = new GundamSax();
            reader.setContentHandler(handler);

            reader.parse("GundamList.xml");
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
        }
    }


    // 出力用変数
    private String parent = null;
    private String name = null;
    private String eng = null;
    private String year = null;
    private boolean directed = false;
    private int count = 0;


    // 要素の開始イベント実装
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException
    {
        if(localName.equals("name"))
        {
            parent = localName;
        }
        else if(localName.equals("calendar"))
        {
            parent = localName;

            // calendar要素のeng属性を保持
            eng = atts.getValue("eng");
        }
        else if(localName.equals("director"))
        {
            parent = localName;
        }
    }


    // 文字データイベントの実装
    public void characters(char ch[], int start, int length) throws SAXException
    {
        String value = new String(ch, start, length);

        if(parent == null)
        {
            // 無視
            return;
        }
        else if(parent.equals("name"))
        {
            // name要素の値を保持
            name = value;
        }
        else if(parent.equals("calendar"))
        {
            // calendar要素の値を保持
            year = value;
        }
        else if(parent.equals("director"))
        {
            // director要素(複数)の値を判定
            if(directed == false)
            {
                directed = value.equals("富野由悠季");
            }
        }
    }


    // 要素の終了イベント実装
    public void endElement(String uri, String localName, String qName) throws SAXException
    {
        if(localName.equals("gundam"))
        {
            // 富野作品のみ出力
            if(directed == true)
            {
                System.out.println(eng + year + " " + name);

                // 作品数をカウント
                count++;
            }

            // 出力用変数を初期化
            directed = false;
        }

        parent = null;
    }


    //文書の終了イベント実装
    public void endDocument() throws SAXException
    {
        // 作品数を出力
        System.out.println("以上、" + count + "作品");
    }
}

C#での実装

それでは続いてC#での実装を~っと思って調べてみたら、C#(.NET Framework)のXmlReaderは、SAXで定義されているXMLReaderとは別物であることが発覚。 (;゚Д゚)(゚Д゚;(゚Д゚;)ナ、ナンダッテー!! C#のXmlReaderはイベント駆動(プッシュ型)でなく、プル型(自分でループを回してRead()を呼ぶ)のAPIとなっているそうです。

そんなC#での実装(GundamReader.cs)は次のようになりました。 SAXではありませんから、XMLマスター:プロフェッショナル試験とは無関係です。

GundamReader.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace GundamReader
{
    class GundamReader
    {
        static void Main(string[] args)
        {
            // XMLReaderオブジェクトの生成
            XmlReaderSettings setting = new XmlReaderSettings();
            setting.ProhibitDtd = false;
            setting.ValidationType = ValidationType.DTD;
            setting.IgnoreWhitespace = true;
            XmlReader reader = XmlReader.Create(@"../../GundamList.xml", setting);


            // 出力用変数
            bool directed = false;
            int count = 0;

            while (reader.Read())
            {
                if (reader.IsStartElement("gundam"))
                {
                    // name要素の値を保持
                    reader.Read();
                    reader.ReadStartElement("name");
                    String name = reader.ReadString();

                    // calendar要素の値とeng属性を保持
                    reader.ReadToNextSibling("calendar");
                    String eng = reader.GetAttribute("eng");
                    String year = reader.ReadString();

                    // director要素(複数)の値を判定
                    while (directed == false &&
                        reader.ReadToNextSibling("director"))
                    {
                        String director = reader.ReadString();
                        directed = director.Equals("富野由悠季");
                    }

                    // 富野作品のみ出力
                    if (directed == true)
                    {
                        Console.WriteLine("{0}{1} {2}", eng, year, name);

                        // 作品数をカウント
                        count++;
                    }

                    // 出力用変数を初期化
                    directed = false;
                }
            }

            // 作品数を出力
            Console.WriteLine("以上、{0}作品", count);
        }
    }
}

APIの使い方を調べながらだったので苦労しましたけど、プル型のAPIの方がSAXよりシンプルなコードが書けて良いですね。 ъ(゚Д゚)グッジョブ!! なんでもかんでも継承したりイベントハンドラで処理させようとするのは、 オブジェクト指向が生んだ悪しき慣習だと思います。 ( ゚д゚)、ペッ

【Java】XML文書をDOMで処理してみるサンプル【C#】

DOM(Document Object Model)のAPIはIDL(Interface Definition Language)で定義されていて、 様々なプログラミング言語に実装されているらしい。 つまり使用する言語が変わってもXMLの知識は持ち越せるってことやね。 その辺りを確認すべく、同じDOMプログラムをJavaとC#で書いてみました。

入力するXMLファイル

まずお題として次のソースXML文書(GundamList.xml)を用意しました。

GundamList.xml
<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE gundamList SYSTEM "GundamList.dtd">

<gundamList xmlns="urn:gundam:anime">
 <gundam media="TV">
     <name>機動戦士ガンダム</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar>
     <director>富野由悠季</director>
 </gundam>
 <gundam media="TV">
     <name>機動戦士Zガンダム</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0087</calendar>
     <director>富野由悠季</director>
 </gundam>
 <gundam media="TV">
     <name>機動戦士ガンダムZZ</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0088</calendar>
     <director>富野由悠季</director>
 </gundam>
 <gundam media="MOVIE">
     <name>機動戦士ガンダム 逆襲のシャア</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0093</calendar>
     <director>富野由悠季</director>
 </gundam>
 <gundam media="OVA">
     <name>機動戦士ガンダム0080 ポケットの中の戦争</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0080</calendar>
     <director>高山文彦</director>
 </gundam>
 <gundam media="MOVIE">
     <name>機動戦士ガンダムF91</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0123</calendar>
     <director>富野由悠季</director>
 </gundam>
 <gundam media="OVA">
     <name>機動戦士ガンダム0083 STARDUST MEMORY</name>
     <calendar jpn="宇宙世紀" eng="U.C.">0083</calendar>
     <director>加瀬充子</director>
<director>今西隆志</director> </gundam> <gundam media="TV"> <name>機動戦士Vガンダム</name> <calendar jpn="宇宙世紀" eng="U.C.">0153</calendar> <director>富野由悠季</director> </gundam> <gundam media="TV"> <name>機動武闘伝Gガンダム</name> <calendar jpn="未来世紀" eng="F.C.">60</calendar> <director>今川泰宏</director> </gundam> <gundam media="TV"> <name>新機動戦記ガンダムW</name> <calendar jpn="アフターコロニー" eng="A.C.">195</calendar> <director>池田成</director> <director>高松信司</director> </gundam> <gundam media="TV"> <name>新機動戦記ガンダムX</name> <calendar jpn="アフターウォー" eng="A.W.">15</calendar> <director>高松信司</director> </gundam> <gundam media="OVA"> <name>機動戦士ガンダム 第08MS小隊</name> <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar> <director>神田武幸</director> <director>飯田馬之介</director> </gundam> <gundam media="OVA"> <name>新機動戦記ガンダムW Endless Waltz</name> <calendar jpn="アフターコロニー" eng="A.C.">196</calendar> <director>青木康直</director> </gundam> <gundam media="OVA"> <name>機動戦士ガンダム 第08MS小隊 特別編 ラスト・リゾート</name> <calendar jpn="宇宙世紀" eng="U.C.">0079</calendar> <director>森邦宏</director> <director>仕舞屋鉄</director> </gundam> <gundam media="TV"> <name>∀ガンダム</name> <calendar jpn="正暦" eng="C.C.">2345</calendar> <director>富野由悠季</director> </gundam> <gundam media="TV"> <name>機動戦士ガンダムSEED</name> <calendar jpn="コズミック・イラ" eng="C.E.">71</calendar> <director>福田己津央</director> </gundam> <gundam media="TV"> <name>機動戦士ガンダムSEED DESTINY</name> <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar> <director>福田己津央</director> </gundam> <gundam media="OVA"> <name>機動戦士ガンダムSEED C.E.73 STARGAZER</name> <calendar jpn="コズミック・イラ" eng="C.E.">73</calendar> <director>西澤晋</director> </gundam> <gundam media="TV"> <name>機動戦士ガンダム00 ファーストシーズン</name> <calendar jpn="西暦" eng="A.D.">2307</calendar> <director>水島精二</director> </gundam> <gundam media="TV"> <name>機動戦士ガンダム00 セカンドシーズン</name> <calendar jpn="西暦" eng="A.D.">2312</calendar> <director>水島精二</director> </gundam> </gundamList>

JavaのDOMパーサーは行頭/行末の空白文字列をノードとしてDOMツリーに取り込んでしまうため、 下記のDTD(Document Type Definition)を用意して意味のない空白文字列であることを明示します。 C#のDOMパーサーはDTD(GundamList.dtd)が無くても勝手に空白文字列を無視してくれるみたいです。

GundamList.dtd
<!ELEMENT gundamList (gundam*)>
<!ATTLIST gundamList xmlns CDATA #IMPLIED>
<!ELEMENT gundam (name, calendar, director+)>
<!ATTLIST gundam media CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT calendar (#PCDATA)>
<!ATTLIST calendar jpn CDATA #REQUIRED>
<!ATTLIST calendar eng CDATA #REQUIRED>
<!ELEMENT director (#PCDATA)>

DOMプログラムの出力

作成するDOMプログラムは「GundamList.xmlの中から宇宙世紀(U.C.)のガンダムシリーズを抜き出して作中の年表順にソートする」プログラムで、次のような出力結果を目指します。

cmd.exe
U.C.0079 機動戦士ガンダム
U.C.0079 機動戦士ガンダム 第08MS小隊
U.C.0079 機動戦士ガンダム 第08MS小隊 特別編 ラスト・リゾート
U.C.0080 機動戦士ガンダム0080 ポケットの中の戦争
U.C.0083 機動戦士ガンダム0083 STARDUST MEMORY
U.C.0087 機動戦士Zガンダム
U.C.0088 機動戦士ガンダムZZ
U.C.0093 機動戦士ガンダム 逆襲のシャア
U.C.0123 機動戦士ガンダムF91
U.C.0153 機動戦士Vガンダム
以上、10作品

DOMプログラムの設計

それでは設計開始。 (`・ω・´)シャキーン DOMはXML文書の各要素をメモリ上にツリー構造として展開してくれるので、素直なループ処理を書けばOKでしょう。

  1. calendar要素のeng属性が"U.C."なgundam要素を抜き出す。
  2. calendar要素の値を整数で比較しながら作業用リストに挿入。
  3. 作業用リストにはDocumentFragmentオブジェクトを使用する。

ポイントは作業用リストにDocumentFragmentオブジェクト(あるいはElementオブジェクト)を使っているところ。 NodeListインターフェースというのもありますが、 これにはlengthプロパティとitem()メソッドしか定義されていないため、 ノードの追加/削除する用途には使えません。
ソート処理には言語独自のListコレクションを使うこともできます。 しかしそれをやってしまうとDOMプログラミングの枠から外れてしまいますからね。

Javaでの実装

Javaでの実装(GundamDom.java)は次のようになりました。 XMLマスターの試験問題はJavaで書かれているため、これで覚えておくと楽です。

GundamDom.java
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class GundamDom
{
    public static void main(String args[])
    {
        try
        {
            // Documentオブジェクトの生成
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            dbf.setValidating(true);
            dbf.setIgnoringElementContentWhitespace(true);
            DocumentBuilder db = dbf.newDocumentBuilder();

            Document doc = db.parse("GundamList.xml");


            // ソート作業用リストの生成
            DocumentFragment ucGandums = doc.createDocumentFragment();

            // 宇宙世紀のガンダムを抽出
            Element root = doc.getDocumentElement();
            for(Node next, gundam=root.getFirstChild(); gundam != null; gundam=next)
            {
                next = gundam.getNextSibling();

                // calendar要素のeng属性で判定
                Element calendar = (Element)gundam.getFirstChild().getNextSibling();
                String eng = calendar.getAttribute("eng");

                if(eng.equals("U.C.") == false)  continue;


                // 宇宙世紀順で挿入位置検索
                int year = Integer.parseInt(calendar.getFirstChild().getNodeValue());

                int pos = 0;
                NodeList list = ucGandums.getChildNodes();
                for(pos=0; pos < list.getLength(); pos++)
                {
                    Node cale = list.item(pos).getFirstChild().getNextSibling();
                    int year2 = Integer.parseInt(cale.getFirstChild().getNodeValue());

                    if(year < year2) break;
                }

                // ソート作業用リストにgundam要素を挿入
                if(pos < list.getLength())
                    ucGandums.insertBefore(gundam, list.item(pos));
                else
                    ucGandums.appendChild(gundam);
            }


            // 結果を出力
            for(Node gundam=ucGandums.getFirstChild(); gundam != null; gundam=gundam.getNextSibling())
            {
                Element name = (Element)gundam.getFirstChild();
                Element cale = (Element)name.getNextSibling();
                String n = name.getFirstChild().getNodeValue();
                String y = cale.getFirstChild().getNodeValue();
                
                System.out.println("U.C." + y + " " + n);
            }

            System.out.println("以上、" + ucGandums.getChildNodes().getLength() + "作品");
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
        }
    }
}

C#での実装

C#での実装(GundamDom.cs)は次のようになりました。 最初にDocumentオブジェクトを生成する部分のコードがJavaよりかなり簡単になっていますが、 これはDOMがDocumentオブジェクトの生成方法を規定していないためで、 C#が仕様破りをしているわけではありません。

GundamDom.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace GundamDom
{
    class GundamDom
    {
        static void Main(string[] args)
        {
            // Documentオブジェクトの生成
            XmlDocument doc = new XmlDocument();
            doc.Load(@"..\..\GundamList.xml");


            // ソート作業用リストの生成
            XmlDocumentFragment ucGundams = doc.CreateDocumentFragment();

            // 宇宙世紀のガンダムを抽出
            XmlElement root = doc.DocumentElement;
            for (XmlNode next, gundam = root.FirstChild; gundam != null; gundam = next)
            {
                next = gundam.NextSibling;

                // calendar要素のeng属性で判定
                XmlElement calendar = (XmlElement)gundam.FirstChild.NextSibling;
                String eng = calendar.GetAttribute("eng");

                if (eng.Equals("U.C.") == false) continue;


                // 宇宙世紀順で挿入位置検索
                int year = int.Parse(calendar.FirstChild.Value);

                int pos = 0;
                XmlNodeList list = ucGundams.ChildNodes;
                for (pos = 0; pos < list.Count; pos++)
                {
                    XmlNode cale = list.Item(pos).FirstChild.NextSibling;
                    int year2 = int.Parse(cale.FirstChild.Value);

                    if (year < year2) break;
                }

                // ソート作業用リストに挿入
                if (pos < list.Count)
                    ucGundams.InsertBefore(gundam, list.Item(pos));
                else
                    ucGundams.AppendChild(gundam);
            }


            // 結果を出力
            for (XmlNode gundam = ucGundams.FirstChild; gundam != null; gundam = gundam.NextSibling)
            {
                XmlElement name = (XmlElement)gundam.FirstChild;
                XmlElement cale = (XmlElement)name.NextSibling;
                String n = name.FirstChild.Value;
                String y = cale.FirstChild.Value;

                Console.WriteLine("U.C.{0} {1}", y, n);
            }

            Console.WriteLine("以上、{0}作品", ucGundams.ChildNodes.Count);
        }
    }
}

C#では言語仕様的にGetterとSetterをメソッドにする必要がないとか、lengthプロパティをCountプロパティと呼び変えているといった違いがあるみたいです。 だけどその違いを除けばJavaとほぼ同じようなコードで実装できましたね。 これがDOMの威力です。(´・∀・`)ヘー

試験対策本ではありますが、JavaでのXMLプログラミングを学ぶ入門書としても役立ちます。 つか他に碌な本が無いよね。 ( ゚Д゚)y─┛~~ 章の始めに各インターフェースのプロパティとメソッド一覧が載ってますけど、 眠たくなるので最初は読み飛ばして後で戻ってチェックするのがお薦め。

【I10-002】XMLマスター:プロフェッショナル試験に落ちてきた(´・ω・`)ショボーン

 XMLマスターの上位資格プロフェッショナル(アプリケーション開発)を受験してきました。
そして不合格だった。Σ(゚д゚lll)ガーン 本当は5月中に受験するつもりだったんだけどズルズルとね・・・ こういう時は何やってもたいてい良い結果にならんなぁ。( ゚Д゚)y─┛~~

まぁ一回落ちたおかげでリベンジに向けたヤル気は出てきたんで、今度は念入りに勉強することにしよう。 調べてみたらXMLマスターには再受験規約みたいのが無いらしいんで、今月中の再受験を目指そうかな。

【FAQ】XMLマスター試験を受験した直後に同じ試験の受験を申し込むことはできますか?
 XMLマスター試験は再受験までの期間の制限を特に設けておりませんので、1度受験した後、すぐに次の試験の受験をお申し込みいただくことができます。しかしながら、1度不合格となった場合には、すぐに受験されても合格できる確率は大変低いですので、再受験前にはしばらく勉強期間をもたれることを推奨いたします。


XMLマスター:プロフェッショナル(アプリケーション開発)スコアレポート


 結果は75%(30/40問)で不合格。合格ライン80%の壁は厚いなぁ。 問題集の模擬試験でも毎回ギリギリ合格レベルだったから、運がよければ受かるかもと思ってたんですけど。(ノ∀`)ムリダッタカ...


 それでは反省会へ。 まず「XML処理システム構築技術」の点が低い。 SOAPとか署名(XML-Signature)とか暗号化(XML Encryption)とか、あんまり用のない分野だね。 だけどその代わりに簡単な出題しかされないから余裕あると思ったんだけどなぁ・・・ 問題文を読み間違えたか?


 次に低いのが「XSLT」。 自分プログラマですからDOMSAXは読めるんですけど、XSLTはまだ慣れないんですよねぇ。 でも実用度はDOM/SAXより遥かに高いし、XMLを使う上でも再受験のためにもにしっかり覚えておきたい。

あと試験問題では、子孫ノードを指す「descendant::*」(よく見る「//」は「descendant-or-self」)や祖先ノードを指す「ancestor::*」が出てきてビビった。Σ(´∀`;) プロフェッショナルの問題集だとこの辺は省かれちゃってるから、ベーシックの方を見直さなきゃらならんね。


 


 今回使用したのはこの2冊。というかコレしかないのよね。 教科書だけでは不足感があったから問題集も買いました。 今回出題された試験問題と比較すると、練習問題の量としては2冊やって十分といったとこですね。落ちましたけど(笑)

あと一歩を埋めるのは練習問題より実際の使い込みでしょう。


【関連記事】
【I10-002】XMLマスター:プロフェッショナル試験に合格した(`・ω・´)シャキーン
XMLマスター ベーシックV2を取得

とうとうVAIO-TRまでぶっ壊れた

 去年の10月に初代自作マシンの電源が吹き飛んでから、メインで使ってたVAIO-HXのHDDが異音を発し始め、RAID組んでたNASもディスク障害を起こし、遂にメール専用機だったVAIO-TRまでHDDが空回って起動できなくなってしまいました。(´;ω;`)ブワッ
Windows7への移行と地デジ環境への移行を同時に済ませたいからずっと待ってたのに、なんであと半年くらいを頑張ってくれないんじゃあ・・・


 とりあえずHDDを交換してVAIO-TRの延命を図るべく分解を試みる。
まず裏側の見える箇所にあるネジ7本、メモリカバーの下のネジ1本、バッテリーの下のネジ2本、ゴム足の下のネジ2本を全て外します。 続いてF6キーとF11キーの上にマイナスドライバーを差し込んでキーボードを取り外します。ケーブルは茶色いツメを起すと抜けます。 そしてキーボードの下にある封印ラベルを剥がして最後のネジを外すとカバーを取り外せるようになります。

以上でHDDと御対面叶ったわけですけど、なんかHDDが小さい・・・
ってコレ、1.8インチじゃないですか?!


Compact Flashを1.8インチ(HITACHI IDE)に変換


 1.8インチHDDなんて普通に店頭に並んでるものではないので、替わりにCFの変換アダプタを買ってきました。 SSDブームのおかげでCompact Flashを各種HDDに変換するアダプタなら容易に手に入ります。(-人-)アリガタヤアリガタヤ

なお1.8インチHDDは少なくとも3種類(ZIF/LIF/IDE)あるので注意。
あと変換アダプタはネジ止めできなかったので針金で固定しました。

今回使用したCompact FlashはTranscendの8GB 133x(リード19MB/s、ライト10MB/s)。 はじめPhotoFastのSDHC→CF変換アダプタを使おうとしたのだけど、認識されませんでした。


 無事HDDの交換が完了したのでVAIO-TRのリカバリディスクを突っ込んだら、「HDDのサイズが小さいためリカバリできません」のメッセージ。ゴ━━━━(# ゚Д゚)━━━━ルァ!! 仕方ないから他PCで使ってる純正XPとリカバリディスクの4枚目に入ってるドライバだけインストールしましたよ。 無駄なソフトばっか付けやがって。( ゚д゚)、ペッ

グラフィックとチップセット(Intel855GM)のドライバはインテルのサイト、イーサネットのドライバはVAIOのサポートページからも手に入ります。

 ともかくこれでVAIO-TRの延命に成功。∩( ・ω・)∩ ばんじゃーい
それにしてもVAIO-TRって今触ると結構ぶ厚く感じるなぁ。P欲しいよP。

 

 CFを使ったSSDはPentiumM 1.0GHz、メモリ256MBで起動70秒くらい。
高速タイプのCFにすればMLCのやつよりいいのかも。

【関連記事】

小中ロック (バー・ぴぃちぴっと)

Yesロリータ Noタッチ!

 バー・ぴぃちぴっと(略称:バーピィ)の初単行本『小中ロック』。 LO掲載時の原稿全部に手を入れたトンデモ品質だそうです。 単行本の名前もペンネームが「BAR(酒場)」だから「焼酎」をもじって『小中ロック』と凝ってますね。 初単行本への意気込みを感じます。 この高く上げ過ぎたハードルを2冊目の単行本でどうするのか今から楽しみですな。+(0゚・∀・) + ワクテカ +

収録作品は「強引ぐマイウェイ」「強引ぐマイウェイ2」「巫女島」「美咲家の事情」「未開の奥地で」「背徳館アスハ」「惚れた女は10歳児」の7本。
デビュー作は未収録だって。(´・∀・`)ヘー


 期待作はシスク(推定9歳)、ミミ(推定12歳)、シヨン(推定11歳)、アイン(推定14歳)、フェンフィ(推定10歳)、ツワイ(推定13歳)の6人による褐色ハーレム「未開の奥地で」。 この6人のご開帳jpgはネットで何度か見かけましたね。 鼻の高い教授も馬鹿キャラで面白かったです。

「メンコリ・ロノコ! キョージュ」

ちなみに彼女達が喋る現地語は逆さまに読みます。


 もう1本ハーレム系で良かったのが「巫女島」。 外界から隔絶された売春島で、学校へ行って勉強して遊んでたまに神様とせっくすする日常に退屈気味な三倉ともよちゃん(9歳)の冷めたコメントがグッド。 それにしても目出し帽姿の神様ってシュールねw

この素敵な舞台はCOMIC LOの2009年7月号「巫女島-ゆかり-」として再利用されたみたい。


 全体的な感想としては「並」でした。 チンコ勃たせる漫画を描くのはまだ難しいお年頃かな? 局部のみを描いたコマが多い点が気になる。(゚д゚)マズー 今後はネタ勝負の馬鹿エロ路線で頑張って欲しいね。 妙に熱いロリコン野郎が愛とか魂とかそーいう感じので変身して戦う漫画とかw


ハックス! (今井哲也) 2巻

これが現代のアニメーション研究部かぁ。(´・∀・`)ヘー

↓あらすじ
 高校の新入生歓迎会で上映された1分9秒のフィルムアニメ。その出来栄えに感動してアニ研に飛び込んだ新入生が2人。 しかしアニ研は3年生の部長(メインは電脳研)を1人残すのみでもうずっと活動休止状態。件の新歓アニメも10年以上前の卒業生の手によるものだった。ガ━━(;゚Д゚)━━ン!!

しかし新歓アニメの作画が最近再放送された話題作『アクアス』に似ていると気付いたことで、その卒業生が何者なのか益々興味は膨らみます。 それはともかく自分たちもアニメを作ってみようと、主人公の阿佐実みよしがノートに描いたパラパラ漫画を基に、日蚤台高校アニメーション研究部(HHACs)の活動は再開したのです。∩( ・ω・)∩ ばんじゃーい


みよしちゃんはアニオタでなく兄オタ


 その後みよし達は作ったアニメをニ○動画にアップしていくわけですが、なんつーか・・・ 時代は変わったなと。(゚Д゚)y─┛~~
自分のイメージでは「漫研=漫画とかアニメが好きで絵を描く人の集まり。 アニ研=漫画とかアニメが好きで絵を描けない人の集まり。」だったのだけど、今はPC使ってアニメを作れちゃうんですものねぇ。 しかもブロードバンド化でFlashアニメ時代には無かった動画投稿サイトができ、学校のHPを飛び出して真の世界配信も可能になってます。

もうただアニメ観て遊んでるだけの部活じゃなくなっていたんだ!(`・ω・´)

なんと2007年から『アニメ甲子園』なるものまで始まってました。
( ・∀・)つ〃∩ ヘェーヘェーヘェー

 『ハックス!』でアニメ甲子園を目指すって展開は無いと思いますけどねw 当面はアニ研存続をかけたお話かな? 2巻で登場した映研のキモイ会長を撃退したら、アニ研の8ミリカメラを盗んでいたことが活動再開で発覚するのを恐れてアニ研を潰そうとしていました的なオチで。

その間にアニオタをカミングアウトできないみよしのクラスメイト友里ちゃんが初音ミクパワーで著作権問題をクリアしたり、今まで特に何もしてない後藤部長(さっぱりした顔の斑目)が3年生らしくカッコいいところを見せるエピソードがあると尚良し。+(0゚・∀・) + ワクテカ +




ニコニコ動画に何か無いのかと思って検索したらこんなの発見しました。
ハックス乙。ъ(゚Д゚)