ਮੈਂ SaaS ਤੋਂ ਬਿਨਾਂ Bluesky ਪੋਸਟਾਂ ਕਿਵੇਂ ਸ਼ੈਡਿਊਲ ਕਰਦਾ ਹਾਂ
ਮੈਂ GitHub Actions ਅਤੇ ਇੱਕ JSONL ਫਾਈਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹਰ ਰੋਜ਼ ਤਿੰਨ Bluesky ਪੋਸਟਾਂ ਸ਼ੈਡਿਊਲ ਕਰਦਾ ਹਾਂ। ਮੈਂ ਕਿਸੇ ਬਾਹਰੀ ਸ਼ੈਡਿਊਲਿੰਗ ਸਰਵਿਸ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ।
ਇਹ ਸਿਸਟਮ ਇੱਕ ਸਿੰਗਲ ਫਾਈਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੰਮ ਕਰਦਾ ਹੈ: content/bluesky-queue.jsonl।
ਇਸ ਫਾਈਲ ਦੀ ਹਰ ਲਾਈਨ ਇੱਕ JSON ਆਬਜੈਕਟ ਹੈ।
- ਅਣ-ਪੋਸਟ ਕੀਤੀਆਂ ਲਾਈਨਾਂ ਵਿੱਚ ਸਿਰਫ਼ ਟੈਕਸਟ ਹੁੰਦਾ ਹੈ।
- ਪੋਸਟ ਕੀਤੀਆਂ ਲਾਈਨਾਂ ਵਿੱਚ ਇੱਕ ਟਾਈਮਸਟੈਂਪ ਅਤੇ ਇੱਕ ਪੋਸਟ URI ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ।
ਸਕ੍ਰਿਪਟ ਫਾਈਲ ਨੂੰ ਉੱਪਰ ਤੋਂ ਹੇਠਾਂ ਤੱਕ ਪੜ੍ਹਦੀ ਹੈ। ਇਹ ਟਾਈਮਸਟੈਂਪ ਤੋਂ ਬਿਨਾਂ ਪਹਿਲੀ ਲਾਈਨ ਲੱਭਦੀ ਹੈ, ਉਸਨੂੰ ਪੋਸਟ ਕਰਦੀ ਹੈ, ਅਤੇ ਫਿਰ ਉਸ ਲਾਈਨ ਨੂੰ ਅਪਡੇਟ ਕਰਦੀ ਹੈ।
ਮੈਂ ਡਾਟਾਬੇਸ ਦੀ ਬਜਾਏ JSONL ਦੀ ਵਰਤੋਂ ਕਿਉਂ ਕਰਦਾ ਹਾਂ:
- Git ਵਿੱਚ ਬਦਲਾਅ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨਾ ਆਸਾਨ ਹੈ।
- ਕੋਈ ਵੀ CI ਜੌਬ ਫਾਈਲ ਵਿੱਚ ਇੱਕ ਨਵੀਂ ਲਾਈਨ ਜੋੜ ਸਕਦੀ ਹੈ।
- ਇਹ ਸੈੱਟਅੱਪ ਨੂੰ ਸਰਲ ਅਤੇ ਮੁਫ਼ਤ ਰੱਖਦਾ ਹੈ।
Handling Bluesky API Requirements
Bluesky ਨੂੰ ਲਿੰਕਾਂ ਅਤੇ ਹੈਸ਼ਟੈਗਾਂ ਲਈ "facets" ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਤੁਸੀਂ ਸਿਰਫ਼ ਟੈਕਸਟ ਨਹੀਂ ਭੇਜ ਸਕਦੇ। ਤੁਹਾਨੂੰ ਇਹਨਾਂ ਐਲੀਮੈਂਟਸ ਲਈ ਸਹੀ ਬਾਈਟ ਪੋਜੀਸ਼ਨਾਂ (byte positions) ਪ੍ਰਦਾਨ ਕਰਨੀਆਂ ਪੈਣਗੀਆਂ।
ਮੈਂ ਇਹਨਾਂ ਪੋਜੀਸ਼ਨਾਂ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ ਇੱਕ ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਮੈਂ UTF-8 ਬਾਈਟ ਆਫਸੈੱਟ (byte offsets) ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ TextEncoder ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਇਹ ਇਮੋਜੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। ਕੈਰੇਕਟਰ (Characters) ਅਤੇ ਬਾਈਟ (bytes) ਇੱਕੋ ਜਿਹੇ ਨਹੀਂ ਹੁੰਦੇ।
Optimizing GitHub Actions
ਜੇਕਰ ਤੁਸੀਂ ਘੰਟੇ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਜੌਬਾਂ ਸ਼ੈਡਿਊਲ ਕਰਦੇ ਹੋ, ਤਾਂ GitHub Actions ਅਕਸਰ ਦੇਰੀ ਨਾਲ ਚੱਲਦਾ ਹੈ। ਇਸ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ, ਮੈਂ ਇੱਕ off-minute offset ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। 00:00 ਦੀ ਬਜਾਏ, ਮੈਂ 23:37 ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਇਸ ਨਾਲ ਦੇਰੀ ਘੱਟ ਜਾਂਦੀ ਹੈ।
ਮੈਂ ਪੋਸਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ 0 ਤੋਂ 5 ਮਿੰਟ ਦੇ ਵਿਚਕਾਰ ਇੱਕ ਰੈਂਡਮ ਡਿਲੇਅ (random delay) ਵੀ ਜੋੜਦਾ ਹਾਂ। ਇਹ ਪੋਸਟਿੰਗ ਪੈਟਰਨ ਨੂੰ ਵਧੇਰੇ ਮਨੁੱਖੀ ਦਿਖਾਉਂਦਾ ਹੈ। ਇਹ ਉਸ ਸਹੀ ਮਸ਼ੀਨੀ ਸਮੇਂ ਤੋਂ ਬਚਦਾ ਹੈ ਜਿਸ ਨੂੰ ਕੁਝ ਐਲਗੋਰਿਦਮ ਘੱਟ ਮਹੱਤਵ ਦਿੰਦੇ ਹਨ।
Preventing Infinite Loops
ਜਦੋਂ ਸਕ੍ਰਿਪਟ ਕਿਊ (queue) ਨੂੰ ਅਪਡੇਟ ਕਰਦੀ ਹੈ, ਤਾਂ ਇਹ ਬਦਲਾਅ ਨੂੰ ਰੀਪੋਜ਼ਟਰੀ ਵਿੱਚ ਕਮਿਟ ਕਰ ਦਿੰਦੀ ਹੈ। ਇਸ ਨਾਲ ਵਰਕਫਲੋ (workflow) ਦੁਬਾਰਾ ਚਾਲੂ ਹੋ ਸਕਦਾ ਹੈ।
ਮੈਂ ਇਸ ਨੂੰ ਇੱਕ commit message guard ਨਾਲ ਹੱਲ ਕਰਦਾ ਹਾਂ:
- ਸਕ੍ਰਿਪਟ ਕਮਿਟ ਮੈਸੇਜ ਵਿੱਚ [skip bluesky-queue] ਜੋੜ ਦਿੰਦੀ ਹੈ।
- ਵਰਕਫਲੋ ਇਸ ਟੈਗ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ।
- ਜੇਕਰ ਟੈਗ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਵਰਕਫਲੋ ਨਹੀਂ ਚੱਲਦਾ।
ਇਹ ਸਿਸਟਮ AI-curated ਸਾਈਟਾਂ ਦੇ ਲੰਬੇ ਸਮੇਂ ਦੇ ਪ੍ਰਯੋਗ ਦਾ ਹਿੱਸਾ ਹੈ। ਇਹ ਸਰਲ, ਸਸਤਾ ਅਤੇ ਭਰੋਸੇਮੰਦ ਰਹਿੰਦਾ ਹੈ।
