Если Mr.Wizard не находится в отпуске, довольно сложно победить это явление, которое кажется одаренным вездесущим и всеведением. Как мы можем превзойти его с помощью Mathematica и API StackOverflow?
Наблюдение за новыми вопросами Mathematica с использованием Mathematica и API StackOverflow
Ответ 1
Здесь вариация на решение Сджерда.
Основное отличие заключается в использовании состыкованной ячейки вместо всплывающего диалогового окна. Ячейка имеет ссылку на новое сообщение, а также кнопку, которая очистит закрепленную ячейку до предыдущего состояния.
Другое отличие заключается в использовании идентификатора вопроса вместо названия для определения новых сообщений. Я знаю, что названия иногда редактируются, поэтому этот триггер как новый пост в этом случае.
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];
Ответ 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. Если вам нужен один для другого приложения, вы можете получить его в быстрой и безболезненной процедуре здесь. Мне потребовалось меньше минуты.