time.js generate day log from draft metadate

entry.html can display day log as markdown.
This commit is contained in:
Huang,Yonggang 2024-04-16 15:04:49 +08:00
parent 0cf8015218
commit 74d3d8614c
4 changed files with 557 additions and 108 deletions

View File

@ -4,11 +4,28 @@
<head>
<meta charset="UTF-8">
<title>entry page</title>
<script src="marked.min.js"></script>
<script>
location.href = "https://codeberg.org/hyg/blog/src/branch/master/release/time/d."+datestr()+".md";
window.onload = function(){
var daylogurl = "https://codeberg.org/hyg/blog/raw/master/release/time/d." + datestr() + ".md";
getTextFileFromURL(daylogurl)
}
function getTextFileFromURL(url) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var text = xmlhttp.responseText;
alert(text);
document.getElementById('daylog').innerHTML = marked.parse(text);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function datestr(diff = 0) {
var theDate = new Date();
//theDate.setDate(theDate.getDate() - 1);
theDate.setDate(theDate.getDate() + diff);
var year = theDate.getFullYear();
@ -16,15 +33,13 @@
var day = theDate.getDate() < 10 ? "0" + theDate.getDate() : theDate.getDate();
var dateStr = year + "" + month + "" + day;
//console.log("datestr retrun:"+dateStr);
return dateStr;
}
</script>
</head>
<body>
<div id="daylog"></div>
</body>
</html>

6
release/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,96 +1,129 @@
var fs = require('fs');
var yaml = require('js-yaml');
let rawrepopath = "../../raw/";
let helpstr = `
today plan: node time init 1
day log mode: node time 20240414
diff day log mode: node time -1
today log mode: node time
`;
let today = datestr();
// read the arguments
var arguments = process.argv.splice(2);
if (arguments.length > 0) {
if ((arguments.length == 2)&(arguments[0] == "init")){
//today plan: node time init 1
loadmetadata();
makedayplan(today,arguments[1]);
}else if ((arguments.length == 1)&(arguments[0].length == 8)) {
//day log mode: node time 20240414
startdate = arguments[0];
enddate = arguments[0];
loadmetadata();
makedaylog(arguments[0]);
showtables();
//makeRfile();
}else if ((arguments.length == 1)&(arguments[0].length != 8)&(!isNaN(arguments[0]))) {
// diff day log mode: node time -1
var diff = parseInt(arguments[0]);
//console.log("diff day mode. diff="+diff);
startdate = datestr(diff);
enddate = datestr(diff);
loadmetadata();
makedaylog(datestr(diff));
showtables();
//makeRfile();
}else{
console.log(helpstr);
process.exit();
}
} else {
// today log mode: node time
startdate = datestr();
enddate = datestr();
loadmetadata();
makedaylog(datestr());
showtables();
//makeRfile();
}
function makedayplan(date,plan){
// read wake time from raw repo
var rawhealthfilename = "health/d."+date+".yaml";
var rawhealthfile = yaml.load(fs.readFileSync(rawrepopath + rawhealthfilename, 'utf8'));
var waketime = rawhealthfile.wake.time;
//console.log("wake time:"+waketime);
var planobj = yaml.load(fs.readFileSync("plan.yaml", 'utf8'));
var planstr = planobj.dayplan[plan].planstr
var dayplan = "# "+date+"\n\n计划\n\n根据[ego模型时间接口](https://gitee.com/hyg/blog/blob/master/timeflow.md),今天绑定模版"+plan+"。\n\n"+ planstr;
var dayplanfilename = "time/d."+date+".md";
//console.log("dayplan file name:\n"+dayplanfilename+"\ncontent:"+dayplan);
fs.writeFileSync(dayplanfilename, dayplan);
}
function loadmetadata(){
}
function makedaylog(date){
}
function showtables(){
}
// utils
function datestr(diff=0) {
var theDate = new Date();
//theDate.setDate(theDate.getDate() - 1);
theDate.setDate(theDate.getDate()+diff);
var year = theDate.getFullYear();
var month = theDate.getMonth() + 1 < 10 ? "0" + (theDate.getMonth() + 1) : theDate.getMonth() + 1;
var day = theDate.getDate() < 10 ? "0" + theDate.getDate() : theDate.getDate();
var dateStr = year + "" + month + "" + day;
//console.log("datestr retrun:"+dateStr);
return dateStr;
var fs = require('fs');
var yaml = require('js-yaml');
let gitpath = "../../" ;
let rawrepopath = "../../raw/";
let draftrepopath = "../../draft/";
let helpstr = `
today plan: node time init 1
day log mode: node time 20240414
diff day log mode: node time -1
today log mode: node time
`;
let today = datestr();
// read the arguments
var arguments = process.argv.splice(2);
if (arguments.length > 0) {
if ((arguments.length == 2)&(arguments[0] == "init")){
//today plan: node time init 1
loadmetadata();
makedayplan(today,arguments[1]);
}else if ((arguments.length == 1)&(arguments[0].length == 8)) {
//day log mode: node time 20240414
startdate = arguments[0];
enddate = arguments[0];
loadmetadata();
makedaylog(arguments[0]);
showtables();
//makeRfile();
}else if ((arguments.length == 1)&(arguments[0].length != 8)&(!isNaN(arguments[0]))) {
// diff day log mode: node time -1
var diff = parseInt(arguments[0]);
//console.log("diff day mode. diff="+diff);
startdate = datestr(diff);
enddate = datestr(diff);
loadmetadata();
makedaylog(datestr(diff));
showtables();
//makeRfile();
}else{
console.log(helpstr);
process.exit();
}
} else {
// today log mode: node time
startdate = datestr();
enddate = datestr();
loadmetadata();
makedaylog(datestr());
showtables();
//makeRfile();
}
function makedayplan(date,plan){
// read wake time from raw repo
var rawhealthfilename = "health/d."+date+".yaml";
var rawhealthfile = yaml.load(fs.readFileSync(rawrepopath + rawhealthfilename, 'utf8'));
var waketime = rawhealthfile.wake.time;
//console.log("wake time:"+waketime);
var planobj = yaml.load(fs.readFileSync("plan.yaml", 'utf8'));
var planstr = planobj.dayplan[plan].planstr
var dayplan = "# "+date+"\n\n计划\n\n根据[ego模型时间接口](https://gitee.com/hyg/blog/blob/master/timeflow.md),今天绑定模版"+plan+"。\n\n"+ planstr;
var dayplanfilename = "time/d."+date+".md";
//console.log("dayplan file name:\n"+dayplanfilename+"\ncontent:"+dayplan);
fs.writeFileSync(dayplanfilename, dayplan);
}
function loadmetadata(){
}
function makedaylog(date){
var year = date.slice(0,4);
var month = date.slice(4,6);
var draftmetadatafilename = year+"/"+month+"/d."+date+".yaml";
var draftmetadata = yaml.load(fs.readFileSync(draftrepopath + draftmetadatafilename, 'utf8'));
var plan = draftmetadata.plan ;
var planobj = yaml.load(fs.readFileSync("plan.yaml", 'utf8'));
var planstr = planobj.dayplan[plan].planstr ;
var daylog = "# "+date+"\n\n小结\n<a id=\"top\"></a>\n根据[ego模型时间接口](https://gitee.com/hyg/blog/blob/master/timeflow.md),今天绑定模版"+plan+"。\n\n"+ planstr+"\n\n---\n";
var indexstr = "<a id=\"index\"></a>\n" ;
var logstr = "" ;
for(t in draftmetadata.time){
var timelog = draftmetadata.time[t];
//console.log(typeof(timelog.begin));
var hour = timelog.begin.toString().slice(8,10);
var minute = timelog.begin.toString().slice(10,12);
indexstr = indexstr + "- " + hour + ":" + minute + "\t[" + timelog.name + "](#" + timelog.begin + ")\n";
var outputfilename = gitpath + timelog.output ;
var outputstr = fs.readFileSync(outputfilename, 'utf8')
logstr = logstr + "\n[top](#top) | [index](#index)\n<a id=\"" + timelog.begin + "\"></a>\n" + outputstr;
}
var daylog = daylog + indexstr + "\n---\n" + logstr ;
//console.log(daylog);
var daylogfilename = "time/d."+date+".md";
//console.log("dayplan file name:\n"+dayplanfilename+"\ncontent:"+dayplan);
fs.writeFileSync(daylogfilename, daylog);
}
function showtables(){
}
// utils
function datestr(diff=0) {
var theDate = new Date();
//theDate.setDate(theDate.getDate() - 1);
theDate.setDate(theDate.getDate()+diff);
var year = theDate.getFullYear();
var month = theDate.getMonth() + 1 < 10 ? "0" + (theDate.getMonth() + 1) : theDate.getMonth() + 1;
var day = theDate.getDate() < 10 ? "0" + theDate.getDate() : theDate.getDate();
var dateStr = year + "" + month + "" + day;
//console.log("datestr retrun:"+dateStr);
return dateStr;
}

View File

@ -1,7 +1,7 @@
# 20240416
计划
小结
<a id="top"></a>
根据[ego模型时间接口](https://gitee.com/hyg/blog/blob/master/timeflow.md)今天绑定模版1。
| 时间片 | 时长 | 用途 |
@ -11,16 +11,411 @@
| 5:15~5:59 | 45 | 早餐 |
| 6:00~6:44 | 45 | 会议、自习 |
| 6:45~7:44 | 60 | 休整 |
| 7:45~8:44 | 60 | [静默工作](http://simp.ly/p/xtgD4F) PSMD条款设计流程及手写范例|
| 7:45~8:44 | 60 | [静默工作](http://simp.ly/p/xtgD4F) |
| 8:45~9:29 | 45 | 休整 |
| 9:30~10:59 | 90 | [静默工作](http://simp.ly/p/j1SspP) PSMD metadata to view 代码|
| 9:30~10:59 | 90 | [静默工作](http://simp.ly/p/j1SspP) |
| 11:00~13:59 | 180 | 备餐、午餐午休 |
| 14:00~14:29 | 30 | [静默工作](http://simp.ly/p/8t3vlk) ego entry页面显示markdown |
| 14:30~14:59 | 30 | [静默工作](http://simp.ly/p/5k9gJy) xuemen 整理表单种类|
| 14:00~14:29 | 30 | [静默工作](http://simp.ly/p/8t3vlk) |
| 14:30~14:59 | 30 | [静默工作](http://simp.ly/p/5k9gJy) |
| 15:00~15:59 | 60 | 休整 |
| 16:00~16:59 | 60 | [静默工作](http://simp.ly/p/4QDThK) ego draft to metadata 代码|
| 16:00~16:59 | 60 | [静默工作](http://simp.ly/p/4QDThK) |
| 17:00~18:59 | 120 | 晚餐 |
| 19:00~19:59 | 60 | 讨论、整理提交 |
模版一采用静默工作方式。
希望讨论的提纲发到 [huangyg@mars22.com](mailto:huangyg@mars22.com)通常安排在后面某天的早餐5:15~5:59或会议时间6:00~6:45
希望讨论的提纲发到 [huangyg@mars22.com](mailto:huangyg@mars22.com)通常安排在后面某天的早餐5:15~5:59或会议时间6:00~6:45
---
<a id="index"></a>
- 07:45 [ego 任务管理的手写范例metadata数据结构设计](#20240416074500)
- 09:30 [PSMD 条款设计流程及手写范例metadata to view 代码](#20240416093000)
- 14:00 [ego entry页面显示markdown](#20240416140000)
- 14:30 [xuemen 整理表单种类](#20240416143000)
- 16:00 [ego draft to metadata 代码](#20240416160000)
---
[top](#top) | [index](#index)
<a id="20240416074500"></a>
## 7:45~8:44
ego 任务管理
### 流程
1. 手写draft的时间片md文件以文字记载task metadata的变更提要。
1. 手写更新task metadata文件一级项目在ego二级以下在一级项目内分配。
1. 自动统计、生成图表辅助后续分配手工或自动调整metadata。
1. 自动合并成当前的全局metadata文件。
1. 自动根据全局metadata文件产生
- 各项目简介markdown、html文件
- GTD工具的可选菜单。
### 架构设计
1. 对外显示各项目简介markdown、html文件并不断更新它们的结构和内容是相对稳定的。
1. 内部流程和文件是不断升级变化的:
- 文件draft md→task metadata→全局metadata、ego资源分配metadata
- 代码:
- task metadata → ego资源分配metadata
- task metadata → 统计图表
- task metadata → 全局metadata
- 全局metadata → 各项目简介markdown、html文件、GTD工具的可选菜单
### metadata数据结构
- task metadata
~~~
name:
id:
parent id:
start:
end:
dependencies:
- id:
- id:
path:
- name:
path:
readme: |
readme: |
step:
- time:
name:
status:
readme: |
log:
- time:
text: |
~~~
- 全局metadata
~~~
time:
task:
id:
name:
id:
...
subtask:
- name:
id:
~~~
### metadata范例
1. 在ego的git库中创建task文件夹。
1. 创建几个task metadata文件。
1. 创建task.js从task metadata生成全局metadata。
下一步追溯到一级任务的path文件夹。
参考:
- https://github.com/frappe/gantt 的甘特图json数据结构
[top](#top) | [index](#index)
<a id="20240416093000"></a>
## 9:30~10:59
PSMD条款库
### 流程及架构设计
1. 根据实践和讨论编写偏差error metadata和条款设计修订tansk metada由代码生成error markdown、html文件、allerror metadata文件。
1. 在ego项目下根据task统计界面分配时间到具体子任务。
1. 在PSMD的设计、修订条款子任务中通过PSMD项目的统计界面了解相关信息然后撰写手稿存放在draft库中并在当天的draft metadata文件中记录手稿的任务归属。
1. 在条款设计完成时手工编写PSMD项目的term metadata。由代码自动生成条款的markdown、html文件。
1. 在使用时手工编写条款集合termset的metadata由代码生成termset的markdown、html文件。
1. 建模时手工编写共同体模型的COM metadata文件由代码生成markdown、html文件。
1. 部署时手工编写输入条件的deploy metadata文件列明人员、资源等条件由代码生成deploy markdown、html文件以及全部表决通过后的COD metadata。
1. 紧急部署时手工编写部署方案的COD metadata文件。
1. 由代码根据COD metadata生成markdown、html。
1. term的placeholder有entity、asset、term三类以后可以扩充termset、COM解决term之间的关联关系deploy解决entity、asset的关联关系。
- 内部可见:
- error metadata
- allerror metadata
- draft手稿
- draft metadata
- error metadata
- term metadata
- termset metadata
- allterm metadata
- COM metadata
- deploy metadata
- COD metadata
- 对外可见:
- error markdown、html
- term markdown、html
- termset markdown、html
- COM markdown、html
- deploy markdown、html
- COD markdown、html
### 数据结构
- error metadata
~~~
name:
id:
text:
bind:
- type: term、termset、COD
- id:
log: |
~~~
- allerror metadata
~~~
time:
error:
errorid:
//error metadata文件全部内容
effect: //解决方案对应term、termset、COM的effect字段
- type: term、termset、COM
- id:
errorid:
~~~
- draft metadata
~~~
date: 20240415
time:
- begin: 20240415074500
amount: 60
unit: minute
type: work
subject: ego
subjecttype: task、error、term、termset、COM、COD
output: draft/2024/04/2024041140745.md
~~~
- term metadata
~~~
name:
id:
interface:
entity:
- name:
id:
readme: |
- name:
id:
readme: |
asset:
- name:
id:
readme: |
term: // 引用其它条款在termset、COM中根据联合使用情况绑定。
- name:
id:
readme: |
event:
- name:
id:
readme: |
text:
readme:
effect:
error hashid:
error hashid:
log: |
~~~
- termset metadata
~~~
name:
id:
level:
interface:
entity:
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
asset:
- name:
id:
globalid: \\ termsetid\...\termid\assetid
readme: |
term: // 引用其它条款在termset、COM中根据联合使用情况绑定。
- name:
id:
globalid: \\ termsetid\...\termid\termid
readme: |
event:
- name:
id:
globalid:
readme: |
item:
- type: term\termset
id:
globalid: \\ termsetid\...\termid\
text:
upgrade: \\ 修订程序的globalid
path:
item:
- id:
globalid: \\ termsetid\...\termid\
text:
upgrade: \\ 修订程序的globalid
- id:
readme: |
log: |
effect:
error hashid:
error hashid:
~~~
- allterm metadata
~~~
time:
term:
hash:
//term metadata全部内容
error: //对应error metadata的bind字段
-id:
-id:
termset:
hash:
//termset metadata全部内容
error: //对应error metadata的bind字段
-id:
-id:
~~~
- COM metadata
~~~
name:
id:
level:
interface:
entity:
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
asset:
- name:
id:
globalid: \\ termsetid\...\termid\assetid
readme: |
term: // 引用其它条款COM主要是引用外部法规比如公司法。
- name:
id:
globalid: \\ termsetid\...\termid\termid
readme: |
event:
- name:
id:
globalid:
readme: |
item: \\ 似乎可以直接用一个termset
- type: term\termset
id:
upgrade:
readme: |
log: |
effect:
error hashid:
error hashid:
~~~
- deploy metadata
~~~
name:
id:
source:
type: termset\COM
id: termsetid or COM id
interface:
entity:
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
asset:
- name:
id:
globalid: \\ termsetid\...\termid\assetid
readme: |
term: // 引用其它条款COM主要是引用外部法规比如公司法。
- name:
id:
globalid: \\ termsetid\...\termid\termid
readme: |
event:
- name:
id:
globalid:
readme: |
~~~
- COD metadata
~~~
name:
id:
COMid:
interface:
entity:
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
- name:
id:
globalid: \\ termsetid\...\termid\entityid
readme: |
asset:
- name:
id:
globalid: \\ termsetid\...\termid\assetid
readme: |
term: // 引用其它条款COM主要是引用外部法规比如公司法。
- name:
id:
globalid: \\ termsetid\...\termid\termid
readme: |
event:
- name:
id:
globalid:
readme: |
readme: |
log: |
~~~
### 自动化代码
- error metadata → error markdown、html、task metadata
- draft metadata → 更新task metadata的time、log字段 (→ alltask metadata更新
- term metadata → allterm metadata
- allterm metadata → 条款的markdown、html文件要约、合同
- COM metadata → COM markdown、COM html
- deploy metadata → deploy markdown、deploy html、全部通过后的COD metdadata
- COD metadata → COD markdown、COD html
下一步的工作:
- 根据COM的讨论和COD的执行产生修订error、term、termset的task metadata在ego或COD分配资源时使用从而形成闭环。
[top](#top) | [index](#index)
<a id="20240416140000"></a>
## 14:00~14:29
ego entry页面显示markdown
[top](#top) | [index](#index)
<a id="20240416143000"></a>
## 14:30~14:59
xuemen 整理表单种类
[top](#top) | [index](#index)
<a id="20240416160000"></a>
## 16:00~16:59
ego draft to metadata 代码