著作権法30条と31条
自分の住んでいる豊田市の中央図書館には、英語の多読用図書が沢山ある。他にもCD付きの英会話の本なども結構ある。これらを借りてきてコピーしたい。これは違法だろうか?
以下はあくまで素人が記事執筆時点の法律の条文を読んで理解したこと。しかも分かりやすくするために、現実に世の中で行われていることに当てはめて説明している。法律の専門家からすると間違っている部分があるかもしれない。間違いは指摘して頂けるとありがたい。
結論から言えば、
- 図書館外で個人利用目的でコピーするのは合法
- 図書館内では調査研究目的で一部(多くても半分と認識されている)なら合法
ただし図書館外で個人利用目的でコピーする際にも以下の制約がある。
- コンビニなどの誰でも使えるコピー装置でのコピーは暫定的に文書や図面に限って合法
- CDやDVDなどにコピーガードがある場合、それを外してコピーするのは違法(ほぼ全てのレンタルDVDのコピーは違法)
- ネットを通じてデジタルデータをダウンロードしたりストリーミングを録音・録画するのは違法
- 音楽CDなどデジタルデータのコピーは保証金を払う必要がある(音楽用CD-RやMDの料金に含まれている。HDDやフラッシュメモリは現時点で対象外。)
- CDにソフトウェアが付属している場合、そのソフトウェアの利用許諾による
もちろん著作権がある著作物を、著作権者の許可無く複製する場合の話。
BlogTNGのコメントスパム防止
なんか英語のコメントスパムが来るようになった。最近のスパムボットって微妙にスパムなんだかわからない内容を投稿するのが流行りなんだろうか?これだけ頻繁に英語でコメントされたらスパムだってすぐわかるけど。
BlogTNGにスパム防止機能をつけようと思ったら、既にcaptchaというプラグインとの連携機能があるみたい。lib/plugins/blogtng/helper/comments.php の tpl_form() 関数がコメント入力欄を生成している。ここに、
//add captcha if available $helper = null; if(@is_dir(DOKU_PLUGIN.'captcha')) $helper = plugin_load('helper','captcha'); if(!is_null($helper) && $helper->isEnabled()){ $form->addElement($helper->getHTML()); }
という記述がある。
captchaプラグインをインストールしたら、管理画面でmodeにimageを選択する。するとコメント入力欄に、よく見かける画像に書いてある文字を入力するタイプのスパム防止機能を追加してくれる。
日本語化したければ lib/plugins/captcha/lang に各言語のディレクトリがあるので、英語用の en をコピーして ja を作り、中身のファイルを書き換える。
サイドバーを設置
BlogTNGには最近のコメントを表示したり、タグクラウドを表示したりするタグが用意されてる。なので、
<blog recentcomments> type comment </blog> <blog tagcloud> target start </blog>
とか書けば表示される・・・のだが・・・。これをサイドバーに設置するにはどうしたらいい?
DokuWikiにYoutube動画を埋め込む
昔はプラグインを導入する必要があったらしいが、今は下のVIDEOCODEの部分を埋め込みたい動画のYoutubeコードに置き換えればOK。
{{http://www.youtube.com/v/VIDEOCODE?.swf?400×333}}
ここを参考にした・・・というかそのまま。
boost spirit Qi のアクション
次のコードは QUERY_STRING や Post データのパーサー。ここでは hex ルールと space ルールにてURLエンコードされている文字のデコードを行なっている。
#include <boost/spirit/include/qi.hpp> #include <boost/fusion/include/std_pair.hpp> #include <boost/spirit/include/phoenix.hpp> #include <cassert> #include <stdexcept> static char hexchar2char(char c) { if (c >= '0' && c <= '9') { return c - '0'; } if (c >= 'a' && c <= 'f') { return c - 'a' + 10; } if (c >= 'A' && c <= 'F') { return c - 'A' + 10; } assert(!"NEVER REACHE HERE!"); return c; } template<typename Iter> static void parseUrlEncodedKeyValue(Iter begin, Iter end, std::map<std::string, std::string>* output) { namespace qi = boost::spirit::qi; using qi::rule; using qi::char_; using qi::lit; using qi::_val; using qi::_2; using qi::_3; using boost::phoenix::bind; // create boost::spirit rules const char* const URL_CHAR = "a-zA-Z0-9_.~*')(-"; const char* const HEX_CHAR = "a-fA-f0-9"; rule<Iter, std::string()> key = +qi::char_(URL_CHAR); rule<Iter, char()> hex = (char_('%') >> char_(HEX_CHAR) >> char_(HEX_CHAR)) [ _val = bind(hexchar2hex, _2) * 0x10 + bind(hexchar2hex, _3) ] ; rule<Iter, char()> space = char_('+') [ _val = ' ' ]; rule<Iter, std::string()> value = *( char_(URL_CHAR) | space | hex ); rule<Iter, std::pair<std::string, std::string>()> keyValue = key >> -('=' >> value); rule<Iter, std::map<std::string, std::string>()> query = -(keyValue % (lit(';') | '&')); // parse if (!qi::parse(begin, end, query, *output)) { throw std::runtime_error("Invalid Key-Value string."); } }
boost spiritでstd::pairを使う
昨日の問題は単に
#include <boost/spirit/include/qi.hpp> #include <boost/fusion/include/std_pair.hpp>
というように、boost fusion の std_pair.hpp をインクルードすれば解決だった。 昨日紹介したParsing a List of Key-Value Pairs Using Spirit.Qiのコメント欄に指摘があった。
boost spiritを使ってみる
ものすごく詳しいスライドがあったので、それを参考に使ってみた。でも結構ハマった。
まず Ubuntu 10.04 lucid に入ってるboostがv1.40なのだが、これに入っているのはspirit v2.0らしい。スライドではv2.3を使っているのでboost v1.43以上が必要。
そこでboost v1.46をダウンロードしてローカルに展開。ヘッダファイルしか使わないのでコンパイラのインクルードパスにそこを追加すればOKなはず。
以下のコードがどうしてもうまく動かなくて苦労することに。まず名前空間のどこに何があるのやらさっぱり。とりあえずQiを使うならインクルードは<boost/spirit/include/qi.hpp>だけでいい・・・はず。
検索窓を取り戻す
テンプレートをいじったときに上部の編集メニューを消したせいで、検索窓がなくなってしまった。これを設置しなおす。
<div id="tabnavi" class="tabnavi"> <?php tpl_tabnavi() ?> <div class="bar-right" id="bar__topright"> <?php tpl_searchform()?> </div> </div>
上部メニューの右側にくるようにした。あとCSSでclearerに、
div.clearer { clear: both; }
を設定した。たぶんclearerという名前や配置からして、この目的でこのdivを挿入していると思うのだけど、デフォルトではどこにも設定されていなかった。
