黑夜梦想家的网络日志 - 计算机
type: channel
link: https://blog.nighterdream.cn/index.php/category/%E8%AE%A1%E7%AE%97%E6%9C%BA/
description: 计算机相关的各种知识
items: Linux复习笔记
items: 给health-care加个推荐算法
items: 正向代理与反向代理的区别
items: Hexo博客集成Artalk评论系统指北
items: 使用 CDN 提升网站速度与安全性：我的博客加速之路
items: 关于知识图谱的复习
items: 老司机带你玩转windows
items: 我的第一篇博客文章

Linux复习笔记
type: item
date: 2025-11-17T23:48:38+08:00
description: the missing-semester笔记拥有一个目录下某个文件的写权限但是没有目录的写入权限的话，可以清空该文件内容分但是无法删除文件

给health-care加个推荐算法
type: item
date: 2024-11-07T12:56:00+08:00
description: 问题的产生我的health-care健康饮食管理系统在使用过程中逐渐产生了一个问题,那就是随着用户摄入食物项目的添加,食物数目会变得更多用户需要寻找很久才能找到匹配的食物选项。同时由于页面简约性的要求，以及对于移动端设备支持的友好性方面考虑我想应该可以用一个类似计算机cpu调度方面的简单算法来解决这个问题。为了实现这一目标，我设计了一个基于频次和时间间隔的排序算法，使得推荐系统不仅了解用户的即时需求，也能通过历史选择为用户提供合理的推荐。算法的需求基于频次的考虑：如果你经常选择某个食物，系统会优先推荐它，因为频繁的选择暗示了你对这个食物的偏好。基于时间间隔的考虑：如果某个食物已经很久没有被你选中了，系统会降低它的推荐优先级，避免向你推荐那些你可能已经不感兴趣的食物。于是可以设计一个这样的函数：$$ \text{priority\_score} = \text{frequency} \times \left(1 + \frac{\text{time\_weight\_factor}}{\text{days\_since\_last\_selected} + 1}\right) $$公式的组成部分frequency（频次）：这是用户选择某个食物的次数。假设你频繁选择某个食物，它的频次就会较高。频次越高，意味着这个食物更符合用户的长期偏好，因此它对最终优先级的贡献也会越大。days_since_last_selected（自上次选择以来的天数）：这是当前日期与用户最后一次选择该食物的日期之间的天数差。这个数值越大，意味着食物越久未被选中。一般来说，如果一个食物长时间未被选择，我们可能希望它的优先级会降低（除非用户有意想要重新尝试的需求）。time_weight_factor（时间权重因子）：这个值决定了时间因素在最终优先级中的影响力。它是一个调整系数，影响时间间隔对食物优先级的贡献。数值越大，表示时间的影响越大，即食物选择的时间间隔对优先级的影响会更强。公式的逻辑:$$ 1 + \frac{\text{time\ weight\ factor}}{\text{days\ since\ last\ selected} + 1} $$这一部分是计算时间间隔对优先级的影响。假设食物的选择频次是固定的，这一项会根据食物的上次选择时间进行调整。$$ \text{days\ since\ last\ selected} + 1 $$确保即使食物的选择频次是近期的，也不会造成除零错误。time_weight_factor 放大了时间间隔的影响，使得长期未被选择的食物得分明显降低。乘以 frequency：最后，我们将频次与时间因子相乘，最终的优先级分数既考虑了食物的选择频次，也考虑了其历史选择的时间间隔。设置合适的 time_weight_factor 取决于你的应用场景以及用户的行为特征。以下是不同情境下的建议：注重近期行为的场景如果你希望系统更重视用户近期的选择习惯，并且优先推荐用户最近选择的食物，那么可以选择较小的 time_weight_factor。例如：适合值：5-15 效果：时间间隔对优先级的影响较小，频次的影响占主导地位，推荐频繁选择的食物。用户的历史选择不久的食物将优先推荐，忽略较久未选择的食物。注重长期偏好的场景如果你希望推荐系统更注重用户的长期偏好（例如，帮助用户重新开始选择长期未选过的食物），可以将 time_weight_factor 设置得较大。这样，时间间隔的影响会显著地增加，较久未选择的食物将得到更多的优先推荐。适合值：20-50。效果：时间间隔对优先级的影响增大，推荐系统会更倾向于推荐久未选择的食物，即使频次较低。平衡近期和长期行为的场景如果你希望在推荐中平衡近期选择与长期偏好的影响，可以选择一个中等的 time_weight_factor，例如 10-20。这样既能考虑用户最近的选择行为，也不会忽略那些久未选择的食物。适合值：10-20。效果：推荐系统在近期行为与长期偏好之间找到一个平衡，频次和时间间隔的影响都得到合理的考虑。例子：优先级得分计算假设我们有两个食物项 A 和 B，我们将根据以下公式来计算它们的优先级得分：食物 A：frequency = 10days_since_last_selected = 5time_weight_factor = 10计算公式：$$ \text{priority\_score\_A} = 10 \times \left(1 + \frac{10}{5 + 1}\right) = 10 \times \left(1 + \frac{10}{6}\right) = 10 \times 2.6667 = 26.67 $$食物 B：frequency = 5days_since_…

正向代理与反向代理的区别
type: item
date: 2024-09-24T13:54:00+08:00
description: 正向代理（Forward Proxy）定义正向代理是一种位于客户端和目标服务器之间的代理，代表客户端向目标服务器发出请求，并将服务器的响应转发给客户端。[客户端] ----> [正向代理服务器] ----> [目标服务器]特点作用于客户端：客户端通过代理访问目标服务器，服务器不知道客户端的真实IP。隐藏客户端信息：可以帮助客户端隐藏其真实IP地址。突破访问限制：常用于访问被限制的网站（如翻墙）。典型应用场景绕过网络审查或防火墙。提升客户端隐私，隐藏其真实IP地址。提供缓存功能，加快客户端的访问速度。Nginx 正向代理配置示例server { listen 8888; # Nginx 监听的端口 location / { # 代理客户端请求到目标服务器 proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }在该配置中，Nginx 代理客户端的请求到目标服务器。客户端可以通过代理访问任何目标地址。反向代理（Reverse Proxy）定义反向代理是位于客户端和服务器之间的代理，代表服务器接收客户端的请求，并将其转发给内部真实服务器。对客户端而言，反向代理就是目标服务器。[客户端] ----> [反向代理服务器] ----> [后端服务器1] [后端服务器2] [后端服务器3]特点作用于服务器端：客户端只知道代理服务器，并不知道后端真实服务器。隐藏服务器信息：可以隐藏后端服务器的IP地址和架构，提升安全性。负载均衡：可以将请求分发给多个后端服务器，提升系统的性能和可用性。缓存功能：反向代理可以缓存后端服务器的响应，提高访问速度。典型应用场景负载均衡：分发流量到多个后端服务器。安全性：隐藏真实服务器，防止直接攻击。SSL 卸载：处理 SSL 加密，并将明文请求发送给后端服务器。静态内容缓存：缓存静态资源，减少后端压力。server { listen 80; server_name example.com; location / { # 代理请求到后端服务器 proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }在该配置中，客户端请求 example.com，Nginx 将该请求代理到后端服务器 backend_server。客户端并不知道 backend_server 的真实信息。正向代理 vs 反向代理特性正向代理反向代理代理对象客户端服务器隐藏对象隐藏客户端信息隐藏服务器信息客户端角色知道自己在使用代理，主动选择代理服务器不知道自己在与代理服务器交互主要用途翻墙、访问受限资源、隐藏IP负载均衡、缓存、SSL卸载、安全性提升典型应用场景绕过防火墙，访问受限资源，隐藏客户端IP负载均衡、隐藏服务器、SSL卸载、缓存静态资源

Hexo博客集成Artalk评论系统指北
type: item
date: 2024-09-17T12:15:00+08:00
description: 写这篇文章之时恰逢中秋佳节之际，祝各位朋友中秋快乐！我的博客自从2022年就已经建好，但是基本没有写很多东西在上面，搭建之初只是为了方便而使用了gitalk来作为评论系统。但这个开源项目的评论是基于github的issue来实现，虽然数据也是存储在自己的仓库并且免费。但是由于github在国内的网络环境下时好时坏，大部分情况下无法正常加载。而从个人博客评论功能的需求出发我主要归结为以下两点：加载迅速，不因为没有科学上网工具而无法使用数据安全，也即数据自己可以操控在自己的存储系统里面最好支持匿名评论，因为我不想让别人看个blog还要进行繁琐的登录这个时候刚好看到了一个叫做Artalk的开源项目，使用go语言编写号称轻量便捷并且它还在正常更新，拓展性高，可以本地化部署，正好满足我的需求。部署环境:Ubuntu 22.04正确部署姿势artalk/artalk-go#### **域名解析** 到你域名解析供应商处添加Artalk的域名解析记录如 ```comment.example.cn```指向你的服务器地址 #### **nginx配置和安装ssl证书** 在nginx.conf里面添加如下server块:server { listen 443 ssl; server_name comment.nighterdream.cn; ssl_certificate /etc/letsencrypt/live/comment.nighterdream.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/comment.nighterdream.cn/privkey.pem; # managed by Certbot ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'HIGH:!aNULL:!MD5'; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8081; # Artalk 运行的地址和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }其中证书由Cerbot生成， 至于为什么要反向代理请看下面[曲折经历](#曲折经历) 1. 安装 Certbot 和 Nginx 插件 首先，需要安装 Certbot 和它的 Nginx 插件。如果你使用的是 Ubuntu 或其他基于 Debian 的系统，使用以下命令： sudo apt updatesudo apt install certbot python3-certbot-nginx2. 运行 Certbot 自动化命令 运行以下命令，Certbot 将自动为你的域名生成证书，并更新 Nginx 配置以启用 SSL： sudo certbot --nginx根据提示进行输入信息 3. 测试 Nginx 配置 证书生成并配置完成后，重新加载 Nginx 以应用更改：sudo nginx -tsudo systemctl reload nginx #### **Hexo配置** 以butterfly主题配置为例，打来主题配置文件_config.butterfly.yml找到评论配置部分修改以下内容artalk: server: https://comment.example.cn # 你设置的Artalk服务端域名 site: example # 在Artalk配置中设置 visitor: false option:记得把评论功能打开，并且切换成Artalk Comments System--------------------------------------comments: # Up to two comments system, the first will be shown as default # Choose: Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo/Giscus/Remark42/Artalk use: # Valine,Disqus- Artalktext: true # Display the comment n…

使用 CDN 提升网站速度与安全性：我的博客加速之路
type: item
date: 2024-09-14T20:47:00+08:00
description: 随着网站的访问量增加，页面加载速度和服务器安全成为了我的首要关注点。为了确保用户有更好的访问体验，同时提升网站的安全性，我决定为我的博客搭建 CDN（内容分发网络）。在这篇推文中，我将分享 CDN 建设的基本步骤以及它带来的显著效果。什么是 CDN？CDN，全称为内容分发网络（Content Delivery Network），它的主要目的是通过分布在全球各地的服务器节点来缓存和分发内容，提升网站访问速度，并降低源服务器的负载。当用户访问网站时，CDN 会将用户的请求转发到离用户最近的 CDN 服务器节点。若 CDN 节点上已有缓存的内容，则会直接将内容返回给用户。如果没有缓存，CDN 会将请求转发给源服务器获取内容，并将其缓存以供下次使用。CDN 的引入流程引入 CDN 的过程涉及以下几个步骤：1. 域名解析和 DNS 配置首先，确保域名通过 DNS 正确解析到 CDN 的加速域名。在我的案例中，我的博客域名 www.exampleblog.com 被解析到了 CDN 提供的加速域名 exampleblog.cdnprovider.com。配置步骤：将 www.exampleblog.com 的 CNAME 记录指向 CDN 提供的加速域名 exampleblog.cdnprovider.com。确保所有访问 www.exampleblog.com 的请求都通过 CDN，而不是直接到达源服务器。2. Nginx 服务器配置CDN 会向源服务器请求内容，因此源服务器的配置也非常重要。我使用了 Nginx 作为我的服务器，并确保 Nginx 能够根据 CDN 的请求正确返回内容。Nginx 的配置中只需要处理来自 CDN 的请求，无需特别为 CDN 配置额外的域名。配置时，确保正确处理主域名和子域名，并为 HTTPS 提供支持。以下为我的配置文件user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { server { server_name www.exampledomin.cn exampledomin.cn www.exampledomin.org; location / { root /home/www/hexo; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/exampledomin.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/exampledomin.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } ## # Basic Settings ## sendfile on; tcp_nopush on; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_ht…

关于知识图谱的复习
type: item
date: 2024-04-26T19:34:00+08:00
description: 关于知识图谱的复习简单了解基于关键词匹配的传统搜索引擎，是将匹配到关键词后再把信息展现出来。如果把信息的形式进行转换，例如将里面的人物、地点、时间等信息抽取出来，构建一个知识图谱的结构，就可以将“詹姆斯瓦特的校友是谁？”等问题的答案推理出来。知识图谱实现了从原来的关键字匹配、内容匹配的方式，转变为对信息的推理、对信息的追溯这种方式。知识图谱本质上是基于图的语义网络，表示实体与实体之间的关系。与传统数据库相比，Neo4j的数据结构更加自由Node(结点)：含有：Perpority Label用于通过属性存储数据，就比如简单的社交图name:Emil这个键值对就存储了这个人的名字，from: Sweden存储了来自那里Lable: Person表明了这个节点的实体是一个人可以通过Label表明属于同一个群体每一个实体可以包含相同的属性，也可以光有单独的属性Relations(关系):Emil knows Johan and Ian.Johan knows Ian and Rik.Rik and Ian know Allison.关系必有方向也可以有值Emil has known Johan since 2001.Emil rates Ian 5 (out of 5).Everyone else can have similar relationship properties.Cypher(Neo4j使用的类SQL语言)创建结点CREATE (ee:Person {name: 'Emil', from: 'Sweden', kloutScore: 99})返回结点MATCH (ee:Person) WHERE ee.name = 'Emil' RETURN ee;创建图谱MATCH (ee:Person) WHERE ee.name = 'Emil' CREATE (js:Person { name: 'Johan', from: 'Sweden', learn: 'surfing' }), (ir:Person { name: 'Ian', from: 'England', title: 'author' }), (rvb:Person { name: 'Rik', from: 'Belgium', pet: 'Orval' }), (ally:Person { name: 'Allison', from: 'California', hobby: 'surfing' }), (ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir), (js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb), (ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally), (rvb)-[:KNOWS]->(ally) 创建约束使得电影标签的所有节点的title保证唯一CREATE CONSTRAINT FOR (n:Movie) REQUIRE (n.title) IS UNIQUE CREATE CONSTRAINT FOR (d:Department) REQUIRE (d.title) IS UNIQUE表示为具有标签为"Movie"的所有节点的"released"属性创建索引。这意味着要为所有电影节点的发布日期属性创建一个索引，以提高对这个属性的查询性能。CREATE INDEX FOR (m:Movie) ON (m.released)

老司机带你玩转windows
type: item
date: 2022-10-15T17:44:00+08:00
description: 一些常用的windows操作小技巧一些题外话：（是否选择升级windows11）关于这个问题我觉得是因人而异，因为现在不也照样有人在使用win7.可能很多人觉得windows11有很多bug，所以继续选择win10.但这可能是一个伪命题，因为也许你可能根本遇不到这个问题比如你是学土木，而他是学计算机学计算机的可能在配置一些vscode等编译器时会遇到中文乱码问题，但这并不影响学土木的同学。作为一个快使用了一年半win11的人来说基本没有遇到什么问题，即使是像编译器乱码比如vscode其实也是可以通过配置setting.json文件来解决问题，至于使用idea这类IDE工具则完全无需担心这个问题，侧面也回答了win11能否作为生产力这个问题无论是剪辑视频用的达芬奇，pr,ae还是编程都不会遇到问题，对于开发者来说win11自带的wsl（windows下的linux子系统）也是学习linux的不二之选（较高版本的win10也有这个功能，使用前记得去控制面板中启用该功能），即使有也不会有网上视频说的那么不可接受，反正我用了win11以后是再也回不去了，过了一年win11的正式版不仅效率高，而且相较于win10颜值也高了不少，窗口过渡动画也变得更加丝滑.我最中意的功能------多窗口布局所以人生苦短，还有什么理由不升级win11呢？ps:当然对于一些早期的电脑性能有限的情况下，还是win10较为稳定快捷键篇我自己的键盘是将常用到控制按键键帽换成了蓝色一、win + shift + s相较于使用第三方截屏工具，windows自带的不仅功能强大而且自带，使用迅速二、shif + delete + enter快速删除文件，免去回收站再次删除，多文件删除时搭配ctrl + A就体现出了其优势，但是缺点就是无法撤回，所以使用之前还请慎重考虑三、win + D 搭配 ctrl + wwin + d可以让你快速返回上一个应用，也可以快速返回桌面，ctrl + w可以快速关闭当前窗口，这两个一搭配可以实现高效率摸鱼四、win11专属加减音量新姿势只需将鼠标移动至桌面右下角放在音量图标上，滚动滚轮即可实现音量加减（还不快去升级win11）五、程序员撸代码或文字处理小tips能量巨大但往往被忽视的控制区对于大多数编辑器文字的或代码的比如vscode, word, idea都支持home,end,ctrl按键的组合（啊，你说你用vim（全球最受程序员欢迎的编辑器）。哦那没事了确实熟练运用的话可以做到手不离键盘）比如Home/End跳转至该行代码的首或尾（对于word等非编程工具也同样适用）既然聪明如你那么应该清楚下面的快捷键进行的操作了ctrl + Home/ ctrl + End跳转到该文本的首或尾当然对于vscode来说你也可以通过ctrl + 鼠标点击代码块来进行跳转，而且对于vscode来说根本没必要记住快捷键因为你可以根据自己的习惯来进行任意修改软件推荐篇一、vscode----全球除了vim外最受程序员欢迎的编辑器对于开发人员来说，一款好的编辑器就是一件称手的兵器。传统的集成环境式编辑器不仅臃肿，而且占用大量资源，那么有没有一款编辑器既轻量，又功能强大呢？那么vscode将是你的不二之选，支持众多编程语言，可根据自己需求来添加扩展或功能，在进行一些轻量级开发时vscode将会是非常地nice.当然即使你完全不懂的编程也完全没有关系，你完全可以将vscode当成一个万能阅读器来处理文本信息（比如本篇文章就是用markdown + all in one插件来书写），vscode本质是一个编辑器所以不能直接上手写代码而需要手动配置文档，微软官方的doc文档写的非常详细，本人非常不建议阅读csdn或百度上什么博客上的教程配置，直接看官方不香吗？而且配置比如java或c/c++等语言环境也能让你学到不少东西二、powertoys----一款功能强大的小工具正所谓微软出品必属精品，既然是自家的操作系统那必然是如虎添翼，它含有窗口始终置顶功能这样你就不用担心点了一下另一个窗口而你当前的窗口被覆盖掉，它还有拾色器，和窗口布局等工具而其中我最喜爱的功能还得是鼠标实用工具当你因为思绪混乱而一时找不到鼠标时（双显示器应该会有这个烦恼），按两下ctrl键它就能让你礼貌而不失优雅地快速找到你的鼠标三、keyviz ---- 按键显示软件细心的小伙伴应该发现了在以上的gif中我输入的按键都会在屏幕的右下角显示，这款软件就是keyviz，在给他人分享屏幕或者录制教学视频时应该挺有帮助的他的动画和按键类型颜色大小出现时间，以及动画持续时间都可以自定义，而且非常地轻量仅有8m的大小还有免安装版本四、其他对于其他的我常用的软件就不单独分专栏来讲述了，而是笼统的在这里介绍band…

我的第一篇博客文章
type: item
date: 2022-09-16T20:34:00+08:00
description: 我的第一篇博客 “就同活着一样。并非因为有了结果，过程才具有意义。而是为了为了便宜地凸显过程这玩意的意义，抑或是拐弯抹角地比喻其局限性，才在某一个地点姑且设置一个结束。 ---《当我谈跑步时，我谈些什么》” [...]