Scripting Archive

APR
23

IronPython触れてみた。

Published:2009-04-23 01:43:57 UTC

IronPythonの世界 (Windows Script Programming): 荒井 省三は読んだことがあるものの、IronPython自体は一行も書いたことが無かったので試しに書いてみた。

‘Hello World’メッセージをWordPressのBlogに投稿するコード。

# coding=utf8
import System
import clr
import sys

clr.AddReferenceToFile('SharpLab.XML-RPCLib2.dll')
clr.AddReferenceToFile('SharpLab.WP-XML-RPCLib2.dll')

from SharpLab.XMLRPCLib2 import *
from SharpLab.WPXMLRPCLib2 import *

endPointUri = raw_input(u'WordPressのエンドポイントURL:');
username = raw_input(u'WordPressのユーザー名:');
passoword = raw_input(u'WordPressのパスワード:');
client = WordPressClient(endPointUri,'IpyPostMessage');
authInfo = AuthenticationInfo(username, passoword)

postContent = PostContent()
postContent.Title = 'Hello World, from IronPython. [EOM]'
postContent.Description = ''
postContent.TextMore = ''
postContent.Excerpt = ''

client.NewPost(authInfo, 0, postContent, True)

print 'Published!'

最新の記事100件のタイトルとタグを一覧表示するコード。

# coding=utf8
import System
import clr
import sys

clr.AddReferenceToFile('SharpLab.XML-RPCLib2.dll')
clr.AddReferenceToFile('SharpLab.WP-XML-RPCLib2.dll')

from SharpLab.XMLRPCLib2 import *
from SharpLab.WPXMLRPCLib2 import *

endPointUri = raw_input(u'WordPressのエンドポイントURL:');
username = raw_input(u'WordPressのユーザー名:');
passoword = raw_input(u'WordPressのパスワード:');
client = WordPressClient(endPointUri, 'IpyPostMessage');
authInfo = AuthenticationInfo(username, passoword)

result = client.GetRecentPosts(authInfo, 0, 100)

for item in result.Response :
	print item['title'].Value + '(' +item['mt_keywords'].Value + ')'

DLR楽しい。.Netのアセンブリが簡単に扱えるのは嬉しいですね。TabのないコードなんてPythonを書いているとは言えない!というツッコミは無しで。

APR
15

一昨日のWordCampでもMatt直々に紹介があったP2、自分も早速設置してみました。

P2 – SharpLab.

image

おお~。素敵素敵。でも、Twitterの魅力である、TLを通じた他人とのインタラクションは一人でP2を使っているのでは得られないので(多分。P2にはFollowとかいう仕組みはないですよね?)、自分はこのP2を適用したBlogをTwitterの自分のTweetのログを収集するために使うことにしました。

利用したのはTwitter Toolsというプラグイン。自分のTwitterでのTweetを収集してサイドバーとかに表示したり、一日のTweetのサマリ記事をBlogに自動で投稿したりする機能を持った、TwitterとWordPressをつなぐ働きを持った多機能プラグインです。で、今回はこのプラグインの「Tweet毎にエントリを自動投稿する」機能を利用しています。

但し、Twitter ToolsとP2をあわせて使う上で注意点が一つ。Twitter ToolsもP2も、Services_JSONというPEARのクラスを利用するのですが、それぞれがServices_JSONを定義しようとするために衝突が起こってしまうという問題があります。そこでP2のテーマの中にある、inc/JSON.phpファイルを少し修正してやる必要があります。Services_JSONの定義を丸ごと、以下のif文で括ってやればOKです。(いかにもPHPな話ですね…。)

if (!class_exists('Services_JSON')) {

//Services_JSONの定義

}

あとはTwitter Toolsの設定で"Create a blog post from each of your tweets?"という項目をYesに設定したり必要な設定を済ませるだけです!素敵ですね。

去年はコメント逆流だった。今年は何かなと思いふと見てみると…。

image

これは……

ニコ動はこういったflvplayerの挙動の切り替えにいつもプレイヤーのembedタグのflashvars属性を使っているのでソースを見てみた。

<embed id="flvplayer" height="540" width="952" flashvars="v=sm6595043&videoId=sm6595043&deleted=0&mylist_counter=5941&movie_type=flv&thumbImage=http://tn-skr4.smilevideo.jp/smile?i=6595043&us=0&ad=web_pc_player_marquee&iee=1&wv_id=sm6595043&wv_title=%E3%80%90%E8%A8%9B%E3%82%8A%E5%AE%9F%E6%B3%81%E3%80%91%20%E3%83%AF%E3%83%B3%E3%83%80%E3%81%A8%E5%B7%A8%E5%83%8F%E3%80%80Vol%EF%BC%9A01&wv_code=d806da3d&wv_time=1238515393&button_threshold=0&thumbTitle=%E3%80%90%E8%A8%9B%E3%82%8A%E5%AE%9F%E6%B3%81%E3%80%91%20%E3%83%AF%E3%83%B3%E3%83%80%E3%81%A8%E5%B7%A8%E5%83%8F%E3%80%80Vol%EF%BC%9A01&thumbDescription=%E2%94%80%E2%94%80%E6%9C%80%E5%BE%8C%E3%81%AE%E4%B8%80%E6%92%83%E3%81%AF%E3%80%81%E3%81%9B%E3%81%A4%E3%81%AA%E3%81%84%E3%80%82%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E3%81%8D%E3%81%BF%E3%81%A8%E4%BC%9A%E3%81%86%E7%82%BA%E3%81%AB%E3%80%81%E5%83%95%E3%82%89%E3%81%AF...&weather1=%E3%81%8F%E3%82%82%E3%82%8A&conjunction=%E6%99%82%E3%80%85&weather2=%E9%9B%A8&highest_temperature=13.0&lowest_temperature=8.0&chance_of_rain=40&player_version_xml=1233560503&marqueeVersion=1238147635&theRevengeOfChar=1" allowfullscreen="true" allowscriptaccess="always" quality="high" bgcolor="#FFFFFF" name="flvplayer" style="" src="http://www.nicovideo.jp/swf/nicoplayer.swf?ts=1238491869" type="application/x-shockwave-flash"/>

flashvars属性の最後の部分に注目。

theRevengeOfChar=1

逆シャアですね、わかります。

ふとWikipedia引いてみた。

機動戦士ガンダム 逆襲のシャア』(きどうせんし- ぎゃくしゅう-、MOBILE SUIT GUNDAM Char’s Counter Attack)は、1988年3月に松竹系で劇場公開されたガンダムシリーズアニメ映画宇宙世紀(UC)の2人の主人公、アムロ・レイシャア・アズナブルの最後の対決を描いている。ファンの間では「逆シャア」や英題の頭文字を取り「CCA」などと略されることもある。

機動戦士ガンダム 逆襲のシャア

出典: フリー百科事典『ウィキペディア(Wikipedia)』

英語表記違うやん…。

hiromasaさんが開発されたWordPress Related Post for Japanese 1.50、このサイトでも導入してみました。WordPress Related Post for Japaneseは、Yahoo! Japanの形態素解析APIを利用して関連エントリを取得・表示するプラグインです。実はver1.1のころから導入はしていて、裏で走らせてはいたのですが、そのころはBlogのエントリ数自体がまだ少なく、関連エントリを表示しようにも表示するエントリがないため精度が微妙だったので、表示するためのタグは張らずに遊んでいる状態でした。

でも今なら大丈夫!しっかり関連エントリが表示されています!

image

原理上短いエントリの場合、どうしても精度が出ない場合もありますが、それは努めて長文エントリ書くようにする、という運用でカバーしていければと思いますw

MAR
10

Vistaのlocalhost

Published:2009-03-10 22:59:56 UTC

久しぶりにWindowsでXAMPPを立ち上げてみると、Apacheは起動しているのに画面が表示されないという不可解な現象に直面。Apacheは確かに起動しているのに、http://localhost/にアクセスしてみてもページ読み込みエラーが出るという…。散々悩んだ挙句、ふとhttp://127.0.0.1/ と打ち込んでみると見事にXAMPPのスプラッシュ画面が。どうやら、localhostを解決するためのhostsファイルが書き変わっていたためのようだ(近頃の、とあるR。 » localhostが動かなくなった より)。

前は動いていたのに、何のタイミングでこんなことになったのかなぁ…?

2009-03-16追記:Windows Defenderのせいらしい。
Expression Blend and Design : "Page Cannot Be Found" Issue when Previewing via Expression Blend

DEC
14

Eclipse PDT+Aptana+Subclipse

Published:2008-12-14 15:25:01 UTC

WordPress2.7が出たのをきっかけに、いい加減PHPの開発環境を整えようということで、hiromasaさん御用達のEclipse PDTの導入と、WebオーサリングツールであるAptana、SubversionクライアントであるSubclipseの導入を行ってみました。

参考にしたサイトはこちら

Eclipse+pdtインストール 日本語化してPHP開発環境を作る(Xampp) – delab

Subclipseのインストール方法

基本的にこの二つのサイトの指示に従ってインストールを進められたのですが、途中、PDTの「PHPサーバーの設定」のところでつまづきました。あるはずの「このサーバーへプロジェクトを公開」の項が…ない!という問題。実行時にXAMPPのフォルダにプロジェクトをコピーしてくれるオプションだったので、これがないと書いたものを走らせることができないので困ります。

ググるとBug 216086 – Run command borked, can’t get ALL files to copyというページに行き当たりまして(via ひとり2ちゃん: Eclipse で PHP PDT)、どうやら「このサーバーへプロジェクトを公開」というオプションは、削除されてしまったみたいです。

理由は、

  • デカいプロジェクトだとコピーの作業って時間食うよね
  • コード書き換えたらいちいちPublishしないといけないのはめんどうだよね、ブラウザでF5キー押すだけのほうがいいよね
  • プロジェクトから削除したファイルがPublish先にゴミとして残ることがあるのはマズいよね

とのこと。なるほど。そして代替策としてhttpd.confを使ってエイリアスの定義をするやり方が紹介されていました。

で、それら設定をすべて済ませて、レポジトリからチェックアウトしてきたWordPress2.7をステップ実行してみたの図。

image

おおー!これは凄い。そしてこれまでテキストエディタでWordPressのThemeを書いて、var_dump()を使ってデバッグをしていた自分の努力はなんだったんだ…。

AUG
31

NicoComeAccelerator.user.js

Published:2008-08-31 03:04:59 UTC

VOCALOIDでニコニコ動画流星群【完成版】‐ニコニコ動画(夏)の勢いの速さを目の当たりにして、昔作ったグリモンスクリプトをもう一度作りなおしてみた。

内容はコメントのリロード間隔を3秒に縮めるというもの。どんどん流れてゆくコメ、ガンガン上がる再生数・マイリス数を眺めるのは結構面白いものがある。

// ==UserScript==
// @name           NicoComeAccelerator
// @namespace      http://www.sharplab.net/
// @include        http://www.nicovideo.jp/watch/*
// @require        http://svn.coderepos.org/share/lang/javascript/userscripts/GM_Libs/noriaki/NicoNicoPlayerWrapper/NNPW-20080824.1.js
// ==/UserScript==
var player = new NicoNicoPlayer();
player.onReady(function(video_info) {
	this.val("HTTP_INTERVAL","3000");
	this.val("HTTP_INTERVAL_SHORT","3000");
	this.val("HTTP_INTERVAL_ECONOMY","3000");
	this.val("HTTP_INTERVAL_SHORT_ECONOMY","3000");
});

やっぱりこれもSharpLab.:ニコ動の動画プレーヤー操作用ライブラリを使ってみた。のエントリのときと同じく、時折「Security Manager vetoed action」というエラーに悩まされるわけだけど、何が再現条件なんだろう…。

面白いGreasemonkeyスクリプト用ライブラリを見つけたので紹介。

Greasemonkeyスクリプトからニコニコ動画のFlashプレーヤーを操作するライブラリ(バージョンアップ) – We Ain’t Seen Nothin’ Yet.

Flash内部のActionScriptの変数は、SetVariable、GetVariableメソッドを使用することで、そのFlashを含むWebページのJavaScriptから読み書きできるのだけれど、その機能を使ってニコニコ動画のFlashで出来た動画プレーヤーを操作しようというもの。

ニコ動のプレーヤーを外部から操作するというのはニコニコ動画をHackするときに使えそうな変数まとめというエントリの頃から注目していたのだけれど、このようにライブラリの形に纏めた形で提供してもらえるというのは非常に有り難いことだ。

さて、早速このライブラリを使用して、今年のエイプリルフールに運営が悪ふざけでやった「コメント逆流事件」を再現してみる。このスクリプトをインストールすると、ニコ動のコメントが逆流するようになる。

// ==UserScript==
// @name           ReturnToAprilFoolsDay
// @namespace      http://www.sharplab.net/
// @include        http://www.nicovideo.jp/watch/*
// @require        http://svn.coderepos.org/share/lang/javascript/userscripts/GM_Libs/noriaki/NicoNicoPlayerWrapper/NNPW-20080824.1.js  
// ==/UserScript==
var player = new NicoNicoPlayer();
player.onReady(function(video_info) {
	this.val("isReverse","true");
});

ニコ動の動画プレーヤーはisReverseという変数を内部に持っているのだが、それにtrueをセットすることで流れるコメの向きを反対に出来ることを利用したスクリプト。エイプリルフールを過ぎたらこの変数もなくなるのかな、と思っていたのだけれども、「@逆」とかいうニコスクリプトのために残されたようだ。

ところでこれらニコ動の動画プレーヤーを操作するGreasemonkeyスクリプトだが、時折「Security Manager vetoed action」というエラーで実行に失敗することがある。どうもSetVariableメソッドによる内部の変数の操作がFirefoxのセキュリティ・ポリシーに反していて拒否される、ということのようなのだが、実行できる場合もあり、再現条件がはっきりしない。Firefox2の頃は全く問題がなかったので、Firefox3での変更だと思うのだが…。謎。

追記:cerego公式のブックマークレットがリリースされています。こっちの方が便利かも。

image

タイトルはホッテントリメーカーで生成したw 無駄に愛愛うるさい気もするが、まぁ気にしない。春じゃないのも気にしちゃいけない。

それはともかく。
iKnowは英語学習用SNSサービスで、英語を学ぶためのe-learningコンテンツと、SNSが融合したサービス。Ruby on RailsとFlashで作成された素晴らしい学習アプリが特徴で、TOEIC向け、TOEFL向けなど様々なコースを、目標日から自動で逆算されたペース配分に従って学習を進めることができる。

さて、そんなiKnowには、「iKnowアイテムバンク」という名前で、登録されている10万語超の英単語を調べることができる辞書機能が存在する。そして、その単語を集めて自分の英単語帳を作ることができる「マイリスト」という機能も存在している。作成したマイリストは、運営元のceregoによって提供されているコースと同じように、iKnowの学習アプリを使ってペース配分しながら勉強することが出来、iKnowを非常に効率的な英語学習プラットフォームとして活用することが出来る。

で、今回はそのマイリスト機能を活用するための基盤となる、iKnowアイテムバンクを検索するための検索プラグインを作成してみた。なお、iKnowアイテムバンクはAjaxを活用しているので、SearchQueryGeneratorは使えないので注意。

OpenSearchプラグイン

Firefox向けOpenSearchプラグイン。以下のリンクからインストールできます。
iKnow ItemBank Searchをインストール(Firefox)

image これを使えば、

  1. 英語ページをブラウズ
  2. 分からない単語に出会う
  3. その単語を検索バーにD&D
  4. 検索結果のページからマイリストに登録
  5. 分からなかった単語リストが出来て、しかもiKnowで復習できるので(゜Д゜)ウマー

となれる。

検索エンジンの切り替えが面倒だ、という場合は、コンテキストメニューから検索できるようにするContext Searchという拡張を入れれば幸せになれるかも知れない。

なおこのOpenSearchプラグインはIEでは使用不能。iKnowが対応していないのか検索結果ページを上手く表示できない。残念…。よってIEコンポーネントブラウザであるSleipnir、Lunascape等も同様。

JUL
10

SearchQueryGenerator for Lunascape

Published:2008-07-10 01:11:02 UTC

※SearchQueryGenerator for MarineToolbarはこちら

これは何?

ウェブページ上の検索フォームからLunascape用の検索クエリ文字列を生成するユーティリティです。検索エンジンリストを編集する助けとなればと思い作成しました。Lunascapeプラグインコンテストへ応募するために制作した作品の一つです。但しこの作品については、応募用件を満たさなかったために審査の対象となりませんでしたが…。

ダウンロード

SearchQueryGeneratorforLunascapeInstaller.zip

動作環境

win版IE6.0以上,LunascapeがインストールされているPC。

インストール方法

ダウンロードしたファイルを展開して、
SearchQueryGeneratorInstaller.msiを実行してください。
実行後、Lunascapeを再起動してください。

アンインストール方法

コントロールパネルのプログラムの追加と削除から削除してください。

使用方法

1.Lunascapeに追加したい検索エンジンの検索語入力欄上で右クリック。
2.「検索クエリを生成」をクリック。
image
3.検索ボタン毎に検索クエリ文字列のリンクが生成されるので、それをLunascapeの設定バーの検索エンジンツリーにドラッグ&ドロップ。
image
4.必要に応じて検索エンジン名をリネーム。

注意点

検索が行われる前にJavascriptで前処理を行っているFormの場合、正常に検索クエリが生成できない場合があります。その際はJavaScriptの実行を一旦OFFにしてから検索クエリの生成を行うと正常に生成できる場合があります。お試しください。

image

更新履歴

  • 2008/07/10 SharpLab.に公開場所を移転。
  • 2008/03/09 はてなダイアリーに公開場所を移転。
  • 2007/12/23 公開開始。

※Lunascapeでは、右下のアイコンからス・クリプトの実行を切り替えることが出来ます。