[[{key: ESC, popup: {macro: "CTRL f d", display: "tmux exit"}},{key: '~', popup: '-'},{key: LEFT, popup: HOME},{key: DOWN, popup: PGDN},{key: KEYBOARD, popup: {macro: "CTRL d", display: exit}},{macro: "ALT j", display: A-j, popup: {macro: "ALT g", display: "%g"}},{key: HOME, display: "🏠" , popup: {macro: "CTRL d b", display: " "}},{key: UP, popup: PGUP},{key: END, popup: HOME},{key: ':wq', popup: ":q!"}],[{key: ' -a', popup: ' -A'},{key: '(', popup: '<'},{key: ')', popup: '>'},{key: dd, popup: {macro: ' ~/gitdemo/_posts ENTER',display: " 📲"}},{key: '[', popup: '{'},{key: ']', popup: '}'},{key: LEFT, popup: HOME},{key: ENTER, display: "✌" , popup: {macro: "ESC u", display: "↶"}},{key: RIGHT, popup: ">>"},{key: BKSP, display: "🔙" , popup: {macro: "XINHAO_HAN_TextUT", display: "📝"}}],['TAB',{key: CTRL, popup: {macro: "CTRL c", display: "✋"}},{key: ALT, popup: "&"},{key: "i", popup: "|"},{key: "'", popup: '"'},{key: '/', popup: {macro: "history -c ENTER", display: "🗑️"}},{key: PGUP, display: "⇞ⓥ" , popup: "gg"},{key: DOWN, popup: PGDN},{key: PGDN, display: "ⓥ⇟" , popup: "W"},{key: DEL, display: "☠:", popup: ":"}]]
// ==UserScript== // @name 本地TXT网页查看器 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 选择本地TXT,弹窗网页形式展示,支持字体脚本修改 // @author You // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; // 唤起文件选择按钮 const openBtn = document.createElement('button'); openBtn.innerText = '打开本地TXT'; openBtn.style = ` position: fixed; top: 20px; right: 20px; z-index: 9999999; padding: 8px 16px; background: #2b88d8; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 14px; `; document.body.appendChild(openBtn); // 隐藏文件选择器 const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = '.txt'; fileInput.style.display = 'none'; document.body.appendChild(fileInput); // 外层遮罩容器 let mask = null; // 文本展示主体 let txtBox = null; // 关闭弹窗 function closeView() { if(mask) mask.remove(); mask = null; txtBox = null; } // 创建网页式弹窗 function createViewer(fileName, content) { // 遮罩层 mask = document.createElement('div'); mask.style = ` position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0,0,0,0.7); z-index: 99999999; display: flex; justify-content: center; align-items: center; `; mask.onclick = (e) => { if(e.target === mask) closeView(); }; // 内容容器(模拟网页页面) const wrap = document.createElement('div'); wrap.style = ` width: 85vw; height: 85vh; background: #fff; border-radius: 8px; display: flex; flex-direction: column; overflow: hidden; `; // 标题栏 const titleBar = document.createElement('div'); titleBar.style = ` padding: 12px 16px; background: #f5f5f5; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; `; titleBar.innerHTML = `<span>${fileName}</span>`; // 关闭按钮 const closeBtn = document.createElement('button'); closeBtn.innerText = '关闭'; closeBtn.style = ` padding: 4px 12px; border: 1px solid #ccc; background: #fff; border-radius: 4px; cursor: pointer; `; closeBtn.onclick = closeView; titleBar.appendChild(closeBtn); // 文本显示区域(核心,字体脚本可正常作用于此) txtBox = document.createElement('div'); txtBox.className = 'txt-content'; txtBox.style = ` flex: 1; padding: 20px; overflow: auto; white-space: pre-wrap; word-break: break-all; line-height: 1.6; font-size: 16px; `; txtBox.textContent = content; // 组装结构 wrap.appendChild(titleBar); wrap.appendChild(txtBox); mask.appendChild(wrap); document.body.appendChild(mask); } // 绑定点击事件 openBtn.onclick = () => fileInput.click(); // 读取文件并渲染 fileInput.onchange = function(e) { const file = e.target.files[0]; if(!file) return; const reader = new FileReader(); reader.onload = function(ev) { createViewer(file.name, ev.target.result); }; // 读取文本,兼容大部分编码 reader.readAsText(file); fileInput.value = ''; }; })();
// ==UserScript== // @name 保留文本替换-手机优化版 7.3.9(最终版) // @namespace https://viayoo.com/ // @version 7.3.9 // @description 7.3.9 最终定稿:修复 Base64 跨域、打印空白页、公众号漏替换、规则统计实时刷新;支持文本替换 / 查找替换 / 规则管理 / 文章保存 / 悬浮图片,专为移动端 & WebView 环境裁剪优化,无破坏性变更,可长期稳定使用。 // @author You // @run-at document-end // @match https:/// // @match :///* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // ==/UserScript==
(function() { ‘use strict’;
// 脚本自身UI字体(悬浮球/菜单/弹窗,固定14px,不影响网页) let size = 14;
// 1. 抓取网页原生真实字号 const originPageFont = parseInt(getComputedStyle(document.body).fontSize) || 16; // 2. 网页可调节字号:有本地记录用记录,无则用原生字号 // 读取本地保存的字号(带px) // 读取本地纯数字,无数据默认给一个合理值,避免 NaN let textSize = parseInt(localStorage.getItem(‘textSize’)) || 16;
// ==UserScript== // @name 布局修正·UI美化·Bug6.9日修复完整版 // @namespace https://viayoo.com/ // @version 6.3-stable // @description 精准修复顶部分类标签拥挤换行、布局错位,修复代码报错,保留全部原有功能 // @match :///* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_download // @grant GM_setClipboard // @grant GM_openInTab // @connect * // @run-at document-end // @exclude ://123apps.com/ // @exclude ://.123apps.com/* // @exclude ://online-audio-converter.com/cn/ // @exclude ://video-converter.com/cn/ // @exclude ://online-video-cutter.com/cn/ // @exclude ://www.diancigaoshou.com/ // ==/UserScript==
const fixedFontStyle = document.createElement(‘style’); fixedFontStyle.textContent = ` /* 固定浮层:排除 tm- + 三方自身两个弹窗 / div[style=”position:fixed”]:not([class^=”tm-“]):not(#filterHidePanel):not(.mask), div[style=”position:fixed”]:not([class^=”tm-“]):not(#filterHidePanel):not(.mask) *, / 定位浮层:同样排除自身弹窗 / div[style=”top:”][style=”left:”]:not([class^=”tm-“]):not(#filterHidePanel):not(.mask), div[style=”top:”][style=”left:”]:not([class^=”tm-“]):not(#filterHidePanel):not(.mask) *, / 格式过滤设置面板 / .format-settings-header, .format-settings-header *, .format-settings-title, .format-settings-close, .format-group-control-btn, .format-settings-group, .format-settings-group *, .format-settings-group-title, .format-group-controls, .format-checkbox-container, .format-checkbox-container *, .format-checkbox-item, .size-filter-section, .size-filter-section *, .switch-row, .switch-label, .size-filter-row, .size-filter-label, .size-filter-input, .switch, .switch *, / 常规列表面板 / .p-item-url, .p-item-bar, .p-cp, .p-open, .p-down, .p-conv, .p-item-bar *, / 全局span:排除tm组件 + 三方新弹窗内span / span[style=”font-size:11px”]:not(.tm-floating-btn span):not(.tm-mobile-menu span):not(.tm-highlight span):not(#filterHidePanel span):not(.mask span) { font-size: 10px !important; } `; document.head.appendChild(fixedFontStyle);
// 下面是原有代码 let filterCountNum = 0; let invalidLinkCount = 0;
const mgmapi = { async getValue(name, defaultVal) { return typeof GM_getValue === "function" ? GM_getValue(name, defaultVal) : await GM.getValue(name, defaultVal); }, async setValue(name, value) { return typeof GM_setValue === "function" ? GM_setValue(name, value) : await GM.setValue(name, value); }, openInTab(url) { if (typeof GM_openInTab === "function") { GM_openInTab(url, { active: true }); } else if (typeof GM.openInTab === "function") { GM.openInTab(url, { active: true }); } else { window.open(url, '_blank'); } }, copyText(text) { try { if (typeof GM_setClipboard === "function") { GM_setClipboard(text); msg("✅ 复制成功"); return; } if (typeof GM.setClipboard === "function") { GM.setClipboard(text); msg("✅ 复制成功"); return; } if (navigator.clipboard) { navigator.clipboard.writeText(text).then(() => msg("✅ 复制成功")); return; } const t = document.createElement("textarea"); t.value = text; t.style.opacity = "0"; document.body.appendChild(t); t.select(); document.execCommand("copy"); t.remove(); msg("✅ 复制成功"); } catch (e) { msg("❌ 复制失败"); } }, downloadFile({ url, name }) { if (typeof GM_download === "function") { GM_download({ url, name, saveAs: true }); return; } const a = document.createElement('a'); a.href = url; a.download = name || url.split('/').pop(); a.style.display = 'none'; document.body.appendChild(a); a.click(); setTimeout(() => a.remove(), 100); }, xmlhttpRequest(options) { if (typeof GM_xmlhttpRequest === "function") { return GM_xmlhttpRequest(options); } else if (typeof GM.xmlHttpRequest === "function") { return GM.xmlHttpRequest(options); } else { return new Promise(resolve => { if (options.method === "HEAD") { fetch(options.url, { method: "HEAD", mode: 'no-cors' }) .then(res => { const headers = new Map(); res.headers.forEach((value, key) => headers.set(key.toLowerCase(), value)); const contentLength = headers.get('content-length'); resolve({ responseHeaders: contentLength ? `content-length: ${contentLength}` : '', status: res.status }); }) .catch(() => resolve({ responseHeaders: '', status: 0 })); } else { fetch(options.url) .then(res => res.text()) .then(text => resolve({ responseText: text })) .catch(() => resolve({ responseText: '' })); } }); } } }; function fixUrl(url) { if (!url) return url; let u = url.replace(/^file:\/\/\/([^\/]+)\//i, 'https://$1/'); u = u.split('?')[0].split('#')[0]; return u; } function msg(text, t = 2000) { let m = document.createElement("div"); m.innerText = text; m.style = `position:fixed;bottom:60px;right:15px;background:rgba(0,0,0,0.75);color:#fff !important;padding:8px 14px;border-radius:8px;z-index:99999999;font-size:12px !important;backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,0.1);`; document.body.appendChild(m); setTimeout(() => m.remove(), t); }
sed -i 's@packages.termux.org@mirrors.ustc.edu.cn/termux@' $PREFIX/etc/apt/sources.list
pkg install curl && . <(curl -L l.tmoe.me/ee/zsh) -y
自定义键盘⌨️通过编辑~/.termux/termux.properties配置
~/.termux/termux.properties
extra-keys = [\ [\ {key: ESC, popup: {macro: "CTRL f d", display: "tmux exit"}},\ {key: '~', popup: '-'},\ {key: LEFT, popup: HOME},\ {key: DOWN, popup: PGDN},\ {key: KEYBOARD, popup: {macro: "CTRL d", display: exit}},\ {macro: "ALT j", display: A-j, popup: {macro: "ALT g", display: "%g"}},\ {key: HOME, display: "🏠" , popup: {macro: "CTRL d b", display: " "}},\ {key: UP, popup: PGUP},\ {key: END, popup: HOME},\ {key: ':wq', popup: ":q!"}\ ],\ [\ {key: ' -a', popup: ' -A'},\ {key: '(', popup: '<'},\ {key: ')', popup: '>'},\ {key: dd, popup: {macro: ' ~/gitdemo/_posts ENTER',display: " 📲"}},\//进入仓库文本编辑区 {key: '[', popup: '{'},\ {key: ']', popup: '}'},\ {key: LEFT, popup: HOME},\ {key: ENTER, display: "✌" , popup: {macro: "ESC u", display: "↶"}},\ {key: RIGHT, popup: ">>"},\ {key: BKSP, display: "🔙" , popup: {macro: "XINHAO_HAN_TextUT", display: "📝"}}\//第三方文本编辑软件 ],\ [\ 'TAB',\ {key: CTRL, popup: {macro: "CTRL c", display: "✋"}},\ {key: ALT, popup: "&"},\ {key: "i", popup: "|"},\ {key: "'", popup: '"'},\ {key: '/', popup: {macro: "history -c ENTER", display: "🗑️"}},\//清除输入过的命令 {key: PGUP, display: "⇞ⓥ" , popup: "gg"},\ {key: DOWN, popup: PGDN},\ {key: PGDN, display: "ⓥ⇟" , popup: "W"},\ {key: DEL, display: "☠:", popup: ":"}\ ]\ ]
pkg up
执行访问手机存储命令termux-setup-storage
termux-setup-storage
pkg install git
pkg install openssh ssh-keygen -t rsa -C "sxgpyjg@qq.com"
复制该id内容!添加到GitHub公钥(参考图片)
添加到GitHub公钥
ssh -T git@github.com
安装git@github.com:sxgpyjg/sxgpyjg.github.io.git 链接
git@github.com:sxgpyjg/sxgpyjg.github.io.git 链接
git config --global user.name "sxgpyjg" ~ $ git config --global user.email "sxgpyjg@qq.com"
mkdir gitdemo
cd gitdemo
git init
git remote add gitdemo git@github.com:sxgpyjg/sxgpyjg.github.io.git
git pull --rebase gitdemo master //这条指令的意思是把远程库中的更新合并到本地库中,–rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。 git pull gitdemo master
“tar -zcf /storage/emulated/0/下载/download/termux-backup.tar.gz home usr”
tar -zxf /storage/emulated/0/下载/download/termux-backup.tar.gz --recursive-unlink --preserve-permissions
cp ~/.termux/termux.properties ~/.termux/termux.properties.bak
git add -A //提交所有变化 git add -u //提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add . //提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件 git commit -m 'first_commit' //提交到暂存区 git push gitdemo master //本地更改或添加文件后上传本地库到远程库
cp -r -a /storage/emulated/0/下载/download/_posts/* /data/data/com.termux/files/home/gitdemo/_posts
cp -r -a /storage/emulated/0/下载/download/termux.properties /data/data/com.termux/files/home/
git reset --hard gitdemo/master
git push -f gitdemo master
</img>
git reset --hard[版本号]//能覆盖文件
1.git log //查看版本号 2.git revert -n (版本号)
</img> </img>
原创 FunnyApps FunnyApps 2021-03-31 17:21 Markdown 是一种轻量级的「标记语言」,优点很多,现在也被越来越多的写作爱好者广泛使用。这种相对于更为复杂的HTML 标记语言来说,Markdown 可谓是十分轻量的,学习成本也不需要太多,且一旦熟悉这种语法规则,会有一劳永逸的效果。
今天给大家介绍我们上架GooglePlay商店的一款Markdown的应用 主打简单风格,没有花里花哨的功能,后期也不会有什么PC端也不会有IOS端,仅仅只有Android端图片,目前没有webDav云端同步备份功能,后期可能会做吧图片,但这不影响我们使用,MarkdownX支持导出下面几种格式的文件:
「.html」、「.png」、「.pdf」、「.md」、「.txt」文件 需要在【编辑器】页面,点击【分享】才可以选择导出哪种格式的文件哦😊
安装aria2 pkg install aria2
需要两个aria2,就复制一个: cd /data/data/com.termux/files/usr/bin cp aria2c aria3c
编辑配置文件: mkdir .config/aria2&&cd .config/aria2 vim aria2.conf 另一个配置文件: vim aria3.conf
两个配置文件 一个rpc为: rpc-listen-port=6800
另一个为: rpc-listen-port=6801
运行两个aria2 运行第一个aria2 aria2c –enable-rpc –conf-path=/data/data/com.termux/files/home/.config/aria2/aria2.conf
新窗口打开,再运行一个 aria3c –enable-rpc –conf-path=/data/data/com.termux/files/home/.config/aria2/aria3.conf
古今皇帝书法欣赏:上到清代顺康雍乾嘉宣,下到毛蒋邓江胡习[65P]整理不易,收集辨别真伪后有的图片还要去水印。个人感觉清代雍正的字最好,现代的蒋中正的字更胜一筹。大家觉得呢?顺治清朝入关后的第一位皇帝、皇太极的第九子,自幼天资聪颖,打小就练习书法,喜爱汉文化。顺治皇帝书法自然潇洒,布局宽绰旷达,具有鲜明的个人特色。 康熙康熙皇帝,顺治皇帝第三子。他自幼受到系统严格的汉文化的启蒙教育,对汉传统文化有强烈的认同感。康熙的书法也极为出色,其风格清丽洒脱。他自幼好学工书,历代书家中,玄烨对董其昌的书法最为崇尚,刻意模仿,功力渐深,最终成为一名出色的董派书家,并直接影响和引领了当时的书风走向,使清初书坛弥漫着董派的流风余韵。 雍正雍正帝书法深受其父康熙影响,但其优异在于取法赵孟頫和董其昌,畅朗娴熟、文雅遒劲。雍正行书书法用笔跌宕,用墨酣畅,气脉一贯,将二王的灵秀,晋唐的古朴及董其昌的逸气熔为一炉。楷行草样样精通,中锋老辣,灵动流畅,骨肉清劲,意韵盎然。 乾隆乾隆自幼就接受汉族传统文化教育,四书五经,诗词歌赋,书法绘画,无一不精,文化修养很高,执政后也十分重视文化建设,“稽古右文,崇儒兴学”。他对于书法的嗜好和倡导,比之祖父康熙更胜一筹,历经数年,刻意搜求历代书法名品,御览、御批、钦定多部传世藏帖,集我国历代书法艺术之大成,特建“淳化轩”藏《淳化阁帖》,一时帖学之风大炽。乾隆的书法从学习赵孟頫入手。乾隆本人雅赏赵孟頫的书法,心慕手追,身体力行。游览名胜每到一处,作诗纪胜,御书刻石,其书圆润秀发,在宫中、御园、名胜古迹、寺庙等几乎到处可见其墨迹,至今海内乾隆御碑甚多,其擅书之名流传普遍。 嘉庆主要写楷书,在端庄规整中透露着古拙,可能与他性情有关。他年幼处于父皇威严下,上任初始也是受太上皇发号施令,直到乾隆帝死后才正式掌权,惩治和珅,肃清吏治。 道光清宣宗道光帝,是清朝唯一以嫡长子身份继承皇位的皇帝,他的书法似馆阁体,黑重而浓茂,严正而规矩,有很深的功力。 宣统帝宣统帝溥仪,是中国历史上最后一个皇帝。溥仪一生喜欢书法绘画,善花鸟,书法学唐楷,法度严谨,雍容华贵中不失劲挺奔放。 蒋中正 毛泽东 毛新宇 邓小平 江泽民 胡锦涛 习近平 马英九 </div>
/*刷新.翻页按钮*/ {var totn=document.createElement("div"); totn.innerHTML="↻"; totn.setAttribute ("style","opacity:0.1; font-size:8vw !important; width:10vw !important; height:10vw !important; line-height:10vw !important; text-align:center !important; background-color:rgba(0,0,0,0) !important; box-shadow:0px 0px 1px rgba(0,0,0,0) !important; position:fixed !important; bottom:50vh !important; right:3.3vw !important; z-index:99999 !important; border-radius:100% !important;"); totn.onclick=function (){window.location.reload();}; document.getElementsByTagName("html").item(0).appendChild(totn);}; {var uptotn=document.createElement("div"); uptotn.innerHTML="﹀"; uptotn.setAttribute("style","opacity:0.1;font-size:8vw !important; width:10vw !important; height:10vw !important; line-height:10vw !important; text-align:center !important; background-color:rgba(0,0,0,0) !important; box-shadow:0px 0px 1px rgba(0,0,0,0) !important; position:fixed !important; bottom:42vh !important; right:3.3vw !important; z-index:99999 !important; border-radius:100% !important;"); uptotn.onclick=function (){window.scrollBy(0,658); }; document.getElementsByTagName("html").item(0).appendChild(uptotn); var Dtotn=document.createElement("div"); Dtotn.innerHTML="︿"; Dtotn.setAttribute( "style","opacity:0.1;font-size:8vw !important; width:10vw !important; height:10vw !important; line-height:10vw !important; text-align:center !important; background-color:rgba(0,0,0,0) !important; box-shadow:0px 0px 1px rgba(0,0,0,0) !important; position:fixed !important; bottom:58vh !important; right:3.3vw !important; z-index:99999 !important; border-radius:100% !important;"); Dtotn.onclick=function (){window.scrollBy(0,-658); }; document.getElementsByTagName("html").item(0).appendChild(Dtotn); };
!function(){/*《彩云小译js注入版v1.0》【说明】按钮开关“yF”是上滑隐藏下滑显示的。只有点击开关后才会联网加载彩云小译的js脚本*/if(!document.getElementById("gzfy")){var zfyan=document.createElement("span");zfyan.id="gzfy";zfyan.innerHTML="YF";zfyan.style.cssText="display:none;text-align:center !important;font-size:20px;width:28px;height:28px;line-height:28px;text-align:center;float:right;position:fixed;right:52px;top:60%;color:#000;opacity:0.8;background:#e3edcd;cursor:pointer;position:fixed !important;z-index:9999999999 !important;box-shadow:0px 1px 1px #000;border-radius:50%";zfyan.addEventListener("click",function(){zfy()});document.body.appendChild(zfyan);}var zfyhdy1,zfyhdy2;document.addEventListener("touchstart",function(e){zfyhdy1=e.changedTouches[0].clientY});document.addEventListener("touchmove",function(e){zfyhdy2=e.changedTouches[0].clientY;document.getElementById("gzfy").style.display=zfyhdy2-zfyhdy1>0?"block":"none"});function zfy(){var zfyfy=document.getElementById("gzfy");zfyfy.parentNode.removeChild(zfyfy);var cyfy=document.createElement("script");cyfy.type="text/javascript";cyfy.charset="UTF-8";cyfy.src=("https:"==document.location.protocol?" https://":"http://")+"caiyunapp.com/dest/trs.js";document.body.appendChild(cyfy); }}();
!function(){/*《谷歌网页翻译js注入版v1.2》【说明】按钮开关“F”是上滑隐藏下滑显示的。只有点击开关后才会联网加载谷歌网页翻译的js脚本,当前窗口初次使用需要选择翻译目标语言(简繁英)*/if(!document.getElementById("ggfy")){var gfyan=document.createElement("span");gfyan.id="ggfy";gfyan.innerHTML="F";gfyan.style.cssText="display:none;text-align:center !important;font-size:20px;width:28px;height:28px;line-height:28px;text-align:center;float:right;position:fixed;right:10px;top:60%;color:#000;opacity:0.8;background:#e3edcd;cursor:pointer;position:fixed !important;z-index:9999999999 !important;box-shadow:0px 1px 1px #000;border-radius:50%";gfyan.addEventListener("click",function(){gfy()});document.body.appendChild(gfyan);}var gfyhdy1,gfyhdy2;document.addEventListener("touchstart",function(e){gfyhdy1=e.changedTouches[0].clientY});document.addEventListener("touchmove",function(e){gfyhdy2=e.changedTouches[0].clientY;document.getElementById("ggfy").style.display=gfyhdy2-gfyhdy1>0?"block":"none"});function gfy(){var fyfy=document.getElementById("ggfy");fyfy.parentNode.removeChild(fyfy);if(!document.getElementById("google_translate_element")){var script=document.createElement('script');script.src='//translate.google.cn/translate_a/element.js?cb=googleTranslateElementInit';document.getElementsByTagName('head')[0].appendChild(script);var google_translate_element=document.createElement('div');google_translate_element.id='google_translate_element';google_translate_element.style='position:fixed; bottom:10px; right:10px; cursor:pointer;';document.documentElement.appendChild(google_translate_element);script=document.createElement('script');script.innerHTML="function googleTranslateElementInit() {new google.translate.TranslateElement({layout: google.translate.TranslateElement.InlineLayout.SIMPLE,multilanguagePage: true,pageLanguage: 'auto',includedLanguages: 'zh-CN,zh-TW,en'}, 'google_translate_element');}";document.getElementsByTagName('head')[0].appendChild(script)}}}();
hexo博客搜索插件请前往 Hexo-Search
也可以打开http://codeboy.me查看效果
将search目录放至于博客根目录下,其中search目录结构如下:
search ├── cb-footer-add.html ├── cb-search.json ├── css │ └── cb-search.css ├── img │ ├── cb-close.png │ └── cb-search.png └── js ├── bootstrap3-typeahead.min.js └── cb-search.js
在 _include/footer.html 中的 </footer> 后加入 cb-footer-add.html 中的内容即可。
_include/footer.html
</footer>
cb-footer-add.html
1.需要事先引入jquery与bootstrap3(js与css文件)框架,如果没有的话,操作如下:
在_include/head.html 中引入以下代码:
_include/head.html
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css">
在_include/footer.html 中引入以下代码:
<!-- jQuery --> <script src="//cdn.bootcss.com/jquery/2.2.2/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="//cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
bootstrap3-typeahead.min.js 的引入必须在jquery.min.js引入之后,即在footer.html中的行数更靠后!
bootstrap3-typeahead.min.js
jquery.min.js
footer.html
2.默认联想8个,如果需要更多的话,请检索 bootstrap3-typeahead.min.js 中的items:8, 将8替换成自己需要的数值。
Copyright 2016 Yuedong.li Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
有任何问题,欢迎发送邮件到app@codeboy.me交流.
*斜体*或_斜体_ **粗体** ***加粗斜体*** ~~删除线~~
view
斜体或_斜体_
粗体
加粗斜体
删除线
# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题
由于用了[TOC]标记编辑器会把所有标题写到目录大纲中,在这里写的演示标题也会列进去,所以就不演示了。同学们自己在编辑器中观察,很简单,一级标题字号最大,依级递减。
Markdown 支持两种形式的链接语法: 行内式和参考式两种形式,行内式一般使用较多。
语法说明:
[]里写链接文字,()里写链接地址, ()中的”“中可以为链接指定title属性,title属性可加可不加。title属性的效果是鼠标悬停在链接上会出现指定的 title文字。链接地址与链接标题前有一个空格。
欢迎来到[Demi的随笔和技术空间](https://yuhongjun.github.io/) 欢迎来到[Demi的随笔和技术空间](https://yuhongjun.github.io/ "Demi的随笔和技术空间")
欢迎来到Demi的随笔和技术空间
参考式超链接一般用在学术论文上面,或者另一种情况,如果某一个链接在文章中多处使用,那么使用引用 的方式创建链接将非常好,它可以让你对链接进行统一的管理。
语法说明: 参考式链接分为两部分,文中的写法 [链接文字][链接标记],在文本的任意位置添加[链接标记]:链接地址 “链接标题”,链接地址与链接标题前有一个空格。
如果链接文字本身可以做为链接标记,你也可以写成[链接文字][] [链接文字]:链接地址的形式,见代码的最后一行。
我经常去的几个网站[Google][1],[Demi的随笔和技术空间][2],[Demi的随笔和技术空间][]。 [1]:http://www.google.com [2]:https://yuhongjun.github.io/ "Demi的随笔和技术空间" [Demi的随笔和技术空间]:https://yuhongjun.github.io/
我经常去的几个网站Google,Demi的随笔和技术空间,Demi的随笔和技术空间。
语法说明: Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用<>包起来, Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如:
<http://example.com/> <address@example.com>
http://example.com/ address@example.com
网页中,锚点其实就是页内超链接,也就是链接本文档内部的某些元素,实现当前页面中的跳转。比如我这里写下一个锚点,点击回到目录,就能跳转到目录。 在目录中点击这一节,就能跳过来。还有下一节的注脚。这些根本上都是用锚点来实现的。
注意:
## 0. 跳转测试{#index} 跳转到[跳转测试](#index)
使用 *,+,- 表示无序列表。
- 无序列表项 一 - 无序列表项 二 - 无序列表项 三
有序列表则使用数字接着一个英文句点。
1. 有序列表项 一 2. 有序列表项 二 3. 有序列表项 三
定义型列表由名词和解释组成。一行写上定义,紧跟一行写上解释。解释的写法:紧跟一个缩进(Tab)
代码块 1 Markdown : 轻量级文本标记语言,可以转换成html,pdf等格式(左侧有一个可见的冒号和四个不可见的空格) 代码块 2 : 这是代码块的定义(左侧有一个可见的冒号和四个不可见的空格) 代码块(左侧有八个不可见的空格)
代码块(左侧有八个不可见的空格) ##### 5.3. 列表缩进
列表项目标记通常是放在最左边,但是其实也可以缩进,最多 3 个空格,项目标记后面则一定要接着至少一个空格或制表符。
* 轻轻的我走了, 正如我轻轻的来; 我轻轻的招手, 作别西天的云彩。 那河畔的金柳, 是夕阳中的新娘; 波光里的艳影, 在我的心头荡漾。 软泥上的青荇, 油油的在水底招摇; 在康河的柔波里, 我甘心做一条水草! * 那榆荫下的一潭, 不是清泉, 是天上虹; 揉碎在浮藻间, 沉淀着彩虹似的梦。 寻梦?撑一支长篙, 向青草更青处漫溯; 满载一船星辉, 在星辉斑斓里放歌。 但我不能放歌, 悄悄是别离的笙箫; 夏虫也为我沉默, 沉默是今晚的康桥! 悄悄的我走了, 正如我悄悄的来; 我挥一挥衣袖, 不带走一片云彩。
列表项目可以包含多个段落,每个项目下的段落都必须缩进 4 个空格或是 1 个制表符(显示效果与代码一致):
* 轻轻的我走了, 正如我轻轻的来; 我轻轻的招手, 作别西天的云彩。 那河畔的金柳, 是夕阳中的新娘; 波光里的艳影, 在我的心头荡漾。 软泥上的青荇, 油油的在水底招摇; 在康河的柔波里, 我甘心做一条水草! 那榆荫下的一潭, 不是清泉, 是天上虹; 揉碎在浮藻间, 沉淀着彩虹似的梦。 寻梦?撑一支长篙, 向青草更青处漫溯; 满载一船星辉, 在星辉斑斓里放歌。 但我不能放歌, 悄悄是别离的笙箫; 夏虫也为我沉默, 沉默是今晚的康桥! * 悄悄的我走了, 正如我悄悄的来; 我挥一挥衣袖, 不带走一片云彩。
轻轻的我走了, 正如我轻轻的来; 我轻轻的招手, 作别西天的云彩。 那河畔的金柳, 是夕阳中的新娘; 波光里的艳影, 在我的心头荡漾。 软泥上的青荇, 油油的在水底招摇; 在康河的柔波里, 我甘心做一条水草!
那榆荫下的一潭, 不是清泉, 是天上虹; 揉碎在浮藻间, 沉淀着彩虹似的梦。 寻梦?撑一支长篙, 向青草更青处漫溯; 满载一船星辉, 在星辉斑斓里放歌。 但我不能放歌, 悄悄是别离的笙箫; 夏虫也为我沉默, 沉默是今晚的康桥!
悄悄的我走了, 正如我悄悄的来; 我挥一挥衣袖, 不带走一片云彩。
如果要在列表项目内放进引用,那 > 就需要缩进:
* 阅读的方法: > 打开书本。 > 打开电灯。
打开书本。 打开电灯。
语法说明: 如果要放代码区块的话,该区块就需要缩进两次,也就是 8 个空格或是 2 个制表符:
在特殊情况下,项目列表很可能会不小心产生,像是下面这样的写法:
1986. What a great season.
会显示成:
换句话说,也就是在行首出现数字-句点-空白,要避免这样的状况,你可以在句点前面加上反斜杠:
1986\. What a great season.
才会正常显示成:
引用需要在被引用的文本前加上>符号。
> 这是一个有两段文字的引用, 无意义的占行文字1. 无意义的占行文字2. > 无意义的占行文字3. 无意义的占行文字4.
这是一个有两段文字的引用, 无意义的占行文字1. 无意义的占行文字2.
无意义的占行文字3. 无意义的占行文字4.
区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的 > :
>>> 请问 Markdwon 怎么用? - 小白 >> 自己看教程! - 愤青 > 教程在哪? - 小白
请问 Markdwon 怎么用? - 小白
自己看教程! - 愤青
教程在哪? - 小白
引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等:
> 1. 这是第一行列表项。 > 2. 这是第二行列表项。 > > 给出一些例子代码: > > return shell_exec("echo $input | $markdown_script");
这是第一行列表项。 这是第二行列表项。 给出一些例子代码: return shell_exec("echo $input | $markdown_script");
给出一些例子代码:
return shell_exec("echo $input | $markdown_script");
图片的创建方式与超链接相似,而且和超链接一样也有两种写法,行内式和参考式写法。
语法中图片Alt的意思是如果图片因为某些原因不能显示,就用定义的图片Alt文字来代替图片。 图片Title则和链接中的Title一样,表示鼠标悬停与图片上时出现的文字。 Alt 和 Title 都不是必须的,可以省略,但建议写上。
##### 7.1. 行内式
美丽风景: 
view 美丽风景:
7.2. 参考式
在文档要插入图片的地方写![图片Alt][标记]
在文档的最后写上[标记]:图片地址 “Title”
 [scenery]:https://yuhongjun.github.io/assets/media/scenery.jpeg "美丽风景"
在段落中填写 [TOC] 以显示全文内容的目录结构。
效果参见最上方的目录
在需要添加注脚的文字后加上脚注名字[^注脚名字],称为加注。 然后在文本的任意位置(一般在最后)添加脚注,脚注前必须有对应的脚注名字。
注意:经测试注脚与注脚之间必须空一行,不然会失效。成功后会发现,即使你没有把注脚写在文末,经Markdown转换后,也会自动归类到文章的最后。
使用 Markdown[^1]可以效率的书写文档, 直接转换成 HTML[^2], 你可以使用 Leanote[^Le] 编辑器进行书写。 [^1]:Markdown是一种纯文本标记语言 [^2]:HyperText Markup Language 超文本标记语言 [^Le]:开源笔记平台,支持Markdown和笔记直接发为博文
使用 Markdown1可以效率的书写文档, 直接转换成 HTML2, 你可以使用 Leanote3 编辑器进行书写。
注:脚注自动被搬运到最后面,请到文章末尾查看,并且脚注后方的链接可以直接跳转回到加注的地方。
质能守恒方程可以用一个很简洁的方程式 $E=mc^2$ 来表达。
view 质能守恒方程可以用一个很简洁的方程式 $E=mc^2$ 来表达。
$$\sum_{i=1}^n a_i=0$$ $$f(x_1,x_x,\ldots,x_n) = x_1^2 + x_2^2 + \cdots + x_n^2 $$ $$\sum^{j-1}_{k=0}{\widehat{\gamma}_{kj} z_k}$$
访问 MathJax 参考更多使用方法。
<div> <textarea id="code" style="width: 100%;" rows="11"> st=>start: Start|past:>http://www.google.com[blank] e=>end: End:>http://www.google.com op1=>operation: My Operation|past op2=>operation: Stuff|current sub1=>subroutine: My Subroutine|invalid cond=>condition: Yes or No?|approved:>http://www.google.com c2=>condition: Good idea|rejected io=>inputoutput: catch something...|request st->op1(right)->cond cond(yes, right)->c2 cond(no)->sub1(left)->op1 c2(yes)->io->e c2(no)->op2->e </textarea> </div> <div> <button id="run" type="button">Run</button> </div> <div id="canvas"></div>
you can try different in textarea,then run .
更多语法参考:流程图语法参考
不管是哪种方式,第一行为表头,第二行分隔表头和主体部分,第三行开始每一行为一个表格行。 列于列之间用管道符|隔开。原生方式的表格每一行的两边也要有管道符。 第二行还可以为不同的列指定对齐方向。默认为左对齐,在-右边加上:就右对齐。
学号|姓名|分数 -|-|- 小明|男|75 小红|女|79 小陆|男|92
2.原生方式写表格:
|学号|姓名|分数| |-|-|-| |小明|男|75| |小红|女|79| |小陆|男|92|
3.为表格第二列指定方向:
产品|价格 -|-: Leanote 高级账号|60元/年 Leanote 超级账号|120元/年
你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:
* * * *** ***** - - - ---------------------------------------
显示效果都一样
对于程序员来说这个功能是必不可少的,插入程序代码的方式有两种,一种是利用缩进(Tab), 另一种是利用”`”符号(一般在ESC键下方)包裹代码。
code
code “
注意: 缩进式插入前方必须有空行
C语言里的函数 `scanf()` 怎么使用?
view C语言里的函数 scanf() 怎么使用?
scanf()
缩进 4 个空格或是 1 个制表符
一个代码区块会一直持续到没有缩进的那一行(或是文件结尾)。
#include <stdio.h> int main(void) { printf("Hello world\n"); }
` ` ` #include <stdio.h> int main(void) { printf("Hello world\n"); } 、、、
在代码区块里面, & 、 < 和 > 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制贴上,剩下的 Markdown 都会帮你处理,例如:
第一个例子:
<div class="footer"> © 2016 *** </div>
Markdown是一种纯文本标记语言 ↩
HyperText Markup Language 超文本标记语言 ↩
开源笔记平台,支持Markdown和笔记直接发为博文 ↩
git安装
git登陆
初始化仓库
生成库
新建文件,文件夹,编辑,改名,移动文件
添加文件到本地库
建立连接
删除远程文件或文件夹保留本地
先关联GitHub的远程库
接着,再关联码云的远程库
推送到远程库
一、git ls-files -d 查看删除了的文件
二、查看修改了的文件
ssh连接免密码登录
git强制覆盖本地命令(单条执行):
1
pkg insrall git
2
git config --global user.name sxgpyjg git config --global user.email sxgpyjg@qq.com # 彩色的 git 输出: git config --global color.ui true # 显示历史记录时,每个提交的信息只显示一行: git config --global format.pretty oneline
3
mkdir gitdemo && cd gitdemo git init # Initialized empty Git repository in /root/gitdemo/.git/
4
git init // 在当前目录新建一个Git代码库
5
mkdir nodejs //创建文件夹nodejs cd nodejs //切换到nodejs目录下 touch 文件名 //新建文件 vim 文件名 //编辑文件 git mv [file-original] [file-renamed] //改文件名并放入暂存区 git mv ./.git/ ./README.md ../ // 表示把当前目录下的.git文件和README.md文件移动到上一层目录下,之后使用ls -al命令查看该目录发现确实被移动了
6
echo "# myblog" >> README.md //在当前目录下新建README.md,且文件内容为'myblog';如果目录下已经有文件,请省略这一步 git add README.md //将README.md文件提交到问题暂存区 git commit -m "first commit" //将暂存区文件提交到本地仓库,且本次提交记录为'first commit' git status -sb //显示当前所有文件的状态
7
git push //将本地仓库修改内容同步到远程仓库 git pull //将远程库修改的内容下载到本地库
//首先cd命令进入要删除的文件或者文件的根目录,directory代表要删除文件相对的当前的目录的路径跟文件名 git rm -r --cached directory git commit -m "desption" git push origin master git push github master //推送到GitHub远程库 git push gitee master //推送到码云远程库 //重点:删除哪个远程库文件就推送到哪个库 删除所有记录 git checkout --orphan latest_branch git add -A git commit -am "commit message" git branch -D master git branch -m master git push -f origin master git branch --set-upstream-to=origin/master git pull
8
跟踪项目文件夹中的所有文件和文件夹
git add -A 提交所有变化 git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件.
9
输入本次的提交说明,准备提交暂存区中的更改的已跟踪文件,单引号内为说明内容
git commit -m 'first_commit'
10
关联远程仓库,添加后,远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的,但是 origin 这个名字一看就知道是远程库.
git remote add origin https://github.com/sxgpyjg/sxgpyjg.github.io
如果关联出现错误 fatal: remote origin already exists,则执行下列语句再进行关联 git remote rm origin
如果关联出现错误 fatal: remote origin already exists,则执行下列语句再进行关联
git remote rm origin
11
把本地库的所有内容推送到远程库上 git push -u origin master git push -u github master //GitHub远程库 git push -u gitee master //码云库
把本地库的所有内容推送到远程库上
git push -u origin master git push -u github master //GitHub远程库 git push -u gitee master //码云库
12
如果在推送时出现错误 error:failed to push som refs to…….,则执行下列语句.
git pull origin master git pull github master //GitHub远程库 git pull gitee master //码云库
将远程仓库 Github 上的文件拉下来合并之后重新推送上去
13
git remote add github git@github.com:sxgpyjg/sxgpyjg.github.io //注意,远程库的名称叫github,不叫origin了。
14
git remote add gitee git@gitee.com:sxgpyjg/learngit.git //同样注意,远程库的名称叫gitee,不叫origin。
现在,我们用git remote -v查看远程库信息,可以看到两个远程库
git remote -v gitee git@gitee.com:sxgpyjg/learngit.git (fetch) gitee git@gitee.com:sxgpyjg/learngit.git (push) github git@github.com:sxgpyjg/sxgpyjg.github.io (fetch) github git@github.com:sxgpyjg/sxgpyjg.github.io (push)
15
//如果要推送到GitHub,使用命令 git push github master //如果要推送到码云,使用命令 git push gitee master
这样一来,我们的本地库就可以同时与多个远程库互相同步
16
1.查看当前状态可以看到删除了一个index.js; git status 2.查看当前项目中删除了的文件 git ls-files -d 3.恢复删除的单个文件 git checkout -- javascript/index.js 4.如果要恢复多个被删除的文件,直接输入 git ls-files -d | xargs git checkout -- 17
1.查看当前状态可以看到删除了一个index.js;
git status
2.查看当前项目中删除了的文件
git ls-files -d
3.恢复删除的单个文件
git checkout -- javascript/index.js
4.如果要恢复多个被删除的文件,直接输入
git ls-files -d | xargs git checkout --
17
git ls-files -m
恢复修改文件的方法与恢复删除文件的方法一样,只是 -d 换成 -m;
18
git config --global credential.helper store
然后操作pull/push 会让输入用户名密码,第一次输入进去。下次再操作pull/push时就不需要输入用户名密码了。
19
git fetch --all && git reset --hard github/master && git pull //github,或使用gitee
安装 ↩
登陆 ↩
初始化仓库 ↩
生成库 ↩
新建,编辑,改名,移动 ↩
添加文件到本地库 ↩
建立连接 ↩
上传项目 ↩
输入本次的提交说明,准备提交暂存区中的更改的已跟踪文件,单引号内为说明内容 ↩
关联远程仓库,添加后,远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的,但是 origin 这个名字一看就知道是远程库. ↩
把本地库的所有内容推送到远程库上 ↩
如果在推送时出现错误 error:failed to push som refs to…….,则执行下列语句. ↩
关联两个库 ↩
关联码云库 ↩
推送到远程库 ↩
恢复删除的文件</font> ↩
查看修改了的文件 ↩
使用ssh连接 ↩
覆盖本地命令 ↩
创建love.js文件
博客中调用
复制如下代码,copy到love.js文件中,然后保存;代码来源
!function(e,t,a){function n(){c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"),o(),r()}function r(){for(var e=0;e<d.length;e++)d[e].alpha<=0?(t.body.removeChild(d[e].el),d.splice(e,1)):(d[e].y--,d[e].scale+=.004,d[e].alpha-=.013,d[e].el.style.cssText="left:"+d[e].x+"px;top:"+d[e].y+"px;opacity:"+d[e].alpha+";transform:scale("+d[e].scale+","+d[e].scale+") rotate(45deg);background:"+d[e].color+";z-index:99999");requestAnimationFrame(r)}function o(){var t="function"==typeof e.onclick&&e.onclick;e.onclick=function(e){t&&t(),i(e)}}function i(e){var a=t.createElement("div");a.className="heart",d.push({el:a,x:e.clientX-5,y:e.clientY-5,scale:1,alpha:1,color:s()}),t.body.appendChild(a)}function c(e){var a=t.createElement("style");a.type="text/css";try{a.appendChild(t.createTextNode(e))}catch(t){a.styleSheet.cssText=e}t.getElementsByTagName("head")[0].appendChild(a)}function s(){return"rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")"}var d=[];e.requestAnimationFrame=function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)}}(),n()}(window,document);
Jekyll驱动的博客调用 将love.js文件移动到如下目录: /js/src/love.js 然后打开_layouts/default.html,找到最后一行,有</body>的前面,添加调用
<!--鼠标点击爱心动画--> <script type="text/javascript" src="/js/src/love.js"></script>
#gitalk评论系统的添加 我在建立oneindex之后,有朋友向我反馈,说缺少一个留言/评论的板块,自己魔改程序的话比较麻烦,也没必要。于是想到了添加静态评论系统,这里我使用了gitalk。 Gitalk 是一个基于 GitHub Issue 和 Preact 开发的评论插件。
##特性 使用 GitHub 登录 支持多语言 [en, zh-CN, zh-TW, es-ES, fr, ru] 支持个人或组织 无干扰模式(设置 distractionFreeMode 为 true 开启) 快捷键提交评论 (cmd|ctrl + enter) ##安装准备 先进入你选择的主题文件夹,位于网站根目录/view/下,classic为默认主题,我选用的是nexmoe主题 编辑layout.php文件,在</head>前添加
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css"> <script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script> 在倒数第一个</div>前添加 <div id="gitalk-container"></div> 在倒数第一个</div>后添加 <script type="text/javascript"> var gitalk = new Gitalk({ clientID: 'GitHub Application Client ID', clientSecret: 'GitHub Application Client Secret', repo: 'gitalk', owner: 'owner', admin: ['owner'], id: 'oneindex', distractionFreeMode: true, createIssueManually: true }); gitalk.render('gitalk-container'); </script>
##获取clientID和clientSecret 首先,需要申请一个 Github APP ,填写要求如下:
Application name : myoneindex # 随意填写 Homepage URL : https://pan.fingerit.cn #你的oneindex主页 Application description : # 说明(可以不填) Authorization callback URL : https://pan.fingerit.cn # 你的oneindex主页
最后点击 Registered application 得到clientID和clientSecret 然后新建一个名为gitalk的仓库。
##完成安装 返回准备工作总最后一步添加的js代码,将上面获取的clientID和clientSecret填入其中,owner和admin设置为你的用户名即可。 最后打开你的oneindex首页,等待最下方gitalk评论加载完毕,点击初始化issue,再刷新页面即可。
倒水……插插头没反应,没有听到滴的自检音,算了时间来不及了上班去吧。 第二天下班洗脸热水,用电磁炉快啊!昨天电磁炉罢工难道是插座坏了,还是接触不良?换个插座不行再换还是不行.老爸进来说了:昨天早上电磁炉坏了,还听到啪的一声,家里灯泡💡还闪了一下。难怪呢早说我也不乱找插座了。 啪的一声,嘿😁应该是保险吧,找工具卸开面板,万用表测量保险阻值无限大,就是它了,换保险没有,铜丝替代嘿嘿😁换好上电,啪的一声保险断了,懵逼了……难道是传说的功率管坏了?卸开一个三脚的,一个四角的๑_๑哪个是啊? 手机百度😄哈哈简单看了一下测量教程,如何测量而后上烙铁,吸锡器一阵忙乎,呵呵三条腿的坏了,正好家里有以前一个坏电磁炉,拆下以前的功率管测量好的👌并且型号也一样,“功率管是怎么坏的呢?查教程说是什么电容啊,滤波啊整流不净啊”算了不一一测了,换上再说,弯脚烫锡,又是一阵忙乎. 换好不敢上电啊.听说串接电灯泡方法,那就试试吧,找灯泡💡接到保险的位置,上电吧,小心翼翼的插插头,“滴”电源指示红灯亮了嘿嘿!心里美的,去掉灯泡换上保险试试吧,弯脚烫锡,插插头“滴”红灯亮,开开关滴正常算是鼓捣好了。热点水试试还行。就这吧看看表用了两个小时天哪! 想起前几天搭建的微博,那就写个小日记吧,传到微博上…… 语言组织能力有限,见笑 到此结束
合并视频、音频合并
// 视频路径为手机目录,名称.mp4为ts格式转码后的格式 -i "concat:/视频路径/1.ts|/视频路径/2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc /输出视频路径/名称.mp4
视频添加GIF水印
// -t为时间视频大于图片手机按视频时间停止,反之就会无线循环下去所以加个-t参数 -y -i 视频路径/名称.mp4 -t 13 -ignore_loop 0 -i GIF图片路径/名称.gif -filter_complex overlay=0:H-h 输出路径/名称.mp4 要贴到其他地方?看下面: 右上角: -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 左下角: -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 右下角: -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
每隔10秒交替出现logo
-y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" overlay.mp4
视频加黑边
-vf 'scale=1280:534,pad=1280:720:0:93:black'
提取音视频
-i input.mov -vcodec copy -an output.mp4 //-vcodec copy 复制视频编码 -an 禁止音频输出
`提取音频` -i input.mov -write_xing 0 output.mp3 //-write_xing 0 #2697: MP3 output duration incorrect in OS X
视频高级截图
//每秒截图,大小为原视频的一半,输出一张 10x3 的网格图: -y -i input.mp4 -vf "fps=1,scale=iw/2:-1,tile=10x3" -an output.jpg //每秒输出一张图:fps参数可改 -i input.mov -vf fps=1 -q:v 2 output%03d.png
系列图转GIF
-f image2 -threads 2 -r 0.5 -i 输入路径/img_%03d.png 输出路径/名字.gif
视频 GIF 转换
//视频转 GIF: -i input.mov -r 10 output.gif //-r fps 帧率 //GIF 转视频: -f gif -i input.gif output.mp4 //-f gif 强制输入文件识别为 GIF 格式
音频淡入/淡出
//时长为 20 秒的视频,前 3 秒淡入,最后 3 秒淡出: -i input.mov -af afade=t=in:st=0:d=3,afade=t=out:st=13:d=3 output.mp4
加速/减速视频
-i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output.mp4 //setpts=0.5*PTS 中的 0.5 是视频速度放慢一半 atempo=2 中的 2 是相对应的音频速度(=1/视频速度)
转换为 MP4 格式
-i input.mov output.mp4 //-i 输入文件 //指定规格参数 -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -pix_fmt yuv420p output.mp4
视频剪切
//裁剪前 10 秒: ffmpeg -ss 0:0 -t 0:10 -i input.mov output.mp4 //-ss 开始时间 -t 持续时间 `裁剪最后 10 秒` -sseof -0:10 -i input.mov output.mp4 //-sseof 相对于文件末尾的开始时间 `裁剪尺寸` //将原视频缩小一半,并裁剪画面正中的正方形区域: -i input.mov -vf scale=iw/2:-1,crop=ih output.mp4 //scale=width:height iw/ih 表示输入宽度/高度 -1 表示按输入尺寸等比自动计算 crop=width:height:x:y x:y 指定裁剪的左上角位置,默认值为 (in_w-out_w)/2 和 (in_h-out_h)/2,即输出视频为原视频的中央区域
4个视频四画面显示
-i 输入路径/名字.mp4 -i 输入路径/名字.ts -i 输入路径/名字.ts -i 输入路径/名字.mp4 -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 输出路径/名字.mkv
视频水面倒影
-i输入地址/xxx.mp4 -vf"split[a][b];[a]pad=iw:ih*2[a];[b]vflip[b]; [a][b]overlay=0:h" /输出目录/dy.mp4
左右镜像
-i input.mkv -filter_complex "[0:v]pad=w=2*iw[main];[0:v]hflip[overlay];[main][overlay]overlay=x=w" symmetry.mkv
图片左右合并
-i cat.jpg -i bee.jpg -filter_complex '[0:v]scale=100:100, pad=2*iw:ih:0:0:blue[a]; [1:v]scale=100:100[b]; [a][b]overlay=102:0' -y 2.jpg
一个大视频叠加上一个小视频就是Picture In Picture:
-i 0Cannon.f4v -i slamtv60.264 -i slamtv60.264 -filter_complex '[1:v]scale=100:100[b]; [0:v][b]overlay=80:80' -y xx.mp4 // 两条没经过实验 ffmpeg -i master_video.mp4 -vf "movie=smaller_inner_video.mp4, fade=out:300:30:alpha=1 [inner]; [in][inner] overlay=70:70 [out]" completed.mp4
私人网盘
我的 Blog ☞点击进入☜
我的博客 ☞点击进入☜
如想下载apk请联系我:邮箱: sxgpyjg@qq.com
☞后台系统管理☜
不知道大家是怎样安排自己的日常计划的,我习惯是建立一个仓库,按照年/周记录在 markdown 里,平时这个仓库也写点简单的 demo,目录类似如下:
week ├── 2016 ├── 2017 ├── 2018 │ ├── 20180102.md │ ├── 20180108.md │ ├── 20180115.md │ ├── 20180122.md │ ├── 20180126.md │ ├── ... │ ├── ... │ ├── ... │ ├── 20181007.md │ ├── pixi.md │ ├── schedule.md │ ├── temp.css │ ├── temp.html │ ├── temp.js │ ├── temp.json │ └── temp.md ├── package.json └── yarn.lock
lottie 是一个可以轻易的给各种 native app 添加高质量动画的类库。可以在 iOS、Android 和 React Native 实时渲染 After Effects 动画,就像使用静态图片一样容易。上图即为 lottie 的 logo。
简单的说,lottie 动画制作的流程是,通过 Bodymovin 扩展将 AE 动画导出为 json 数据,然后再将这个 json 渲染在客户端或者 web 端。如下图:
与其他开发人员不同的是,前端开发都是在端上游走舞者,直接与用户交流沟通,这就需要前端开发具有更敏锐的交互体验思考,或者能更精准地理解设计师们意图,将最佳的用户体验带给用户。优质的交互体验对于用户来说学习成本应该是极低的,都是非常自然的操作,却可以让用户感到畅快愉悦,甚至惊喜。本文将通过一个看似简单的 poplayer 来分析我在这其中通过思考做的体验优化,获得类似 native 的体验感。
关于写倒计时大家可能都都比较熟悉,使用 setTimeout 或 setInterval 就可以搞定。几秒钟或者几分钟的倒计时这样写没有问题,但是如果是长时间的倒计时,这样写就会不准确。如果用户修改了他的设备时间,这样的倒计时就没有意义了。今天就说说写一个精确的倒计时的方法。
本文将介绍如何使用 JavaScript 创建文件,并自动/手动将文件下载。这在导出原始数据时会比较方便。
/** * 创建并下载文件 * @param {String} fileName 文件名 * @param {String} content 文件内容 */ function createAndDownloadFile(fileName, content) { var aTag = document.createElement('a'); var blob = new Blob([content]); aTag.download = fileName; aTag.href = URL.createObjectURL(blob); aTag.click(); URL.revokeObjectURL(blob); }
很简单对吧,直接调用这个方法,传入文件名和文件内容,程序新建 a 标签,新建 Blob 对象,将文件名赋给 a 标签,同时将 Blob 对象作为 Url 也赋给 a 标签,模拟点击事件,自动下载成功,最后再回收内存。下面我们来看看具体是怎么操作的。
简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。
本文主要介绍这个算法的来源、演变、原理。并举出一个例子为大家清晰的描述每次迭代过程。最后使用 JavaScript 代码将算法实现。
我们每次使用命令
git clone git@gitlab.xxx.com:xxxxx.git
默认 clone 的是这个仓库的 master 分支。如果最新的代码不在 master 分支上,该如何拿到呢?如下图所示,最新的代码可能在daily/1.4.1分支上,我们希望拿到这个分支上的代码。
daily/1.4.1
Babel 用于将 ES6 的代码转化为 ES5,使得 ES6 可以在目前的浏览器环境下使用。学习使用 babel 是为了使用 ES2015 做准备。本文将介绍如何使用 babel,以及一些相关的配置。
记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法、代码风格、优美的特性、毒瘤、糟粕等。
记录一下阅读蝴蝶书的笔记,本篇为书中以下章节的笔记:继承、数组和正则表达式。
记录一下阅读蝴蝶书的笔记,本篇为第一部分包含书中前三章内容:语法、对象和函数。
由正则表达式如何匹配相同字符出发,讲讲正则表达式中的选择、分组和引用。
在外刊君读者群中看到有人提出这样的一个需求:
把字符串切成连续相同字符的正则怎么写?比如abbcccdddd切成a,bb,ccc,dddd
abbcccdddd
a,bb,ccc,dddd
之前我对正则表达式也是略有研究,想尝试一下。其实我对正则表达式的学习基本完全来源于犀牛书的第10章,真正看懂这一章,我觉得操作正则表达式应该不在话下。
本文主要说明对这个博客主题的改版和代码重构的过程。这个简洁高雅的博客主题受到了很多朋友的喜欢。在写第一版界面时,我对前端并不是很熟悉,对Jekyll也不熟悉。现在距离当时也一年了,对自己当时写的代码也不太满意了,同时Jekyll如今也已经升级了,目前最新版为3.1.2。因此我在临近毕业尚未入职前做一下博客主题的代码重构和改版吧。
Jekyll
主要想做这些事情有:添加归档,添加标签,添加分类页面,主页显示文章摘要,代码去除 jQuery 和 BootStrap,优化移动端显示,将所有变量写入配置文件_config.yml中等。再优化一些细节吧。希望更多人会喜欢。
_config.yml
起因是这样的,在尝试前后端分离的这条道路上,我自己也在不断摸索,感觉要把大部分的坑都踩踩了。目前我用的技术是:
但最近写了一个项目类似知乎这样的多页网站。前端 url 的处理让我觉得不够优雅。我使用的是 hash 的方式处理动态 url 的,为此我专门在知乎上提了一个问题:前端如何处理动态url?
当我们点击一个空的、没有任何内容的 div 或者其他块级元素时。在 IE11 以下,是没有反应的。
做了一张思维导图。总结这几个月对 JavaScript 的学习吧,也是一个复习。也是我目前的技能树。
weinre官网 上有两句有意思的介绍:
weinre is WEb INspector REmote. Pronounced like the word “winery”. Or maybe like the word “weiner”. Who knows, really. weinre is a debugger for web pages, like FireBug (for FireFox) and Web Inspector (for WebKit-based browsers), except it’s designed to work remotely, and in particular, to allow you debug web pages on a mobile device such as a phone.
weinre is WEb INspector REmote. Pronounced like the word “winery”. Or maybe like the word “weiner”. Who knows, really.
weinre is a debugger for web pages, like FireBug (for FireFox) and Web Inspector (for WebKit-based browsers), except it’s designed to work remotely, and in particular, to allow you debug web pages on a mobile device such as a phone.
往前推2到3年,前端工程师还在忧心忡忡地想,移动互联网时代下,前端是不是没有生存空间了。但今天一看,在我们团队,前端工程师超过一半的工作都是在做移动端的Web或者APP的开发。移动Web或者APP在技术本质上是和做桌面端Web没有本质区别,但是移动端的坑那是非常的多,通过学习这部分内容,让你成为一名桌面移动通吃的前端开发工程师。
本文为慕课网 JavaScript深入浅出 JavaScript 面向对象笔记。
本文为慕课网 JavaScript深入浅出 JavaScript 中的闭包笔记。
本文为慕课网 JavaScript深入浅出 JavaScript 中的 this笔记。
本文为慕课网 JavaScript深入浅出 JavaScript 函数笔记。
现在想想也真是无心插柳的一次找实习。感觉不知不觉中自己真的进步了不少。
首先在我们机房的楼下看到了宣传海报,5.28 有一个联想服务的宣讲会,我看到有前端工程师的岗位,想试试自己的水平如何,就去听了宣讲会。
到了宣讲会现场,人不少,我坐在最后一排。开始就是一些介绍。包括 Future Leader 的介绍等。
百度前端学院的第二次任务笔记,JavaScript 基础。主要有JavaScript的定义,数据类型,对象,数组,字符串,正则表达式,DOM,事件,BOM,Ajax 等知识。
百度前端学院的第一次任务笔记,HTML、CSS 基础。主要有 CSS 工作原理,选择器的使用,常用属性,行高属性,盒模型与定位,最后根据设计图实现4个页面。
fork 了别人的仓库后,原作者又更新了仓库,如何将自己的代码和原仓库保持一致?本文将给你解答。
题目来自 慕课网 JavaScript 深入浅出 1-6 编程练习
请在 index.html 文件中,编写 arraysSimilar 函数,实现判断传入的两个数组是否相似。具体需求:
本文我将讲述一下 SublimeLinter 的安装过程。其组件 jshint 的安装与使用。其组件 csslint 的安装与使用。我将基于 Sublime Text 3 来安装。使用 Sublime Text 2 的用户阅读本文是没有帮助的。
SublimeLinter 是 Sublime 的插件,它的作用是检查代码语法是否有错误,并提示。习惯了 IDE 下写代码的人一定需要一款在 Sublime 上类似的语法检查工具。下面我们开始。
My girlfriend is learning html and css recently. I told her to follow the video. Here, I recommend a video in Chinese that suite for fresh learners. The name of course is Getting HTML web pages dev in 8 hours ( 8小时学会HTML网页开发 ) . I watched this video at very first time. The teacher named Eighteen Swallows ( 燕十八 ) . He teached very clear even himself being on screen to show what is float or box-model.
一直以来都想搭建一个自己的博客,但是近半年做项目太忙,再加上教研室的网络很坑爹,所以也一直没顾得上。之前用过 WordPress 托管在免费的京东云擎上,但是速度太慢。在知乎上看到一些相关的内容,于是选择了在github上用jekyll搭建博客。