タグの記述方法を変更したものを追加しました。
あと、細かい調整や操作面の調整です。
しっかりしろAmazon
先日、ネトゲアンテナのシステムメンテナンスを行っていました。
Amazonのアソシエイトをどうしようかとページをめくっていると・・・
いつのまにか、イメージのみで個別商品リンクが張れるようになっているではないか。
ふむふむ、タグはAタグで張れ、DOCTYPEにやさしい。画像は持ち帰ってくださいと。
これは使うしかないだろと、商品をちゃんと把握しているパンヤから修正を書けることにした。
ちょっと用事があってパソコンから離れて、Amazonに再ログインすると・・・
あれ?イメージのみがない?さっきのは幻?
いやいや、リンクは生きてるし間違いない。
自分の操作に問題があったのか、としばらく悩んでいたけれど、時間の無駄なのでAmazonに問い合わせることにした。
----------
Amazon.co.jpアソシエイト・プログラムにお問い合わせいただき、ありがとうござ
います。
誠に申し訳ございませんが、一時的に個別商品リンクの作成画面にて、掲載すべき予
定ではない機能が掲載されておりました。この表示についてはすでに削除されており
ます。このたびは、誤った機能を表示しており、大変ご迷惑をおかけいたしましたこ
とを、お詫びいたします。
その他にもご不明な点がございましたら、ご遠慮なくお問い合わせください。アソシ
エイト・プログラムをご利用いただき、ありがとうございます。
----------
な、なんだってー(AAry
どうしてくれるんだよ、イメージのみ専用にスクリプト修正し終わってるんですがorz
ブログパーツこっそりテスト
rank表記がほしいということで、昨日こっそり追加してみた。
ラウンジで報告していないにもかかわらず、要望をもらった。
ぁあ、ちゃんと見てるんだなぁ、と。
作った意味はあったなぁ、と。
応えなきゃなぁ、と。
↑
桂小枝風に読まないこと。
てなわけで、またちょっと弄ってみました。
評価よろしく~
WCG ← ブログパーツのお知らせ
メンバー(個人)向けのブログパーツをちょっと前に作りました。
ここで公開
明日からの3連休で、もう一度調整します。
※改修予定項目
→ スタイルシートの整理
→ 利用者同士の交流を助ける、ウェブリング機能の実装
ちなみに、ブログじゃなくても、タグを貼り付ければ動きますよ。
GIMPでWeb素材を作ろう
![]()
背景やボタンとしても使えそうで、今風(?)なWeb素材を作ってみましょう。
このような画像が作れるようになります。
文字を重ねると、ボタンらしくなりますね。
この解説で使用したバージョンは、2.2.4です。
実際に作ってみる
それでは、手順を追って作ってみましょう。
-
新規画像を作成します。

とりあえず、200×40というサイズで作ることにします。
細かなサイズ指定は、慣れれば各自が判断できるでしょう。

問題なく作成されれば、こういうウィンドウが出現します。 -
基本とする色を塗ります。

ここでは、お気に入りの色である緑色を使いましたが、どのような色でもかまわないでしょう。
ただし、濃い目のほうがいいかもしれません。 -
グラデーションを塗るための準備をします。
画像を全選択してください。

そして、選択領域の縮小で2px縮めます。

次に、角を丸めます。
ここでは、半径を「50%」という設定で丸めます。
好みで変更してもかまわないでしょう。

ここまで問題がなければ、このような状態になります。 -
シャドウとなるグラデーションを塗ります。
2枚目のレイヤーを作成します。

最上部になるように配置してください。

新規レイヤーへグラデーションで塗ります。
「前景から透明に」を選択します。
形状は「Linear」反復は「なし」です。

下から中間までを選択し、グラデーションで塗ります。
ここまで問題がなければ、このような状態になります。 -
ハイライトとなるグラデーションを塗ります。

減算選択で半分にします。

再び角を丸めます。
半径を「100%」という設定で丸めます。
もし、膨らむようなら設定値を「90%」などに減らします。

ここまで問題がなければ、このような状態になります。 -
グラデーションの調整を行います。

グラデーションを塗ったレイヤーの透明度を「50%」に変更します。

うまくいけば、こういう状態になります。
なんとなく、雰囲気が出てきたでしょうか。
しかし、もうちょっと手を加えていきましょう。 -
ボーダーを塗るための準備を行います。

画像全体を選択して、それから2px縮小します。
選択領域を反転しておきます。
今回、角は丸めません。 -
ボーダーを塗ります。
この手順は、一気に進めてしまいます。
3枚目のレイヤーを作成します。

最上部になるように配置してください。

白色で描画色塗りします。
画像の端2pxをすべて塗ってしまいます。
作業しやすいように、表示倍率を800%に変更してあります。

画像全体を選択して、それから1px縮小します。
選択領域を反転して、角もそのままです。
黒色で描画色塗りします。
画像の端1pxをすべて塗ってしまいます。

アクセントに、角の1pxを白色で塗っておきました。 -
ボーダーの調整を行います。

3枚目のレイヤーをオーバーレイモードに変更します。

白色はハイライトっぽく、黒色はシャドウっぽくみえるようになります。

等倍で表示すると、こういう状態になります。
Web素材の完成
画像として書き出して完成です。
![]()
透明度のある、それっぽい画像が出来上がりました。
![]()
背景とグラデーションの間にパターン塗りを加えてみました。
雰囲気が変わって、いい感じになります。
こういうWeb素材が使われているのを、よく見かけると思います。
自分で作るのが面倒な方へ
ここで使用したデータファイルをお使いください。
背景画像の色を変えるだけで、いろんなパターンの素材が作れることと思います。
ダウンロードで内容を表示してしまうブラウザの場合には、右クリックメニューから対象を保存してください。
Photoshopでは、こういった作業をマクロにしてしまえば、いろんなサイズでも自動的に作れます。
しかし、GIMPではマウス操作の記録という機能がなく、スクリプトをコーディングしなければなりません。
自動化できるようになるのは、いつになることでしょう…。
更新履歴
- 2008/04/14
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2007/11/16
- 公開
HTML/AA 0.01
HTML/AAはPHPのモジュールです。
スクリプトと同じ階層か、PHPのモジュール用のパスに設置してください。
AAはアスキーアート(Ascii Art)と同じ要領で、アスキーアジャスト(Ascii Adjust)を行います。
このモジュールは、ブラウザに表示する文字列を整形する機能を有します。
このモジュールは、PerlのHTML::AAモジュールの移植版です。
UTF-8への対応も予定しておりますので、しばらくお待ちください。
ご意見、ご感想は、モジュール内に記載されているメールアドレスまでお寄せください。
PEARへの登録方法がよく分かりません。誰か教えて・・・
注意
エンコードはEUC-JP、Shift_JISに対応しています。
解説は、このページが一番詳しく、判りやすいと思います。
文字コードが異なる場合には、正常な結果を得ることができません。
MS Pゴシック12ポイントで表示した場合に限り、正常に表示できると予想されます。
文字列の先頭に半角スペースが出力された場合、それが行頭になるとずれる現象が発生します。
詳しくは、アスキーアートを紹介しているサイト等を参考にしてください。
文字列内に半角スペースの連続が混入していないと仮定します。
構文
HTML/AAモジュールを使う準備
require_once( 'HTML/AA.php' ); $aart = new AA( ); printf( '%s Version %s', $aart -> module, $aart -> version );
PHP HTML/AA module Version 0.01
文字列の長さを求める
echo $aart -> calcu_euc( '文字列の長さを求める' );
152
文字列を文字1つの配列に分解する
echo join( '|', $aart -> divide_euc( '文字列を文字1つの配列に分解する' ) );
文|字|列|を|文|字|1|つ|の|配|列|に|分|解|す|る
調整ドットを挿入して指定したサイズに整形
// 調整ドットは左側 echo $aart -> adjust_left_euc( '左側の文字', '右側の文字', 256 ); // 調整ドットは右側 echo $aart -> adjust_right_euc( '左側の文字', '右側の文字', 256 );
左側の文字. 右側の文字 左側の文字 .右側の文字
配列を1行と見立てて、整形できる最小のサイズを求める
$ary = array( '配列の中から', '整形可能な最小のサイズを', '返します' ); echo $aart -> shorter_euc( $ary );
226
配列を1行と見立てて、指定された倍数で、整形できる最小のサイズと、何倍かを求める
$ary = array( '配列を1行と見立てて', '指定された倍数で', '整形できる最小のサイズと', '何倍かを求める' ); echo join( ':', $aart -> shorter_multiple_euc( 16, $ary, $ary ) );
400:25
サンプルスクリプト
サンプルスクリプトのEUC-JPとShift_JISはダウンロード用パッケージに同梱されています。
<html>
<head>
<style type="text/css">
<!--
table,tr,th,td { border:1px gray solid; border-collapse:collapse; text-align:center; }
input,textarea { margin:4px; }
input { text-align:center; }
//-->
</style>
</head>
<body>
<?php
require_once( 'HTML/AA.php' );
$aart = new AA( );
printf( '<h1>%s Version %s</h1>', $aart -> module, $aart -> version );
?>
<h3>EUC-JPサンプル</h3>
<ul>
<li><a href="http://penlabo.net/PHP/HTML-AA.html">HTML/AA(ぺんラボ)</a></li>
<li><a href="HTML-AA_euc.php">EUC-JP</a></li>
<li><a href="HTML-AA_sjis.php">Shift_JIS</a></li>
</ul>
<form action="" method="post">
<table>
<tr>
<td>左側</td>
<td><input type="submit" value="整形"></td>
<td>右側</td>
</tr>
<tr>
<td>
<textarea name="multilineL" cols="50" rows="10" style="font-size:85%">FightAIDS@Home
Human Proteome
Discovering Dengue Drugs - Together
Rosetta@home
SIMAP
TANPAKU
proteins@home
SETI@Home
Folding@Home
CHRONOS</textarea>
</td>
<td>
<input type="text" name="separate" value="│" size="2">
</td>
<td>
<textarea name="multilineR" cols="50" rows="10" style="font-size:85%">HIVの新薬開発
たんぱく質構造の予測
デング熱治療薬開発プロジェクト
たんぱく質構造の予測
たんぱく質の類似性データベースの構築
たんぱく質構造の予測
たんぱく質構造の予測
地球外の知的生命を検出
たんぱく質構造の予測・アルツハイマー解析
ヒトゲノム染色体間法則性解明</textarea>
</td>
</tr>
</table>
</form>
<div style="font-family:MS Pゴシック;font-size:12pt">
<?php
if( isset( $_POST['multilineL'] ) && isset( $_POST['multilineR'] ) ){
aa( $aart );
}
function aa( &$aart ){
// mb_splitにもスイッチつけれ
mb_regex_encoding( 'EUC-JP' );
// 改行コード除去
$aryL = mb_split( '\x0d\x0a|\x0d|\x0a', $_POST['multilineL'] );
$aryR = mb_split( '\x0d\x0a|\x0d|\x0a', $_POST['multilineR'] );
// 配列の小さいほうを基準に
$max = count( $aryL ) < count( $aryR ) ? count( $aryL ) : count( $aryR );
$aryL = array_splice( $aryL, 0, $max );
$aryR = array_splice( $aryR, 0, $max );
// 最短整列ドット数
$minL = $aart -> shorter_euc( $aryL );
$minR = $aart -> shorter_euc( $aryR );
// 整形
for( $i = 0; $i < $max; $i ++ ){
echo $_POST['separate'];
echo $aart -> adjust_right_euc( '', $aryL[$i], $minL );
echo $_POST['separate'];
echo $aart -> adjust_left_euc( $aryR[$i], '', $minR );
echo $_POST['separate'];
echo "<br>\r\n";
}
}
?>
</div>
</body>
</html>
│ .FightAIDS@Home│HIVの新薬開発. │ │ .Human Proteome│たんぱく質構造の予測 │ │Discovering Dengue Drugs - Together│デング熱治療薬開発プロジェクト │ │ .Rosetta@home│たんぱく質構造の予測 │ │ .SIMAP│たんぱく質の類似性データベースの構築. │ │ . TANPAKU│たんぱく質構造の予測 │ │ .proteins@home│たんぱく質構造の予測 │ │ SETI@Home│地球外の知的生命を検出 │ │ .Folding@Home│たんぱく質構造の予測・アルツハイマー解析│ │ .CHRONOS│ヒトゲノム染色体間法則性解明. │
動作サンプル
補足
各バージョンごとに使い方が変わると思います。ご注意ください。
使い勝手がいいとはいえません。ぼちぼち更新していくかもしれませんが、関数名が変更になる可能性があります。
下のように、バージョンチェックをしたほうがいいかもしれません。
if( $aart -> version != 0.01 ){ echo 'The version of the HTML/AA module is different.'; }
ダウンロード
履歴
- 2008-04-07
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2007-09-16
- Perlから移植 バージョン0.01
RSS(RubyでRSSをパースする)
- 説明
- RSSファイルを参照し、オリジナルのリーダーを作成する。
- RSSの解説は、下のサイトを参考にしました。
- RSSによるサイトの情報の要約と公開
- RSSモジュールの解説は、下のサイトを参考にしました。
- RubyRSS
RSS Parser
- 確認環境
- OS:Windows2000、WindowsVista
- Ruby:ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
- 必要なパッケージ:RSSモジュール(インストールが必要です)
- 注意
- RSSモジュールは、標準でインストールされていません。
- Windowsでパッケージを追加するには、上にあるリンクからRSSモジュールのパッケージファイルをダウンロードしてください。
- インストール方法は、パッケージを解凍して、その中にある「setup.rb」を実行、つまり「ruby setup.rb」でインストールできます。
- リファレンスどおりにコーディングしても、RSSのバージョンによっては正常にパースできないことがあるようです。
- 動作確認を行ったモジュールのバージョンは0.1.7です。ファイル名でバージョンがわかるようにしてください…。
- ソース
-
#!/ruby/bin/ruby require 'rss' # RSSファイルのURL url = "http://raa.ruby-lang.org/index.rdf" content = "" open( url ) do |s| content = s.read end # RSSのパース begin rss = RSS::Parser.parse( content ) rescue RSS::InvalidRSSError rss = RSS::Parser.parse( content, false ) end # HTMLの出力開始 print "Content-type: text/html\n\n" # channnelタグ出力 channel = rss.channel printf("<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n<body>\n", channel.title ) printf( "<h3><a href=\"%s\">%s</a></h3>\n<p>%s</p>\n", channel.link, channel.title, channel.description ) # imageタグ出力 if rss.image != nil then image = rss.image printf( "<p><a href=\"%s\"><img src=\"%s\" alt=\"%s\" align=\"right\"></a></p>\n", image.link, image.url, image.title ) end # itemタグ出力 print "<dl>\n" rss.items.each do |i| printf( "\t<dt><a href=\"%s\">%s</a></dt>\n\t<dd>%s</dd>\n", i.link, i.title, i.description ) end print "</dl>\n" # HTMLの出力終了 print "</body>\n</html>\n" exit;
更新履歴
- 2007-08-19
- nilチェックをさせたら動いた。モジュールなら、自動的にやってくれればいいものを。
- 2007-08-02
- 公開。このモジュールではパース出来ないRSSも多く、あまり使えるものにはなっていない。
XML/RSS(PHPでRSSをパースする)
RSSファイルを参照し、オリジナルのリーダーを作成します。
RSSの解説は、RSSによるサイトの情報の要約と公開を参考にしました。
XML_RSSパッケージの解説は、XML_RSSを参考にしました。
使用したXML_RSSパッケージのバージョンは1.14(0.9.10)でした。
XML_RSSパッケージは、PHPのバージョン5.2.1ではインストールされていません。
インストール方法
XML_RSSをインストールすると、XML_Treeも同時にインストールされます。
pear install -a XML_RSS
サンプル
構文
<?php
require_once( "XML/RSS.php" );
// RSSファイルのURL
$rss = new XML_RSS( "http://pear.php.net/feeds/latest.rss" );
// RSSのパース
$rss -> parse();
// channnelタグ出力
$channel = $rss -> getChannelInfo();
printf( "<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n",
$channel['title']
);
printf( "<h1><a href=\"%s\">%s</a></h1>\n<p>%s</p>\n",
$channel['link'],
$channel['title'],
$channel['description']
);
// imageタグ出力
if( isset( $rss -> images ) ){
foreach( $rss -> getImages() as $image ){
if( !count($image) ){ continue; }
printf( "<p><a href=\"%s\"><img src=\"%s\" alt=\"%s\" align=\"right\"></a></p>\n",
$image['link'],
$image['url'],
$image['title']
);
}
}
// itemタグ出力
echo "<dl>\n";
foreach( $rss -> getItems() as $item ){
printf( "\t<dt><a href=\"%s\">%s</a></dt>\n\t\t<dd>%s</dd>\n",
$item['link'],
$item['title'],
isset( $item['description'] ) ? $item['description'] : ""
);
}
echo "</dl>\n";
// HTMLの出力終了
echo "</body>\n</html>";
?>
更新履歴
- 2008/04/04
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2007/07/31
- PHPのXML_RSSとあわせるための細かな修正
- 2007/07/30
- 公開
XML::RSS(PerlでRSSをパースする)
現在はバージョン1.33が公開されています。
RSSファイルを参照し、オリジナルのリーダーを作成してみます。
RSSの解説は、RSSによるサイトの情報の要約と公開を参考にしました。
このモジュールは、ローカルに保存したファイルのタイムスタンプを比較し、無駄なトラフィックを回避しているそうです。
使用したXML::RSSモジュールのバージョンは1.12でした。
Perlのバージョンが5.8では、インストールされていません。
動作確認を行ったXML::RSSのバージョンは1.12です。最新版は確認しておりません。
インストール方法
CPANからインストール
以下のように、パッケージを直接指定しなければなりません。
CPANでインストールすると、バージョンは1.32です。
cpan install S/SH/SHLOMIF/XML-RSS-1.32.tar.gz
ppmでインストール
モジュール名の指定でインストールできます。
ppmでインストールすると、バージョンは1.12です。
ppm install XML-RSS
サンプル
構文
#!/perl/bin/perl
use strict;
use XML::RSS;
use LWP::Simple;
# RSSファイルのURL
my $url = 'http://search.cpan.org/uploads.rdf';
# 保存ファイルパス
my $file = './rss';
# RSS更新確認(ここで$fileが最新になる)
mirror( $url, $file );
# RSSのパース
my $rss = new XML::RSS;
$rss -> parsefile( $file );
# HTMLの出力開始
print qq|Content-type: text/html\n\n|;
# channnelタグ出力
my $channel = $rss -> {'channel'};
printf( qq|<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n<body>\n|,
$channel -> {'title'},
);
printf( qq|<h1><a href="%s">%s</a></h1>\n<p>%s</p>\n|,
$channel -> {'link'},
$channel -> {'title'},
$channel -> {'description'},
);
# imageタグ出力
my $image = $rss -> {'image'};
printf( qq|<p><a href="%s"><img src="%s" alt="%s" align="right"></a></p>\n|,
$image -> {'link'},
$image -> {'url'},
$image -> {'title'},
);
# itemタグ出力
print qq|<dl>\n|;
foreach my $item ( @{$rss -> {'items'}} ){
printf( qq|\t<dt><a href="%s">%s</a></dt>\n\t<dd>%s</dd>\n|,
$item->{'link'},
$item->{'title'},
$item->{'description'},
);
}
print qq|</dl>\n|;
# HTMLの出力終了
print qq|</body>\n</html>|;
exit;
更新履歴
- 2008-08-31
- バージョン1.33公開の追記
- 2008-04-04
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2007-07-31
- PHPのXML_RSSとあわせるための細かな修正
- 2007-07-30
- 公開
VB.NETでMicrosoft Outlookのメールを読む
- はじめに
- VB.NETの環境は、Microsoft Visual Basic 2005 Express Editionを利用しています。
- Microsoft OutlookではないOutlookには、対応していません。
- 準備
- 新しいプロジェクトを作成してください。
- 次に、APIの読み込みを行います。「メニューバーのプロジェクト > 参照の追加」より、COMタブを選択し、「Microsoft Outlook 9.0 Library」コンポーネントを選択します。数値の部分は、インストールしてあるMicrosoft Officeのバージョンで変化することがあります。ちなみに、Microsoft Office2000では9.0です。
- 受信トレイのメールを読む
- まずは、受信トレイのメールを読んでみたいと思います。
- 受信したメールタイトルを表示するためのリストボックス(ListBox1)を用意します。
- 受信トレイのメールを読むタイミングは、起動時に行います。つまり、Form1_Loadに記述します。
-
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub - myNameSpace.GetDefaultFolder(6)の6が受信トレイのフォルダを指します。
- フォルダにある各メールは番号で管理されており、Itemsのインデックス番号で参照できます。
- Microsoft Outlookの受信トレイにメールがあるのを確認してから、実行してください。

- 問題なく表示できたでしょうか?
- メールの本文を読む前に
- 次は、メールのタイトルを読むことができたので、リストを選択すると内容が表示されるようにします。
- メールの内容を読むためには、そのメールのインデックス番号が必要です。
- そこで、メールタイトルをキーに、メール番号を値としたハッシュを用意します。
-
Public mail As Hashtable = New Hashtable Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) mail(myitem.Subject) = i Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub - 変更した場所を赤く表示しています。これで、リストの値からメール番号を得られるようになりました。
- メールの本文を読む
- 内容を表示するためのテキストボックス(TextBox1)を用意します。
- TextBox1はプロパティの設定で、MultilineとScrollBarsをTrueに変更しておきます。
- 内容を表示するには、ListBox1のSelectedIndexChangedイベントを利用します。
-
Private Sub ListBox1_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ListBox1.SelectedIndexChanged Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim myitem = myFolder.Items(mail(ListBox1.Text)) TextBox1.Text = myitem.Body End Sub - メール番号は1から始まります。

- これで、選択したメールの内容を表示することができました。
- メールの内容は、text形式かhtml形式かの判断は行っていません。
- html形式では、ソースが表示されますが、一部は「?」という文字に化けます。
- おまけ
- myitem.Subject 件名
- myitem.SenderName 送信者名
- myitem.SentOnBehalfOfName 送信者名(SenderNameとどう違う?)
- myitem.Body 内容
- myitem.ReceivedTime 受信時間
- myitem.To 送信先
更新履歴
- 2007-07-21
- 公開