রপ্তানির ফরম্যাট
রপ্তানি, Deskami Plus-এর অংশ, Deskami তোমার Mac-এ মিনিট ধরে ধরে যে রেকর্ড রাখে, ঠিক সেটাই লেখে। কিছু যোগ করা হয় না, আন্দাজ করা হয় না, কোনো ফাঁক ভরানো হয় না। এই পাতা বলে ফাইলে কী আছে।
নিয়ম
- CSV-তে ফাঁকা ঘর, বা JSON-এ
null, মানে মাপা হয়নি।0মানে মাপা হয়েছে, আর সেটা শূন্য ছিল। - কলামের নাম সব ভাষাতেই ইংরেজিতে, আর নির্দিষ্ট; এগুলো বদলায় কেবল নতুন
export_version-এর সঙ্গে। - ফাইলগুলো UTF-8-এ। CSV-তে মানগুলো কমা দিয়ে আলাদা করা, আর প্রথম সারিতে শিরোনাম থাকে।
- সময় UTC-তে, ISO 8601 অনুযায়ী, যেমন
2026-09-28T07:41:00Z। তারিখYYYY-MM-DD, মানে যে ক্যালেন্ডার দিনের অধীনে মিনিটটা রেকর্ড হয়েছে। - দশমিকে বিন্দু বসে, হাজারের বিভাজক কখনও নয়। বুলিয়ান মান
trueআরfalse। - Deskami যে মিনিটে কিছু রেকর্ড করেছে, তার প্রতিটার জন্য এক সারি; যে মিনিটে কিছু রেকর্ড করেনি, তার কোনো সারি নেই।
মিনিটের কলাম
CSV-তে এই কলামগুলো আছে, এই ক্রমে; JSON-এ এই একই ফিল্ড নিয়ে প্রতিটা মিনিট গড়া। বন্ধনীর ভেতরের নামটা কাঁচা ডেটাবেস ফাইলের কলাম।
minute_utc— সময়। মিনিটের শুরু, UTC-তে। (minute_utc, Unix সেকেন্ডে)local_day— তারিখ। এই মিনিটটা যে ক্যালেন্ডার দিনের, সেই সময় Mac যে টাইম জোনে ছিল সেই অনুযায়ী। লেখার সময়েই ঠিক হয়ে যায়; পরে টাইম জোন বদলালেও সরে না। (day_key)setup_id— পূর্ণসংখ্যা। ব্যবহারে থাকা সেটআপ: একটা ক্যামেরা আর একটা ডিসপ্লে বিন্যাস। JSON-এ সেটআপগুলোর তালিকাsetups-এর নিচে। (profile_id)seconds_at_desk— 0 থেকে 60। এই মিনিটে ক্যামেরা তোমাকে কত সেকেন্ড দেখেছে।camera_offfalse হলে 0 মানে ক্যামেরা চালু ছিল আর তোমাকে দেখেনি। (present_s)posture_deviation— সংখ্যা, 0 বা বেশি। তোমার মাথা আর কাঁধ তোমার নিজের রেফারেন্সের চেয়ে কতটা নিচে বসেছিল, পুরো মিনিটের গড়, সেই সময়ে চালু রিমাইন্ডারের সীমার গুণিতক হিসেবে: রেফারেন্সে 0, সীমায় 1। ভঙ্গি মাপা না হলে ফাঁকা। (posture_dev)posture_peak— সংখ্যা, 0 বা বেশি। মিনিটের মধ্যে একই মাপের সবচেয়ে বড় মান। (posture_peak)distance_deviation— সংখ্যা, 0 বা বেশি। তোমার রেফারেন্সের তুলনায় তোমার মুখ স্ক্রিনের কতটা বেশি কাছে ছিল, একই মাপকাঠিতে, ছবিতে তোমার দুই চোখের ফাঁক থেকে পড়া। (distance_dev)blinks— পূর্ণসংখ্যা। চোখ মাপা যাচ্ছিল এমন সময়ে গোনা পলক। মাপা না গেলে ফাঁকা। (blinks)incomplete_blinks— পূর্ণসংখ্যা। যেসব পলকের সবচেয়ে সরু মুহূর্ত বন্ধ হওয়ার যথেষ্ট কাছে পৌঁছায়নি। বিচার করা সম্ভব না হলে ফাঁকা। (incomplete_blinks)head_pitch_degrees— সংখ্যা। মাথার ওপর-নিচ হেলানোর গড়, ডিগ্রিতে, ক্যামেরা যেমন জানায়: ক্যামেরার সাপেক্ষে, তোমার রেফারেন্সের সাপেক্ষে নয়। (head_pitch)confidence— 0 থেকে 1। মুখ খুঁজে পাওয়ার গড় নিশ্চয়তা। (confidence)light— 0 থেকে 1। মুখের অংশের গড় উজ্জ্বলতা, 0 অন্ধকার থেকে 1 উজ্জ্বল পর্যন্ত। ঘরের নয়। (light)eyes_measured— বুলিয়ান। এই মিনিটে অন্তত একবার চোখ মাপা গেছে। false হলেblinks,incomplete_blinksআরeye_observed_secondsফাঁকা থাকে। (eye_valid)eye_observed_seconds— 0 থেকে 60। চোখ আসলে কত সেকেন্ড পর্যবেক্ষণ করা গেছে। মিনিটে পলক হলোblinks× 60 ÷eye_observed_seconds। (eye_observed_s)look_aways— পূর্ণসংখ্যা। কতবার পুরোপুরি দূরে তাকিয়েছ, মানে 20-20-20 অভ্যাস। দূরে তাকানো মাপা না হলে ফাঁকা। (gaze_breaks)camera_off— বুলিয়ান। এই মিনিটে ক্যামেরা বন্ধ ছিল: তুমি বন্ধ করেছিলে, অন্য কোনো অ্যাপ ধরে রেখেছিল, বা অনুমতি সরিয়ে নেওয়া হয়েছিল। তখন ক্যামেরার কলামগুলো ফাঁকা থাকে; অ্যাপ আর কাজকর্মের কলাম তবুও ভরা থাকতে পারে। (camera_off)declared_break— বুলিয়ান। তুমি Deskami-কে জানিয়েছিলে যে বিরতিতে আছ। ক্যামেরা যা-ই দেখুক, মিনিটটা ডেস্ক থেকে দূরে বলে গোনা হয়। (declared_break)front_app— লেখা। মিনিটের বেশির ভাগ সময় সামনে থাকা অ্যাপের বান্ডল শনাক্তকারী, যেমনcom.apple.Safari। ওই পড়া বন্ধ করা থাকলে, স্ক্রিন লক থাকলে বা সামনে কিছু না থাকলে ফাঁকা। কখনও উইন্ডোর শিরোনাম নয়। (app_id)app_switches— পূর্ণসংখ্যা। এই মিনিটে সামনের অ্যাপ কতবার বদলেছে। (app_switches)active_seconds— 0 থেকে 60। যেসব সেকেন্ডে তার আগের 15 সেকেন্ডের মধ্যে কীবোর্ড বা মাউস ছোঁয়া হয়েছিল। কেবল শেষ ঘটনার পর কতক্ষণ গেছে তা পড়া হয়, কী কখনও নয়। ওই পড়া বন্ধ করা থাকলে ফাঁকা। (active_s)call_seconds— 0 থেকে 60। যেসব সেকেন্ডে কোনো কলের অ্যাপ সামনে ছিল, বা একটা অ্যাপ মাইক্রোফোন আর স্পিকার একসঙ্গে খুলে রেখেছিল। মাপা না হলে ফাঁকা, Deskami এটা মাপা শুরু করার আগে রেকর্ড হওয়া প্রতিটা মিনিটসহ। (meeting_s)
JSON
JSON ফাইলটা একটা অবজেক্ট। এটা শুরু হয় একটা হেডার দিয়ে: export_version, app_version, exported_at, time_zone (রপ্তানির সময়ের), database_schema_version, range (kind, from, to) আর setups (id, camera_name, created_at)।
তারপর আসে days, বেছে নেওয়া সময়সীমার প্রতিটা রেকর্ড করা দিনের জন্য একটা অবজেক্ট। প্রতিটা দিন নিজের সারসংক্ষেপ, মিনিট আর রিমাইন্ডার বহন করে:
local_dayআরminutes_at_desk, মানেseconds_at_desk-এর যোগফলকে 60 দিয়ে ভাগ।breaks: ডেস্ক থেকে 5 মিনিট বা তার বেশি আর 2 ঘণ্টার কম দূরে থাকার সময়, ডেস্কে কাটানো দুটো সময়ের মাঝে। ক্যামেরা বন্ধ থাকার সময় কোনো দিকেই গোনা হয় না।posture_fine_minutes(posture_deviation1-এর কম) আরposture_attention_minutes(1 বা বেশি)।blink_rate: চোখ যতক্ষণ পর্যবেক্ষণ করা গেছে, সেই সময়ে মিনিটে পলক; পর্যবেক্ষণ এক মিনিটের কম হলেnull।incomplete_blink_ratio: খুব কম পলক বিচার করা গেলেnull।reminders_by_signal: দেখানো রিমাইন্ডার, সংকেত ধরে গোনা।minutes: ওপরের মিনিটের কলামগুলো, প্রতি মিনিটে একটা অবজেক্ট।reminders: প্রতি রিমাইন্ডারে একটা অবজেক্ট, যাতে থাকেtime_utc,local_day,setup_id,signal(posture,distance,blink,incompleteBlinkবাgaze),build_up_seconds(রিমাইন্ডারের আগে সীমার ওপরে কাটানো সময়),recover_seconds(আবার সীমার নিচে নামা পর্যন্ত সময়; তার আগেই মাপা থেমে গেলেnull),asked(তোমার রেফারেন্স নিয়ে প্রশ্নটা দেখানো হয়েছিল কি না) আরanswer(জিজ্ঞেস না করা হলেnull, নইলেtrueবাfalse)।
PDF কোনো টেবিল নয়: এটা সারসংক্ষেপটাই — দিনের সারসংক্ষেপ, সপ্তাহ বা মাস — এক পাতায় ছাপা, ঠিক যেমন স্ক্রিনে দেখায়। এর প্রতিটা সংখ্যা স্ক্রিনের সংখ্যাটাই।
কাঁচা ফাইল
সেটিংস › সাধারণ › ডেটা › Finder-এ দেখাও history.sqlite দেখিয়ে দেয়, পাশে থাকে history.sqlite-wal আর history.sqlite-shm। Deskami চলার সময় সবচেয়ে নতুন মিনিটগুলো তখনও -wal ফাইলে থাকতে পারে; তিনটে ফাইলই কপি করো, বা আগে Deskami বন্ধ করো। Deskami চলার সময় তুমি এগুলো মুছে ফেললে, কয়েক সেকেন্ডের মধ্যেই অ্যাপটা একটা নতুন, খালি রেকর্ড শুরু করে। রপ্তানি সবসময় একটা সম্পূর্ণ স্ন্যাপশট লেখে। ডেটাবেসে কী থাকে, তার তালিকা গোপনীয়তা পাতায়।