李迟2022年5月工作生活总结(代码片段)

李迟 李迟     2023-03-13     472

关键词:

本文为 2022 年 5 月工作生活总结。

研发编码

Linux

查看gcc支持的默认宏定义(以不同平台的linux系统为例):

$ gcc -E -dM - </dev/null

重要的:
#define __unix__ 1
#define unix 1
#define __unix 1
#define __linux 1
#define __linux__ 1
#define linux 1
#define __INT32_MAX__ 2147483647
#define __gnu_linux__ 1
#define __GNUC__ 4

64位 arm:
#define __SIZEOF_LONG_DOUBLE__ 16
#define __SIZEOF_SIZE_T__ 8
#define __INTPTR_TYPE__ long int
#define __UINT16_TYPE__ short unsigned int
#define __SIZE_TYPE__ long unsigned int
#define __SIZEOF_LONG_LONG__ 8
#define __UINT64_C(c) c ## UL
#define __INT16_MAX__ 32767
#define __UINT64_MAX__ 18446744073709551615UL

#define __aarch64__ 1
#define __AARCH64EL__ 1

32位x86:
#define i386 1

#define __SIZEOF_SIZE_T__ 4
#define __INTPTR_TYPE__ int
#define __UINT16_TYPE__ short unsigned int
#define __SIZE_TYPE__ unsigned int
#define __UINT32_TYPE__ unsigned int
#define __SIZEOF_LONG_LONG__ 8

#define __INT8_MAX__ 127
#define __UINT8_MAX__ 255
#define __INT16_MAX__ 32767
#define __UINT16_MAX__ 65535
#define __INT32_MAX__ 2147483647
#define __UINT32_MAX__ 4294967295U
#define __INT64_MAX__ 9223372036854775807L
#define __UINT64_MAX__ 18446744073709551615UL


64位 x86:
#define __x86_64 1
#define __amd64 1
#define __SIZEOF_SIZE_T__ 8
#define __INTPTR_TYPE__ long int
#define __UINT16_TYPE__ short unsigned int
#define __SIZE_TYPE__ long unsigned int
#define __UINT32_TYPE__ unsigned int
#define __SIZEOF_LONG_LONG__ 8

小结:

  • INT16、INT32、INT64等类型的最大值相同,从名称上就能知道已经确认了其值的范围。
  • size_t在不同位数系统中的值不同。
  • 不同平台,可以用不同的宏区别。比如 64 位 arm 系统上可以用宏__aarch64__

数据库

某板子上已安装mysqld且服务已启动,且root无密码。新加普通用户latelee,密码为123456password,同时授权较高权限,再创建数据库latelee_db。实操如下:

mysql -u root
flush privileges;
CREATE USER 'latelee'@'%' IDENTIFIED BY '123456password';
grant all privileges on *.* to 'latelee'@'%' identified by '123456password' with grant option;
CREATE DATABASE latelee_db;

最后测试:
mysql -ulatelee -p123456password

oracle创建视图:

create or replace view xxx_view
as
select 语句

示例:
create or replace view xxx_view
as
select t.version, t.a, t.b, t.c
from
mydb.foobar t
where
t.version in
(
'001',
'002'
)

查询时指定某些字段为固定值,比如某些情况下,需要将001版本改为000版本。

select '000' as version, t.a, t.b, t.c
from
mydb.foobar t
where
t.version in
(
'001'
)

Golang

Golang中,环境变量不能直接用$HOME,需使用Getenv获取,示例:

file, err := os.Open(filepath.Join(os.Getenv("HOME"), ".ssh", "known_hosts"))

错误示例:

file = "$HOME/.ssh/known_hosts"

vuepress

很早前用 vuepress 做了一个内部分享平台,使用 docker 部署,web 服务器是自编的。今年重构了去年年底写的web网页工具,两者其实不是一个体系的,前者是静态网站,后者是工具的网页版本。将了方便使用,在网页工具合并该静态网站。对于gin而言,只需要添加一条路由即可,十分简单,如下:

router.StaticFS("/website", http.Dir("./dist"))

其中/website为URL地址,dist是 vuepress 生成的目录。

另外,还需要在 vuepress 配置文件.vuepress/config.js中添加根目录字段base,如下:

module.exports = (site) => (
    title: "内部知识管理平台",
    base: '/website/',
    head: [
      ['link',  rel: 'icon', href: '/bug.jpg' ],
    ],
    // theme: 'vuepress-theme-reform',
    ga: 'UA-xxx-1',//待修改
    extendMarkdown: md => 
      md.use(require("markdown-it-disable-url-encode"));
    ,
    //...
)

但如此一样,原来的静态服务器就无法使用了,只能用 nginx 转发,在server中设置如下:

location /website/ 
    proxy_pass http://127.0.0.1:8080/;

后续考虑一下怎么用golang实现转发,之前研究的是基于json内容,较复杂。

时间溢出

集中一点时间,学习了无符号数的溢出。这里给出结论。对于计时、延时类的函数,记录时间戳的变量为无符号数。类型为unsinged,不能加范围限制,这是指平台最大者,如32位系统,使用的是32位无符号数,64位的系统则是64位无符号数。当变量数值溢出后,其值归0,但计时函数是正常的,不需要额外处理溢出情况。

其它思考

工作记录

这段时间又遇上疑难杂症,某32位系统的程序,运行某个版本提示:

ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.

用了几个引擎查了几个论坛,还是不知道解决方案,因为这个提示是在系统动态库中出现,程序只是使用curl库,而且64位不会出现。放着几天后,因迭代又更新了点代码,运行却正常了。实在不知原因。

生活记录

关于过日子,有了点想法。日子是一天天过的,好的坏的,都会过去。我就在想着怎么把一天过好,这个“好”我并没有要求十分高。比如,有时我能坚持几个晚上到楼下跑2圈(就2圈,不多),做几个引体向上,但有时又懒得动。周末有时陪大锤去公园听涛声,有时骑电车看夕阳。有时忙起来,连续一周都坚持2、3点才睡,甚至试过4点睡觉。又时又是瞎忙,自认为浪费时间,特别是对于一些未知问题的猜测、验证。——所有这些,都是过日子,好像是有意义的,好像又是浑浑噩噩的。再细探下去就涉及哲学问题了。

大锤最近有了些进步,像睡觉前都要叠被子,会要求自己给自己洗澡,这些都是进步。就是不午睡,动不动闹别扭。大妞一直跟她妈妈送货,我陪的时间很少,连洗手都不愿意我帮了。

思想方面

不同的人,思维不同,各种观点不同,如能相处,实在是难得的缘分,一般来说相处原则是“求同存异”,但不是每个人都是这样想的。我不算敏感,不是很迁就,也有脾气。

比如备案,因为政策问题,我使用了十余年的域名不能再使用了,在处理中有些误操作(阿某云的方式变化比较大),询问客服,反反复复来来回回重复相同的话术,当时就有点上火了,当然到现在已经解决了,域名的事暂时完毕。

比如移某动,去年某营业员打电话给我妈,操着流利的普通话跟我妈介绍套餐,我妈强调“听不懂煲冬瓜”,但还是开通了,最低消费40元,而原来的套餐是18元。直到半个月前我才知道这个事,当晚就打电话投诉,开始我还客气一番,一是了解情况,二是换回原来的套餐,客服反反复复来来回回重复相同的话术,就是不说解决方案,当时火了,一直追着要具体的方案和具体的时间,但最后也只能说向上级反馈,一天内回复。最终有客服打电话给我妈,还是用流利的普通话,后又换了个客服,操着不流利的白话,总算有个阶段性结果:退还3个月的超额的话费。但月底查询,话费还没有到账。

业余研究

域名及邮箱

申请的域名latelee.cn备案通过了,但由于使用了原来域名latelee.org的邮箱,且已大量使用:CICD脚本、开源项目代码、日常沟通邮箱、github账号,支付小号,等。这是项麻烦的工程。

蓝牙

蓝牙方面,花了很多时间在研究抓包,但就是搞不定环境。至于一些外设,已经着手看mpu6050,计划利用板子的LED做一个重力感应的流水灯,让大锤玩一玩。

李迟2022年11月工作生活总结(代码片段)

本文为2022年11月工作生活总结。研发编码Go研究了一些结构体、json相关的东西,感觉挺方便的,有空单独写出来。Docker使用alphine构建的一个应用服务镜像,其中有一解压zip文件功能sh./config/extract.sh./data/website/Archive:/tm... 查看详情

李迟2022年11月工作生活总结(代码片段)

本文为2022年11月工作生活总结。研发编码Go研究了一些结构体、json相关的东西,感觉挺方便的,有空单独写出来。Docker使用alphine构建的一个应用服务镜像,其中有一解压zip文件功能sh./config/extract.sh./data/website/Archive:/tm... 查看详情

李迟2022年10月工作生活总结(代码片段)

本文为2022年10月工作生活总结。研发编码Go判断interface是否为空判断interface类型是否为空,不能直接使用==nil来判断(用之无效),需先用reflect.ValueOf判断为指针类型,再使用IsNil函数判断,如下:... 查看详情

李迟2022年10月工作生活总结(代码片段)

本文为2022年10月工作生活总结。研发编码Go判断interface是否为空判断interface类型是否为空,不能直接使用==nil来判断(用之无效),需先用reflect.ValueOf判断为指针类型,再使用IsNil函数判断,如下:... 查看详情

李迟2022年6月工作生活总结(代码片段)

本文为2022年6月工作生活总结。研发编码前端需求:某输入框自动补全,带有中文名称,但后端只处理数字,需解析出数字并序列化。如将梧州岑溪001改为001,但页面依然显示前者。解析函数如下:functionde... 查看详情

李迟2022年6月工作生活总结(代码片段)

本文为2022年6月工作生活总结。研发编码前端需求:某输入框自动补全,带有中文名称,但后端只处理数字,需解析出数字并序列化。如将梧州岑溪001改为001,但页面依然显示前者。解析函数如下:functionde... 查看详情

李迟2022年6月工作生活总结(代码片段)

本文为2022年6月工作生活总结。研发编码前端需求:某输入框自动补全,带有中文名称,但后端只处理数字,需解析出数字并序列化。如将梧州岑溪001改为001,但页面依然显示前者。解析函数如下:functionde... 查看详情

李迟2022年9月工作生活总结(代码片段)

本文为2022年9月工作生活总结。研发编码Java调试时发现在Java函数体代码中途使用return返回,其后的代码会报错,提示:java:无法访问的语句不知何故。只好用if(1==0)...这样的形式来达到目的。Go协程及同步相关Go... 查看详情

李迟2022年9月工作生活总结(代码片段)

本文为2022年9月工作生活总结。研发编码Java调试时发现在Java函数体代码中途使用return返回,其后的代码会报错,提示:java:无法访问的语句不知何故。只好用if(1==0)...这样的形式来达到目的。Go协程及同步相关Go... 查看详情

李迟2022年9月工作生活总结(代码片段)

本文为2022年9月工作生活总结。研发编码Java调试时发现在Java函数体代码中途使用return返回,其后的代码会报错,提示:java:无法访问的语句不知何故。只好用if(1==0)...这样的形式来达到目的。Go协程及同步相关Go... 查看详情

李迟2022年8月工作生活总结(代码片段)

本文为2022年8月工作生活总结。研发编码Java接手了一个Java工程事务(注:不是接手工程),在其中添加一个模块。不知为何领导会找到我,或者是没有负责项目的原故,作为十分珍惜工作的人,不敢拒... 查看详情

李迟2022年11月工作生活总结(代码片段)

本文为2022年11月工作生活总结。研发编码Go研究了一些结构体、json相关的东西,感觉挺方便的,有空单独写出来。Docker使用alphine构建的一个应用服务镜像,其中有一解压zip文件功能sh./config/extract.sh./data/website/Archive:/tm... 查看详情

李迟2022年5月工作生活总结(代码片段)

本文为2022年5月工作生活总结。研发编码Linux查看gcc支持的默认宏定义(以不同平台的linux系统为例):$gcc-E-dM-</dev/null重要的:#define__unix__1#defineunix1#define__unix1#define__linux1#define__linux__1#definelinux1#define__INT32_MAX__214... 查看详情

李迟2022年4月工作生活总结

本文为2022年4月工作生活总结。研发编码Linux无其它思考业主要求做的事则一定要做,这是态度问题,但需要把风险点提前说清楚。工作记录无生活记录下旬开始,大锤发烧咳嗽持续了5天左右,先是发烧2天,... 查看详情

李迟2022年12月工作生活总结(代码片段)

本文为2022年12月工作生活总结。研发编码Go一个Golang的编译脚本mybuild.sh:#!/bin/bashVersion="v0.0.1"VER=""if[$#=1];thenVER=$1Version=""$VERelseecho"notsetversion,using"$Versionecho"plsconfirm(pressenter)"readfiec... 查看详情

李迟2023年01月工作生活总结(代码片段)

本文为2023年1月工作生活总结。研发编码Linux测试机器端口连通性有多种方法。下面演示的,前者是不开放端口,后者是开放的。ssh命令$ssh-v-p9001localhostdebug1:connecttoaddress127.0.0.1port9001:Connectionrefusedssh:connecttohostlocalhostport900... 查看详情

李迟2022年3月工作生活总结

本文为2022年3月工作生活总结。研发编码Linux研究了应用程序和动态库环境变量传递问题。编码其它无前后端在golang中渲染html页面,将部分信息处理后再显示到页面,比如系统信息和系统运行时长。在ajax中直接用串行化... 查看详情

李迟2023年01月工作生活总结(代码片段)

本文为2023年1月工作生活总结。研发编码Linux测试机器端口连通性有多种方法。下面演示的,前者是不开放端口,后者是开放的。ssh命令$ssh-v-p9001localhostdebug1:connecttoaddress127.0.0.1port9001:Connectionrefusedssh:connecttohostlocalhostport900... 查看详情