OKR

“OKR” OKR (Objectives and Key Results) https://www.infoq.cn/profile/1218094/publish https://www.infoq.cn/article/Vl2uK8owDjj1pJG6ZrDD https://www.infoq.cn/article/Z3LA3We5qKcfsqTUrHSG 蝴蝶效应: 一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国得克萨斯州的一场龙卷风。蝴蝶效应意味着世界处于混沌状态,事务之间的联系错综复杂,不可掌控。 典型的就是"一个香港人在台湾杀了自己的女友,导致在中国看不了 NBA 比赛"。 黑天鹅: 在发现澳大利亚之前,欧洲人认为所有天鹅都是白色的,还常用"黑天鹅"来指不可能存在的事物。但欧洲人这个信念却随着第一只黑天鹅的出现而崩溃。因为,黑天鹅的存在代表不可预测的重大稀有事件,意料之外却又改变一切。黑天鹅意味着极小概率事件带来的大影响。 典型的就是"非典 SARS"、“新冠状病毒"这样的极小概率的跨界病毒感染和传播带来的巨大影响。 灰犀牛: 灰犀牛体型笨重、反应迟缓,你能看见它在远处,却毫不在意,一旦它向你狂奔而来,定会让你猝不及防,直接被扑倒在地。它并不神秘,却更危险。灰犀牛意味这经常被提示却没有得到充分重视的大概率风险事件。 日常的学习和工作中,我们经常会看到: 想要的太多,从而使得精力和资源比较分散 分不清楚优先级 / 价值,总是被低优先级 / 价值的事情干扰 被紧急的事情占用了太多时间,重要的事情没时间做 《管理 3.0》 (Jurgen Appelo) 中"激励员工"是其六大支柱之一,Jurgen 把内在动力总结为 10 个因素,我们称为"冠军蛙"CHAMP-FROGS: Curiosity (好奇) : 思考的需要 Honor (荣誉) : 受团队尊重的需要 Acceptance (认可) : 被认同的需要 Mastery (能力) : 感到胜任的需要 Power (权力) : 有影响的需要 Freedom (自由) : 感受到独立的需要 Relatedness (关系) : 朋友的需要 Order (有序) : 稳定环境的需要 Goal (目的) : 意义的需要 Status (地位) : 社会地位的需要

2020-06-06 · 1 min · 76 words · -

letsencrypt, certbot, certbot-auto, acme.sh

“letsencrypt, certbot, certbot-auto, acme.sh” certbot, certbot-auto, acme.sh certbot: recommended by the official website. certbot-auto: no longer supported. acme.sh: 第三方的 acme 协议实现. install certbot almalinux pip sudo dnf install python3 augeas-libs sudo dnf remove certbot python3 -m venv /opt/certbot/ /opt/certbot/bin/pip install --upgrade pip /opt/certbot/bin/pip install certbot certbot-nginx ln -s /opt/certbot/bin/certbot /usr/bin/certbot archlinux pacman -S certbot ubuntu # 不推荐用这种方式安装, 版本太旧 sudo apt install certbot # 如果以前安装过, 先卸载掉再安装 snap 版本 sudo apt-get remove certbot sudo apt update # for ubuntu snap is pre-installed sudo apt install snapd sudo snap install core sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot snap set certbot trust-plugin-with-root=ok # 如果在使用 google dns, 需要安装这个包 snap install certbot-dns-google certonly # certonly: do not install, 不安装到 nginx, 因为 nginx 在 docker 里, 所以这里用 certonly # -m: provide email # --agree-tos: tos yes # --eff-email: share email yes # --keep-until-expiring: keep cert yes certbot certonly --standalone -m wiloon.wy@gmail.com --agree-tos --eff-email --keep-until-expiring \ -d wiloon.com -d bitwarden.wiloon.com certbot certonly --standalone -m wiloon.wy@gmail.com --agree-tos --eff-email --keep-until-expiring -d wangyue.dev # list all certificates issued by certbot certbot certificates # select and delete certificates certbot delete # for google dns certbot certonly --dns-google --dns-google-credentials /root/cellular-deck-280204-6455aa19691d.json -d wiloon.com -d *.wiloon.com commands # 查看证书, 查看已经安装的证书 certbot certificates centos dnf update dnf remove certbot dnf install epel-release dnf install snapd systemctl enable --now snapd.socket snap install core snap refresh core ln -s /var/lib/snapd/snap /snap snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot snap set certbot trust-plugin-with-root=ok snap install certbot-dns-google Couldn’t download https://raw.githubusercontent.com/certbot/certbot/v0.39.0/letsencrypt-auto-source/letsencrypt-auto. [urlopen error [Errno 110] Connection timed out](urlopen error [Errno 110] Connection timed out) ...

2020-06-04 · 3 min · 542 words · -

渐进式框架

“渐进式框架” https://www.zhihu.com/question/51907207 渐进式框架的大概意思就是你可以只用我的一部分,而不是用了我这一点就必须用我的所有部分。 渐进式代表的含义是: 主张最少。 Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: - 必须使用它的模块机制 - 必须使用它的依赖注入 - 必须使用它的特殊形式定义组件 (这一点每个视图框架都有,难以避免) React,它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。 vue是渐进的,没有强主张,你可以在原有大系统的上面,把一两个组件改用它实现,当jQuery用;也可以整个用它全家桶开发,当Angular用;还可以用它的视图,搭配你自己设计的整个下层用。你可以在底层数据逻辑的地方用OO和设计模式的那套理念,也可以函数式,都可以,它只是个轻量视图而已,只做了自己该做的事,没有做不该做的事,仅此而已。 渐进式的含义,我的理解是: 没有多做职责之外的事。 作者: 徐飞 链接: https://www.zhihu.com/question/51907207/answer/136559185 来源: 知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-06-02 · 1 min · 24 words · -

DKMS

“DKMS” DKMS 我们都知道,如果要使用没有集成到内核之中的Linux驱动程序需要手动编译。当然,这并不是一件什么难事,即使是对于没有编程经验的Linux使用者,只要稍微有点hacker的意识,努力看看代码包里的Readme或者INSTALL文件,按部就班的执行几条命令还是很容易办到的。但这里还有一个问题,Linux模块和内核是有依赖关系的,如果遇到因为发行版更新造成的内核版本的变动,之前编译的模块是无法继续使用的,我们只能手动再编译一遍。这样重复的操作有些繁琐且是反生产力的,而对于没有内核编程经验的使用者来说可能会造成一些困扰,使用者搞不清楚为什么更新系统之后,原来用的好好的驱动程序突然就不能用了。这里,就是Dell创建的DKMS项目的意义所在。DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。 https://www.cnblogs.com/wwang/archive/2011/06/21/2085571.html https://www.cnblogs.com/wwang/archive/2011/06/21/2085571.html

2020-05-30 · 1 min · 8 words · -

vue-router的两种模式

“vue-router的两种模式” 为什么要有 hash 和 history 对于 Vue 这类渐进式前端开发框架,为了构建 **SPA (单页面应用) **,需要引入前端路由系统,这也就是 Vue-Router 存在的意义。前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求。 为了达到这一目的,浏览器当前提供了以下两种支持: hash —— 即地址栏 URL 中的 # 符号 (此 hash 不是密码学里的散列运算) 。 比如这个 URL: http://www.abc.com/#/hello,hash 的值为 #/hello。它的特点在于: hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。 history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。 (需要特定浏览器支持) 这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。 因此可以说,hash 模式和 history 模式都属于浏览器自身的特性,Vue-Router 只是利用了这两个特性 (通过调用浏览器提供的接口) 来实现前端路由。 使用场景 一般场景下,hash 和 history 都可以,除非你更在意颜值,# 符号夹杂在 URL 里看起来确实有些不太美丽。 ...

2020-05-24 · 1 min · 189 words · -

敏捷开发,瀑布开发

“敏捷开发,瀑布开发” 敏捷开发 客人到餐馆来点菜 (新项目) 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单 (客户往往提不出具体的需求) 根据图文菜单,客人点了是个菜 (根据原型和设计稿,基本确定了需求) 后厨开始准备 (项目启动) 配菜、炒菜,先上了两盘,让客人尝了尝味道 (先提供可用实例给客户用) 客人说还不错,后厨继续准备后面的菜,陆续上菜 (不断迭代,不断测试) 上菜过程中,客人突然发现有个菜的味道太淡了,让后厨加了点盐又端上来了 (敏捷的好处,可以不断测试和需求变更) 又上了两盘,不够辣,又拿到后厨加了辣 (敏捷的坏处,需求没有提前明确,反复迭代,增加了工作量) 到最后两盘时,客人要求换两个菜,还好没炒 (迭代的好处,随时接受需求变更) 客人吃完,很满意 (基本满足了全部的要求) (在举个例子) 打个比方,客户说他想要造一座金字塔,你作为"咨询师",认为这座金字塔要造10年,肯定不能指望一次设计好就一口气做完,于是问客户这个金字塔是要干什么?客户说要当坟墓,于是,你提出先做一个小坟墓的功能,能装木乃伊那种。客户同意了,你哐哧哐哧做了一个月,制造了一个小型地下墓室,演示给客户看,客户看了,一拍大腿,说看到这个墓室才想明白,其实他要的不是金字塔,要的是一个有排场的墓地,这样简陋埋在地下的墓室不够牛逼,于是你和客户达成第二阶段设计,做一个带兵马俑方阵来让这个墓地显得有排场,客户同意了,于是你又哐哧哐哧做了一个月,做了一个小型兵马俑方阵。客户看了兵马俑方阵,又一拍大腿,说这个方阵还真牛逼,但是能不能增加一些现代元素,把古代兵马俑换成现代装甲兵团,你于是又…… (如此,周而复始,每个阶段只完成客户一个需要,当然,我上面只是一个荒诞的例子,但是你应该能够get到敏捷的含义。) 瀑布模型开发 客人到餐馆来点菜 (新项目) 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单 (客户往往提不出具体的需求) 根据图文菜单,客人点了十个菜 (根据原型和设计稿,基本确定了需求) 后厨开始准备 (项目启动) 根据客人的下单配菜,炒菜 (基本上不会主动去了解完整需求) 半个小时了,菜还没上桌,客人饿极了 (项目启动后很长一段时间客户什么都看不到) 再过了二十分钟,十个菜都一起上来了 (项目最终一次交付) 客人说,有几个菜挺好的,但是有个菜味道淡了,有两个不够辣,还有两盘重复了想换掉 (我是买单的,我- 要变需求) 这时候大堂经理来了,说,“味道淡了可以加盐,不辣可以加辣,但是换菜不行,已经炒好的那两盘菜也是要算成本的” (瀑布的坏处,需求变更比较麻烦) 于是,后厨只给客户加了盐,加了辣 客人吃完,不是很满意,下次不来了 (没有满足需求) 总结 但总的来说,在现在管理项目过程中,并没有严格的按照完全的敏捷或者完全的瀑布模式,都是各自掺杂了其他的方式。在实际项目过程中,过于强调模式并没有意义,重要的是能不能预防问题的发生,在问题发生之后能不能用最小的成本解决,模式更多起一个参考作用 最后借用民国时候的一句话: 少研究一些主义,多关注一些实际问题 (net) 作者: zhaur 链接: https://www.jianshu.com/p/ca5f242cf2bb 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-05-23 · 1 min · 60 words · -

JWT, session

“JWT, session” github.com/golang-jwt/jwt 背景知识: Authentication和Authorization的区别 Authentication: 用户认证,指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码确认你真的是小A。 Authorization: 授权,指的是确认你的身份之后提供给你权限,例如用户小A可以修改数据,而用户小B只能阅读数据。 由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。 目前主流的用户认证方法有基于token和基于session两种方式。 JWT和session ID也会暴露于未经防范的重放攻击 将JWT发布到特定的IP地址并使用浏览器指纹。 Local Storage 无状态 JWT (Stateless JWT) : 包含 Session 数据的 JWT Token。Session 数据将被直接编码进 Token 内。 有状态 JWT (Stateful JWT) : 包含 Session 引用或其 ID 的 JWT Token。Session 数据存储在服务端。 Session token (又称 Session cookie) : 标准的、可被签名的 Session ID,例如各类 Web 框架 (译者注: 包括 Laravel) 内已经使用了很久的 Session 机制。Session 数据同样存储在服务端。 ———————————————— 原文作者: Wi1dcard 转自链接: https://learnku.com/articles/22616 版权声明: 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。 https://juejin.im/post/5a437441f265da43294e54c3 聊一聊JWT与session 前言 认证和授权,其实吧简单来说就是:认证就是让服务器知道你是谁,授权就是服务器让你知道你什么能干,什么不能干,认证授权俩种方式: Session-Cookie与JWT,下面我们就针对这两种方案就行阐述。 ...

2020-05-23 · 3 min · 529 words · -

企业微信api

“企业微信api” REDIRECT_URL中的域名,需要先配置至应用的"可信域名"

2020-05-23 · 1 min · 2 words · -

chrome 禁用http到https的自动转换

“chrome 禁用http到https的自动转换” Go to chrome://net-internals/#hsts. Enter 3rdrevolution.com under Delete domain security policies and press the Delete button. Now go to chrome://settings/clearBrowserData, tick the box Cached images and files and press click the button Clear data. https://superuser.com/questions/565409/how-to-stop-an-automatic-redirect-from-http-to-https-in-chrome

2020-05-23 · 1 min · 36 words · -

Vue 跨域

Vue 跨域 缘起 最近实验课上需要重构以前写过的一个项目 (垃圾堆) ,需要添加发生邮件提醒的功能,记得以前写过一个PHP版的实现,所以想把PHP写的功能整理成一个服务,然后在前端调用。但是这个项目是JavaWeb,也就是说我需要面对跨域的问题。不过本篇文章,讲的并不是如何解决这样的跨域问题,而是我在找如何解决这个问题的路上遇到的坑。 其实,在前端工程化大行其道的现在,前后端已经分离开来,前端为了提高工作流效率往往自己开一个小型的服务器,就比如webpack.devServer。这样在前端调用后端接口的时候必然会面临跨域的问题, 如题,Vue-cli 3.x + axios 跨域方案 就是解决这里的跨域问题。这里的跨域是基于webpack的devServer的代理功能 (proxy) 来实现开发环境中的跨域,也就是说本篇所讨论的并不能解决生产环境下的跨域问题,因为webpack.devServer是DevDependencies,一旦打包上线,这个proxy代理就会失效。但是这并不妨碍我们开发中使用跨域来提高开发效率和体验。 开始填坑 其实这个问题解决起来很简单,网上也是很多教程,为了文章完整性,我这里也做一个尽量完备的展示,介绍如何配置Vue-cli 3.x来实现跨域 。 vue.config.js中devServer.proxy 的配置解析 Vue-cli3.x比Vue-cli2.x构建的项目要简化很多,根目录下只有./src和./public文件夹,所以网上很多教程说config目录下的vue.config.js是说的vue-cli 2.x版本。那么对于Vue-cli 3.x版本,构建也很简单,直接在根目录里建一个vue.config.js配置文件就可以了,我们直接看devServer.proxy里的代码: 我这里devServer的地址是: localhost:8080/,需要代理的地址是: localhost/index/phpinfo.php (我自己写的一个测试跨域用的php,返回一个’ok') 下面是根据上面的地址需要配置的proxy对象 module.exports = { devServer: { proxy: { '/api': { target: 'http://192.168.80.2:38081', ws: true, changeOrigin: true, pathRewrite: { '^/api': '' } } } } } # main.ts axios.defaults.baseURL = '/api' 大部分教程到这里就停止了,但是我在这里做一个扩展,为了让读者理解这里的配置是如何起作用的 (以下内容整理自http-proxy-middleware的npm描述里,http-proxy-middleware是一个npm模块,是proxy的底层原理实现) 。 foo://example.com:8042/over/there?name=ferret#nose _/ ______________/_________/ _________/ __/ | | | | | scheme authority path query fragment 复制代码 以我上面的配置为例,'/index'这个key在http-proxy-middleware中被称为context——用来决定哪些请求需要被target对应的主机地址 (这里是http://localhost/index) 代理,它可以是 字符串,含有通配符的字符串,或是一个数组,分别对应于path matching(路径匹配)wildcard path matching(通配符路径匹配)multiple path matching(多路径匹配),而这里的path指的就是上图所标识的path段。 ...

2020-05-22 · 1 min · 191 words · -

内联样式

“内联样式” CSS 样式代码插入的形式来看基本可以分为以下3种: 内联式、嵌入式和外部式三种。 内联式css样式表就是把css代码直接写在现有的HTML标签中,如下面代码: 这里文字是红色。 注意要写在元素的开始标签里,下面这种写法是错误的: 这里文字是红色。 并且css样式代码要写在style=““双引号中,如果有多条css样式代码设置可以写在一起,中间用分号隔开。如下代码: 这里文字是红色。 作者: LvyCode 链接: https://www.jianshu.com/p/16b40c7a479a 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-05-21 · 1 min · 17 words · -

Lodash

“Lodash” Lodash是一个著名的javascript原生库,不需要引入其他第三方依赖。是一个意在提高开发者效率,提高JS原生方法性能的JS库。简单的说就是,很多方法lodash已经帮你写好了,直接调用就行,不用自己费尽心思去写了,而且可以统一方法的一致性。Lodash使用了一个简单的 _ 符号,就像Jquery的 $ 一样,十分简洁。 类似的还有Underscore.js和Lazy.js 作者: 戈德斯文 链接: https://www.jianshu.com/p/d46abfa4ddc9 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-05-21 · 1 min · 14 words · -

lerna

“lerna” 什么是lerna?为什么要使用lerna? lerna到底是什么呢?lerna官网上是这样描述的。 A tool for managing JavaScript projects with multiple packages. 这个介绍可以说很清晰了,引入lerna后,上面提到的问题不仅迎刃而解,更为开发人员提供了一种管理多packages javascript项目的方式。 自动解决packages之间的依赖关系 通过git 检测文件改动,自动发布 根据git 提交记录,自动生成CHANGELOG 使用lerna的基本工作流 环境配置 Git 在一个lerna工程里,是通过git来进行代码管理的。所以你首先要确保本地有正确的git环境。 如果需要多人协作开发,请先创建正确的git中心仓库的链接。 因此需要你了解基本的git操作,在此不再赘述。 npm仓库 无论你管理的package是要发布到官网还是公司的私有服务器上,都需要正确的仓库地址和用户名。 你可运行下方的命令来检查,本地的npm registry地址是否正确。 npm config ls 复制代码 lerna 你需要全局安装lerna工具。 npm install lerna -g 复制代码 初始化一个lerna工程 在这个例子中,我将在我本地d:/ 根目录下初始化一个lerna工程。 在d:/ 下创建一个空的文件夹,命名为lerna-demo mkdir lerna-demo 复制代码 初始化 通过cmd进入相关目录,进行初始化 cd d:/lerna-demo lerna init 复制代码 执行成功后,目录下将会生成这样的目录结构。 - packages(目录) - lerna.json(配置文件) - package.json(工程描述文件) 复制代码 添加一个测试package 默认情况下,package是放在packages目录下的。 // 进入packages目录 cd d:/lerna-demo/packages // 创建一个packge目录 mkdir module-1 // 进入module-1 package目录 cd module-1 // 初始化一个package npm init -y 复制代码 执行完毕,工程下的目录结构如下 ...

2020-05-16 · 2 min · 245 words · -

tree command, 以树形结构显示文件目录结构, 目录树

tree command, 以树形结构显示文件目录结构, 目录树 # tree -L 3 dir_0 以树形结构显示文件目录结构 sudo pacman -S tree sudo apt-get install tree tree -aI .git tree -I '*svn|*node_module*' Linux tree命令用于以树状图列出目录的内容。 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。 语法 tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] 参数说明: -a 显示所有文件和目录。 -A 使用 ASNI 绘图字符显示树状图而非以 ASCII 字符组合。 -C 在文件和目录清单加上色彩,便于区分各种类型。 -d 显示目录名称而非内容。 -D 列出文件或目录的更改时间。 -f 在每个文件或目录之前,显示完整的相对路径名称。 -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号。 -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。 -i 不以阶梯状列出文件或目录名称。 -L level 限制目录显示层级。 -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。 -n 不在文件和目录清单加上色彩。 -N 直接列出文件和目录名称,包括控制字符。 -p 列出权限标示。 -P<范本样式> 只显示符合范本样式的文件或目录名称。 -q 用”?“号取代控制字符,列出文件和目录名称。 -s 列出文件或目录大小。 -t 用文件和目录的更改时间排序。 -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。 -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。 -I pattern Do not list those files that match the wild-card pattern. https://blog.csdn.net/xuehuafeiwu123/article/details/53817161

2020-05-16 · 1 min · 91 words · -

vue basic

vue basic vue3 npm init vue@latest JSX JSX 的全称是 Javascript and XML,React 发明了 JSX,它是一种可以在 JS 中编写 XML 的语言。 安装vue sudo pacman -S nodejs sudo pacman -S yarn npm install -g @vue/cli yarn global add vue yarn global remove vue-cli yarn global add @vue/cli 用vue cli 创建一个项目, vue create 会创建一个目录 “hello-world” vue create hello-world 或者 使用图形界面 vue ui unit test Jest E2E test Cypress run yarn serve ...

2020-05-16 · 4 min · 728 words · -

OkHttp

“OkHttp” https://github.com/square/okhttp RequestBody body = RequestBody.create(MediaTypeJson, jsonStr0); Request request = new Request.Builder() .url(url0) .post(body) .build(); String resp = null; try (Response response = client.newCall(request).execute()) { resp = response.body().string(); } catch (IOException e) { e.printStackTrace(); } proxy static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8899)); static OkHttpClient client = new OkHttpClient.Builder().proxy(proxy).build(); 1. 历史上Http请求库优缺点 在讲述OkHttp之前, 我们看下没有OkHttp的时代, 我们是如何完成http请求的. 在没有OkHttp的日子, 我们使用HttpURLConnection或者HttpClient. 那么这两者都有什么优缺点呢? 为什么不在继续使用下去呢? HttpClient是Apache基金会的一个开源网络库, 功能十分强大, API数量众多, 但是正是由于庞大的API数量使得我们很难在不破坏兼容性的情况下对它进行升级和扩展, 所以Android团队在提升和优化HttpClient方面的工作态度并不积极. HttpURLConnection是一种多用途, 轻量极的HTTP客户端, 提供的API比较简单, 可以容易地去使用和扩展. 不过在Android 2.2版本之前, HttpURLConnection一直存在着一些令人厌烦的bug. 比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能: ...

2020-05-15 · 1 min · 134 words · W10N

hugo 搜索

“hugo 搜索” Algolia https://www.algolia.com/ https://www.qikqiak.com/post/hugo-integrated-algolia-search/ https://github.com/actions/setup-node https://github.com/replicatedhq/hugo-algolia

2020-05-13 · 1 min · 7 words · W10N

Linux性能测试工具

Linux性能测试工具 uptime uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。 uptime的输出包含一项内容是load average,显示了最近1,5,15分钟的负荷情况。它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,load average值会升高;反之则会降低。 load average的最佳值是1,说明每个进程都可以马上处理并且没有CPU cycles被丢失。对于单CPU的机器,1或者2是可以接受的值;对于多路CPU的机器,load average值可能在8到10之间。 也可以使用uptime命令来判断网络性能。例如,某个网络应用性能很低,通过运行uptime查看服务器的负荷是否很高,如果不是,那么问题应该是网络方面造成的。 dmesg dmesg命令主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。 另外,使用dmesg可以确定您的服务器安装了那些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。执行/bin/dmesg命令可以查看该记录。 top top命令显示处理器的活动状况。缺省情况下,显示占用CPU最多的任务,并且每隔5秒钟做一次刷新。 Process priority的数值决定了CPU处理进程的顺序。LIUNX内核会根据需要调整该数值的大小。nice value局限于priority。priority的值不能低于nice value (nice value值越低,优先级越高) 。您不可以直接修改Process priority的值,但是可以通过调整nice level值来间接地改变Process priority值,然而这一方法并不是所有时候都可用。如果某个进程运行异常的慢,可以通过降低nice level为该进程分配更多的CPU。 iostat iostat由Red Hat Enterprise Linux AS发布。同时iostat也是Sysstat的一部分,可以下载到,网址是http://perso.wanadoo.fr/sebastien.godard/ 执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分: CPU使用情况和磁盘使用情况。 vmstat vmstat提供了processes, memory, paging, block I/O, traps和CPU的活动状况 sar sar是Red Hat Enterprise Linux AS发行的一个工具,同时也是Sysstat工具集的命令之一,可以从以下网址下载: http://perso.wanadoo.fr/sebastien.godard/ sar用于收集、报告或者保存系统活动信息。sar由三个应用组成: sar显示数据、sar1和sar2用于收集和保存数据。 使用sar1和sar2,系统能够配置成自动抓取信息和日志,以备分析使用。配置举例: 在/etc/crontab中添加如下几行内容 同样的,你也可以在命令行方式下使用sar运行实时报告。如图所示: 从收集的信息中,可以得到详细的CPU使用情况(%user, %nice, %system, %idle)、内存页面调度、网络I/O、进程活动、块设备活动、以及interrupts/second KDE System Guard KDE System Guard (KSysguard) 是KDE图形方式的任务管理和性能监视工具。监视本地及远程客户端/服务器架构体系的中的主机。 free /bin/free命令显示所有空闲的和使用的内存数量,包括swap。同时也包含内核使用的缓存。 Traffic-vis Traffic-vis是一套测定哪些主机在IP网进行通信、通信的目标主机以及传输的数据量。并输出纯文本、HTML或者GIF格式的报告。 注: Traffic-vis仅仅适用于SUSE LINUX ENTERPRISE SERVER。 ...

2020-05-10 · 1 min · 78 words · W10N

aws

aws 查看所有区域的资源: ec2>左侧菜单> AWS Global View aws s3 ls s3://obsidian-w10n aws configure aws s3 cp foobar s3://obsidian-w10n https://aws.amazon.com/cli/ SAA, Solution Architect Ass

2020-05-10 · 1 min · 22 words · W10N

macvlan

“macvlan” https://cizixs.com/2017/02/14/network-virtualization-macvlan/ macvlan 是 linux kernel 比较新的特性,可以通过以下方法判断当前系统是否支持: modprobe macvlan lsmod | grep macvlan macvlan 19046 0 macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 interface 有自己独立的 mac 地址,也可以配置上 ip 地址进行通信。macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。macvlan 和 bridge 比较相似,但因为它省去了 bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,macvlan 自身也完美支持 VLAN。 四种模式 private mode: 过滤掉所有来自其他 macvlan 接口的报文,因此不同 macvlan 接口之间无法互相通信 vepa(Virtual Ethernet Port Aggregator) mode: 需要主接口连接的交换机支持 VEPA/802.1Qbg 特性。所有发送出去的报文都会经过交换机,交换机作为再发送到对应的目标地址 (即使目标地址就是主机上的其他 macvlan 接口) ,也就是 hairpin mode 模式,这个模式用在交互机上需要做过滤、统计等功能的场景。 bridge mode: 通过虚拟的交换机讲主接口的所有 macvlan 接口连接在一起,这样的话,不同 macvlan 接口之间能够直接通信,不需要将报文发送到主机之外。这个模式下,主机外是看不到主机上 macvlan interface 之间通信的报文的。 passthru mode: 暂时没有搞清楚这个模式要解决的问题 VEPA 和 passthru 模式下,两个 macvlan 接口之间的通信会经过主接口两次: 第一次是发出的时候,第二次是返回的时候。这样会影响物理接口的宽带,也限制了不同 macvlan 接口之间通信的速度。如果多个 macvlan 接口之间通信比较频繁,对于性能的影响会比较明显。 ...

2020-05-04 · 2 min · 273 words · W10N