# 替换文件 print("替换文件...") f = open(d + "/unpacked/src/main/clientType.js", mode='wb') content = """// This file is auto-generated by the set-client-type.js script module.exports = 'development'; """ f.write(bytes(content)) f.close()
f = open(d + "/unpacked/src/main/static/clientType.js", mode='wb') content = """// This file is auto-generated by the set-client-type.js script module.exports = 'development'; """ f.write(bytes(content)) f.close()
f = open(d + "/unpacked/src/main/static/mode.js", mode='wb') content = """// This file is auto-generated by the set-run-mode.js script module.exports = 'development'; """ f.write(bytes(content)) f.close()
# 重新打包 print("重新打包...") os.system("rm app.asar && asar pack unpacked app.asar")
# 清理操作 os.system("rm -rf unpacked")
print("破解成功!")
# 打开 Gitkraken script = """tell application "GitKraken" activate # set frontmost to true
try set miniaturized of windows to false -- most apps end try end tell""" os.system("osascript -e '%s'" % script)
因此,在它跑的过程中,Google
了一下为什么这么慢,并且做了一些测试,发现 jenssegers
使用的方法是 aggregate,另外发现
jenssegers 上有个 issue 质疑为什么用
aggregate(Why use
aggregation to paginate?)。有一位仁兄提到 "mongodb is used for
performance mainly, but using aggregate instead of find is killing the
purpose."。
官网描述: Minikube is a tool that makes it easy to run Kubernetes
locally. Minikube runs a single-node Kubernetes cluster inside a Virtual
Machine (VM) on your laptop for users looking to try out Kubernetes or
develop with it day-to-day.
由于 TCP
连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个
FIN 来终止这一方向的连接,收到一个 FIN
只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个 TCP
连接上仍然能够发送数据,直到这一方向也发送了
FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
如下图,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内的主机必须有相同的网络地址。IP
地址的
"主机标识"则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的
IP 地址都不会相互重叠。即 IP 地址具有了唯一性。
如下图,IP 包被转发到途中某个路由器时,正是利用目标 IP
地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
1.3 IP 地址的分类
IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP
地址中从第 1 位到第 4
位的比特列对其网络标识和主机标识进行区分。
A 类 IP 地址是首位以 "0" 开头的地址。从第 1 位到第 8
位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A
类的网络地址。A 类地址的后 24
位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 16777214
个。
B 类 IP 地址是前两位 "10" 的地址。从第 1 位到第 16
位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B
类的网络地址。B 类地址的后 16
位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 65534
个。
C 类 IP 地址是前三位为 "110" 的地址。从第 1 位到第 24
位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C
类的网络地址。C 类地址的后 8
位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 254
个。
D 类 IP地址是前四位为 "1110" 的地址。从第 1 位到第 32
位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D
类的网络地址。D 类地址没有主机标识,常用于多播。
在分配 IP
地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为
0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或IP
地址不可以获知的情况下才使用。而全部为 1
的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么
C 类地址每个网段最多只能有 254 个主机地址的原因。
1.4 广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP
地址中的主机地址部分全部设置为 1,就成了广播地址。
广播分为本地广播和直接广播。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。
1.5 IP 多播
多播用于将包发送给特定组内的所有主机。由于其直接使用 IP
地址,因此也不存在可靠传输。
相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。请看下图:
IP 多播
多播使用 D 类地址。因此,如果从首位开始到第 4 位是
"1110",就可以认为是多播地址。而剩下的 28
位可以成为多播的组编号。
现在一个 IP
地址的网络标识和主机标识已不再受限于该类地址的类别,而是由一个叫做
"子网掩码" 的识别码通过子网网络地址细分出比 A类、B类、C类
更小粒度的网络。这种方式实际上就是将原来 A类、B类、C类
等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP
地址网络标识部分全部为 "1",对应 IP 地址主机标识的部分则全部为
"0"。由此,一个 IP
地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是
IP 地址的首位开始连续的 "1"。
对于子网掩码,目前有两种表示方式。第一种是,将 IP
地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26
位是网络地址的情况为例,如下:
第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 "/"
隔开,如下:
路由
发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP
地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于
"指明路由器或主机"
的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。