bt, pt

“bt, pt” PT(PrivateTracker)下载其实也是BT下载的 一种,和BT下载有两个最明显的不同,即私密范围下载和流量统计。BT下载时,BT客户端首先解析.torrent种子文件得到Tracker地址,然后 连接Tracker服务器,Tracker服务器回应下载者的请求,提供其他下载者 (包括发布者) 的IP,下载者再连接其他下载者。根据.torrent文件,两者分别向对方告知自己已经有的块 (数据) ,然后交换对方没有的数据,此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。Tracker是BT下载的一个重要组成部分,用于记录上下载用户的互联信息,而PT下载和BT下载的区别是PT下载的Tracker是私有的,BT下载的Tracker则是公开的。BT种子即是一种信息文件,把一个大文件分成若干个4M小文件进行传输,这样用户可以方便的交换文件的各个部分,也可以同时通过多个IP/TCP连接进行多线路的高速下载。 PT下载是一种小范围的BT下载,通过禁用DHT有要求地选择并控制用户数量。这样,在有限的范围内,下载的用户基本上都可以达到自己带宽的上线。PT下载还通过论坛制度的约束机制将BT的设计理念现实化,真正让用户做到下载的过程中努力上传。因此,PT下载的速度很快,能够让用户带宽得到最大程度的使用,而且种子时效更长。当然,这取决于种子的数量和质量,而种子的数量和质量BT和PT是没有区别的。 有些人会说,PT既然是小范围内的活动,如何做到的呢?首先,划分范围最好的方式就是论坛,新会员必须通过前期的会员邀请才可以加入,邀请注册机制有效的控制了下载人数,其次是通过passkey,登陆论坛后,系统会给该帐户用户分配一个固定的passkey,用户下载的种子中,会包passkey的信息,若没有passkey的认证通过,即便其他用户得到了种子,也不能进行下载。第三,PT下载软件使用的是可以计算下载上传流量的BT下载软件,例如Azureus,uTorrent,Transmission等,这类软件下载前,首先要检测用户的passkey,通过后再和种子的passkey进行对比,然后才可以下载。第四,通过流量统计控制,PT下载的约束机制就是流量统计,必须保证一定的上传量才能下载,如果界定流量,会不会泄露个人信息呢?流量统计实际是通过软件访问Tracker服务器发送自己的passkey和上传下载信息,并通过PT网站的种子追踪器,最后来判断用户的流量。界定用户流量仅仅是通过uTorrent等软件中的专用PHP程序,所以并不会泄露用户的其他隐私信息,完整的PT下载是通过passkey+Tracker服务器两种手段实现,两者缺一不可。 PT通过对做种时间和流量的要求在一定程度上避免了BT中存在的下完不做种的现象,因此在网络上,尤其是需要大文件 (如高清) 资源交换的时候广受欢迎, 在PT站里,“水管"代表上传带宽的大小,大水管可以通过快速的上传获得积分和流量,PT站点也会采取措施 (比如做种时间,优惠等) 使上传较慢的小水管能够参与贡献和共享资源。

2020-09-06 · 1 min · 17 words · -

Mailpit

Mailpit Mailpit - email testing for developers sudo bash < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh) # 启动 mailpit, -h for help ./mailpit. mailpit -h docker docker run -d \ --restart unless-stopped \ --name=mailpit \ -p 8025:8025 \ -p 1025:1025 \ axllent/mailpit:v1.13 mailpit sendmail 准备一个文本文件 Date: Mon, 23 Jun 2015 11:40:36 -0400 From: user0 <user0@wiloon.com> To: user1 <user1@wiloon.com> Subject: subject0 body0 发送邮件 mailpit sendmail < foo.txt 在浏览器里查看邮件 http://localhost:8025

2020-09-01 · 1 min · 65 words · -

fork

“fork” 一个进程,包括代码、数据和分配给进程的资源。fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork() 函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子: /* * fork_test.c * version 1 * Created on: 2010-5-29 * Author: wangth */ #include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the parent process, my process id is %d/n",getpid()); printf("我是孩子他爹/n"); count++; } printf("统计结果是: %d/n",count); return 0; } 运行结果是: i am the child process, my process id is 5574 我是爹的儿子 统计结果是: 1 i am the parent process, my process id is 5573 我是孩子他爹 统计结果是: 1 在语句fpid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的几乎完全相同,将要执行的下一条语句都是if(fpid<0)…… 为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1) 在父进程中,fork返回新创建子进程的进程ID; 2) 在子进程中,fork返回0; 3) 如果出现错误,fork返回一个负值; ...

2020-08-28 · 2 min · 387 words · -

brctl

“brctl” brctl brctl is deprecated use bridge command from iproute2 insted https://wiki.archlinux.org/index.php/Network_bridge 查询网桥信息 brctl show pacman -S bridge-utils apt-get install bridge-utils # 查看网桥 brctl show

2020-08-09 · 1 min · 25 words · -

软路由, docker

“软路由, docker” docker network create -d macvlan \ --subnet=192.168.50.0/24 --gateway=192.168.50.1 \ -o parent=enp1s0 \ -o macvlan_mode=bridge \ macvlan docker network create -d macvlan \ --subnet=192.168.254.0/24 --gateway=192.168.254.1 \ --ipv6 --subnet=fe81::/16 --gateway=fe81::1 \ -o parent=enp1s0 \ -o macvlan_mode=bridge \ dMACvWAN 导入镜像 docker import openwrt-19.07.2-x86-64-generic-rootfs.tar.gz openwrt:17.07.2 docker run docker run -d \ --network macvlan \ --privileged \ --name openwrt \ openwrt:17.07.2 \ /sbin/init

2020-08-03 · 1 min · 60 words · -

vlan

“vlan” vlan范围: 0~4095 0,4095 保留 仅限系统使用 用户不能查看和使用这些VLAN 1 默认 VLAN 用户能够使用该 VLAN,但不能删除它 2-1001 正常 用于以太网的 VLAN 用户可以创建、使用和删除这些VLAN 1002-1005 正常 用于 FDDI 和令牌环的, VLAN 用户不能删除这些 VLAN 1006-1024 保留 仅限系统使用 用户不能查看和使用这些VLAN 1025-4094 扩展 仅用于以太网VLAN Tagged 数据帧 Tagged数据帧 Untagged数据帧 Untagged数据帧 in out in out Tagged端口 原样接收 原样发送 按端口PVID打TAG标记 按照PVID打TAG标记 Untagged端口 丢弃 去掉TAG标记 按端口PVID打TAG标记 原样发送 2 、所谓的Untagged Port和tagged Port不是讲述物理端口的状态,而是将是物理端口所拥有的某一个VID的状态,所以一个物理端口可以在某一个VID上是Untagged Port,在另一个VID上是tagged Port; 3 、一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID的TAG等同的VID,而且在这个VID上,这个物理端口必定是Untagged Port; 4. PVID的作用只是在交换机从外部接受到可以接受Untagged 数据帧的时候给数据帧添加TAG标记用的,在交换机内部转发数据的时候PVID不起任何作用; 5. 拥有和TAG标记一致的VID的物理端口,不论是否在这个VID上是Untagged Port或者tagged Port,都可以接受来自交换机内部的标记了这个TAG标记的tagged 数据帧; 6. 拥有和TAG标记一致的VID的物理端口,只有在这个VID上是tagged Port,才可以接受来自交换机外部的标记了这个TAG标记的tagged 数据帧; ...

2020-08-02 · 1 min · 73 words · -

pppoe

“pppoe” PPP: Point-to-Point Protocol,链路层协议。用户实现点对点的通讯。 PPPoE的工作过程分成两个阶段,即发现阶段(Discorvery)和PPP会话阶段。 发现阶段(Discovery Stage)的具体过程如下: 用户主机用广播的方式发出PADI (PPPOE Active Discovery Initiatio) 包,准备去获得所有可连接的接入设备 (获得其MAC地址) ; 接入设备收到PADI包后,返回PADO (PPPOE Active Discovery Offer) 作为回应; 用户主机从收到的多个PADO包中,根据其名称类型名或者服务名,选择一个合适的接入设备,然后发送PADR (PPPOE Active Discovery Request) 包,另外如果一个用户主机在发出PADI后在规定时间内没有收到PADO,则会重发PADI; 接入设备收到PADR包后,返回PAS (PPPOE Active Discovery Session-confirmation) 包,其中包含了一个唯一session ID,双方进入PPP会话阶段。 PPP会话阶段,即在session建立后的通讯阶段。 另外,无论是用户主机还是接入设备可随时发起PADT包,中止通讯。 与PPPoE相对应的获得地址和认证的是DHCP,但普通家庭用户很少直接使用DHCP方式接入互联网 (这里说的DHCP不是自家路由器上的DHCP,而是互联网运营商的DHCP) 。PPPoE和DHCP的区别是: 前者需要身份验证才能上网,后者什么都不需要,直接接上网线即可。当然了,具体获得IP地址的方式还有很多。 PPP协议介绍 PPP 点对点协议(Point to Point Protocol)属于二层协议,隧道协议的一种。为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP/IP中它是一种用来同步调制连接的数据链路层协议 (OSI 模式中的第二层) ,替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换 (IPX) 。 为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。 PPP协议主要包括三部分: LCP (Link Control Protocol) 链路控制协议、NCP (Network Control Protocol) 网络控制协议和PPP的扩展协议 (如Multilink Protocol) ,比如认证协议,最常用的包括口令验证协议PAP (Password Authentication Protocol) 和挑战握手验证协议CHAP (Challenge-Handshake Authentication Protocol) 。 ...

2020-08-02 · 2 min · 294 words · -

摄影

“摄影” 曝光三要素 对于新人来说,最基本的知识就是曝光三要素: 光圈、快门、感光度。这是最重要的三个元素,利用这三个元素的不同组合,控制正常的曝光。 光圈, Aperture 光圈越大,通光量就越多,光圈越小,通光量就越少。 光圈值 光圈值用字母F 或f表示,常见的光圈有F1.4,F2.0,F2.8,F4.0,F5.6,F8.0,F11,F16,F22,F32,F36. 数值越小表示光圈越大。 光圈是用来控制镜头孔径大小的部件, 我们可以把光圈比作水龙头,水龙头开的越大,水流的就越多。光圈也是如此,光圈开的越大,进光量就越多。拍出的照片就会更加明亮。光圈通常用字母"F"来表示,F越大,光圈越小。例如: F1.8>F11。 光圈对背景虚化的影响 光圈是控制景深的重要因素,那些喜欢拍背景虚化的照片可要注意了。光圈越大,景深越浅,背景虚化越明显。光圈越小,景深越深,背景虚化程度越小。 光圈对画面亮度的影响 其它曝光值不变 (快门,ISO) 的情况下,光圈越大,画面越明亮,光圈越小,画面越暗,甚至看不清东西。当然平时拍摄很少故意把画面调到非常亮或者非常暗这么极端,这样测试可以更好的理解光圈对曝光的影响。 小光圈的作用 大光圈固然有很多好处,但并非越大越好。在拍摄大场景的风光时,使用F8,F11等较小的光圈能表现出更优秀画质和更好的画面细节。使用F16或者更小的光圈,拍摄光源 (如太阳) 会呈现出星芒效果,非常漂亮。星芒的形状取决于镜头光圈的叶片数量和形状。 快门 它是控制相机进光量的快慢,在同样的光圈和感光度下,快门速度的时间越长,那么进光量就越多,照片就越亮。我们还可以把它比作水龙头,当水龙头开的时间越长,那么流出的水越多,也就是说进光量越多。在此提醒一下大家,照片的快门速度越慢,手持相机不稳,容易抖动,造成照片模糊。 快门值 以秒为单位,入门微单一般1/4000s到30s之间。已经可以满足绝大部分拍摄题材。在快门优先和手动曝光拍摄模式下可以手动调节快门。 安全快门 简单来说,是指在手持相机情况下拍摄不容易出现照片模糊的快门时间,低于这个时间则可能容易模糊。通常全画幅相机的安全快门值为1/焦距,APS-C为1/(1.5X焦距)。 例如: 使用50mm的镜头焦距APS-C的 a6000安全快门时间为 1/75s,全画幅的a7系列为1/50s。 平常拍摄并不一定要按快门时间来,现在的很多相机或者镜头都有防抖功能,大大降低了安全快门的时间,手持相机带来的抖动也因人而异,平常多练习也可以降低安全快门的时间。 高速快门与慢快门的作用 快门记录拍摄对象的瞬间,慢门记录拍摄对象的过程。相对而言,慢门的玩法更多,比如流云,光绘,平滑效果等。 感光度 (ISO) 感光度是控制照片明暗的,它与光圈和快门的原理不同,快门和光圈都是控制进光量的,而感光度是提升相机感光元件灵敏度的。简单来说: 感光度越低,照片越暗;感光度越高,照片越亮。随着感光度的提升,照片的噪点也会越多,画质就会有所下降。在白天阳光好的时候拍摄照片,感光度100-200就够用,黑暗的条件下,为了得到正确的曝光,提升感光度也是可以的,唯一的缺点就是会损失一定的画质 Av档 光圈优先档,在此模式下,调节光圈的大小,在拍摄时,快门时间根据现场环境自动调节,保证拍出曝光正常的照片。这种模式有什么好处呢?通过控制光圈大小来控制景深,在拍摄的时候不需要考虑快门速度了,相机会根据现场的情况自动设定好快门速度,从而得到正确的曝光。尤其是在弱光条件下拍摄,使用低快门会导致画面的抖动而模糊,这时候保证光圈的大小不变,调整好感光度,从而提高快门速度。 Tv档 快门优先模式,在此模式下,调节快门速度的快慢,拍摄时,光圈大小根据现场环境自动调节,以保证拍出曝光正常的照片。Tv档比较适合拍摄运动的物体,尤其是快速奔跑的物体,快门速度如果过慢,就容易导致画面模糊,高速快门则可以让画面更清晰。同时,快门优先模式还可以拍摄夜间的车流,利用较慢的快门速度,拍出轨迹。 M档 手动模式,在这种模式下,光圈、快门、感光度都需要自己根据现场情况手动调节。手动模式对于新手很难操作,新手不仅要对现场的环境光线情况作出合理的判断,还要合理的调节好各项参数。相对新手而言,要不断的练习,慢慢的积累,才能熟练运用M档。 测光 首先解释一下什么是测光。测光是检测相机进光量的多少,物体反射的光进入到相机中,相机会根据光线的明暗情况,对物体进行曝光。我们的人眼可以对物体的明暗程度进行判断,从而调节进光量,但相机却不能,所以相机在拍摄物体时需要测光。 测光分为: 平均测光、 点测光、 中央重点测光、 局部测光。 平均测光 它是将取景画面分成不同的几块、分别对各部分进行测光,最后取平均值,相机根据这个平均值来进行曝光。 点测光 它是只对取景画面中的一小部分进行测光,相机会根据这一小块区域的亮度进行对照片进行曝光。点测光比较适用于光线明暗对比大的场景,比如日出、日落。 中央重点测光 它是对取景画面的中央60%,四周40%进行测光,这种测光模式可以保证你拍出的照片不会过亮或是过暗。 局部测光 它是以取景画面某一局部进行测光,主要是以取景框中心的一个圆圈中的光线来进行测光。利用局部测光你可以更好的掌握照片的明暗。 白平衡 白平衡是相机中用来平衡光线色彩偏移的功能,能够帮助相机在不同的光线或者色温下,还原被拍摄物体最真实的颜色,也就是矫正色差。想正确的调节白平衡,我们还要知道与白平衡对应的色温,色温是指光线色调的指标,它的单位是K。色温越高,光的颜色越蓝;色温越低,光的颜色越黄;白平衡值越高,对蓝光的平衡能力越强,画面会变得越黄。我们可以根据这个原来来调节白平衡的数值。相机上也自带了很多种白平衡模式: 自动、白炽灯、荧光灯等等。这些模式可以满足大部分拍摄需求 曝光补偿曝光补偿可以控制照片的明暗,在拍摄照片的时候总会遇到过曝或者欠曝的时候,这时候就可以利用曝光补偿来进行修正。曝光补偿向左调,照片会变暗,向右调,照片会变亮。在拍摄雪景的时候,曝光补偿就经常被用到,对于白色的雪,相机测光的时候仅仅接收18%的光线,所以我们拍摄的照片并不是纯白的,而是灰色的,这时候就要增加一点曝光补偿,让雪的颜色看起来更白。 在B站学摄影 左手plus Sony A6000 入门 http://www.sonystyle.com.cn/products/nex/ilce_6000.htm ...

2020-07-19 · 1 min · 135 words · -

debian ubuntu ca

“debian ubuntu ca” https://www.jianshu.com/p/abcee3270e9a mkdir /usr/share/ca-certificates/extra cp /tmp/$1.crt /usr/share/ca-certificates/extra/$1.crt update-ca-certificates 直白的说,运行这个工具,它最终会更新 /etc/ssl/certs/ca-certificates.crt 文件。这下你应该明白了,有了这个文件,不管是 Curl 还是 openssl 在发送 HTTPS 请求的时候,都可以校验 HTTPS 网站的真实身份了。 具体执行步骤如下: 读取 /etc/ca-certificates.conf 文件,包含的内容就是所有 /usr/share/ca-certificates/mozilla/ 目录下的证书文件名。 将 /etc/ca-certificates.conf 文件对应的所有证书合并到 /etc/ssl/certs/ca-certificates.crt 文件中。 作者: 虞大胆的叽叽喳喳 链接: https://www.jianshu.com/p/abcee3270e9a 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-07-08 · 1 min · 39 words · -

golang 生成二维码

“golang 生成二维码” import "github.com/skip2/go-qrcode" func main() { qrcode.WriteFile("http://www.wiloon.com/",qrcode.Medium,256,"./blog_qrcode.png") }

2020-07-08 · 1 min · 9 words · w1100n

network namespace

network namespace network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。这篇文章介绍 network namespace 的基本概念和用法,network namespace 是 linux 内核提供的功能,这篇文章借助 ip 命令来完成各种操作。ip 命令来自于 iproute2 安装包,一般系统会默认安装,如果没有的话,请读者自行安装。 NOTE: ip 命令因为需要修改系统的网络配置,默认需要 sudo 权限。这篇文章使用 root 用户执行,请不要在生产环境或者重要的系统中用 root 直接执行,以防产生错误。 ip 命令管理的功能很多, 和 network namespace 有关的操作都是在子命令 ip netns 下进行的,可以通过 ip netns help` 查看所有操作的帮助信息。 默认情况下,使用 ip netns 是没有网络 namespace 的,所以 ip netns ls 命令看不到任何输出。 创建 network namespace 也非常简单,直接使用 ip netns add 后面跟着要创建的 namespace 名称。如果相同名字的 namespace 已经存在,命令会报 Cannot create namespace 的错误。 ip netns add net1 ip netns ls ip netns 命令创建的 network namespace 会出现在 /var/run/netns/ 目录下,如果需要管理其他不是 ip netns 创建的 network namespace,只要在这个目录下创建一个指向对应 network namespace 文件的链接就行。 ...

2020-07-07 · 1 min · 165 words · -

novnc

novnc https://github.com/novnc/noVNC https://novnc.com/info.html podman run \ -e REMOTE_HOST=192.168.50.114 \ -e REMOTE_PORT=5900 \ -p 8082:8081 \ -d \ --name novnc-dell \ dougw/novnc nginx config server { listen 80; server_name vnc.wiloon.com; location / { proxy_pass http://192.168.50.114:8082; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 1d; proxy_send_timeout 1d; proxy_read_timeout 1d; } }

2020-06-28 · 1 min · 53 words · -

dns config

“dns config” 主机记录 www : 将域名解析为www.example.com,填写www; @ : 将域名解析为example.com (不带www) ,填写@或者不填写; mail : 将域名解析为mail.example.com,通常用于解析邮箱服务器; *: 泛解析,所有子域名均被解析到统一地址 (除单独设置的子域名解析) ; 解析线路 为加速访问域名,可设置与用户相同的网络类型,但用户的网络类型多种多样,所以解析线路设置为默认,这样DNS服务商一般会智能使用解析线路,当判断访问者来源为联通用户,就将域名解析到联通的服务器IP上;当判断访问者来源为电信用户,就将域名解析到到电信的服务器IP上。 作者: 大猫黄 链接: https://www.jianshu.com/p/d1840c71a57c 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-06-26 · 1 min · 27 words · -

AMD, CMD

“AMD, CMD” https://juejin.im/post/5a422b036fb9a045211ef789 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端 (表单验证等) , 随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念, 更不用说模块 (module) 了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码 模块 既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念——package,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接import对应的package即可 import java.util.ArrayList; 遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,各行其是就都乱套了 规范形成的过程是痛苦的,前端的先驱在刀耕火种、茹毛饮血的阶段开始,发展到现在初具规模,简单了解一下这段不凡的历程 函数封装 我们在讲函数的时候提到,函数一个功能就是实现特定逻辑的一组语句打包,而且JavaScript的作用域就是基于函数的,所以把函数作为模块化的第一步是很自然的事情,在一个文件里面编写几个相关函数就是最开始的模块了 function fn1(){ statement } function fn2(){ statement }1234567复制代码 这样在需要的以后夹在函数所在文件,调用函数就可以了 这种做法的缺点很明显: 污染了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间没什么关系。 对象 为了解决上面问题,对象的写法应运而生,可以把所有的模块成员封装在一个对象中 var myModule = { var1: 1, var2: 2, fn1: function(){ }, fn2: function(){ } }12345678910111213复制代码 这样我们在希望调用模块的时候引用对应文件,然后 myModule.fn2(); 这样避免了变量污染,只要保证模块名唯一即可,同时同一模块内的成员也有了关系 看似不错的解决方案,但是也有缺陷,外部可以随意修改内部成员 myModel.var1 = 100; 这样就会产生意外的安全问题 立即执行函数 可以通过立即执行函数,来达到隐藏细节的目的 var myModule = (function(){ var var1 = 1; var var2 = 2; function fn1(){ } function fn2(){ } return { fn1: fn1, fn2: fn2 }; })();1234567891011121314151617复制代码 这样在模块外部无法修改我们没有暴露出来的变量、函数 ...

2020-06-23 · 2 min · 256 words · -

OKR

“OKR” OKR (Objectives and Key Results) https://www.infoq.cn/profile/1218094/publish https://www.infoq.cn/article/Vl2uK8owDjj1pJG6ZrDD https://www.infoq.cn/article/Z3LA3We5qKcfsqTUrHSG 蝴蝶效应: 一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国得克萨斯州的一场龙卷风。蝴蝶效应意味着世界处于混沌状态,事务之间的联系错综复杂,不可掌控。 典型的就是"一个香港人在台湾杀了自己的女友,导致在中国看不了 NBA 比赛"。 黑天鹅: 在发现澳大利亚之前,欧洲人认为所有天鹅都是白色的,还常用"黑天鹅"来指不可能存在的事物。但欧洲人这个信念却随着第一只黑天鹅的出现而崩溃。因为,黑天鹅的存在代表不可预测的重大稀有事件,意料之外却又改变一切。黑天鹅意味着极小概率事件带来的大影响。 典型的就是"非典 SARS"、“新冠状病毒"这样的极小概率的跨界病毒感染和传播带来的巨大影响。 灰犀牛: 灰犀牛体型笨重、反应迟缓,你能看见它在远处,却毫不在意,一旦它向你狂奔而来,定会让你猝不及防,直接被扑倒在地。它并不神秘,却更危险。灰犀牛意味这经常被提示却没有得到充分重视的大概率风险事件。 日常的学习和工作中,我们经常会看到: 想要的太多,从而使得精力和资源比较分散 分不清楚优先级 / 价值,总是被低优先级 / 价值的事情干扰 被紧急的事情占用了太多时间,重要的事情没时间做 《管理 3.0》 (Jurgen Appelo) 中"激励员工"是其六大支柱之一,Jurgen 把内在动力总结为 10 个因素,我们称为"冠军蛙"CHAMP-FROGS: Curiosity (好奇) : 思考的需要 Honor (荣誉) : 受团队尊重的需要 Acceptance (认可) : 被认同的需要 Mastery (能力) : 感到胜任的需要 Power (权力) : 有影响的需要 Freedom (自由) : 感受到独立的需要 Relatedness (关系) : 朋友的需要 Order (有序) : 稳定环境的需要 Goal (目的) : 意义的需要 Status (地位) : 社会地位的需要

2020-06-06 · 1 min · 76 words · -

渐进式框架

“渐进式框架” https://www.zhihu.com/question/51907207 渐进式框架的大概意思就是你可以只用我的一部分,而不是用了我这一点就必须用我的所有部分。 渐进式代表的含义是: 主张最少。 Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: - 必须使用它的模块机制 - 必须使用它的依赖注入 - 必须使用它的特殊形式定义组件 (这一点每个视图框架都有,难以避免) React,它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。 vue是渐进的,没有强主张,你可以在原有大系统的上面,把一两个组件改用它实现,当jQuery用;也可以整个用它全家桶开发,当Angular用;还可以用它的视图,搭配你自己设计的整个下层用。你可以在底层数据逻辑的地方用OO和设计模式的那套理念,也可以函数式,都可以,它只是个轻量视图而已,只做了自己该做的事,没有做不该做的事,仅此而已。 渐进式的含义,我的理解是: 没有多做职责之外的事。 作者: 徐飞 链接: https://www.zhihu.com/question/51907207/answer/136559185 来源: 知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-06-02 · 1 min · 24 words · -

DKMS

“DKMS” DKMS 我们都知道,如果要使用没有集成到内核之中的Linux驱动程序需要手动编译。当然,这并不是一件什么难事,即使是对于没有编程经验的Linux使用者,只要稍微有点hacker的意识,努力看看代码包里的Readme或者INSTALL文件,按部就班的执行几条命令还是很容易办到的。但这里还有一个问题,Linux模块和内核是有依赖关系的,如果遇到因为发行版更新造成的内核版本的变动,之前编译的模块是无法继续使用的,我们只能手动再编译一遍。这样重复的操作有些繁琐且是反生产力的,而对于没有内核编程经验的使用者来说可能会造成一些困扰,使用者搞不清楚为什么更新系统之后,原来用的好好的驱动程序突然就不能用了。这里,就是Dell创建的DKMS项目的意义所在。DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。 https://www.cnblogs.com/wwang/archive/2011/06/21/2085571.html https://www.cnblogs.com/wwang/archive/2011/06/21/2085571.html

2020-05-30 · 1 min · 8 words · -

vue-router的两种模式

“vue-router的两种模式” 为什么要有 hash 和 history 对于 Vue 这类渐进式前端开发框架,为了构建 **SPA (单页面应用) **,需要引入前端路由系统,这也就是 Vue-Router 存在的意义。前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求。 为了达到这一目的,浏览器当前提供了以下两种支持: hash —— 即地址栏 URL 中的 # 符号 (此 hash 不是密码学里的散列运算) 。 比如这个 URL: http://www.abc.com/#/hello,hash 的值为 #/hello。它的特点在于: hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。 history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。 (需要特定浏览器支持) 这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。 因此可以说,hash 模式和 history 模式都属于浏览器自身的特性,Vue-Router 只是利用了这两个特性 (通过调用浏览器提供的接口) 来实现前端路由。 使用场景 一般场景下,hash 和 history 都可以,除非你更在意颜值,# 符号夹杂在 URL 里看起来确实有些不太美丽。 ...

2020-05-24 · 1 min · 189 words · -

敏捷开发,瀑布开发

“敏捷开发,瀑布开发” 敏捷开发 客人到餐馆来点菜 (新项目) 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单 (客户往往提不出具体的需求) 根据图文菜单,客人点了是个菜 (根据原型和设计稿,基本确定了需求) 后厨开始准备 (项目启动) 配菜、炒菜,先上了两盘,让客人尝了尝味道 (先提供可用实例给客户用) 客人说还不错,后厨继续准备后面的菜,陆续上菜 (不断迭代,不断测试) 上菜过程中,客人突然发现有个菜的味道太淡了,让后厨加了点盐又端上来了 (敏捷的好处,可以不断测试和需求变更) 又上了两盘,不够辣,又拿到后厨加了辣 (敏捷的坏处,需求没有提前明确,反复迭代,增加了工作量) 到最后两盘时,客人要求换两个菜,还好没炒 (迭代的好处,随时接受需求变更) 客人吃完,很满意 (基本满足了全部的要求) (在举个例子) 打个比方,客户说他想要造一座金字塔,你作为"咨询师",认为这座金字塔要造10年,肯定不能指望一次设计好就一口气做完,于是问客户这个金字塔是要干什么?客户说要当坟墓,于是,你提出先做一个小坟墓的功能,能装木乃伊那种。客户同意了,你哐哧哐哧做了一个月,制造了一个小型地下墓室,演示给客户看,客户看了,一拍大腿,说看到这个墓室才想明白,其实他要的不是金字塔,要的是一个有排场的墓地,这样简陋埋在地下的墓室不够牛逼,于是你和客户达成第二阶段设计,做一个带兵马俑方阵来让这个墓地显得有排场,客户同意了,于是你又哐哧哐哧做了一个月,做了一个小型兵马俑方阵。客户看了兵马俑方阵,又一拍大腿,说这个方阵还真牛逼,但是能不能增加一些现代元素,把古代兵马俑换成现代装甲兵团,你于是又…… (如此,周而复始,每个阶段只完成客户一个需要,当然,我上面只是一个荒诞的例子,但是你应该能够get到敏捷的含义。) 瀑布模型开发 客人到餐馆来点菜 (新项目) 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单 (客户往往提不出具体的需求) 根据图文菜单,客人点了十个菜 (根据原型和设计稿,基本确定了需求) 后厨开始准备 (项目启动) 根据客人的下单配菜,炒菜 (基本上不会主动去了解完整需求) 半个小时了,菜还没上桌,客人饿极了 (项目启动后很长一段时间客户什么都看不到) 再过了二十分钟,十个菜都一起上来了 (项目最终一次交付) 客人说,有几个菜挺好的,但是有个菜味道淡了,有两个不够辣,还有两盘重复了想换掉 (我是买单的,我- 要变需求) 这时候大堂经理来了,说,“味道淡了可以加盐,不辣可以加辣,但是换菜不行,已经炒好的那两盘菜也是要算成本的” (瀑布的坏处,需求变更比较麻烦) 于是,后厨只给客户加了盐,加了辣 客人吃完,不是很满意,下次不来了 (没有满足需求) 总结 但总的来说,在现在管理项目过程中,并没有严格的按照完全的敏捷或者完全的瀑布模式,都是各自掺杂了其他的方式。在实际项目过程中,过于强调模式并没有意义,重要的是能不能预防问题的发生,在问题发生之后能不能用最小的成本解决,模式更多起一个参考作用 最后借用民国时候的一句话: 少研究一些主义,多关注一些实际问题 (net) 作者: zhaur 链接: https://www.jianshu.com/p/ca5f242cf2bb 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-05-23 · 1 min · 60 words · -

企业微信api

“企业微信api” REDIRECT_URL中的域名,需要先配置至应用的"可信域名"

2020-05-23 · 1 min · 2 words · -