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 · -

golang 定时器, timer, ticker

golang 定时器, timer, ticker Go 可以借助 time.After/time.Ticker 来实现延迟/定时触发器, 主要原理是借助无缓冲 channel 无数据时读取操作会阻塞当前协程, Go 会在给定的时间后向 channel 中写入一些数据 (当前时间), 故阻塞的协程可以恢复运行, 达到延迟或定时执行的功能。 time.Ticker ticker 只要定义完成,从此刻开始计时, 不需要任何其他的操作, 每隔固定时间都会触发。 ticker := time.NewTicker(500 * time.Millisecond) go func() { for t := range ticker.C { fmt.Println("Tick at", t) } }() 立即执行一次 ticker := time.NewTicker(period) for ; true; <-ticker.C { // ... } timer 使用timer定时器,超时后需要重置,才能继续触发。 d := time.Duration(time.Second*2) t := time.NewTimer(d) defer t.Stop() for { <- t.C fmt.Println("timeout...") // need reset t.Reset(time.Second*2) } 执行若干次后退出 func main() { // 创建一个计时器 timeTicker := time.NewTicker(time.Second * 2) i := 0 for { if i > 5 { break } fmt.Println(time.Now().Format("2006-01-02 15:04:05")) i++ <-timeTicker.C } // 清理计时器 timeTicker.Stop() } https://my.oschina.net/u/943306/blog/149395 ...

2017-09-10 · 1 min · 170 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 · -

清空文件

清空文件 在处理服务器磁盘占用时, 比如有比较大的日志文件, 服务还在运行, 所以文件是不能删的, 又因为文件太大了不适合用文本编辑器打开, 比如 vi 之类, 想清空文件就要用以下方法了. BTW: 删除一个正在使用的文件是另外一个问题… wiloon.com/deleteonwrite truncate truncate -s 0 foo.log truncate 可被用来将一个文件缩小或者扩展到某个给定的大小。 你可以利用它和 -s 参数来特别指定文件的大小。要清空文件的内容, 则在下面的命令中将文件的大小设定为 0 本命令缩减或扩充指定文件的大小为指定值。 参数所指定的文件如果不存在, 那么该命令会创建这个文件。 如果一个文件的大小比参数指定的大, 那么超出的部分就会被丢弃。 如果一个文件比参数指定的小, 那么文件会被扩充, 并且被扩充的部分 (空洞) 在被读取的时候是字节0。 truncate 函数使用前不需要使用 open 函数打开文件 命令格式 truncate 选项 文件列表 命令详解: 对于长选项来说必须的参数, 对于短选项来说也是必须的。 -c, --no-create 不创建任何文件 -o, --io-blocks 把参数指定的大小视为 I/O 块,而不是视为字节 -r, --reference=FILE 使用文件 FILE 的大小作为参考大小 -s, --size=SIZE 使用 SIZE 指定文件的大小 --help display this help and exit 显示这个帮助信息 --version 输出版本信息,然后退出 SIZE 参数可以是 (或者是一个整数后面跟着任意的) 下面的选项: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y. SIZE 之前也可以加上下面的特性: '+' 增加 SIZE, '-' 减少 SIZE, '<'最大为 SIZE, '>'最小为 SIZE, '/'以SIZE为除数,向下取整, '%'以SIZE为除数,向上取整。 注意: -r 和 -s 选项是互斥的。 示例 truncate -c --size 2000m x.dbf # 源文件 test.db 和目标文件 test.db.bak ll -th /root/test.db -rw-r--r--. 1 root root 12G May 24 01:26 /root/test.db [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 0 May 24 17:51 /root/test.db.bak [root@my1-222 ~]# # 利用truncate瞬间制造大小相同的文件 [root@my1-222 ~]# truncate -r test.db test.db.bak [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 12G May 24 17:56 /root/test.db.bak [root@my1-222 ~]# [root@my1-222 ~]# truncate --size 10G test.db.bak [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 10G May 24 18:01 /root/test.db.bak 文件清空之后的 inode 问题 在文件的写入操作比较繁忙的时候会观察到 清空 文件 之后 用 stat 命令查看 inode信息时, 能看到 文件 长度为0 ,但是过几秒再查看时,文件 长度又变成了清空前的长度,但是 df 命令能看到磁盘空间的确被释放了 ...

2017-09-01 · 3 min · 431 words · -

raspberry pi openvpn

raspberry pi openvpn https://community.home-assistant.io/t/how-to-install-openvpn-on-raspberry-pi-with-home-assistant/59002 sudo -s # **rest of the instructions assume you've already done this apt-get update apt-get upgrade apt-get install openvpn unzip easy-rsa gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server/server.conf vim /etc/openvpn/server/server.conf Make the following changes to the server.conf file Increase key security by Finding dh and makesure it reads dh dh2048.pem Allow web traffic pass though to client by uncommenting push “redirect-gateway def1 bypass-dhcp” by removing the semi colon at the start of the line Prevent DNS leak by overriding the default DNS - Uncomment push “dhcp-option DNS 208.67.222.222” and push “dhcp-option DNS 208.67.220.220” Lower OpenVPNs run time auth - Uncomment user nobody and group nogroup Change the port OpenVPN runs on it should current by port 1194 - choose something obscure and above 1024 e.g. port 50000 - leave it as UDP Now save your changes and exit. ...

2017-08-30 · 5 min · 991 words · -

Linux 密码生成工具

Linux 密码生成工具 pwgen -s -y http://blog.csdn.net/u011582658/article/details/38045311 1.pwgen pwgen生成的密码易于记忆且相当安全。从技术上来说,容易记忆的密码不会比随机生成的密码更加安全。但是,在大多数情况下,pwgen生成的密码已经足够安全,除了网银密码等需要高安全等级的情况外。使用易于记忆的密码的好处就是你不会把这些密码写下来或者存到电脑上的某个地方,这样做,本来就是不安全的。 安装pwgen,在终端窗口输入: sudo apt-get install pwgen 不带任何参数运行pwgen,将会输出满屏幕的密码。你可以从中选择一个作为自己的密码然后清除屏幕。采用这种方式生成密码,即使恰好有人在背后,他也不知道你选择的到底是哪一个。 运行pwgen,在终端输入: pwgen 选好密码之后,在终端输入clear清除终端窗口内容。 如果你确定背后没有人,可以使用"-1"来告知pwgen只产生一个密码。 pwgen -1 如果想生成一个完全随机的密码,使用"-s"参数。 pwgen -1 -s 在密码中使用特殊字符 (感叹号,逗号,引号,加号,减号,冒号等) 可以提高密码的安全等级。使用"-y"参数使生成的密码中至少包括一个特殊字符。 pwgen -1 -s -y 更多有趣的参数: -0: 密码中不包含数字。 -B, -ambiguous:密码中不包含容易混淆的字符,比如说'1’和’l’,‘0’和’o’。 -v, -no-vowels:密码不包括元音字母或者可能被误认为是元音字母的数字。这可以防止生成带有攻击性子串的密码。 2.makepasswd makepasswd和pwgen的工作方式类似,但是它生成的密码不容易记忆。所有的密码都是随机生成的,可以看出,makepasswd比pwgen更加注重安全性。 安装makepasswd,在终端输入: sudo apt-get install makepasswd 生成一个密码,输入: makepasswd 生成五个密码,每个密码最少包含10个字符,输入: makepasswd -count 5 -minchars 10 还可以指定以某个字符串为基础生成随机密码。这在生成PIN方面可能很有用。比如说,生成4位PIN,输入: makepasswd -string 1234567890 -chars 4 3.passwordmaker passwordmaker与之前的pwgen和makepasswd不同。它本来是IE,Firefox等浏览器的一个扩展程序。passwordmaker-cli是passwordmaker的命令行版本。安装passwordmaker-cli,输入: sudo apt-get install passwordmaker-cli 在使用passwordmaker的时候,你需要输入一个域名 (URL) 和主密码 (master password) ,passwordmaker会利用这些输入的信息为这个URL生成一个独一无二的密码。 ...

2017-08-30 · 1 min · 80 words · -

向量化

向量化 http://blog.csdn.net/gengshenghong/article/details/7027186 参考手册: http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm 说明: 本系列文章为个人笔记,如有不正确之处,请参考官方相关文档,如果错误发现,我会尽量更新修改。另外,以下内容不保证对于所有版本的编译器都正确,编译器的实现也可能有一些变化之处,具体参考官方文档。 更多说明请参考http://blog.csdn.net/gengshenghong/article/details/7034748中补充说明部分。 Summary: Intel编译器提供了自动向量化的功能,能对程序进行一些自动的向量化优化。 (1)什么是向量化 所谓的向量化,简单理解,就是使用高级的向量化SIMD指令 (如SSE、SSE2等) 优化程序,属于数据并行的范畴。 更多理解,参考: http://blog.csdn.net/gengshenghong/article/details/6953942 http://blog.csdn.net/gengshenghong/article/details/7007100 等。 (2)如何对代码进行向量化? 知道了向量化的目标是生成SIMD指令, 那么很显然, 要对代码进行向量化, 第一是依靠编译器来生成这些指令;第二是使用汇编或 Intrinsics 函数。Intel 编译器中, 利用其自动向量分析器 (auto-vectorizer) 对代码进行分析并生成SIMD指令。另外, 也会提供一些 pragmas 等方式使得用户能更好的处理代码来帮助编译器进行向量化。 编译器的自动向量化,简单理解,就是编译器对代码进行一些处理从而生成SIMD指令,一个最常见的可以进行向量化的例子就是for循环,这里简单的理解一下,如下代码片段: #define N 4*10 float a[N], b[N], c[N]; for(int i = 0;i < N; i ++) { a[i] = b[i] + c[i]; } 对于上面的代码,假设float类型是4byte,即32bit。如果使用"传统"的指令,这个for循环至少需要经过40次浮点加法运算。那么,如果使用SSE指令 (128bit暂存器) ,那么一条指令能同事计算4个float,所以,上面的for循环可以只适用10次浮点加法运算就完成了。 说明: 这里只是简单说明一下向量化和SSE等指令集之间的关系,关于SIMD、SSE等的细节参考相关内容 (比如,SSE指令要求内存对齐等,后面向量化也会涉及到这一点) (3)自动向量化的选项和基本使用 基本向量化 /Qvec: 开启自动向量化功能,需要在O2以上使用。在O2以上,这是默认的向量化选项,默认开启的。此选项生成的代码能用于Intel处理器和非Intel处理器。向量化还可能受其他选项影响。由于此选项是默认开启的,所以不需要在命令行增加此选项。 /Qvec-reportn: 输出向量化报告。n取值为0到5. 针对指令集 (处理器) 的向量化 /arch:code: 其中code表示指令集,比如IA32、SSE、SSE2、SSE3、SSSE3等等。后面的指令集一般是前面的指令集的扩展,比如,使用SSE3的时候,那么生成的代码会使用到IA32、SSE、SSE2和SSE3的指令。由于是针对指令集的优化,所以其生成的代码只能运行在支持相应指令集的处理器上。默认的是code使用的是SSE2。 /Qxcode: 其中code也是表示指令集,其取值类似于arch (不完全一样) ,但是/Qx选项生成的代码只能运行在Intel处理器上,它会使用Intel处理器的指令进行更进一步的优化。说明: /arch选择可以运行在兼容这些指令集的非Intel处理器上,/Qx只能运行在Intel处理器上,因为并不是所有的兼容同一指令集的处理器都能兼容所有的指令的。 ...

2017-08-15 · 1 min · 199 words · -

ODX, OTX, UDS

ODX, OTX, UDS https://blog.softing.com/blog/automotive-electronics/diagnostics-odx-otx-uds-and-other-market-standards/ Diagnostics – ODX, OTX, UDS and other market standards Posted on 01/07/2015 by Stephan Obermüller Diagnose_Icon_626_251 A large number of today’s innovations are based on software developments, and vehicles are no exception. Software innovations improve vehicle performance and increase both the safety and sustainability of mobility. The number of ECUs and the associated networking are continually increasing in the process. The associated growing complexity must be mastered over a vehicle’s entire lifetime. In addition to actual control functions, diagnostics is increasingly a focal point in development. Although diagnostics was originally only intended for checking that legal emissions standards were being adhered to, it now takes its place before engineering in the entire value chain. ...

2017-08-14 · 2 min · 346 words · -

uds

uds What is UDS? • UDS stands for Unified Diagnostics Service • It is present in all modern cars • Provides access to the Services offered by ECUs • It takes place on the top of the CAN protocol (Layer 4) • Allows to perform transmissions of up to 256 bytes • It is just a Transport Protocol https://media.defcon.org/DEF%20CON%2024/DEF%20CON%2024%20workshops/DEFCON-24-Workshop-Javier-Vazquez-You-CAN-haz-car-Secretz-UPDATED.pdf

2017-08-14 · 1 min · 59 words · -