ਵੱਡੇ ਪੱਧਰ 'ਤੇ ਗੱਲਬਾਤ ਦੇ ਰੌਅ (raw) ਲੌਗ ਪੜ੍ਹਨਾ ਅਸੰਭਵ ਹੋ ਜਾਂਦੇ ਹਨ। ਕੁਝ ਮਹੀਨਿਆਂ ਦੇ ਭਾਰੀ ਇਸਤੇਮਾਲ ਤੋਂ ਬਾਅਦ, ਤੁਸੀਂ ਲੱਖਾਂ ਲਾਈਨਾਂ ਦੀ ਆਪਸੀ ਗੱਲਬਾਤ ਦੇ ਸਾਹਮਣੇ ਖੜ੍ਹੇ ਹੁੰਦੇ ਹੋ। ਉਹਨਾਂ ਨੂੰ ਲੱਭਣਾ ਹੌਲੀ ਹੈ; ਉਹਨਾਂ ਨੂੰ ਪੜ੍ਹਨਾ ਅਸੰਭਵ ਹੈ। ਇਸ ਦੇ ਉਲਟ, ਇੱਕ Obsidian ਵੌਲਟ ਤੁਹਾਨੂੰ ਇੱਕ ਸੰਰਚਿਤ ਲੰਬੇ ਸਮੇਂ ਦੀ ਯਾਦਦਾਸ਼ਤ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ: ਦੋ-ਪੱਖੀ ਲਿੰਕਸ (bi-directional links), ਟੈਗਸ, ਅਤੇ ਇੱਕ ਗ੍ਰਾਫ ਵਿਊ ਜੋ ਸਬੰਧਾਂ ਨੂੰ ਉਜਾਗਰ ਕਰਦਾ ਹੈ। ਦੋਵਾਂ ਵਿਚਕਾਰ ਦਾ ਪਾੜਾ ਸਪੱਸ਼ਟ ਹੈ। ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਆਟੋਮੇਸ਼ਨ ਦੀ ਲੋੜ ਹੈ।
ਮੈਂ ਇੱਕ ਛੋਟੀ ਪਾਈਪਲਾਈਨ ਬਣਾਈ ਹੈ ਜੋ ਹਰ ਰਾਤ ਇਸ ਪਾੜੇ ਨੂੰ ਭਰਦੀ ਹੈ। ਇਹ ਬਿਨਾਂ ਕਿਸੇ ਮੈਨੂਅਲ ਦਖਲਅੰਦਾਜ਼ੀ ਦੇ ਤਿੰਨ ਕਦਮਾਂ ਨੂੰ ਲੜੀਵਾਰ ਚਲਾਉਂਦੀ ਹੈ। ਪਹਿਲਾਂ, ਇਹ ਤਾਜ਼ਾ ਗੱਲਬਾਤ ਦੇ ਐਕਸਪੋਰਟਸ ਇਕੱਠੇ ਕਰਦੀ ਹੈ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਮੌਜੂਦਾ ਸਥਿਤੀ ਤੱਕ ਰਿਫ੍ਰੈਸ਼ ਕਰਦੀ ਹੈ। ਦੂਜਾ, ਇਹ Claude ਰਾਹੀਂ ਪਿਛਲੇ 28 ਘੰਟਿਆਂ ਦੀ ਰੌਅ ਗੱਲਬਾਤ ਦਾ ਸਾਰ ਕੱਢਦੀ ਹੈ, ਅਤੇ ਸਿੱਧੇ Obsidian ਵੌਲਟ ਵਿੱਚ ਸੰਰਚਿਤ ਸਾਰ (structured summaries) ਜੋੜਦੀ ਹੈ। ਉਹ 28-ਘੰਟੇ ਦੀ ਵਿੰਡੋ ਜਾਣਬੁੱਝ ਕੇ ਰੱਖੀ ਗਈ ਹੈ; ਇਹ ਪੂਰੇ ਪਿਛਲੇ ਦਿਨ ਨੂੰ ਕਵਰ ਕਰਦੀ ਹੈ ਅਤੇ ਦੇਰੀ ਲਈ ਇੱਕ ਛੋਟਾ ਬਫਰ ਵੀ ਦਿੰਦੀ ਹੈ। ਤੀਜਾ, ਇਹ ਸਭ ਕੁਝ ਇੱਕ ਪ੍ਰਾਈਵੇਟ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਚੇਂਜਾਂ ਨੂੰ ਕਮਿਟ (commit) ਅਤੇ ਪੁਸ਼ (push) ਕਰਕੇ ਬੈਕਅੱਪ ਕਰਦੀ ਹੈ, ਜੋ ਕਿ ਆਫਲਾਈਨ ਸਟੋਰੇਜ ਅਤੇ ਅਚਾਨਕ ਡਿਲੀਟ ਹੋਣ ਦੇ ਬੀਮੇ ਵਜੋਂ ਕੰਮ ਕਰਦੀ ਹੈ। ਪੂਰੀ ਚੇਨ ਦਾ ਬੋਰਿੰਗ ਅਤੇ ਭਰੋਸੇਮੰਦ ਹੋਣਾ ਜ਼ਰੂਰੀ ਹੈ। ਬੋਰਿੰਗ ਆਟੋਮੇਸ਼ਨ ਹੀ ਮਕਸਦ ਹੈ।
ਜਦੋਂ macOS ਚੁੱਪਚਾਪ ਤੁਹਾਡੇ ਸਕ੍ਰਿਪਟ ਨੂੰ ਖਤਮ ਕਰ ਦਿੰਦਾ ਹੈ
ਰਾਤ ਦੀ ਜੌਬ (nightly job) ਦਾ ਸਭ ਤੋਂ ਵੱਡਾ ਦੁਸ਼ਮਣ ਕੋਈ ਭਿਆਨਕ ਕ੍ਰੈਸ਼ ਨਹੀਂ ਹੈ। ਇਹ ਚੁੱਪ ਹੈ।
macOS 'ਤੇ, Documents ਫੋਲਡਰ TCC ਦੀ ਸੁਰੱਖਿਆ ਹੇਠ ਹੁੰਦਾ ਹੈ, ਜੋ ਕਿ ਇੱਕ ਪ੍ਰਾਈਵੇਸੀ ਸਬਸਿਸਟਮ ਹੈ ਜੋ ਸੰਵੇਦਨਸ਼ੀਲ ਸਥਾਨਾਂ ਤੱਕ ਪਹੁੰਚ ਨੂੰ ਰੋਕਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਆਪਣੀ ਸਕ੍ਰਿਪਟ launchd ਰਾਹੀਂ ਸ਼ਡਿਊਲ ਕਰਦੇ ਹੋ, ਤਾਂ ਸਿਸਟਮ ਬਿਨਾਂ ਕਿਸੇ ਅਜਿਹੀ ਗਲਤੀ (error) ਦੇ ਜੋ ਤੁਸੀਂ ਦੇਖ ਸਕੋ, ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਹਾਡੀ ਲੌਗ ਫਾਈਲ ਖਾਲੀ ਰਹਿੰਦੀ ਹੈ। ਤੁਹਾਡਾ ਵੌਲਟ ਕਦੇ ਅਪਡੇਟ ਨਹੀਂ ਹੁੰਦਾ। ਜੌਬ ਫੇਲ ਹੋ ਗਈ, ਪਰ ਤੁਹਾਨੂੰ ਇਸ ਪਾੜੇ ਦਾ ਪਤਾ ਕਈ ਦਿਨਾਂ ਬਾਅਦ ਚੱਲਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਨੂੰ ਅਹਿਸਾਸ ਹੁੰਦਾ ਹੈ ਕਿ ਤੁਹਾਡੇ ਨੋਟ ਪੁਰਾਣੇ ਹੋ ਗਏ ਹਨ।
ਮੈਂ ਇਸ ਨੂੰ ਇੱਕ ਸਖ਼ਤ ਪ੍ਰੀਫਲਾਈਟ (preflight) ਰੁਟੀਨ ਨਾਲ ਸੰਭਾਲਦਾ ਹਾਂ। ਮੁੱਖ ਕੰਮ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ, ਸਕ੍ਰਿਪਟ ਟਾਰਗੇਟ ਡਾਇਰੈਕਟਰੀ ਦੇ ਅੰਦਰ ਇੱਕ ਨੁਕਸਾਨ ਰਹਿਤ ਰਾਈਟ ਆਪਰੇਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ। ਜੇਕਰ macOS ਇਸ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ, ਤਾਂ ਫੇਲ੍ਹ ਹੋਣ ਦੀ ਖ਼ਬਰ ਤੁਰੰਤ ਮਿਲ ਜਾਂਦੀ ਹੈ ਅਤੇ ਡੈਸਕਟੌਪ 'ਤੇ ਇੱਕ ਉੱਚੀ ਨੋਟੀਫਿਕੇਸ਼ਨ ਆਉਂਦੀ ਹੈ। ਕੋਈ ਚੁੱਪਚਾਪ ਬਾਹਰ ਨਿਕਲਣ ਦਾ ਵਿਕਲਪ ਨਹੀਂ ਹੈ। ਅਗਲਾ, ਸ਼ੈੱਲ ਇੰਟਰਪ੍ਰੀਟਰ (shell interpreter) ਨੂੰ ਖੁਦ System Settings ਦੇ ਅੰਦਰ Full Disk Access ਦੀ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਉਹ ਇਜਾਜ਼ਤ ਬਹੁਤ ਵਿਆਪਕ ਹੈ, ਇਸ ਲਈ ਮੈਂ ਸਾਰੇ ਆਟੋਮੇਸ਼ਨ ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ Documents ਫੋਲਡਰ ਟ੍ਰੀ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਾਹਰ ਰੱਖ ਕੇ ਖਤਰੇ ਨੂੰ ਘੱਟ ਕਰਦਾ ਹਾਂ। ਉਹ ਦੂਜੇ ਪਾਸੇ ਇੱਕ ਸਮਰਪਿਤ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਰਹਿੰਦੇ ਹਨ, ਅਤੇ ਵੌਲਟ ਪਾਥ ਦਾ ਸਪੱਸ਼ਟ ਰੂਪ ਵਿੱਚ ਹਵਾਲਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਜਲਦੀ ਪਛਾਣ, ਸ਼ੋਰ ਵਾਲੇ ਅਲਰਟ, ਅਤੇ ਸਾਵਧਾਨੀ ਨਾਲ ਫੋਲਡਰ ਦੀ ਸਥਿਤੀ ਦਾ ਇਹ ਸੁਮੇਲ ਚੁੱਪਚਾਪ ਮਰਨ ਵਾਲੀ ਸਥਿਤੀ ਨੂੰ ਠੀਕ ਕਰ ਦਿੰਦਾ ਹੈ।
ਸਲੀਪ (Sleep), ਟਾਈਮਆਊਟ (Timeouts), ਅਤੇ ਫ੍ਰੋਜ਼ਨ (Frozen) ਜੌਬਸ ਲਈ ਡਿਜ਼ਾਈਨ ਕਰਨਾ
ਲੈਪਟਾਪ ਸਲੀਪ ਹੋ ਜਾਂਦੇ ਹਨ। ਨੈੱਟਵਰਕ ਵਿੱਚ ਦਿੱਕਤ ਆ ਸਕਦੀ ਹੈ। API ਕਾਲਜ਼ ਅਟਕ ਸਕਦੀਆਂ ਹਨ। ਇੱਕ ਇਕੱਲੀ ਫ੍ਰੋਜ਼ਨ ਜੌਬ ਪੂਰੇ ਸਿਸਟਮ ਨੂੰ ਅਨੰਤ ਕਾਲੇ ਲਈ ਨਹੀਂ ਰੋਕਣੀ ਚਾਹੀਦੀ।
ਮੈਂ ਪਾਈਪਲਾਈਨ ਨੂੰ ਸਥਿਰ ਰੱਖਣ ਲਈ ਚਾਰ ਵਿਹਾਰਕ ਵਿਧੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ।
ਕਈ ਸਮਾਂ ਸਲੌਟਸ (Multiple time slots)। ਸਿਰਫ਼ ਸਵੇਰੇ ਜਲਦੀ ਚੱਲਣ ਵਾਲੀ ਇੱਕ ਸਿੰਗਲ ਰਨ 'ਤੇ ਭਰੋਸਾ ਕਰਨ ਦੀ ਬਜਾਏ, ਸ਼ਡਿਊਲਰ ਦਿਨ ਭਰ ਵੱਖ-ਵੱਖ ਸਮੇਂ 'ਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ। ਜੇਕਰ ਸਵੇਰੇ ਮਸ਼ੀਨ ਬੰਦ ਸੀ, ਤਾਂ ਦੁਪਹਿਰ ਦਾ ਸਮਾਂ ਇਸ ਨੂੰ ਕਵਰ ਕਰ ਲਵੇਗਾ।
ਡਨ ਮਾਰਕਰਸ (Done markers)। ਜਦੋਂ ਕੋਈ ਰਨ ਸਫਲ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਇਹ ਇੱਕ ਸਪੱਸ਼ਟ ਨਿਸ਼ਾਨ ਛੱਡਦੀ ਹੈ। ਅਗਲੀ ਸ਼ਡਿਊਲ ਕੀਤੀ ਕੋਸ਼ਿਸ਼ ਪਹਿਲਾਂ ਉਸ ਮਾਰਕਰ ਦੀ ਜਾਂਚ ਕਰਦੀ ਹੈ। ਜੇਕਰ ਕੰਮ ਪਹਿਲਾਂ ਹੀ ਪੂਰਾ ਹੋ ਚੁੱਕਾ ਹੈ, ਤਾਂ ਇਹ ਕੁਝ ਹੀ ਸਕਿੰਟਾਂ ਵਿੱਚ ਸਾਫ਼ ਤਰੀਕੇ ਨਾਲ ਬਾਹਰ ਨਿਕਲ ਜਾਂਦੀ ਹੈ। ਇਹ ਬੇਲੋੜੀਆਂ API ਕਾਲਜ਼ ਅਤੇ ਵਾਧੂ ਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਰੋਕਦਾ ਹੈ।
mkdir ਰਾਹੀਂ ਫਾਈਲ ਲੌਕਸ। ਓਵਰਲੈਪਿੰਗ (overlapping) ਨੂੰ ਰੋਕਣ ਲਈ, ਮੈਂ ਡਾਇਰੈਕਟਰੀ-ਅਧਾਰਤ ਲੌਕ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਲੋਕਲ ਫਾਈਲਸਿਸਟਮਾਂ 'ਤੇ ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣਾ ਐਟੋਮਿਕ (atomic) ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਦੋ ਸਮਾਨਾਂਤਰ ਜੌਬਸ ਇੱਕੋ ਲੌਕ ਪਾਥ ਦਾ ਦਾਅਵਾ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ। ਜੇਕਰ ਡਾਇਰੈਕਟਰੀ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਦੂਜੀ ਇੰਸਟੈਂਸ ਤੁਰੰਤ ਰੁਕ ਜਾਂਦੀ ਹੈ। ਜਦੋਂ ਪਹਿਲੀ ਖਤਮ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਇਹ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਹਟਾ ਦਿੰਦੀ ਹੈ। ਇਹ PID ਫਾਈਲਾਂ ਨਾਲੋਂ ਹਲਕਾ ਹੈ ਅਤੇ...
