2024年8月

Posted on:August 8, 2024 at 06:00 AM
预计阅读时长:25 min read 字数:4923

目录

todo

2024-08-09 09:10:25

css5 CSS5并不是一个正式的版本名称,但它通常指的是自CSS3以来引入的一系列新特性和功能。这些新特性在过去几年中逐渐被开发者和浏览器支持。以下是一些在2023年和2024年被广泛讨论的CSS新特性:

  1. 容器查询(Container Queries):允许开发者根据父容器的大小来调整子元素的样式。这使得组件能够更灵活地适应不同的布局需求,而不仅仅依赖于视口大小的媒体查询23

  2. CSS嵌套(CSS Nesting):原生支持CSS嵌套,允许开发者在一个选择器内部定义另一个选择器,从而减少冗余代码并提高可读性。这一特性以前通常依赖于CSS预处理器如Sass或Less来实现23

  3. :has()选择器:这个选择器允许开发者根据子元素的状态来改变父元素的样式,例如,当某个输入框被选中时,可以改变其父元素的边框样式。这简化了许多需要JavaScript的操作3

  4. 新视口单位:引入了小视口(svh/svw)、大视口(lvh/lvw)和动态视口(dvh/dvw)单位,这些单位考虑了移动设备上浏览器工具栏的高度,使得布局更加精确2

  5. 间距属性(Gap Property):在Flexbox和Grid布局中引入了gap属性,可以更方便地设置行和列之间的间距,而不需要单独处理第一个和最后一个元素的边距2

  6. 强调颜色属性(Accent-color Property):允许开发者快速自定义表单元素(如复选框和单选按钮)的颜色,简化了样式的应用2

这些新特性使得CSS在现代网页开发中更加灵活和强大,帮助开发者更高效地创建响应式和用户友好的界面。随着浏览器的不断更新和支持,预计未来会有更多的CSS特性被引入和普及。

2024-08-14 03:03:20

DSL

领域特定语言(Domain-Specific Language,简称 DSL)是一种专门为特定领域或特定问题域设计的编程语言或规格语言。与通用编程语言(如 Python、Java 或 C++)不同,领域特定语言通常针对某一特定任务或应用场景,旨在提高开发效率和代码可读性。

领域特定语言的特点

  1. 专用性:DSL 主要用于解决特定领域的问题,例如数据库查询、图形设计、网络配置等。它们通常不适合用于其他领域的编程。

  2. 简化语法:DSL 的语法通常比通用语言更简单,更接近于自然语言或领域内的专业术语,使得非程序员也能理解和使用。

  3. 高效性:由于 DSL 针对特定任务进行了优化,因此在处理相关问题时,通常比通用语言更高效。

  4. 可读性:DSL 的设计通常注重代码的可读性,使得开发人员和领域专家能够更容易地理解代码的意图。

领域特定语言的类型

领域特定语言可以分为两类:

  1. 内部 DSL:这些语言是构建在通用编程语言之上的,利用通用语言的语法和特性来创建一种新的语言风格。例如,Ruby 中的 RSpec 测试框架就是一个内部 DSL,它使用 Ruby 的语法来描述测试用例。

  2. 外部 DSL:这些语言有自己独立的语法和解析器,通常需要单独的编译器或解释器来处理。例如,SQL(结构化查询语言)就是一种外部 DSL,用于数据库查询和操作。

领域特定语言的例子

  • SQL:用于数据库操作的语言,专门设计用于查询和管理关系数据库。
  • HTML/CSS:用于网页设计和布局的标记语言和样式表语言。
  • 正则表达式:用于字符串匹配和搜索的模式描述语言。
  • Makefile:用于自动化构建过程的脚本语言。

总结

领域特定语言通过提供针对特定任务的简化语法和功能,帮助开发人员更高效地解决问题。它们在软件开发中扮演着重要角色,尤其是在需要与特定领域知识紧密结合的应用场景中。

neovim的DSL是

Neovim 的领域特定语言(DSL)主要是指其配置和插件开发中使用的 Lua 语言。Neovim 通过引入 Lua 作为配置语言,提供了一种灵活且强大的方式来扩展和自定义编辑器的功能。

Neovim 的 DSL 特点

  1. Lua 语言:Neovim 使用 Lua 作为其主要的脚本语言,Lua 是一种轻量级、高效的脚本语言,适合嵌入式使用。通过 Lua,用户可以编写插件、配置编辑器行为以及实现复杂的自动化任务。

  2. 简化的 API:Neovim 提供了一套丰富的 API,允许开发者通过 Lua 访问和操作编辑器的各个方面。这些 API 使得开发者能够轻松实现自定义功能,如键映射、命令定义和用户界面修改。

  3. 插件系统:Neovim 的插件系统支持使用 Lua 编写插件,开发者可以利用 Lua 的特性来创建高性能的插件。这种灵活性使得 Neovim 的生态系统不断扩展,用户可以根据自己的需求安装和配置各种插件。

  4. 易于学习和使用:对于熟悉 Lua 的开发者来说,Neovim 的 DSL 提供了一种直观的方式来定制编辑器。即使是新手,也能通过简单的 Lua 代码快速上手。

示例

以下是一个简单的 Neovim 配置示例,展示了如何使用 Lua 进行基本的设置:

-- 设置行号
vim.o.number = true

-- 设置缩进
vim.o.tabstop = 4
vim.o.shiftwidth = 4
vim.o.expandtab = true

-- 映射键
vim.api.nvim_set_keymap('n', '<leader>ff', ':Telescope find_files<CR>', { noremap = true, silent = true })

在这个示例中,使用 Lua 语法设置了行号、缩进规则,并定义了一个键映射。

总结

Neovim 的 DSL 主要是通过 Lua 实现的,提供了强大的扩展性和灵活性,使得用户能够根据自己的需求定制编辑器的行为和功能。这种设计使得 Neovim 成为一个高度可定制的文本编辑器,适合各种开发需求。

2024-08-15 10:21:57

生活规律了以后似乎脑子也灵活了些

2024-08-16 00:52:44

买了些零食吃,生活又不规律了

pyenv

pyenv 是一个简单的 Python 版本管理工具,它允许用户轻松地在多个 Python 版本之间切换。

# 下载
curl https://pyenv.run | bash

# 配置环境
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# 设置全局 Python 版本
pyenv global 2.7.18

2024-08-19 13:47:52

如何播放dav文件

要在网页上播放 DAV 文件,通常需要将 DAV 文件转换为浏览器支持的格式,因为大多数浏览器不直接支持 DAV 格式。以下是一些常见的方法来实现这一目标:

1. 使用转换工具

首先,你可以使用一些在线或离线工具将 DAV 文件转换为常见的视频格式,如 MP4 或 HLS。以下是一些推荐的工具:

  • FFmpeg:这是一个强大的命令行工具,可以将 DAV 文件转换为其他格式。你可以使用以下命令将 DAV 转换为 MP4:

    ffmpeg -i input.dav -c:v libx264 -c:a aac output.mp4
    
  • 在线转换器:有许多在线服务可以将 DAV 文件转换为 MP4 或其他格式,例如 Online Convert 3

2. 使用流媒体服务器

如果你需要实时播放 DAV 文件,可以考虑使用流媒体服务器(如 Wowza、Red5 或 Nginx RTMP 模块)来处理 DAV 流并将其转换为浏览器支持的格式(如 HLS 或 DASH)。这样,你可以在网页上使用 HTML5 <video> 标签播放流。

3. 播放转换后的文件

一旦你将 DAV 文件转换为浏览器支持的格式(如 MP4),你可以使用 HTML5 <video> 标签在网页上播放它。示例代码如下:

<video controls>
  <source src="path/to/your/video.mp4" type="video/mp4" />
  您的浏览器不支持视频标签。
</video>

4. 使用 JavaScript 播放

如果你希望通过 JavaScript 控制视频播放,可以使用以下代码:

<video id="myVideo" controls>
  <source src="path/to/your/video.mp4" type="video/mp4" />
  您的浏览器不支持视频标签。
</video>

<script>
  const video = document.getElementById("myVideo");
  video.play(); // 自动播放视频
</script>

总结

由于浏览器不直接支持 DAV 文件,最有效的方法是将其转换为 MP4 或其他支持的格式,然后使用 HTML5 <video> 标签进行播放。通过使用 FFmpeg 或在线转换工具,你可以轻松地完成这一过程。

vm_stat
└─(14:00:18)──> vm_stat                                           ──(一, 819)─┘
Mach Virtual Memory Statistics: (page size of 16384 bytes)
Pages free:                                5743.
Pages active:                            319024.
Pages inactive:                          314350.
Pages speculative:                         4305.
Pages throttled:                              0.
Pages wired down:                        131577.
Pages purgeable:                           5434.
"Translation faults":                5790473889.
Pages copy-on-write:                   18486166.
Pages zero filled:                    691393681.
Pages reactivated:                    315635451.
Pages purged:                          13915221.
File-backed pages:                       223422.
Anonymous pages:                         414257.
Pages stored in compressor:              420240.
Pages occupied by compressor:            240030.
Decompressions:                       337929136.
Compressions:                         387047075.
Pageins:                               29825800.
Pageouts:                                833135.
Swapins:                                7152830.
Swapouts:                              11132853.

从你提供的 vm_stat 输出中,可以分析出当前系统的虚拟内存使用情况。以下是各项指标的解释:

  1. Pages free (空闲页面): 当前系统中有 5743 个页面是空闲的,表示这些页面可以被分配给新的进程或用于缓存。

  2. Pages active (活动页面): 有 319024 个页面正在被使用,这些页面包含当前正在运行的进程的数据。

  3. Pages inactive (非活动页面): 314350 个页面处于非活动状态,这些页面曾经被使用,但现在不再被活跃进程使用,可以被系统回收。

  4. Pages speculative (推测页面): 4305 个页面被标记为推测性,这些页面是系统预先加载的,以提高性能。

  5. Pages wired down (固定页面): 131577 个页面是固定的,意味着这些页面不能被交换到磁盘上,通常是操作系统的核心部分或驱动程序。

  6. Pages purgeable (可清除页面): 5434 个页面是可清除的,表示这些页面可以在内存紧张时被释放。

  7. Translation faults (地址转换错误): 5790473889 次,表示在访问内存时发生了多少次地址转换错误,通常是由于页面不在内存中而需要从磁盘加载。

  8. Pages copy-on-write (写时复制页面): 18486166 次,表示在进行写操作时,系统需要复制页面以保持数据一致性。

  9. Pages zero filled (零填充页面): 691393681 次,表示系统为新分配的页面填充了零。

  10. Pages reactivated (重新激活页面): 315635451 次,表示从非活动状态重新激活的页面。

  11. Pages purged (清除页面): 13915221 次,表示被清除的页面数量。

  12. File-backed pages (文件支持页面): 223422 个页面是由文件支持的,通常是映射到磁盘文件的页面。

  13. Anonymous pages (匿名页面): 414257 个页面是匿名的,表示这些页面没有文件支持。

  14. Pages stored in compressor (压缩存储页面): 420240 个页面被压缩存储,以节省内存。

  15. Pages occupied by compressor (压缩占用页面): 240030 个页面被压缩器占用。

  16. Decompressions (解压缩次数): 337929136 次,表示从压缩状态恢复到正常状态的次数。

  17. Compressions (压缩次数): 387047075 次,表示将页面压缩以节省内存的次数。

  18. Pageins (页面调入): 29825800 次,表示从磁盘调入内存的页面数量。

  19. Pageouts (页面调出): 833135 次,表示从内存调出到磁盘的页面数量。

  20. Swapins (交换调入): 7152830 次,表示从交换空间调入内存的页面数量。

  21. Swapouts (交换调出): 11132853 次,表示从内存调出到交换空间的页面数量。

从这些数据可以看出,系统的内存使用情况相对活跃,尤其是活动页面和非活动页面的数量都很高。需要注意的是,频繁的页面调入和调出可能会影响系统性能,建议监控这些指标,并考虑关闭一些占用内存较大的应用程序,或者增加物理内存以改善性能。

2024-08-19 17:41:19

  • 使用kontra
show code
---

---

<script>
  import { init, Sprite, GameLoop } from "kontra/kontra.mjs";

  let { canvas } = init();

  // 创建一个简单的角色
  let player = Sprite({
    x: 100, // 起始位置
    y: 80,
    color: "red", // 颜色
    width: 20, // 宽度
    height: 40, // 高度
    dx: 2, // 水平方向速度
  });

  // 创建游戏循环
  let loop = GameLoop({
    update: function () {
      player.update();

      // 反转方向以防止角色离开画布
      if (player.x > canvas.width || player.x < 0) {
        player.dx = -player.dx;
      }
    },
    render: function () {
      player.render();
    },
  });

  loop.start(); // 开始游戏循环
</script>

<style>
  canvas {
    display: block;
    margin: 0 auto;
    background-color: #f0f0f0;
    border: 1px solid #000;
  }
</style>

<canvas width="640" height="480"></canvas>

2024-08-19 18:14:23

如何查看请求地址是否被nginx代理 要查看某个请求地址是否被 Nginx 代理,可以通过以下几种方式来确认:

1. 使用 curl 查看响应头

你可以使用 curl 命令行工具来查看请求是否经过了 Nginx 代理。Nginx 通常会在响应头中添加一些自定义头信息。

curl -I http://your-nginx-domain.com/path/to/resource

或使用 -v 选项查看详细的请求和响应信息:

curl -v http://your-nginx-domain.com/path/to/resource

如何判断:

  • 检查响应头是否包含 Server: nginx 或者其他 Nginx 添加的头信息,例如 X-Proxy-CacheX-Real-IPX-Forwarded-ForX-Forwarded-Proto 等。
  • 如果你看到这些头信息,那么可以确定请求是通过 Nginx 代理的。

2. 查看 Nginx 访问日志

Nginx 会将所有处理的请求记录到访问日志中。你可以通过查看 Nginx 的访问日志来确认某个请求是否通过了 Nginx。

Nginx 的访问日志通常位于 /var/log/nginx/access.log,你可以使用以下命令查看最新的日志条目:

tail -f /var/log/nginx/access.log

然后发起请求,查看日志中是否记录了这个请求。如果日志中显示了该请求的路径、方法、状态码等信息,说明请求已经经过了 Nginx。

3. 使用 Nginx 错误日志

如果你的请求被 Nginx 代理时出现了错误,可以查看 Nginx 的错误日志。这通常位于 /var/log/nginx/error.log

tail -f /var/log/nginx/error.log

当你发起请求时,检查错误日志中是否有相关的错误信息。Nginx 在处理错误时通常会记录相关的上下文。

4. 使用 ngreptcpdump 监控流量

如果你想查看 Nginx 是否接收并转发了某个请求,可以使用 ngreptcpdump 来捕获网络流量。

例如,使用 ngrep 监听 HTTP 请求:

sudo ngrep -d any -W byline 'GET|POST' tcp port 80

使用 tcpdump 监听流量:

sudo tcpdump -i any -A -s 0 'tcp port 80'

通过分析这些工具捕获到的数据,你可以看到请求的具体流向。

5. 添加调试日志

你可以在 Nginx 配置中为某些 location 块或整个服务器块添加调试日志,以确认请求的流向。修改 nginx.conf 并设置日志级别为 debug

error_log /var/log/nginx/error.log debug;

然后重启 Nginx 服务,重新查看 error.log 中的调试信息,确认请求是否被代理。

总结

通过以上方法,你可以有效地确认请求是否经过了 Nginx 代理。使用 curl 查看响应头和查看 Nginx 日志是最常用的方法,而流量监控工具和调试日志则更适合于更深入的分析和问题排查。

2024-08-20 17:38:26

什么是跳板机

跳板机(Jump Server)是一种网络安全设备,主要用于在不同的安全区域之间提供受控的访问。它充当一个中介,允许用户从一个网络连接到跳板机,然后再“跳转”到另一个网络。这种设计可以增强网络的安全性,因为跳板机通常会被配置为监控和记录所有通过它的流量,从而为网络管理员提供审计和监控的能力15

跳板机的工作原理是,当用户需要访问一个位于受保护网络(如DMZ)中的设备时,他们首先需要通过跳板机进行身份验证。只有经过验证的用户才能访问目标设备,这样可以有效地防止未授权的访问34

跳板机通常用于大型企业或数据中心,因为它们需要管理多个客户端和服务器连接。通过使用跳板机,企业可以增强对内部服务器和域的控制,并提高安全性,防止数据泄露和网络攻击16

2024-08-21 13:36:21

whois web.dev

要获取关于域名 web.dev 的 WHOIS 信息,可以使用多个 WHOIS 查询工具。WHOIS 查询通常会提供域名的注册信息,包括注册商、注册日期、到期日期、DNS 服务器等。

根据最新的 WHOIS 数据,web.dev 的信息如下:

  • 域名: web.dev
  • 注册商: Charleston Road Registry
  • 注册日期: 2018-10-29
  • 到期日期: 2024-10-29
  • 更新日期: 2023-12-13
  • 域名状态: 包含 serverDeleteProhibitedserverTransferProhibitedserverUpdateProhibited 状态,表示该域名在转移和更新时受到限制。
  • 名称服务器: ns1.zdns.google, ns2.zdns.google, ns3.zdns.google, ns4.zdns.google

需要注意的是,WHOIS 查询结果中可能会出现 “REDACTED FOR PRIVACY” 的信息,这意味着某些注册者的个人信息被隐私保护服务隐藏,以防止滥用或身份盗窃35

┌─(~/Documents/ajn404.github.io)─────────────────────────────────────────(ninghuiyue@ninghuiyuedeMac-mini:s002)─┐
└─(13:34:40 on main)──> whois web.dev                                                         1 ↵ ──(三, 821)─┘
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

refer:        whois.nic.google

domain:       DEV

organisation: Charleston Road Registry Inc.
address:      1600 Amphitheatre Parkway
address:      Mountain View CA 94043
address:      United States of America (the)

contact:      administrative
name:         TLD Admin
organisation: Google Inc.
address:      111 8th Avenue
address:      New York NY 10011
address:      United States of America (the)
phone:        +1 404 978 8419
fax-no:       +1 650 492 5631
e-mail:       iana-contact@google.com

contact:      technical
name:         TLD Engineering
organisation: Google Inc.
address:      76 Ninth Avenue, 4th Floor
address:      New York NY 10011
address:      United States of America (the)
phone:        +1 404 978 8419
fax-no:       +1 650 492 5631
e-mail:       crr-tech@google.com

nserver:      NS-TLD1.CHARLESTONROADREGISTRY.COM 2001:4860:4802:32:0:0:0:69 216.239.32.105
nserver:      NS-TLD2.CHARLESTONROADREGISTRY.COM 2001:4860:4802:34:0:0:0:69 216.239.34.105
nserver:      NS-TLD3.CHARLESTONROADREGISTRY.COM 2001:4860:4802:36:0:0:0:69 216.239.36.105
nserver:      NS-TLD4.CHARLESTONROADREGISTRY.COM 2001:4860:4802:38:0:0:0:69 216.239.38.105
nserver:      NS-TLD5.CHARLESTONROADREGISTRY.COM 2001:4860:4805:0:0:0:0:69 216.239.60.105
ds-rdata:     60074 8 2 b942e2ce5aebf62fca59d05707e6dbb795211d540d8adba02e9e89e833424785

whois:        whois.nic.google

status:       ACTIVE
remarks:      Registration information: https://www.registry.google

created:      2014-11-20
changed:      2020-04-20
source:       IANA

# whois.nic.google

Domain Name: web.dev
Registry Domain ID: 2E35D5AB3-DEV
Registrar WHOIS Server: whois.nic.google
Registrar URL: http://www.charlestonroadregistry.com
Updated Date: 2023-12-13T15:57:39Z
Creation Date: 2018-10-29T15:57:39Z
Registry Expiry Date: 2024-10-29T15:57:39Z
Registrar: Charleston Road Registry Billable
Registrar IANA ID: 9998
Registrar Abuse Contact Email: registry-abuse-support@google.com
Registrar Abuse Contact Phone: +1.2125652632
Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
Registry Registrant ID: REDACTED FOR PRIVACY
Registrant Name: REDACTED FOR PRIVACY
Registrant Organization: Charleston Road Registry, Inc.
Registrant Street: REDACTED FOR PRIVACY
Registrant Street:
Registrant City: REDACTED FOR PRIVACY
Registrant State/Province: CA
Registrant Postal Code: REDACTED FOR PRIVACY
Registrant Country: US
Registrant Phone: REDACTED FOR PRIVACY
Registrant Fax: REDACTED FOR PRIVACY
Registrant Email: Please query the WHOIS server of the owning registrar identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Registry Admin ID: REDACTED FOR PRIVACY
Admin Name: REDACTED FOR PRIVACY
Admin Organization: REDACTED FOR PRIVACY
Admin Street: REDACTED FOR PRIVACY
Admin Street:
Admin City: REDACTED FOR PRIVACY
Admin State/Province: REDACTED FOR PRIVACY
Admin Postal Code: REDACTED FOR PRIVACY
Admin Country: REDACTED FOR PRIVACY
Admin Phone: REDACTED FOR PRIVACY
Admin Fax: REDACTED FOR PRIVACY
Admin Email: Please query the WHOIS server of the owning registrar identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Registry Tech ID: REDACTED FOR PRIVACY
Tech Name: REDACTED FOR PRIVACY
Tech Organization: REDACTED FOR PRIVACY
Tech Street: REDACTED FOR PRIVACY
Tech Street:
Tech City: REDACTED FOR PRIVACY
Tech State/Province: REDACTED FOR PRIVACY
Tech Postal Code: REDACTED FOR PRIVACY
Tech Country: REDACTED FOR PRIVACY
Tech Phone: REDACTED FOR PRIVACY
Tech Fax: REDACTED FOR PRIVACY
Tech Email: Please query the WHOIS server of the owning registrar identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Name Server: ns1.zdns.google
Name Server: ns2.zdns.google
Name Server: ns3.zdns.google
Name Server: ns4.zdns.google
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of WHOIS database: 2024-08-21T05:34:49Z <<<