angular basic

angular basic install angular install nodejs @see nodejs basic install yarn http://blog.wiloon.com/?p=11228 install angular cli yarn global add @angular/cli yarn add angular-in-memory-web-api –dev ng config -g cli.packageManager yarn add yarn global bin to $PATH angular command 创建工作区 ng new project0 创建组件 ng generate component heroes 创建组件 简写 ng g c heroes ng generate component hero -it 创建service ng generate service hero ng serve –host 0.0.0.0 –port 4200 –open ng build –aot ng build –prod –build-optimizer ...

2017-10-11 · 1 min · 153 words · -

linux history

linux history cat ~/.bash_history 缓存 history -r 读取历史文件并将其内容添加到历史记录中,即重置文件里的内容到内存中.

2017-10-11 · 1 min · 8 words · -

golang struct/结构体

golang struct/结构体 //定义一个struct type Student struct { id int name string address string age int } 匿名结构体 //匿名结构 person := struct { Name string Age int }{Name: "name0", Age: 1} jsonBytes, _ := json.Marshal(person) fmt.Println("person:", string(jsonBytes)) type foo struct { Field0 string `json:"field0"` Field1 struct { Field2 string `json:"field2"` } `json:"field1"` Field3 int `json:"field3"` } https://github.com/jemygraw/TechDoc/blob/master/Go%E8%BD%BB%E6%9D%BE%E5%AD%A6/go_tutorial_8_struct_interface.md https://blog.csdn.net/books1958/article/details/22720033

2017-10-10 · 1 min · 57 words · -

五线谱, 钢琴

五线谱, 钢琴 拍号 4/4: 4分音符为一拍,每一小节有4拍, 可以用C表示 6/8: 8分音符为一拍,每一小节有6拍 连音线 延音线 https://zhidao.baidu.com/question/1769827496564950660.html 连音线是圆滑线和延音线的总称,即连音线有两种,一是延音线,一是圆滑线。 延音线用于连接两个或多个音高相同的音符,演奏时只演奏第一个音符,在延音线下面的其他相同音符就只延长其时值,而不重复按键 (在钢琴上) 或换弓 (在小提琴上) 。 圆滑线用于连接不同音高的音符,意思是要求将圆滑线下面的那些音都无棱角地、光滑地演奏出来。 延音线和圆滑线的形状都是弧线,圆滑线较粗一点。 升降号 https://zhuanlan.zhihu.com/p/31872055 https://zhuanlan.zhihu.com/p/23155564 https://wenku.baidu.com/view/1eea3f34b90d6c85ed3ac604.htm 跳音(Staccato) https://zhuanlan.zhihu.com/p/133957089

2017-10-07 · 1 min · 25 words · -

golang list

golang list package main import ( "container/list" "fmt" ) func main() { l := list.New() //创建一个新的list for i := 0; i < 5; i++ { l.PushBack(i) } printList(l) //输出list的值,01234 fmt.Println("") fmt.Println(l.Front().Value) //输出首部元素的值,0 fmt.Println(l.Back().Value) //输出尾部元素的值,4 l.InsertAfter(6, l.Front()) //首部元素之后插入一个值为6的元素 printList(l) //输出list的值,061234 fmt.Println("") l.MoveBefore(l.Front().Next(), l.Front()) //首部两个元素位置互换 printList(l) //输出list的值,601234 fmt.Println("") l.MoveToFront(l.Back()) //将尾部元素移动到首部 printList(l) //输出list的值,460123 fmt.Println("") l2 := list.New() l2.PushBackList(l) //将l中元素放在l2的末尾 printList(l2) //输出l2的值,460123 fmt.Println("") l.Init() //清空l fmt.Print(l.Len()) //0 printList(l) //输出list的值,无内容 } func printList(l *list.List) { for e := l.Front(); e != nil; e = e.Next() { fmt.Print(e.Value) } } list是一个双向链表。该结构具有链表的所有功能。 ...

2017-10-06 · 2 min · 225 words · -

rename

rename 重命名 rename #files copy-sys-log-01 copy-sys-log-02 rename copy-sys-log-0 copy-app-log-0 copy-sys-log-0* 7000 7001 7002 rename 700 node-700 700* node-7000 node-7001 node-7002 rename + 正则 rename 's/\d{4}-\d{2}-\d{2}-//' *.md 批量重命名 find . -name '*.md' -exec rename 's/\d{4}-\d{2}-\d{2}-//' {} \; http://www.cnblogs.com/longdouhzt/archive/2012/04/30/2477282.html http://blog.51cto.com/jiemian/1846951

2017-09-30 · 1 min · 38 words · -

斜率

斜率 斜率亦称"角系数",表示平面直角坐标系中表示一条直线对横坐标轴的倾斜程度的量。 直线对X 轴的倾斜角α的正切值tgα称为该直线的"斜率",并记作k,k=tgα。规定平行于X轴的直线的斜率为零,平行于Y轴的直线的斜率不存在。对于过两个已知点(x1,y1) 和 (x2,y2)的直线,若x1≠x2,则该直线的斜率为k=(y1-y2)/(x1-x2)。[3] https://baike.baidu.com/item/%E6%96%9C%E7%8E%87

2017-09-29 · 1 min · 7 words · -

Java 7 Phaser

‘Java 7 Phaser’ http://www.oschina.net/question/12_35433 Java 7 引入了一个全新灵活的线程同步机制,名为 Phaser 。 如果你需要等待线程结束然后继续执行其他任务,那么 Phaser 是一个好的选择,接下来我们一步步来介绍 Phaser 的使用: 首先看下面的代码: import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.Phaser; public class PhaserExample { public static void main(String[] args) throws InterruptedException { List tasks = new ArrayList<>(); for (int i = 0; i < 2; i++) { Runnable runnable = new Runnable() { @Override public void run() { int a = 0, b = 1; for (int i = 0; i < 2000000000; i++) { ...

2017-09-27 · 4 min · 786 words · -

shell下批量替换文件名中的空格

shell下批量替换文件名中的空格 http://blog.csdn.net/dliyuedong/article/details/14229121 rename 's/ /_/g' * rename 's/\(/_/g' *

2017-09-22 · 1 min · 9 words · -

TCP_NODELAY, TCP_CORK, Nagle

TCP_NODELAY, TCP_CORK, Nagle TCP/IP之 Nagle 算法与40ms延迟提到了Nagle 算法。这样虽然提高了网络吞吐量, 但是实时性却降低了, 在一些交互性很强的应用程序来说是不允许的, 使用 TCP_NODELAY 选项可以禁止 Nagle 算法。 禁止Nagle 后应用程序向内核递交的每个数据包都会立即发送出去。 但是禁止 Nagle, 网络传输仍然受到 TCP 确认延迟机制的影响。 TCP_CORK CORK 意思是塞子, TCP中的 CORK 意思是将连接塞住, 使得数据先不发出去, 等到拔去塞子后再发出去。 设置该选项后, 内核会尽力把小数据包拼接成一个大的数据包 (一个MTU) 再发送出去, 一定时间后, 内核仍然没有组合成一个 MTU 时也必须发送现有的数据。 然而, TCP_CORK 的实现可能并不像你想象的那么完美, CORK 并不会将连接完全塞住。内核其实并不知道应用层到底什么时候会发送第二批数据用于和第一批数据拼接以达到 MTU 的大小, 因此内核会给出一个时间限制, 在该时间内没有拼接成一个大包 (努力接近 MTU) 的话, 内核就会无条件发送。 也就是说若应用层程序发送小包数据的间隔不够短时, TCP_CORK 就没有一点作用, 反而失去了数据的实时性 (每个小包数据都会延时一定时间再发送,这个时间超过了内核的时间限制) 。 Nagle 算法和 CORK 算法非常类似, 但是它们的着眼点不一样, Nagle 算法主要避免网络因为太多的小包 (协议头的比例非常之大) 而拥塞, 而 CORK 算法则是为了提高网络的利用率,使得总体上协议头占用的比例尽可能的小。如此看来这二者在避免发送小包上是一致的,在用户控制的层面上,Nagle算法完全不受用户socket的控制,你只能简单的设置TCP_NODELAY而禁用它,CORK算法同样也是通过设置或者清除TCP_CORK使能或者禁用之,然而Nagle算法关心的是网络拥塞问题,只要所有的ACK回来则发包,而CORK算法却可以关心内容,在前后数据包发送间隔很短的前提下 (很重要,否则内核会帮你将分散的包发出) ,即使你是分散发送多个小数据包,你也可以通过使能CORK算法将这些内容拼接在一个包内,如果此时用Nagle算法的话,则可能做不到这一点。 Nagle 算法 根据创建者John Nagle命名。该算法用于对缓冲区内的一定数量的消息进行自动连接。该处理过程(称为 Nagling ), 通过减少必须发送的封包的数量, 提高了网络应用 程序系统的效率。Nagle算法, 由Ford Aerospace And Communications Corporation Congestion Control in IP/TCPinternetworks(IETF RFC 896)(1984)定义, 最初是用于缓冲 Ford 的私有 TCP/IP 网络拥塞情况, 不过被广泛传播开来。 ...

2017-09-21 · 2 min · 272 words · -

golang 枚举, enum

golang 枚举, enum 枚举 go 语言并没有提供 enum 的定义,我们可以使用 const 来模拟枚举类型。 type PolicyType int32 const ( Policy_MIN PolicyType = 0 Policy_MAX PolicyType = 1 Policy_MID PolicyType = 2 Policy_AVG PolicyType = 3 ) type LEVEL int32 var logLevel LEVEL = 1 const ( ALL LEVEL = iota DEBUG INFO WARN ERROR FATAL OFF ) int > 枚举 level:=LEVEL(1)) # 1 get string package main import ( "fmt" ) type MyEnum int const ( Foo MyEnum = 1 Bar MyEnum = 2 ) func (e MyEnum) String() string { switch e { case Foo: return "Foo" case Bar: return "Bar" default: return fmt.Sprintf("%d", int(e)) } } type MyStruct struct { Field1 MyEnum field2 MyEnum } func main() { info := &MyStruct{ Field1: MyEnum(1), field2: MyEnum(2), } fmt.Printf("%v\n", MyEnum(1)) fmt.Printf("%v\n", info) fmt.Printf("%+v\n", info) fmt.Printf("%#v\n", info) } 有些概念有名字,并且有时候我们关注这些名字,甚至 (特别) 是在我们代码中。 ...

2017-09-19 · 4 min · 642 words · -

Golang runtime

Golang runtime golang 判断操作系统是 windows 还是 linux http://www.jianshu.com/p/e45cea3e1723 runtime 调度器是个非常有用的东西,关于 runtime 包几个方法: Gosched: 让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行 NumCPU: 返回当前系统的 CPU 核数量 GOMAXPROCS: 设置最大的可同时使用的 CPU 核数 Goexit: 退出当前 goroutine(但是defer语句会照常执行) NumGoroutine: 返回正在执行和排队的任务总数 GOOS: 目标操作系统 NumCPU package main import ( “fmt” “runtime” ) func main() { fmt.Println(“cpus:”, runtime.NumCPU()) fmt.Println(“goroot:”, runtime.GOROOT()) fmt.Println(“archive:”, runtime.GOOS) } 运行结果: GOMAXPROCS Golang 默认所有任务都运行在一个 cpu 核里,如果要在 goroutine 中使用多核,可以使用 runtime.GOMAXPROCS 函数修改,当参数小于 1 时使用默认值。 package main import ( “fmt” “runtime” ) func init() { runtime.GOMAXPROCS(1) } func main() { // 任务逻辑… } Gosched ...

2017-09-11 · 2 min · 214 words · -

contract, 合同

contract, 合同 合同的基本结构和主要条款 《合同法》第十二条、《民法典》第四百七十条规定了“合同应当具备如下内容: 当事人的姓名或者名称和住所; 标的; 数量; 质量; 价款或者报酬; 履行期限、地点和方式; 违约责任; 解决争议的方法。 一般而言,合同只要具备了法律规定的八个内容就是一个内容完备、层次分明的合同,但现实的交易错综复杂,要根据具体的交易安排合同内容。 对一般的小、微经营者而言,可以参照《民法典》合同编中第二分编《典型合同》的规定来确定自己的合同性质和名称。 承揽合同与委托合同 https://www.lawyer5148.com/lhy8297007/vip_doc/1348159.html 民法典 http://www.npc.gov.cn/npc/c30834/202006/75ba6483b8344591abd07917e1d25cc8.shtml https://github.com/baicaihenxiao/GitBook-Notes/blob/master/project/bao-jia-+-he-tong-cheng-xu-yuan-jie-si-huo-wan-zheng-gong-lve-+-zeng-kai-yuan-guan-li-xi-tong.md

2017-09-10 · 1 min · 19 words · -

kvm GPU VFIO OVMF

‘kvm GPU VFIO OVMF’ https://www.linuxserver.io/2017/04/28/how-to-setup-vfio-gpu-passthrough-using-ovmf-and-kvm-on-arch-linux/ https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF https://github.com/IronicBadger/arch-vfio-ovmf https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Plain_QEMU_without_libvirt

2017-09-08 · 1 min · 8 words · -

java grpc

java grpc maven依赖 <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty-shaded</artifactId> <version>1.31.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.31.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.31.0</version> </dependency> <dependency> <!-- necessary for Java 9+ --> <groupId>org.apache.tomcat</groupId> <artifactId>annotations-api</artifactId> <version>6.0.53</version> <scope>provided</scope> </dependency> create proto file in src/main/proto/foo.proto option java_package = “com.wiloon.foo”; maven 执行 mvn compile, 就可以在target/generated-sources 下看到生成的源码了 gradle build find generated source in build/generated/source/proto/main/grpc/com/wiloon/foo/foo.java https://grpc.io/docs/quickstart/java.html https://github.com/google/protobuf-gradle-plugin https://www.jianshu.com/p/59ac036b0d7b

2017-09-08 · 1 min · 55 words · -

容器编排

容器编排 众所周知,Kubernetes 是一个容器编排平台,它有非常丰富的原始的 API 来支持容器编排,但是对于用户来说更加关心的是一个应用的编排,包含多容器和服务的组合,管理它们之间的依赖关系,以及如何管理存储。 在这个领域,Kubernetes 用 Helm 的来管理和打包应用,但是 Helm 并不是十全十美的,在使用过程中我们发现它并不能完全满足我们的需求,所以在 Helm 的基础上,我们自己研发了一套编排组件…… 什么是编排? 不知道大家有没仔细思考过编排到底是什么意思? 我查阅了 Wiki 百科,了解到我们常说的编排的英文单词为 “Orchestration”,它常被解释为: 本意:为管弦乐中的配器法,主要是研究各种管弦乐器的运用和配合方法,通过各种乐器的不同音色,以便充分表现乐曲的内容和风格。 计算机领域:引申为描述复杂计算机系统、中间件 (middleware) 和业务的自动化的安排、协调和管理。 有趣的是 “Orchestration” 的标准翻译应该为“编配”,而“编排”则是另外一个单词 “Choreography”,为了方便大家理解, 符合平时的习惯,我们还是使用编排 (Orchestration) 来描述下面的问题。至于“编配 (Orchestration)” 和 “编排(Choreography)” 之争,这里有一篇文章,有兴趣可以看一下 。 https://cloud.tencent.com/developer/article/1683430 Kubernetes 容器编排技术 当我们在说容器编排的时候,我们在说什么? 在传统的单体式架构的应用中,我们开发、测试、交付、部署等都是针对单个组件,我们很少听到编排这个概念。而在云的时代,微服务和容器大行其道,除了为我们显示出了它们在敏捷性,可移植性等方面的巨大优势以外,也为我们的交付和运维带来了新的挑战:我们将单体式的架构拆分成越来越多细小的服务,运行在各自的容器中,那么该如何解决它们之间的依赖管理,服务发现,资源管理,高可用等问题呢? 在容器环境中,编排通常涉及到三个方面: 资源编排 - 负责资源的分配,如限制 namespace 的可用资源,scheduler 针对资源的不同调度策略; 工作负载编排 - 负责在资源之间共享工作负载,如 Kubernetes 通过不同的 controller 将 Pod 调度到合适的 node 上,并且负责管理它们的生命周期; 服务编排 - 负责服务发现和高可用等,如 Kubernetes 中可用通过 Service 来对内暴露服务,通过 Ingress 来对外暴露服务。 在 Kubernetes 中有 5 种我们经常会用到的控制器来帮助我们进行容器编排,它们分别是 Deployment, StatefulSet, DaemonSet, CronJob, Job。 ...

2017-09-08 · 1 min · 100 words · -

grpc

python grpc grpcio==1.48.2 grpc 会忽略 linux 环境变量 里配置的 no_proxy, 导致请求失败, 在启动客户端之前 临时删除环境变量 unset HTTP_PROXY golang grpc gRPC 通过 HTTP2 协议传输 定义协议 protobuf syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 results_per_page = 3; } 生成 python 文件 python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. logServer.proto python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. .\tests\remote\grpc_wrapper\service.proto golang grpc install protocol compiler plugins 在 https://pkg.go.dev/google.golang.org/protobuf/cmd/protoc-gen-go 可以看到最新的版本号 go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 # 安装后查看 版本 ./protoc-gen-go --version ./protoc-gen-go-grpc --version protoc --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ helloworld/helloworld.proto protoc -I proto/ proto/helloworld.proto -go_out=plugins=grpc:proto grpc-dump go install github.com/bradleyjkemp/grpc-tools/grpc-dump@latest grpc-dump --port=12345 http_proxy=http://localhost:12345 my-app wireshark grpc https://mp.weixin.qq.com/s/BdcFRO58ytrtcpYZVT1ymQ ...

2017-09-07 · 1 min · 133 words · -

OAuth,SSO,REST

OAuth,SSO,REST http://favccxx.blog.51cto.com/2890523/1635938 OAuth与SSO、REST有哪些区别与联系 2015-04-20 10:31:10 标签: SSO REST OAuth OAuth2.0 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://favccxx.blog.51cto.com/2890523/1635938 谈到OAuth,很多人自然而然的就会想起SSO,还有些人会想起REST。其实,OAuth与SSO和REST并没有太深的关系,它们分别有其不同的适用场景。接下来,我们就看看它们之间的区别与联系是什么? OAuth与SSO的区别? OAuth是一种授权协议,只是为用户资源的授权提供了一个安全的、开放而又简易的标准。OAuth 2.0为客户端开发者开发Web应用,桌面端应用程序,移动应用及客厅设备提供特定的授权流程。 SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 通俗的讲,OAuth是为解决不同公司的不同产品实现登陆的一种简便授权方案,通常这些授权服务都是由大客户网站提供的,如QQ,新浪微博,人人网等。而使用这些服务的客户可能是大客户网站,也可能是小客户网站。使用OAuth授权的好处是,在为用户提供某些服务时,可减少或避免因用户懒于注册而导致的用户流失问题。 SSO通常处理的是一个公司的不同应用间的访问登陆问题。如企业应用有很多业务子系统,只需登陆一个系统,就可以实现不同子系统间的跳转,而避免了登陆操作。 OAuth与SSO的应用场景不同,虽然可以使用OAuth实现SSO,但并不建议这么做。不过,如果SSO和OAuth结合起来的话,理论上是可以打通各个公司的各个不同应用间的登陆问题,但现实往往是残酷的。 OAuth与REST的关系? 谈到REST的安全性问题时,很多人容易联想到使用OAuth来解决这个难题。其实,REST与OAuth有着天壤之别。 OAuth为网站 (系统) 用户授权第三方应用 (网站、系统) 访问自己在网站 (系统) 中的隐私数据提供的一种规范。 REST初期理念是"每个不同的子资源都有一个绝对唯一且不重复的URI地址"。它仅仅是一个URI资源而已,而且是无状态的,因此REST并不适合做需要授权的应用。恰恰相反的是,在使用OAuth授权时,通常会使用REST API来完成授权操作。

2017-09-05 · 1 min · 32 words · -

cron, anacron

cron, anacron anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机。 anacron 如何在 Linux 工作 anacron 任务被列在 /etc/anacrontab 中,任务可以使用下面的格式 (anacron 文件中的注释必须以 # 号开始) 安排。 https://linux.cn/article-8590-1.html 在本篇中,我们会解释 cron 和 anacron,并向你展示如何在 Linux 中设置 anacron。我们也会比较这两个工具。 要在一个给定时间或者稍后安排一个任务,你可以使用 at 或者 batch 命令,要使命令能够重复运行,你可以使用 cron 以及 anacron 工具。 cron - 是一个用于运行计划任务如系统备份、更新等的守护进程。它适合在那些 24X7 不间断运行的机器如服务器上运行的计划任务。 命令/脚本被写在 cron 任务脚本中,它是在 crontab 文件中被安排的。系统默认的 crontab 文件是 /etc/crontab,但是每个用户也可以创建自己的 crontab 文件来在特定时间运行用户定义的命令。 要创建一份个人 crontab 文件,只要输入: $ crontab -e 如何在 Linux 中设置 anacron anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机。 cron 也适合在那些不会 24X7 运行如笔记本以及桌面电脑的机器上运行每日、每周以及每月的计划任务 (LCTT 译注: 不适合按小时、分钟执行任务) 。 ...

2017-09-02 · 2 min · 279 words · -

Linux split, 文件分割与合并

Linux split, 文件分割与合并 # -l 按行分割 # -d numeric suffixes split -l 300 -d large_file.txt new_file_prefix inux文件分割与合并: split & cat Linux下文件分割可以通过split命令来实现,而用cat进行文件合并。而分割可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现,非常简单。 在Linux下用split进行文件分割: 模式一: 指定分割后文件行数 对与txt文本文件,可以通过指定分割后文件的行数来进行文件分割。 命令: split -l 300 large_file.txt new_file_prefix 模式二: 指定分割后文件大小 对于可执行文件等二进制文件,则不能通过文件行数来进行文件分割,此时我们可以指定分割大小来分隔文件。 命令: split -b 10m large_file.bin new_file_prefix 对二进制文件我们同样也可以按文件大小来分隔。 在Linux下用cat进行文件合并: 命令: cat small_files* > large_file Linx文件分割命令英文释义: -, read standard input. Mandatory arguments to long options are mandatory for short options too. -a, -suffix-length=N use suffixes of length N (default 2) ...

2017-09-01 · 1 min · 109 words · -