2007-11-29 アルゴリズム株取引の実際―その5―
アルゴリズム株取引,久々の近状報告です。今回は3銘柄の実績を報告します。たまたま時期が良かったのだと思いますが,超短期間で収益を上げることができました。(僅かですが。)
本題に入る前に小話を少々。2007年6月から株取引を中止しておりました。なぜかというと,7月の参議院選挙で民主党が勝つと,株価が低迷すると予想されていたからなのです。実際そのとおりになりましたね。
さらに米国のサブプライムローン(subprime lending)の問題と相俟って,株価を下げる材料はあっても,上げる材料はなくなってしまいました。サブプライムローン問題ってどうも根深いらしくて,影響は数年間続くそうです。(詳しくは知らないので,これ以上は触れないことにします。)
話を戻しますよ。「株価が落ちまくって,もう怖いから株の売買なんかやらない」なんて人がいらっしゃると思います。その判断は正しい気もしますし,正しくない気もします。だって,株が本来の価値よりも安いとしたら,それはお買い得ということなのです。
いつものように銘柄選びはコンピュータに任せて,株を買ってみました。
4755:楽天(株)
- 2007年11月13日に49,500円で1株買付け
- 2007年11月14日に51,000円で1株売却(利益+2.9%)
- 【参考】 銘柄情報 (11月13日 01:00)
「楽天」って,たぶん知らない人はいないと思います。国内ネットショッピングモール最大手の「楽天市場」を運営している会社です。この時期,推奨度の高い銘柄は皆無だったのですが,楽天の推奨買値と価格との乖離が目に付いたので,買ってみました。つぎの日,ちょっと上がったのですぐに売ってしまいました。
7868:(株)廣済堂
- 2007年11月16日に843円で100株買付け
- 2007年11月16日に875円で100株売却(利益+3.6%)
- 【参考】 銘柄情報 (11月16日 01:00)
前場(午前の取引)で買って,後場(午後の取引)で売りました。いわゆるデイトレードになりました。
2398:(株)ツクイ
- 2007年11月16日に642円で100株買付け
- 2007年11月26日に670円で100株売却(利益+4.0%)
- 【参考】 銘柄情報 (11月16日 01:00)
ツクイは介護の会社だそうです。かの「コムスン」と同業らしい。出来高の少ない銘柄のせいか,株価の変化がどうも作為的に感じました。
2007-11-26 [mixi出張所] ヨコ漏れ倶楽部12月号
mixi日記に「ヨコ漏れ倶楽部12月号」をこっそり公開しました(あくまで「こっそり」ね)。マイミクあるいは,マイミクのマイミクのみ閲覧できます。以下,今回のおしながきです。
- 素人K察官隠し撮り【無修正】
- 素人パパ隠し撮り【無修正】
- 秋山準さま
「無修正」とありますが,なんてことありません。本来,見せてはいけない個所に修正が入っていないだけなのです(←そのまんま)。
私のmixi日記ですが,ようやく方向性が定まってきました。mixiってそもそも18歳未満は参加できないことになっているので,大人向けの記事を書かないでほかに何を書くというのでしょうか。これから逸脱に拍車が掛かりそうです。
2007-11-22 CIRCUS(サーカス)12月号“男性の冬服、これがNGアイテムだ!”
全国のアキバ系のみなさん,こんばんは。どうやら女性誌から挑戦状が叩き付けられているようです。
※引用元: http://news.livedoor.com/article/detail/3397726/
■あ~あ、やっちゃったファッションランキング
1位 全身レザー
街中ともなれば激しく浮くのは必至。決して上下で組み合わせず、着るなら単独で。
2位 ダッフルコート
イメージ的にはオタク要素が強く、これをオシャレに着こなせる人はほんの一部。
3位 ウィンドブレーカー
一般の人がこれを着用するのは釣りかジョギング中というレベルの、完全実用アイテムだ。ちなみに、その機能性からか、アキバ系男子も好んで着ることが多い。
大変なことになりました。私,ダッフルコートを着ているのです。しかもUNIQLO。
<画像の説明>市内某所にて去年の私。
――しかも,ウィンドブレーカーも愛用しています(画像はありませんが)。
どうやら私は,完璧なアキバ系ファッションらしいのです。別に構いませんが(なぞ)。どうせ流行どおりの服装をすれば「個性がない」だとか「捻りがない」などと言われるのです。
それにしても,いつか全身レザーに挑戦してみようと思っていたのに,先手を打たれてしまいましたね。レザースーツってかなり肉付きが良くないと似合わないと思うので,まだまだ先のことになりそうなのですが。そういう問題ではないのかもしれませんが(再三なぞ)。
2007-11-18 市内某公園―雪男のなぞ―
日中,市内某公園を調査してきました。毎年11月中旬ともなると公園系は冬眠状態となることが多く,目立った動きはないのが普通です。ところがある情報に依ると,いまだに某公園では女装子と虹色業界人(妖怪かもしれません)たちとの間で,死闘が繰り広げられているというのです。雪男が出没するとでもいうのでしょうか。
全裸で徘徊するもよし,東屋でおさかん行為に耽るもよし,至れり尽せりだというのです。どこまで本当なのでしょうか。私はこれらの「謎」を解明するために調査することにしました。あくまで調査が目的なのです。
氷点下1.9℃
まず家から出てみて「ヤバイ」と思いました。どうも今日は気温が低いらしく,氷点下1.9℃だったのです。こんなに寒くて,はたして生還できるのでしょうか。
そんな弱気を吐いているようでは調査員など務まりませんよね。しっかり身支度してから出かけることにしました。
<画像の説明>道路交通標識の温度計です。-1.9℃だったらしい。道理で耳が凍傷するほど冷たかったわけです。
某公園
公園に到着したものの,だれもいませんでした。生体反応すら感じられませんでした。やはり寒すぎて,だれも外出する気にならないのでしょう。こんなに寒いのに出掛けようと思うなんて,そんな人はどうかしているのです。私のことですが(ふめい)。
<画像の説明>園内の様子です。落ち葉は凍りつき,辺りにはうっすらと雪が積もっていました。
便所の落書き
「屋外がだめなら屋内」というわけで,公園内にある便所を調査することにしました。
<画像の説明>便所の個室を調査することに。いつものことですが,下品な落書きで埋め尽くされていました。
<画像の説明>「オ○ニー見せて下さい。オ○ニー見て下さい。ブラリブラリ」だそうです(下品になるので画像を修正しています)。文末に「句点」をつけているところをみると,几帳面な性格なのかもしれません。そういう問題ではない気がしますが(←なぞ)。
<画像の説明>「誰でもいい」のだそうです。こういう人ほど実際は選り好みが激しくて,扱いが厄介なものです。
<画像の説明>なんと天井の配管にも落書きが。たまに「便所の個室の天井に,妖怪が張り付いていた」という証言を耳にすることがあるのですが,そのような天井生物の仕業でしょうか。
<画像の説明>便器付近の壁にプリクラシールが張られていました。嫌がらせでしょうか。こんな場所で晒されたら,たまったものではありませんね。
終わりに
「極寒の中がんばってる人たちがいる」という情報は,どうやら「ガセ」だったようです。もっとも,最初から本気にされても困るのですが(なぞ)。さて,便所の落書きを見ていつも思うのですが,どうしてみなさん,かくも飢えているのでしょうか。それに落書きするための油性ペンを,いつも持ち歩いているのでしょうか。便所の落書きひとつとっても,この世は謎だらけなのです。
2007-11-15 幻の虹色理髪店へ
先週末,虹色業界人が経営しているという理髪店を調査することにしました。以前,B∀DI誌に店名と電話番号だけこっそり掲載されていたのです。(最後の方に「イエローページ」ってあるでしょ。あそこで見つけたの。)
店の存在を何人かの知り合いに話してみたのだが,みなさん揃って「知らない」というご回答でした。この手の調査を私がやらないで,一体だれがやるというのでしょうか。私は話題性を最優先する人間なので,「話のネタにでも」と思って,行ってみることにしました。
住所を調べてみるとそのお店は,私の自宅からかなり離れた場所にあるらしい。わざわざ地下鉄に乗って尋ねることにしました。店の最寄りの駅で下車したまでは良かったのだが,その地域は寂れた住宅街でした。「こんな場所にお店出して,お客さん来るかしら」と心配してしまうような雰囲気だったのです。
さて,住宅街の道路をさ迷うこと30分,どうしてもお店が見つかりませんでした。「もしや閉店しているのでは」と思って,店に電話してみることにしました。不安は的中しました。電話に出たのは「あなたのお掛けになった電話番号は,現在使われておりません」というお姉さんの声だったのです。やっぱり閉店していたのです。
それにしても,私は一体,何をやっているでしょうか。まったくもって,わけが分かりません。いま始まったことではありませんが(ふめい)。
2007-11-13 野球場露出大会・愛が生まれた日
かなり件名が意味不明ですが,気にしないでください。オラオラ(なぞ)。
某日,某掲示板にて「今夜××公園の野球場で露出大会やります」という,極めて挑発的な書き込みを発見しました。私はその公園を知っていました。過去にも何度か調査したことがあったのです。「あの公園でまさかそんな高度なことが」と思いながら,某公園の野球場へ行ってみることにしました。
時刻は20時,公園に到着し野球場へ向かって歩いていると,ベンチ付近で「黒い影」が揺れていることに気づきました(なぜ「影」なのかは後述)。「これはただ事ではない」と思った私は,少し急いで歩くことにしました。
フェンスの扉を開け,野球場の中へ入ってみると大柄の男たちが全裸で露出大会をしていました。挑発的な書き込みは,冷やかしではなくて本当だったのです。彼らは全身が黒焦げみたいに日焼けしており,まるで「燃えかす(by ミニラさん)」のようでした。少し離れた場所から見ると,まるで影が踊っているかのようだったのです。
私は冷静でした。「ここまでやって大丈夫なのかしら?だめだと思うけれど」と思いながら,露出大会を見守ることにしました。ひととおり事が済んで,主催者のひとりとお話しすることができました。説明が後になってしまいましたが,主催者って私の知り合いだったのです(毒)。
さて,その方は「ここは貴重な場所だから,みんなで大切にしていかなければならない」と言っていました。私ね,いたく感心しました。だって,おさかんスポットの「灯」が生まれた瞬間,言わば「愛が生まれた日」に立ち会うことができたのです。これほど光栄なことはありません(どこまで本当なのやら)。
来年,その野球場はさらに高度になることが予想されます。いずれにしても,軽犯罪なので関わらない方が身のためでしょう(ふめい)。
2007-11-13 某地下サウナ―パパの湯に大異変―
秘境,パパの湯。私はこれまで,某地下サウナにおけるパパたちの赤裸々な●行動を報告してきました。某日,またパパの湯を調査してきました。思わぬ展開がありましたよ。
ロッカーが新しくなっていた
まず脱衣所に入って,部屋が明るくなっているように感じました。照明が変わったのではありません。ロッカーが新調されていたのです。ロッカーの色が「白」だったため,どうやら光をより多く反射するようになって,部屋が明るくなったようなのです。
以前は青色の錆びたロッカーでした。鍵を開け閉めするときにコツがいるらしく,「鍵は引っ張りながら回してください」といった張り紙がしてありました。場合によっては,荷物が入ったまま取り出せなくなってしまうこともあったようなのです。
新しいロッカーになって,そんな心配もなくなりました。
浴室内にも異変が
パパの湯の変化は,浴室内にも及んでいました。以前は固形石けんでしたが,液体のボディーソープに変わっていました。さらには新たな備品に,爪ブラシと軽石が加わっていました。
固形石けんって,たまにパパたちの「毛」がこびり付いていることがあって,かなり嫌だったのです。ボディーソープはプラスチックのポンプに入っているので,パパの毛と接触しなくても済むようになりました。
もちろん,液体のボディーソープだと今度は思わぬ汚物を注入されてしまう危険があるわけですが,そんなことを言っていたら,このサウナは利用できません。何しろ浴槽のお湯なんか,とんでもないことになっているのです。下品になるので,お湯に何が混ざっているのかは伏せておきます(なぞ)。
団塊世代向けビジネス
さて,今になって某地下サウナは設備が更新されているのです。某ばい菌部屋とはえらい違いです。
ばい菌部屋って,開店当初はきれいだったのに時が経つに連れて設備が老朽化していき,そのうちお化け屋敷みたいになったり,実際お化けみたいな人(いわゆる妖怪)が住み着いたり,なんてことがよくあるのです。
パパの湯は正反対の方向性を示しています。
私はすぐに気づきました。「パパの湯のおもな利用者って,団塊世代のオジサマたちなんだわ。これからまだ利用者が増える余地があるから,設備を新調したってわけなのね」と思いました。
そのうち若い子向けのばい菌部屋よりも,老舗の○乱旅館の方が設備がキレイなんて事態になるのかもしれませんね。いやはや,社会の変化から目が離せません。
2007-11-10 日本株情報サイト“あしたの株”を公開
11月上旬から,日本株情報サイト「あしたの株」を試験運用しています。体制が整ってきたので公開することにしました。
⇒「あしたの株」(「上がっている株」「下がっている株」の情報)
自家製の株価データベースの情報を公開
まず公開に至った経緯をご説明しましょう。私は2007年1月から,日本株のデータベースと自動取引システムの実験をしています。
「あしたの株」で公開している情報は,自動取引システムが使う推奨銘柄の一覧です。いままでアルゴリズム株取引のお話を何度かしてきましたが,具体的に「どの銘柄がよいのか」といった情報は公開していませんでした。この理由は単純で,コンピュータの指示どおりに買った結果,損をする事例がたびたびあったからなのです。
「アンタが勧めたから買ったのに,大損したわよ。どうしてくれるのよ?」
などとミエナイ人から恨まれたら,たまったものではありません。そのような不幸な事態を防ぐために,これまで情報公開に消極的だったのです。
ところで,「アルゴリズム株」の開発は着実に進んでいます。これまでは銘柄の一覧を出力するだけでしたが,証券会社の取引ツールと連携した完全自動システムの構築まで,あともう一歩という段階にまできました。
「開発に勢いをつけるためにも,情報公開が必要なのでは」と悟ったので,成果物を部分的に公開することにしました。
サイト概要
「あしたの株」では,機械的に算出した「上昇銘柄」と「下降銘柄」の情報を公開します。銘柄情報はいまのところ毎日午前1時ごろ,勝手に更新されます。
現在の更新時刻は暫定的なものです。最終的には23時ごろ更新できるようにしたいです。
注意事項
掲載している情報は,無保証なので注意してください。とくに「上昇率」(=相関係数)は90日間の株価を元に算出するため,とっくに調整局面に入って価格が落ちてきているのに上昇率は高いまま,なんていう状態になることがよくあります。作った人が言うのもなんですが,お世辞にも儲かる情報にはなっていません。
2007-11-10 “ハイブリッドめーる”の品質
「ハイブリッドめーる」とは,郵便事業株式会社が提供する郵便サービスです。インターネットで原稿(WordファイルやExcelファイルなど)を受付け,局内で印刷後,封筒に詰めて郵送してくれます。⇒サービス画面
試しに使ってみたので,サービスの使い勝手と印刷品質をお話します。
制限事項が多い
「ハイブリッドめーる」を使うには,まず利用者登録をしなければなりません。利用者登録をしなくても,サービスの使い方はウェブサイトで確認できるのですが,登録してからでなければ分からない制限事項がいくつかありました。
(1) 印刷できるファイルは1ファイルのみです。使い方を読むと 「A4用紙2枚を印刷できる」と書かれています。これは2ページ分の文章を印刷できるという意味であって,2ファイル印刷できるという意味ではありません。たとえばWord文章1枚とExcel文章1枚という印刷はできません。
(2) 用紙左下27mm×60mmの範囲に,制御用のバーコードが必ず印刷されてしまいます。原稿を作るときは,事前にページ設定で用紙左に27mmの余白を確保しておく必要があります。
(3) Excelブックを印刷する場合,印刷対象になるのは先頭のシートのみです。Excelブックには複数のシートを格納することができますが,先頭のシート以外は無視されます。
印刷品質が低い
試しに自宅宛てに「ハイブリッドめーる」の印刷物を送ってみました。印刷品質が低くてびっくりしました。気になった点は以下の2点です。
- トナーの定着が悪いのか文字に擦れがあった
- 英文字は欠けて印刷された
致命的だと思ったのは,英文字の「欠け」です。すべての「A」が「∧」のように印刷されてしまったのです。これでは話になりません。MS明朝9ポイントの文字が欠けていたのですが,「対応フォントの一覧」によると対応しているフォントだそうですよ。文字の大きさがまずかったのでしょうか。たぶん「仕様」なんでしょうけれど,困りましたね。
「ハイブリッドめーる」は登録中に印刷結果の完全なプレビューができるのですが,あのプレビューはウソです。騙されてはいけません。
写真原稿の仕上がり
<画像の説明>「原稿」と「ハイブリッドめーる」で届いた印刷物を並べてみました。肉眼で見ると,白っぽい感じがしました。色は合っていましたがγ特性は,かなりいい加減なようです。
<画像の説明>写真部分の拡大画像です。粒状感が強く,ひと昔前のインクジェットプリンタのような印刷物でした。肉眼で見ると,200DPIと300DPIではあまり差がありませんでした。原稿に写真を載せるときは,200DPIで良さそうです。
最後に
「ハイブリッドめーる」はPDFの印刷にも対応しています。MS明朝の英文字が欠ける現象は,たぶんフォントを埋め込んだPDFを使うことで解決できると思います。実際に試したわけではないので,本当にそれで不具合を回避できるのかは分かりません。
関連リンク
2007-11-09 XMLRPC::Liteで“さくらのブログ”に記事を投稿する
XML-RPCを使って「さくらのブログ」に記事を投稿するコードを作りました。
あらまし
普通,ブログに記事を投稿するにはWebブラウザで管理画面を開いて,フォームに記事を入力しなければなりません。XML-RPC(いわゆるブログAPI)を使うと,Webの管理画面を使わなくても記事を投稿できます。
動作概要
- PerlのXMLRPC::Liteモジュールを使う
- 新規記事を投稿するAPIには数種類あるが,今回は「metaWeblog.newPost」を使う
- 「さくらのブログ」「Seesaaブログ」に対応。ほかの商業ブログもだいたい同じはず。ただし動作確認した環境は「さくらのブログ」のみ
コード
use strict ; use XMLRPC::Lite trace => 'debug' ; use Encode ; use encoding 'utf8' ; ##### my $blogid = '123456' ; my $username = 'username.sakura.ne.jp' ; my $password = '********' ; my $content = { title => Encode::encode( 'utf8', '件名' ), description => Encode::encode( 'utf8', '本文' ), mt_text_more => Encode::encode( 'utf8', '追記' ), dateCreated => '2007-01-01T00:00:00', # ISO8601形式 } ; my $publish = XMLRPC::Data->type( boolean => 1 ) ; ##### my $uri = 'http://blog.sakura.ne.jp/rpc/' ; my $method = 'metaWeblog.newPost' ; my @params = ( $blogid, $username, $password, $content, $publish, ) ; ##### my $result = XMLRPC::Lite->proxy( $uri )->call( $method, @params )->result ; # $resultにはpostidが入る if( !$result ) { die 'ERR' ; }
注意点
(1) ソースファイルはUTF-8(BOMなし)で保存してください。Windowsの「メモ帳」で保存すると,この条件を満たさないので注意してください。
(2) あらかじめブログの管理画面で「パスワード」を設定しておきます。パスワードが思いつかない方は, 「yumi-ii | パスワード文字列を作る」をお試しください。
メモ
- 日本語を扱う方法 ― XML-RPCの引数に日本語を含めるときは「Encode::encode('utf8', '日本語')」として,UTF-8フラグを外しておきます。UTF-8フラグを外さないと,実行時に「Wide character in subroutine entry at ...」というエラーが発生します
- 未対応の属性 ― 現時点ではconvert_breaksやallow_commentsなどには対応していない模様。対応していない属性は無視されます
- 記事の作成日時 ― dateCreatedを省略すると,現在の日時が記事の作成日時になります
2007-11-08 NHK SONGS “槇原敬之”
NHKで槇原敬之こと「マッキー」の歌番組を観ました。相変わらず歌がうまかったですね。あれはもう才能の賜物と言う以外の何物でもありません。
マッキーって,お世辞にも顔は良くないし歯並びも叢生(そうせい)のままで,はっきり言ってあまりテレビに出てはいけない人だと思います。でも歌は素晴らしいので,半ば例外扱いなのでしょう。
さて,私はいつも芸能人や歌手の歯並びから目が離せません。マッキーの歯並びに関してですが,ご存知のとおりかなりガチャガチャしており,上顎右1番に至っては口腔側に大きく倒れています。あれはワザと治さないんだと思います。下手に歯並びを弄ってしまうと,発音や空気の抜け具合が変わってしまうことがよくあるのです。マッキーは歌手なので,口の調子が変わってしまうと問題があるのでしょう。本当の理由は知りませんが(なぞ)。
それからマッキーって下から映すと,三白眼(さんぱくがん)がはっきりするらしく独特の表情になるのです。私の知り合いにも,マッキーの類似品みたいな人が何人かいますが,あの表情までを真似できている人はいません。
2007-11-08 悪魔の公開メール
そういえば,過去に見せ合いしたことありましたね(←誤解を生む言い方)。すっかり忘れておりました。
さて,私はスーツって入社時のスーツ以降は全着がイージーオーダーなんですよ。ドキュンのくせに(ふめい)。そんなに高くないし,仕上がったスーツは寸法がかなり合っているので一度,着てしまうともうほかは着られないのです。
ワイシャツのオーダーにも興味があったのですが,まだやったことないので代わりにやってください(←押し付けがましい)。きっとピッタリフィットでヨコ漏れナシですよ。
<画像の説明>完全に意味不明ですが,過去画像を置いておきました。いま思うと裾がぐちゃぐちゃで,調子を整えてから撮れば良かったと後悔しています。
2007-11-06 先週の出来事
ただいま0時半です。先週の出来事を少々。
美白ビタミン剤終了
10月から肌を脱色するために,美白ビタミン剤を服用しておりました。だいぶ肌が白くなったので,飲むのを止めることにしました。
美白ビタミン剤を飲んでいる間は,肌が白くなりすぎて新スタートレックの「データ少佐」みたいな肌になっていました。早い話が不気味だったのです。飲むのを止めたら,徐々に色が落ち着いてきました。
某お風呂でも小熊たちが近寄ってきてくれるようになりましたよ。作戦大成功なのです(なぞ)。
mixiのプロフィール画像を変更
秋になったので秋っぽい画像にしてみました。今回はかなりレタッチが凝っているのです。意図的に肌の木目を粗く処理して,日焼けを繰り返したような汚い肌にしてみました。
「またウソ言って,実物そのまんまなんでしょ」と思った人がいるかもしれません。私にとってその方が,都合が良いのです(ふめい)。
一部の人にヒットするように作ってみましたが,本当にヒットするかどうかは分かりません。ヒットしたからといって,何か得することがあるのかというと,何も得しないのですが。
悪魔の公開メール
スーツ画像,ぜひ公開してくださいね。嫌だと思いますが。オラオラ(再三ふめい)。
2007-11-05 CASIO EXILIM V7買いました
某日,デジタルカメラを新調しました。機種はカシオ計算機の「EXILIM V7」です。⇒商品サイト
今まで6年前に購入した富士フィルムのFinePix4800Zを使ってきましたが,いい加減にボロボロになってきてしまって,撮影に支障をきたすことが多くなりました。「イザ」というときに撮れないのでは困るので,買い換えることにしたのです。
カメラ選びに際して今回,私が重視した事柄は以下の3点です。
- レンズが伸縮しないやつ
- 本体が薄い
- 光学ズームは3倍程度あればいい
本当は「明るいレンズ」のカメラを希望していたのですが,コンパクトデジカメで明るいレンズって,どうもそんな機種はなさそうでした。単純に考えて,光をたくさん集めるためには大きなレンズが必要なはずなのです。ですから最初から諦めました。
防水・防塵のカメラもいいなと思ったのですが,どうもそういうカメラはクレードルが使えないし,充電するときは本体からバッテリーを取り外して,専用の充電器で充電しなければならないらしいのです。それでは,お世辞にも「気軽に使える」という状態ではありません。いつも持ち歩いて,好きなときに撮るという使い方をしたかったので,こちらも諦めることにしました。
というわけで,消去法で決めたらEXILIM V7になりました。ちょうど「型落ち」だったらしく,お値段も手ごろでした。
撮影画像
なんら面白い題材ではありませんが,近所の風景を撮ってみました。
<画像の説明>V7には「ベストショット」という機能があります。何を撮りたいのか選択すると,カメラを適切に設定してくれるというのです。「紅葉モード」で撮影してみたのですが,冗談みたいな色になりましたね。
<画像の説明>ベストショットだとあまりにも色が不自然だったので,機能を使わないで撮影してみました。空の色に注目してください。それでもやっぱり変な色ですね。カシオだから仕方がないのかもしれません。(もともとカメラ屋じゃないし。)
<画像の説明>人物の撮影例です。と言っておきながら,被写体はいつものように私自身なのです。このカメラはマニュアル撮影機能が充実しています。ISO感度,露出,シャッタースピードを自由に設定できるのです(もちろん数値範囲に制限はありますが)。今回は室内照明だけ,フラッシュなしで撮ってみました。後処理のレタッチでトーンを弄ると,それなりの絵に仕上げることができるようです。
<画像の説明>さらに影を取るとともにトーンを補正し(青味を強め緑っぽさを抑えた),より被写体の存在感を強調してみました。元画像と比べてみてくださいね。
これからカメラの能力を引き出すべく,いろいろな被写体を撮ってみることにします。
2007-11-03 市内大衆浴場―お風呂の主との再開―
某日,市内郊外の某お風呂を調査してきました。某掲示板に書き込みがあったのです。そのお風呂の調査結果は,過去に何度か報告したことがあります。おなじみのあのお風呂です(それじゃ分からんって←なぞ)。
23時,私は施設に到着し脱衣所で服を脱いでいました。ちょうどそのとき,長髪の少女が脱衣所に現れました。どうやら少女もこれからお風呂に入るようでした。さて,私はその少女に見覚えがありました。過去にそのお風呂で「楠田枝里子」のような人物に遭遇し,逃げ出してきたというお話をしました。その少女だったのです。どうやら,お風呂の主と再会してしまったようなのです。
私は「なーんだ,来て損した」と思ってしまいました。だって少女ったら,だれからも相手にされないのに,独りで張り切ってしまうのです。しかも「泊まりセット」らしくて,まったく帰る気配を見せません。なぜ,そこまでして粘らなければならないのか理解できません。私の「調査」に費やす情熱と比べたら,遥かに軽症なのかもしれませんが(ふめい)。
2007-11-03 Excel VBAで実体参照のエンコードとデコード
Excel VBAでHTMLの実体参照をエンコード・デコードするコードを作りました。コードそのものはVB6.0処理系汎用であり,Excel VBA以外でも使えると思います。
あらまし
「HTMLの実体参照」とは,HTMLのメタ文字をエスケープするための記述方法です。メタ文字とは,「タグ」を書くときに使う文字です(正確にはちょっと違うけど)。たとえば「<>」を書きたいときは,「< > 」と書かなければいけません。「<>」はHTMLのメタ文字なので,これらを直接,書いてしまうと「タグ」と区別がつかなくなってしまうのです。
Excelで実体参照の混ざった文字列を扱うことは,あまりないと思いますが,あまりないがために必要に迫られたとき困るのです。
動作概要
- 実体参照を解決するクラスモジュール(HTMLEntity)を作る
- 「実体参照」と「文字」の対応表を作ることで,双方を変換できるようにする
- 実体参照のパターン抽出には正規表現(Scripting.Regexオブジェクト)を使う
仕様
- エンコード対象の文字は「&<>"」のみ
- デコードは文字実体参照と数値文字参照(10進と16進)に対応
- 誤記により実体参照の末尾の「;(セミコロン)」が存在しなかった場合も,なるべくデコードする
- 対応する文字実体参照は「ISO 8859-1」「一般記号,数学記号,ギリシア文字」「マーク付け記号,国際化文字」だが,デコードした結果のすべての文字コードをExcelで表示できるとは限らない
注意事項
- このコードは無保証です
- 細かな挙動は不明です。たとえば「巨大な文字列に適用した場合」「マッチ数が極端に多い場合」にどんな挙動をするのか明らかではありません。またエンコード・デコードの正当性(本当に正しいのかどうか)は十分に検証しておりません
- このコードはオブジェクト初期化時の計算コストが高いです。一度,生成したオブジェクトはなるべく使い回すようにしてください。とくにループの内部で何度もオブジェクトを生成してはいけません。スループット(処理効率)が低下します
コード(クラスモジュールHTMLEntity)
' require VBScript.RegExp, Scripting.Dictionary Option Explicit Private m_regex_encode As Object ' VBScript.RegExp Private m_regex_decode As Object ' VBScript.RegExp Private m_regex_decodehex As Object ' VBScript.RegExp Private m_regex_decodedec As Object ' VBScript.RegExp Private m_entity2char As Object ' Scripting.Dictionary Private m_char2entity As Object ' Scripting.Dictionary Private Function RegExp(pattern As String, Optional g As Boolean = False, _ Optional i As Boolean = False) As Object Set RegExp = CreateObject("VBScript.RegExp") With RegExp .pattern = pattern .Global = g .ignorecase = i End With End Function Private Sub Class_Initialize() Dim t As String Dim m As Object ' match Dim name As String Dim value As String Set m_regex_encode = RegExp("([""&<>])", g:=True) Set m_regex_decode = RegExp("&([\w#][\w\d]*);?", g:=True) Set m_regex_decodehex = RegExp("#[xX]([0-9a-fA-F]{1,4})") Set m_regex_decodedec = RegExp("#(\d{1,5})") Set m_entity2char = CreateObject("Scripting.Dictionary") Set m_char2entity = CreateObject("Scripting.Dictionary") ' ISO 8859-1 t = "" _ & "nbsp 160 iexcl 161 cent 162 pound 163 curren 164 " _ & "yen 165 brvbar 166 sect 167 uml 168 copy 169 " _ & "ordf 170 laquo 171 not 172 shy 173 reg 174 " _ & "macr 175 deg 176 plusmn 177 sup2 178 sup3 179 " _ & "acute 180 micro 181 para 182 middot 183 cedil 184 " _ & "sup1 185 ordm 186 raquo 187 frac14 188 frac12 189 " _ & "frac34 190 iquest 191 Agrave 192 Aacute 193 Acirc 194 " _ & "Atilde 195 Auml 196 Aring 197 AElig 198 Ccedil 199 " _ & "Egrave 200 Eacute 201 Ecirc 202 Euml 203 Igrave 204 " _ & "Iacute 205 Icirc 206 Iuml 207 ETH 208 Ntilde 209 " _ & "Ograve 210 Oacute 211 Ocirc 212 Otilde 213 Ouml 214 " _ & "times 215 Oslash 216 Ugrave 217 Uacute 218 Ucirc 219 " _ & "Uuml 220 Yacute 221 THORN 222 szlig 223 agrave 224 " _ & "aacute 225 acirc 226 atilde 227 auml 228 aring 229 " _ & "aelig 230 ccedil 231 egrave 232 eacute 233 ecirc 234 " _ & "euml 235 igrave 236 iacute 237 icirc 238 iuml 239 " _ & "eth 240 ntilde 241 ograve 242 oacute 243 ocirc 244 " _ & "otilde 245 ouml 246 divide 247 oslash 248 ugrave 249 " _ & "uacute 250 ucirc 251 uuml 252 yacute 253 thorn 254 " _ & "yuml 255" ' Mathematical, Greek and Symbolic (1/2) t = t & " " _ & "fnof 402 Alpha 913 Beta 914 Gamma 915 " _ & "Delta 916 Epsilon 917 Zeta 918 Eta 919 Theta 920 " _ & "Iota 921 Kappa 922 Lambda 923 Mu 924 Nu 925 " _ & "Xi 926 Omicron 927 Pi 928 Rho 929 Sigma 931 " _ & "Tau 932 Upsilon 933 Phi 934 Chi 935 Psi 936 " _ & "Omega 937 alpha 945 beta 946 gamma 947 delta 948 " _ & "epsilon 949 zeta 950 eta 951 theta 952 iota 953 " _ & "kappa 954 lambda 955 mu 956 nu 957 xi 958 " _ & "omicron 959 pi 960 rho 961 sigmaf 962 sigma 963 " _ & "tau 964 upsilon 965 phi 966 chi 967 psi 968 " _ & "omega 969 thetasym 977 upsih 978 piv 982 bull 8226 " _ & "hellip 8230 prime 8242 Prime 8243 oline 8254 frasl 8260 " _ & "weierp 8472 image 8465 real 8476 trade 8482 alefsym 8501 " _ & "larr 8592 uarr 8593 rarr 8594 darr 8595 harr 8596 " _ & "crarr 8629 lArr 8656 uArr 8657 rArr 8658 dArr 8659 " _ & "hArr 8660 forall 8704 part 8706 exist 8707 empty 8709 " _ & "nabla 8711 isin 8712 notin 8713 ni 8715 prod 8719 " _ & "sum 8721 minus 8722 lowast 8727 radic 8730 prop 8733 " _ & "infin 8734 ang 8736 and 8743 or 8744 cap 8745 " _ & "cup 8746 int 8747 there4 8756 sim 8764 cong 8773 " _ & "asymp 8776 ne 8800 equiv 8801 le 8804 ge 8805 " _ & "sub 8834 sup 8835 nsub 8836 sube 8838 supe 8839 " _ & "oplus 8853 otimes 8855 perp 8869 sdot 8901 lceil 8968 " ' Mathematical, Greek and Symbolic (2/2) t = t & " " _ & "loz 9674 spades 9824 clubs 9827 hearts 9829 diams 9830 " _ & "rceil 8969 lfloor 8970 rfloor 8971 lang 9001 rang 9002 " ' Special t = t & " " _ & "quot 34 amp 38 lt 60 gt 62 OElig 338 " _ & "oelig 339 Scaron 352 scaron 353 Yuml 376 circ 710 " _ & "tilde 732 ensp 8194 emsp 8195 thinsp 8201 zwnj 8204 " _ & "zwj 8205 lrm 8206 rlm 8207 ndash 8211 mdash 8212 " _ & "lsquo 8216 rsquo 8217 sbquo 8218 ldquo 8220 rdquo 8221 " _ & "bdquo 8222 dagger 8224 Dagger 8225 permil 8240 lsaquo 8249 " _ & "rsaquo 8250 euro 8364" For Each m In RegExp("([\w][\w\d]*)\s(\d+)\s?", g:=True).Execute(t) name = m.submatches(0) value = ChrW(m.submatches(1)) m_entity2char.Add name, value m_char2entity.Add value, name Next End Sub Public Function encode(s As String) As String Dim p As Integer Dim str As String Dim m As Object ' match p = 0 str = "" For Each m In m_regex_encode.Execute(s) If p < m.firstindex Then str = str & Mid(s, p + 1, m.firstindex - p) End If str = str & "&" & m_char2entity.Item(m.submatches(0)) & ";" p = m.firstindex + m.Length Next str = str & Mid(s, p + 1) encode = str End Function Public Function decode(s As String) As String Dim p As Integer Dim str As String Dim m As Object ' match Dim c As String p = 0 str = "" For Each m In m_regex_decode.Execute(s) c = m.submatches(0) If p < m.firstindex Then ' 実体参照が現れる位置までの文字列をコピーする str = str & Mid(s, p + 1, m.firstindex - p) End If If m_entity2char.Exists(c) Then ' 文字実体参照 str = str & m_entity2char.Item(c) Else With m_regex_decodehex.Execute(c) If .Count Then ' 数値文字参照16進 str = str & Chr(val("&h" & .Item(0).submatches(0))) Else With m_regex_decodedec.Execute(c) If .Count Then ' 数値文字参照10進 str = str & Chr(.Item(0).submatches(0)) Else ' 文字実体参照でも数値文字参照でもない str = str & c End If End With End If End With End If p = m.firstindex + m.Length Next str = str & Mid(s, p + 1) decode = str End Function 'EOF
例
Dim o As New HTMLEntity Debug.Print o.decode("&") Debug.Print o.decode("&"<>") Debug.Print o.decode("A&") Debug.Print o.decode("A&B") Debug.Print o.decode("&B") Debug.Print o.decode("ABC") Debug.Print o.decode("ABC") Debug.Print o.decode("ABC") ' 実体参照を含まない Debug.Print o.decode("†‡") ' Debug.Print o.decode("A&B") ' 末尾に「;」がない Debug.Print o.decode("あいうえ") ' 日本語 Debug.Print o.decode("あ&い") ' 日本語 Debug.Print o.decode("あ&い") ' 末尾に「;」がない Debug.Print Debug.Print o.encode("&") Debug.Print o.encode("&""<>") Debug.Print o.encode("A&") Debug.Print o.encode("A&B") Debug.Print o.encode("&B") Debug.Print o.encode("ABC")
例の実行結果
ほかの方法
おそらく専ら問題になるのはデコードだと思います。正規表現を使わない方法となると,実体参照の種類だけReplace関数を実行するしかないように思えます。性能面でかなり問題が出るのではないでしょうか。
BASICって,そもそも文字列処理が得意ではない気がするので,あまり無理をすると不幸になる可能性が大です。どこからか実体参照を扱うCOMを調達した方がよいでしょう。