李迟2021年4月知识总结

前言:
上一篇类似的文章,是2011年的3月份,看了下当时写的内容,除了代码外,还有其它思考,但后面越来越少了,年纪大了,想的东西少,也没什么好写了,现在重拾起来,觉得十分有必要,可以将每个月的实践、思考记录下来,否则一年过去了,似乎什么也没有学到。

编码总结

Golang

研究了如何将一些资源文件整合到二进制可执行文件中,后续将系统发文。

Nodejs

excel解析:

1
2
3
4
5
var xlsx = require('node-xlsx');

var obj = xlsx.parse("foo.xlsx"); // 支持xls
var excelObj=obj[0].data; // 0表示第1张表,1为第2张表
console.log(excelObj) // 根据规则遍历解析,如只有3列,某列为空,某列名称,等

其它代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 去掉空格、tab、回车换行等
function trim(s){
//return s.replace(/(^\s*)|(\s*$)/g, "");
return s.replace(/(^\s*)|(\s*$)|([\t\r\n])/g, ""); // |(\ +)
}

// 截取前2字符
gxcode = code.substring(0, 2)
// 截取前4位、第4位后的字符串
code_1 = code.substring(0, 4)
code_2 = code.substring(4)
code_2.trim() // string自带的的去掉前后空格

多维数组
var outdata = []; // 形式1
var tmpdata = new Array(); // 形式2
tmpdata.code = code
tmpdata.name = district_name

outdata.push(tmpdata)

用高德地图API获取地点信息(行政区、经纬度、编码等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const superagent = require("superagent");

// nameArray地名数组
function getLocationFromWeb(nameArray)
{
newname = changeName(nameArray) // 如有多个地名,则添加|
var needbatch=""
if (newname.indexOf("|") != -1)
{
needbatch = "batch=true&" // 高德API一次最多10个地名,batch为true
}
var getstr = "https://restapi.amap.com/v3/geocode/geo?address="
getstr += newname + "&"
getstr += needbatch
getstr += "key=mykey" // mykey为申请的key
// console.log("getting : ", newname)

// 包含有中文,转义
var target = encodeURI(getstr)
// console.log(target)
let userAgent = userAgents[parseInt(Math.random() * userAgents.length)];
superagent
.get(target)
.set({'User-Agent': userAgent})
.end(function(error, response) {
if (error == null) // 成功才处理,有时网络不好会请求失败
{
var myHtml = response.text;
var ret = parseHtml(myHtml);
}
else
{
console.log("get url failed: %s", error.errno)
}
});
}

编码其它

Makefile 知识总结:
一个工程目录中,既有需要编译成 so 所需的文件,又有测试所用的文件,为了方便测试、版本管理,即:so 文件不掺杂测试文件,测试程序使用所有文件编译(不额外调用 .so 函数),在编译时,使用 2 个 Makefile,其中,只编译 so 文件时,将不必要的文件过滤即可,示例如下:

1
2
3
4
SRCS1 := $(shell find $(SRC_DIRS) -maxdepth 2 -name '*.cpp' -or -name '*.c')

NONEEDFILES := ./test.cpp ./time_utils.c
SRCS = $(filter-out $(NONEEDFILES), $(SRCS1))

上述示例中,test.cpp 和 time_utils.c 是测试所用文件,使用 Makefile 提供的 filter-out 函数将其过滤掉。

说明:将所有文件编译到 so 中也可以,但会多了不必要的函数和变量,也多了 main 函数,如果用 dlopen 方式打开,用 dlsym 查看函数的话,是没有影响的,但如将 so 也编译到测试程序中,则 main 会重复定义。

一般知识

github 可以创建 README.md 文件,用于展示个人信息或风采,可参考:

1
https://github.com/nate-lin/github-readme-stats

github 的 person access tokens 似乎变化了,要重新生成。之前做好的自动化工作,不懂还要不能修改。

研发思考

本月无。

后续计划

过年时一直在想知识共享平台的构建,稍研究了hexo + wiki主题,但始终觉得不太好用。主要用于公司内部的共享。需支持的功能:文档加密、pdf预览。

其它点滴

趁清明和“三月三”放假期间,抽了部分时间看了下前端的视频,查了些前端的框架。准备在工作上应用上。
大二立志不学 Java,要打破了,作为打工人,干就完了。
部门迁移,地方更远了,早上无法送大锤上幼儿园了。