Mr.Wizard が休暇中でない限り、遍在性と全知性を備えているように見えるこの現象を打ち負かすことはかなり困難です。Mathematica と StackOverflow API を使って彼をしのぐにはどうすればよいでしょうか?
2 に答える
実際にはかなり簡単です。必要なものは次のとおりです。
監視タスクを定義します。
storedTitle = "";
mySOWatchTask =
CreateScheduledTask[
{
lastTitle =
"title" /. ("questions" /.
Import["http://api.stackoverflow.com/1.1/questions?key=\
QEpjCjsXYE6s_kZEkFr4Lw&page=1&pagesize=1&sort=creation&tagged=\
mathematica", "JSON"])[[1]];
If[lastTitle != storedTitle,
storedTitle = lastTitle;
EmitSound[Sound[SoundNote[]]];
MessageDialog["New question: " <> lastTitle]
];
},
60
];
そして、これを開始するには:
StartScheduledTask[mySOWatchTask];
次の方法で停止します。
StopScheduledTask[mySOWatchTask];
何が実行されているか見てください:
ScheduledTasks[] // Shallow
タスクを削除します。
RemoveScheduledTask[mySOWatchTask];
またはすべてのタスク:
RemoveScheduledTask[ScheduledTasks[]];
これは毎分SOをポーリングし(乱用と見なされない最小値), 新しい Mathematica の質問が到着するたびにダイアログボックスを表示して音を鳴らします.
これの素晴らしい点は、Mathematica 8 を使用していることです。Mr.Wizard にはそれが (まだ) ありません ;-)
SO API は頻繁にキャッシュされるため、応答が直接返されない可能性があることに注意してください。私もこれを広範囲にテストしていません。
編集
上記で使用したキー (app-id) は、この小さな Mathematica アプリケーションのみで使用することを意図していることに注意してください。別の用途に必要な場合は、こちらから迅速かつ簡単な手順で入手できます。1分もかかりませんでした。
これは、Sjoerd のソリューションのバリエーションです。
主な違いは、ポップアップ ダイアログの代わりにドッキング セルを使用することです。セルには、新しい投稿へのリンクと、ドッキングされたセルを以前の状態にクリアするボタンがあります。
もう 1 つの違いは、新しい投稿を決定するために、タイトルの代わりに質問 ID を使用することです。タイトルが時々編集されることを知っているので、その場合、これは新しい投稿としてトリガーされます。
storedTitle = "";
storedID = 0;
mySOWatchTask =
CreateScheduledTask[{lastTitle,
lastID} = {"title",
"question_id"} /. ("questions" /.
Import["http://api.stackoverflow.com/1.1/questions?key= \
QEpjCjsXYE6s_kZEkFr4Lw&page=1&pagesize=1&sort=creation&\
tagged= mathematica", "JSON"])[[1]];
If[lastID != storedID,
storedTitle = lastTitle;
storedID = lastID;
SetOptions[$FrontEndSession,
DockedCells ->
Cell[BoxData[
ToBoxes[Style[
With[{dock = Options[$FrontEndSession, DockedCells]},
Grid[{{Button[Style["\[CircleTimes]", 16],
SetOptions[$FrontEndSession, dock],
Appearance -> None], "New StackOverflow question: ",
Hyperlink[lastTitle,
"http://stackoverflow.com/questions/" <>
ToString[lastID]]}},
Alignment -> {{Left, Left, Left}},
ItemSize -> {{2, 14, Scaled[0.7]}}]],
FontFamily -> "Times"]]], "DockedCell",
Background -> Orange]]; EmitSound[Sound[SoundNote[]]]];, 60];