Pytanie Oglądanie nowych pytań Mathematica za pomocą Mathematica i StackOverflow API


Dopóki Mr.Wizard nie jest na wakacjach, trudno jest pokonać to zjawisko, które zdaje się być obdarzone wszechobecnością i wszechwiedzą. Jak możemy prześcignąć go używając Mathematica i API StackOverflow?


11
2018-06-28 11:25


pochodzenie


Znajdź większą rybę. Wyprzedzający Leonid może wymagać sztucznej inteligencji, która przejdzie test Turinga. :-) - Mr.Wizard
@ Mr.Wizard Prawie zawsze jestem w stanie zidentyfikować posty Leonida tak długo, jak widzę jego tag. Myślę, że moja nieświadoma heurystyka to: [PostLength> 1 page, Poster == Leonid], to i prawdopodobnie dużo CS-owskich rzeczy (zadziwiająco on właśnie powiedział ci, że nie ma tła CS). - Sjoerd C. de Vries


Odpowiedzi:


Oto odmiana rozwiązania Sjoerd.

Główną różnicą jest użycie zadokowanej komórki zamiast wyskakującego okna dialogowego. Komórka ma link do nowego posta, a także przycisk, który wyczyści zadokowaną komórkę do poprzedniego stanu.

Inną różnicą jest użycie identyfikatora pytania zamiast tytułu do określania nowych postów. Wiem, że czasami tytuły są edytowane, więc ten czynnik uruchamiający jest nowym postem w tym przypadku.

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

enter image description here


15
2018-06-28 15:55



+1 Niezła zmiana. Lubię ten kawałek z DockedCell ustawienie i sposób przywrócenia oryginalnych wartości. Do tego pytania i aplikacji czerpałem inspiracje z bloga ["Yu-Sung Chang"] "Photo Booth" [1]. Wcześniej myślałem o ocenie czasowej jako o zadaniach cron dla zadań wsadowych, ale nauczyłem się, że działa to fantastycznie w interfejsach graficznych i aplikacjach takich jak ten. [1]: blog.wolfram.com/2011/06/23/... - Sjoerd C. de Vries
Myślę, że zadokowane komórki są niedostatecznie wykorzystywane, prawdopodobnie dlatego, że potrzeba trochę wysiłku, aby je utworzyć. Mam zainstalowane kilka egzemplarzy programu Mathematica i zwykle co najmniej dwa otwarte, a także użyj niestandardowej zadokowanej komórki, która informuje, który notebook jest podłączony do której wersji. Z tego powodu ważne było dla mnie, aby mieć sposób na powrót do mojej normalnej zadokowanej komórki. - Brett Champion
Właśnie zobaczyłem tę zmianę. To wygląda ładnie. Przypomina mi powiadomienia, które sam SO daje dla nowych odpowiedzi itp. (Poza: Dla kursu, którego uczyłem, użyłem zadokowanej komórki w szablonie przydziału zawierającym informacje o zadaniu, następnym pytaniu i przesłaniu za pomocą przycisku FTP) - Simon


Całkiem łatwe w rzeczywistości. Wszystko czego potrzebujesz to:

Zdefiniuj zadanie oglądania:

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

I na początek:

StartScheduledTask[mySOWatchTask];

Zatrzymaj to za pomocą:

 StopScheduledTask[mySOWatchTask];

Zobacz, co działa:

 ScheduledTasks[] // Shallow

Usuń zadanie:

 RemoveScheduledTask[mySOWatchTask];

lub wszystkie zadania:

RemoveScheduledTask[ScheduledTasks[]];

To sonduje SO co minutę (minimum, które nie jest postrzegane jako nadużycie) i wyświetla okno dialogowe oraz odtwarza dźwięk po pojawieniu się nowego pytania Mathematica.

enter image description here

Piękno tego: używa Mathematica 8 i wszyscy wiemy, że Mr.Wizard tego nie ma (jeszcze) ;-)

Zwróć uwagę, że interfejs SO API jest buforowany w znacznym stopniu, więc odpowiedź może nie nadejść bezpośrednio. Również nie testowałem tego w znacznym stopniu.

EDYTOWAĆ
Pamiętaj, że klucz (app-id) użyty powyżej jest przeznaczony do użycia tylko w tej małej aplikacji Mathematica. Jeśli potrzebujesz jednego dla różne wniosek można uzyskać samemu w szybkiej i bezbolesnej procedurze tutaj. Zajęło mi to mniej niż minutę.


15
2018-06-28 11:33



@bzlm Należy do powyższego programu. Nazwa "klucz" jest mylącą nazwą. W rzeczywistości jest to identyfikator aplikacji dla statystyk użytkowania - Sjoerd C. de Vries
@Sjoerd Gratulacje na Twoim 5K! ... - Dr. belisarius
Zadam kolejne pytanie: "Jak to zrobić dla @Mr ... err Mma 7?" - Dr. belisarius
@Sjoerd Chciałbym zagłosować na to więcej niż raz, gdybym mógł. Ale mógłbyś to wykorzystać na swoją korzyść nie tylko w.r.t. @Pan. Teraz, kiedy opublikowaliście to, wszyscy jesteśmy równi :) Ale poważnie, to potwierdza to, co mówiłem podczas jednej z naszych poprzednich dyskusji: pęd do bycia pierwszym, stymulowany przez obecny model SO, jest artefaktem i odzwierciedla jego słabość - nie zachęca do współpracy we właściwym zakresie. - Leonid Shifrin
@Leonid Na wypadek, gdybyś nie był świadomy, problem "najszybszego pistoletu na Zachodzie" został szeroko omówiony. Zobacz na przykład meta.stackoverflow.com/search?q=fastest+gun+in+the+west - Dr. belisarius