[{"data":1,"prerenderedAt":1373},["ShallowReactive",2],{"posts:\u002Fposts\u002F2021-07-30-very-simple-time-tracker":3},{"id":4,"title":5,"body":6,"categories":1360,"date":1362,"description":1363,"extension":1364,"image":1363,"lang":1363,"meta":1365,"navigation":146,"path":1366,"seo":1367,"stem":1368,"tags":1369,"titleInPicture":1371,"__hash__":1372},"posts\u002Fposts\u002F2021-07-30-very-simple-time-tracker.md","Time tracking simple tool",{"type":7,"value":8,"toc":1355},"minimark",[9,14,18,21,33,44,63,67,83,87,90,1351],[10,11,13],"h2",{"id":12},"explanation","Explanation",[15,16,17],"p",{},"I hate time tracking apps. They are invariably too heavy for their very basic function. Often they are as blatant as being built over electron.",[15,19,20],{},"With some clients, for which I work exclusively on the computer, I created a very simple way to count worked time; and it uses very little resources. It's based on Node js. Though I know that it would be more efficient to use just batch, node is a lot faster for me to use, and probably customize in the future as I need to tweak the tool.",[15,22,23,24,28,29,32],{},"The way I use this is: on my client's folder, I create a \"time tracking\" folder, where I put these files that I will outline below. Then I can call ",[25,26,27],"code",{},"entry \"the task name\""," and leave it running until I finish. Then I can just close the window or end the process with ",[25,30,31],{},"ctrl + c"," key combination.",[15,34,35,36,39,40,43],{},"If you call ",[25,37,38],{},"entry -get",", it will sum all the worked time and display it in an overly precise way. You can delete or rename the \"tracking.yaml\" file when you bill the hours to the client. In case you mess up something and you need to sort out the entries manually, this yaml file is very human readable, so you can easily make changes. Note, however that the time is counted in the basis of ",[25,41,42],{},"ms",", if you need to tweak the time intervals.",[15,45,46,47,50,51,54,55,58,59,62],{},"The file ",[25,48,49],{},"entry"," needs execution permission (",[25,52,53],{},"chmod +x .\u002Fentry","). This file sugar-coats the call, so you don't need to call ",[25,56,57],{},"node .\u002Ftracking.js",". The file that does the job, of course, is the ",[25,60,61],{},"tracking.js"," file.",[10,64,66],{"id":65},"entry-shell-file","entry shell file",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-shell shiki shiki-themes github-dark","node \".\u002Ftracker.js\" $2 -entryName \"$1\"\n","shell","",[25,75,76],{"__ignoreMap":73},[77,78,81],"span",{"class":79,"line":80},"line",1,[77,82,71],{},[10,84,86],{"id":85},"trackerjs-file","tracker.js file",[15,88,89],{},"It's a bit messy, but it works. I might improve it in the future.",[68,91,95],{"className":92,"code":93,"language":94,"meta":73,"style":73},"language-js shiki shiki-themes github-dark","const fs = require(\"fs\");\nconst trackingFileName = \".\u002Ftracking.yaml\";\n\nlet entryName;\nlet entryNameArgvIndex = process.argv.indexOf(\"-entryName\") + 1;\nlet getTotalIndex = process.argv.indexOf(\"-get\") + 1;\n\nconst pad = (n, z) => {\n    z = z || 2;\n    return ('00' + n).slice(-z);\n}\n\nconst getTotalTime = () => {\n    const text = fs.readFileSync(trackingFileName, 'utf8');\n    const msEntries = text.match(\u002Fms\\:\\s*(\\d+)\u002Fg).map(\n        a=>parseInt(a.match(\u002F\\d+\u002F))\n    );\n    console.log(\n        niceTime(\n            msEntries.reduce((a,b)=>a+b)\n        )\n    );\n}\n\nconst niceTime = (milliseconds) => {\n    var ms = milliseconds % 1000;\n    milliseconds = (milliseconds - ms) \u002F 1000;\n    var secs = milliseconds % 60;\n    milliseconds = (milliseconds - secs) \u002F 60;\n    var mins = milliseconds % 60;\n    var hrs = (milliseconds - mins) \u002F 60;\n\n    return hrs + 'hrs, ' + mins + 'mins, ' + secs + '.' + pad(ms,3) + ' secs';\n}\n\nconst getTextEntry = () => {\n    \n    const intervalMs = endDate - startDate;\n    const entry = `\\n\\ndate: ${\n        startDate.getFullYear() }-${\n        startDate.getMonth() }-${\n        startDate.getDate() } at ${\n        startDate.getHours() }:${\n        startDate.getMinutes() }:${\n        startDate.getSeconds()\n    }\\n\\t- worked: ${niceTime(intervalMs)}\\n\\t- on: ${entryName}\\n\\t- ms: ${intervalMs}`;\n    return entry;\n}\nif(getTotalIndex){\n    getTotalTime();\n    process.exit();\n}\nif(entryNameArgvIndex){\n    entryName=process.argv[entryNameArgvIndex];\n}\nconst startDate = new Date();\n\nconsole.log(\"started at\",startDate);\n\nconsole.log(\"task name\",entryName);\n\nlet exitHandled = false;\nconst exitHandle = () => {\n    if(exitHandled) return;\n    exitHandled = true;\n    const entry = getTextEntry();\n    fs.appendFileSync(trackingFileName,entry);\n    console.log(\"Caught interrupt signal\");\n    console.log(\"saved entry\", entry);\n    process.exit();\n};\n\nprocess.on('beforeExit',exitHandle);\nprocess.on('exit',exitHandle);\nprocess.on('SIGINT',exitHandle);\nprocess.on('SIGTERM',exitHandle);\nprocess.on('SIGHUP',exitHandle);\n\nlet endDate = new Date();\n\nsetInterval(()=>{\n    endDate = new Date();\n    console.clear();\n    console.log(getTextEntry());\n},1000);\n","js",[25,96,97,125,141,148,157,190,217,222,253,272,300,306,311,328,353,411,440,446,457,465,497,503,508,513,518,539,561,583,602,622,640,663,668,717,722,727,743,749,767,786,804,818,833,848,862,875,922,930,935,944,953,964,969,977,988,993,1011,1016,1032,1037,1052,1057,1072,1088,1102,1115,1128,1140,1154,1169,1178,1184,1189,1206,1220,1234,1248,1262,1267,1282,1287,1301,1315,1325,1340],{"__ignoreMap":73},[77,98,99,103,107,110,114,118,122],{"class":79,"line":80},[77,100,102],{"class":101},"snl16","const",[77,104,106],{"class":105},"sDLfK"," fs",[77,108,109],{"class":101}," =",[77,111,113],{"class":112},"svObZ"," require",[77,115,117],{"class":116},"s95oV","(",[77,119,121],{"class":120},"sU2Wk","\"fs\"",[77,123,124],{"class":116},");\n",[77,126,128,130,133,135,138],{"class":79,"line":127},2,[77,129,102],{"class":101},[77,131,132],{"class":105}," trackingFileName",[77,134,109],{"class":101},[77,136,137],{"class":120}," \".\u002Ftracking.yaml\"",[77,139,140],{"class":116},";\n",[77,142,144],{"class":79,"line":143},3,[77,145,147],{"emptyLinePlaceholder":146},true,"\n",[77,149,151,154],{"class":79,"line":150},4,[77,152,153],{"class":101},"let",[77,155,156],{"class":116}," entryName;\n",[77,158,160,162,165,168,171,174,176,179,182,185,188],{"class":79,"line":159},5,[77,161,153],{"class":101},[77,163,164],{"class":116}," entryNameArgvIndex ",[77,166,167],{"class":101},"=",[77,169,170],{"class":116}," process.argv.",[77,172,173],{"class":112},"indexOf",[77,175,117],{"class":116},[77,177,178],{"class":120},"\"-entryName\"",[77,180,181],{"class":116},") ",[77,183,184],{"class":101},"+",[77,186,187],{"class":105}," 1",[77,189,140],{"class":116},[77,191,193,195,198,200,202,204,206,209,211,213,215],{"class":79,"line":192},6,[77,194,153],{"class":101},[77,196,197],{"class":116}," getTotalIndex ",[77,199,167],{"class":101},[77,201,170],{"class":116},[77,203,173],{"class":112},[77,205,117],{"class":116},[77,207,208],{"class":120},"\"-get\"",[77,210,181],{"class":116},[77,212,184],{"class":101},[77,214,187],{"class":105},[77,216,140],{"class":116},[77,218,220],{"class":79,"line":219},7,[77,221,147],{"emptyLinePlaceholder":146},[77,223,225,227,230,232,235,239,242,245,247,250],{"class":79,"line":224},8,[77,226,102],{"class":101},[77,228,229],{"class":112}," pad",[77,231,109],{"class":101},[77,233,234],{"class":116}," (",[77,236,238],{"class":237},"s9osk","n",[77,240,241],{"class":116},", ",[77,243,244],{"class":237},"z",[77,246,181],{"class":116},[77,248,249],{"class":101},"=>",[77,251,252],{"class":116}," {\n",[77,254,256,259,261,264,267,270],{"class":79,"line":255},9,[77,257,258],{"class":116},"    z ",[77,260,167],{"class":101},[77,262,263],{"class":116}," z ",[77,265,266],{"class":101},"||",[77,268,269],{"class":105}," 2",[77,271,140],{"class":116},[77,273,275,278,280,283,286,289,292,294,297],{"class":79,"line":274},10,[77,276,277],{"class":101},"    return",[77,279,234],{"class":116},[77,281,282],{"class":120},"'00'",[77,284,285],{"class":101}," +",[77,287,288],{"class":116}," n).",[77,290,291],{"class":112},"slice",[77,293,117],{"class":116},[77,295,296],{"class":101},"-",[77,298,299],{"class":116},"z);\n",[77,301,303],{"class":79,"line":302},11,[77,304,305],{"class":116},"}\n",[77,307,309],{"class":79,"line":308},12,[77,310,147],{"emptyLinePlaceholder":146},[77,312,314,316,319,321,324,326],{"class":79,"line":313},13,[77,315,102],{"class":101},[77,317,318],{"class":112}," getTotalTime",[77,320,109],{"class":101},[77,322,323],{"class":116}," () ",[77,325,249],{"class":101},[77,327,252],{"class":116},[77,329,331,334,337,339,342,345,348,351],{"class":79,"line":330},14,[77,332,333],{"class":101},"    const",[77,335,336],{"class":105}," text",[77,338,109],{"class":101},[77,340,341],{"class":116}," fs.",[77,343,344],{"class":112},"readFileSync",[77,346,347],{"class":116},"(trackingFileName, ",[77,349,350],{"class":120},"'utf8'",[77,352,124],{"class":116},[77,354,356,358,361,363,366,369,371,374,377,381,384,387,389,392,394,397,399,402,405,408],{"class":79,"line":355},15,[77,357,333],{"class":101},[77,359,360],{"class":105}," msEntries",[77,362,109],{"class":101},[77,364,365],{"class":116}," text.",[77,367,368],{"class":112},"match",[77,370,117],{"class":116},[77,372,373],{"class":120},"\u002F",[77,375,42],{"class":376},"sns5M",[77,378,380],{"class":379},"sRjNt","\\:",[77,382,383],{"class":105},"\\s",[77,385,386],{"class":101},"*",[77,388,117],{"class":376},[77,390,391],{"class":105},"\\d",[77,393,184],{"class":101},[77,395,396],{"class":376},")",[77,398,373],{"class":120},[77,400,401],{"class":101},"g",[77,403,404],{"class":116},").",[77,406,407],{"class":112},"map",[77,409,410],{"class":116},"(\n",[77,412,414,417,419,422,425,427,429,431,433,435,437],{"class":79,"line":413},16,[77,415,416],{"class":237},"        a",[77,418,249],{"class":101},[77,420,421],{"class":112},"parseInt",[77,423,424],{"class":116},"(a.",[77,426,368],{"class":112},[77,428,117],{"class":116},[77,430,373],{"class":120},[77,432,391],{"class":105},[77,434,184],{"class":101},[77,436,373],{"class":120},[77,438,439],{"class":116},"))\n",[77,441,443],{"class":79,"line":442},17,[77,444,445],{"class":116},"    );\n",[77,447,449,452,455],{"class":79,"line":448},18,[77,450,451],{"class":116},"    console.",[77,453,454],{"class":112},"log",[77,456,410],{"class":116},[77,458,460,463],{"class":79,"line":459},19,[77,461,462],{"class":112},"        niceTime",[77,464,410],{"class":116},[77,466,468,471,474,477,480,483,486,488,490,492,494],{"class":79,"line":467},20,[77,469,470],{"class":116},"            msEntries.",[77,472,473],{"class":112},"reduce",[77,475,476],{"class":116},"((",[77,478,479],{"class":237},"a",[77,481,482],{"class":116},",",[77,484,485],{"class":237},"b",[77,487,396],{"class":116},[77,489,249],{"class":101},[77,491,479],{"class":116},[77,493,184],{"class":101},[77,495,496],{"class":116},"b)\n",[77,498,500],{"class":79,"line":499},21,[77,501,502],{"class":116},"        )\n",[77,504,506],{"class":79,"line":505},22,[77,507,445],{"class":116},[77,509,511],{"class":79,"line":510},23,[77,512,305],{"class":116},[77,514,516],{"class":79,"line":515},24,[77,517,147],{"emptyLinePlaceholder":146},[77,519,521,523,526,528,530,533,535,537],{"class":79,"line":520},25,[77,522,102],{"class":101},[77,524,525],{"class":112}," niceTime",[77,527,109],{"class":101},[77,529,234],{"class":116},[77,531,532],{"class":237},"milliseconds",[77,534,181],{"class":116},[77,536,249],{"class":101},[77,538,252],{"class":116},[77,540,542,545,548,550,553,556,559],{"class":79,"line":541},26,[77,543,544],{"class":101},"    var",[77,546,547],{"class":116}," ms ",[77,549,167],{"class":101},[77,551,552],{"class":116}," milliseconds ",[77,554,555],{"class":101},"%",[77,557,558],{"class":105}," 1000",[77,560,140],{"class":116},[77,562,564,567,569,572,574,577,579,581],{"class":79,"line":563},27,[77,565,566],{"class":116},"    milliseconds ",[77,568,167],{"class":101},[77,570,571],{"class":116}," (milliseconds ",[77,573,296],{"class":101},[77,575,576],{"class":116}," ms) ",[77,578,373],{"class":101},[77,580,558],{"class":105},[77,582,140],{"class":116},[77,584,586,588,591,593,595,597,600],{"class":79,"line":585},28,[77,587,544],{"class":101},[77,589,590],{"class":116}," secs ",[77,592,167],{"class":101},[77,594,552],{"class":116},[77,596,555],{"class":101},[77,598,599],{"class":105}," 60",[77,601,140],{"class":116},[77,603,605,607,609,611,613,616,618,620],{"class":79,"line":604},29,[77,606,566],{"class":116},[77,608,167],{"class":101},[77,610,571],{"class":116},[77,612,296],{"class":101},[77,614,615],{"class":116}," secs) ",[77,617,373],{"class":101},[77,619,599],{"class":105},[77,621,140],{"class":116},[77,623,625,627,630,632,634,636,638],{"class":79,"line":624},30,[77,626,544],{"class":101},[77,628,629],{"class":116}," mins ",[77,631,167],{"class":101},[77,633,552],{"class":116},[77,635,555],{"class":101},[77,637,599],{"class":105},[77,639,140],{"class":116},[77,641,643,645,648,650,652,654,657,659,661],{"class":79,"line":642},31,[77,644,544],{"class":101},[77,646,647],{"class":116}," hrs ",[77,649,167],{"class":101},[77,651,571],{"class":116},[77,653,296],{"class":101},[77,655,656],{"class":116}," mins) ",[77,658,373],{"class":101},[77,660,599],{"class":105},[77,662,140],{"class":116},[77,664,666],{"class":79,"line":665},32,[77,667,147],{"emptyLinePlaceholder":146},[77,669,671,673,675,677,680,682,684,686,689,691,693,695,698,700,702,705,708,710,712,715],{"class":79,"line":670},33,[77,672,277],{"class":101},[77,674,647],{"class":116},[77,676,184],{"class":101},[77,678,679],{"class":120}," 'hrs, '",[77,681,285],{"class":101},[77,683,629],{"class":116},[77,685,184],{"class":101},[77,687,688],{"class":120}," 'mins, '",[77,690,285],{"class":101},[77,692,590],{"class":116},[77,694,184],{"class":101},[77,696,697],{"class":120}," '.'",[77,699,285],{"class":101},[77,701,229],{"class":112},[77,703,704],{"class":116},"(ms,",[77,706,707],{"class":105},"3",[77,709,181],{"class":116},[77,711,184],{"class":101},[77,713,714],{"class":120}," ' secs'",[77,716,140],{"class":116},[77,718,720],{"class":79,"line":719},34,[77,721,305],{"class":116},[77,723,725],{"class":79,"line":724},35,[77,726,147],{"emptyLinePlaceholder":146},[77,728,730,732,735,737,739,741],{"class":79,"line":729},36,[77,731,102],{"class":101},[77,733,734],{"class":112}," getTextEntry",[77,736,109],{"class":101},[77,738,323],{"class":116},[77,740,249],{"class":101},[77,742,252],{"class":116},[77,744,746],{"class":79,"line":745},37,[77,747,748],{"class":116},"    \n",[77,750,752,754,757,759,762,764],{"class":79,"line":751},38,[77,753,333],{"class":101},[77,755,756],{"class":105}," intervalMs",[77,758,109],{"class":101},[77,760,761],{"class":116}," endDate ",[77,763,296],{"class":101},[77,765,766],{"class":116}," startDate;\n",[77,768,770,772,775,777,780,783],{"class":79,"line":769},39,[77,771,333],{"class":101},[77,773,774],{"class":105}," entry",[77,776,109],{"class":101},[77,778,779],{"class":120}," `",[77,781,782],{"class":105},"\\n\\n",[77,784,785],{"class":120},"date: ${\n",[77,787,789,792,795,798,801],{"class":79,"line":788},40,[77,790,791],{"class":116},"        startDate",[77,793,794],{"class":120},".",[77,796,797],{"class":112},"getFullYear",[77,799,800],{"class":120},"() ",[77,802,803],{"class":120},"}-${\n",[77,805,807,809,811,814,816],{"class":79,"line":806},41,[77,808,791],{"class":116},[77,810,794],{"class":120},[77,812,813],{"class":112},"getMonth",[77,815,800],{"class":120},[77,817,803],{"class":120},[77,819,821,823,825,828,830],{"class":79,"line":820},42,[77,822,791],{"class":116},[77,824,794],{"class":120},[77,826,827],{"class":112},"getDate",[77,829,800],{"class":120},[77,831,832],{"class":120},"} at ${\n",[77,834,836,838,840,843,845],{"class":79,"line":835},43,[77,837,791],{"class":116},[77,839,794],{"class":120},[77,841,842],{"class":112},"getHours",[77,844,800],{"class":120},[77,846,847],{"class":120},"}:${\n",[77,849,851,853,855,858,860],{"class":79,"line":850},44,[77,852,791],{"class":116},[77,854,794],{"class":120},[77,856,857],{"class":112},"getMinutes",[77,859,800],{"class":120},[77,861,847],{"class":120},[77,863,865,867,869,872],{"class":79,"line":864},45,[77,866,791],{"class":116},[77,868,794],{"class":120},[77,870,871],{"class":112},"getSeconds",[77,873,874],{"class":120},"()\n",[77,876,878,881,884,887,890,892,895,897,900,902,905,908,910,912,915,917,920],{"class":79,"line":877},46,[77,879,880],{"class":120},"    }",[77,882,883],{"class":105},"\\n\\t",[77,885,886],{"class":120},"- worked: ${",[77,888,889],{"class":112},"niceTime",[77,891,117],{"class":120},[77,893,894],{"class":116},"intervalMs",[77,896,396],{"class":120},[77,898,899],{"class":120},"}",[77,901,883],{"class":105},[77,903,904],{"class":120},"- on: ${",[77,906,907],{"class":116},"entryName",[77,909,899],{"class":120},[77,911,883],{"class":105},[77,913,914],{"class":120},"- ms: ${",[77,916,894],{"class":116},[77,918,919],{"class":120},"}`",[77,921,140],{"class":116},[77,923,925,927],{"class":79,"line":924},47,[77,926,277],{"class":101},[77,928,929],{"class":116}," entry;\n",[77,931,933],{"class":79,"line":932},48,[77,934,305],{"class":116},[77,936,938,941],{"class":79,"line":937},49,[77,939,940],{"class":101},"if",[77,942,943],{"class":116},"(getTotalIndex){\n",[77,945,947,950],{"class":79,"line":946},50,[77,948,949],{"class":112},"    getTotalTime",[77,951,952],{"class":116},"();\n",[77,954,956,959,962],{"class":79,"line":955},51,[77,957,958],{"class":116},"    process.",[77,960,961],{"class":112},"exit",[77,963,952],{"class":116},[77,965,967],{"class":79,"line":966},52,[77,968,305],{"class":116},[77,970,972,974],{"class":79,"line":971},53,[77,973,940],{"class":101},[77,975,976],{"class":116},"(entryNameArgvIndex){\n",[77,978,980,983,985],{"class":79,"line":979},54,[77,981,982],{"class":116},"    entryName",[77,984,167],{"class":101},[77,986,987],{"class":116},"process.argv[entryNameArgvIndex];\n",[77,989,991],{"class":79,"line":990},55,[77,992,305],{"class":116},[77,994,996,998,1001,1003,1006,1009],{"class":79,"line":995},56,[77,997,102],{"class":101},[77,999,1000],{"class":105}," startDate",[77,1002,109],{"class":101},[77,1004,1005],{"class":101}," new",[77,1007,1008],{"class":112}," Date",[77,1010,952],{"class":116},[77,1012,1014],{"class":79,"line":1013},57,[77,1015,147],{"emptyLinePlaceholder":146},[77,1017,1019,1022,1024,1026,1029],{"class":79,"line":1018},58,[77,1020,1021],{"class":116},"console.",[77,1023,454],{"class":112},[77,1025,117],{"class":116},[77,1027,1028],{"class":120},"\"started at\"",[77,1030,1031],{"class":116},",startDate);\n",[77,1033,1035],{"class":79,"line":1034},59,[77,1036,147],{"emptyLinePlaceholder":146},[77,1038,1040,1042,1044,1046,1049],{"class":79,"line":1039},60,[77,1041,1021],{"class":116},[77,1043,454],{"class":112},[77,1045,117],{"class":116},[77,1047,1048],{"class":120},"\"task name\"",[77,1050,1051],{"class":116},",entryName);\n",[77,1053,1055],{"class":79,"line":1054},61,[77,1056,147],{"emptyLinePlaceholder":146},[77,1058,1060,1062,1065,1067,1070],{"class":79,"line":1059},62,[77,1061,153],{"class":101},[77,1063,1064],{"class":116}," exitHandled ",[77,1066,167],{"class":101},[77,1068,1069],{"class":105}," false",[77,1071,140],{"class":116},[77,1073,1075,1077,1080,1082,1084,1086],{"class":79,"line":1074},63,[77,1076,102],{"class":101},[77,1078,1079],{"class":112}," exitHandle",[77,1081,109],{"class":101},[77,1083,323],{"class":116},[77,1085,249],{"class":101},[77,1087,252],{"class":116},[77,1089,1091,1094,1097,1100],{"class":79,"line":1090},64,[77,1092,1093],{"class":101},"    if",[77,1095,1096],{"class":116},"(exitHandled) ",[77,1098,1099],{"class":101},"return",[77,1101,140],{"class":116},[77,1103,1105,1108,1110,1113],{"class":79,"line":1104},65,[77,1106,1107],{"class":116},"    exitHandled ",[77,1109,167],{"class":101},[77,1111,1112],{"class":105}," true",[77,1114,140],{"class":116},[77,1116,1118,1120,1122,1124,1126],{"class":79,"line":1117},66,[77,1119,333],{"class":101},[77,1121,774],{"class":105},[77,1123,109],{"class":101},[77,1125,734],{"class":112},[77,1127,952],{"class":116},[77,1129,1131,1134,1137],{"class":79,"line":1130},67,[77,1132,1133],{"class":116},"    fs.",[77,1135,1136],{"class":112},"appendFileSync",[77,1138,1139],{"class":116},"(trackingFileName,entry);\n",[77,1141,1143,1145,1147,1149,1152],{"class":79,"line":1142},68,[77,1144,451],{"class":116},[77,1146,454],{"class":112},[77,1148,117],{"class":116},[77,1150,1151],{"class":120},"\"Caught interrupt signal\"",[77,1153,124],{"class":116},[77,1155,1157,1159,1161,1163,1166],{"class":79,"line":1156},69,[77,1158,451],{"class":116},[77,1160,454],{"class":112},[77,1162,117],{"class":116},[77,1164,1165],{"class":120},"\"saved entry\"",[77,1167,1168],{"class":116},", entry);\n",[77,1170,1172,1174,1176],{"class":79,"line":1171},70,[77,1173,958],{"class":116},[77,1175,961],{"class":112},[77,1177,952],{"class":116},[77,1179,1181],{"class":79,"line":1180},71,[77,1182,1183],{"class":116},"};\n",[77,1185,1187],{"class":79,"line":1186},72,[77,1188,147],{"emptyLinePlaceholder":146},[77,1190,1192,1195,1198,1200,1203],{"class":79,"line":1191},73,[77,1193,1194],{"class":116},"process.",[77,1196,1197],{"class":112},"on",[77,1199,117],{"class":116},[77,1201,1202],{"class":120},"'beforeExit'",[77,1204,1205],{"class":116},",exitHandle);\n",[77,1207,1209,1211,1213,1215,1218],{"class":79,"line":1208},74,[77,1210,1194],{"class":116},[77,1212,1197],{"class":112},[77,1214,117],{"class":116},[77,1216,1217],{"class":120},"'exit'",[77,1219,1205],{"class":116},[77,1221,1223,1225,1227,1229,1232],{"class":79,"line":1222},75,[77,1224,1194],{"class":116},[77,1226,1197],{"class":112},[77,1228,117],{"class":116},[77,1230,1231],{"class":120},"'SIGINT'",[77,1233,1205],{"class":116},[77,1235,1237,1239,1241,1243,1246],{"class":79,"line":1236},76,[77,1238,1194],{"class":116},[77,1240,1197],{"class":112},[77,1242,117],{"class":116},[77,1244,1245],{"class":120},"'SIGTERM'",[77,1247,1205],{"class":116},[77,1249,1251,1253,1255,1257,1260],{"class":79,"line":1250},77,[77,1252,1194],{"class":116},[77,1254,1197],{"class":112},[77,1256,117],{"class":116},[77,1258,1259],{"class":120},"'SIGHUP'",[77,1261,1205],{"class":116},[77,1263,1265],{"class":79,"line":1264},78,[77,1266,147],{"emptyLinePlaceholder":146},[77,1268,1270,1272,1274,1276,1278,1280],{"class":79,"line":1269},79,[77,1271,153],{"class":101},[77,1273,761],{"class":116},[77,1275,167],{"class":101},[77,1277,1005],{"class":101},[77,1279,1008],{"class":112},[77,1281,952],{"class":116},[77,1283,1285],{"class":79,"line":1284},80,[77,1286,147],{"emptyLinePlaceholder":146},[77,1288,1290,1293,1296,1298],{"class":79,"line":1289},81,[77,1291,1292],{"class":112},"setInterval",[77,1294,1295],{"class":116},"(()",[77,1297,249],{"class":101},[77,1299,1300],{"class":116},"{\n",[77,1302,1304,1307,1309,1311,1313],{"class":79,"line":1303},82,[77,1305,1306],{"class":116},"    endDate ",[77,1308,167],{"class":101},[77,1310,1005],{"class":101},[77,1312,1008],{"class":112},[77,1314,952],{"class":116},[77,1316,1318,1320,1323],{"class":79,"line":1317},83,[77,1319,451],{"class":116},[77,1321,1322],{"class":112},"clear",[77,1324,952],{"class":116},[77,1326,1328,1330,1332,1334,1337],{"class":79,"line":1327},84,[77,1329,451],{"class":116},[77,1331,454],{"class":112},[77,1333,117],{"class":116},[77,1335,1336],{"class":112},"getTextEntry",[77,1338,1339],{"class":116},"());\n",[77,1341,1343,1346,1349],{"class":79,"line":1342},85,[77,1344,1345],{"class":116},"},",[77,1347,1348],{"class":105},"1000",[77,1350,124],{"class":116},[1352,1353,1354],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}html pre.shiki code .sRjNt, html code.shiki .sRjNt{--shiki-default:#85E89D;--shiki-default-font-weight:bold}",{"title":73,"searchDepth":127,"depth":127,"links":1356},[1357,1358,1359],{"id":12,"depth":127,"text":13},{"id":65,"depth":127,"text":66},{"id":85,"depth":127,"text":86},[1361],"blog","2021-07-30",null,"md",{},"\u002Fposts\u002F2021-07-30-very-simple-time-tracker",{"title":5,"description":73},"posts\u002F2021-07-30-very-simple-time-tracker",[1370],"tool_javascript",false,"pUO3rvMNSvSFEoX657sFUfx0MXSZVH5zWJXg9kk8pqo",1791671312737]