Timetombs

泛义的工具是文明的基础,而确指的工具却是愚人的器物

共 108 篇
,更新于 2022-08-06T13:27:16Z+08:00 by   3ab223f

[漫谈] 软件设计的目标和途径

记录一下笔者关于软件设计的一些相关认知。在开始之前,先引入两个概念目标和途径(这里可能会有些咬文嚼字,不过主要是为了区分主观和客观的一些细微差异)。 1 目标和途径 我们在做某一件事情的时候,总是会带有一定的目的性的:比如说一日三餐,是为了给身体补充所需的能量。那么这三餐具体如何落实呢,则会有多种多样的方式。比如你可以选择吃碳水食物、蔬菜、 ...

[代码规范] HTTP APIs 设计/规范指南

根据REST APIs的成熟度模型 ,此规范关注的是Level 2的APIs。 1 设计指南 HTTP APIs主要由四部分组成 : #HTTP, #URL, 资源,资源的表述。 资源的表述通常都采用#JSON格式,故而下文使用#JSON代指资源的表述。 根据这些组成部分,按照以下3个步骤设计APIs。 1.1 基于资源设计API 设计HTTP APIs的首要任务是识别出业务领域中的资源。资源是 ...

[理解REST] 05 Web的需求 & 推导REST

衔接上文[理解REST] 04 基于网络应用的架构风格,上文总结了一些适用于基于网络应用的架构风格,以及其评估结果。在前文的基础上,本文介绍一下Web架构的需求,以及在对Web的关键协议进行设计和改进的过程中遇到的问题;以及在对基于网络应用的架构风格进行评估的过程中的领悟;结合Web的需求进而推导出REST这种架构风格,随后使用REST来指 ...

[认证&授权] 04 OIDC(OpenId Connect)身份认证(核心部分)

1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/) : OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server, as well as to obtain basic profile information about the End-User in an interoperable and REST-like manner. OpenID Connect allows clients of all types, including Web-based, mobile, and JavaScript clients, to request and receive information about authenticated sessions and end-users. The specification suite is extensible, allowing participants to use optional features such as encryption of identity data, discovery of OpenID Providers, and session management, when it makes sense for them. 简单来说 : OIDC是OpenID Co ...

[HBase] Region Split Policy

1 概述 待完善。。。 2 配置方式 2.1 RegionServer 不推荐:原因是不够灵活。 hbase.regionserver.region.split.policy1。默认配置org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy2。 <property> <name>hbase.regionserver.region.split.policy</name> <value>org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy</value> </property> 2.2 Table 推荐:原因是表范围内的配置,每个表可以独立设置适合的策略。 方式1 ...

[Docker] File

1 File List https://github.com/linianhui/docker/tree/main/image 文件列表 debian-bullseye-sources.list deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib deb http://mirrors.aliyun.com/debian-security/ bullseye-security main deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib debian-buster-sources.list deb http://mirrors.163.com/debian/ buster main non-free contrib deb http://mirrors.163.com/debian/ buster-updates main non-free contrib deb http://mirrors.163.com/debian/ buster-backports main non-free contrib deb-src http://mirrors.163.com/debian/ buster main non-free contrib deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib debian-stretch-source.list deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib deb http://mirrors.aliyun.com/debian-security stretch/updates main deb-src http://mirrors.aliyun.com/debian-security stretch/updates main deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib maven-settings.xml <?xml version="1.0" encoding="UTF-8"?> <!-- https://maven.apache.org/settings.html --> <!-- 加载顺序 1. 全局设置 M2_HOME/conf/settiing.xml 2. 用户 ...

[HBase] KeyValue

KeyValue12是HBase的最底层的核心存储结构,也是数据最终格式持久化的格式。这里分析一下格式细节。 1 概述 一个KeyValue代表着一行数据中的具体的某一列。比如你的一行数据有10列,那么最终会有10个KeyValue存储下来(没有修改删除的情况下)。此外KeyValue只有添加操作,没有删除修改的操作。基于以上两点,使得HB ...

[计算机网络] DoH(DNS over HTTPS)

RFC8484 DNS Queries over HTTPS (DoH)1 MIME application/dns-message。 Type : application。 SubType : dns-message。 编码格式 : 二进制格式,定义在RFC10352。 Example :method = GET :scheme = https :authority = dnsserver.example.net :path = /dns-query?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB accept = application/dns-message :status = 200 content-type = application/dns-message content-length = 61 cache-control = max-age=3709 00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 1c 00 01 c0 0c 00 1c 00 01 00 00 0e 7d 00 10 20 01 0d b8 ab cd 00 12 00 01 00 02 00 ...

[Git] 内容寻址文件系统

不要感觉奇怪,为什么介绍Git的文章里面怎么会出现一个文件系统,还内容寻址,这都是什么啊?其实内容寻址文件系统(content-addressable filesystem)才是git的底层核心,而我们平时使用的commit,branch和checkout等等命令仅仅只是在上层包装成了VCS(version control system)的样子。 文件系 ...

[计算机网络编程] 运行时架构

基于IO模型1、Socket API2以及IO Multiplexing API3,基本上已经涵盖了目前基于网络编程的所使用的主流技术点。那么我们就可以评估一下各种组合方式所带来的 架构属性4。 通常来讲基于网络的应用都会匹配最基础的C/S风格5。这样的应用至少有两个核心组件:client和server,我们这里就关注一下这两个组件内部在运行时抽象的架构。其次网络通 ...

[计算机网络编程] IO Multiplexing API

在上一节Socket中介绍了socket相关的一些基础函数,以及一个基础版本的echo客户端和服务器程序,同时也遗留了一些问题1。 其中核心问题在于只能一次处理一个IO,而且IO的accept、recv、send和fgets等操作还都是阻塞的。导致应用大部分时间都是处在等待中,利用效率低下;而fork2的多线程版本又性价比不高,支撑不了 ...

[计算机网络编程] Socket API

Socket1是一套抽象的用于网络通信的API,它使得应用层可以不必关心底层繁琐的传输通信细节。 开始之前最好具备一些计算机网络2的基础,TCP3以及网络字节序4的相关知识储备。 1 基础简介 方便起见,这里假设底层是IPv4和TCP。 1.1 地址结构 既然是建立通信,那么就需要知道对方的地址。socket使用struct sockaddr_in来存储 ...

[工具] rinetd

1 概述 c语言开发的一个端口转发转发工具,非常小巧方便,比iptables方便使用。或者像是在macOS这种不支持转发到remote ip的系统下。 windows 下有内置的netsh interface portproxy add v4tov4 listenport=80 connectaddress=192.168.2.201 connectport=80可以使用。 # 查看帮助 rinetd -h # 前台运行(默认运行在background),并且指定配置文件 rinetd --foreground --conf-file rinetd.conf rinetd.conf logfile /lnh/_cache/_rinetd/rinetd.log #127.0.0.1 80 192.168.2.201 80 127.0.0.1 2375 192.168.2.201 2375 127.0.0.1 3306 192.168.2.201 3306 127.0.0.1 6379 192.168.2.201 ...

[Redis] sentinel

在上一篇博客Replication1中我们构建了一个简单的主从复制架构的redis服务,利用Replication我们可以让redis提供读写分离、提供读取能力、数据备份等功能,也支持slave从鼓掌中恢复。但是如果master出现了故障,那么整Replication都会处于一个不可用的状态。这显然无法满足高可用的目标。而整个目标需要 ...

[Redis] replication

绝大多数的情况下,redis中的数据都是读取远远多于写入。为了提供更高的读取QPS的支持,所以redis提供了Replication1的支持。 单纯的Replication并不能处理redis意外宕机等导致的不可用问题。高可用需要Sentinel2来提供支持。 单纯的Replication也不能提升redis的存储容量,比如master原 ...

[Redis] 运行时架构

redis自从诞生之处就被称之为单线程的方式实现的,这里的单线程指的是socket read、解析、执行和socket write这四个阶段都是由主线程独自完成的。当然一个redis-server实例并不是只有这一个线程,比如还有执行RDB、AOF、LRU、AOFREWRITE等等后台线程,只是它们的运行不会参与到server的主线程处理 ...

[Redis] benchmark

1 基本概念 redis速度非常快,但是有多块呢?首先我们需要分析一下当client发起对server的调用到获得结果这段时间内都经历了那些主要的步骤,比如如下代码: Jedis jedis = new Jedis("localhost"); String result = jedis.set("name", "lnh"); 详细分解一下其中经历的主要步骤: client发起调用; 初始化网络连接(或者从client端维护的连接池中获取连接); 把java方法调用和数据对象序列化成R ...

[Redis] persistence

redis是基于内存存储数据的,当server意外宕机或者重启时,内存中的数据就会丢失掉。redis提供了如下几种选项来应对不同场景下的需求。 RDB(Redis DataBase) :按照配置的时间周期来定时保存内存中的数据快照到disk上。 AOF (Append Only File) :通过记录server接收到的每一个write命令,在下次启动时重放这些指令,以此达到恢复数据的目的。 No persistence :完全禁用持久化 ...

[Redis] lua script

redis2.6+在server端内嵌了lua1的支持,可以执行client发送的自定义的lua script,使得一些操作逻辑可以放到server上来执行,有利于减少一些不必要的网络交互,从而提升性能。在架构风格上这隶属于COD(Code On Demand)按需代码2,类似于REST3的六大架构约束之一的COD约束4,但是不同的是,这里的 ...

[Redis] expire

因为redis通常主要用来作为一个缓存服务。缓存何时失效的问题号称是计算机科学领域两大难题之一(另一个是命名),这一篇文章就介绍下笔者对于缓存如何以及何时失效的问题理解。 1 过期删除方式 redis支持通过两种方式清理过期的key1: 被动删除。 主动删除。 1.1 被动删除 在client访问(任意读写操作)一个key时,如果key设置了过期时间,则 ...

[Redis] pipelining

1 问题分析 设想一下有这样一个场景。在一个RTT1为10ms的网络环境下,循环执行一个INCR xxkey的操作,假定redis-server每次耗时1ms。 当cleint发出INCR xxkey的命令后,要等11ms后才能收到响应。如果循环100次,则总共就需要1100ms。显然redis-server执行100次仅需要1ms*100=1 ...

[Redis] data type

redis支持丰富的数据类型1。我们这里从两个角度来介绍: client使用:client可以使用到的数据类型。 server实现:server内部的具体实现。 1 client使用 1.1 String string是一个二进制安全的字符串,类似于java的String,但是它是可以修改的。value最大长度不能超过512MB。 redis中的key是strin ...

[Redis] resp

因为Redis是基于网络的分布式缓存服务,所以其隶属于客户端-服务器架构风格1。这就使得它必须通过网络进行通信,那么其客户端和服务端所采取的应用层协议为RESP(REdis Serialization Protocol)2。底层的传输协议为TCP3,端口号6379。 1 请求/响应模型 Client发送各种命令给Server,Server接收命令并处理后把响应消息发回 ...

[Redis] install

1 源码安装 适用于Linux和macOS1。 下载地址:https://download.redis.io/releases/redis-6.2.1.tar.gz。 wget https://download.redis.io/releases/redis-6.2.1.tar.gz tar xzf redis-6.2.1.tar.gz cd redis-6.2.1 make 编译完成后的二进制文件(redis-server,redis-cli等等)位于src目录中。 2 docker安装 https://hub.docker.com/_/redis docker run --name redis -d redis:6.2 Dockerfile # https://hub.docker.com/_/redis/ # https://github.com/docker-library/redis/blob/master/6.2/Dockerfile FROM redis:6.2 EXPOSE 6379 3 本地运行 redis.conf bind 127.0.0.1 port ...

[工具] miniserve

1 概述 rust语言开发的开源的轻量级静态文件Http Server。支持的功能: 静态文件目录服务。 上传文件。 http基本认证。 miniserve --color-scheme squirrel --qrcode --auth lnh:123 --upload-files 2 参考 官方仓库: https://github.com/svenstaro/miniserve 下载连接: https://github.com/svenstaro/miniserve/releases https://github.com/svenstaro/miniserve/releases/download/v0.12.0/miniserve-v0.12.0-x86_64-pc-windows-msvc.exe https://github.com/svenstaro/miniserve/releases/download/v0.12.0/miniserve-v0.12.0-x86_64-apple-darwin ...

[macOS] Tip

zsh .zshrc zshrc.sh source /lnh/_code/blog/src/linux/script/mac.sh mount synthetic.conf lnh /Volumes/lnh work /Volumes/work 禁用应用验证 sudo spctl --master-disable 禁用SIP # command+r csrutil disable ...

[Java] synchronized

在Java中,有一个与锁有关的关键字synchronized,它是由JVM层面提供的Monitor来实现。 1. 语法 synchronized关键字在语法层面1有两种形式。请看如下的示例代码: SynchronizedExample.java import java.io.File; public class SynchronizedExample { public void instanceSynchronizedStatementMethod(Object syncObject) { synchronized (syncObject) { instanceMethod(); } } public synchronized void synchronizedInstanceMethod() { instanceMethod(); } public void instanceMethod() { } public static synchronized void synchronizedStaticMethod() { staticMethod(); } public static void staticMethod() { } } 1.1 修饰代码快 示例中的instanceSynchronized ...

[Java] CAS(Compare And Swap)

1 CAS(Compare And Swap) 概念和原理 CAS是Compare And Swap的缩写,中文含义是比较和交换。CAS定义了三个值: V : 待更新的变量Var E : 预期的旧值Expected Value N : 新值New 执行过程的伪代码如下: if(V==E){ V=N; } 也就是说只有在变量V的值等于期望的旧值时,才更新V为新值N。不然什么都不做。以此证明其他线程没有更改V的值。根据上面的伪代码来看,是不是会出 ...

[Java] Thread

1 OS内核态进程 进程是OS进行资源分配和调度的最小单元,进程之间互相隔离,这样使得OS可以并行运行多个应用程序。OS:进程=1:N 遗留问题:这时OS可以并行多个应用程序了,但是应用程序内部则只能串行的运行。 2 OS内核态线程 为了解决进程遗留的问题,OS就创造了线程,使得一个应用程序内部也可以并行,进程:线程=1:N。Linux在默认情况 ...

[Java] GC(Garbage Collection)

GC要解决的三个问题: 哪些对象需要回收? 何时回收? 如何回收? 1 哪些对象需要回收? Java的内存区域中,Java线程栈、本地方法栈和程序计数器因为是线程私有的,随着线程的执行自动的释放,所以这部分是是无需回收的。目前需要回收的主要是两个区域:堆和元数据区。又因为元数据区域存放的是class的信息和常量以及一些静态变量等数据,这部分的数据 ...

[Java] JMM(Java Memory Model)

Java内存模型JMM(Java Memory Model)在Java中由两份规范文档定义: JLS(Java Language Specification)的Chapter 17. Threads and Locks]1。 JSR-133: Java Memory Model and Thread Specification Revision2。JSR-133(JDK 5实现了)是对JLS中的补充和完善。 A memory model describes, given a program and an execution trace of that program, whether the execution trace is a legal execution of the program. The Java programming language memory model works by examining each read in an execution trace and checking that the write observed by that ...

[Java] Unsafe类

Unsafe类是Java提供一个底层的类型,位于sun.misc包中,主要用来提供一些不安全的底层内存操作。 其内部实现在Jdk中略有差异,比如。Jdk 81和Jdk 152的源码。 1 获取Unsafe对象 由于Unsafe在实现上添加了限制(只能由BootstrapClassLoader加载的类型来调用,而我们的代码通常都是AppClassL ...

[漫谈] 状态

记录一下笔者关于状态的一些相关认知。 1 状态 在计算机领域,状态1指的是一个系统被设计用来记住之前的事件或用户交互,那么就称之为有状态的系统,系统记录的信息则就是状态。注意这里的重点不是说记录信息,而是记住之前的。 举个例子:你去楼下的便利店买东西,95元,你给了店家100块,但是店家暂时没零钱,这时候你说了,算了,你先记着吧,下次买东西少 ...

[工具] goproxy

1 概述 goproxy是一个基于Go语言编写的开源的网络代理工具。 下载: https://github.com/snail007/goproxy/releases 使用示例: # 配置(转发本地的2375和9000端口到182.168.2.201的对应端口) proxy @config.txt config.txt tcp -p ":2375,:9000" -T tcp -P "192.168.2.201:0" --log proxy.log --daemon 2 参考 https://snail007.github.io/goproxy/ ...

[MongoDB] Best Practice

1 Connection String mongodb://mongodb-server-1:27017,mongodb-server-2:27017/admin ?replicaSet=test-replica-set &ssl=false &w=3 &j=true &wtimeoutMS=5000 &readPreference=secondaryPreferred &readConcernLevel=local 2 Read Write Config 2.1 Write Concern 写操作配置,作用于MongoDB Server, 用于指示MongoDB Server写入多少个成员后才会返回给MongoDB Client。 { w: <value>, j: <boolean>, wtimeout: <number> } 2.1.1 w w可用的选项如下: 选项 描述说明 number 指定固定的成员数(注意必须是数字,不让会被当做tag)。当成员数不够时,MongoDB Server会返回CannotSatis ...

[Linux] top

1 top top -H -p 1 ...

[K8S] kubectl

kubectl是k8s的command-line工具,用来管理k8s中的各种资源。kubectl是一个go编写的单文件可执行程序,支持Windows、Linux、macOS。kubectl通过HTTPS APIs和k8s的集群的API Service进行通信,使用这些APIs来提供管理功能。 1 kubectl的安装和配置 因为kubectl是 ...

[Docker] Best Practice

1 ENTRYPOINT 推荐使用ENTRYPOINT(不要和CMD同时使用) : 当ENTRYPOINT存在时,CMD会作为它的参数存在,增加复杂性。ENTRYPOINT指令ENTRYPOINT EXEC和ENTRYPOINT SHELL两种语法形式。但是不管是那种形式,都只是dockerfile中的语法形式,实际build后的结果都是统一的JSON数组格式。 1.1 ...

[K8S] 核心概念 02 - Pod

抽象层面 : Pod = random-ip:fixed-port 1 概述 K8S中调度的最小单元。可以简单的类比: 平台 最小调度单元 KVM VM Docker Container K8s Pod 2 容器的资源限制 resources: # 资源限制 requests: # 请求的资源: k8s根据requests来进行pod的调度; HPA进行伸缩时也是根据requests来计算的。 cpu: '500m' # 单位=milli(千分之一)。50%vCPU。 memory: '1024Mi' # 单位=[M,Mi,G,Gi]。 limits: # 被允许使用的资 ...

[Java] JVM(Java Virtual Machine)

Java是一个跨平台的语言,当初的口号编译一次,到处运行。那么它是如何实现跨平台运行的呢?计算机领域有个有个著名的定理中间层定律:计算机科学领域的任何问题都可以通过增加一个中间层来解决。那么Java的跨平台也不例外,它就是通过添加了一个中间层来解决跨平台运行的问题的。 我们知道计算机是无法直接运行我们编写的程序设计语言1的代码的,需要编 ...

[Java] Tool

1 jps # print java pid jps -v 2 jinfo # print pid=1 JVM flags jinfo -flags 1 # print pid=1 Java system properties jinfo -sysprops 1 3 jstat jstat -options # print pid=1 gc jstat -gc 1 4 jmap # print pid=1 java heap summary jmap -heap 1 5 jstack # print pid=123 java therad jstack 123 ...

[计算机网络] Tool

1 dns dig bing.com nslookup bing.com 2 netsh # port forward 127.0.0.1:12345 to http://www.nghttp2.org netsh interface portproxy add v4tov4 listenport=12345 connectaddress=139.162.123.134 connectport=80 # show all netsh interface portproxy show all # delete all netsh interface portproxy reset # delete one netsh interface portproxy delete v4tov4 listenport=12345 # help netsh interface portproxy help 3 net-tools apt install -y net-tools 3.1 netstat short option full option -h --help -V --version -n --numeric --numeric-hosts --numeric-ports --numeric-users -t --tcp -u --udp -x --unix 状态统计 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT状态统计 netstat -n | awk '/TIME_WAIT/ {++S[$4]} END {for(a in S) print a, S[a]}' | sort -r -n -k2 -t' ' 4 iproute2 apt install -y iproute2 4.1 ss short option full option -h --help -V --version -a --all -n --numeric -t --tcp -u --udp -x --unix -4 --ipv4 -6 --ipv6 -H --no-header ss -tan | awk 'NR>1 {++S[$1]} END ...

[计算机网络] IO 模型

1 基本概念 在开始前先解释两组概念。 1.1 Blocking / Non-Blocking Blocking和Non-Blocking通常指的这次操作会不会阻碍后续操作。比如在等红绿灯,或者遇上了堵车,我们通常都会说是被堵了,导致你只能在此等着,虽然你闲下来了,但是干不了后续其他事情。 1.2 Synchronous / Asynchronous Synchronous和Asynchronous通常指的是这次操作能不能立即得到想要的结果。 ...

[计算机网络] NAT

1 NAT NAT(Network Address Translation)1 : 网络地址转换。是一种重写 IP Packet 的 Source IP 或 Destination IP 的技术,用来解决私有地址无法和外部通信的问题,也大大的缓解了IPv4的枯竭问题,同时促进了互联网的蓬勃发展。 假设原始的 IP Packet 如下 : Source IP Destination IP 192.168.2.2 9.9.9.9 1.1 SNAT SNAT(Source Network Address Translation) : 源地址转换,重写的是 Source IP。 重写后如下 : Source IP Destination IP 1.1.1.1 9.9.9.9 1.2 DNAT DNAT(Destination Network Address Translation) : 目标地址转换,重写的是 Destination IP。 重写后如下 : Source IP Destination IP 192.168.2.2 2.2.2.2 2 PAT PAT(Port Address Translation) ...

[计算机网络] TCP

TCP(Transmission Control Protocol)是一种全双工的、面向连接的、基于字节流的、可靠的(尽最大努力交付)、有状态的 传输层通信协议。先看一TCP的数据包Segment1长什么样子,后续的各种功能都会体现在其中: tcp.segment TCP Segment |- - - - - - - -+- - - 32 bits(4 octets) - - - -+- - - - - - - -| |0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7| |- - - - - - - -+- - - - - - - -+- - ...

[信息安全] 05 X.509 公钥证书的格式标准

X.509是# 公钥证书的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中。X.509证书可以由# CA颁发,也可以自签名产生。 1 Overview X.509证书中主要含有公钥、身份信息、签名信息和有效性信息等信息。这些信息用于构建一个验证公钥的体系,用来保证客户端得到的公钥正是它期望的公钥。 公钥 : 非对称密码中的公钥。公钥证书的目的就是为 ...

[工具] v2ray

1 服务器安装 install.sh # wget https://linianhui.github.io/tool/v2ray/install.sh # sudo bash install.sh # sudo bash <(wget -q -O - https://linianhui.github.io/tool/v2ray/install.sh) set -eux apt install -y wget gettext lsof bash <(wget -q -O - https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) UUID=$(/usr/local/bin/v2ctl uuid) CRET_NAME=${UUID:0:8} CRET_ORG=${UUID:9:4} export TEMPLATE_SERVER_DOMAIN_NAME="${UUID:24:12}.test" export TEMPLATE_CLIENT_ID=$UUID export TEMPLATE_CERTIFICATE_JSON=$(/usr/local/bin/v2ctl cert --ca --json --domain=$TEMPLATE_SERVER_DOMAIN_NAME --expire=24000h --name=$CRET_NAME --org=$CRET_ORG) wget -q -O - https://linianhui.github.io/tool/v2ray/server-config.template.json | envsubst > /usr/local/etc/v2ray/config.json wget -q -O - https://linianhui.github.io/tool/v2ray/client-config.template.json | envsubst > client-config.json echo "vmess://$(wget -q -O - https://linianhui.github.io/tool/v2ray/client-config.v2rayng.template.json | envsubst | base64 -w 0)" > client-config.v2rayng.json setcap 'cap_net_bind_service=+ep' /usr/local/bin/v2ray systemctl daemon-reload systemctl enable v2ray systemctl restart v2ray systemctl status v2ray lsof -i:443 # https://github.com/v2fly/v2ray-core # https://github.com/gfwlist/gfwlist # https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt 2 客户端安装 2.1 Windows 下载客户端https://github.com/v2fly/v2ray-core/releases/dow ...

[Git] .gitattributes

1 .gitattributes 的作用 位于Git Repo根目录的.gitattributes文件,用来为Git管理的文件配置一些属性。这些属性控制着Git管理的如下三个区域的文件。 通常主要用来统一EOL=end of line(在Windows上默认是crlf, 在Linux和macOS上则是lf)。 1.1 语法 .gitattributes是一个文本文件,每一行使用patte ...

[Git] config

1 配置 config.sh set -eux # checkout git config --global alias.co checkout # commit git config --global alias.ci commit git config --global alias.alc 'commit --amend --no-edit' # status git config --global alias.st 'status --short --branch' # branch git config --global alias.br branch # pull git config --global alias.pr 'pull --rebase' # merge git config --global alias.mnf 'merge --no-ff' # diff git config --global alias.d diff git config --global alias.dt difftool # cherry-pick git config --global alias.cp cherry-pick # log git config --global alias.last 'log -1' git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" # count-objects git config --global alias.size 'count-objects -v -H' # reflog git config --global alias.rl "reflog --format='%cd %h %gs' --date=format:'%Y-%m-%d %H:%M:%S'" # gc git config --global alias.warn-expire-reflog "reflog expire --expire=now --all" git config --global alias.warn-gc-now "gc --prune=now --aggressive" # chmod +/- x git config --global alias.chmod644 "update-index --chmod=-x" git config --global alias.chmod755 "update-index --chmod=+x" # head git config --global alias.head 'symbolic-ref HEAD' # default branch git config --global ...

[Rust] Install

1 rustup-init platform download url windows-gnu https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-gnu/rustup-init.exe windows-msvc https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe apple-darwin https://static.rust-lang.org/rustup/dist/x86_64-apple-darwin/rustup-init # windows only Env-SetRustEnvironmentVariable # install rustup-init.exe -y --verbose --default-toolchain stable --profile complete --no-modify-path 2 Reference https://www.rust-lang.org/tools/install https://forge.rust-lang.org/infra/other-installation-methods.html ...

[工具] app

OS Windows USB/DVD Download Tool :https://www.microsoft.com/en-us/download/details.aspx?id=56485 https://download.microsoft.com/download/C/4/8/C48F6E20-FE20-41C6-8C1C-408FE7B49A3A/Windows7-USB-DVD-Download-Tool-Installer-en-US.exe Rufus :https://github.com/pbatard/rufus https://github.com/pbatard/rufus/releases/download/v3.8/rufus-3.8p.exe Etcher :https://github.com/resin-io/etcher https://github.com/resin-io/etcher/releases/download/v1.4.4/Etcher-Portable-1.4.4-x86.exe 7z : https://www.7-zip.org/download.html https://www.7-zip.org/a/7z1900-x64.exe CPU-Z :https://www.cpuid.com ...

[计算机网络] 03 [Layer] Internet

1 网络层的用途 上一篇中遗留了一部分问题 : Frame的丢失、乱序和重复等等,在网络层这里其实也无能为力😂😂😂。因为网络层解决的问题重点是分组&交换中的交换问题。虽然在数据链路层有交换机这样的设备负责Frame的转发和交换,但是它其实并无法满足我们的需要,那么为什么呢?我们来看一下基于Frame的转发交换存在哪些问题先: Frame ...

[计算机网络] 02 [Layer] Data Link

1 数据链路层的用途 上一篇的遗留问题说到物理层仅仅提供01bit流是远远不够的,需要进行更高层的抽象。结合开篇中提到的计算机网络的核心设计理念分组&交换,这一层的用途就是分组 : 提供基于01bit流分组后的数据帧(PDU=Frame)。 2 三个基本问题 想要从下层的01比特中抽象出这样的结果,则需要解决一下的三个基本问题: 封装成帧。 透 ...

[计算机网络] 01 [Layer] Physical

1 物理层的用途 上一篇中说到计算机网络 由 节点(node : 计算机、集线器、交换机或路由器) 和连接它们的 链路(link) 组成。本质上讲,网络通信就是双方互相传递信息,在计算机世界中,最本质的信息就是01这种bit,所有的通信都是基于此,那么物理层的用途就是传递这些bit信息。 传输媒体多种多样,比如同轴电缆、双绞线、光纤、无线电波等等。当物理 ...

[计算机网络] 00 概述

1969年11月美国国防部建立了一个名为ARPANET(Internet的雏形)的分组&交换网络,当前时间是2019年,50年过去了,如今的网络已经融入了社会的方方面面,其重要性不言而喻。本系列博客专注于计算机网络的核心概念和体系结构,并不涉及网络编程的概念。 1 标准化 计算机网络 由 节点(node : 计算机、集线器、交换机或路由器) ...

[工具] 个税计算器

参数区域 税前月工资 月数 社保基数    基数:{{insurance.value.养老保险.min | CNY}} ~ {{insurance.value.养老保险.max | CNY}} 类型 最低基数 最高基数 个人 公司 ¥ {{key}} ¥ ¥ % % 税率表    免征额:{{rate.value.exempted | CNY}} 范围 税率 速算扣 ...

[K8S] Install

kubeadm是k8s的command-line工具,用来创建和维护k8s集群。 1. 前提要求 role hostname fixed ip os cpu memory master k8s-master-1 192.168.2.211 ubuntu server 18.04.4 2 4G worker k8s-worker-1 192.168.2.212 ubuntu server 18.04.4 2 4G worker k8s-worker-2 192.168.2.213 ubuntu server 18.04.4 2 4G 1.1 硬件要求 至少2核CPU。 至少2G的内存。 每个node都有固定的IP,并且可以直联(无NAT)。 # 查看CPU核心数 cat /proc/cpuinfo | grep processor | wc -l # 查看内存大小 free -h # 查看ip ip a 1.2 软件要求 hostna ...

[Linux] CentOS

1 Script File List sh文件列表 network.static-ip.sh # wget https://linianhui.github.io/linux/centos/network.static-ip.sh # sudo bash centos.network.static-ip.sh 202 set -eux IP=$1 ip a cat /etc/sysconfig/network-scripts/ifcfg-eth0 cat <<-EOF > /etc/sysconfig/network-scripts/ifcfg-eth0 # systemctl restart network TYPE=Ethernet NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.2.$IP NETMASK=255.255.255.0 GATEWAY=192.168.2.1 PROXY_METHOD=none BROWSER_ONLY=no DEFROUTE=yes IPV4_FAILURE_FATAL=yes EOF cat /etc/sysconfig/network-scripts/ifcfg-eth0 cat /etc/sysconfig/network cat <<-EOF > /etc/sysconfig/network # systemctl restart network NETWORKING=yes GATEWAY=192.168.2.1 DNS1=192.168.2.1 EOF cat /etc/sysconfig/network systemctl restart network ip a yum.163.sh # wget https://linianhui.github.io/linux/centos/yum.163.sh # sudo bash centos.yum.163.sh set -eux cat /etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo cat /etc/yum.repos.d/CentOS-Base.repo ...

[Linux] Ubuntu

1 Install iso url official http://releases.ubuntu.com 163 http://mirrors.163.com/ubuntu-releases aliyun https://mirrors.aliyun.com/ubuntu-releases legacy https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-legacy-server/ vm http://cloud-images.ubuntu.com/bionic/current source url 163 http://mirrors.163.com/.help/ubuntu.html aliyun http://mirrors.aliyun.com/ubuntu/ dde https://www.deepin.org/original/deepin-boot-maker 2 Config sudo passwd root # /etc/ssh/sshd_cofig # PermitRootLogin yes apt-get -y autoremove clean Optimize-VHD -Path E:\_vhd\ubt1.vhdx -Mode Full # 更改主机名 # /etc/hostname # /etc/hosts # 查看硬盘 fdisk -l # 创建新分区 n w gdisk /dev/sdb # 格式化新分区 mkfs.xfs /dev/sdb1 # 挂载 /etc/fstab # 查看uuid blkid # UUID=f1abf791-fe61-4dab-858f-632acb7d1d8f /data ext4 defaults 0 0 3 Reference network.yaml # https://netplan.io/examples # /etc/netplan/xxx.yaml network: version: 2 renderer: networkd ethernets: eth0: addresses: - 192.168.2.201/24 dhcp4: no dhcp6: no gateway4: 192.168.2.1 nameservers: addresses: - 192.168.2.1 sources-focal.list deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ ...

[OIDC in Action] 03 基于OIDC的SSO - GitHub OP

在上上一篇[OIDC in Action] 01 基于OIDC的SSO的登录页面的截图中有出现QQ登录的地方。这个其实是通过扩展OIDC的OpenID Provider来实现的,OpenID Provider简称OP,OP是OIDC的一个很重要的角色,OIDC用它来实现兼容众多的用户认证方式的,比如基于OAuth2,SAML和WS-Federation等等的用户 ...

[工具] android

1 Download 1.1 Factory Image https://developers.google.com/android/images#ryu 1.2 Platform Tools platform url Windows https://dl.google.com/android/repository/platform-tools-latest-windows.zip macOS https://dl.google.com/android/repository/platform-tools-latest-darwin.zip Linux https://dl.google.com/android/repository/platform-tools-latest-linux.zip https://developer.android.com/studio/releases/platform-tools 1.3 Driver platform url OEM USE Drivers https://developer.android.com/studio/run/oem-usb Google USB Driver https://developer.android.com/studio/run/win-usb https://dl.google.com/android/repository/usb_driver_r12-windows.zip 1.4 Recovery TWRP: https://twrp.me/Devices/ 2 Command 2.1 fastboot fastboot flashing unlock # fix fastboot error :unsupported command fwtool vbnv write dev_boot_fastboot_full_cap 1 fastboot flash recovery recovery.img fastboot flash logo logo.bin 2.2 adb adb reboot bootloader adb reboot recovery adb sideload rom.zip adb push rom.zip /sdcard/0/ 3 WLAN captive # 7.0 settings put global captive_portal_server captive.v2ex.co # 7.1+ settings put global captive_portal_https_url https://captive.v2ex.co/generate_204 4 Reference developer : https://developer.android.com lineageos : https://download.lineageos.org ...

[工具] traefik

1 概述 Traefik是一个基于Go语言编写的开源的云原生的边界路由器。 下载: https://github.com/containous/traefik/releases 配置: traefik.yml # https://docs.traefik.io/v2.2/reference/static-configuration/file/ global: checkNewVersion: true sendAnonymousUsage: false log: level: DEBUG # https://docs.traefik.io/v2.2/operations/api api: dashboard: true insecure: true debug: true # https://docs.traefik.io/v2.2/routing/entrypoints entryPoints: http: address: :80 mysql: address: :3306 providers: providersThrottleDuration: 2s # https://docs.traefik.io/v2.2/providers/file/ file: watch: true filename: dynamic.yml dynamic.yml http: routers: example.test.router: rule: Host(`example.test`) service: example.test.service services: example.test.service: loadBalancer: servers: - url: http://192.168.2.201:5000 healthCheck: scheme: http path: / interval: 10s timeout: 3s tcp: routers: mysql.router: entryPoints: - mysql rule: HostSNI(`mysql`) service: mysql.service services: mysql.service: loadBalancer: servers: - address: 192.168.2.201:3306 ...

[代码规范] C#规范指南

1 代码规范 代码风格配置文件 : cs.editorconfig # http://editorconfig.org # VS 2017 : 15.6+ 内置支持;Tools > Options > Text Editor > "Follow project coding conventions" # VS Code : (Ctrl+E) ext install editorconfig root = true [*] charset = utf-8 end_of_line = lf indent_size = 2 indent_style = space insert_final_newline = true trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false [*.cs] end_of_line = crlf indent_size = 4 [*.cake] end_of_line = crlf indent_size = 4 [*.cshtml] end_of_line = crlf indent_size = 4 [*.xaml] end_of_line = crlf indent_size = 4 [*.bat] end_of_line = crlf indent_size = 4 [*.cmd] end_of_line = crlf indent_size = 4 [*.ps1] end_of_line = crlf indent_size = 4 [*.csproj] end_of_line = crlf [*.sln] end_of_line = crlf # C# 命名规则 # https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions [*.cs] ## 接口示例:IPascalCase dotnet_naming_rule.interface_rule.symbols = interface_symbol dotnet_naming_rule.interface_rule.style = interface_style dotnet_naming_rule.interface_rule.severity = error ...

[Docker] Install

1 dokcerd 1.1 Ubuntu docker-on-ubuntu.sh # wget https://linianhui.github.io/docker/install/docker-on-ubuntu.sh # sudo bash install.docker-on-ubuntu.sh set -eux apt remove -y docker docker-engine docker.io apt update -y apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - apt-key fingerprint 0EBFCD88 add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" apt update -y apt install -y docker-ce groupadd docker systemctl enable docker docker version 1.2 CentOS docker-on-centos.sh # wget https://linianhui.github.io/docker/install/docker-on-centos.sh # sudo bash install.docker-on-centos.sh set -eux yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce groupadd docker systemctl enable docker docker version 1.3 Config dockerd https://docs.docker.com/engine/reference/commandline/dockerd/ config-dockerd.sh # wget https://linianhui.github.io/docker/install/config-dockerd.sh # sudo bash config-dockerd.sh set -eux # https://docs.docker.com/engine/reference/commandline/dockerd//#daemon-configuration-file mkdir /etc/docker wget -O /etc/docker/daemon.json https://linianhui.github.io/docker/install/daemon.json cat /etc/docker/daemon.json systemctl daemon-reload systemctl restart docker docker info daemon.json { "data-root": "/data/dockerd", "debug": true, "default-shm-size": "64M", "exec-opts": [ "native.cgroupdriver=systemd" ], "group": "docker", "hosts": [ "unix:///var/run/docker.sock", "tcp://0.0.0.0:2375" ], "insecure-registries": [ "registry.test" ], "ip": "0.0.0.0", "ip-forward": true, "ipv6": false, "log-driver": "json-file", "log-level": "info", "log-opts": { "max-file": "5", "max-size": "32m" }, "max-concurrent-downloads": 6, "max-concurrent-uploads": 6, "registry-mirrors": [ "http://hub-mirror. ...

[版权信息] CC BY-NC-SA 4.0

CC BY-NC-SA 4.0(创作共用许可协议:署名-非商业性使用-相同方式共享 4.0 国际)。 1 您可以自由地 共享 — 在任何媒介以任何形式复制、发行本作品 演绎 — 修改、转换或以本作品为基础进行创作 只要你遵守许可协议条款,许可人就无法收回你的这些权利。 2 惟须遵守下列条件 署名 — 您必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。您可以 ...

[认证&授权] 06 Permission Based Access Control

在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证。那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务如何来验证这些token是否有权限来执行对资源的某一项操作呢?比如我有一个API /book,它具有如下5个操作 : POST /book : 添加一本书 GET /book/{id} : 获取一本 ...

[OIDC in Action] 02 基于OIDC的SSO - JS Client

在上一篇[OIDC in Action] 01 基于OIDC的SSO的中涉及到了4个Web站点 : oidc-server.dev : 利用oidc实现的统一认证和授权中心,SSO站点。 oidc-client-hybrid.dev : oidc的一个客户端,采用hybrid模式。 oidc-client-implicit.dev : odic的另一个客户端,采用implicit模式。 oidc-client-js.dev : oidc的又一个客户端,采用implicit模式,纯静态网站,只有js和html,无服务端代码。 其中hy ...

[OIDC in Action] 01 基于OIDC的SSO

在[认证&授权]系列博客中,分别对OAuth2和OIDC在理论概念方面进行了解释说明,其间虽然我有写过一个完整的示例(https://github.com/linianhui/oidc.example),但是却没有在实践方面做出过解释。在这里新开一个系列博客,来解释其各种不同的应用场景。因为OIDC是在OAuth2之上的协议, ...

[认证&授权] 05 OIDC(OpenId Connect)身份认证(扩展部分)

在上一篇[认证&授权] 04 OIDC(OpenId Connect)身份认证(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id_token来用于认证。由于OIDC是一个协议族,如果只是简单的只关注其核心部分其实是不足以搭建一个完整的OIDC服务的。本篇则解释下OIDC中比较常用的几个相关扩展协议,可以说是搭建OIDC服务必备的几个扩展 ...

[理解REST] 06 REST的应用经验以及教训

衔接上文[理解REST] 05 Web的需求 & 推导REST,上文根据Web的需求推导出了REST架构风格,以及REST的详细描述和解释。自从1994年以来,REST架构风格被用于指导Web架构的设计和开发工作,最重要的两点体现在设计HTTP和URI两个互联网规范协议的过程中,以及实现这些规范的libwww-perl客户端库,Apache HT ...

[理解REST] 04 基于网络应用的架构风格

衔接上文[理解REST] 03 基于网络应用的架构,上文介绍了一组自洽的术语来描述和解释软件架构;如何利用架构属性评估一个架构风格;以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的。本篇在以上的基础上,列举一下一些常见的(REST除外)的适用于基于网络应用的架构风格,并使用对比架构属性的方式对其进行评估。 1 架构风格所产生 ...

[理解REST] 03 基于网络应用的架构

链接上文[理解REST] 02 REST是用来干什么的?,上文中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格)。本篇来介绍一组自洽的术语,用它来描述和解释软件架构;以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的。 1 软件架构 软件架构方面关注的是如何以最佳的方式划分一个系统、如何标识组件、组件之间如何通信 ...

[理解REST] 02 REST是用来干什么的?

衔接上文[理解REST] 01 REST的起源,介绍了REST的诞生背景。每当笔者遇到一个新事物的想去了解的时候,总是会问上自己第一个问题,这个新事物是干什么用的?在解释我所理解的REST这个过程中也不例外,这篇博客我们先关注一下REST是干什么用的,然后后续再解释REST是什么。好了,不说废话了,在上篇结尾处说到,REST是Web的架构风 ...

[理解REST] 01 REST的起源

1 世界上第一个网站 1990年12月20日,这一天对于现在的互联网来说意义非凡。欧洲核子研究组织(CREN)的科学家Tim Berners-Lee在一台NeXT电脑上启动了世界上的第一个网站(当然当时仅能Tim Berners-Lee自己访问),这台电脑至今仍保留在CREN,但当年那个网站已经不复存在了。鉴于这个网站的意义重大,CREN在2 ...

[理解REST] 00 参考资料

Web之父 Tim Berners Lee : https://en.wikipedia.org/wiki/Tim_Berners-Lee 世界上诞生的第一个网站 : http://info.cern.ch/ 世界上诞生的第一个网站-模拟器 : http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html Web的生日 : http://home.cern/topics/birth-web HTTP 0.9 : https://www.w3.org/Protocols/HTTP/AsImplemented.html HTTP 历史 : https://www.w3.org/Protocols/History.html HTTP 1.1 : https://www.ietf.org/rfc/rfc2616.txt Evolution of HTTP : https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP Roy T. Fielding : https://en.wikipedia.org/wiki/Roy_Fielding Roy T. Fielding : REST 论文《Architectural Styles and the Design of Network-based Software Architectures》 : https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm Roy T. Fielding : REST 论文(中文版 译者:李锟)《架构风格与基于网络应用软件的架构设计(中文修订版)》 : https://www.infoq.cn/minibook/web-based-apps-archit-design Roy T. Fielding : Roy T. Fielding ...

[Java] Install

1 OpenJdk 下载地址 : https://adoptium.net/ https://www.microsoft.com/openjdk https://developers.redhat.com/products/openjdk/download # 设置环境变量 Env-SetJavaEnvironmentVariable # 查看版本信息 java -v 2 Maven 下载地址 : https://maven.apache.org/download.cgi 下载二进制包 : apache-maven-3.8.1-bin.zip解压至d:\_app\_maven\目录下。 # 设置环境变量 Env-SetMavenEnvironmentVariable # 查看版本信息 mvn -v # wrapper # https://github.com/takari/maven-wrapper mvn --non-recursive --debug io.takari:maven:wrapper -Dmaven='3.8.1' 2.1 settings.xml 复制settings.xml配置文件到HOME/.m2/目录。 settings.xml <?xml version="1.0" encoding="UTF-8"?> <!-- https://maven.apache.org/settings.html --> <!-- 加载顺序 1. 全局设置 M2_HOME/conf/settiing.xml 2. ...

[Kindle] kindlegen

1 Download 主页 : https://www.amazon.com/gp/feature.html?docId=1000765211。美国IP打开才能看到下载地址。打开后的地址如下表格 : os download url windows http://kindlegen.s3.amazonaws.com/kindlegen_win32_v2_9.zip macos http://kindlegen.s3.amazonaws.com/KindleGen_Mac_i386_v2_9.zip linux http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v2_9.tar.gz 2 EPUB to MOBI # 转换epub为mobi kindlegen.exe xxx.epub epub-to-mobi.bat REM 批量转换 @echo off for %%i in (*.epub) do kindlegen "%%i" -verbose pause 3 help kindlegen.exe ************************************************************* Amazon kindlegen(Windows) V2.9 build 1029-0897292 命令行电子书制作软件 Copyright Amazon.com and its Affiliates 2014 ************************************************************* 使用规则 : kindlegen [文件名. ...

[PowerShell] Hyper-V

1 Enable Hyper-V Enable-WindowsOptionalFeature -Online -FeatureName:Microsoft-Hyper-V -All https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v#enable-hyper-v-using-powershell 2 Create virtual switch $NetNetAdapter = (Get-NetAdapter)[0] New-VMSwitch -Name 'External Virtual Network Switch' -NetAdapterName $NetNetAdapter.Name -AllowManagementOS $TRUE https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/connect-to-network https://docs.microsoft.com/en-us/powershell/module/hyper-v/new-vmswitch?view=win10-ps 3 Create virtual hard disk $VHDFilePath = 'd:\test.vhdx' New-VHD -Path $VHDFilePath -Dynamic -SizeBytes 32GB https://docs.microsoft.com/en-us/powershell/module/hyper-v/new-vhd?view=win10-ps 4 Create virtual machine $VMName = 'test_vm' $VMPath = "d:\$VMName" $VMSwitch = 'External Virtual Network Switch' $InstallMedia = 'd:\en_windows_server_2016_x64_dvd_9718492.iso' $VHDFilePath = 'd:\test.vhdx' # Create New Virtual Machine New-VM -Name $VMName -Generation 2 -VHDPath $VHDFilePath -SwitchName $VMSwitch -MemoryStartupBytes 2147483648 -Path $VMPath # Add DVD Drive to Virtual Machine Add-VMScsiController -VMName $VMName Add-VMDvdDrive -VMName $VMName -ControllerNumber 1 -ControllerLocation 0 -Path $InstallMedia # Mount Installation Media $DVDDrive = Get-VMDvdDrive -VMName $VMName # Configure Virtual Machine to Boot from DVD Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive 5 参考引用 https://docs.microsoft.com/en-us/virtualization/index#pivot=main&panel=server https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-on-windows-server https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/plan/should-i-create-a-generation-1-or-2-virtual-machine-in-hyper-v https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/export-and-import-virtual-machines https://docs.microsoft.com/en-us/windows-server/administration/performance-tuning/role/hyper-v-server/ ...

[PowerShell] Script

1 Script File List ps1文件列表 a.ps1 ##################################################### # current user powershell profile entry script file. ##################################################### # params Param( [switch]$Init = $False, [string]$GitUserName = 'lnh', [string]$GitUserEmail = 'lnhdyx@outlook.com' ) @( '/log.ps1', '/env.ps1', '/file.ps1', '/git.ps1', '/vscode.ps1', '/gui.ps1', '/hosts.ps1', '/profile.ps1', '/prompt.ps1', '/sln.ps1', '/ui.ps1', '/vm.ps1', '/http.ps1', '/yaml.ps1', '/ip.ps1', '/k8s.ps1', '/docker.ps1', '/hugo.ps1', '/java.ps1', '/wlan.ps1', '/directory.ps1', '/idea.ps1', '/auto-complete.ps1', '/alias.ps1' ) | Foreach-Object { . "$PSScriptRoot$_" } if ($Init) { Profile-AddScriptFile -ProfilePath $PROFILE -ScriptFilePath $PSCOMMANDPATH Git-SetGlobalAlias Git-SetGlobalConfig Git-SetGlobalUser -UserName $GitUserName -UserEmail $GitUserEmail Git-GetConfig Update-Help } Git-ImportPoshGit Kubernetes-ImportPSKubectlCompletion UI-SetDisplayOptions Write-Host "Get-ExecutionPolicy $(Get-ExecutionPolicy)" -ForegroundColor Green alias.ps1 ################################ # powershell alias functions ################################ Set-Alias -Name d -Value Directory-To Set-Alias -Name dq -Value Directory-Search-Path-List-From-Quick-Access Set-Alias -Name dql -Value Directory-List-Quick-Access Set-Alias -Name c -Value VsCode-Open Set-Alias -Name i -Value Idea-Open Set-Alias -Name dr -Value Docker-Run Set-Alias -Name dre -Value Docker-Run-entrypoint Set-Alias -Name drs -Value Docker-Run-entrypoint-sh Set-Alias -Name drb -Value Docker-Run-entrypoint-bash Set-Alias -Name dc -Value docker-compose Set-Alias -Name dm -Value docker-machine Set-Alias -Name k -Value kubectl Set-Alias -Name mk -Value minikube Set-Alias -Name e ...

[Windows] bcd

1 BCD BCD=Boot Configuration Data。BCD文件是Vista引入的负责保存启动配置数据的文件,在NT60版本之前是使用boot.ini来保存启动配置数据。 1.2 编辑工具 bcdboot.exe : 简易。 bcdedit.exe : 功能全面。 bcdboot.exe 和 bcdedit.exe很相似,但是也有如下差异 : bcdboot.exe : 侧重于为现有的Windows分区设置引导加载程序(准备安装的,已安装的或者基于VHD的);通过将指定目录中存在的 ...

[Windows] diskpart

路径 %systemroot%\system32\diskpart.exe 参考 http://go.microsoft.com/fwlink/?LinkId=128458 ...

[Windows] dism

部署映像服务和管理 dism.exe(Deployment Image Servicing and Management)。用来生成、拆分、合并、安装,配置,更新WIM。 dism.exe示例 capture-image : 捕获指定的文件夹中的文件到WIM文件中。 dism /capture-image /capturedir:i:\ /name:"Windows 7 Backup" /imagefile:e:\backup.wim get-imageinfo : 获取WIM文件中的image信息。 # *.wim *.vhd *.ffu 文件。 dism /get-imageinfo /imagefile:d:\source.wim apply-image : 解压释放一个image中的所有文件到指定的目录。 dism /apply-image /imagefile:source.wim /index:1 /applydir:d:\source-1 export-image :导出一个image到另外一个文件中。 dism ...

[Windows] oscdimg

路径 %systemroot%\system32\oscdimg.exe 参考 https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/oscdimg-command-line-options https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn898597(v=vs.85).aspx ...

[Windows] regedit

1 regedit.exe 注册表是Windows中的一个非常重要的数据库,用于存储系统和应用程序的设置信息。regedit.exe(Registry Editor)是Windows的注册表编辑器。 位于 : %systemroot%\regedit.exe 2 *.reg文件格式 文件扩展名 : .reg。 编码方式 : UTF-16 LE。 换行 : CRLF。 注释 : ;。 删除 : -。 3 列表 reg文件列表 class-context-menu.hide.reg ��Windows Registry Editor Version ...

[Windows] slmgr

1 软件授权管理 slmgr.vbs(Software License Manager Script)是Windows Vista及后续版本中用来管理系统激活和密钥、证书的命令行工具。 1.2 OEM激活 # 安装 LENOVO 许可证 slmgr.vbs -ilc LENOVO.6K2KY-BFH24-PJW6W-9GK29-TMPWP.ABE28D29811D239567F522B6B99EA85EED911A90.XRM-MS # 导入密钥 slmgr.vbs -ipk 6K2KY-BFH24-PJW6W-9GK29-TMPWP # 查看激活状态 slmgr.vbs -dlv 2 列表 XRM-MS文件列表 7.ULTIMATE.DELL.342DG-6YJR8-X92GV-V7DCV-P4K27.CC9172BBB1A299EA0B0FE7FBB97DB51FAF0A08B5.XRM-MS <?xml version="1.0" encoding="utf-8"?><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" licenseId="{e56c50ff-e9fe-461b-a5f2-1573cf933dbf}" xmlns:sx="urn:mpeg:mpeg21:2003:01-REL-SX-NS" xmlns:mx="urn:mpeg:mpeg21:2003:01-REL-MX-NS" xmlns:sl="http://www.microsoft.com/DRM/XrML2/SL/v2" xmlns:tm="http://www.microsoft.com/DRM/XrML2/TM/v2"><r:title>OEM Certificate</r:title><r:grant><sl:binding><sl:data Algorithm="msft:rm/algorithm/bios/4.0">kgAAAAAAAgBERUxMICABAAEAf/bBBb5cV2Olimjzbo8G+q+0n2iCI+xQQFpzf+zkB8vcJRqc4+NmEeClmAbFgAr6QpOGmOfVG9TXOqQL7uJ9vl9bFQyr0CHev+m1bqRXuYwM0ro6aTB2lHGiZNdM2IW/36VqyNxF1U2MuIwFL/wuI8QpxW8/KWxtV3kOtnXtIZU=</sl:data></sl:binding><r:possessProperty/><sx:propertyUri definition="trustedOem"/></r:grant><r:issuer><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.microsoft.com/xrml/lwc14n"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference><Transforms><Transform Algorithm="urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform"/><Transform Algorithm="http://www.microsoft.com/xrml/lwc14n"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>mylUeSOamDoBwptofZ7FKoCePHk=</DigestValue></Reference></SignedInfo><SignatureValue>OQojHOugcB3VvUc7xRonmHv/DP136N/mKul3wR7gXg9OgmlSlm2Gjm59QO9xt7LvWDjdNWUNwNudww9+Ay1wjly0fGXRcMBO1rObJgAbGMC7ejtxMETpNZ8Ukzn9nhsnBJAUtzvynXSFqJQvboe45dNN6FBh9uaEj4zPiUKlk2c3B9GwFZi0554cC/tgF7mA8Bb+Hsa7e2jMrRN5KIjxD5diRNZr7XRzH0RLm/S9+sKtl9SkVQ5b3bIZhfAqVJ4hsCFpvyaVKW/XYbc4wOxf6r377ONOQD3NJX4nqELg3S4GCUG7xyKHFL2/QVqygiGr+CRCxJfZxf2feucbSWOgMQ==</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>sotZn+w9juKPf7bMO9rNFriB+10v/t9bo/XWG+rzoDbw/uF4INZ5rGRIitiITY/bI4rANkv4Z5hG/8VxGMbqvqcaXJqnRFda7XAjgm1z9wkgX1R/d2tXLUUUQP0J1XuSbgzR89T/lpnc5q2Cdvy7Gv2pZvAzSeLOponXc8J3zOFr0IUXBGprXKnemVk1iJBFnyQGlWG3UoSpdlF0ichBQwPx/PgoTbcZsA7Gg62BGwPx/uDA3ZgwowrPlRwfLVAO6qE9xPJqRZdRFfPHbdQjp1YAq27wc6cTz5sPSTB1pJ4L9MD+NpvHj2OMZV5+LJ+bxZbTqhPcrzCp7ckkyD7Hzw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature><r:details><r:timeOfIssue>2006-03-16T20:17:30Z</r:timeOfIssue></r:details></r:issuer><r:otherInfo xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS"><tm:infoTables xmlns:tm="http://www.microsoft.com/DRM/XrML2/TM/v2"><tm:infoList tag="#global"><tm:infoStr name="applicationId">{55c92734-d682-4d71-983e-d6ec3f16059f}</tm:infoStr><tm:infoStr name="licenseCategory">msft:sl/PPD</tm:infoStr><tm:infoStr name="licenseType">msft:sl/OEMCERT</tm:infoStr><tm:infoStr name="licenseVersion">2.0</tm:infoStr><tm:infoStr name="licensorUrl">http://licensing.microsoft.com</tm:infoStr></tm:infoList></tm:infoTables></r:otherInfo></r:license> 7.ULTIMATE.LENOVO.6K2KY-BFH24-PJW6W-9GK29-TMPWP.ABE28D29811D239567F522B6B99EA85EED911A90.XRM-MS <?xml version="1.0" encoding="utf-8"?><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" licenseId="{36bb40b7-1790-4137-937d-6fdcab4f0608}" xmlns:sx="urn:mpeg:mpeg21:2003:01-REL-SX-NS" xmlns:mx="urn:mpeg:mpeg21:2003:01-REL-MX-NS" xmlns:sl="http://www.microsoft.com/DRM/XrML2/SL/v2" xmlns:tm="http://www.microsoft.com/DRM/XrML2/TM/v2"><r:title>OEM Certificate</r:title><r:grant><sl:binding><sl:data Algorithm="msft:rm/algorithm/bios/4.0">kgAAAAAAAgBMRU5PVk8BAAEAaRZKn7FLOvuAIKqvxPk+wYBJ7mplJnIezb9fL5bWwAqS9Qa1ALI7KQLiTI3C8rxBd5xw8PMbCdJjWtyog/heyRWV+fr93AW3TWd/LbOEMyDh0Xkqp2p30bYgKnZCxdXptkNAVUTDyTeZX0GXcPPR9gfsexopocHxkf1Ihm4+zss=</sl:data></sl:binding><r:possessProperty/><sx:propertyUri definition="trustedOem"/></r:grant><r:issuer><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.microsoft.com/xrml/lwc14n"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference><Transforms><Transform Algorithm="urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform"/><Transform Algorithm="http://www.microsoft.com/xrml/lwc14n"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>/A8xsgOKXrGblQhnUX2SSdRgNy4=</DigestValue></Reference></SignedInfo><SignatureValue>kuLkCnKyqITqBlnU61GvfScsbnvg/A6NI/OTQYJZla++WLQhCj9ogu+Pn4YYGAB3gfUy/bQmFKAS86n0SylBHPNNvFoXbn8k3ak3ndOaFaT+d+vs1vdTU6WWaOsZ6rD9xXSWoFDMjDyueNJ6mUoTWGWYSVJZYOpk8UWnMaz4yH9UsjrQ5ifdvosgLmlKvoJc4mEntDfl56rluCsyP3t2WUp69OREDAuhXqE8mD6Ib3v4boMTrLZmHt2ldCZ3rZK/amtNjTItPPoXrFk6fNU9F0W2qNX19yXpzrwpaKwKcQ7QKy0kUjRkyg7j7gTgfAdR/aHh/eunoDFuJIltETZG4A==</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>sotZn+w9juKPf7bMO9rNFriB+10v/t9bo/XWG+rzoDbw/uF4INZ5rGRIitiITY/bI4rANkv4Z5hG/8VxGMbqvqcaXJqnRFda7XAjgm1z9wkgX1R/d2tXLUUUQP0J1XuSbgzR89T/lpnc5q2Cdvy7Gv2pZvAzSeLOponXc8J3zOFr0IUXBGprXKnemVk1iJBFnyQGlWG3UoSpdlF0ichBQwPx/PgoTbcZsA7Gg62BGwPx/uDA3ZgwowrPlRwfLVAO6qE9xPJqRZdRFfPHbdQjp1YAq27wc6cTz5sPSTB1pJ4L9MD+NpvHj2OMZV5+LJ+bxZbTqhPcrzCp7ckkyD7Hzw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature><r:details><r:timeOfIssue>2006-06-17T18:22:30Z</r:timeOfIssue></r:details></r:issuer><r:otherInfo xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS"><tm:infoTables xmlns:tm="http://www.microsoft.com/DRM/XrML2/TM/v2"><tm:infoList tag="#global"><tm:infoStr name="applicationId">{55c92734-d682-4d71-983e-d6ec3f16059f}</tm:infoStr><tm:infoStr name="licenseCategory">msft:sl/PPD</tm:infoStr><tm:infoStr name="licenseType">msft:sl/OEMCERT</tm:infoStr><tm:infoStr name="licenseVersion">2.0</tm:infoStr><tm:infoStr name="licensorUrl">http://licensing.microsoft.com</tm:infoStr></tm:infoList></tm:infoTables></r:otherInfo></r:license> 3 路径 %systemroot%\system32\slmgr.vbs 4 参考 https://technet.microsoft.com/en-us/library/ff793433.aspx https://docs.microsoft.com/en-us/deployoffice/vlactivation/tools-to-manage-volume-activation-of-office ...

[Windows] terminal

Windows Terminal https://github.com/microsoft/terminal ...

[Windows] wim

WIM 文件 WIM=Windows Imaging Format,是Vista引入的系统封装方式。有一下特点 : 基于文件的。 硬件无关的。 可以封装多个镜像。比如包含Windows 7专业版+Windows 10专业版。 文件压缩和硬连接。 参考 Vista https://en.wikipedia.org/wiki/Windows_Imaging_Format Windows Imaging File Format.rtf : https://www.microsoft.com/en-us/download/details.aspx?id=13096 https://msdn.microsoft.com/en-us/library/windows/desktop/dd861280.aspx https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/wim-vs-ffu-image-file-formats ...

[Windows] winpe

参考 https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-intro https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn938389(v=vs.85).aspx ...

[PowerShell] Help

1 PowerShell 执行策略 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser ...

[信息安全] 04 一次性密码 & 身份认证

在信息安全领域,一般把Cryptography称为密码,而把Password称为口令。日常用户的认知中,以及我们开发人员沟通过程中,绝大多数被称作密码的东西其实都是Password(口令),而不是真正意义上的密码。本文保持这种语义,采用密码来代指Password,而当密码和口令同时出现时,用英文表示以示区分。 1 OTP 一次性密码 OTP是On ...

[信息安全] 03 HTTPS工作流程

1 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对称密码,公钥密码,密码散列函数,混合密码系统,消息认证码,数字签名,伪随机数,数字证书)这几个。其中它们之间也是互相依赖的,我们来简单的梳理一下它们的依赖关系。 对称密码 : 无。 公钥密码 : 无。 密码散列函数 : 无。 伪随机数 : 可以利用[密码散列函数来]实现,也可以不使用。 混合密码系 ...

[信息安全] 02 密码工具箱 第2部分

在上一篇[信息安全] 01 密码工具箱 第1部分中介绍了一些密码技术相关的一些基本工具,同时遗留了一个鸡生蛋蛋生鸡的问题和公钥的认证问题( ̄▽ ̄)",这里再补充几个常用的工具先。 1 伪随机数(Pseudo-Random Number) 随机数大家不陌生,但是随机数怎么就和信息安全扯上关系了呢?其实想一想我们在给自己的账号设置密码的时候,是不是都会尽量 ...

[信息安全] 01 密码工具箱 第1部分

0 何谓信息安全? 对于信息安全性的重要性,我想大家都不会否认。那么具体来说应该具有哪些特性才能称之为安全呢?举个简单的例子 : 我给你发送一条消息"借给我100元",当你收到这条消息并且处理后你的账户里面会少出来100块,我的账户会多出来100块。在这个过程中,你是消息接收方,我是消息发送方。 作为通信双方的你我都不希望让 ...

[Linux] systemd

1 systemctl # help sudo systemctl -help # lifecycle sudo systemctl daemon-reload # unit file sudo systemctl enable docker.service sudo systemctl disable docker.service sudo systemctl list-units --type=service # unit sudo systemctl start docker.service sudo systemctl restart docker.service sudo systemctl stop docker.service sudo systemctl status docker.service ...

[认证&授权] 03 使用OAuth2进行用户认证(译)

原作者 : Justin Richer, 原文: User Authentication with OAuth 2.0。 OAuth2规范定义了一个授权(delegation)协议,对于使用Web的应用程序和API在网络上传递授权决策非常有用。OAuth被用在各钟各样的应用程序中,包括提供用户认证的机制。这导致许多的开发者和API提供者得出一个OAuth本身是一个认证协议的错误结论,并将其错误的使用于此。在此需要明确指出 ...

[认证&授权] 02 OAuth2授权(续) & JWT(JSON Web Token)

1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证&授权] 01 OAuth2授权中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得access_token,并未说明怎么来撤销一个access_token。关于这部分OAuth2单独定义了一个RFC7009 - OAuth 2.0 Token Revoc ...

[Linux] SSH

1 ssh ssh lnh@ubt1 -p 22 2 ssh-keygen # Create RSA private(`id_rsa`) and public(`id_rsa.pub`) key pair. ssh-keygen -t rsa 3 scp # Copy file. scp 1.txt lnh@ubt1:/home/lnh/1.txt 4 ssh-copy-id # Copy `id_rsa.pub` to `~/.ssh/authorized_keys`. ssh-copy-id -i id_rsa.pub lnh@ubt1 5 sshd_config /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ...

[工具] openwrt

1 flush 1.1 breed breed1是一个bootloader,类似与电脑中的BIOS以及安卓手机中的recovery,用来刷机用的。 # 登陆到路由器 ssh root@10.1.199.1 # 复制breed.bin到路由器 scp breed.bin ssh root@10.1.199.1:/root/ # 刷入breed mtd -r write breed.bin u-boot 成功刷入后路由器会自动重启,启动后长按重置键3~6秒松开即可进入breed模式。breed的默认ip为192.168.1.1,故而需要 ...

[Linux] 02 Expansion

Tilde Expansion ~ ~ : /home or /users or /Users. # user 'lnh'. # /home/lnh/.bash_profile or /users/lnh/.bash_profile echo ~lnh/.bash_profile # current user home directory echo ~ Brace Expansion {} # a b c echo {a..c} # 01 02 03 04 05 06 07 08 09 10 echo {01..10} # 1 3 5 echo {1..5..2} # file1.txt file2.txt file3.txt file4.txt echo file{1..4}.txt ...

[认证&授权] 01 OAuth2授权

1 OAuth2解决什么问题的? 举个栗子先。小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来。然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写 😂))。 那么现在问题来了,小明有两个方案来得到打印的服务。 在自己的QQ空间把想要打印的照片下载下来,然后提供给PP(直接发邮件给PP或者网盘共享给PP ...

[Linux] 01 Basic

1 Commands, Parameters/Arguments, Options # show the current shell. echo $SHELL # displays all installed shell. cat -n /etc/shells command : cat option : -n parameters/arguments : /etc/shells 2 Special Characters Character Meaning # Comment ` Command substitution (archaic) $ Variable expression ( Start subshell ) End subshell \ Quote next character & Background job { Start command block } End command block ; Shell command separator ‘ Strong quote " Weak quote ! Pipeline logical NOT 2.1 Wildcard Character Character Meaning * String wildcard ? Single-character wildcard [ Start character-set wildcard ] End character-set wildcard 2.2 Path Character Character Meaning / Root directory / Pathname directory separator ~ Home directory 2.3 I/O Character Character Meaning | Pipe < Input redirect > Output redirect >> Append redirect (if file exists) 2> Error output redirect 2>&1 Send error to output redirect ...

[Linux] Bash Script

1 Script File List sh文件列表 a.sh # .zshrc(z shell run commands) source $(dirname $0)/env.sh source $(dirname $0)/function.sh source $(dirname $0)/function-string.sh source $(dirname $0)/function-directory.sh source $(dirname $0)/function-git.sh source $(dirname $0)/function-proc.sh source $(dirname $0)/git-prompt.sh source $(dirname $0)/zsh-prompt.sh source $(dirname $0)/vscode.sh source $(dirname $0)/idea.sh source $(dirname $0)/alias.sh source $(dirname $0)/zsh-compdef.sh alias.sh # alias alias ..='cd ..' alias ...='cd ../..' alias d='__directory_to' alias c='__vscode_open' alias i='__idea_open' alias dr='docker run --rm --tty --interactive' alias dre='dr --entrypoint' alias drs='dre sh' alias drb='dre bash' alias dh='docker history --human --no-trunc' alias dc='docker-compose' alias dm='docker-machine' alias mk='minikube' alias h='history | grep' alias md='mkdir -p' alias bak='backup_file' alias cls='clear' alias grep='grep --color=auto' alias untar='tar -z -x -v -f' alias wget='wget --continue --show-progress' alias sha='shasum --algorithm 1' alias sha256='shasum --algorithm 256' alias ping='ping -c 5' alias ipe='curl http://ifconfig.me/ip' alias ipl='ipconfig getifaddr en0' alias hs='miniserve --color-scheme squirrel --qrcode' alias hsu='hs --upload-files' alias pfd='rinetd --conf-file /lnh/_code/blog/src/tool/rinetd/rinetd.conf' alias pf='pfd --foreground' alias env='env | sort' alias penv='proc_env' alias penv2='proc_env2' # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html alias path='echo "${PATH//:/\n}"' # https://github.com/jeremyfa/yaml.js # cnpm ...

[程序设计语言] 04 [核心概念] 数据类型

0 概述 为何高级语言需要类型系统这个概念?在汇编时代是没有完整的数据类型系统的,结构化编程引入了结构化的控制流、为结构化设计的子程序,随之这种结构化的代码所操作的数据也进一步的抽象化、特化,故而有了数据类型这种概念,类型系统主要用于两个用途 : 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文。比如int类 ...

[程序设计语言] 03 [核心概念] 控制流

0 概述 前面介绍了语言的演进以及一些基础概念后,从本篇开始进入了语言的核心问题中。这一篇讨论的是语言计算模型(大致可以用控制流来表述),大致如下7种 : 顺序执行 : 最基本的流程控制,按部就班的一条一条按顺序执行; 选择 : 根据运行时的某些条件来决定执行那些,如if else等; 迭代 : 反复(或特定次数)的执行一段代码,如for循环; 过程抽象 : 把一段 ...

[程序设计语言] 02 [核心概念] 名字、作用域和约束(Bindings)

1 名字、约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是对象,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有名字的东西,比如变量、常量、类型、子程序、模块等等。第二个是抽象的,因为我们讨论的是语言的核心概念,所以抽象的具体指代的是语言特征与任何计算机体系结构分离的程度。 如果可以给名字下个定义,那么它是代 ...

[程序设计语言] 01 基础

1 机器语言 > 汇编语言 > 高级语言 语言是人与人的一种交流工具,就比如我现在用汉语来写这篇博文来交流探讨技术问题;程序设计语言也是如此,只是交流对象不是人而是机器。我可以用汉语来写博文,也可以用英语来写(假如我英语熟练);我可以用PHP来写一个网站,也可以用ASP.NET来写。这就说明语言的本质就是一种交流工具,而我选择哪种语言来交流并不会 ...

[程序设计语言] 00 前言

1 为何要读这本书? 首先这是一本介绍语言的入门书籍(笔者阅读是裘宗燕老先生翻译的第二版),如果你想从中学到一些独门绝技,那么抱歉,木有;其次它介绍的是程序设计语言的一些重要基础概念、各种概念之间的关系;并解释了语言中诸多结构的形成和发展过程,以及他们演化到今天这种形式的根源。 那么或许你该问了,了解这些有甚好处,不知道我照样写出漂亮的代码 ...