今月の屑株 2011/11
今月は以下の銘柄を購入

クラウドゲートを 1187 円で 2株

クラウドゲートは最近流行のソーシャルゲーム向けのキャラクターデザインや
実際にゲームの運営をしている会社です。

アイテム課金制にガチャと言った今までのゲームの儲け方を根底から覆す方法論で
旧来のゲーム屋が没落していく一方で、GREEをはじめとした
こうした新規企業は元気がある、はずです。

でも儲からない。上場以来ずっと綱渡り。

儲からない理由はハッキリしていて

クラウドゲートの給料が少なすぎる所為です。

同業他社で年齢構成が似通った

GREEの平均年棒が740万。
クラウドゲートの平均年棒が240万。


似たような仕事で3倍給料がもらえるというのであれば
クラウドゲートで職歴作ったあとすぐに転職するのは目に見えています。
実際クラウドゲートの平均勤続年数はたったの1.1年ですw
GREEも平均勤続年数は似たようなものなのですが
こちらは社員数が2年で6倍に増えているので比較することができません。

こーゆーコンテンツ作成の会社はまさに「人が資産」ですので
人材がじゃんじゃん流出していく状況の会社に、未来なんかありません。

こんな状況になってしまったのも、

確実に儲かりそうなチャリロトの運営で9億吹っ飛ばして撤退。

とゆー物凄い悪手がいまだに尾を引いているのが原因と思われます。

それから毎年綱渡りチックな経営を続けているわけですが
危機に陥ると、どーゆーわけか着物屋の会長が毎度毎度第三者増資に応じて
財務状態を建て直し、現在に至っている状況です。

今後の見通しですが、現在上場廃止に向けて
・四半期報告書遅延
・時価総額が上場廃止基準抵触
と、2役ついて待ったなしの状況です。

四半期報告書は出たとしても、時価総額の方は報告書が提出されたことで株価が上がり
時価総額の上場廃止基準を抜けられるかどうかが結構微妙な状況です。

いずれにせよ、事業が黒くなるような見込みは全く無いので
会社が継続できるかどうかは着物屋の会長の胸先三寸です。

株価3倍とか考えられませんw
てゆーか財務データメンテナンス中って...

【2011/12/06】 屑株 | トラックバック(0) | コメント(0) | page top↑
あおぞら家族ベストヒット 2011/11
・2011年11月3日刊 聖教新聞より引用

20111103.jpg










続きを読む
【2011/12/13】 あおぞら家族 | トラックバック(0) | コメント(0) | page top↑
ふたたび xerces-c++ に取り組んでみた その1
最近対向先とのインターフェイスが XML でやるよーって仕事が降ってきまして
これでついにずっと前に調べておいた xerces の知識がカネになると
ゆーことになりました。
ちなみに、ひでのふが指摘するまでインターフェイスの決定権がある対向先が
XML スキーマ用意していなかったのは秘密です。

で、「XMLスキーマ」とは何でしょうか?

たまに拡張子が .xsd になっているファイルを見かけることがあるかと思います。
このファイルこそが「XMLスキーマファイル」になります。

実はXMLスキーマを使うと、XML文書がスキーマで定義されたフォーマットで
用意されているかどうかを「簡単に」検証することができます。
また、XML文書の構造が変わったとしても、XMLスキーマを差し替えるだけで
プログラム自体は変更しなくて済む実装が可能になります。

まあ、ちょっと考えればわかることなのですが、XML文書が意図したフォーマットで
あるかどうかをチェックするプログラムを実装するのは非常にめんどっちいです。
めんどっちい上に、バグやセキュリティホールを作りこむことにもなりかねません。

なので、XML文書の検証をやるだけでも XMLパーサを導入する意義があります。
XML文書を使用する場合は、XMLスキーマの頒布もセットで行うことが
これからの常識になっていくと思います。

このXMLスキーマを使用してXML文書の検証を行うプログラムを作るにあたり
ひじょーに参考になったページが以下のリンクなわけですが...

【Xerces-C++によるXML Schemaのキャッシュと直列化】
https://www.ibm.com/developerworks/jp/xml/library/x-xsdxerc/

まあ
・英語のコメントが読めないとそもそもお話にならない。
・このままだとXML文書の検証結果を取得できない。
・コンパイルでエラーでたよ...

と、色々とスパルタンな代物ではあったので、
ひでのふが実用に供せるよう改良と解説を加えてみることにしました。

追加分は全5回です。
追加分の検証環境は以下の通りです。

Windows : Xerces-C++ 2.8.0 (バイナリをインスコ)
Linux : Xerces-C++ 3.1.1 (x86_64でソースからビルド)

Linux ではこんな感じのコマンドでコンパイルを行いました。
g++ -g -O2 -D_LINUX -m64 -I/usr/local/include -L/usr/local/lib
-o xml_schema_check xml_schema_check.cpp -lxerces-c


また、実行時に libxerces-c-3.1.so が参照できるように
/etc/ld.so.conf に libxerces-c-3.1.so が存在するディレクトリを追記し
ldconfig コマンドで変更を適用してやらないと、うまく動きません。

【2011/12/14】 Xerces-C++ | トラックバック(0) | コメント(0) | page top↑
ふたたび xerces-c++ に取り組んでみた その2
まずは include とエラーハンドラの解説をします。
この include と エラーハンドラは、これ以降の追加分のエントリでも
共通して使用することになります。


#include <stdio.h>
#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/sax2/SAX2XMLReader.hpp>
#include <xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/sax/SAXException.hpp>
#include <xercesc/validators/common/Grammar.hpp>
#include <xercesc/framework/MemoryManager.hpp>
#include <xercesc/framework/XMLGrammarPool.hpp>
#include <xercesc/framework/BinOutputStream.hpp>
#include <xercesc/internal/MemoryManagerImpl.hpp>
#ifdef _LINUX
#include <xercesc/framework/XMLGrammarPoolImpl.hpp>
#else
#include <xercesc/internal/XMLGrammarPoolImpl.hpp>
#endif
#include <xercesc/internal/BinFileOutputStream.hpp>
#include <xercesc/util/BinInputStream.hpp>
#include <xercesc/util/BinFileInputStream.hpp>

#ifdef XERCES_CPP_NAMESPACE_USE
XERCES_CPP_NAMESPACE_USE
#endif

int main( int argc, char *argv[] ) ;

class CXMLErrorHandler : public ErrorHandler
{
public :
  CXMLErrorHandler() ;
  ~CXMLErrorHandler() ;
  void warning (const SAXParseException &sax_e ) ;
  void error (const SAXParseException &sax_e ) ;
  void fatalError (const SAXParseException &sax_e ) ;
  void resetErrors() ;
} ;

CXMLErrorHandler::CXMLErrorHandler() {}
CXMLErrorHandler::~CXMLErrorHandler() {}

void CXMLErrorHandler::warning (const SAXParseException &sax_e )
{
  printf(
    "Encount SAXParseException Warning / message = %s\r\n",
    XMLString::transcode( sax_e.getMessage())) ;
}

void CXMLErrorHandler::error (const SAXParseException &sax_e )
{
// XML検証でエラーが発生した場合、このメソッドが呼び出される。
  printf(
    "Encount SAXParseException Error / message = %s\r\n",
    XMLString::transcode( sax_e.getMessage())) ;
}

void CXMLErrorHandler::fatalError (const SAXParseException &sax_e )
{
  printf(
    "Encount SAXParseException Fatal Error / message = %s\r\n",
    XMLString::transcode( sax_e.getMessage())) ;
}

void CXMLErrorHandler::resetErrors() {}

int main( int argc, char *argv[] )
{
  XMLPlatformUtils::Initialize();
  // ここに関数を呼び出す処理を書く
  XMLPlatformUtils::Terminate() ;
  return( 0 ) ;
}


・XMLGrammarPoolImpl.hppのインクルード元
2.8.0 と 3.1.1 の違いなのか、Linux と Windows の違いかは不明です。

・XERCES_CPP_NAMESPACE_USE
前回の連載の時にも出ましたが、Xerces を使用する上で必要なおまじないです。

・CXMLErrorHandler
Xerces で定義されている ErrorHandler クラスからの派生クラスです。
ErrorHandler クラスの仮想関数を全てオーバーライドする必要があります。

・CXMLErrorHandler::error メソッド
コメントにもありますが、XML検証でエラーが発生した場合に呼び出される
メソッドです。
サンプルではメッセージの表示だけ行っていますので
必要に応じて実装を変えて下さい。

・main 関数
以降のエントリで出てくる関数を呼び出す場合は、コメントにあるように

XMLPlatformUtils::Initialize();

XMLPlatformUtils::Terminate() ;
で、はさんだ場所に呼び出し処理を書く必要があります。
これも Xerces を使用する上で必要なおまじないです。

【2011/12/15】 Xerces-C++ | トラックバック(0) | コメント(0) | page top↑
ふたたび xerces-c++ に取り組んでみた その3
次にさっそく XMLスキーマを利用して XML文書の検証を行います。

下記のプログラムでは、

loadGrammar() でXMLスキーマを読み込ませる
 ↓
parse() でXML文書を検証する。


とゆー流れになります。

一度生成したパーサのインスタンスは、その後も使いまわすことができます。
loadGrammar() までの処理は結構重いので、実装する場合は
loadGrammar() の呼び出しを繰り返さないように工夫する方がベターです。


void check_xml( const char *pXMLFile, const char *pXSDFile )
{
  MemoryManager *p_memory_manager ;
  XMLGrammarPool *p_pool ;
  SAX2XMLReader *p_parser ;
  DefaultHandler h_default ;
  CXMLErrorHandler *p_err ;

  p_parser = NULL ;
  p_pool = NULL ;
  p_memory_manager = NULL ;
  p_err = NULL ;
  try
  {
// パーサインスタンスの生成。
    p_err = new CXMLErrorHandler() ;
    p_memory_manager = new MemoryManagerImpl() ;
    p_pool = new XMLGrammarPoolImpl( p_memory_manager ) ;
    p_parser = XMLReaderFactory::createXMLReader(
      p_memory_manager,
      p_pool ) ;
// XML検証に必要な機能を有効にする。
    p_parser -> setFeature( XMLUni::fgSAX2CoreNameSpaces, true ) ;
    p_parser -> setFeature( XMLUni::fgSAX2CoreValidation, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesDynamic, false ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchema, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchemaFullChecking, true ) ;
// グラマーキャッシュ機能を有効にする。
    p_parser -> setFeature(
      XMLUni::fgXercesCacheGrammarFromParse,
      true ) ;
// エラーハンドラを設定。
    p_parser -> setErrorHandler( p_err ) ;
// エンティティレゾルバ、コンテンツハンドラは使用しないので
// default ハンドラを設定。
    p_parser -> setContentHandler( &h_default ) ;
    p_parser -> setEntityResolver( &h_default ) ;
// パーサにXMLスキーマ(.xsdファイル)を読み込ませる。
    p_parser -> loadGrammar(
      pXSDFile,
      Grammar::SchemaGrammarType,
      true ) ;
// XMLファイルの解析を実行。
    p_parser -> parse( pXMLFile ) ;
  }
  catch( SAXException sax_e )
  {
    printf(
      "Encount SAXException / message = %s\r\n",
      XMLString::transcode( sax_e.getMessage())) ;
  }
  catch(...)
  {
    printf( "Encount Exception\r\n" ) ;
  }

// 領域の解放。
  delete p_parser ;
  delete p_pool ;
  delete p_memory_manager ;
  delete p_err ;
}


・check_xml の呼び出し
pXMLFile に検証したいXML文書のフルパスの文字列を
pXSDFile に検証に使用するXMLスキーマファイルのフルパスの文字列を
それぞれ設定して呼び出してください。

・エラーハンドラとパーサインスタンスのひも付け
以下の処理

p_parser -> setErrorHandler( p_err ) ;

で、エラーハンドラとパーサインスタンスのひも付けを行っています。
これを行わないと、検証でのエラー発生を処理側で取得することができません。

・例外ハンドラ
XML文書を検証して誤りが見つかったとしても、
この関数内の例外ハンドラには引っかかりません!


ファイルがないとか、整形式の XML文書ではないとか
そういった深刻なエラーでない限り引っかかることはないようです。

【2011/12/16】 Xerces-C++ | トラックバック(0) | コメント(0) | page top↑
ふたたび xerces-c++ に取り組んでみた その4
おそらく前回のエントリで要件が満たせるパターンが多いと思われますが
ここはもう少し突っ込んで

XMLスキーマのシリアライズ(直列化)

にチャレンジしてみたいと思います。

前回書きましたが、実はスキーマを読み込むまでの処理が結構重かったりします。
これを少しでも軽減するために

先にXMLスキーマのシリアライズしておく。
 ↓
次にシリアライズ済みのXMLスキーマを使用してXML文書を検証する。


とゆー戦略をとることができます。

まずは XMLスキーマのシリアライズを行います。


void serialize_xsd( const char *pXSDFile, const char *pSerializedFile )
{
  MemoryManager *p_memory_manager ;
  XMLGrammarPool *p_pool ;
  SAX2XMLReader *p_parser ;
  DefaultHandler h_default ;
  BinOutputStream *p_out_stream ;
  CXMLErrorHandler *p_err ;

  p_parser = NULL ;
  p_pool = NULL ;
  p_out_stream = NULL ;
  p_memory_manager = NULL ;
  p_err = NULL ;
  try
  {
// パーサインスタンスの生成。
    p_err = new CXMLErrorHandler() ;
    p_memory_manager = new MemoryManagerImpl() ;
    p_pool = new XMLGrammarPoolImpl( p_memory_manager ) ;
    p_parser = XMLReaderFactory::createXMLReader(
      p_memory_manager,
      p_pool ) ;
// XML検証に必要な機能を有効にする。
    p_parser -> setFeature( XMLUni::fgSAX2CoreNameSpaces, true ) ;
    p_parser -> setFeature( XMLUni::fgSAX2CoreValidation, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesDynamic, false ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchema, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchemaFullChecking, true ) ;
// グラマーキャッシュ機能を有効にする。
    p_parser -> setFeature(
      XMLUni::fgXercesCacheGrammarFromParse,
      true ) ;
// エラーハンドラを設定。
    p_parser -> setErrorHandler( p_err ) ;
// エンティティレゾルバは使用しないので default ハンドラを設定。
    p_parser -> setEntityResolver( &h_default ) ;
// パーサにXMLスキーマ(.xsdファイル)を読み込ませる。
    p_parser -> loadGrammar(
      pXSDFile,
      Grammar::SchemaGrammarType,
      true ) ;
// グラマープールをシリアライズしてファイルへ出力。
    p_out_stream = new BinFileOutputStream( pSerializedFile ) ;
    p_pool -> serializeGrammars( p_out_stream ) ;
  }
  catch( SAXException sax_e )
  {
    printf(
      "Encount SAXException / message = %s\r\n",
      XMLString::transcode( sax_e.getMessage())) ;
  }
  catch(...)
  {
    printf( "Encount Exception\r\n" ) ;
  }

// 領域の解放。
  delete p_parser ;
  delete p_pool ;
  delete p_out_stream ;
  delete p_memory_manager ;
  delete p_err ;
}


端的に、パースをやるかわりに、パーサに読み込んだ XMLスキーマ情報
(グラマープールと言うようだ)をシリアライズし、
ファイルに出力しているだけです。

・serialize_xsd の呼び出し
pXSDFile に検証に使用するXMLスキーマファイルのフルパスの文字列を
pSerializedFile にシリアライズした XMLスキーマファイルのフルパスの文字列を
それぞれ設定して呼び出してください。

【2011/12/17】 Xerces-C++ | トラックバック(0) | コメント(0) | page top↑
ふたたび xerces-c++ に取り組んでみた その5
最後に、シリアライズ済みの XMLスキーマを使用した XML文書の検証です。


void check_xml_by_serialized_xsd(
  const char *pXMLFile,
  const char *pSerializedFile )
{
  MemoryManager *p_memory_manager ;
  XMLGrammarPool *p_pool ;
  SAX2XMLReader *p_parser ;
  DefaultHandler h_default ;
  BinInputStream *p_in_stream ;
  CXMLErrorHandler *p_err ;

  p_parser = NULL ;
  p_pool = NULL ;
  p_in_stream = NULL ;
  p_memory_manager = NULL ;
  p_err = NULL ;

  try
  {
    p_err = new CXMLErrorHandler() ;
    p_memory_manager = new MemoryManagerImpl();
    p_pool = new XMLGrammarPoolImpl( p_memory_manager ) ;
// ファイルからシリアライズ済みのグラマープールを読み込む。
    p_in_stream = new BinFileInputStream( pSerializedFile ) ;
    p_pool -> deserializeGrammars( p_in_stream ) ;
// パーサインスタンスの生成。
    p_parser = XMLReaderFactory::createXMLReader(
      p_memory_manager,
      p_pool ) ;
// XML検証に必要な機能を有効にする。
    p_parser -> setFeature( XMLUni::fgSAX2CoreNameSpaces, true ) ;
    p_parser -> setFeature( XMLUni::fgSAX2CoreValidation, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesDynamic, false ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchema, true ) ;
    p_parser -> setFeature( XMLUni::fgXercesSchemaFullChecking, true ) ;
// グラマーキャッシュ機能を有効にする。
    p_parser -> setFeature(
      XMLUni::fgXercesUseCachedGrammarInParse,
      true ) ;
// エラーハンドラを設定。
    p_parser -> setErrorHandler( p_err ) ;
// エンティティレゾルバ、コンテンツハンドラは使用しないので
// default ハンドラを設定。
    p_parser -> setContentHandler( &h_default ) ;
    p_parser -> setEntityResolver( &h_default ) ;
// XMLファイルの解析を実行。
    p_parser -> parse( pXMLFile ) ;
  }
  catch( SAXException sax_e )
  {
    printf(
      "Encount SAXException / message = %s\r\n",
      XMLString::transcode( sax_e.getMessage())) ;
  }
  catch(...)
  {
    printf( "Encount Exception\r\n" ) ;
  }
// 領域の解放。
  delete p_parser ;
  delete p_pool ;
  delete p_in_stream ;
  delete p_memory_manager ;
  delete p_err ;
}


loadGrammer() を呼び出していないので、その分処理が早い(はず)です。
XMLスキーマ情報を煩累に入れ替える必要があったり
パーサのインスタンスを共用できないような場合は、この方法が有効だと思います。

・check_xml_by_serialized_xsd の呼び出し
pXMLFile に検証したいXML文書のフルパスの文字列を
pSerializedFile にシリアライズした XMLスキーマファイルのフルパスの文字列を
それぞれ設定して呼び出してください。

・グラマーキャッシュ機能を有効にする。の setFeature()
パラメータは XMLUni::fgXercesUseCachedGrammarInParse です。
XMLUni::fgXercesCacheGrammarFromParse ではない点に注意。

【2011/12/18】 Xerces-C++ | トラックバック(0) | コメント(0) | page top↑
今年のクリスマスのアフィリ
クリスマス向けのアフィリです。

ひでのふがコドモにどんなものを買うのか興味がある人は見るといいです。

続きを読む
【2011/12/19】 アフィリエイト | トラックバック(0) | コメント(0) | page top↑
今月の密林 2011/12
今月はアフタヌーンに加え、単行本が3冊とCDが1枚です。

先月

何はともあれ、80年代の少々マイナーなレコードが
どーゆーわけか最近CDで再販されるようになったのは
ひでのふのようなおっさんにとっては、喜ばしいことです。


と書いていたわけですが、
それにしたって野沢直子のベスト盤は誰が買うんだよ...


俺だよ!

残りは、あと8枚のよーです。ご注文はお早めにw
続きを読む
【2011/12/20】 アフィリエイト | トラックバック(0) | コメント(0) | page top↑
我が家の家計 2011/12
今月の増加分:14530
今までの増加:9986
車の減価償却引当て:2000000

うんまあギリギリ黒。
ホントはもっと黒くなる予定だったんですが

・おせち代。
・またもやマイルに釣られて Edy チャージ。
・リカチャンキャッソーの行ったときの高速代が今頃。

と、このあたりで5万円ほどかかってしまいました。

来月と再来月は車を買ってしまったので、
大きなおカネの出入りがある見込みで、
今回も家計から50万円以上の支援が必要な感じです。

あと、洗面台の新調を行ったのですが
これの支払いはまだはにぃの口座にある幼稚園の補助金と
相殺できる感じです。

カードの支払いがクリスマスプレゼントを買ったり
エレクトーン用の機械(MDR-5)とかを買った割には
8万円行ってないのが救いです。
【2011/12/24】 家計 | トラックバック(0) | コメント(0) | page top↑
| ホーム |