惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
Project Zero
Project Zero
Google Online Security Blog
Google Online Security Blog
The Cloudflare Blog
L
LangChain Blog
T
Tenable Blog
GbyAI
GbyAI
C
Cybersecurity and Infrastructure Security Agency CISA
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
量子位
Cloudbric
Cloudbric
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
S
Securelist
S
Schneier on Security
F
Full Disclosure
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy International News Feed
宝玉的分享
宝玉的分享
A
About on SuperTechFans
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
H
Heimdal Security Blog
Y
Y Combinator Blog
月光博客
月光博客
H
Hacker News: Front Page
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog
TaoSecurity Blog
TaoSecurity Blog
腾讯CDC
N
Netflix TechBlog - Medium

元视角

.NET 生态下的 Agent 框架选型:从 ReAct 到原生推理 - 元视角 从「能用」到「好用」:LLM 流式响应实现方式的探索之路 - 元视角 当我用 2000 条聊天记录,让 AI 为我画一幅自画像 - 元视角 基于 Supabase 的 AI 应用开发探索 - 元视角 微博 × MCP:社交媒体新玩法解锁 - 元视角 四点钟海棠花未眠 - 元视角 Semantic Kernel × MCP:智能体的上下文增强探索 - 元视角 基于 K-Means 聚类分析实现人脸照片的快速分类 - 元视角 容器技术驱动下的代码沙箱实践与思考 - 元视角 温故而知新:后端通用查询方案的再思考 - 元视角 浅议 CancellationToken 在前后端协同取消场景中的应用 - 元视角 Semantic Kernel 视角下的 Text2SQL 实践与思考 - 元视角 关于 ChatGPT 的流式传输,你需要知道的一切 - 元视角 RAG 的是与非、Rewrite 和 Rerank - 元视角 使用 EFCore 和 PostgreSQL 实现向量存储及检索 - 元视角 基于 LLaMA 和 LangChain 实践本地 AI 知识库 - 元视角 使用 llama.cpp 在本地部署 AI 大模型的一次尝试 - 元视角 如何为 Git 配置多个 SSH Key - 元视角 C# 使用 LibUsbDotNet 实现 USB 设备检测 - 元视角 基于 C# 实现样式与数据分离的打印方案 - 元视角 基于 SVG 的图形交互方案实践 - 元视角 前端视频播放技术概览 - 元视角 温故而知新,再话 Python 动态导入 - 元视角 后 GPT 时代,NLP 不存在了? - 元视角 视频是不能 P 的系列:使用 Milvus 实现海量人脸快速检索 - 元视角 GDI+下字体大小自适应方案初探 - 元视角 小爱音箱集成 ChatGPT 的不完全教程 - 元视角 程序员视角下的三体世界随想 - 元视角 关于 Docker 容器配置信息的渐进式思考 - 元视角 在 Docker 容器内集成 Crontab 定时任务 - 元视角 为你的服务器集成 LDAP 认证 - 元视角 似花还似非花 - 元视角 视频是不能 P 的系列:使用 Dlib 实现人脸识别 - 元视角 浅议分布式链路追踪与日志的整合 - 元视角 关于 Git 大文件上传这件小事 - 元视角 .NET 进程内队列 Channel 的入门与应用 - 元视角 使用 Fody 实现 .NET 的静态编织 - 元视角 .NET Core + ELK 搭建可视化日志分析平台(下) - 元视角 聊一聊前端图片懒加载背后的故事 - 元视角 支持外部链接跳转的 Vue Router 扩展实现 - 元视角 视频是不能 P 的系列:OpenCV 和 Dlib 实现表情包 - 元视角 不得不说的 ASP.NET Core 集成测试 - 元视角 再议 DDD 视角下的 EFCore 与 领域事件 - 元视角 Vue.js 前端项目容器化部署实践极简教程 - 元视角 再见,人间四月天 - 元视角 Python 图像风格化迁移助力画家梦想 - 元视角 利用 ASP.NET Core 中的标头传播实现分布式链路追踪 - 元视角 利用 gRPC 实现文件的上传与下载 - 元视角 七种武器:延迟队列的原理和实现总结 - 元视角 gRPC 流式传输极简入门指南 - 元视角 Envoy 集成 Jaeger 实现分布式链路追踪 - 元视角 浅议非典型 Web 应用场景下的身份认证 - 元视角 gRPC 借助 Any 类型实现接口的泛化调用 - 元视角 分布式丛林探险系列之 Redis 集群模式 - 元视角 分布式丛林探险系列之 Redis 主从复制模式 - 元视角 通过 Python 预测 2021 年双十一交易额 - 元视角 gRPC 搭配 Swagger 实现微服务文档化 - 元视角 SSL/TLS 加密传输与数字证书的前世今生 - 元视角 使用 Python 自动识别防疫健康码 - 元视角 你不可不知的容器编排进阶技巧 - 元视角 ASP.NET Core 搭载 Envoy 实现 gRPC 服务代理 - 元视角 再话 AOP,从简化缓存操作说起 - 元视角 ASP.NET Core 搭载 Envoy 实现微服务身份认证(JWT) - 元视角 ASP.NET Core 搭载 Envoy 实现微服务的监控预警 - 元视角 ASP.NET Core 搭载 Envoy 实现微服务的反向代理 - 元视角 ASP.NET Core gRPC 打通前端世界的尝试 - 元视角 EFCore 实体命名约定库:EFCore.NamingConventions - 元视角 ASP.NET Core gRPC 集成 Polly 实现优雅重试 - 元视角 ASP.NET Core gRPC 健康检查的探索与实现 - 元视角 ASP.NET Core gRPC 拦截器的使用技巧分享 - 元视角 SnowNLP 使用自定义语料进行模型训练 - 元视角 使用 HttpMessageHandler 实现 HttpClient 请求管道自定义 - 元视角 ABP vNext 的实体与服务扩展技巧分享 - 元视角 ABP vNext 对接 Ant Design Vue 实现分页查询 - 元视角 源代码探案系列之 .NET Core 跨域中间件 CORS - 元视角 源代码探案系列之 .NET Core 限流中间件 AspNetCoreRateLimit - 元视角 源代码探案系列之 .NET Core 并发限制中间件 ConcurrencyLimiter - 元视角 通过 EmbededFileProvider 实现 Blazor 的静态文件访问 - 元视角 低代码,想说爱你不容易 - 元视角 记一次失败的 ThoughtWorks 面试经历 - 元视角 从 C# 1.0 到 C# 9.0,历代 C# 语言特性一览 - 元视角 通过 Python 分析 2020 年全年微博热搜数据 - 元视角 基于 Python 和 Selenium 实现 CSDN 一键三连自动化 - 元视角 使用多线程为你的 Python 爬虫提速的 N 种姿势,你会几种? - 元视角 实现网页长截图的常见思路总结 - 元视角 温故而知新,由 ADO.NET 与 Dapper 所联想到的 - 元视角 视频是不能 P 的系列:OpenCV 人脸检测 - 元视角 作为技术宅的我,是这样追鬼滅の刃的 - 元视角 使用 Python 抽取《半泽直树》原著小说人物关系 - 元视角 厉害了!打工人用 Python 分析西安市职位信息 - 元视角 使用 dotTrace 对 .NET 应用进行性能分析与优化 - 元视角 一道 HashSet 面试题引发的蝴蝶效应 - 元视角 基于选项模式实现.NET Core 的配置热更新 - 元视角 Dapper.Contrib 在 Oracle 环境下引发 ORA-00928 异常问题的解决 - 元视角 .NET Core 中对象池(Object Pool)的使用 - 元视角 利用 MySQL 的 Binlog 实现数据同步与订阅(下):EventBus 篇 - 元视角 利用 MySQL 的 Binlog 实现数据同步与订阅(中):RabbitMQ 篇 - 元视角 利用 MySQL 的 Binlog 实现数据同步与订阅(上):基础篇 - 元视角 记一次从已损坏的 Git 仓库中找回代码的经历 - 元视角 .NET Core 原生 DI 扩展之属性注入实现 - 元视角
在 Hexo 中为文章自动添加版权信息声明模块 - 元视角
飞鸿踏雪 · 2015-11-15 · via 元视角

各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com。今天想和大家说说博客文章版权这件事情。每当提到版权的时候,我知道大家内心深处都是对此不以为然的,因为国内版权意识薄弱,所以版权在我们的眼中就变成了这样一件可有可无的东西,可是事实真的是这样的吗?首先我们必须承认一件事情,即你从互联网上获得的知识都是有价值的,即使这些知识的创造者并未因此而获得利益。

相对其它的行业,因为程序员这个职业本身需要其通过不断地学习新知识来适应新变化,因此程序员这个群体更喜欢在互联网上分享知识和经验,而这些知识的受众面窄、技术门槛高则决定了程序员们无法像普通的博客作者一样有更多的机会来获得收入。大部分的程序员都是从分享知识、记录学习和技术交流这样的角度来撰写博客的。那么这样就会造成一个问题,在国内版权意识薄弱和技术博客变现困难的双重夹缝中,博客作者该如何寻求新的突破呢?

为什么要说博客文章版权这件事儿

首先,我们为什么要说博客文章版权这件事情呢?因为博客是文字创造的产物,是知识共享的一种形式。当我们无视版权的时候,这意味着知识是没有价值的,创造是无关痛痒的,脑力劳动和创意活动的价值在现实中被无情地扼杀。当你引用一个人的观点却不加以注明的时候,当你盗用一个人的创意却不给予报酬的时候,试问谁还会愿意为这个社会贡献创意和想法呢?引用许锡良的观点,尊重版权更深层次的含义在于对人权的尊重:

从人权的角度看,人与动物的区别在于知识与思想,因此,人类最根本的财富也应该是知识与思想上的财富,一切社会财富都来源于知识与思想,这是从自然界获得生活资料,以及改造社会的根本。没有知识与思想的人类将与动物世界没有什么区别。尊重人权,首先就要学会尊重人的劳动成果,特别是创造性劳动成果,只有人,才能创造出来的知识产权与发明专利。尊重人权,首先就要学会尊重一个人的思想与创意。只有人,才能创造出来的知识产权与发明专利。因为每个人都是一个独立的个体,每个人头脑里的想法都是独一无二的,无人能替代的。在没有说出来,或者写出来之前,也无人能盗取的,这种思想就是个人独有,就是只属于个人的专利。

我常常遇到在博客评论中和我直接要源代码的人,我不明白从什么时候起对知识的分享变成了某些人懒惰的借口。我选择将我知道的某个分享出来,当然我同样有权利可以选择沉默。你不能因为习惯了做伸手党就认为我应该理所当然地把源代码给你,这是对我的不尊重。我写博客的目的在于和别人交流技术、互相学习,如果你根本没有看懂我博客写了什么,只是希望可以找到可以“抄”来就能用的代码。抱歉!这违背了我的初衷我更没有道理要将源代码分享给你,况且如果我的代码都清清楚楚(命名规范、注释清晰)地写在博客里,如果这样的代码你都不能看懂,就算把完整的工程分享给你又有什么用呢?我本来不情愿论坛来转载我的文章,因为论坛盖楼的这种互动模式实在难以产生较为良好的互动效果,可是人家来诚心诚意地询问你的态度,如此拒绝难免有点却之不恭吧!当然最让人讨厌的是网络爬虫和网站编辑,这种让人讨厌是因为它"简单粗暴",完全不考虑博客作者的感受,文章的原始链接被删除、文章的作者署名被删除。或许大家都觉得一个署名、一个原始链接都是无足轻重的东西,可是在我看来这恰恰是体现责任的地方。作者的责任在于对文章的真实性和客观性负责,转发者的责任在于帮助读者找到作者当他们之间需要某种交流的时候,这就是我为什么强调署名和原始链接的理由!

谈谈如何保护博客文章版权

在保护博客文章版权这个问题上,我们可以采取的方式固然很多,但是这件事情的根本原因在于人们普遍不重视知识产权的保护,所以我们这里提到的这些方式都是外家功夫,真正要根除这等沉疴痼疾需要人们不断提升自我、勤修内功。

  • 第一种方式,我们称为通过技术方式提醒,比如通过编写 JavaScript 脚本,实现当对方复制你的博客内容的时候,程序可以自动在这段复制的内容中增加署名和连接。当然我们可以通过修改文章的模板来在文章中加入版权信息,这个我们留到最后会说,因为实际上这个是我们今天要重点研究的内容,博主是个程序员,我们当然要用技术的方式来实现了,前面的这些大家看完心里有个数就是了,哈哈!
  • 第二种方式,我们称为增加文章内链的方式,就是在文章中尽可能地使用指向这个博客的连接,这样可以保证在文章转载后为博客带来一定的反向访客。
  • 第三种方式,在图片上增加水印,这样读者在看到图片的时候就可以很容易地找到原始出处,可是如果你不能保证拥有所引用的图片得版权,建议不要轻易地使用这种方式。
  • 第四种方式,逐渐形成个性化的写作风格,这样当读者读到这些文字的时候,可以通过文章的风格知道文章的作者和出处。
  • 第五种方式,努力提高自己博客的文章质量,让更多的读者从中受益,形成有独立风格的博客品牌。一个博客有了高质量的内容和品牌,那么在搜索引擎中的权重就会很高,网民通过搜索引擎进行查找的时候,博客原文都会排在第一位。

博主之所以要使用 http://qinyuanpei.com 这个独立博客的原因正是基于这个原因。博主目前采用的知识共享许可是署名(BY)-非商业性使用(NC)-相同方式共享(SA),请各位在转载文章的时候注意保留作者署名和文章出处,谢谢!

保护博客文章版权,独立博客在行动

我的博客是采用 Hexo 这个博客系统来搭建的,说到底程序员是天生爱折腾的命吧,都有对掌控事物的欲望,不喜欢受到条件制约。CSDN 的博客虽然还不错,可是“限制因素 + 服务器奔溃”这样的强效组合实在让我很难有继续坚持下去的动力,所以果断就自己搭了博客买了域名,老老实实地开始管理起独立博客。好了,废话少说,放码过来,我们下面来看看怎么在 Hexo 中的文章中增加一个展示版权信息的模块,这里以 Jacman 主题为例,我们首先定位到该主题文件夹下的 \layout_partial\post\article.ejs 文件:

<div id="main" class="<%= item.layout %>" itemscope itemprop="blogPost">
  <% if (page.layout=='photo' && item.photos && item.photos.length){ %>
    <%- partial('gallery') %>
  <% } %>
	<article itemprop="articleBody"> 
		<%- partial('header') %>
	<div class="article-content">
		<% if( table&&(item.toc !== false) && theme.toc.article){ %>
		<div id="toc" class="toc-article">
			<strong class="toc-title"><%= __('contents') %></strong>
		<% if(item.list_number == false) {%>
		<%- toc(item.content,{list_number:false}) %>
		<% }else{ %>
			<%- toc(item.content) %>
		<% } %>
		</div>
		<% } %>
		<%- item.content %> 
	</div>
		<%- partial('footer') %>  	       
	</article>
	<%- partial('pagination') %>
	<%- partial('comment') %>
</div>  

我们可以注意到文章的内容是在 <%- item.content %> 这个标签里,因此我们如果要在文章中增加内容,只需要在 <%- item.content %> 的后面引入一个 ejs 模板文件即可,所以我们接下在 article.ejs 的同级目录下创建一个 declare.ejs 文件:

<pre>
  <code>
    <b>版权声明</b>:本文由
    <b>
      <a href="<%= config.root %>about" target="_blank" title="<%= config.author %>">
        <%=c onfig.author %></a>
    </b>创作和发表,采用
    <b>署名(BY)</b>-
    <b>非商业性使用(NC)</b>-
    <b>相同方式共享(SA)</b>国际许可协议进行许可,转载请注明作者及出处,本文作者为
    <b>
      <a href="<%= config.root %>about" target="_blank" title="<%= config.author %>">
        <%=c onfig.author %></a>
    </b>,本文标题为
    <b>
      <a href="<%- config.root %><%- item.path %>" target="_blank" title="<%= item.title %>">
        <%=i tem.title %></a>
    </b>,本文链接为
    <b>
      <a href="<%- config.root %><%- item.path %>" target="_blank" title="<%= item.title %>">
        <%- config.url %>/
          <%- item.path %></a>
    </b>.</code>
</pre>

大家可以看到这里就是一段 HTML 代码,因为我们要引入的这个模板和 article.ejs 在同一个页面中,所以我们可以直接在这里调用 item 这个变量,而 item 这个变量里是封装了当前文章的标题和链接的,因此我们可以顺利成章的构造这样一段 HTML 代码,因为博主不会写 CSS 样式,所以使用了一个默认的代码样式来完成这个工作,如果大家懂 CSS,请自行发挥你的创意将它做得更好。好了,下面我们要做的工作就是将这个模版引用到 article.ejs 文件中,类似地我们可以使用<%- partial(‘footer’) %>这样的结构来引入这个模板,这里给出完整的 article.ejs 文件内容:

<div id="main" class="<%= item.layout %>" itemscope itemprop="blogPost">
  <% if (page.layout=='photo' && item.photos && item.photos.length){ %>
    <%- partial('gallery') %>
  <% } %>
	<article itemprop="articleBody"> 
		<%- partial('header') %>
	<div class="article-content">

	    <% if(theme.show_declare) { %>
			<%- partial('declare') %>
		<% } %>

		<% if( table&&(item.toc !== false) && theme.toc.article){ %>
		<div id="toc" class="toc-article">
			<strong class="toc-title"><%= __('contents') %></strong>
		<% if(item.list_number == false) {%>
		<%- toc(item.content,{list_number:false}) %>
		<% }else{ %>
			<%- toc(item.content) %>
		<% } %>
		</div>
		<% } %>
		<%- item.content %> 

	    <% if(theme.show_declare) { %>
			<%- partial('declare') %>
		<% } %>
	</div>
		<%- partial('footer') %>  	       
	</article>
	<%- partial('pagination') %>
	<%- partial('comment') %>
</div>  

这里博主在文章的开头和结尾处插入了这个模板,同时在主题文件夹中设置了一个是否显示版权声明的开关变量,这样我们就可以在主题中设置是否开启版权声明模块了。好啦,相信你在看到这边文章的时候你已经看到了它的版权声明了,这就是我们今天的内容啦,谢谢大家!