【问题标题】:Watching for new Mathematica questions using Mathematica and the StackOverflow API使用 Mathematica 和 StackOverflow API 观察新的 Mathematica 问题
【发布时间】:2011-06-28 11:25:59
【问题描述】:

除非Mr.Wizard 正在度假,否则很难击败这种似乎具有无所不在和无所不知的现象。我们如何使用 Mathematica 和 StackOverflow API 超越他?

【问题讨论】:

  • 找一条更大的鱼。超越 Leonid 可能需要通过图灵测试的 AI。 :-)
  • @Mr.Wizard 在我看到他的标签之前,我几乎总是能够识别出他的帖子。我认为我的无意识启发式是 If[PostLength>1 page, Poster==Leonid],可能还有很多 CS 类的东西(令人惊讶的是,他刚刚告诉你他没有 CS 背景)。

标签: wolfram-mathematica stackexchange-api


【解决方案1】:

这是 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];

【讨论】:

  • +1 不错的变化。我喜欢带有DockedCell 设置的位以及如何将其恢复为原始值。对于这个问题和应用程序,我的灵感来自 [Yu-Sung Chang 的“照片亭”博客][1]。以前,我认为定时评估只不过是批处理作业的 cron 任务,但我了解到它在 GUI 和类似的应用程序中做得非常好。 [1]:blog.wolfram.com/2011/06/23/…
  • 我认为停靠的单元格未得到充分利用,可能是因为创建一个单元格需要付出一些努力。我安装了多个 Mathematica 副本,通常至少打开两个副本,并使用自定义停靠单元格告诉我哪个笔记本连接到哪个版本。出于这个原因,有办法回到我正常的停靠单元对我来说很重要。
  • 我刚刚看到了这个编辑。看起来很好。它让我想起了 SO 本身为新答案等提供的通知......(旁白:对于我教授的课程,我在作业模板中使用了一个停靠单元格。它包含有关作业的信息、下一个问题按钮和提交通过 FTP 按钮)
【解决方案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 (the minimum that is not seen as abusive),并在出现新的 Mathematica 问题时显示一个对话框并播放声音。

它的美妙之处在于:它使用 Mathematica 8,我们都知道 Mr.Wizard 还没有那个(还);-)

请注意,SO API 被大量缓存,因此可能不会直接响应。我也没有对此进行广泛的测试。

编辑
请注意,上面使用的密钥 (app-id) 仅供这个小型 Mathematica 应用程序使用。如果您需要一个用于不同的应用程序,您可以自己通过一个快速而轻松的过程获得一个here。我花了不到一分钟的时间。

【讨论】:

  • @bzlm 属于上述程序。 “钥匙”这个名字用词不当。它实际上是一个用于使用统计的 app-id
  • 我将发布另一个问题:“如何为@Mr ... err Mma 7 执行此操作?”
  • 我昨天在讨论后写了一些非常相似的东西,但我想你对缓存的看法是对的:它没有告诉我这个问题!哦,好吧...
  • @Sjoerd 如果可以的话,我会不止一次投票。但是你可以利用它来发挥你的优势,而不仅仅是 w.r.t. @先生。既然你发表了这篇文章,我们又是平等的 :) 但说真的,这证实了我在过去的一次讨论中所说的话:在当前 SO 模型的刺激下,急于成为第一个是一种人工制品,反映了它的弱点- 它不鼓励适当程度的协作。
  • @Leonid 以防万一您不知道,“西方最快的枪”问题已被广泛讨论。参见例如meta.stackoverflow.com/search?q=fastest+gun+in+the+west
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2011-09-03
相关资源
最近更新 更多