go 实现命令行工具 cowsay
前言本文是参考Go: Building a cli command with Go: cowsay所实现的一个 toy-demo ,主要用于本人的一个留档记录。
开始实践获取输入我们通过管道获取其他命令程序的输出作为我们的输入,与上篇 lollcat 相似的代码,如下所示:
123456789101112131415161718192021222324252627282930313233package mainimport ( "bufio" "fmt" "io" "os")func main() { info, _ := os.Stdin.Stat() if info.Mode()&os.ModeCharDevice != 0 { fmt.Println("The command is intended to work with pipes.") fmt.Println("Usage: fortune | gocowsay") ...
go 实现命令行工具 lolcat
前言本文是参考Build a Command Line app with Go: lolcat所实现的一个 toy-demo ,主要用于本人的一个留档记录。
开始实践获取测试文本这里我们导入syreclabs.com/go/faker用于获取测试文本,使用如下语句导入:
1go get -u syreclabs.com/go/faker
该部分代码如下:
123456789101112131415161718package mainimport ( "fmt" "strings" "syreclabs.com/go/faker")func main() { var phrases []string for i := 1; i < 3; i++ { phrases = append(phrases, faker.Hacker().Phrases()...) } fmt.Println(strings.Join(phrases[:], "; "))}
输出效果如下 ...
go 实现简易 shell
前言本文是参考Writing a simple shell in Go所实现的一个 toy-demo ,主要用于本人的一个留档记录。
开始实践获取输入键盘是我们的标准输入设备,通过创建一个 reader 来访问它。而当我们使用键盘输入命令后,需要通过回车键去确认执行。为了获取我们输入的命令,我们通过 ReadString 方法去获取以 \n 结尾的行内容。
12reader := bufio.NewReader(os.Stdin)input, err := reader.ReadString('\n')
执行命令在获取到输入的命令后,我们需要执行这条命令。我们通过设置一个 execInput 函数去执行具体的处理逻辑,如下所示:
1234567891011121314func execInput(input string) error { // 移除 \n 后缀 input = strings.TrimSuffix(input, "\n") // 准备执行命令 cmd := exec.Command(in ...
excelize 相关记录
Excel 中自定义数字格式代码四个区段完整的自定义的格式代码分为四个区段,中间以”;”间隔,每个区段中的码对应不同类型的内容,如下所示:对正数应用的内容 ; 对负数应用的内容 ; 对零值应用的内容 ; 对文本应用的内容。但在实际应用中,区段数是可以小于4个的,结构含义如下所示:
区段数为 1 :作用于所有类型的格式
区段数为 2 :对正数和零值应用的格式 ; 对负数应用的格式
区段数为 3 :对正数应用的格式 ; 对负数应用的格式 ; 对零值应用的格式
(PS:在区段为 2 时,如果第二个区段以”@”开头,第二个区段为对文本应用的内容)
常用自定义格式代码符号及其含义三个数字占位符
#: 显示单元格中原有的数字,但不显示无意义的零值。
0: 显示单元格中原有的数字,当数字位数少于代码的位数时,显示无意义的零值。
?: 与0作用类似,但用空格代替无意义的零值如图所示:
数字定义相关
.: 小数点
%: 百分数
,: 千位分隔符
E: 科学记数符号
颜色设置
[颜色]: 中括号中的内容为对应的颜色,可以是中文也可以是英文,如[RED]与[红色]都可以。
条件设置
[条件]: ...
计算机教育缺失的一环_4
前言这是本人观看该课程所做的第三部分的笔记,包含第9、10课的内容,水平有限,不一定全面。课程链接:点击这里中文讲义:点击这里
第9讲 - 安全和密码学本节课主要是了解已经存在的东西。如果没有接受过正规的安全课程的培训,不要从事安全工作。如果不是密码学的专家,请不要试图创造或者修改加密算法。
熵熵是对随机性的一种度量,在确定密码强度时非常有用。如何量化这些不同密码的安全性呢?可以测算密码的随机性即算出其中有多少比特的随机性。熵的单位是比特。对于一个均匀分布的随机离散变量,熵等于log_2(所有可能的个数,即n)。比如扔一次硬币的熵是1比特,掷一次骰子的熵大约为2.58比特。需要多少熵值,取决于需要保护什么,比如收到网站加密保护的密码,大约四十个比特的熵可能就够了。如果担心离线攻击并且想要真正的安全,那么可能需要八十比特的熵。
哈希函数SHA-1是Git中使用的一种散列函数,它需要输入一些比特数据,且恰好会有160比特(转为40位16进制)的输出。总的来说,哈希函数是一种输出一个看似是随机数实际上具有确定性的值且难以逆推的函数。SHA-1函数演示如下:
实际用途
在Git ...
计算机教育缺失的一环_3
前言这是本人观看该课程所做的第三部分的笔记,包含第6、7、8课的内容,水平有限,不一定全面。课程链接:点击这里中文讲义:点击这里
第6讲 - 版本控制(Git)定义:版本控制系统是用于跟踪源代码或其他文件/文件夹的更改记录的工具。除了这些,还可以用于多人协作。版本控制系统通过一系列快照跟踪记录文件的更改,我们可以抓拍到文件夹的所有内容,然后可以为一系列的更改创造多个版本的快照,每个快照里都包含了最高层目录的所有内容。版本控制系统也维护了作者和提交时间戳等元数据。
为什么说版本控制很有用?你可以用它查看旧版本的代码;查看提交信息来找出某些内容为什么被更改了,什么时候被更改的,被谁更改的,是属于谁负责的;使用不同分支并行处理;保持各个功能独立的情况下修复bug;解决多人同时更改统一部分代码引发的冲突等等。
虽然版本控制系统有很多,但事实上的标准却是Git。尽管Git的接口有些丑陋,但是它的底层设计和思想却是非常优雅的。这节课将通过一种自底向上的方式介绍Git,即先从底层数据模型开始,然后再介绍一些git命令。
Git 的数据模型快照Git将历史记录建模为某个顶层目 ...
计算机教育缺失的一环_2
前言这是本人观看该课程所做的第二部分的笔记,因为怕篇幅过长,所以这次只包含第4、5课的内容,水平有限,不一定全面。课后习题这边只贴出了部分个人觉得容易有问题的题目以及个人的答案,一些不好写题解的也没有放上来。课程链接:点击这里中文讲义:点击这里
第4讲 - 数据整理数据整理的定义任何把一种格式的数据转换成另一种格式的数据的过程都可以被称为“数据整理”。比如在前几节课中,我们使用管道操作符把一个程序的输出传递给另一个程序,这就是做数据整理的一种方式。
数据整理的示例学习数据整理有两样东西是必不可少的:用来整理的数据以及相关的应用场景。这节课将采用一个服务器上的系统日志作为数据源。(PS:日志处理通常是一个比较典型的使用场景,因为我们经常需要在日志中查找某些信息,这种情况下通读日志是不现实的,因此就需要数据整理。)目的:获取日志中所有的用户断开连接时打印的日志中的用户名称。
查看所有登录服务器的用户且涉及ssh的信息,命令如下:
1ssh 服务器名 journalctl | grep ssh
ssh是一种通过命令行远程访问计算机的方式,journalctl用于查看系统日志 ...
计算机网络_二
前言:这是本人用于记录自己学习计网的学习笔记,可能计录的内容不够全面充分,如果能对你产生帮助,我很荣幸。学习的内容来自于B站的视频课程深入浅出计算机网络 微课视频。
二、物理层2.1 物理层概述物理层要实现的功能就是在各种传输媒体上传输比特0和1,为上层数据链路层提供透明传输比特流的服务。透明传输比特流的定义:
物理层接口特性各个特性具体如图:电气特性示例:功能特性示例:
练习题
2.2 物理层下面的传输媒体传输媒体的分类PS:如果一定要将传输媒体分入五层计算机网络体系结构中的话,其应当划为第0层,位于物理层之下。
导向型传输媒体
同轴电缆:
双绞线:
常见的双绞线分类:目前超五类双绞线即可满足日常生活的应用。
光纤:
光纤构造与传输原理:
多模光纤与单模光纤:多模光纤会因为光的色散导致脉冲展宽造成信号失真。单模光纤不会产生脉冲展宽但是制造成本以及对光源的要求比多模光纤要高。
光纤的具体信息:
光缆:实际应用中会将光纤做为结实的光缆。
优点与缺点:
非导向型传输媒体无线通信可使用的频段:要使用某一波段的无线电频谱进行通信,通常必须得到本国相关机 ...
计算机教育缺失的一环_1
前言这是本人观看该课程所做的第一部分的笔记,包含前三课的内容,水平有限,不一定全面。课后习题这边只贴出了部分个人觉得容易有问题的题目以及个人的答案。课程链接:点击这里中文讲义:点击这里
第1讲 - 课程概览与 shell课程目的如何充分利用你已经了解的工具,同时也介绍一些你之前不知道的工具并怎么将这些工具结合起来。
SHELL一般我们的计算机都是自带SHELL,通过打开终端就可看到。SHELL是我们与计算机交互的主要文本界面。
使用SHELL:SHELL提示符通常包含了用户名,机器名,当前所在路径,根据你所配置的一些东西,SHELL提示符也会有所不同,如下所示:在提示符号后,可以输入命令,命令最终会被 shell 解析。最简单的命令是执行一个程序,比如我们输入date命令,就会执行date这个程序,打印出当前的日期和时间:echo命令:打印参数,如输入echo hello会输出hello:有多个参数时用’’或者””包裹参数即可,如echo "Hello world"。
像date这种程序是计算机自带的,存储在文件系统之中。SHELL通过环境变量来搜索这些 ...
使用docker-compose配置canal+mysql+kafka
前言最近在写项目的时候有个服务模块用到了canal,发现在配置环境的时候还是有不少问题的,于是就有了这篇文章。(PS:由于本文是临时起意写的,在内容上会比较简洁,如果没有帮到你,我很抱歉QAQ)
MYSQL配置首先需要拉取mysql镜像,进入容器内部的etc文件下找到my.cnf文件,将文件复制到宿主机的指定目录下用于挂载。在my.cnf文件中添加如下内容:
1234[mysqld]log-bin=mysql-bin # 开启 binlogbinlog-format=ROW # 选择 ROW 模式server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
创建一个config.sql文件用于授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant,内容如下所示:
1234CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION ...