Template error, template file not found

一个GitHub用户资源排名的项目

项目地址:https://github.com/jaywcjlove/github-rank 基于github v3接口实现了全球用户排名、中国用户排名,前1000最受欢迎资源排名和前1000收藏最多的项目排名。还是很好用的。
继续阅读 »

项目地址:

https://github.com/jaywcjlove/github-rank


基于github v3接口实现了全球用户排名、中国用户排名,前1000最受欢迎资源排名和前1000收藏最多的项目排名。

还是很好用的。

image.png

收起阅读 »

给handsome添加一个评论图片上传按钮

想着评论上传图片麻烦,干脆自己弄了个图床的同时给评论框加了个图片上传按钮,挺简单的代码(大概? 实现方法也挺简单,但是需要修改文件,所以还是不太方便(目前只能做到这样了,有大佬有别的解决方案的话评论区丢我一份,谢谢了 增加按钮首先让我们找到...
继续阅读 »

想着评论上传图片麻烦,干脆自己弄了个图床的同时给评论框加了个图片上传按钮,挺简单的代码(大概? 

实现方法也挺简单,但是需要修改文件,所以还是不太方便(目前只能做到这样了,有大佬有别的解决方案的话评论区丢我一份,谢谢了 

增加按钮

首先让我们找到/usr/themes/handsome/component/comments.php文件的173行左右,就是下面这个样子~

     <div class="OwO padder-v-sm"></div>
小声逼逼,也可以直接搜索:<div class="OwO padder-v-sm"></div>

然后把他替换成下面这个,其中https://img.404888.xyz/你可以替换为自己的图床,这是我自己搭建的(稳定使用

那个啥,写教程幸苦,要你们一个回复不过分吧(别打我 



<!-- <div class="OwO padder-v-sm"></div> -->
<div class="padder-v-sm smallscreen">
<span style="display: inline-block;padding: 0;width: 66px;height: 24px;color: #99a2aa;border-radius: 4px;position: relative;z-index: 101;font-size: 12px;text-align: center;line-height: 23px;margin-top: 3px;background: #fff;">
<a onclick="window.open('https://img.404888.xyz/', 'Image Picker', `width=420,height=680,left=${window.screenLeft},top=${window.screenTop}`);"">
<span class="smile-icons">
<i class="fontello fontello-picture text-muted"></i>
</span>
<span class="OwOlogotext">图片</span>  
</a></span>
<span class="OwO" title="表情"></span>
 </div>

然后保存之后直接找到你的评论区,你就会发现多了个按钮(下面这样的 

效果

效果


ODK,这样就搞定了,完美,最后推荐下我自己的图床(https://img.404888.xyz

再提一嘴,如果其它大佬有别的方法实现该功能,不用新开一个窗口,可以直接用模板自带的模态框实现的话,请务必评论区留下你的代码or博文链接(感激不尽!


文章转自:https://blog.warhut.cn/dmbj/1155.html


收起阅读 »

一个让后台判断浏览器是否支持webp最准确对服务器影响最小的办法

弊端就是第一次打开网页时无法生效,后面的都会生效。具体步骤就是:通过浏览器脚本判断是否支持webp 然后写到cookie里通过cookie来判断。具体代码:判断浏览器是否支持webpfunction supportsWebP(callback)&nb...
继续阅读 »

弊端就是第一次打开网页时无法生效,后面的都会生效。

具体步骤就是:

  1. 通过浏览器脚本判断是否支持webp 然后写到cookie里

  2. 通过cookie来判断。


具体代码:

判断浏览器是否支持webp

function supportsWebP(callback) {
    var webP = new Image();
    webP.onload = webP.onerror = function () {
        callback(webP.height === 2);
    };
    webP.src = 'data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADQAQCdASoCAAIAAUAmJZgCdAEO+KkLAAD+68B/qf+xOVkAB3xblQgBZoZMKH/xaH9vP+DW2k2gAA==';
}

supportsWebP(function (supported) {
    var date = new Date();
    date.setTime(date.getTime() + (365*24*60*60*1000)); // 1 year expiration
    var expires = "; expires=" + date.toUTCString();
    document.cookie = "webpSupport=" + (supported ? "true" : "false") + expires + "; path=/";
    if (!document.cookie.includes('webpSupport')) {
        location.reload();
    }
});


服务端判断方式:

public static function isSupportWebp(){
$webpSupport = false;
if (isset($_COOKIE['webpSupport']) && $_COOKIE['webpSupport'] === 'true') {
    $webpSupport = true;
}
return $webpSupport;
}


这样就可以做到性能最大化。

收起阅读 »

github 的 action的解释用法(通俗易懂不废话)

今天看到一个觉得很6的github,他会及时的将v2ex的热门文章更新到readme.md离。https://github.com/lonnyzhang423/v2ex-hot-hub于是乎,我就发到群里,群里的大佬对我进行了耐的教育。然后就有了我要研究act...
继续阅读 »

image.png

今天看到一个觉得很6的github,他会及时的将v2ex的热门文章更新到readme.md离。

https://github.com/lonnyzhang423/v2ex-hot-hub

于是乎,我就发到群里,群里的大佬对我进行了耐的教育。

image.png

然后就有了我要研究action的想法。 下面就不废话了,直接上正文了。

GitHub Actions 是 GitHub 提供的持续集成和持续部署(CI/CD)服务,能够帮助自动化软件开发流程。它允许你定义一个工作流,在特定的事件发生时自动执行一系列任务。以下是 GitHub Actions 的基本用法:

基本概念

  1. 工作流 (Workflow):自动化流程的核心单元。工作流文件是一个以 .yml.yaml 结尾的 YAML 文件,通常放置在 .github/workflows/ 目录中。

  2. 事件 (Event):触发工作流的特定活动,如代码推送、拉取请求、计划任务等。

  3. 作业 (Job):工作流中的一个步骤集。一个工作流可以包含多个作业,这些作业可以并行或顺序执行。

  4. 步骤 (Step):作业中的一个单元操作,可以是执行命令或运行操作。

  5. 操作 (Action):复用步骤的单元,可以是社区共享的也可以是自己定义的。

使用步骤

1. 创建工作流文件

在你的 GitHub 仓库中创建 .github/workflows 目录,然后在该目录下创建一个 .yml 文件,例如 ci.yml

name: CIon: [push, pull_request]jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Run tests
      run: npm test

2. 定义触发事件

在上面的例子中,on: [push, pull_request] 表示当代码推送或拉取请求时触发工作流。

3. 配置作业和步骤

工作流中定义了一个名为 build 的作业,该作业运行在最新的 Ubuntu 环境 (runs-on: ubuntu-latest) 上。

4. 使用操作

步骤 steps 中,使用了两个现成的操作 (actions/checkout@v2actions/setup-node@v2),以及两个自定义步骤 (npm installnpm test)。

高级功能

1. 并行和依赖关系

你可以定义多个作业并指定它们之间的依赖关系:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: npm install
    - run: npm test

  deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
    - run: echo "Deploying application..."

2. 使用秘密和变量

在 GitHub 仓库的设置中,你可以添加秘密(如 API 密钥),在工作流中可以这样使用:

steps:- name: Deploy
  run: echo "Deploying..."
  env:
    API_KEY: ${{ secrets.API_KEY }}

3. 计划任务

你可以使用 cron 表达式来定期触发工作流:

on:
  schedule:
    - cron: '0 0 * * *'  # 每天午夜触发

总结

GitHub Actions 是一个强大且灵活的工具,能大大简化和自动化软件开发的多个环节。通过定义工作流文件,你可以轻松实现自动化构建、测试和部署等操作,提高开发效率和代码质量。


收起阅读 »

一种特殊玩法,你可以用base64在浏览器里生成网页

有的情况下,你无法在客户访问的时候提供网页服务,但是又需要这样的一个页面调用接口。那就可以这么做了。比如你可以在浏览器的地址栏里输入:data:text/html;base64,PGh0bWwgbGFuZz0iemgtQ04iPjxoZWFkPjxtZXRhI...
继续阅读 »

有的情况下,你无法在客户访问的时候提供网页服务,但是又需要这样的一个页面调用接口。

那就可以这么做了。

比如你可以在浏览器的地址栏里输入:

data:text/html;base64,PGh0bWwgbGFuZz0iemgtQ04iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48L2hlYWQ+PGJvZHk+CiA8aW5wdXQ+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IueCueWHuyI+CjwvYm9keT48L2h0bWw+

点击回车,就会出现一个简单的页面,只有一个按钮一个输入框。

image.png

这段去除前缀

data:text/html;base64,

之后的值就是一段base64编码的后的html,您可以通过:

https://www.devtools.cn/enc/base64/

来编码。

image.png

然后加上前缀:

data:text/html;base64,

就可以发给别人打开你的网页了。

收起阅读 »

properties文件中文转unicode转中文在线工具

    程序做国际化的时候,就会遇到除英语之外都要转成unicode,但是很多工具又不支持直接转换,需要装指定插件。    所以做了一个转换工具。   ...
继续阅读 »

    程序做国际化的时候,就会遇到除英语之外都要转成unicode,但是很多工具又不支持直接转换,需要装指定插件。

    所以做了一个转换工具。

    工具地址:https://www.devtools.cn/convert/propertiesconvert/

image.png

你可以直接中文和unicode互转。

收起阅读 »

一个反常识: 在 Chrome 浏览器里如何拿到用户最真实的 CPU 和其他硬件信息(不走 UA)

前端老鸟都知道一个常识谷歌浏览器里面是拿不到真实 CPU 和硬件信息的(:UA 那个很容易伪造好吧今天再给你一个反常识:其实,Chromium 内置了一个系统级插件。这个插件允许 *.google.com 网站获取宿主机 CPU 信息,不是这个域下是无法执行下...
继续阅读 »

前端老鸟都知道一个常识

谷歌浏览器里面是拿不到真实 CPU 和硬件信息的

(:UA 那个很容易伪造好吧

今天再给你一个反常识:

其实,Chromium 内置了一个系统级插件。

这个插件允许 *.google.com 网站获取宿主机 CPU 信息,不是这个域下是无法执行下面的脚本的。

去 Chromium 源码里找找,发现插件 ID 是:nkeimhogjdpnpccoofpliimaahmaaome 。

而且,这个插件还能对外通信

so ,骚操作来了

我们可以随便打开一个 Google 的网站在 console 里面输入:

chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
{method: 'cpu.getInfo'},
response => console.table(response));

 CPU 、进程还有负载 一五一十的就有了

看源代码,这个内置插件里面还暴露了不少其他方法,可以自己探索玩玩

说人话:

如果你做的是浏览器扩展,完全可以获取到宿主机的 CPU 还有其他硬件信息的

哈哈哈哈哈

文章出自:https://www.v2ex.com/t/1056113

收起阅读 »

【V2EX】利用 b 站二压, 30fps 和 60fps 下显示不同的画面

效果图简单来说,当一个高 FPS 的视频压缩为较低 FPS 的视频时,会选择某些帧作为关键帧插入。B 站提供了 30fps 或 60fps 的视频。因此,我们可以创建一个 120fps 的视频,然后在第1+4n 帧插入你希望在 30fps 下显示的内容,其余帧...
继续阅读 »

效果图

简单来说,当一个高 FPS 的视频压缩为较低 FPS 的视频时,会选择某些帧作为关键帧插入。

B 站提供了 30fps 或 60fps 的视频。

因此,我们可以创建一个 120fps 的视频,然后在第1+4n 帧插入你希望在 30fps 下显示的内容,其余帧则插入你希望在 60fps 下显示的内容。

这样,在阿 b 二压后,30fps 和 60fps 的视频就会显示不同的画面。

至于“1+4n”这个公式的由来。

可以首先制作一个每帧都标有序号的 120fps 视频。然后使用 ffmpeg 将视频转换为 30fps ,观察哪些帧被保留,从而确定关键帧。

proof of concept

懒得传 gist 了

import cv2

class Fps120FrameReader:
    def __init__(self, filename):
        self.src = cv2.VideoCapture(filename)
        self.framerate = int(self.src.get(cv2.CAP_PROP_FPS))
        if self.framerate not in [30,60,120]:
            raise Exception(f"not support frame rate other than 30, 60, 120, framerate {self.framerate}")
        self.current_frame = 0
        self.frame = None

    def read(self):
        if self.current_frame % (120 // self.framerate) == 0:
            ok, self.frame = self.src.read()
            if not ok:
                self.frame = None
        self.current_frame +=1
        return self.frame

    def close(self):
        return self.src.release()

    @property
    def size(self):
        return int(self.src.get(cv2.CAP_PROP_FRAME_WIDTH)),int(self.src.get(cv2.CAP_PROP_FRAME_HEIGHT))



readerA = Fps120FrameReader('igotsmoke.mp4')
readerB = Fps120FrameReader('benkui.mp4')

assert readerA.size == readerB.size

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output_video_C.mp4', fourcc, 120, readerA.size)

frame_count = 0
while True:
    frameA = readerA.read()
    frameB = readerB.read()

    if frameA is None or frameB is None:
        break

    if frame_count % 4 == 1:
        out.write(frameA)
    else:
        out.write(frameB)

    frame_count += 1

readerA.close()
readerB.close()
out.release()

print("ok")


原文出自:https://v2ex.com/t/1054464

收起阅读 »

关闭宝塔面板的https/ssl访问

废话不多说直接干活rm -f /www/server/panel/data/ssl.pl && /etc/init.d/bt restart默认安装的宝塔面板的话 直接无脑执行即可。否则自己确认...
继续阅读 »

废话不多说直接干活

rm -f /www/server/panel/data/ssl.pl && /etc/init.d/bt restart

默认安装的宝塔面板的话 直接无脑执行即可。否则自己确认下路径哈。

收起阅读 »

一本 GPT4 生成的单词书?,超过 8000 个单词分析,涵盖了词义、例句、词根词缀、变形、文化背景、记忆技巧和小故事

开源地址https://github.com/Ceelog/DictionaryByGPT4前言以 ChatGPT 为代表的大语言模型在文本生成领域展示出来的强大能力让人们惊呼通用人工智能( AGI )即将降临,AI 将吞噬整个世界。今天我们来看看 ChatG...
继续阅读 »

开源地址

前言

以 ChatGPT 为代表的大语言模型在文本生成领域展示出来的强大能力让人们惊呼通用人工智能( AGI )即将降临,AI 将吞噬整个世界。

今天我们来看看 ChatGPT 在英语单词学习这个垂直领域带来的变化。

面临的问题

从小学开始念 ABC ,到大学毕业考完 CET-4/6 级,我们学习英语的周期不可谓不长。但是由于缺乏文化背景和沉浸式的语言环境,大部分人学完考完就抛,最终只记得一些简单的词汇,说两句生硬的句子。白白浪费了大量的时间和精力,让人惋惜。

语言本质上是文化的载体和表达交流的工具。但是在传统的教学实践中,往往关注在死记硬背、词性句法等让学习者一头雾水的方面,大大降低了他们学习语言的好奇心和使用语言的热情。

举个文化背景重要性的例子:

March 是三月的意思,同时 march 的含义有:

v. 行军;  前进;  行走;  迫使…同行

n. 行进;  进步;  进行曲

不知道为什么三月份用 March ,也不知道和行军前进有啥关系。但是如果你了解西方历史文化,那么一切都变得清晰起来:

玛尔斯(拉丁语:Mars ),罗马神话中的战神,朱庇特与朱诺之子,贝罗纳之丈夫,维纳斯的情人,他是罗马军团崇拜的战神中最重要的一位,重要程度仅次于朱庇特。

"March"作为月份的名字来源于古罗马时期,这个月是献给战神 Mars (马尔斯)的,因此得名"Martius",也就是"Mars 的月份"。

在罗马历法中,March 是年中的第一个月份。这在后来被现代格里历法规定为一年里的第三个月。

用战争之神命名月份,并衍生到行军前进也很符合语言演化的逻辑,所以这个单词理解记忆起来也就简单多了。

AI 新变量

大语言模型的出现将彻底解决当前语言学习的问题。

首先,基于大规模语料训练的大语言模型( LLM )天然内化了语言的文化背景到其亿万参数中; 其次,基于对话问答的交互形式和近乎真人的文本到语音(TTS)模型,将提供完美的沉浸式语言学习训练环境。

看看这个单词解析的示例:

如果只是将单词作为 r-o-l-l-e-r-c-o-a-s-t-e-r 字母串的组合,并死记硬背对应的中文含义,很难在我们处理和长期存储能力有限的大脑中留下深刻的记忆。结果事倍功半,出力不讨好,更糟糕的是会将我们的好奇心和热情耗尽,将本是一件有趣的事情变成厌恶。

我们也没有足够的资源,让一对一的专业老师在身边随时随地指导学习并纠正问题。

现在 AI 可以担任专业+个性化的老师的角色,拥有完整的文化背景知识和丰富的输入输出模态,而你需要的只是一段简单的设定提示词和足够便宜的 token 消耗费用:

# 角色

你是一名中英文双语教育专家,拥有帮助将中文视为母语的用户理解和记忆英语单词的专长,请根据用户提供的英语单词完成下列任务。

## 任务

### 分析词义

- 系统地分析用户提供的英文单词,并以简单易懂的方式解答;

### 列举例句

- 根据所需,为该单词提供至少 3 个不同场景下的使用方法和例句。并且附上中文翻译,以帮助用户更深入地理解单词意义。

### 词根分析

- 分析并展示单词的词根;
- 列出由词根衍生出来的其他单词;

### 词缀分析

- 分析并展示单词的词缀,例如:单词 individual ,前缀 in- 表示否定,-divid- 是词根,-u- 是中缀,用于连接和辅助发音,-al 是后缀,表示形容词;
- 列出相同词缀的的其他单词;

### 发展历史和文化背景

- 详细介绍单词的造词来源和发展历史,以及在欧美文化中的内涵

### 单词变形

- 列出单词对应的名词、单复数、动词、不同时态、形容词、副词等的变形以及对应的中文翻译。
- 列出单词对应的固定搭配、组词以及对应的中文翻译。

### 记忆辅助

- 提供一些高效的记忆技巧和窍门,以更好地记住英文单词。

### 小故事

- 用英文撰写一个有画面感的场景故事,包含用户提供的单词。
- 要求使用简单的词汇,100 个单词以内。
- 英文故事后面附带对应的中文翻译。

GPT 单词本

基于这套提示词,通过 GPT-4 接口,将涵盖中考、高考、大学四六级的超过 8000 个单词全部分析一遍,最终产出了 GPT 单词本:

image.png

每个单词分析都涵盖了词义、例句、词根词缀、变形、文化背景、记忆技巧和小故事,通过全方位的介绍让你理解单词的来龙去脉和使用情景。

结语

语言本质上是文化载体和表达交流的工具。所以学习语言最好的方式就是在熟悉其文化背景的基础上自由沉浸地沟通表达(包括口头和书面形式)。

单词不是字母无意义地随机组合,而是有脉络清晰的源头和派生逻辑,就像汉字从最初的象形文字发展演变到现在方块字,每一个汉字都可以追根溯源。

希望这份 GPT 单词本可以帮你快速提高词汇量,将英语能力提升到更高水平。

附录

     


收起阅读 »
1234>>>