除非Mr.Wizard正在度假,否则很难打败这个现象,他似乎天生具有无所不在和无所不知的特点。我们如何利用Mathematica和StackOverflow API来超越他呢?
除非Mr.Wizard正在度假,否则很难打败这个现象,他似乎天生具有无所不在和无所不知的特点。我们如何利用Mathematica和StackOverflow API来超越他呢?
其实很简单。你所需要的是以下内容。
定义一个监视任务:
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应用程序使用。如果您需要另一个应用程序的密钥,您可以在这里快速且轻松地获得。我用了不到一分钟。
这是对Sjoerd解决方案的一种变体。
主要的区别在于使用了停靠单元格而不是弹出式对话框。该单元格具有指向新帖子的链接,以及一个清除停靠单元格并恢复到先前状态的按钮。
另一个区别是使用问题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];
DockedCell
设置的部分,以及您如何将其恢复到原始值。对于这个问题和应用程序,我从[张宇松的“照相亭”博客][1]中获得了灵感。以前,我认为定时评估只是批处理作业的cron任务,但我学到了它在GUI和像这样的应用程序中表现出色。 [1]: http://blog.wolfram.com/2011/06/23/mission-mathematica-making-a-photo-booth-app-in-three-steps/#more-6374 - Sjoerd C. de Vries