后来觉得使用Element-Plus组件和网页端过于相似,所以最近在转TailwindCss+Ant Design的方案,不得不说TailwindCss确实香,之前一大坨的Scss方案使用TailwindCss之后简洁不少。
1 | <template> |
1 | <template> |
在tailwind.config.js
中自定义颜色
1 | traffic_close: '#ff5f57', |
最近在整活一个Electron+Vue3+Vite2+TypeScript的个人项目,其中需要使用Tinymce这款富文本编辑器。
Tintmce前几天推送了6.0.0版本,但是更新后一直报错:
GET http://127.0.0.1:3344//models/dom/model.js net::ERR_ABORTED 404 (Not Found)
但是删除node_modules
文件夹后,回滚到5.10.3版本后又正常,推测是6.0.0增加了新的特性。
但是在Tinymce Docs中又完全没有提及model
这个文件的问题。
所以就对比查看了一下6.0.0
和5.10.3
的tinymce.js
文件。
1 | const loadTheme = (editor, suffix) => { |
发现loadModel
是新增的,而且404的地址也是指向node_modules/tinymce/models
文件夹。
所以就很好办了。
仅需在Tinymce的vue文件中原来引入Theme
的下方引入model
即可。
1 | import "tinymce/models/dom"; |
贴一下机翻更新日志
editor.options
API 来代替旧的 editor.settings
和 editor.getParam
API #TINY-8206editor.annotator.removeAll
API,用于按名称删除所有注释 #TINY-8195Resource.unload
API,使之可以卸载资源 #TINY-8431tinymce
全局中新增 FakeClipboard
API #TINY-8353dispatch()
函数,以取代各种API中现已废弃的fire()
函数 #TINY-8102AutocompleterStart
,AutocompleterUpdate
和AutocompleterEnd
事件#TINY-8279mceAutompleterClose',
mceAutompleterReload’命令 #TINY-8279mceInsertTableDialog
命令,打开插入表的对话框 #TINY-8273slider
对话框组件 #TINY-8304imagepreview
对话框组件,允许预览和缩放任何图像URL #TINY-8333buttonType
属性,除了primary
和secondary
之外,还支持toolbar
风格 #TINY-8304tabindex
属性现在可以从目标元素复制到iframe中 #TINY-8315tinymce-5
和tinymce-5-dark
使用 #TINY-8373200px
增加到400px
以提高编辑器的可用性 #TINY-6860editor.uploadImages()
API返回的上传结果现在包括一个removed
标志,反映出图片在上传失败后是否被删除 #TINY-7735ScriptLoader
、StyleSheetLoader
、AddOnManager
、PluginManager
和ThemeManager
APIs现在在加载资源时将返回一个Promise
,而不是使用回调 #TINY-8325ThemeLoadError
事件 #TINY-8325editor.setContent
API传递 AstNode
时,BeforeSetContent
事件现在将包括实际的序列化内容 #TINY-7996editor.selection.setRng
的调用现在可以更新焦点返回到编辑器时使用的光标位置书签 #TINY-8450Emojis
术语 #TINY-7631redial
API现在只重新渲染改变的组件,而不是整个对话框#TINY-8334setData
方法现在使用深度合并算法以支持部分嵌套对象 #TINY-8333initialData
类型现在是Partial<T>
,以匹配底层实现细节 #TINY-8334paste
插件的功能移到了TinyMCE核心中 #TINY-8310paste_data_images
选项现在默认为true
#TINY-8310noneditable
插件移至TinyMCE核心 #TINY-8311noneditable_noneditable_class
选项重命名为noneditable_class
#TINY-8311noneditable_editable_class
选项重命名为editable_class
#TINY-8311textpattern
插件移至TinyMCE核心 #TINY-8312textpattern_patterns
选项更名为text_patterns
#TINY-8312hr
插件的功能移至TinyMCE核心 #TINY-8313print
插件的功能移至TinyMCE核心 #TINY-8314DomParser
API不再在内部使用自定义解析器,而是使用本地DOMParser
API #TINY-4627editor.getContent()
API可以通过防止和覆盖BeforeGetContent
事件中的content
来提供自定义内容。这使得它与editor.selection.getContent()
API一致#TINY-8018editor.setContent()
API现在可以使用BeforeSetContent
事件来阻止。这使得它与editor.selection.setContent()
API一致 #TINY-8018new
操作符构建 #TINY-8256new
操作符构建 #TINY-8322false
或空字符串#TINY-7829mceAddEditor
和mceToggleEditor
命令现在使用一个对象作为其值来指定id和编辑器选项 #TINY-8138mceInsertTable
命令不能再打开插入表的对话框。使用mceInsertTableDialog
命令代替 #TINY-8273plugins
选项现在返回一个string
数组,而不是一个空格分隔的字符串 #TINY-8455media
插件不再将iframe
、video
、audio
或object
元素视为 “special”,并将根据模式验证其内容 #TINY-8382images_upload_handler
选项不再传递success
或failure
回调,而是要求随上传结果返回Promise
#TINY-8325tinymce.settings
全局属性不再在初始化时被设置#TINY-7359change
事件 #TINY-6920GetContent
事件将总是为content
属性传递一个string
#TINY-7996s
标签 #TINY-8262strike
标签会自动转换为s
标签 #TINY-8262valid_elements
和 extended_valid_elements
选项中,:
控制字符已改为~
#TINY-6726primary
属性已被废弃。使用新的buttonType
属性代替 #TINY-8304"
改为'
#TINY-8372Powered by Tiny
品牌文字替换为Tiny标识 #TINY-8371isDisabled()
函数,改为isEnabled()
函数 #TINY-8101setEnabled(state)
函数替换了enable()
和disable()
函数 #TINY-8101enabled
属性取代了 disabled
属性 #TINY-8101setEnabled(name, state)
函数取代了 disable(name)
和 enable(name)
函数 #TINY-8101tinymce.Env.os.isOSX
API重命名为tinymce.Env.os.isMacOS
#TINY-8175tinymce.Env.browser.isChrome
API重命名为tinymce.Env.browser.isChromium
以更好地反映其功能#TINY-8300getShortEndedElements
模式API重命名为getVoidElements
#TINY-8344font_formats
选项重命名为font_family_formats
#TINY-8328fontselect
工具栏按钮和 fontformats
菜单项更名为 fontfamily
#TINY-8328fontsize_formats
选项更名为font_size_formats
#TINY-8328fontsizeselect
工具栏按钮和fontsizes
菜单项更名为fontsize
#TINY-8328formatselect
工具栏按钮和blockformats
菜单项为blocks
#TINY-8328styleselect
工具栏按钮和formats
菜单项为styles
#TINY-8328lineheight_formats
选项重命名为line_height_formats
#TINY-8328Schema
API中的getWhiteSpaceElements()
函数更名为getWhitespaceElements()
#TINY-8102mceInsertClipboardContent
命令的content
属性重命名为html
,以更好地反映传递的数据#TINY-8310default_link_target
选项更名为link_default_target
,用于link
和autolink
插件 #TINY-4603link
插件重新命名rel_list
选项为link_rel_list
#TINY-4603link
插件的target_list
选项重命名为link_target_list
#TINY-4603link_default_protocol
选项的默认值改为https
而不是http
#TINY-7824element_format
选项的默认值已改为html
#TINY-8263schema
选项的默认值已改为html5
#TINY-8261table_style_by_css
选项的默认值已改为true
#TINY-8259table_use_colgroups
选项的默认值已改为true
#TINY-8259editor.fire()
API返回的对象是不正确的 #TINY-8018editor.selection.getContent()
API未获取no_events
参数 #TINY-8018editor.annotator.remove
API在删除注释时没有保留选择#TINY-8195editor.selection.getContent()
API获得tree
或text
格式时,GetContent
事件没有被触发 #TINY-8018beforeinput
和 input
事件有时不能按预期触发 #TINY-8168 #TINY-8329table
插件有时不能正确处理tfoot
部分的标题 #TINY-8104silver
主题的用户界面会被错误地呈现#TINY-8288allow_html_in_named_anchor
选项时,锚点元素的渲染不正确 #TINY-3799AstNode
HTML序列化器包含换行时,不能正确序列化 pre
或 textarea
元素 #TINY-8446onAction
函数导致菜单关闭,点击菜单项可能会导致一个意外的控制台警告 #TINY-8513plugins
选项的支持,该选项允许混合使用字符串阵列和空格分隔的字符串 #TINY-8399forced_root_block
选项中已废弃的 false
值的支持 #TINY-8260imagetools
插件,该插件现在被列为高级插件 #TINY-8209imagetools
对话框组件 #TINY-8333toc
插件,该插件已被列为高级插件 #TINY-8250tabfocus
插件 #TINY-8315textpattern
插件的API,作为将其转移到核心的一部分 #TINY-8312table
插件的API #TINY-8273EditorUpload
API的回调 #TINY-8325Env
API中删除了传统的浏览器检测属性 #TINY-8162DomParser
API中删除了filterNode
方法 #TINY-8249SaxParser
API #TINY-8218tinymce.utils.Promise
API #TINY-8241DOMUtils
和Styles
API的toHex
函数 #TINY-8163execCommand
处理函数 #TINY-7829editor.settings
属性,因为它已被新的Options API取代 #TINY-8236tinymce.html.Node
类中的shortEnded
和fixed
属性 #TINY-8205mceInsertRawHTML
命令#TINY-8214image
插件对话框高级标签中的样式字段 #TINY-3422paste_filter_drop
选项,因为不再支持本地拖放处理 #TINY-8511mobile
主题 #TINY-7832$
、Class
、DomQuery
和 Sizzle
API #TINY-4520 #TINY-8326颜色
、JSON
、JSONP
和JSONRequest
#TINY-8162XHR
API #TINY-8164setIconStroke
拆分工具条按钮API #TINY-8162EditorManager
中删除了过时的editors
属性 #TINY-8162Editor
中删除了过时的execCallback
和setMode
API #TINY-8162AddOnManager
中移除已废弃的addComponents
和dependencies
API #TINY-8162Delay
中删除了过时的clearInterval
, clearTimeout
, debounce
, requestAnimationFrame
, setInterval
, setTimeout
和throttle
APIs #TINY-8162Schema
选项 #TINY-7821file_browser_callback_types
, force_hex_style_colors
和images_dataimg_filter
选项 #TINY-7823filepicker_validator_handler
, force_p_newlines
, gecko_spellcheck
, tab_focus
, table_responsive_width
和toolbar_drawer
选项 #TINY-7820media
插件中已废弃的media_scripts
选项 #TINY-8421editor_deselector
, editor_selector
, elements
, mode
和types
等TinyMCE初始选项#TINY-7822content_editable_state
和padd_empty_with_br
选项 #TINY-8400autoresize
插件中已废弃的 autoresize_on_init
选项 #TINY-8400fullpage
、spellchecker
、bbcode
、legacyoutput
、colorpicker
、contextmenu
和textcolor
插件 #TINY-8192editor.editorCommands.hasCustomCommand
API #TINY-7829mceResetDesignMode
、mceRepaint
和mceBeginUndoLevel
命令 #TINY-7829primary
属性已被废弃,并将在下一个主要版本中被删除。使用新的buttonType
属性代替 #TINY-8304tinymce.Editor
、tinymce.dom.EventUtils
、tinymce.dom.DOMUtils
、tinymce.util.Observable
和tinymce.util.EventDispatcher
的fire()
函数已被弃用,将在下一个主要版本中删除。请使用dispatch()
函数代替 #TINY-8102SetContent
事件中的 content
属性已被弃用,将在下一个主要版本中删除 #TINY-8457editor.setContent
API的返回值已被弃用,并将在下一个主要版本中删除 #TINY-8457不知道什么时候开始喜欢在上下班通勤路上听听播客,大约是日谈公园入的坑,个人比较喜欢的一些播客节目有:
淼叔的犯罪探案故事;
奶杨杨原博士聊各种故宫里的八卦;
柯紫小姐姐各种科普的日知录;
啤酒事务局入坑了精酿;
TSP怪奇档案听听ghs的聊斋故事……
但是iOS14开始,苹果自带的播客在CarPlay中经常会遇到循环播放的bug:播放没几分钟,就会跳回开始,然后无限重复。因此不得不寻求播客App的替代品。
而且也因工作需要,想在通勤时听一些《民法典》法条解读,虽然存在手机里面用播放器也能播放,但是nPlayer并不能很好支持CarPlay。
因此,就大致有了如下的需求:
各App优缺点(未做深度评测,如果你觉得好用,那就是你对)
App | 优点 | 缺点 |
---|---|---|
官方播客 | 自带,无需下载App,可自定义RSS订阅 | CarPlay存在致命bug |
网易云音乐 | 使用了UnBlockMusic功能听歌,所以对于我来说无需切换App | 不支持自定义音频导入或自定义RSS订阅,CarPlay中无前后15s功能 |
小宇宙 | 界面比较漂亮(未测试CarPlay) | 不支持自定义音频导入或自定义RSS订阅,虽然支持OPML导入节目,但是需要从其他App导入 |
Overcast | 自定义功能比较强 | 本地化不尽人意,UI略丑,播放界面有广告 |
Moon FM | 界面比较漂亮,CarPlay支持(节目封面加载有一些bug,开发者回应未来版本适配CarPlay api 2.0) | 付费App(不过经常限免);同步需自建数据库; |
Moon FM在少数派也有过多人推荐和介绍,所以这里就不重复造轮子了。
Moon FM官方网站
本来我对于播客这个,也只是听个响,也没有研究过背后运行的逻辑。
经过抓包,发现:
一个播客频道
=一个包含每个单集音频地址的XML文件
因此,我们搭建一个播放自己音频的播客,只需要:
一句话原理:利用NAS中Docker挂载阿里云盘,端口转发暴露地址。
网页登录阿里云盘后在控制台输入
1 | JSON.parse(window.localStorage.getItem("token"))["refresh_token"]; |
获取token后留着备用;
上传文件至阿里云盘;
(本地文件先别删,生成XML的时候需要使用)
因为我是斐讯N1挂载1T的硬盘作为简易的NAS使用,如使用群晖等类似操作即可。
在Docker中挂载阿里云盘,将前面的token填入下面代码,因为要暴露到公网,登录名&密码自行修改;
1 | docker run \ |
设置端口转发;
我的主路由为华硕AC-86u,因此安装了阿里DDNS
和Let's Encrypt
插件,只需要设置端口转发即可通过域名+端口的方式访问内网服务,关于如何进行内网穿透或者端口转发在此不赘。
外网访问地址如下:
1 | http://admin:admin@example.com:8080/Podcasts/test/test.mp3 |
一句话原理:存放于NAS并通过FileBrowser分享,最后通过端口转发暴露地址。
开启FileBrowser服务(OpenWRT自带,其他系统自行搜索安装)
上传文件
设置文件分享(整体文件夹分享即可)
分享文件夹后会有随机码,分享链接格式为:
1 | http://example.com:4040/share/yeaQs7rf |
直接访问链接为:
1 | http://example.com:4040/api/public/dl/yeaQs7rf/test.mp3?inline=true |
关于本地文件命名规则:
在对几个热门频道订阅链接抓包分析后发现XML文件结构基本如下(没保留之前的,就把现成的拿出来比划一下):
主要是:
1 |
|
知道了文档结构,那么我们就可以利用Python,针对存放音频的文件夹进行遍历并逆序生成XML文件。
1 | #!/usr/bin/python3 |
运行后即可在该Python脚本目录生成tel.xml
文件。
文件托管就比较简单了,直接丢到Gitlab的私人库即可。
关于Gitlab私人库的RAW地址参考如下规则:
1 | https://gitlab.com/api/v4/projects/[projectid]/repository/files/[Filepath]%2F[Filename.rss]/raw?ref=[Branch]&private_token=[privatetoken] |
之后在Moon FM或者其他App订阅RSS链接即可(注意在url encode
后使用)。
最后成品如图:
因涉及不可描述,详见我的博客
最后,把同步数据库也顺便搭建一下吧。
在Docker中安装CouchDB数据库,因需在公网暴露注意自定义用户名&密码;
1 | docker run \ |
安装完后通过http://192.168.2.2:5984/_utils
利用以上用户名&密码测试登录;
在Config - Main config
中设置 couch_peruser
模式;
可能couch_peruser
选项都没有,所以需要点击右上角Add Option
依次添加:
Section | Option | Value |
---|---|---|
couch_peruser | database_prefix | userdb- |
couch_peruser | delete_dbs | false |
couch_peruser | enable | true |
添加_users
数据库;
1 | curl -X PUT http://admin:password@192.168.2.2:5984/_users \ |
如果卡住,可以输入exit后查看主页有无_users
数据库生成,没有就重复第五步,如再卡住,等待后再exit;
在_users
中创建用户test,需要自定的将下面test的数据库名称、用户名、密码自行修改;
1 | curl -X PUT http://admin:password@192.168.2.2:5984/_users/org.couchdb.user:test \ |
可以看到生成了一个userdb-xxxxxxxxxx
的数据库,如果发现没有,请返回第4步
确认enable
是否为true
。
1 | http://test:test1234@192.168.2.2:5984/userdb-xxxxxxxxxx |
以上即为同步地址
设置端口转发后即可外网访问;
之前利用自建播客成功的在Moon FM中播放私人音频,后来发现Moon FM还可以听电台,但是国内电台并不全。
所以我们可以稍微改造一下让他支持我们自定义电台。
Moon FM中关于电台的收听除了发现页面最下面少的可怜的推荐位以外就是搜索了。
因为Moon FM官方地址被墙,所以我们需要利用Quantumult X来进行抓包。
我们找一个基本没有电台会用的关键词custom
进行搜索,作为基础json文件。
搜索api 的地址为:
1 | https://backend.moon.fm/api/search?search_k=custom&search_type=radio&page=1 |
返回json文件为:
1 | { |
同理我们搜索一个有返回结果的电台,例如音乐之声:
返回json文件:
1 | { |
返回结果经过分析发现
因此,如果我们自定义电台的数量少于20个,那么就无需考虑翻页以及next_page_url等问题。
拦截请求体我们需要先利用正则命中请求链接。
利用在线正则表达式工具,我们可以得到命中的正则表达式。
1 | ^https\:\/\/backend\.moon\.fm\/api\/search\?search\_k\=custom\&search\_type\=radio |
那么我们需要在QuantumultX的conf文件中进行本地重写
1 | [rewrite_local] |
iCloud云盘/Quantumult X/Scripts
文件夹中创建test.js这样利用Mac中的VSCode编辑test.js后保存即可同步至手机进行调试。
首先我们需要先读取拦截的response请求,然后将修改后的请求返还给App。
首先,先把所有数据修改后进行返还。
1 | let obj = JSON.parse($response.body || '{}'); |
在Moon FM中搜索custom
,可以看到我们添加的两个电台,测试通过。
但是代码写成上面这样并不优雅,我们可以在线托管需要的电台json,然后让篡改脚本请求并返还,这样不管是电台管理还是可读性上面都比较舒服了。
首先建立远程json文件,相关电台m3u8地址网上自行搜索或者去抓取喜马拉雅等App的地址。
1 | { |
然后改造篡改脚本,通过请求远程json后添加至response-body即可。
1 | //final.js |
1 | //final.conf |
并且修改Quantumult X的conf文件
1 | [rewrite_remote] |
设备:华硕AC-86U
固件:KoolShare改版Merlin 384.16
Clash版本:0.19
1.0版 可以和UU加速器共存,并且Switch裸连可以达到B(根据当前网络决定)
2.0版 比较满意的版本,可以与UU加速器共存,Switch裸连无异常,王者荣耀等游戏的延迟保持在30ms以下;
之前尝试使用KOP-XIAO的Clash-Merlin在AC86U上安装,但是他的教程相对比较简单,并且有很多端口进行了自定义,在尝试使用透明代理过程中走了不少弯路,因此在此记录自己折腾的过程。
uname -a
命令查看路由器架构,AC86U为armV8。clash
。利用ssh连接路由器,利用以下命令创建文件夹,并赋予执行权限;
1 | mkdir /jffs/clash/ |
Win系统下直接利用Winscp将上述clash、Country.mmdb、config.yaml上传到/jffs/clash/
文件夹内;
Mac系统下可以利用以下命令分别上传;
1 | scp *本地文件路径* *路由器登陆用户名*@*路由器地址*:/jffs/clash/ |
赋予clash文件执行权限;
1 | chmod +x /jffs/clash/clash |
测试运行;
1 | /jffs/clash/clash -d /jffs/clash/ |
如果配置无误,可以看到Clash开始跑并输出log。
Merlin直接跑Clash相对于OpenClash和KoolClash无法自动更新托管配置。
所以我们可以将config.yaml文件存放在Gitlab的私有库中,然后利用脚本进行更新,当然也可以增加定时任务进行定时更新。
以下带【】部分为需要自己填写项
1 https://gitlab.com/api/v4/projects/【Project ID】/repository/files/【config.yaml】/raw?ref=master&private_token=【私有Token】
Project ID:可在以下位置找到。
config.yaml:无需变更名称,直接在仓库根目录创建,否则下载下来还需要重命名;
私有Token:需要自己申请Token。
1 |
|
创建重启Clash脚本并赋予执行权限;
1 | touch /jffs/clash/restart.sh |
打开后输入以下内容;
1 | if $(pidof clash) > /dev/null; then |
后续直接运行/jffs/clash/restart.sh
即可重启Clash。
创建更新config.yaml脚本并赋予执行权限;
1 | touch /jffs/clash/update.sh |
打开后输入以下内容;
1 | wget -O /jffs/clash/config.yaml 'https://gitlab.com/api/v4/projects/【Project ID】/repository/files/【config.yaml】/raw?ref=master&private_token=【私有Token】' |
即为你Gitlab托管地址。
后续直接运行/jffs/clash/update.sh
即可更新config.yaml配置文件。
新建sh脚本以自动添加iptables规则,并赋予执行权限,并添加规则;
1 | touch /jffs/clash/clash-iptable.sh |
添加
1 | 排除ssh端口 |
其中iptables -t nat -I PREROUTING -s 192.168.2.65/32 -j RETURN
是跳过192.168.2.65
IP,因为这是Switch的地址,最近在玩动物之森,需要用到UU加速器。(该功能尚在尝试阶段)
后续发现一个大神的iptable配置项目地址,可以代理UDP;
稍作修改后可以和UU加速器共存,并且不再是F而是未开代理的B。
1 | !/bin/sh |
仅让Clash处理DNS地址为路由器地址(192.168.2.1)的客户端请求;
在不需要代理的设备中将DNS地址设置为非路由器地址即可绕过代理;
甚至该模式下无需固定Switch的ip,可以稳定到达B,以及王者荣耀在延迟测试的情况下保持在21~24ms。
1 | !/bin/sh |
如果前面配置文件中Clash监听了DNS服务器的53端口,但是53端口已经被dnsmasq占用,所以要将dnsmasq端口更改或直接关闭。
1 | touch /jffs/configs/dnsmasq.conf.add |
将以下内容添加进去,0为关闭DNS功能,当然也可以更改为5353等端口;
1 | port=0 |
我这边直接关闭dnsmasq的DNS解析功能,仅留存DHCP功能;
1 | service restart_dnsmasq |
重启dnsmasq服务。
需要在路由器—内部网络中将DNS地址设置为路由器地址,至此连接至改路由器的所有设备都将会科学上网。
不知道是AC86U的原因还是命令行位置不对,如果使用start-stop-daemon
是无法在路由器重启时启动Clash。
所以我是使用&
来进行后台运行;
1 | vi /jffs/scripts/wan-start |
在最后添加
1 | /bin/sh /jffs/clash/clash-iptable.sh |
之前尝试联系Merlin开发者以更新iptable版本来使用-m owner -pid-owner直接排除UU加速器的端口,但是被以稳定性无法保障为由驳回。
解决思路:将Switch固定ip,并在iptable表中排除。
归根结底还是udp数据类型的问题,fake-ip模式下,由于原有iptable规则所有流量都会经过Clash,所以无法合理区分诸如王者荣耀等游戏以及微信视频聊天的udp数据,从而会导致游戏丢包以及掉线。
解决思路:
在iptable中仅转发对fake-ip请求DNS的udp数据,对tcp以及外部udp的数据进行RETURN处理;
使用redir-host;
回来冒泡,终于下定决心把新脚本写完了,至于以前的那些坑……Emmmmmmmmm……
先说说Light Store吧,自从后台小哥去考研了,就没更新过,过段时间可能会更新一下后台数据,但也仅仅是更新后台数据。还有一个未公开过的Color Picker的坑,弄到一半跑路了,可能会重新捡起来。至于SysInfo Pro的重构和Days Pro老提起的多事件支持,优先级还是要再往后放放。
新脚本是一个功能类似于花样文字的脚本。可以转换,也可以当成键盘直接输入,还有每日一句的图片生成和分享。
这个脚本的原理就是将英文字母逐个转换为Unicode字符,并且已经将样式文件以及颜色文件托管在了Github,后续如果高兴地话不需要更新脚本就能增加样式。
因为Unicode本身属于图案一类,所以我给它取名为Patterns,意思为图案。
启动页面加入了Lottie动画,老机型也不用像Light Store加载界面那样用过多的技能渲染动画而造成卡顿。
主界面的颜色跟随了JSBox主程序,主界面右下两个按钮分别是将剪贴板文字转化为花样文字,以及手动输入转换,而点击列表内容将复制到剪贴板。
之前一直不懂谷歌的手气不错的用处,后来才知道是谷歌Geeker灵魂的存在。所以我想既然这个脚本只能用于英文,那为什么不再加一点关于英文的功能。因此制作了这个界面,打开脚本将默认抓取金山词霸开放的每日一句api内容,后续点击手气不错将在个人Lean Cloud的5421句经典英语电影台词数据库中随机抓取一条展示,并且渐变色背景会随机变换。当然上述的内容你都可以自己输入,不过需要注意的是水印的改变是需要先署名再选择样式,为了保证标题、主文显示协调性,只有水印是由Unicode字符显示。
改变完之后,点击上面的卡牌即能分享或保存到相册。
当然你要是乐意,还能加个做成这样
另外就是设置界面,这个等一下讲,先讲键盘。
键盘的样式参考了搜狗手机输入法的一款皮肤,但是相对于搜狗,这个炫彩键盘的颜色是随机出现的,同时可以自定义大小写、数字样式。而由于JSBox的原因,键盘默认设置高度为267,不能继续缩小,所以可能小屏手机上面使用起来会遮挡大半屏幕。另外键盘是适配X系列的手机的,XR是通过测试,X系列将会自动隐藏上图的地球。
由于不懂Runtime,求助开发者钟大以后才有连续删除功能,而连续输入功能是不存在的。但是作为一款不是主力键盘,应该也够用了。
关于设置界面基本都是键盘的设置,也比较简单,可以设置前述键盘的大小写样式和数字样式,这个大小写样式亦能够作用于主界面第一个样式,不过还是需要先设置样式再更改内容。缓存是为了减少服务器压力,设置后台更新样式的间隔时间,默认就行。
最后,这个脚本也同时支持多语言以及静默更新。
需要注意的是,JSBox在软件左上角齿轮—键盘脚本—选择本脚本,并在设置—通用—键盘中加入JSBox才可使用。并且在第一次开启键盘脚本时,需要点击键盘上的“图钉”符号并再次打开后才会正常显示。
又到了一年一度的三八国际妇女劳动节,作为单位部门里面唯三的男同志依旧坚守岗位,剩下的女同志全部去参加活动了。
结合之前食堂改造刷卡机一直没有着落,寻思着每天上班都能按时到,但是因为早餐的问题不得不先去行政楼打卡再去食堂或者找别人帮忙网页签到。
所以用大家都不在的时间研究了一下自动签退的脚本。
最早的想法是利用按键精灵,网页打开后模拟按键进行操作,很早的时候就已经测试过,似乎不太可行,对于Click操作可能有点问题,因此被抛弃了。
后来的想法是做一个自动运行的油猴脚本,但是不能定时启动,这种事情无人值守才有意义不是?
Google了一下解决方案,大部分都是利用Python+selenium实现,因为是第一次接触Python,之前虽然有听过大名,但是一直没有实际需求去接触这块,所以网上扒了点代码适配了一下签到网页,实现了多人签到。
基本的解决思路是:
设置电脑自动开机→Win自带的计划任务→执行Pyhthon脚本签到.
好在单位电脑BIOS可以设置定时开机,不用一直开着了。
Python解决思路:
利用selenium,打开签到网页,读取json文件后模拟登陆、签到、退出等一系列操作,实现多人签到。
Python环境安装
直接去Python下载页面下载对应版本安装即可,记得在安装时就勾选配置环境变量。
selenium安装
由于是离线环境,因此需要将selenium包下载后放到本地文件进行安装。
解压后放置到Python的安装目录的\Lib\site-packages中,进入setup.py文件的文件夹内,空白处按住Shift+鼠标右键,选择在此处打开命令窗口,输入命令:python setup.py install。
配置ChromeDriver
下载Chrome版本对应的ChromeDriver并置于Python安装目录的Scripts文件夹中。
1 | # -*- coding: utf-8 -*- |
因为内外网分离,所以无法在执行完后获取结果。后续可以利用内外网文件交换系统,在执行完后将Log文件上传,以便于人在外面时了解执行情况。并且在脚本中增加自动关机命令,在签退完成后自动关机。
]]>没有更新博客了,一方面是工作忙,另一方面还是懒,没啥动力更新,虽然欠着一堆东西,大西北的视频剪了一半,找不到好的BGM索性一直扔在那边,JSBox好几个脚本在烂尾或者已经难产。
顺便吐槽一下七牛云,回收了测试域名还不能打包下载素材。
前几天,大概也有几周了,被橘年大佬安利了一下树莓派,讲道理其他的功能并不吸引我,但是还算便宜,所以入了一个树莓派3B+作为了下载机使用。
树莓派系统安装以及配置在此不赘,直接从安装Aria2开始。
相比于早期需要编译安装Aria2,现在安装方便许多。
只需要用Aria2一键安装脚本即可安装,而且可以保证是最新版,而不是官方安装库里面一万年不更新的旧版,一些新功能还是挺有必要的,配置原文均有详解,在此不赘述。
1 | wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh |
原帖地址:
实验了很久安装完以后无法建立下载任务,后来发现是因为树莓派兼容性问题,不支持NTFS格式硬盘写入。但是作为下载机难免下载点高清电影什么的,不支持4G以上单文件实在不能忍,因此需要用插件让树莓派兼容写入。
安装NTFS-3G插件
1 | sudo apt-get install ntfs-3g |
挂载NTFS
首先要看硬盘挂载情况
1 | df -h |
可以看到返回结果/dev/sda就是硬盘地址,因为这是我的已经挂载后的提示,最右边原本不是/media/pi的路径,而是系统自己挂载的路径,这里需要我挂载到自己想要的路径。
Filesystem Size Used Avail Use% Mounted on
/dev/root 15G 3.7G 11G 27% /
devtmpfs 460M 0 460M 0% /dev
tmpfs 464M 0 464M 0% /dev/shm
tmpfs 464M 13M 452M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 464M 0 464M 0% /sys/fs/cgroup
/dev/mmcblk0p1 44M 22M 22M 51% /boot
/dev/sda 466G 235G 231G 51% /media/pi
tmpfs 93M 0 93M 0% /run/user/1000
先在media下新建目录/media/pi
1 | cd /media |
直接挂载
1 | mount -t ntfs-3g /dev/sda /media/pi |
需要添加开机自动挂载,则编辑/etc/fstab文件,添加以下语句
1 | /dev/sda /media/pi ntfs-3g defaults,noexec,umask=0000 0 0 |
1 | sudo apt-get update |
1 | sudo apt-get install samba samba-common-bin |
1 | sudo vim /etc/samba/smb.conf |
找到Global Settings节*[global]*部分:
将*# wins support = no行改为# wins support = yes*
找到Share Definitions节*[homes]*部分:
将read only = yes行改为read only = no
将*[homes]下path后改为/media/pi*
1 | sudo /etc/init.d/samba restart |
1 | sudo smbpasswd -a pi |
输入密码后确定,便可在其他设备访问树莓派共享的文件夹
该节可以参考之前的文章
树莓派运行Aria2比路由器运行稳定许多,速度也不错,只不过不存在硬盘休眠的功能,如果硬盘一直开着还是挺伤的。
因此ios系统配合PiHelp这款app管理,自定义关机命令后即可控制关机。其他的支持ssh的客户端加上frp穿透亦可,只不过需要每次自己打命令。
如果想要开机,我想的办法是电源接在小米插头之类的智能插头上,通电即开机。
]]>**9月27日,日落:19:03:09 **
TEAM A小分队从萧山机场出发,12点到达西宁机场,办理租车手续,在 西宁站午餐后前往黑马河,随开随停抓牛羊玩青海湖,傍晚到达黑马河欣赏夕阳住宿晚餐,汽车加油。
行程:
西宁—(3小时50分钟)—> 黑马河
景点:
青海湖
牛羊宝宝
餐饮:
市区购买牛羊肉,自助火锅,自助饭,酸奶
住宿:
共和县黑马河驿路港湾假日酒店
公共交通:
08:55(杭州)——> 12:00(西宁)
9月28日 ,日出:07:05:30 ,日落:19:27:49
清晨欣赏青海湖日出,吃早餐睡回笼觉后离开黑马河(9:30), 途径茶卡汽车站午餐 (10:50),午餐后稍作休息出发前往大柴旦翡翠湖(16:30),伊布拉晚餐(17:00)可能需要排队,入驻酒店泡温泉休息。
行程:
黑马河 —(1小时20分钟)—> 茶卡 —(4小时45分钟)—> 大柴旦 —(22分钟)—>翡翠湖 —(48分钟)—> 大柴旦雪山温泉
景点:
翡翠湖
大柴旦雪山温泉
餐饮:
午餐:青原耗牛大骨汤(茶卡)
晚餐:伊布拉特色炕锅(大柴旦)
住宿:
大柴旦温泉假日酒店(含温泉票)
公共交通:
21:35(杭州)——> 00:30(兰州)
9月29日,日出:07:35:34 ,日落:19:27:49
在柴旦木进行午餐准备后,离开大柴旦前往雅丹魔鬼城(8:30),游玩魔鬼城(9:30)一路向南到达敦煌(14:00),在敦煌午餐休息后前往敦煌汽车站接上TEAM B小分钟队同学,前往鸣沙山,骑骆驼游览月牙泉(17:00),在鸣沙山背面露营,拍摄星空休息。
行程:
TEAM A
大柴旦 —(55分钟)—> 雅丹魔鬼城 —(4小时28分钟)—> 敦煌 —(1小55分钟)—> 敦煌汽车站 —(9分钟)—> 鸣沙山;
TEAM B
兰州西 —(6时26分钟)—> 柳园 —(1小时53分钟)—>敦煌汽车站 —(9分钟)—> 鸣沙山
景点:
鸣沙山:
购买门票后,直接在门口那里录入指纹信息,凭借票和指纹可在3天内多次进入。进入后需排队骑骆驼,骑骆驼一圈耗时约1.5小时,费用100元/人。鸣沙山景区背面露营,清晨可爬到沙峰上去看日出。
开放时间:5:00-20:30
门票价格:120元/人
月牙泉:
月牙泉南北长近100米,东西宽约25米,泉水东深西浅,最深处约5米,弯曲如新月,因而得名,晚上20:00左右开始亮灯。
餐饮:
住宿:
敦煌露营
公共交通:
07:50(兰州西) ——> 14:16(柳园)
9月30日,日出:07:36:33 ,日落:19:11:47
早餐吃饱后前往莫高窟(10:30),由于提前订票排队时间少。取提前取票(10:10),超过5分钟即作废,游览约2-3小时;游览莫高窟后回到市区午餐(13:00),驱车前往嘉峪关(17:00)
行程:
酒店 —(40分钟)—> 莫高窟 —(40分钟)—> 敦煌市 —(40分钟)—> 反弹琵琶雕像 —(4小时)—>嘉峪关
景点:
莫高窟:
开放时间:8:00-18:00
门票价格:200元/人
餐饮:
午餐:靖远尕六美味羊羔肉(错开高峰避免排队)(敦煌)
晚餐:小党烤肉(嘉峪关)
住宿:
(嘉峪关)
10月1日,日出:07:22:54 ,日落:19:01:48
酒店出发,游玩嘉峪关关城景点 (9:00);结束游玩后在嘉峪关市区午餐休息(11:30),前往金塔胡杨林游玩(14:00),自由拍照欣赏胡杨林;16:00出发前往张掖市区,由于晚餐时间在路上需要备点干粮,到达张掖市区后夜宵大餐(20:00)
行程:
酒店 —(30分钟)—> 嘉峪关关城 —(1小时50分钟)—>金塔胡杨林 —(3小时24分钟)—>张掖市
景点:
嘉峪关关城:
大门步行5分钟从门口走到关城(无需租车或乘坐观光车),游览时长2小时。
开放时间:8:00-18:00
门票价格:120元/人,学生票60元
金塔胡杨林:
位于古丝绸之路中段北侧、甘肃省金塔县城西北8公里处,游览时长2小时。
开放时间:7:00-19:00
门票价格:65元/人,学生票30元
餐饮:
午餐:大碗小面抿节面馆(嘉峪关)
晚餐: 甘州名吃(张掖)
住宿:
(张掖)
10月2日,日出:07:14:55 ,日落:18:55:44
7:20酒店出发,自驾前往张掖丹霞地质公园(8:00),到达公园后乘坐观光车前往4个观赏台,游览后回附近午餐休息(11:00),前往祁连山草原(16:00),欣赏雪山(草原无草欣赏被冻黄了),与祁连山草原石头合影后启程西宁入驻酒店休息(20:00)。
行程:
酒店 —(40分钟)—> 丹霞地质公园 —(3小时8分钟)—> 祁连山草原 —(3小时47分钟)—> 西宁
景点:
张掖丹霞地质公园:
七彩云海台(1号)、七彩仙缘台(2号)、七彩锦绣台(3号)、七彩虹霞台(4号),4号观景台最美。在公园内可搭乘热气球,乘坐8-10分钟,收费200元/人,从西门进入预计游览时间3小时。
开放时间:05:30-19:00
门票价格:72元/人(含观光车)
餐饮:
午餐:清真伊亲阁餐厅(张掖)
晚餐:清真伊兰轩青海特色美食(西宁)
住宿:
(西宁)待定
10月3日,日出:07:09:39
酒店出发前往塔尔寺游览,门口照相由于时间原因进行地点打卡(8:00),回到西宁市打包西宁特色小吃(可真空包装),回到酒店取行李西宁站(10:00),附近吃碗兰州拉面,前往机场归还汽车(11:00),11:30过安检候机。
行程:
酒店 —(30分钟)—> 塔尔寺 —(30分钟)—> 酒店 —(X分钟)—(60分钟)—> 曹家堡机场
景点:
塔尔寺:
酥油花、壁画和堆绣被誉为“塔尔寺艺术三绝”,另外寺内还珍藏了许多佛教典籍和历史、文学、哲学、医药、立法等方面的学术专著。由于塔尔寺内部禁止拍摄,参观时间至少1-3个小时以上。
公共交通:
12:45(西宁) ——> 15:40(杭州)
翻以前的旧物时候,发现了以前还是有很多有意思的东西。
而且,偶尔出去玩拍的照片一些还是比较适合做壁纸的,但是单独作为一个博文似乎内容又太少。
在制作Light Store的过程中萌发了很多有意思的想法。
也制作了几个比较有意思的动画,虽然很多人会以为里面的动画是GIF。
所以这里就把动画原理和实现方式整理一下,顺便做个记录。
思路很简单,因为JSBox不支持字体渐变,只提供了一个矩形渐变接口,所以需要一共两层图层来完成动画。
接下来就是利用JSBox将动画渐变层的渐变颜色动起来。
JSBox之中设置颜色有HEX值和RGB值两种方式,但是归根结底HEX只不过是RGB的十六进制显示方式。
由于RGB(Red, Green, Blue)
是利用的是一个三维坐标。
如果利用RGB来动态变更颜色的话,需要平滑地显示红橙黄绿蓝靛紫红一个周期则需要运用Sin函数。
利用下面的Demo可以清楚看到颜色渐变过程,仅需改变start
的值就可以改变起始颜色。
1 | $ui.render({ |
相对于此,利用HSV值更加直观,唯一缺点就是需要重新将输出的HSV值转换为HEX值。
在HSV(Hue, Saturation, Lightness,即色相,饱和度,明度)
里,颜色变化更为直观,我们只需要变更H值即可,完成一个周期颜色变化,而且也更为强大。
同样利用一个Demo,来看一下HSV变化。改变hh
为起始颜色,改变ss
则是统一饱和,vv
则是统一明度。
唯一缺点就是增加了HEX值封装函数,但是相对于上面的RGB方法,这里可以比较直观地控制饱和度和明度。
1 | $ui.render({ |
实时计算颜色数值后,我们只需要在画布上添加一个渐变的图层gradient
。
然后写入渐变层的colors
。
最后再在最上面覆盖一层PS制作的镂空字体层即可。
附上测试脚本:
最后贴一个效果图
]]>虽然很不喜欢用百度的产品,但是在输入法上面也就三家大厂三分天下(百度、搜狗、讯飞)。
之前用的落格,被词库劝退,一开始也忍了,之后几波更新,每更新一次就会出现一点小毛病,关键还不敢重装,重装其他数据也没了。
无奈只能回去用所谓的“智能输入法”,虽然这类大厂的输入法布局是真的不敢恭维,什么都往里塞。
选了一款比较喜欢的GBoard在修改布局后的百度输入法用的还算顺手,只是切换英文略微弱智。
2018/11/13 更新iPhone X版,去除了小地球,加大了空格。
(这个皮肤只是自用分享,如果需要更改适配其他键盘,请自便)
利用微信等程序传到手机,点击用其他应用打开,选择百度输入法后跳转选择即可使用。
]]>JSBox脚本分发有点麻烦,除了TG群分享和社区发帖似乎没有别的途径,所以最近断断续续写了一个JSBox的三方轻量商店。(虽然还没写完的时候,钟大开始推出了官方商店投稿)
这是第一个测试版,仅在7/7P机型上测试,X和SE等机型还未测试,欢迎反馈。
此项目收录的脚本,除了一些自己写的,其余均来自与社区或者TG群,亦会标注原作者及原帖地址,如果脚本作者认为有版权或者其他问题的,请及时联系我们进行删除。
#2018/7/21
V1.0.1 更新部分相关更新。
V1.0.2 增加双击首页回到页首功能;详情页原帖地址按钮底色修改。
#2018/7/22
V1.0.3 增加更新详情提示;适配iPhoneX;双击首页回到页首会造成卡顿,暂时取消;优化提示信息选项。
#2018/7/23
V1.0.4 新增首页逆序显示选项,方便了解、查看新增脚本;修复更新页无法上下滑动问题 。
#2018/7/25
V1.0.5 新增清除缓存按钮;新增长按首页显示商店脚本总数功能。
#2018/7/26
V1.0.6 修复搜索标题返回无结果的错误。
#2018/7/29
V2.0.0 增加热门排行,首页将会显示下载排行前十的脚本(左右滑动浏览卡片);脚本简介引入Markdown语法,排版更加舒适;详情页增加下载量显示;后台增加装机量统计;设置页面增加打赏感谢名单。
#2018/7/31
V2.0.1 增加炫酷动画;优化标题栏;优化详情页(感谢Josscii老哥支援滑动返回解决方案);优化排行榜第123名显示方式;尝试适配iPad。
#2018/7/31
V2.0.2 修复设置页面卡滑动BUG;修复自定义颜色模式启动动画闪屏的问题;修复商店版侧滑返回失效问题;增强搜索忽略大小写功能;修复IphoneX菜单栏留空不足问题;增加随机到喜欢的颜色,关闭随机颜色(提示重启先取消)后可直接选取当前颜色为自定义颜色的功能;修复相关脚本安装图标错误问题;后台装机信息策略优化;增加缓存清理选项;微调启动动画颜色。
#2018/8/1
V2.0.3 启动动画优化;菜单栏优化;无网络下的启动动画优化。
#2018/8/2
V2.0.4 修复无法统计新装用户的错误。
#2018/8/2
V2.0.5 启动动画优化;iPhoneX标题栏微调;代码优化;修复连续点击清除缓存造成崩溃的问题。
#2018/8/8
V2.0.6 更换服务器地址;优化iPad上标题栏显示。
#2018/8/18
V2.0.7 增加去除导航栏开关;优化iPhone X适配。
#2018/8/19
V2.0.8 更改脚本安装方式;增加安装Loading动画;优化启动动画随机颜色。
#2018/8/21
V2.0.9 一些UI优化;移除设置里面无用的检测更新;增加了无法进入商店时提示更新脚本功能;增加脚本安装失败提示;代码规整工作;本体更新相关优化。
#2018/8/23
V2.1.0 修复搜索无法工作的问题;优化下载量统计。
#2018/8/23
V2.1.1 修复100以后脚本无法显示下载量的错误。
#2018/9/2
V2.1.2 修复某些脚本详情里面出现空原贴链接问题;应作者要求下架已失效的moreSound,如有需要请下载ACPlayer;修复下架脚本后排行榜错乱问题,建议更新。
]]>昨天作死开始了从wp到Hexo的迁移之旅,网上大部分Hexo搭建教程都还停留在2017年甚至2016年,所以整个迁移过程历尽深坑不断。
因此我觉得有必要记录一下自己所踩过的那些深坑。
具体有以下几点:
主要参考:
Hexo的基本运行逻辑就是本地编写Markdown文档——利用Git生成html页面——利用Git推送到VPS——VPS再通过Git钩子发布到Nignx配置文件夹发布。
在Node.js官网下载对应版本一路next安装即可。
同样在Git For Windows下载后一路next安装。
根据前述参考文章是需要配置环境变量的,但是我本地的Git是因为VS Code才安装的,并没有设置环境变量。虽然也能用但是无法排除本文所提的深坑是因此而出现,所以还是建议配置一下。
安装完Git,需要生成ssh密钥,但是我们先要设置Git用户名,从开始菜单中运行Git Bash。
1 | git config --global user.name "你的用户名" |
设置完成后继续生成ssh密钥
1 | ssh-keygen -t rsa -C "你的邮箱地址" |
完成后打开目录C:\Users\XXX\.ssh\
内的id_rsa.pub
文件备用。
在电脑任意位置创建文件夹作为本地目录用以写作,例如我就是以D:\Hexo\
为本地目录。
在此目录下右键点击Git Bash Here
后分别执行以下命令以安装Hexo:
1 | npm install -g hexo-cli |
完成后可以在D:\Hexo\
目录下看到已有本地文件生成,继续在Git命令窗口输入hexo s
运行本地服务器,看到提示有http://localhost:4000
后在浏览器打开该地址已验证本地是否部署成功。
VPS系统我选择的是Centos 7,因为发现Centos 6安装Nginx十分复杂。
1 | sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
1 | sudo yum install -y nginx |
利用
1 | vi /etc/nginx/conf.d/default.conf |
编辑default.conf
文件,插入如下代码(需要自行更改server_name example.com www.example.com;
,其他的路径可以不改动)
1 | server { |
然后利用service nginx restart
重启Nginx服务。
像上面安装完以后Nginx并不会开机自动启动,手动启动就比较麻烦了,因此我们需要设置其开机自动启动。
利用命令建立Nginx脚本
1 | vim /etc/init.d/nginx |
然后添加命令
1 | #!/bin/sh |
保存后设置可执行权限
1 | chmod a+x /etc/init.d/nginx |
添加chkconfig控制
1 | chkconfig --add /etc/init.d/nginx |
设置开机自启
1 | chkconfig nginx on |
利用以下代码安装Git
1 | yum update && apt-get upgrade -y #更新内核 |
分别利用以下命令新建git用户、给sudoers
文件提权、编辑。
1 | adduser git |
找到
1 | # Allow root to run any commands anywhere |
后在之后添加以下代码并保存。
1 | git ALL=(ALL) ALL |
随后再将sudoers
文件改回原来的权限
1 | chmod 440 /etc/sudoers |
1 | su git |
切换为git用户
1 | cd ~ |
因为搬瓦工的ssh端口是随机的,但是git默认使用22端口,我测试在本地修改config文件更换git通讯端口,但是效果并不好,所以我们需要将搬瓦工的ssh端口改回22,并且打开免密登录。
1 | vi /etc/ssh/sshd_config |
找到以下代码前的#并删除。
1 | RSAAuthentication yes |
并将最后的Port xxxxx
改为Port 22
。
最后!!!
需要设置.ssh文件夹和authorized_keys文件的权限,分别设置为700和600,不然永远无法push代码到服务器,这个坑足足坑了我一天。
1 | cd ~ |
现在你可以在Git Bash使用ssh git@你的VPS IP地址
测试能否登录,如果可以则代表前三个坑已经填完。
1 | cd ~ |
等待初始化完毕后,再创建网站目录
1 | cd /var/www |
1 | su git |
输入以下代码
1 | git --work-tree=/var/www/hexo --git-dir=/home/git/hexo.git checkout -f |
这里是最后一个坑,因为Hexo版本的更新,旧版的post-receive
无效,所以需要用新方法。
然后赋予post-receive
文件执行权限。
1 | chmod +x post-receive |
最后将hexo.git目录
所有权设置为git。
1 | cd /home/git |
至此服务端配置完毕。
修改 hexo 目录下的 _config.yml
文件,找到 [deploy]
条目,并修改为
1 | deploy: |
至此,Hexo配置完毕,最后在本地D:\Hexo
文件夹右键Git Bash Here
运行
1 | npm install hexo-deployer-git --save |
安装git的push插件,完成后再利用
1 | hexo g && hexo d |
将本地目录生成静态网页并推送到VPS。
齐活。
鉴于本文并不是在解决问题时撰写,而是成功后根据回忆和参考教程所写,因此在实际操作过程中会有一定出入,如有错误欢迎指正。
希望本文给折腾的你提供些许参考,而不是重复造轮子。
]]>说是客户端,其实只有添加任务的功能。
不过即使是网页客户端,设置后重启也会重置,所以Aria2设置还是编辑conf文件比较妥当。
之前通过AriaNG提供的api写过一个类似脚本,但是没有设置界面,每次添加会有网页弹窗。
所以这次利用jsonrpc重写了一个。
之前写Days Pro时想要找几个配色,在App Store找了一圈相关的App,但是这类工具数量少的可怜,并且交互十分不友好,比如无法复制HEX、RGB值,再或者界面并未适配7P。
所以就按照其中比较好的一款写了个脚本,并且支持了直接复制颜色值,之前设计是想要支持查看历史记录的,但是在实际实现过程中,发现这个功能并不常用。而且如果实现这个比较鸡肋的功能,还要增加大量计算,权衡之下放弃了这个功能,当然也有可能是我水平不够,数据传导结构没做好。按照目前来看,现有日常使用已经绰绰有余。
选取图片颜色因为JsBox现在暂时还不支持触摸的动作,本人能力也有限,所以本项目不在考虑范围内。
· 点击HEX和RGB值可以直接复制所显示的内容,包括#和();
· 各条Slider都会随着数据变化而变化,因此RGB标签页想要查看颜色更加直观。
2018/6/3 V1.0.2 修复大量BUG
]]>之前想填的倒数日的坑终于填了。 仿自”倒数日 Days”。
理论可以计算到无限天数,但是超过5位数的天数背景会错乱(懒得适配)。
#2018/6/5
V 1.0.2 增加节假日模式、多色彩主题自定义; Bug修复。
#2018/6/12
V 1.0.3 调整对emoji字符长度识别以优化长度限制; 调整主题选择; 调整到达事件当天显示方式。
#2018/6/22
V 1.0.4 修正节假日模式到达假日当天显示方式。
]]>根据之前TG群的Netspeed(找不到作者了)和RYAN大佬的Progress按照App——SYS PRO制作。
可以查看当前网速、局域网外网IP、设备名称、iOS版本、磁盘剩余、内存占用等情况。 可以点击界面来切换显示的系统信息和网络信息。
目前已知的问题:
(三条都不是我的锅),对不起第三条的确是我的锅。 1和2的问题,是JSBox的返回值就是这样,可以自行利用
1 | $ui.alert($device.space) |
查看。
3的问题仅会偶尔在刚启动出现一下,暂时找不到原因,不影响使用。
会经常出现,已经修复。
2018/5/26更新1.0.1 修复出现NNNNN多小数点的问题。
2018/5/27更新1.0.2 限制SSID长度以解决字符叠加。
2018/5/27更新1.0.3 修复外网IP偶尔的排版错误。
2018/6/12更新1.0.4 适配SE机型,以及其他机型适配优化。
]]>之前折腾了一下小宝固件软件中心的Aria2,安装是方便了,但是问题也不少。
Bug不少,经常莫名其妙假死。
添加设置需要在面板进行,如果是改conf文件,面板里面一提交,conf就会被重写。
第二点就导致了自动更新tarcker列表的脚本无法执行。
更新需要等待适配。
今天看论坛有大佬编译了1.34的版本,所以就想舍弃软件中心版,直接自己安装。 虽然看不到了面板那么详细的数据,但是总体还不错。
因为之前直接安装Aria2到路由,运行一段时间重启后会导致opt文件夹软链丢失,造成Aria2无法启动和运行。所以想用其他方法,然后看到了这篇文章,将opt文件夹链接到U盘,运行了一天十分稳定,重启后也不会丢失opt文件夹。 插上U盘,执行 df 命令:
1 | ZiGma@RT-AC86U-8450:/tmp/home/root# df |
可以看到U盘路径是/tmp/mnt/sda1。 所以直接运行以下代码进行挂载。
1 | cat << EOF > /tmp/script_usbmount.tmp |
继续执行以下代码后重启。
1 | nvram set script_usbumount="`cat /tmp/script_usbumount.tmp`" |
使用过程中,重启之后发现Aria2没有运行,查看了进程也无法找到,也无法使用命令启动。 查了一下才发现U盘挂载点已经变成了/tmp/mnt/sdb1,所以要将U盘固定到盘符。 先利用
1 | blkid |
查看已经挂载的所有硬盘的UUID。 可以看到
1 | /dev/sda1: UUID="e5fff8c8-c1f1-d301-60ff-f8c8c1f1d301" |
需要注意的是要在正常挂载的情况下操作。 然后编辑/etc/fstab文件,添加:
1 | UUID=e5fff8c8-c1f1-d301-60ff-f8c8c1f1d301 /dev/sda1 ext4 defaults 0 0 |
说明一下字段意义: - UUID - 挂载位置 - 格式 - 挂载参数(具体参考mount -o命令选项) - 是否需要dump备份 - 系统启动时进行磁盘检查的顺序
将entware环境安装到上述的U盘中。
1 | entware-setup.sh |
安装完成后可以用cd /opt/查看,一般来讲是可以看到U盘目录,继续用
1 | opkg update |
更新仓库索引到本地。
因为在查找原因时,有反应说软件中心的虚拟内存和entware环境下的Aria2有冲突,所以虚拟内存在这里进行安装。 依次执行
1 | dd if=/dev/zero of=/tmp/mnt/sda1/swapfile bs=1024 count=512000 |
1 | mkswap /tmp/mnt/sda1/swapfile |
1 | swapon /tmp/mnt/sda1/swapfile |
创建启动脚本
1 | echo ' |
1 | opkg install aria2 |
可以直接用WinSCP直接修改/opt/etc/aria2.conf文件。 也可以直接用我的,需要自己修改下载路径和Token。 (dir=XXX/XXX 和 rpc-secret=XXXX) conf下载 配置完后利用
1 | /opt/etc/init.d/S81aria2 restart |
重启服务
先将Aria2服务停止
1 | /opt/etc/init.d/S81aria2 stop |
然后在/opt/bin中替换编译的aria2c文件,并将权限设置为0755后重启Aria2服务。
1 | /opt/etc/init.d/S81aria2 start |
查看了路由器管理界面,发现下载时CPU占用过高,所以要对Aria2进行CPU限制。 安装cpulimit
1 | opkg install limitcpu |
安装完后通过命令限制cpu占用
1 | cpulimit -P aria2c -l 30 -b |
在/jffs/scripts/post-mount文件最后添加
1 | /opt/etc/init.d/S81aria2 start |
(不建议添加自动更新,会导致Aria2进程莫名消失) 在/opt/var/aria2新建文件trackers-list-aria2.sh写入以下内容,将编码格式设置为UTF-8,并将权限设置为0755。
1 | !/bin/sh |
这里可以用
1 | /bin/sh /opt/var/aria2/trackers-list-aria2.sh |
测试一下这个脚本,如果报错显示
1 | syntax error: unexpected end of file (expecting "then") |
那么利用
1 | vi /opt/var/aria2/trackers-list-aria2.sh |
删除每行最后所有的^M后保存即可。(具体如何在Linux编辑请百度) 最后将下面定时运行这个脚本命令写入/jffs/scripts/post-mount文件,每天凌晨4点更新Tracker。
1 | cru a trackersupdate "0 4 * * * /bin/sh /opt/var/aria2/trackers-list-aria2.sh" |