My Codeforces Journal เป็นส่วนขยายของ Chrome ที่ช่วยให้ผู้ใช้ Codeforces ติดตามปัญหาที่พวกเขาได้แก้ไขไปแล้ว เพียงคลิกเดียว ส่วนขยายจะจัดเก็บรายละเอียดของปัญหาปัจจุบันไว้ใน Google Spreadsheet ที่ผู้ใช้เชื่อมต่อไว้ ทำให้ง่ายต่อการรักษาบันทึกส่วนตัวของปัญหาที่ได้รับการแก้ไขเมื่อเวลาผ่านไป
ต้องการมีส่วนร่วมในส่วนขยาย chrom นี้หรือไม่? ไปที่ repo นี้:My Codeforces Journal Development
ที่เก็บข้อมูลในคลิกเดียว : บันทึกปัญหา Codeforces ปัจจุบันที่คุณแก้ไขได้ด้วยคลิกเดียว
การรวมสเปรดชีต : เชื่อมโยง Google Spreadsheet ของคุณเองเพื่อจัดเก็บและจัดการปัญหาในรูปแบบที่เหมาะกับคุณ
บันทึกรายละเอียดปัญหา : ส่วนขยายจัดเก็บข้อมูลสำคัญ เช่น URL ของปัญหา ชื่อปัญหา และระดับปัญหา
ดูวิดีโอ YouTube นี้: วิธีเริ่มต้นใช้งาน My Codeforces Journal
ก่อนที่คุณจะสามารถใช้ส่วนขยายได้ ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:
Google Spreadsheet ที่จะจัดเก็บปัญหาไว้
ติดตั้งส่วนขยาย Codeforces Journal Chrome แล้วและได้รับอนุญาตให้เข้าถึงสเปรดชีตของคุณ
อย่าลืมอ่านส่วนข้อผิดพลาดทั่วไปในส่วนท้ายของข้อความนี้
ดาวน์โหลดโฟลเดอร์ dist
จากลิงก์ต่อไปนี้: My Codeforces Journal
เปิด Chrome และไปที่ chrome://extensions/
เปิดใช้งาน โหมดนักพัฒนาซอฟต์แวร์ ที่มุมขวาบน
คลิกที่ Load unpacked และเลือกโฟลเดอร์ที่บันทึกโฟลเดอร์ dist
ตอนนี้ส่วนขยายควรปรากฏบนหน้าส่วนขยายของคุณแล้ว
ปักหมุดส่วนขยายบนแถบเครื่องมือเพื่อให้ใช้งานง่าย
สร้าง Google สเปรดชีตใหม่
ตั้งชื่อสเปรดชีตตามที่คุณต้องการ
คลิกที่เมนู "ส่วนขยาย" จากนั้นคลิกที่ "สคริปต์ของแอป"
คลิก "ไม่มีชื่อ" และเปลี่ยนชื่อไฟล์ App Script นี้ให้ตรงกับชื่อสเปรดชีตของคุณ
คัดลอกโค้ดด้านล่างและวางลงในโปรแกรมแก้ไข App Script และบันทึกโดยกดปุ่ม cmd + S
/ ctrl + S
คลิกที่ปุ่ม "ปรับใช้" ที่ด้านบนขวาและเลือก "ปรับใช้ใหม่"
เพิ่มคำอธิบายที่คุณเลือก ( อาจเหมือนกับชื่อ SpreadSheet ของคุณ )
ตั้งค่า "ใครมีสิทธิ์เข้าถึง" เป็น "ทุกคน"
คลิก "ปรับใช้" และให้สิทธิ์ App Script
เมื่อคลิกอนุญาต ให้เลือกบัญชี Google ที่คุณใช้สร้าง SpreadSheet จากนั้นคุณจะเห็นข้อความ "Google ยังไม่ได้ยืนยันแอปนี้"
คลิกที่ขั้นสูงที่ด้านล่างและ
คลิกที่ชื่อโปรเจ็กต์ AppScript ที่แสดง จากนั้นคลิกอนุญาต
ปรับใช้โปรเจ็กต์ AppScript อีกครั้งเพียงเพื่อให้แน่ใจว่าโปรเจ็กต์ของคุณได้รับการอนุมัติอย่างถูกต้อง
คัดลอก URL สคริปต์ เนื่องจากนี่คือ AppScript URL ของคุณ และบันทึกไว้เพื่อใช้ในภายหลังในส่วนขยาย
คลิกที่ปุ่ม "ปรับใช้" อีกครั้ง
เลือก "จัดการการปรับใช้" จากนั้นโมดอลจะปรากฏขึ้น
คลิกที่ปุ่ม "แก้ไข" ( ไอคอนปากกา ) และตอนนี้ปุ่ม "ปรับใช้" ที่ด้านล่างจะเปิดใช้งาน
คลิกที่ปรับใช้
หากมีข้อผิดพลาดเกี่ยวกับการอนุญาต คุณจะเห็นปุ่มอนุญาตอีกครั้ง ไม่เช่นนั้นระบบจะแสดงให้คุณคัดลอก URL ของสคริปต์
ฟังก์ชั่น doPost(e) { ลอง { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // แยกวิเคราะห์ข้อมูลคำขอที่เข้ามา var data; ลอง { data = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status"error", "message": รูปแบบ JSON ไม่ถูกต้อง"}').setMimeType(ContentService.MimeType.TEXT); } // ตรวจสอบว่าคำขอคือการตรวจสอบปัญหาที่มีอยู่หรือไม่ ถ้า (data.action === "checkProblem") { const problemsNameColumn = sheet .getRange("B2:B" + sheet.getLastRow()) .getValues() .แบน(); const problemsExists = problemsNameColumn.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({ สถานะ: "success", มีอยู่: problemsExists })).setMimeType(ContentService.MimeType.JSON); } // (ตรรกะ 'เริ่มต้น' และ 'addProblem' ที่มีอยู่ของคุณที่นี่) ถ้า (data.action === "เริ่มต้น") { var headers = ["Rating", "Problem", "Status", "Remarks", " วันที่", "ซื้อกลับบ้าน", "หัวข้อ"]; if (sheet.getLastRow() === 0 || sheet.getRange("A1").getValue() === "") { // ตรรกะการเริ่มต้นยังคงเป็น sheet.getRange("A1:G1") เหมือนเดิม ผสาน(); sheet.getRange("A1").setValue("แผ่นโค้ดฟอร์ซ"); sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); sheet.getRange("A2:G2").setValues([ส่วนหัว]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); sheet.setColumnWidth(1, 75); sheet.setColumnWidth(2, 185); sheet.setColumnWidth(3,155); sheet.setColumnWidth(4, 290); sheet.setColumnWidth(5, 80); sheet.setColumnWidth(6, 530); sheet.setColumnWidth(7, 190); sheet.getRange("A2:G1000").setVerticalAlignment("กลาง"); sheet.getRange("C2:C1000").setWrap(จริง); sheet.getRange("D2:D1000").setWrap(จริง); sheet.getRange("F2:F1000").setWrap(จริง); sheet.getRange("G2:G1000").setWrap(จริง); sheet.getRange("A2:A1000").setHorizontalAlignment("กลาง"); sheet.getRange("B2:B1000").setHorizontalAlignment("กลาง"); sheet.getRange("E2:E1000").setHorizontalAlignment("กลาง"); sheet.getRange("G2:G1000").setHorizontalAlignment("กลาง"); var newDate = วันที่ใหม่ (); sheet.getRange("E3:E1000").setNumberFormat("dd-mmm-yyyy"); sheet.insertRowBefore(3); sheet .getRange("A3:G3") .setValues([ [9999, "Problem9999Z", "Solved", "Could not Apply my intuition", newDate, "ฉันเข้าใจวิธีการเรียกซ้ำทำงานอย่างไร", "การเรียกซ้ำ, DP, กราฟ" ], ]); return ContentService.createTextOutput( '{"status"success"" message "ส่วนหัวที่เตรียมใช้งานด้วยการจัดรูปแบบ ความกว้างของคอลัมน์ที่กำหนดเอง และเพิ่มแถว"}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status"success", "message" "มีส่วนหัวอยู่แล้ว"}').setMimeType(ContentService.MimeType.TEXT); } } else if (data.action === "addProblem") { ลอง { const newRow = [data.problemRating, data.problemName, data.problemStatus, data.remarks, data.dateSolved, data.takeaways, data.problemTopics] ; const LastRow = sheet.getLastRow() + 1; sheet.appendRow(แถวใหม่); const problemsNameCell = sheet.getRange (lastRow, 2); ถ้า (data.problemUrl) { problemsNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status"success", "message": ข้อมูลปัญหาที่เพิ่มด้วยไฮเปอร์ลิงก์"}').setMimeType( ContentService.MimeType.JSON ); } catch (addError) { return ContentService.createTextOutput('{"status"error", "message": "Failed to add problems data."}').setMimeType( ContentService.MimeType.TEXT ); } } } catch (ข้อผิดพลาด) { return ContentService.createTextOutput('{"status"error", "message": " + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); -
เปิดหน้าปัญหา Codeforces
เมื่อคุณแก้ไขปัญหาแล้ว ให้คลิกที่ไอคอนส่วนขยาย My Codeforces Journal จากนั้นคลิกที่ "เพิ่มปัญหา"
กรอกแบบฟอร์มแล้วกด "ส่ง"
รายละเอียดปัญหาจะถูกบันทึกลงในสเปรดชีตที่เชื่อมต่อโดยอัตโนมัติ
ส่วนขยายนี้ต้องการการอนุญาตดังต่อไปนี้:
แท็บที่ใช้งานอยู่ : เพื่อเข้าถึง URL ของแท็บปัจจุบันเมื่อบันทึกปัญหา
ที่เก็บข้อมูล : เพื่อจัดเก็บรายละเอียดสเปรดชีตที่เชื่อมต่อของคุณ
การเขียนสคริปต์ : เพื่อเรียกใช้ JavaScript
สาเหตุ : โดยทั่วไปจะเกิดขึ้นหากมีการส่ง Codeforces ID ที่ไม่มีอยู่
วิธีแก้ไข : ตรวจสอบ ID อีกครั้งและรับรองว่าถูกต้อง
สาเหตุ : โดยทั่วไปข้อผิดพลาดนี้หมายถึง AppScript URL ที่ระบุไม่ถูกต้อง
วิธีแก้ไข : ตรวจสอบ URL และใช้ AppScript URL ที่ถูกต้อง
เคล็ดลับเพิ่มเติม : ข้อผิดพลาดนี้อาจปรากฏขึ้นหากโครงการ AppScript ของคุณไม่ได้รับอนุญาตอย่างถูกต้อง เพื่อให้แน่ใจว่าได้รับอนุญาตอย่างถูกต้อง:
ในระหว่างการตั้งค่าสเปรดชีต ให้ปรับใช้ AppScript Project ของคุณสองครั้ง การปรับใช้ครั้งที่สองจะช่วยยืนยันว่า AppScript Project ได้รับอนุญาตโดยสมบูรณ์
สาเหตุ : สิ่งนี้จะเกิดขึ้นหากปัญหาที่คุณพยายามเพิ่มไม่ได้รับการแก้ไขภายในการส่ง 40 ครั้งล่าสุดใน Codeforces
วิธีแก้ไข : ตรวจสอบให้แน่ใจว่าคุณได้แก้ไขปัญหาเมื่อเร็วๆ นี้ ถ้าไม่ ให้ลองใช้ Codeforces ก่อนที่จะเพิ่มลงในสเปรดชีต