2011-06-28 27 views
11

Trừ khi Mr.Wizard đang đi nghỉ, rất khó để đánh bại hiện tượng này mà dường như có năng khiếu với sự toàn năng và toàn trí. Làm thế nào chúng ta có thể vượt qua anh ta bằng cách sử dụng Mathematica và API StackOverflow?Xem các câu hỏi mới về Toán học bằng cách sử dụng Mathematica và StackOverflow API

+0

Tìm một con cá lớn hơn. Outdoing Leonid có thể yêu cầu AI vượt qua bài kiểm tra Turing. :-) –

+2

@ Mr.Wizard Tôi hầu như luôn luôn có thể xác định bài viết của Leonid như lâu trước khi tôi nhìn thấy thẻ của anh ấy. Tôi nghĩ rằng heuristic vô thức của tôi là Nếu [PostLength> 1 trang, Poster == Leonid], điều đó và có lẽ rất nhiều công cụ CS-ish (đáng kinh ngạc anh ta chỉ nói với bạn anh ta không có một nền CS). –

Trả lời

15

Đây là biến thể về giải pháp của Sjoerd.

Sự khác biệt chính là sử dụng ô được gắn đế thay vì hộp thoại bật lên. Ô này có liên kết đến bài đăng mới, cũng như nút sẽ xóa ô được gắn đế với trạng thái trước đó.

Sự khác biệt khác là sử dụng ID câu hỏi thay vì tiêu đề để xác định bài đăng mới. Tôi biết rằng tiêu đề được chỉnh sửa đôi khi, do đó, kích hoạt này như là một bài mới trong trường hợp đó.

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

+0

+1 Thay đổi tuyệt vời. Tôi thích bit với cài đặt 'DockedCell' và cách bạn khôi phục cài đặt đó về giá trị ban đầu. Đối với câu hỏi và ứng dụng này, tôi lấy cảm hứng từ blog 'Photo booth' của [Yu-Sung Chang] [1]. Trước đây, tôi nghĩ về việc đánh giá theo thời gian là không có gì hơn cron nhiệm vụ cho công việc hàng loạt, nhưng tôi đã học được rằng nó làm một công việc tuyệt vời trong GUI và các ứng dụng như thế này. [1]: http://blog.wolfram.com/2011/06/23/mission-mathematica-making-a-photo-booth-app-in-three-steps/#more-6374 –

+2

Tôi nghĩ rằng các ô được gắn đế là không được sử dụng, có lẽ vì có một chút nỗ lực liên quan đến việc tạo ra một. Tôi có một số bản sao của Mathematica được cài đặt, và thường là ít nhất hai mở, và sử dụng một tế bào docked tùy chỉnh cho tôi biết máy tính xách tay nào được kết nối với phiên bản nào. Vì lý do này, điều quan trọng là tôi phải có một cách để trở lại tế bào neo đậu bình thường của mình. –

+0

Tôi vừa xem bản chỉnh sửa này. Nó trông đẹp. Nó nhắc nhở tôi về các thông báo mà bản thân SO đưa ra cho các câu trả lời mới vv ... (Ngoài ra: Đối với một khóa học tôi đã dạy, tôi đã sử dụng một ô được gắn trong mẫu chỉ định. Nó chứa thông tin về bài tập, nút câu hỏi tiếp theo và gửi qua nút FTP) – Simon

15

Khá dễ thực sự. Tất cả những gì bạn cần là như sau.

Xác định một nhiệm vụ theo dõi:

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

Và để bắt đầu này:

StartScheduledTask[mySOWatchTask]; 

Dừng lại với:

StopScheduledTask[mySOWatchTask]; 

Hãy nhìn những gì đang chạy:

ScheduledTasks[] // Shallow 

Hủy bỏ nhiệm vụ:

RemoveScheduledTask[mySOWatchTask]; 

hoặc tất cả các nhiệm vụ:

RemoveScheduledTask[ScheduledTasks[]]; 

các cuộc thăm dò này SO mỗi phút (the minimum that is not seen as abusive), và hiển thị một hộp thoại và đóng một âm thanh bất cứ khi nào một câu hỏi Mathematica mới đến .

enter image description here

Vẻ đẹp của việc này là: nó sử dụng Mathematica 8, và tất cả chúng ta đều biết Mr.Wizard không có đó (chưa) ;-)

Lưu ý rằng API SO đang được lưu trữ rất nhiều, do đó, phản ứng có thể không đến trực tiếp. Tôi cũng chưa thử nghiệm rộng rãi.

EDIT
Xin lưu ý rằng chìa khóa (app-id) được sử dụng trên được dự định sẽ được sử dụng bởi chỉ ứng dụng Mathematica nhỏ này. Nếu bạn cần một ứng dụng khác nhau, bạn có thể tự mình làm một thủ tục nhanh chóng và không đau đớn here. Tôi mất chưa đầy một phút.

+0

Chìa khóa là ai?:) – bzlm

+1

@bzlm Nó thuộc về chương trình trên. Tên 'khóa' là từ sai. Nó thực sự là một id ứng dụng cho số liệu thống kê sử dụng –

+2

@Sjoerd Congrats trên 5K của bạn! ... –

Các vấn đề liên quan