我没有写过 xxx 但是今天需求就是涉及到了 xxx 怎么办 这是我所认为你是否是一名软开人员的基本素质要求,你没接触过但是看看能理解能改改,具备这种素质的,那么你可以说你是一名软开,如果不具备,那么你可能只是一个工具人而已,我将在下文结合自身来进行一次自我检测,看看自己是否有没有这种素质 我的方法 看任何东西时,先看脉络流程,在看具体 看不懂没关系,看不懂可以先猜一个大概 比如 def abs(file) 你就猜这是一个返回绝对路径的东西 再比如 transS2I(s) 可能看不明白,但通过 trans 猜个转译也行,标注出来,然后往下继续看流程看脉络 当你浏览的差不多以后,在一步一步的进行剖析,去印证你猜的结果就好,猜错了改过来。 目录结构 - debian - doc - stcgal - __init__.py - __main__.py - frontend.py - ihex.py - models.py - options.py - protocols.py - utils.py - tests - setup.py - stcgal.py 这里我从一级目录的两个 py.... 有更新! 关于STCGAL的剖析 STM32
关于源码到语法树的部分编译在 这里 编译阶段 src/cmd/compile/internal/gc/main.go 中 存有如下一段代码 initssaconfig() // Just before compilation, compile itabs found on // the right side of OCONVIFACE so that methods // can be de-virtualized during compilation. Curfn = nil peekitabs() // Phase 8: Compile top level functions. // Don't use range--walk can add functions to xtop. timings.Start("be", "compilefuncs") fcount = 0 for i := 0; i < len(xtop); i++ { n := xtop[i] if n.Op == ODCLFUNC { funccompile(n) fcount++ } } timings.... 有更新! SSA IN GO 编译原理
#!/usr/bin/env bash echo -n "0.请输入你的Github Access Token:" read token echo -n "1.请输入项目的id:" read id echo -n "2.请输入项目release的名称:" read name echo -n "3.请输入即将创建release版本的tag:" read tag_name echo -n "4.请输入release的描述:" read description curl --header 'Content-Type: application/json' --header "PRIVATE-TOKEN: $token" \ --data '{ "name": "'$name'", "tag_name": "'$tag_name'", "ref":"'$tag_name'" ,"description": "'$description'" }' \ --request POST http://gitlab_url/api/v4/projects/$id/releases Gitlab简易Release脚本 Git
查看项目结构 第一步:含有package.json的项目基本上为nodejs项目 第二部:查看package.json依赖表明这是一个vue/element/electron的混合项目 由于有 electron 的依赖,所以大概率为一个客户端程序 0.安装环境 确定为Nodejs环境后,mac用户可以使用 Home brew安装Node环境,Homebrew 会自动将 node,npm命令加入到环境变量里 brew install node 等待一段时间后 node -v npm -v 还可以用 brew查看安装的具体位置和其他信息 至此,node环境安装完毕 如果网络不好的或者不想使用brew安装Node应该如何安装呢 下载Nodejs的二进制包,放到一个目录 将目录下的bin目录加入到环境变量中 这里我拿Dart环境举例 Macos的环境变量文件在 /etc/profile 或 ~/.bash_rc 或高版本Mac在 ~/.zsh_rc 如果没有该文件可以手动创建 最后关闭terminal重新打开即可刷新环境变量 再次使用 node,npm进行环境测试 1.安装依赖 cd n....... nebula-helper in macos Electron
词法分析 下列一段代码 package main import ( "fmt" ) func main() { fmt.Println("Hello") } 通过lex规则最终解释成 PACKAGE IDENT IMPORT QUOTE IDENT QUOTE IDENT IDENT LPAREN RPAREN LBRACE IDENT DOT IDENT LPAREN QUOTE IDENT QUOTE RPAREN RBRACE 这样将源码翻译成 好多的token(字符) 这一过程可以理解成词法分析 go的词法分析最终生成的Token列表 src/cmd/compile/internal/syntax/tokens.go // Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package syntax type to...... Go词法语法分析 编译原理
Static Single Assignment Form 静态单一分配形式,每个变量只赋值一次 intermediate representation(IR): 中间代码表示 作用 常数传播(constant propagation) 值域传播(value range propagation) 稀疏有条件的常数传播(sparse conditional constant propagation) 消除无用的程式码(dead code elimination) 全域数值编号(global value numbering) 消除部分的冗余(partial redundancy elimination) 强度折减(strength reduction) 寄存器分配(register allocation) demo x = 1 y = x 变成了 y = 1 转化 { "title": { "text": "Graph 简单示例" }, "tooltip": {}, "animationDurationUpdate": 1500, "animationEasingUpdate": .... Static Single Assignment Form 编译原理
抽象语法树 AST 将代码进行词法分析语法分析后变成树结构以便于生成中间代码的环节 如图所示,该树为 2*3+7 词法分析 比如一段代码 const a = 5; 经过词法分析 [{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...] 语法分析 词法分析的输出是语法分析的输入,将词法分析的结果转化为树 { type: "VariableDeclarator", id: { type: "Identifier", name: "a" }, ... } 当生成树的时候,解析器会删除一些没必要的标识 tokens(比如:不完整的括号),因此 AST 不是 100% 与源码匹配的。 与源代码互相匹配的叫做 具体语法树 关于研究用途拆解包 recast 包可以在 nodejs 中拆解 code 输出词法语法分析后的结果,并且可以进行inspect操作等等 拿到抽象语法树之后 Go 语言的编译器会对语法树中定义和使用的类型进行检查 常量、类型和函数名及类型; 变量的赋值和初始化; 函数和闭包的主体.... Abstract Syntax Code 编译原理
自动更新 [options] automatic_update = true 启动主题 [options] colorscheme = "molokai" [[layers]] name = "colorscheme" 更新插件 :SPUpdate 查看日志 :SPDebugInfo! 界面元素切换 SPC t SPC t 8 高亮所有超过80列的字符 SPC t f 高亮临界列 SPC t hh 高亮当前行 SPC t hi 高亮代码对其线 SPC t hc 高亮光标所在列 SPC t hs 启动语法高亮 SPC t n 显示隐藏行号 SPC t b 切换背景色 SPC t c 切换conceal模式 SPC t p 切换paste模式 SPC t t Tab管理器 SPC t mb 电池 SPC t mM 文件类型 SPC t mt 时间 SPC t md 日期 SPC t mT 状态栏 SPC t mv 版本控制 SPC t 8 高亮指定列后的所有字符 SPC t f 高亮指定列字符 SPC t s 语法检查 SPC t S 拼写检查 SPC T SPC T ~ 显示/隐藏Buf.... Spacevim快捷键 SpaceVim
月明船笛参差起,风定池莲自在香。 微凉的晚风拂起千百片树叶,微微颤动像与你暗送秋波,路边沟渠还未蒸发的水面浮现出各色的灯光,偶尔传来碰杯的声音,清晰可嗅的羊肉味儿,淡妆浓抹风姿绰约的女人和女孩儿们。寂静怡人不失迷人诱惑的夏天终于又来了。 2020年五月31日,周日,晚10点03分。倚于清风台,弹指送千波。 如梦幻泡影,如露亦如电,描述今年,可能最合适不过了。八分梦幻,二分惊叹。平地惊雷一般磨难便迎面而来。 有利有弊,于个人言这是一场短暂又漫长的假期,于公司可能会砸了众人的饭碗。 专业上有所精进,学习了一门新语言google golang,不得不说脚本语言真快乐,相比而下java像是老爷车。 工作上在这段特殊的日子里,也用自己的能力做出了一点点微小的贡献吧,完成了 数据填报 的一些功能,不足之处在于,想的太大,做的太少,时间仓促,不太牢靠。 生活上,留了一些时间出来,去市场买菜,学习了更多样式的菜。 补了类斯里兰卡,红帆,傲慢与偏见等欧洲老电影,也拿出了泡面用的kindle重读了挪威的森林和人间失格,日本作家大多极致浪漫,极端主义路线较多,十分入骨毫不留情,这是十分吸引人的地方。而中国作.... 二零二零五月记 总结
WorkFlow GithubWorkFlow就是git自带的CI服务 WorkFlow文件 name: Greet Everyone # 事件 on: [push] # 工作集合 jobs: build: # 作业名称为 Greeting name: Greeting # 此作业在 Linux 上运行,runs-on选项一共就有几种类型 runs-on: ubuntu-latest steps: # 此步骤使用 GitHub 的 hello-world-javascript-action:https://github.com/actions/hello-world-javascript-action - name: Hello world uses: actions/hello-world-javascript-action@v1 with: who-to-greet: 'Mona the Octocat' id: hello # 此步骤打印上一步操作的输出(时间)。 - name: Echo the greeting's time run: echo 'The time was $.... GitHub Action GitHub
BREW_REPO="https://mirrors.ustc.edu.cn/brew.git" cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc.edu.cn/brew.git cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git cd "$(brew --repo)"/Library/Taps/homebrew/homebrew-cask git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git brew update BREW换源 Brew
Cobra // Copyright © 2015 Steve Francia <spf@spf13.com>. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or .... 解析cobra Go
只是整理知识点,所有内容来自 http://docs.kubernetes.org.cn/251.html,如有侵权请发送邮件通知删除 架构 K8s 主要组件 etcd: 保存集群状态 apiserver: 所有资源操作入口,认证授权,访问控制,API注册,服务发现 controller-manager: 维护集群状态,故障检测,自动扩展,滚动更新 scheduler: 资源调度 kubelet: 维护容器的生命周期,CVI和CNI管理 cri: 镜像管理和pod运行 kube-proxy: 为Service提供cluster服务发现和负载均衡 K8s addons kube-dns: 集群dns服务,多用cni IngressController: 外网入口 Heapster: 资源监控 Dashboard: GUI Federation: 跨区用集群 Fluentd-elasticsearch: 日志采集存储查询 分层架构 核心层:Kubernetes 最核心的功能,对外提供 API 构建高层的应用,对内提供插件式应用执行环境 应用层:部署(无状态应用、有状态应用、批处.... kubernetes文档知识点个人总结 k8s
#!/bin/bash # 是否输出错误信息 /opt/kubernetes/server/bin/kube-scheduler --logtostderr false \ # 日志级别 --v 2 \ # 日志目录 --log-dir /opt/kubernetes/logs \ # 自动找主节点 --leader-elect true \ # apiserver地址 --master 127.0.0.1:8080 \ # 服务监听地址 --address 127.0.0.1 K8S-Scheduler 启动脚本 k8s
#!/bin/bash // 错误是否输出 /opt/kubernetes/server/bin/kube-controller-manager --logtostderr false // 日志级别 --v 2 // log目录 --log-dir /opt/kubernetes/logs // 多个APIServer自动选择一个调度 --leader-elect true // 指定APIServer的API地址 --master 127.0.0.1:8080 // 服务监听地址 --address 127.0.0.1 // 是否支持网络插件 --allocate-node-cidrs true // 基于插件分配网段地址 --cluster-cidr 10.244.0.0/16 // 客户端分配地址的范围 --service-cluster-ip-range 10.0.0.0/24 --cluster-signing-cert-file /opt/ssl/k8sca/ca.pem --cluster-signing-key-file /opt/ssl/k8sca/ca-key.p.... K8S-Controller-Manager启动脚本 k8s
#!/bin/bash /opt/kubernetes/server/bin/kube-apiserver # 是否打印错误信息 --logtostderr false # 日志级别 --v 2 # 日志目录 --log-dir /opt/kubernetes/logs # etcd的地址 --etcd-servers https://192.168.111.119:2379,https://192.168.111.99:2379,https://192.168.111.109:2379 # 本服务,APIServer的地址 --bind-address 192.168.111.119 # 本服务端口 --secure-port 6443 # 广播地址 --advertise-address 192.168.111.119 # 是否 使用超级管理员权限创建容器 --allow-privileged true # 启动Service时生成的虚拟网段 --service-cluster-ip-range 10.0.0.0/24 # 开启插件 --enable-admission-plugi.... K8S-API-SEVER 启动脚本 k8s
那就请使用这个Command吧 由于Github Release 下载下来只有 etcd 和 etcdctl 并没有 配置文件 和 systemctl.service 所以迫不得已写了个命令行,贴出来已备后用 #!/bin/bash // name 请改成当前节点 etcd的name // etcd 命令请指定到自己的目录 // ip地址请改成自己的地址 // pem证书目录请改成自己的目录 /opt/etcd/etcd --name etcd-1 \ --data-dir var/lib/etcd/default.etcd \ --listen-peer-urls https://192.168.1.109:2380 \ --listen-client-urls https://192.168.1.109:2379,http://127.0.0.1:2379 \ --advertise-client-urls https://192.168.1.109:2379 \ --initial-advertise-peer-urls https://192.168.1.109:2380 \ .... K8S-ETCD 启动脚本 k8s
安装 chrony yum install chrony -y 修改配置文件 vim /etc/chrony.config master // 这里 写Master节点的地址 server 111.111.111.111 iburst # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. makestep 1.0 3 rtcsync # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # th..... 关于Centos集群时间同步 运维
1.大家好今天带大家快速了解一下 Gin 框架 2.Gin 是什么 Gin 是 基于 Go 语言的一个 HttpServer 函数库。俗称 MVC 框架? 3.为什么使用 Gin 因为想用,所以就用! 4.如何使用 Gin 呢 首先 引入 github.com/gin-gonic/gin ! 然后 在 main 函数中写入! r := gin.Default() r.GET("/ping", func(context *gin.Context) { context.JSON(200, gin.H{ "message": "Pong", }) }) r.Run() 最后 go run main.go! 这样 Gin 框架就会开启 Web 服务器了! Gin 框架默认端口是 8080! 5.如何测试是否启动 首先 打开我们的 谷歌 浏览器! 然后找到 地址栏! 然后输入 http://localhost:8080/ping! 然后查看页面是否不是 HTTP404! 最后查看页面是否显示 PONG! 这样我们就完成最简单的 Gin 框架使用和测试了! 6.功能 Example 首先 我们放..... Gin 快速预览《老铁版》 Go