SaaS ಇಲ್ಲದೆ ನಾನು Bluesky ಪೋಸ್ಟ್ಗಳನ್ನು ಹೇಗೆ ಶೆಡ್ಯೂಲ್ ಮಾಡುತ್ತೇನೆ
ನಾನು GitHub Actions ಮತ್ತು JSONL ಫೈಲ್ ಬಳಸಿ ಪ್ರತಿದಿನ ಮೂರು Bluesky ಪೋಸ್ಟ್ಗಳನ್ನು ಶೆಡ್ಯೂಲ್ ಮಾಡುತ್ತೇನೆ. ನಾನು ಯಾವುದೇ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲಿಂಗ್ ಸೇವೆಯನ್ನು ಬಳಸುವುದಿಲ್ಲ.
ಈ ವ್ಯವಸ್ಥೆಯು ಕೇವಲ ಒಂದು ಫೈಲ್ ಮೂಲಕ ಕೆಲಸ ಮಾಡುತ್ತದೆ: content/bluesky-queue.jsonl.
ಈ ಫೈಲ್ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಸಾಲು ಒಂದು JSON ಆಬ್ಜೆಕ್ಟ್ ಆಗಿದೆ.
- ಪೋಸ್ಟ್ ಮಾಡದ ಸಾಲುಗಳು ಕೇವಲ ಪಠ್ಯವನ್ನು (text) ಮಾತ್ರ ಹೊಂದಿರುತ್ತವೆ.
- ಪೋಸ್ಟ್ ಮಾಡಿದ ಸಾಲುಗಳು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ (timestamp) ಮತ್ತು ಪೋಸ್ಟ್ URI ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ.
ಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ ಅನ್ನು ಮೇಲಿನಿಂದ ಕೆಳಕ್ಕೆ ಓದುತ್ತದೆ. ಇದು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಇಲ್ಲದ ಮೊದಲ ಸಾಲನ್ನು ಹುಡುಕಿ, ಅದನ್ನು ಪೋಸ್ಟ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಆ ಸಾಲನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುತ್ತದೆ.
ಡೇಟಾಬೇಸ್ಗೆ ಬದಲಾಗಿ ನಾನು ಏಕೆ JSONL ಬಳಸುತ್ತೇನೆ:
- Git ನಲ್ಲಿ ಬದಲಾವಣೆಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದು ಸುಲಭ.
- ಯಾವುದೇ CI ಕೆಲಸವು (job) ಫೈಲ್ಗೆ ಹೊಸ ಸಾಲನ್ನು ಸೇರಿಸಬಹುದು.
- ಇದು ಸೆಟಪ್ ಅನ್ನು ಸರಳವಾಗಿ ಮತ್ತು ಉಚಿತವಾಗಿಡುತ್ತದೆ.
Bluesky API ಅವಶ್ಯಕತೆಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು
ಲಿಂಕ್ಗಳು ಮತ್ತು ಹ್ಯಾಶ್ಟ್ಯಾಗ್ಗಳಿಗಾಗಿ Bluesky "facets" ಅನ್ನು ಬಯಸುತ್ತದೆ. ನೀವು ಕೇವಲ ಪಠ್ಯವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಈ ಅಂಶಗಳಿಗಾಗಿ ನಿಖರವಾದ ಬೈಟ್ ಸ್ಥಾನಗಳನ್ನು (byte positions) ಒದಗಿಸಬೇಕು.
ಈ ಸ್ಥಾನಗಳನ್ನು ಲೆಕ್ಕಹಾಕಲು ನಾನು ಸ್ಕ್ರಿಪ್ಟ್ ಬಳಸುತ್ತೇನೆ. UTF-8 ಬೈಟ್ ಆಫ್ಸೆಟ್ಗಳನ್ನು (byte offsets) ಪಡೆಯಲು ನಾನು TextEncoder ಬಳಸುತ್ತೇನೆ. ಇದು ನೀವು ಎಮೋಜಿಗಳನ್ನು ಬಳಸಿದಾಗ ಆಗುವ ದೋಷಗಳನ್ನು ತಡೆಯುತ್ತದೆ. ಅಕ್ಷರಗಳು (characters) ಮತ್ತು ಬೈಟ್ಗಳು ಒಂದೇ ಅಲ್ಲ.
GitHub Actions ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು
ನೀವು ಕೆಲಸಗಳನ್ನು (jobs) ಗಂಟೆಯ ಆರಂಭದಲ್ಲಿ ಶೆಡ್ಯೂಲ್ ಮಾಡಿದರೆ, GitHub Actions ಹೆಚ್ಚಾಗಿ ತಡವಾಗಿ ಚಲಿಸುತ್ತದೆ. ಇದನ್ನು ಸರಿಪಡಿಸಲು, ನಾನು 'off-minute offset' ಬಳಸುತ್ತೇನೆ. 00:00 ಬದಲಿಗೆ, ನಾನು 23:37 ಬಳಸುತ್ತೇನೆ. ಇದು ವಿಳಂಬವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
ಪೋಸ್ಟ್ ಮಾಡುವ ಮೊದಲು ನಾನು 0 ಮತ್ತು 5 ನಿಮಿಷಗಳ ನಡುವೆ ಯಾದೃಚ್ಛಿಕ ವಿಳಂಬವನ್ನು (random delay) ಕೂಡ ಸೇರಿಸುತ್ತೇನೆ. ಇದು ಪೋಸ್ಟಿಂಗ್ ಮಾದರಿಯನ್ನು ಹೆಚ್ಚು ಮಾನವೀಯವಾಗಿ ಕಾಣುವಂತೆ ಮಾಡುತ್ತದೆ. ಇದು ಕೆಲವು ಅಲ್ಗಾರಿದಮ್ಗಳು ಕಡೆಗಣಿಸುವ ನಿಖರವಾದ ಯಾಂತ್ರಿಕ ಸಮಯವನ್ನು (machine timing) ತಪ್ಪಿಸುತ್ತದೆ.
ಅನಂತ ಲೂಪ್ಗಳನ್ನು (Infinite Loops) ತಡೆಯುವುದು
ಸ್ಕ್ರಿಪ್ಟ್ ಕ್ಯೂ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿದಾಗ, ಅದು ಬದಲಾವಣೆಯನ್ನು ರಿಪೊಸಿಟರಿಗೆ (repository) ಕಮಿಟ್ ಮಾಡುತ್ತದೆ. ಇದು ವರ್ಕ್ಫ್ಲೋ ಅನ್ನು ಮತ್ತೆ ಪ್ರಾರಂಭಿಸಬಹುದು.
ನಾನು ಇದನ್ನು ಕಮಿಟ್ ಮೆಸೇಜ್ ಗಾರ್ಡ್ ಮೂಲಕ ಪರಿಹರಿಸುತ್ತೇನೆ:
- ಸ್ಕ್ರಿಪ್ಟ್ ಕಮಿಟ್ ಮೆಸೇಜ್ಗೆ
[skip bluesky-queue]ಅನ್ನು ಸೇರಿಸುತ್ತದೆ. - ವರ್ಕ್ಫ್ಲೋ ಈ ಟ್ಯಾಗ್ ಅನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ.
- ಒಂದು ವೇಳೆ ಟ್ಯಾಗ್ ಇದ್ದರೆ, ವರ್ಕ್ಫ್ಲೋ ಚಲಿಸುವುದಿಲ್ಲ.
ಈ ವ್ಯವಸ್ಥೆಯು AI-curated ಸೈಟ್ಗಳೊಂದಿಗೆ ನಡೆಯುತ್ತಿರುವ ದೀರ್ಘಾವಧಿಯ ಪ್ರಯೋಗದ ಭಾಗವಾಗಿದೆ. ಇದು ಸರಳ, ಅಗ್ಗ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿದೆ.
ಮೂಲ (Source): https://dev.to/morinaga/how-i-schedule-three-daily-bluesky-posts-from-a-jsonl-queue-without-an-external-service-mno
