rust book 学习笔记
19-07-12 -> 19-08-15
Hell world
开始 & 安装
curl https://sh.rustup.rs -sSf | sh
网络真的是僵硬,下载下一年, 我用远端服务器就很快下了 真是艹了,我在远端 都跟着教程看了两章+尝试demo了,本地的build下载还没下好
国内的话 配置~/.cargo/config
如下会稍微快一些,吐槽
1 | [registry] |
更新 上面不能用的话看这里 https://lug.ustc.edu.cn/wiki/mirrors/help/rust-crates
IDE/vim配置
我是用的vim
+ spf13-vim
上加自己配置的 ~/.vimrc.local
1 | function CompileByFileType() |
其它的话 据说Clion
+ rust插件
不错
入门命令
rustup docs --book
66666 题外话,我觉得现代的游戏 除了游戏本身还需要 背景,目标玩家定位,目标游戏类型定位,以及自身完备性和营销。自身完备性比如观战,历史记录等,去年出的 刀牌 从6万峰值到现在上线就是世界前100,我认为其中缺少的就是完备性。而rust 带一个 这个文档66666
有了教程,那我yyp一点 教程里的总结吧
- 单个rs:
rustc main.rs
- build project using
cargo build
orcargo check
. - build + run a project
cargo run
. - Instead of saving the result of the build in the same directory as our code, Cargo stores it in the
target/debug
directory. - cargo build –release
依赖相关
如果玩过npm可以感觉到和package.json 和对应的lock相似
首先Cargo.toml
中加入需要依赖的库和版本描述,如rand = "0.3.14"
,会匹配能匹配的某个版本
然后cargo build
Cargo.lock
会保存首次build的各个库的版本
如果希望升级cargo update
基本语法+写一个猜测数游戏
猜数
依赖
jenkins 入门尝试
Why
作为被factorio洗脑的人 看到 自动化 自动化 自动化 就会激动
Steps
首先你需要 java 8(jre/jdk),docker
这两个我之前都安装过了
然后下载jenkins: https://jenkins.io/zh/download/
运行命令java -jar jenkins.war --httpPort=8080
打开网页http://localhost:8080
输入终端里展示的密码 –> 下一步 –> 等待安装git等一系列工具 –> 创建管理员用户`–> 实例配置(我发现有不少网页开发工具都有意无意的避开了8080端口 这里我直接默认) –>开始使用
我这边最后一步以后白屏了,但是从Network看似乎没有资源卡着,于是我把服务先杀掉再启动一遍,可以进入jenkins了23333
Hell world
单击 New Item
vsc extension 入门尝试
开始 & 安装
文档
https://code.visualstudio.com/api/get-started/your-first-extension
https://github.com/microsoft/vscode-extension-samples
install & Run
1 | npm install -g yo generator-code |
选择你希望的选项
code ./新建目录
按F5
启动
按Ctrl+Shift+P
输入Hello world
回车
当你修改了代码后,在新打开的窗口Ctrl+Shift+P
再输入Reload Window
就重新加载了代码
解剖
看package.json
注册
onCommand
Activation Event:onCommand:extension.helloWorld
,so the extension becomes activated when user runs theHello World
command.使用
contributes.commands
Contribution Point 来让Hello World
命令 在Command Palette 可用,并且绑定到命令idextension.helloWorld
使用
commands.registerCommand
的VS Code API绑定到已注册的命令IDextension.helloWorld
Activation Events: events upon which your extension becomes active.
Contribution Points: static declarations that you make in the package.json Extension Manifest to extend VS Code.
VS Code API: 代码中API,可以在你的extension代码中调起
其它配置文件
launch.json
used to configure VS Code Debuggingtasks.json
for defining VS Code Taskstsconfig.json
consult the TypeScript Handbook
package.json
vsc使用 <publisher>.<name>
作为一个插件的unique ID
tree-view
emmmmmm 看了一会代码 发现有文档 https://code.visualstudio.com/api/extension-guides/tree-view
直接看文档吧…
gitlab server 搭建
Why
可以在私有环境下使用。如果想用非私有,现成的,可以考虑https://github.com 或 https://gitlab.com
手工安装 docker-ce
安装依赖
1 | sudo apt install ca-certificates curl openssh-server postfix |
安装 gitlab-ce
1 | curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash |
注: 国内有不少镜像源 例如https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
,国内镜像会快很多,可以替换上面生成的/etc/apt/sources.list.d/gitlab_gitlab-ce.list
中的路径
sudo gitlab-ctl reconfigure
按理说这里就可以用了
你需要设置root的密码,和新建一个用户以及(设置该用户的密码)
配置
然而 因为我本地apache服务和原来开启的nginx服务,有80冲突和原来nginx服务冲突(?),导致我找问题找了很久很久[我似乎也没看到报错
修改
sudo vim /etc/gitlab/gitlab.rb
中的external_url
为你的domain名称+port,如http://192.168.1.51:8081
最后我停掉两个服务再重启 gitlab
就好了
1 | /* 未使用了 如果本身还有nginx据说可以配一下 |
gitlab on docker
1 | sudo docker run --detach --name gitlab \ |
好了 ssh 30022和http 30080都ok,docker真香了
https://developer.ibm.com/code/2017/07/13/step-step-guide-running-gitlab-ce-docker/
https://docs.gitlab.com/omnibus/docker/README.html
问题:仓库通过ssh的git clone报错
http
的clone
可用
而ssh
的clone
报错: fatal: protocol error: bad line length character: Welc
gihub上很多说sed -i 's/session\s\+required\s\+pam_loginuid.so/# \0/' /etc/pam.d/sshd
就是注释掉 也没用(也restart 过)
问题排查
网上有很多 pam的 校验关闭都没有用
然后 通过ssh -vvv git@<ip>
得到Exit status 254
,对应也是没有搜到可行方案,但感觉距离问题近了些
查看/var/log/auth.log
发现
1 | Aug 20 14:24:03 RBEST systemd: pam_unix(systemd-user:session): session opened for user git by (uid=0) |
这个error也搜不到对应的
鸽了! 用 docker来搞
docker的方法测试
ssh -vvv git@gitlab.example.com -p 30022
的exit code 是0 所以感觉还是 本地的ssh相关的东西配置有问题
修复(重装试试)
上面我得到的信息是
- ssh git@应该是成功登录了 但是没有和gitlab联系上
- docker里看 只用简单配置 就应该能用
- 我尝试新开了个空白虚拟机,装一遍gitlab是能用的
于是按照https://askubuntu.com/a/824723/653605把 gitlab完全删除 再重装就好了?喵喵喵,虽然现在能用了,可是之前究竟是什么问题。
TODO email
https://docs.gitlab.com/omnibus/settings/nginx.html
权限管理
权限管理 https://docs.gitlab.com/ee/administration/#user-settings-and-permissions
用root权限用户登陆
<你的地址>/admin/application_settings
可见和可访问性
的Restricted visibility levelsx限制为 内部和私有
关闭了为所有项目默认 runner和默认CI/CD
HTTPS
/etc/gitlab/gitlab.rb
设置
external_url 'https://gitlab.xxx.com'
以及
1 | letsencrypt['enable'] = true |
再gitlab-ctl reconfigure
就可以自动生成证书并且 启用https了
内存占用过大
1 | unicorn['worker_timeout'] = 60 |
也有其它git server :https://gogs.io/
参考
https://hub.docker.com/r/gitlab/gitlab-ce/
RxJS文档 阅读笔记
知识依赖
- 基本的js语法
- 基本的nodejs用法
- Promise用法
准备工作
我想用nodejs直接跑rxjs,然而它并不支持es6的import,尝试了--experimental-modules
依然有报错
方案1 在线编辑器
https://rxjs-dev.firebaseapp.com/guide/observable
在上面代码点击右上角的Edit in StackBlitx
方案2 nodejs + rxjs + ES6
https://github.com/standard-things/esm
安装:npm install esm rxjs
带上esm
运行
node -r esm index.js
方案3 webpack + rxjs + ES6
创建文件夹 并初始化
1 | mkdir rxjsdemo && cd rxjsdemo |
这样选择
1 | ? Will your application have multiple bundles? No |
然后运行
1 | npm install --save-dev rxjs |
1 | import { Subject } from 'rxjs'; |
运行npm start
在打开的网页查看console
是否正常输出, 忽略红字,能输出如下即可
1 | observerA: 1 |
webpack文档 阅读笔记
参考
https://webpack.js.org/concepts/
警告!虽然有.com
的中文文档,但是存在没有更新文档的问题,不是webpack4版本的文档!!例如CommonsChunkPlugin已经被弃用,CleanWebpackPlugin的引入和使用方法不同版本不同
核心概念
入口entry
对应配置中的entry
属性
如webpack.config.js
1 | module.exports = { |
常见 分离应用程序和三方库入口
1 | const config = { |
根据经验:每个 HTML 文档只使用一个入口起点。多页面应用
1 | const config = { |
注意 以上都可以用CommonsChunkPlugin
来优化公用代码
输出output
在哪里输出所建立的bundles以及命名
vue声明式交互能力 & vue3.0 进展
参考
https://www.bilibili.com/video/av37345007?from=search&seid=12943305398860809438
https://www.bilibili.com/video/av55286346?from=search&seid=13529674123410117444
吹什么
vue的 声明式写法,最常见讲是computed
比如0 js代码
,直接组件实现 阶乘,斐波那契数列的计算
和 命令式相比,
历史发展向讲解
就 应用程序 实体举例
跨语言啊交互举例 recycle-list
简单说 原来的命令式 比较常用的是 事件->执行的代码
现在 实现 大概是 数据 = 构成来源
vue3
chrome devTools 周活用户90万 / react的160万
what’s target?
material学习
参考
https://material.io/collections/developer-tutorials/#web
很早就有人说过了material,不过在那时,1是不太能阅读英文文档,2是没有实际的需要,也没有要用的想法,没有阅读
下面是个人整理 (大概需要的前置知识 node基本+html+js+css
是什么
跨平台,好看的,google出的ui标准
demo
git clone https://github.com/material-components/material-components-web-codelabs
安装所有ui
npm install material-components-web
从文档和操作上来看 需要做3件事
- 引入css 如
@import "@material/textfield/mdc-text-field";
- 在html的元素上 给对应的class
- js里引入组件和 对相应元素进行处理,如下
1 | import {MDCTextField} from '@material/textfield'; |
demo101 102里介绍了 输入框,按钮,图片,列表
然后103 介绍了一些,theme(例如主题颜色),subtitle(typography),elevation(实际是阴影效果 用来让页面元素有高低感觉),mdc-image-list--masonry
非等长图片排列
demo111 介绍了,如何对一个原来写过的原始工程,修改成Material Components的样式(基本就是 npm引入,js引入,css引入,换class,加js
demo112 介绍了一个react工程上 改为material components
最后 目前看下来 angular+material 最多star的是https://material.angular.io
TDD 测试驱动开发
参考
https://www.cigniti.com/blog/7-best-practices-for-agile-test-driven-development/
避免过于复杂的函数
保持每个函数 自扫门前雪,与团队讨论保证每个测试用例覆盖了所有期望的函数功能
聚焦于你真正需要实现的
测试用例要清晰描述 期望的 最终实现的功能,并按照这个原则编写。
Maintain code austerity
在通过测试样例的前提下,尽可能保持代码可读,可迭代。
Test repeatedly
…编写过程中持续测试,CI等工具都可以
Maintain code sanctity
用git,Jenkins等工具…….?????
Application knowledge
文档维护,
In TDD, coding needs to be limited but effective in that it achieves its purpose without breaking anything else. Also, the new code should ideally pass the test case in the very first run. Maintaining adequate system documentation, including a repository of test cases and engaging team members with good application knowledge can ensure a smooth and successful project execution.
Know when to use TDD
任何延长或复杂的测试都会破坏TDD的目的。
TDD rules
你不被允许编写任何让单元测试挂掉的代码
Write only enough of a unit test to fail.
Write only enough production code to make the failing unit test pass.
就是说,不论是测试代码还是业务代码,都是足量,但又尽量少,【例子 红绿灯
red phase
首先 写一些 用户会需要的 ’需求‘ 而不是 ’测试‘
所以 你考虑的角度是类似BDD(行为驱动开发)的,你会在开发前首先写代码,假设它已经完成了
这个阶段你需要考虑代码的出入参数 如何被使用,需要注意的是再该阶段 关注你核心需要的,而不是写大量的
green phase
编码
注意的是,这部分主要关注的是按照 red phase部分的 代码,实现,在这部分,不需要过度关注 性能,代码复用,也不要改测试
代码的优化应该在todolist 或 重构的时候清理 整理
但你应该写 直接实现,且可迭代的代码
新的feature只要还没有测试,就不应该先实现
refactor phase
代码抽象 去重 等等
Final considerations Q&A
TDD 需要很多 多于普通编码的时间
当你熟练了 不会多很多,而在后续的持续开发中,将省时间
需要写多少
足够你测试开发的代码,的最少量,因为每个测试都会拖慢重构,但重构需要测试来支撑
分析设计框架
你依然需要,TDD无法替代,在TDD之前,应该先分析设计。
这个是我具体实践起来感觉 很重要也有难度的,如果你对业务和功能,没有实践过,那么你可能分析得设计得不全面,这样的情况下你的测试样例也实现的 有缺失。一个可能就是编码的过程可能发现测试不够,这样一个办法就是继续走cycle再改。而我之前的写python的实践时,就直接把测试ban掉了XD。还是走了先代码后测试的老路
100% coverage
不必,视图等常变的微量逻辑毫无必要写TDD测试
TDD 在examples上 工作得号,但实际代码上 很多代码未被测试
emmmmmmm….. 作者用TDD方法 写了一个俄罗斯方块
TDD 谁来写
这里的观点是TDD是开发写,而真正的测试
是测试人员来写