chrome devtools

“chrome devtools” https://juejin.cn/post/6844903744027492366 The DevTools drawer Chrome DevTools 有很多部分,被分为 9 个 tab(标签页/选项卡) ( Elements , Console , Sources , Network , 等等…)- 但那仅仅是它的一部分而已!有一组平行的选项卡,被隐藏在主窗口之下。这个组合被称为 Drawer 要访问它,当你在 DevTools (任何选项卡) 中时,按 [esc] 。 再次按 [esc] 隐藏它: 作者: dendoink 链接: https://juejin.cn/post/6844903744027492366 来源: 掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Created 17176-12-17 · Updated 17176-12-17 · 1 min · 40 words · -

ECMAScript, javascript basic

ECMAScript, javascript basic, js basic https://juejin.cn/post/7103511045062590500 JavaScript 是一种轻量级脚本语言, 它本身不提供 I/O 相关的 API, I/O 操作需要宿主环境提供, <!DOCTYPE html> <html> <head> <script src="foo.js"></script> <script type="text/javascript"> console.log('javascript0') var myVar = "hello"; function showAlert() { alert('You triggered an alert!'); } </script> </head> <body> body0 <button> </body> </html> 模板字面量, 多行字符串 let learnCoding = `How to start learning web development? - Learn HTML - Learn CSS - Learn JavaScript Use freeCodeCamp to learn all the above and much, much more ! ` console.log(learnCoding); // 输出 // How to start learning web development? // - Learn HTML // - Learn CSS // - Learn JavaScript // Use freeCodeCamp to learn all the above and much, much more ! 数组 JavaScript 数组是可调整大小的,并且可以包含不同的数据类型。 ...

Created 3036-12-03 · Updated 3036-12-03 · 2 min · 231 words · -

照片管理

“照片管理” golang + vue https://github.com/photoprism/photoprism

Created 2026-12-02 · Updated 2026-12-02 · 1 min · 5 words · -

tcp sack

“tcp sack” https://blog.csdn.net/wdscq1234/article/details/52503315 TCP-IP详解: SACK选项 (Selective Acknowledgment) 引入理由 在文章TCP-IP详解: 超时重传机制中,有介绍到快速重传和超时重传都会面临到一个重传什么包的问题,因为发送端也不清楚丢失包后面传送的数据是否有成功的送到。主要原因还是对于TCP的确认系统,不是特别的好处理这种不连续确认的状况了,只有低于ACK number的片段都被收到才有进行ACK,out-of-order的片段只能是等待,同时,这个时间窗口是无法向右移动的。 举个例子: 服务发送4个片段给客户端,seg1(seq=1,len=80),seg2(seq=81,len=120), seg3(seq=201,len=160),seg4(seq=361,len=140) 服务器收到seg1和seg2的ACK = 201,所以此时seg1 seg2变成发送并已经确认范畴的数据包,被移除滑动窗口,此时服务器又可以多发80+120 byte数据 假设seg3由于某些原因丢失,这个时候服务器仍然可以像客户端发送数据,但是服务器会等待seg3的ACK,否则窗口无法滑动,卡主了 seg3丢失了,即使后面的seg4收到了,客户端也无法告知服务器已经收到了seg4,试想一下,如果窗口也够大,服务器可以继续持续发送更多的片段,那么这些片段被客户端接收,只能存放到队列中,无法进行确认 正式因为后续OUT-OF-ORDER的报文段的发送状况也不清楚,所以Server也不是特别清楚要如何去处理这种状况,不过一般来说只能有2中状况: 只重传超时的数据包,这种方法是最常想到的,比较实用与后面的数据包都能够正常接收的状况,只重传超时的数据包,但是如果比较坏的情况下,丢失了很多封包呢? 那就需要一个一个的等待超时了,很浪费时间。 重传这个片段以及之后的所有包,这种方法在最坏的状况下,看起来效率还是挺高的,但是如果只有一个包丢失,就去重传后面所有接受到的包,流量浪费也是很严重的。 总之对于上面阐述的问题,没有想到一个好的思路来解。但是RFC2018提供了一个SACK的方法,有效的解决这个问题 SACK(Selective Acknowledgment) SACK是一个TCP的选项,来允许TCP单独确认非连续的片段,用于告知真正丢失的包,只重传丢失的片段。要使用SACK,2个设备必须同时支持SACK才可以,建立连接的时候需要使用SACK Permitted的option,如果允许,后续的传输过程中TCP segment中的可以携带SACK option,这个option内容包含一系列的非连续的没有确认的数据的seq range,这些 SYN包中SACK Permitted 选项,双方都支持才对 SACK option格式 Kind 5 Length 剩下的都是没有确认的segment的range了 比如说segment 501-600 没有被确认,那么Left Edge of 1st Block = 501,Right Edge of 1st Block = 600,TCP的选项不能超过40个字节,所以边界不能超过4组。 可以看下实际的tcpdump抓包中的SACK option,如下图,使用tcp.option.sack进行过滤,可以看到这个SACK option只有一个片段,接收并没有进行确认,范围是18761~20101 再来将上面的例子 客户端收到seg4的时候,发送seg3的ACK 会产生一个SACK的option (361~500) ,Server收到这个ACK后,就知道seg3丢失了,但是seg4已经收到了但是并没有确认,所以就只会重传seg3 SACK的产生,RFC2018 SACK通常是由数据接收方产生,如果在connection建立的时候,SYN包中有SACK-Permitted 的选项为true,同时自身也支持SACK,那么可以在接收异常的时候,产生SACK option. 如果要发送,SACK中需要携带接收队列中所有没有被确认的数据段信息。 ...

Created 7076-11-07 · Updated 7076-11-07 · 1 min · 104 words · -

tcp window scaling, 滑动窗口

“tcp window scaling, 滑动窗口” TCP 滑动窗口 与窗口缩放因子(Window Scaling) 说道TCP滑动窗口协议,相信大家都很熟悉,但是说道 Window Scaling参数或许知道的和用过的人却不多,本文我们来谈谈Window Scaling的由来 TCP滑动窗口 众所周知, TCP是一种面向连接可靠消息传输协议;为了保证可靠,连接的两端保持对所有传输数据的严格跟踪,以便在需要时候进行重传或重新排序。另外为了跟踪已经发送了的数据在发送端有TCP发送缓存,在接受端有接受缓存,滑动窗口则是这个缓存的一部分,接收方接受数据后会把ack和当前滑动窗口可用空间告诉发送方,发送方则发送的数据不能超过接收方剩余窗口大小,如果接收方窗口内数据还没来得及由应用程序读取,窗口满了,则发送方会停止发送数据,直到接收方滑动窗口有空间。 假设我们有两个主机A和B,它们建立了一个TCP连接。在连接开始时 (握手时候协商) ,两个主机为传入数据分配32 KB的缓冲区空间,因此每个主机的初始窗口大小为32,768。 image.png 主机A需要向主机B发送数据,一开始则主机B告诉主机A在接受自己确认之前最多可以发送32,768字节的数据 (以最大段大小或MSS的间隔) 。假设MSS为1460字节,主机A可以在耗尽主机B的接收窗口之前发送22个段。 当确认收到主机A发送的数据时,主机B可以调整其窗口大小。例如,如果上层应用程序仅处理了一半缓冲区,则主机B会将其窗口大小降低到16 KB (这时候主机A在接受到B的确认前最多发送16KB数据到B) 。如果缓冲区仍然完全填满,主机B会将其窗口大小设置为零,表明它还不能接受更多数据,这时候主机A则停止发送数据。 image.png 在具有高带宽和极低延迟的LAN上,滑动窗口很少会满。但是,在高带宽,高延迟网络上,会出现一个有趣的现象: 在发送方接受到接收方发出确认之前,并不能最大化利用带宽。 例如,假设在通过专用10 Mbps路径连接的两台主机之间建立TCP连接,单向延迟为80ms。两个主机都约定最大窗口大小为65,535字节 (16位无符号整数的最大值) 。我们可以计算在一个时间点在一个方向上传输的潜在数据量,带宽*延迟: 10,000,000 bps除以每字节8位,乘以0.08秒等于100,000字节。 换句话说,如果主机A开始连续发送给主机B,它将在主机B接收到发送的第一个字节之前发送100,000个字节。但是由于约定的最大接收窗口只有65,535字节,所以主机A必须在发送65,535字节后停止发送,并等待来自主机B的确认。 (为简单起见,我们的示例计算不考虑TCP和低层报头。) 这种延迟浪费了潜在的吞吐量,不必要地增加了通过网络可靠传输数据所需的时间。创建TCP窗口缩放以解决此问题。 三、窗口缩放因子 窗口缩放在RFC 1072中引入并在RFC 1323中进行了改进。实际上,窗口缩放只是将16位窗口字段扩展为32位长度。解决方案是定义TCP选项以指定计数,通过该计数,TCP标头字段应按位移位以产生更大的值。 image.png 如上图 window size设置为5840字节,但是窗口缩放因子为7 (window scale) ,也就是这时候最大实际窗口为 5840*128。window scale为1将字段的二进制值向左移位一位,使其加倍。计数为2将值向左移动两位,使其翻倍。计数为7 (如上例所示) 将该值乘以128. image.png 窗口缩放选项 (window scaling) 可以在tcp握手时候在SYN分组中的连接期间仅发送一次。可以通过修改TCP标头中的窗口字段的值来动态调整窗口大小,但是在TCP连接的持续时间内,标度乘数保持静态。仅当两端都包含选项时,缩放才有效;如果只有连接的一端支持窗口缩放,则不会在任一方向上启用它。最大有效比例值为14 (RFC 1323的2.3节为有兴趣的人提供了一些背景信息) 。 回顾我们之前的示例,我们可以观察窗口缩放如何使我们能够更有效地进行网络传输 (最大化利用网络带宽) 。为了计算我们的理想窗口,我们将端到端延迟加倍以找到往返时间,并将其乘以可用带宽: 2 * 0.08秒* 10,000,000 bps / 8 = 200,000字节。为了支持这种大小的窗口,主机B可以将其窗口大小设置为3,125,其window scaling因子为6 (3,125左移6乘以200,000) 。幸运的是,这些计算都是由现代TCP / IP堆栈实现自动处理,无须应用程序层面干预。 ...

Created 7076-11-07 · Updated 7076-11-07 · 1 min · 90 words · -

tcp dump, wireshark

“tcp dump, wireshark” TCP segment of a reassembled PDU 关于"TCP segment of a reassembled PDU" 标签: TCP segment of a reaPDUreassembled PDU http://blog.csdn.net/dog250/article/details/51809566 版权声明: 本文为博主原创,无版权,未经博主允许可以随意转载,无需注明出处,随意修改或保持可作为原创! 为什么大家看到这个以后总是会往MSS,TSO上联系呢?也许第一个解释这个的人是个高手,而且以MSS/MTU/TSO的观点解释了这个问题,还有一种可能就是TSO等技术让人觉得太牛逼,毕竟是底层硬件机制吧,抓包机制又是作用于网卡层面的,所以很自然会觉得TSO会有关联。 事实上,这个跟TSO没有关系!跟MSS有一定的关系但不是全部因果关系,在阐述"TCP segment of a reassembled PDU"之前,先把TSO理清再说。当有人问题"这个包会不会被TSO分段"这类问题时,只要看该TCP数据包的长度,拿它跟MTU比较,如果数据长度更长,则就是TSO。 那么,“TCP segment of a reassembled PDU"究竟是什么呢?答案是,这要向上看,这个跟应用层有关,而与底层关系不大!我用Wireshark的抓包例子来解释这个问题。首先看一个抓包,我们以网络测试工具baidu为例,抓取一个访问其服务器https://14.215.177.38/的一个HTTPS连接的包: 网上很多人在解释这个"TCP segment of a reassembled PDU"的时候(基本都是转载),都说什么"ACK了同一笔数据就会是reassembled PDU”,“同一个GET请求的response"云云…但是很显然,上述我抓包的截图中,402到405号包都有ACK了同一个序列号,但是为什么只有一个"TCP segment of a reassembled PDU"呢??在没有标识reassembled PDU的数据包中,另外标识了TLSv1.2的协议原语。此时,我来做一个动作,按下"Ctrl-Shift-E"组合键,事实上就是点击"分析"菜单,进入"已启用的协议"界面: 反选SSL协议,不再识别SSL协议之后,我们再看402到405号数据包: 没有了"TCP segment of a reassembled PDU"这些,除了没有这些"修饰语"之外,其它的协议层面的数据完全和之前识别SSL协议的时候相符合。我们的结论是,关掉了对SSL协议的识别,就没有了reassembled PDU的修饰,这恰恰是因为SSL协议让Wireshark知道403号包是一个reassembled PDU!如果你不知道这是个SSL协议,你就无法判断出这是不是一个reassembled PDU! 是的,这就是原因。接下来,为什么SSL协议就能识别这是一个reassembled PDU呢?这就要看你对SSL协议是否理解了,起码我是懂的,在握手阶段,Server Hello和Server的Certificate是背靠背发送的,也就是说它们是连着发给Client的,一个Server Hello,外加一个证书,一起发给Client,接下来就是不那么根本但很显然的事情了,如果这些包的总和足够小或者链路的MTU足够大,能够一次性发送过去的话,那当然好,如果不能,很显然要拆成几个分段发送了,如果中间的那个分段不能被SSL协议的原语识别,那么就会被标识成reassembled PDU,这就是为什么404,405号数据包都是连续发送的,但是却未被识别为reassembled PDU,因为SSL协议知道它们是Certificate消息和Server Key Exchange消息。 现在明白了吗?我特意没有用HTTP协议去解释这个而是选择了用SSL协议,目的就是想让大家明白,并不是针对同一个GET请求的同一笔回应会被标识为reassembled PDU!而是完全靠着应用层协议原语来识别协议消息。如果你的Wireshark被配置成不识别任何协议,比如不识别HTTP协议,SSL协议,那也就不会出现reassembled PDU了,因为Wireshark不知道到底是不是!实际上Wireshark支持你去自定义你自己的协议插件,你可以试一下,自己开发一个简单的协议,就算你的TCP数据段总和没有超过一个MSS,比如你的socket每发100字节就sleep 10秒,并且TCP socket没有设置Nagle算法,那么虽然每个段只有100字节,远没有到一个MSS,也会有reassembled PDU的标识! ...

Created 6066-11-06 · Updated 6066-11-06 · 1 min · 195 words · -

IO同步函数: sync, fsync, fdatasync

IO同步函数: sync、fsync、fdatasync 传统的UNIX或LINUX系统实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当空闲内存不足内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写 (delayed write) 。 当调用 write() 函数写出数据时,数据一旦写到该缓冲区 (仅仅是写到缓冲区) ,函数便马上返回。此时写出的数据能够用read()读回,也能够被其它进程读到,可是并不意味着它们已经被写到了外部永久存储介质上。即使调用close()关闭文件后也可能如此,由于缓冲区的数据可能还在等待输出。因此。从数据被实际写到磁盘的角度来看。用write()写出的文件数据与外部存储设备并非全然同步的。不同步的时间间隔非常短,一般仅仅有几秒或十几秒,详细取决于写出的数据量和I/O数据缓冲区的状态。虽然不同步的时间间隔非常短,可是假设在此期间发生掉电或者系统崩溃,则会导致所写数据来不及写至磁盘而丢失的情况。 注意: 内核将缓冲区中的数据"写"到标准输入磁盘文件里,这里"写"不是将缓冲区中的数据移动到磁盘文件里,而是复制到磁盘文件里,也就说此时缓冲区内容还没有被清除。做出这一设计也是有其道理的,假设写出到磁盘文件上,磁盘坏了或满了等等,总之就是无法将数据送出,假如缓冲区内容被清除,那数据就丢掉了。也就是说内核会等待写入磁盘动作完毕后,才放心的将缓冲区的数据删除掉。 延迟写减少了磁盘写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓冲区高速缓存中内容的一致性,UNIX系统提供了 sync、fsync 和 fdatasync 三个函数: sync sync 函数只是将所有修改过的块缓冲区加入写队列,然后就返回,它并不等待实际写磁盘操作结束。所以不要觉得调用了sync 函数,就觉得数据已安全的送到磁盘文件上,有可能会出现故障,可是 sync 函数是无法得知的.通常称为 update 的系统守护进程会周期性地 (一般每隔30秒) 调用 sync 函数。这就保证了定期冲洗内核的块缓冲区。命令 sync(1) 也调用 sync 函数。sync是全局的,对整个系统都 flush。 fsync fsync 函数只针对单个文件,只对由文件描述符 filedes 指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync 不仅会同步更新文件数据,还会同步更新文件的属性 (比如 atime,mtime 等) 。fsync 可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。 fdatasync fdatasync 当初设计是考虑到有特殊的时候一些基本的元数据比如 atime,mtime 这些不会对以后读取造成不一致性,因此少了这些元数据的同步可能会在性能上有提升。该函数类似于 fsync,但它只影响文件的数据部分, 如果该写操作并不影响读取刚写入的数据,则不需等待文件属性被更新。 对于提供事务支持的数据库,在事务提交时,都要确保事务日志 (包含该事务所有的修改操作以及一个提交记录) 完全写到硬盘上,才认定事务提交成功并返回给应用层。 一个简单的问题: 在*nix操作系统上,怎样保证对文件的更新内容成功持久化到硬盘? write不够,需要 fsync 一般情况下,对硬盘 (或者其他持久存储设备) 文件的write操作,更新的只是内存中的页缓存 (page cache) ,而脏页面不会立即更新到硬盘中,而是由操作系统统一调度,如由专门的 flusher 内核线程在满足一定条件时 (如一定时间间隔、内存中的脏页达到一定比例) 内将脏页面同步到硬盘上 (放入设备的IO请求队列) 。 因为 write 调用不会等到硬盘IO完成之后才返回,因此如果OS在write调用之后、硬盘同步之前崩溃,则数据可能丢失。虽然这样的时间窗口很小,但是对于需要保证事务的持久化 (durability) 和一致性 (consistency) 的数据库程序来说,write()所提供的"松散的异步语义"是不够的,通常需要OS提供的同步IO (synchronized-IO) 原语来保证: include <unistd.h> int fsync(int fd); fsync的功能是确保文件fd所有已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成。 ...

Created 2026-11-02 · Updated 2026-11-02 · 3 min · 486 words · -

flex

“flex” Flex 布局 网页布局 (layout) 是 CSS 的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案—-Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

Created 31316-10-31 · Updated 31316-10-31 · 1 min · 19 words · -

win10外接显示器频繁休眠

“win10外接显示器频繁休眠” win10外接显示器频繁休眠 https://blog.csdn.net/YHFZXF/article/details/103408021 参考链接https://baijiahao.baidu.com/s?id=1620654112845897421&wfr=spider&for=pc 最近笔记本外接显示器总是频繁休眠,网上找了很多方法都不管用,按照这个方法设置后好像有效果,为了以后方便自己忘记怎么设置了,就把链接中的方法备份到博客。 一、查看睡眠超时设置 进入"Windows设置 - 系统 - 电源和睡眠"查看,发现"电脑在经过以下时间后进入睡眠状态"设置即使是在使用电池时也长达30分钟的,更不用说插电时是 1 小时了。如图: 所以进入睡眠状态的超时设置是没有问题的。 二、更新/重装显卡驱动 打开设备管理器,打开显卡属性窗口,切换到"驱动程序"选项卡。如图: 但是无论是"更新驱动程序",还是"卸载设备"后重装安装显卡驱动 (甚至借助DDU彻底卸载了显卡驱动,并且尝试了多个版本的显卡驱动) ,结果问题依旧。 三、排除"屏幕保护程序"制造的假象 使用Win10任务栏搜索功能搜索"屏幕保护程序"打开"屏幕保护程序设置"窗口。如图: 因为如果"屏幕保护程序"等待时间设置过短,屏幕保护程序设置为"无",并且勾选了"在恢复时显示登录屏幕"的话。一旦Win10电脑闲置超时,就会触发屏幕保护程序,但又因为并没有设置屏保,所以会屏幕一闪直接进入系统登录界面,从而给人一种进入睡眠又旋即被唤醒的错觉。 四、问题根源在"无人参与系统睡眠超时"设置 在排除以上原因后,最终找到了问题的根源是在Windows电源选项的一个隐藏设置项"无人参与系统睡眠超时"上。 之所以说它是隐藏设置项,是因为需要修改注册表才能使该设置项显示出来。方法如下: 打开注册表编辑器,定位至: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 PS: 如何快速定位至注册表中某项鉴于修改注册表有风险,所以建议修改前备份注册表 (备份注册表的方法) ,或者创建系统还原点,以便出现问题时恢复。 在右侧窗格找到名为 Attributes 的 DWORD 值,双击该值打开编辑窗口。如图: 把数值数据由默认值 1 修改为 2 ,确定。 然后还进入"Windows设置 - 系统 - 电源和睡眠",点击"相关设置"下的"其他电源设置",这时会打开"控制面板\硬件和声音\电源选项"。如图: 点击当前电源计划右侧的"更改计划设置",会跳转到"控制面板\硬件和声音\电源选项\编辑计划设置"界面。如图: 点击"更改高级电源设置"即可打开"电源选项 - 高级设置"窗口。如图: 点击 + 号展开"睡眠",即可看到"无人参与系统睡眠超时"设置项,默认正是 2 分钟,由此可见,问题的根源就是在这里。 把它修改为一个较大的数值,起码不小于你在"Windows设置 - 系统 - 电源和睡眠"设置的睡眠超时时间即可。 至此问题解决!

Created 21216-10-21 · Updated 21216-10-21 · 1 min · 61 words · -

typescript basic

“typescript basic” number <> string let n = Number('1234') String(page_number); 遍历Array 方法一,for…of 这个貌似是最常用的方法,angular 2中HTML语法绑定也是要的这种语法。 let someArray = [1, "string", false]; for (let entry of someArray) { console.log(entry); // 1, "string", false } 方法二,for循环 for循环其实是标准的C风格语法。 let someArray = [1, "string", false]; for (var i = 0; i < someArray.length; i ++) { console.log(someArray[i]); // 1, "string", false } 方法三, for…in 官方文档上强调了for…in和for…of的区别: let list = [4, 5, 6]; for (let i in list) { console.log(i); // "0", "1", "2", } for (let i of list) { console.log(i); // "4", "5", "6" } 方法三,forEach forEach其实是JavaScript的循环语法,TypeScript作为JavaScript的语法超集,当然默认也是支持的。 ...

Created 19196-10-19 · Updated 19196-10-19 · 1 min · 175 words · -

光圈

“光圈” 「小光圈」(像f/11、f/16、f/22等),会造成以下的效果: 1.减少光线进入相机,这时就可以用较慢的快门时间,比如拍摄流水、车轨、星轨、光影涂鸦等都需要相对时间长的曝光; 2.让点光源变成散射状,即产生明显的星芒效果; 3.大景深效果,对焦主体以外的背景或前景都可以保持清晰。 大光圈(像f/1.4、f/1.8、f/2.8等等),会有以下效果: 1.在快门时间相同的情况下,光圈越大会使越多光线进入相机,从而令曝光增加,相片变亮,尤其是在光线比较暗的情况下大光圈很有用; 2.景深变浅: 这是大光圈一个很有用的用处-制造浅景深,让焦点中主体从虚化的背景中突显出来;

Created 18186-10-18 · Updated 18186-10-18 · 1 min · 9 words · -

xterm

xterm http://www.hasdiffer.com/xterm-vs-terminal.html xterm 和终端都是运行 X Windows 系统的基于 UNIX 的系统通用的终端仿真器。终端仿真器基本上是一种终端应用程序,它允许用户访问最初开发的程序以与某些其他类型的终端进行通信。它只是复制了经典计算机终端的功能。终端仿真器通常由系统管理员使用,因为某些内置的命令行程序无法自行运行,因此使用第三方终端仿真器与系统进行通信。命令行通常是在Linux系统上运行的最佳方法,因为大多数任务在控制台上运行效果最佳。 Windows的内置终端仿真器是"命令提示符",而Mac OS X使用"终端"作为其终端仿真应用程序,该应用程序位于/ Application/Utilities。终端机是Linux用户最重要的应用程序之一,它为用户提供了对Shell的访问。终端是Linux真正威力的源泉。但是,Linux提供了每个GUI版本专有的许多终端仿真器。运行X Windows系统的Linux系统使用" xterm"作为它们的默认终端仿真器程序。尽管xterm似乎有点经典,但它仍然是X Windows System的默认终端,它仅基于文本原理。 什么是终端机?终端是一个命令行界面,它使用户可以以书面文字与人类相同的方式与计算机进行通信。 Linux的终端就像Windows的命令提示符。它是Linux最强大的功能之一,可为用户提供对命令行界面的访问权限。简而言之,Terminal是Linux桌面环境的默认终端仿真器。其他桌面环境(如Ubuntu)也将Terminal用作其默认的终端仿真器软件包。每个桌面环境都有不同的方法来访问终端。最简单的方法之一是在按住Ctrl + Alt + T的同时启动终端窗口。 什么是Xterm?XTerm是运行X Windows系统的Linux系统的默认终端仿真器程序。您只需在"终端"窗口中键入xterm并按Enter,它将与xterm窗口一起启动X11环境。但是,在GNOME桌面环境中,默认情况下未安装xterm。必须先安装并从另一个终端仿真器(例如Terminal)启动xterm。另外,您还可以创建自己的桌面启动器以打开xterm窗口。与终端不同,用户可以同时运行多个xterm实例。 xterm和Terminal的区别 基本Terminal和xterm都是终端仿真器程序,允许在图形环境中使用终端。这是GUI中的纯文本窗口,允许用户直接执行命令。这是Linux的默认终端仿真应用程序。但是,Linux提供了各种终端仿真器,其中之一是" xterm"。它是运行X Windows系统的Linux和UNIX系统的默认终端仿真器。这是用于轻量级发行的复杂终端。 进程管理用户可以在同一显示器上同时运行多个xterm实例,这意味着每个窗口对应一个单独的进程,每个窗口为运行它的shell或进程提供独立的输入和输出。另一方面,终端一次仅控制一个会话,这意味着控制终端与该会话具有一对一的关系,并且每个会话作为终端的子进程单独运行。记录会话的终端将成为该过程的控制终端。 剪贴板剪切的所有内容(⌘-X)和复制的内容(is-C)都存储在剪贴板中,当您使用粘贴(⌘-V)时,系统会进一步从剪贴板中读取它。选项不会自动放入终端。您复制的所选文本最初存储在一个名为"粘贴板"的地方。另一方面,XTerm仅使用剪贴板缓冲区复制和粘贴文本,但是默认配置中未使用它。默认情况下,Xterm仅支持PRIMARY缓冲区,该缓冲区仅在用户用鼠标突出显示文本并且在用户按下鼠标中键时将所选文本粘贴到同一窗口中时才接收输入。 访问在Linux系统中打开终端的最简单方法之一是同时按住Ctrl + Alt + T键的组合,终端窗口将打开。只能通过打开"终端"应用程序从"应用程序"文件夹中的"实用工具"文件夹访问它。也可以在Dash中查找Terminal,或为Launcher添加快捷方式。同时按Alt + F2并键入" gnome-terminal"也将打开"终端"窗口。但是,您只需在"终端"窗口中键入xterm,然后按Enter键即可启动X11环境以及xterm窗口。 总结尽管xterm和Terminal都是基于Linux和UNIX的系统的终端仿真器程序,但是xterm是运行X Windows System的系统的默认终端仿真应用程序。 终端是命令行界面,允许用户访问Shell。 它是Linux的心脏,也是系统管理员最常用的最强大功能之一,因为大多数内置命令行程序本身并不出色,并且它们需要第三方程序通过命令与系统进行交互。 Linux提供了各种终端仿真器,包括xterm,它是X Windows系统的默认终端仿真器。 本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。 转载请注明: 文章转载自 有区别网 [http://www.hasdiffer.com] 本文标题: Xterm和终端的区别 本文链接: http://www.hasdiffer.com/xterm-vs-terminal.html //更多关于【Xterm和终端的区别】请查看: http://www.hasdiffer.com/xterm-vs-terminal.html

Created 12126-10-12 · Updated 12126-10-12 · 1 min · 57 words · -

RV basic, 房车, 拖挂房车

RV basic, 房车, 拖挂房车 https://campaddict.com/dispersed-camping/ Dispersed camping is camping in a national forest OUTSIDE of any improved campground or recreational area. Dry camping is simply camping without being hooked up to any utilities. Boondocking is camping in a remote location. It is always dry camping. 拖挂 hobby 大驰 森林河 后车的最大质量不能超过前车的整备质量 Hobby http://www.hobbyrv.com/c/ONTOUR.html 大驰 https://www.dachirv.com/h-pd-53.html

Created 8086-10-08 · Updated 8086-10-08 · 1 min · 54 words · -

promise

“promise” ECMAscript 6 原生提供了 Promise 对象。 Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。 Promise 对象有以下两个特点: 对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态: pending: 初始状态,不是成功或失败状态。 fulfilled: 意味着操作成功完成。 rejected: 意味着操作失败。 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能: 从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件 (Event) 完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 Promise 优缺点 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。 Promise 也有一些缺点。首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段 (刚刚开始还是即将完成) 。 https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544 https://www.runoob.com/w3cnote/javascript-promise-object.html <!DOCTYPE html> <html> <head> <script type="text/javascript"> console.log('javascript0') function resolve(str) { console.log('resolve.' + str) } function reject(str) { console.log('reject.' + str) } function fun0() { console.log('fun0 start') //test(resolve, reject) new Promise(test).then(function (result) { console.log('成功: ' + result); }, function (result) { console.log('成功1: ' + result); }).catch(function (reason) { console.log('失败: ' + reason); }); } function log(str) { console.log(str) } function callback() { console.log('Done'); } function test(resolveParams, rejectParams) { var timeOut = Math.random() * 2; log('set timeout to: ' + timeOut + ' seconds.'); setTimeout(function () { if (timeOut < 1) { log('call resolve()...'); resolveParams('200 OK'); } else { log('call reject()...'); rejectParams('timeout in ' + timeOut + ' seconds.'); } }, timeOut * 1000); } </script> </head> <body> body0 <button name="btn0" onclick="fun0()">button0</button> </body> </html> https://www.cnkirito.moe/future-and-promise/ ...

Created 29296-09-29 · Updated 29296-09-29 · 1 min · 174 words · -

n1 coreelec

“n1 coreelec” 从官网下载最新版本的coreelec, CoreELEC-Amlogic.arm-9.2.4.2-Generic.img.gz https://coreelec.org/ 用7z 解压 CoreELEC-Amlogic.arm-9.2.4.2-Generic.img.gz, 得到 CoreELEC-Amlogic.arm-9.2.4.2-Generic.img 用Win32DiskImager.exe将CoreELEC-Amlogic.arm-9.2.4.2-Generic.img写入U盘 替换文件 运行N1降级工具,选择3 进入线刷模式 在提示插入usb线时,插入u盘 , 进入 U盘上的 coreelec系统, 开启ssh支持 ssh 登录 coreelec, 执行以下命令将coreelec写入emmc /flash/installtoemmc

Created 11116-09-11 · Updated 11116-09-11 · 1 min · 25 words · -

windows install

“windows install” WoeUSB, linux 制作 windows 安装盘 WoeUSB 是一款主要用于在 Linux 下制作 Windows 启动 U 盘的开源软件 run woeusb gui woeusbgui wsl2 https://docs.microsoft.com/en-us/windows/wsl/install-win10 https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel hyper v https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Created 7076-09-07 · Updated 7076-09-07 · 1 min · 30 words · -

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站点也会采取措施 (比如做种时间,优惠等) 使上传较慢的小水管能够参与贡献和共享资源。

Created 6066-09-06 · Updated 6066-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

Created 1016-09-01 · Updated 1016-09-01 · 1 min · 65 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

Created 9096-08-09 · Updated 9096-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

Created 3036-08-03 · Updated 3036-08-03 · 1 min · 60 words · -