Year: 2020

DeepOps的Jenkins小笔记-搭建jenkins

官网中文站的教程

https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

方式1:下载并运行 Jenkins

注意运行jenkins的jdk版本8或11

  1. 下载 Jenkins.
  2. 打开终端进入到下载目录.
  3. 运行命令 java -jar jenkins.war --httpPort=8080.
  4. 打开浏览器进入链接 http://localhost:8080.
  5. 按照说明完成安装.

http://localhost:8080/jks

方式2: docker安装jenkins

https://www.jenkins.io/doc/book/installing/

按顺序一路操作即可,如果有权限问题,加上sudo

docker network create jenkins
docker volume create jenkins-docker-certs
docker volume create jenkins-data
docker container run \
  --name jenkins-docker \
  --rm \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  --publish 2376:2376 \
  docker:dind
docker container run \
  --name jenkins-blueocean \
  --rm \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  jenkinsci/blueocean

初始化jenkins

Unlocking Jenkins

When you first access a new Jenkins instance, you are asked to unlock it using an automatically-generated password.

  1. Browse to http://localhost:8080 (or whichever port you configured for Jenkins when installing it) and wait until the Unlock Jenkins page appears.

Unlock Jenkins

To ensure Jenkins is securely set up by the administrator, a password has been written to the log (not sure where to find it?) and this file on the server:

最主要的就是找到这个密码,然后输入。另外根据提示下载插件,创建用户算是完成了基本设置。

使用war包安装:/var/jenkins_home/secrets/initialAdminPassword

使用docker 安装 :/var/lib/docker/volumes/jenkins-data/_data/secrets/initialAdminPassword

Please copy the password from either location and paste it below.Administrator password

DeepOps的程序员数学小笔记-二进制

转发请标注原文链接:http://www.mimiq.com.cn/?p=418

1 二进制

电路只有开、关两种状态。使用 0 、1 表示。十进制中 10 为基数,二进制中 2 为基数

1.1 python 十进制 转换为 二进制、八进制、十六进制

# 十进制 --> 二进制
n2 = 17
r2 = bin(n2)   

# 十进制 --> 八进制
n8 = 17
r8 = oct(n8)   

# 十进制 --> 十六进制
n16 = 17
r16 = hex(n16) 

print(n2,' --> ',r2)  
print(n8,' --> ',r8)
print(n16,' --> ',r16) 
#result:
17  -->  0b10001
17  -->  0o21
17  -->  0x11

1.2 python 二进制、八进制、十六进制 转换为 十进制

# 二进制 --> 十进制
s2 = '0b10001'
r2 = int(s2,base=2) 

# 八进制 --> 十进制
s8 = '0o21'
r8 = int(s8,base=8) 

# 十六进制 --> 十进制
s16 = '0x11'
r16 = int(s16,base=16) 

print(s2,' --> ',r2)  
print(s8,' --> ',r8)
print(s16,' --> ',r16) 
#result:
0b10001  -->  17
0o21  -->  17
0x11  -->  17

1.3 其他一些用法

s = '11'
r1 = int(s,base=16) # 16进制 可以不加0x
r2 = int(s,base=9)  # 9进制 转换为 10进制

print(s,' --> ',r1) 
print(s,' --> ',r2)
#result:
11  -->  17
11  -->  10

2 二进制的位操作

2.1 向左移位

# 正数
n=26
print(n)
print(bin(n))
n2=n<<2       # 左移2位
print(n2)
print(bin(n2))

n3=n<<60
print(n3)
print(bin(n3))
# 负数
n=-26
print(n)
print(bin(n))
n2=n<<2
print(n2)
print(bin(n2))

n3=n<<60
print(n3)
print(bin(n3))
#result:
26
0b11010
104
0b1101000
29975959119778021376
0b11010000000000000000000000000000000000000000000000000000000000000
-26
-0b11010
-104
-0b1101000
-29975959119778021376
-0b11010000000000000000000000000000000000000000000000000000000000000

2.2 向右移位

右移操作区分:算术右移 逻辑右移逻辑右移使用>>>(python中无逻辑右移操作符,没有java重编码测试),右移后左边补0;算术右移使用>>,右移后,符号位右侧补1。负数采用补码方式记录。

# 正数
n=53
print(n)
print(bin(n))
n2=n>>1
print(n2)
print(bin(n2))
n3=n>>7
print(n3)
print(bin(n3))
# 负数
n=-53
print(n)
print(bin(n))
n2=n>>1
print(n2)
print(bin(n2))
n3=n>>7
print(n3)
print(bin(n3))
#result
53
0b110101
26
0b11010
0
0b0

-53
-0b110101
-27
-0b11011
-1
-0b1

2.3 位的“或”、“与”、“异或”、非

a = 60
b = 13
print('a:',bin(a))
print('b:',bin(b))


print('a&b:',bin(a&b))
print('a|b:',bin(a|b))
print('a^b:',bin(a^b))
print('~a:',bin(~a))

a1=-60
print('a1:',bin(a1))
print('~a1:',bin(~a1))
result:
a: 0b111100
b: 0b1101

a&b: 0b1100
a|b: 0b111101
a^b: 0b110001
~a: -0b111101

a1: -0b111100
~a1: 0b111011

3 原码、反码 和 补码

参考:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111],即[-127 , 127]

反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反

补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

反码解决 1-1=0 的问题:

1 – 1 = 1 + (-1) = [0000 0001] + [1000 0001]= [0000 0001] + [1111 1110] = [1111 1111] = [1000 0000] = -0

码解决了反码相加 等于 -0 的问题:

1-1 = 1 + (-1) = [0000 0001] + [1000 0001] = [0000 0001] + [1111 1111] = [0000 0000]=[0000 0000]


参考资料:

  • 极客时间-程序员的数学基础课
  • 结城浩-程序员的数学

下面是极客时间的该课程快捷入口:

15 个提高效率的 Python 编程技巧 (转)

转自:https://www.infoq.cn/article/gGWTBjWt3xHiEQQQMgJa

英文原文: 15 Python tips and tricks, so you don’t have to look them up on Stack Overflow

做个笔记,留文存档。

1. 交换值

x, y = 1, 2
print(x, y)
x, y = y, x
print(x, y)

2. 字符串列表合并为一个字符串

sentence_list = ["my", "name", "is", "George"]
sentence_string = " ".join(sentence_list)
print(sentence_string)

3. 将字符串拆分为子字符串列表

sentence_string = "my name is George"
sentence_string.split()
print(sentence_string)

4. 通过数字填充初始化列表

[0]*1000 # List of 1000 zeros 
[8.2]*1000 # List of 1000 8.2's

5. 字典合并

x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = {**x, **y}

6. 反转字符串

name = "George"
name[::-1]

7. 从函数返回多个值

def get_a_string():
  a = "George"
  b = "is"
  c = "cool"
  return a, b, c
sentence = get_a_string()
(a, b, c) = sentence

8. 列表解析式

a = [1, 2, 3]
b = [num*2 for num in a] # Create a new list by multiplying each element in a by 2

9. 遍历字典

m = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
for key, value in m.items():
  print('{0}: {1}'.format(key, value))

10. 同时遍历列表的索引和值

m = ['a', 'b', 'c', 'd']
for index, value in enumerate(m):
  print('{0}: {1}'.format(index, value))

11. 初始化空容器

a_list = list()
a_dict = dict()
a_map = map()
a_set = set()

12. 删除字符串两端的无用字符

name = "  George "
name_2 = "George///"
name.strip() # prints "George"
name_2.strip("/") # prints "George"

13. 列表中出现最多的元素

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]
print(max(set(test), key = test.count))

14. 检查对象的内存使用情况

import sys
x = 1
print(sys.getsizeof(x))

15. 将 dict 转换为 XML

from xml.etree.ElementTree import Element
def dict_to_xml(tag, d):
    '''
    Turn a simple dict of key/value pairs into XML
    '''
    elem = Element(tag)
    for key, val in d.items():
        child = Element(key)
        child.text = str(val)
        elem.append(child)
    return elem

关于财富的117条法则

整理来自书籍《财富的理想国-关于财富的117条法则 》 ,详细的内容可以看一下这本书。我自己看完这本书之后,觉得不少法则是比较适用与自己的。在不同的时期,不同的法则会为我们提供不同的帮助。

整理的内容也是按照书中目录的章节划分去整理的,作者的分类肯定是经过深思熟虑的,很值得收藏的内容。

1 财富哲学(1~19)

1 谁都可以拥有财富-你需要的只是努力

2 确定你对财富的定义

3 明确可能实现的、有意义的目标

4 不要与消极的人分享财富观

5 大多数人因为懒而无法致富

6 既要忠于理想,也要面对现实

7 了解自己的金钱观及其源头

8 财富是结果,不是奖励

9 确定你想要用钱做什么

10 钱能生钱,只要你用对了钱

11 计算净收益,对财富心中有数

12 如果你用财富解决问题,到头来它只会变成问题

13 你可以赚很多钱,可以享受生活,夜里也可以安然入睡

14 不要靠做坏人赚钱

15 财富和幸福-了解两者的关系

16 懂得价格与价值的区别

17 了解富人的思维方式

18 不要妒忌富人

19 控制自己比管理财富更难

2 获得财富(20~69)

20 开始前,你必须知道自己的现状

21 财务计划是必须有的

22 掌握自己的财务状况

23 保险由受益人,但多半不是你

24 心向财富,才能拥有财富

25 抓住机会,积累财富(不,这不是赌博)

26 明确如何对待风险

27 在毛线钱,考虑其他备选方案

28 如果不相信某人,就不要和他有商业来往

29 赚钱永远不嫌晚

30 从小开始积累(如果自己太晚,把这一条法则告诉孩子)

31 针对人生的不同阶段调整财务计划

32 想不工作,首先你要努力工作,转到足够多的钱

33 了解交易的艺术

34 学习谈判的艺术

35 小钱不能让你成为有钱人,却能让你的生活晚风痛苦

36 真正的财务原子做生意,而非酬劳

37 为别人工作不必然能让你富有,但可能性并非为零

38 不要犯拖延症-迅速做出财务决定

39 像不需要钱那样工作

40 你让支出低于收入

41 不要借钱-除非万不得已

42 合并债务,尽可能的少支付利息

43 培养一种技能,你会因此反复获益

44 把还债当作第一要务,

45 不要只为谋生而忙碌

46 大笔存钱-这么做对吗

47 不要租借,要购买

48 了解投资的真正含义

49 积累一定资本后,理智投资

50 从长期看,房地产未必能跑赢股票

51 掌握销售的艺术

52 用他人的眼光看待自己

53 不要认为自己永远回应

54 如果不懂,就不要独自选股

55 了解股市真正的运行原理

56 只购买你看的懂得股票(或任何东西)

57 理性做出投资和消费决策

58 利用专业投资人士,但不要被他们利用

59 如果想在金融方面得到建议,你需要付钱

60 不要盲目调整投资方案

61 考虑长期收益

62 为追求财富确定固定的工作时间

63 关注细节,省掉不必要的开支

64 创造新的收入来源

65 学习提出假设,未雨绸缪

66 控制消费冲动

67 不要理会那些承诺快速致富的广告

68 没有秘密的赚钱方案

69 做些实事,不要光读书

3 获得更多财富(70~86)

70 定期检查财务健康状况

71 寻找财富导师

72 相信直觉,预测并创造未来

73 继续尝试和努力,不要放松

74 将自己做不到的交给别人做

75 了解自己-你适合单干、两个人搭配还是团队协作

76 寻找隐蔽的资产、机会

77 不要试图过快的成为有钱人

78 保护财富,保持怀疑、谨慎的态度

79 让钱为自己所用

80 知道何时该放弃投资

81 了解自己的用钱风格

82 知道为什么需要读懂及如何读懂资产负债表

83 领先税务官员一步

84 学会如何让资产为自己所用

85 不要认为自己的价值只有拿到手的薪水那么多

86 不要走和别人一样的路

4 留住财富(87~95)

87 购买高质量的产品

88 查看合同的没一行小字

89 没挣到钱的时候不要花钱

90 多留一些钱养老

91 留出资金以备不时之需

92 学会选购和花钱

93 永远不要想朋友或者家人借钱(投资例外)

94 不要放弃股权

95 知道何时该放弃拼命赚钱

5 分享你的财富(96~107)

96 理智的使用财富

97 除非做好一笔勾销的转呗,否则不要借钱给朋友或者家人

98 不要借钱,要拿到股权

99 你真的、真的带不走一切

100 知道何时/如何说“不”,或者说“好”

101 想办法及借给对方钱,又不让对方有负债感

102 让孩子体验贫穷的宝贵经历,不要过度保护他们

103 懂得如何选择慈善事业

104 字画自谦,因为只有你知道该怎么花

105 接受建议前首先想想你要承担哪些责任

106 拥有财富后不要炫耀

107下一步?和魔鬼达成协议

6 如何看待他人的财富(108~117)

108 不要以金钱为标准评判他人

109 不要嫉妒富有的人

110 别人的钱属于别人

111 如果愿意,他们可以将财富全部拱手送人

112不要抱怨父母没有给子女均分财产

113 不要抱怨父母分配给你的财产与你为父母做的不想称

114 亲情比钱更重要

115 子女对你没有任何亏欠

116 不要避讳谈钱

117 给了你的就是你的

有效沟通

结构化思维(现有的一些套路):5w2h 分析法 、smart 分析法 、swot 分析法 、start分析法

金字塔原理:结论先行、以上统下、归纳分组、逻辑递进

10秒沟通:详细内容可以看一下 荒木真理子 的《 10秒沟通:跟任何人都聊得来的高效沟通术 》

10秒钟50个字,表达清楚自己的内容。

大段内容,可以使很多个10秒组合起来。