diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..88f9f1b7 --- /dev/null +++ b/404.html @@ -0,0 +1,1518 @@ + + + + + + + + + + + + + + + + + + ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..fc63c12d --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +tooldiy.ry.rs diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.b4d07000.min.js b/assets/javascripts/bundle.b4d07000.min.js new file mode 100644 index 00000000..3c0bdad9 --- /dev/null +++ b/assets/javascripts/bundle.b4d07000.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ci=Object.create;var gr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Hi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,nn=Object.prototype.propertyIsEnumerable;var rn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&rn(e,r,t[r]);if(Ht)for(var r of Ht(t))nn.call(t,r)&&rn(e,r,t[r]);return e};var on=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&nn.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ki(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=Ri(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ci(Hi(e)):{},Pi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var sn=Pt((xr,an)=>{(function(e,t){typeof xr=="object"&&typeof an!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Qe=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Qe]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),Y())}function Y(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function B(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,B())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),Y(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var cn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(B,N){d.append(N,B)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,Y=!0,B=this;["append","delete","set"].forEach(function(O){var Qe=h[O];h[O]=function(){Qe.apply(h,arguments),v&&(Y=!1,B.search=h.toString(),Y=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,Y&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var qr=Pt((Mt,Nr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof Nr=="object"?Nr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ai}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var E=p()(T);return m("cut"),E},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[T?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var Y=function(T,E){var H=v(T);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},B=function(T){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof T=="string"?H=Y(T,E):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?H=Y(T.value,E):(H=p()(T),m("copy")),H},N=B;function O(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(E){return typeof E}:O=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},O(j)}var Qe=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=T.action,H=E===void 0?"copy":E,I=T.container,q=T.target,Me=T.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function Ei(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function tn(j,T){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=c()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ai=Li},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var rs=/["'&<>]/;Yo.exports=ns;function ns(e){var t=""+e,r=rs.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof et?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function pn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{ln(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ln(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function ln(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new xn(r,n)},t}(F);var xn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Sn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Oe=new Sn(wn);var _=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Te(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=zi();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return un(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return Ni(e);if(pt(e))return qi(e);if(Nt(e))return Ki(e);if(Kt(e))return On(e);if(Gt(e))return Qi(e);if(Jt(e))return Yi(e)}throw Qt(e)}function Ni(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function qi(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Dn(function(){return new Zt}))}}function Vn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,Y=function(){p==null||p.unsubscribe(),p=void 0},B=function(){Y(),u=m=void 0,h=v=!1},N=function(){var O=u;B(),O==null||O.unsubscribe()};return y(function(O,Qe){d++,!v&&!h&&Y();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,f))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,Y(),p=$r(B,o,$e),De.error($e)},complete:function(){h=!0,Y(),p=$r(B,s),De.complete()}}),U(O).subscribe(u))})(c)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),J())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Kn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>rr(e)),V(rr(e)))}var Yn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Wr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Wr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ba.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Gn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Jn=typeof WeakMap!="undefined"?new WeakMap:new Yn,Xn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ga.getInstance(),n=new La(t,r,this);Jn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Xn.prototype[e]=function(){var t;return(t=Jn.get(this))[e].apply(t,arguments)}});var Aa=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Xn}(),Zn=Aa;var eo=new x,Ca=$(()=>k(new Zn(e=>{for(let t of e)eo.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ca.pipe(S(t=>t.observe(e)),g(t=>eo.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var to=new x,Ra=$(()=>k(new IntersectionObserver(e=>{for(let t of e)to.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function sr(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function ro(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),J())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function no(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function ka(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ha(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function oo(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:no("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!ka(n,r)}return!0}),pe());return Ha().pipe(g(t=>t?_:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function io(){return new x}function ao(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ao(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ao(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function so(){return location.hash.substring(1)}function Dr(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Pa(e){return L(b(window,"hashchange"),e).pipe(l(so),V(so()),A(t=>t.length>0),X(1))}function co(e){return Pa(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function Vr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function fo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function zr(e,t){return e.pipe(g(r=>r?t():_))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>_),g(r=>r.status!==200?Ot(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),X(1))}function uo(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),X(1))}function pr(e){let t=M("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function po(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function lo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(po),V(po()))}function mo(){return{width:innerWidth,height:innerHeight}}function ho(){return b(window,"resize",{passive:!0}).pipe(l(mo),V(mo()))}function bo(){return G([lo(),ho()]).pipe(l(([e,t])=>({offset:e,size:t})),X(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(ee("size")),o=G([n,r]).pipe(l(()=>Xe(e)));return G([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

RustSBI

+

官网:https://github.com/rustsbi

+

RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。

+

独立包

+

独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:

+ +

这些解决方案的文档和下载链接都在各自的仓库中。

+

原型设计系统

+

RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。

+

为了编译原型设计系统,复制仓库后使用以下的命令:

+
cargo termconfig
+
+

在图形界面配置完毕后,配置文件将保存到Xtask.toml文件中,以供编译过程阅读。

+

接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:

+
cargo make
+
+

或者,使用以下的命令直接编译和烧录到目标主板:

+
cargo flash
+
+

RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/frame/img/wasm-bpf-no-bcc.png b/en/frame/img/wasm-bpf-no-bcc.png new file mode 100644 index 00000000..9fb71736 Binary files /dev/null and b/en/frame/img/wasm-bpf-no-bcc.png differ diff --git a/en/frame/wasm-bpf/index.html b/en/frame/wasm-bpf/index.html new file mode 100644 index 00000000..ceda7ba9 --- /dev/null +++ b/en/frame/wasm-bpf/index.html @@ -0,0 +1,1752 @@ + + + + + + + + + + + + + + + + + + + + + + + + Wasm bpf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

logo

+

📦 Wasm-bpf: Wasm library and toolchain for eBPF

+

Actions Status +codecov +CodeFactor +DeepSource +

+

中文文档 Gitee Github

+

Wasm-bpf is a WebAssembly eBPF library, toolchain and runtime powered by CO-RE(Compile Once – Run Everywhere) libbpf. It can help you build almost every eBPF programs or usecases to Wasm with nearly zero modification, and run them cross platforms with Wasm sandbox.

+

Quick start guides

+

⌨️ Introduction to wasm-bpf \ +📦 Features \ +🚀 Running a standalone Wasm program from CLI or Docker \ +🔌 Embed a Wasm-eBPF function in your Rust program or C/C++ program \ +🔨 Examples covering the use cases from tracing, networking to security \ +📚 How it works \ +🤖 Build the runtime

+

📚 Check out our more documentations

+

Introduction

+

WebAssembly (Wasm) is a portable binary format for executable code. The code is executed at a nearly-native speed in a memory-safe (for host) sandbox, with clearly defined resource constraints, and APIs for communicating with the embedding host environment (eg. proxy).The wasm-bpf project combines Wasm and eBPF technologies to enhance the performance and programmability of eBPF applications.

+

With wasm-bpf, users can dynamically load and securely execute user-defined or community-contributed Wasm-eBPF codes as plug-ins in their software products, such as observability platforms or service proxy. This enables efficient and scalable data collection, while also allowing for advanced processing and analysis of that data.

+

It also enables developers to write eBPF programs in familiar languages like C/C++, Rust, Go, and more than 30 other programming languages, and deploy them easily across different Linux distributions. Additionally, cloud providers can leverage wasm-bpf to offer a secure and high-performance environment for their customers to develop and deploy eBPF applications in their cloud environments.

+

🚀 Get started

+

📦 Install wasm-bpf

+

Run the following command to install the wasm-bpf CLI tool:

+
cargo install wasm-bpf 
+
+

Running a standalone Wasm-eBPF program

+

Running the runqlat example with docker:

+
$ wget https://eunomia-bpf.github.io/wasm-bpf/examples/runqlat/runqlat.wasm
+$ docker run --rm -it --privileged -v $(pwd):/examples ghcr.io/eunomia-bpf/wasm-bpf:latest /examples/runqlat.wasm
+Tracing run queue latency... Hit Ctrl-C to end.
+
+     usecs               : count    distribution
+         0 -> 1          : 72       |*****************************           |
+         2 -> 3          : 93       |*************************************   |
+         4 -> 7          : 98       |****************************************|
+         8 -> 15         : 96       |*************************************** |
+        16 -> 31         : 38       |***************                         |
+        32 -> 63         : 4        |*                                       |
+        64 -> 127        : 5        |**                                      |
+       128 -> 255        : 6        |**                                      |
+       256 -> 511        : 0        |                                        |
+       512 -> 1023       : 0        |                                        |
+      1024 -> 2047       : 0        |                                        |
+      2048 -> 4095       : 1        |                                        |
+
+

For more tools to distribute and deploy Wasm-eBPF programs for usecases from Observability, Networking to Security, please refer to eunomia-bpf repo.

+

Embed a Wasm-eBPF function in your program

+

Add the following line to your Cargo.toml to use Wasm-bpf as a library:

+
wasm-bpf-rs = "0.2.1"
+
+

See the main.rs for an example of how to use the wasm-bpf-rs library.

+

Features

+
    +
  • General purpose: provide most abilities from eBPF to Wasm, polling from the ring buffer or perf buffer, bidirectional communications between kernel eBPF and userspace Wasm using maps, dynamically loading, attaching or detaching, etc. Supports a large number of eBPF program types and map types.
  • +
  • High performance: No serialization overhead for complex data types, using shared memory to avoid copy overhead between host and Wasm.
  • +
  • Easy to use: provide a similar developing experience as the libbpf-bootstrap, auto generate the Wasm-eBPF skeleton headers and type definitions for bindings. Write your eBPF programs in C/C++, Rust, Go and compile to Wasm.
  • +
  • Ultralightweight: the miminal runtime has only 1.5 MB in binary size. Compiled Wasm module would be only ~90K. With the same toolchain, you can easily build your own Wasm-eBPF runtime in any languages and platforms!
  • +
+

See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to Wasm, covering the use cases from tracing, networking to security.

+

For tools to distribute Wasm-eBPF programs in OCI images, please refer to eunomia-bpf repo.

+

Examples

+

See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to WASM.

+

tracing examples +- bootstrap and rust-bootstrap: trace process exec and exit +- runqlat: summarizes scheduler run queue latency as a histogram +- execve and go-execve: trace execve syscall

+

security example +- lsm and go-lsm: check the permission to remove a directory

+

networking example +- sockfilter: monitoring packet and dealing with __sk_buff. +- sockops: Add the pid int tcp option in syn packet.

+

How it works

+

An eBPF application typically consists of two parts: the user space part and the kernel space part. With wasm-bpf, the user space part is executed in a WebAssembly (Wasm) sandbox while the kernel space part is executed in the eBPF runtime in the Linux kernel. This separation of concerns allows for greater flexibility and security in developing and running eBPF programs, as well as the ability to leverage the benefits of both Wasm and eBPF.

+

The wasm-bpf runtime require two parts: the host side(Outside the Wasm runtime) and the Wasm guest side(Inside the Wasm runtime).

+
    +
  • host side: A simple runtime implementation example
  • +
  • see runtime/cpp, which would be a sample runtime in C++ built on the top of libbpf and WAMR. Another more complex runtime implement in Rust is runtime/wasm-bpf-rs, based on Wasmtime.
  • +
  • You can easily build your own Wasm-eBPF runtime in any languages, any eBPF libraries and any Wasm runtimes with the same System interface.
  • +
  • wasm side: toolchains and libraries
  • +
  • a libbpf-wasm header only library to provide libbpf APIs for Wasm guest C/C++ code.
  • +
  • a bpftool tool to generate the Wasm-eBPF skeleton headers, and C struct definitions for passing data between the host and Wasm guest without serialization.
  • +
  • Rust, Go and other language support is similar to the C/C++ support.
  • +
+

For details compile process, please refer to the examples/bootstrap/README.md. The figure below shows the overall interaction between the eBPF and Wasm runtimes:

+

wasi-bpf

+

A Wasm module could load and control multiple eBPF programs at the same time, and can call another Wasm module written in other languages to process the data or control with the component model.

+

We have proposed a new WASI issue wasi-bpf.

+

Build the runtime

+

We have two types of runtime samples:

+
    +
  • A C/C++ runtime example, which is a minimal runtime based on WAMR. see runtime/cpp for more details.
  • +
  • A Rust runtime example, which is a more complex runtime based on Wasmtime. see runtime/wasm-bpf-rs for more details.
  • +
+

The runtime can be built as a library or a standalone executable. see docs/build.md to build the runtimes.

+

LICENSE

+

MIT LICENSE

+ + + + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/frame/zineland/index.html b/en/frame/zineland/index.html new file mode 100644 index 00000000..90442f62 --- /dev/null +++ b/en/frame/zineland/index.html @@ -0,0 +1,1751 @@ + + + + + + + + + + + + + + + + + + + + + + + + Zineland - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Zineland

+

Introduction

+

Zineland is a simple and effective magazine building framework that can quickly generate magazine-style static pages from Markdown documents

+

Install

+ +
  cargo install zine
+
+
    +
  • brew
  • +
+
  brew install zineland/tap/zine
+
+ +

Advantages

+
    +
  • Mobile-first.
  • +
  • Intuitive and elegant magazine design.
  • +
  • Best reading experiences.
  • +
  • Theme customizable, extend friendly.
  • +
  • RSS Feed supported.
  • +
  • Open Graph Protocol supported.
  • +
  • Article topic supported.
  • +
  • I18n and l10n supported.
  • +
  • Build into a static website, hosting anywhere.
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/index.html b/en/index.html new file mode 100644 index 00000000..c9482faa --- /dev/null +++ b/en/index.html @@ -0,0 +1,1747 @@ + + + + + + + + + + + + + + + + + + + + + + Preface - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Preface

+

The original intention of ToolDiy

+
    +
  1. +

    In the long river of time, we found that repetitive and tedious work brings only time and energy consumption to everyone.Indeed,in our continuous thinking and progress, excellent tools have appeared before our eyes.But what follows is that the rapid development of the types and quantities of tools makes it difficult for us to quickly and easily get started with a tool according to specific needs. On the contrary, "Baidu" and "Google" have become our commonplace. +Keep trying in link after link and answer. Some are jerky English documents, some are a few words, which undoubtedly increases our cost of use. So the original intention of Tooldiy is to solve this problem.We want to use the environment of the open source community to continuously collect and refine tools from all walks of life (after all, the one that suits you is the best). Tooldiy will recommend and analyze various tools from an objective and user perspective, not just limited to a fixed direction.

    +
  2. +
  3. +

    Many times we will encounter environment configuration problems of many tools during the development process. We have to spend a lot of time thinking and learning to use them. Many times, these tasks can only exercise your patience in configuring the environment. We want to Everyone focuses on the tool itself, so we want to maintain some automated scripts for tool configuration and construction or a docker environment for the convenience of users. Of course, the build scripts we left when writing can also be provided for users to learn. It's exciting to think about a tool that can be obtained with one click, let's build it together!

    +
  4. +
+

As long as it can bring you help and a better experience, this is the meaning of Tooldiy's existence.

+

Now, let's use it together!

+

Contribute

+

The original intention of this project is to provide a warehouse and wiki for maintaining a tool description. It is a project that lowers the threshold of use and is convenient for everyone. Our principle is not limited to any specific discipline and field. We can share all the tools we think are useful (Pay attention to the introductory introduction, which is in line with the original intention of the project). It can be shared under the premise of respecting the labor of tool producers. Therefore, we do not allow everyone to share pirated and cracked tools. We welcome all kinds of PR on the premise of standardization. If you have any doubts other than the appeal, you can file an issue or contact the warehouse management. When it comes to paid content tools, we encourage sharing and hope that everyone will do a good job of disclosing their information and marking their prices. This project will not advertise any tools, and there will be no special advertisement behaviors such as location are arranged according to the time of submission. We also welcome various PR requests to improve the reading experience of this project (including but not limited to adding a line break to improve the reading experience, adding a project logo, Chinese and English proofreading, etc.) (:з)∠) This project is still in its infancy, and it is very much in need of improvement and error correction from everyone.

+

If you have already written articles that you would like to add here, you can do so in the following ways:

+
    +
  1. Fork this repository, create an Markdown document in the docs folder under the corresponding category and submit a PR to merge.
  2. +
  3. Contact SakurajimaMaii and send the Chinese and English versions of the document to his email Email.
  4. +
+

If you wonder where to start, check the writing template is a good idea.

+
+

Note

+
    +
  1. All content uploaded to this website should strictly conform to Specification.
  2. +
  3. If you are not familiar with PR, you can refer to 3 minutes to learn, how to PR (Pull Request) code to Github
  4. +
+
+

Contact us

+

Click the link to join the group chat tooldiy

+ +

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/javascripts/mathjax.js b/en/javascripts/mathjax.js new file mode 100644 index 00000000..080801ef --- /dev/null +++ b/en/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() +}) diff --git a/en/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp b/en/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp new file mode 100644 index 00000000..5731e05f Binary files /dev/null and b/en/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp differ diff --git a/en/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp b/en/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp new file mode 100644 index 00000000..d2906f1c Binary files /dev/null and b/en/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp differ diff --git a/en/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp b/en/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp new file mode 100644 index 00000000..fcf2b0f7 Binary files /dev/null and b/en/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp differ diff --git a/en/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp b/en/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp new file mode 100644 index 00000000..a196f3ee Binary files /dev/null and b/en/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp differ diff --git a/en/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp b/en/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp new file mode 100644 index 00000000..f464f5e4 Binary files /dev/null and b/en/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp differ diff --git a/en/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg b/en/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg new file mode 100644 index 00000000..cef088ff Binary files /dev/null and b/en/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg differ diff --git a/en/large_language_model/rwkv.cpp/index.html b/en/large_language_model/rwkv.cpp/index.html new file mode 100644 index 00000000..b66060f6 --- /dev/null +++ b/en/large_language_model/rwkv.cpp/index.html @@ -0,0 +1,1887 @@ + + + + + + + + + + + + + + + + + + + + + + + + rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型

+

最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。

+

但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。

+

RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:

+

Raven RWKV 7B - a Hugging Face Space by BlinkDL

+

不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1% 这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。

+

下载模型

+

首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:

+

img

+

其中:

+
    +
  • 统一前缀 rwkv-4 表示它们都基于 RWKV 的第 4 代架构。
  • +
  • pile 代表基底模型,在 pile 等基础语料上进行预训练,没有进行微调,适合高玩来给自己定制。
  • +
  • novel 代表小说模型,在各种语言的小说上进行微调,适合写小说。
  • +
  • raven 代表对话模型,在各种开源的对话语料上进行微调,适合聊天、问答、写代码。
  • +
  • 430m、7b 这些指的是模型的参数量。
  • +
+

我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。

+

img

+

这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)

+

模型转换

+

下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。

+

所以,这里需要介绍一下能够更充分利用 CPU 的方法:

+

saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)

+

rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。

+

以下是操作步骤。

+

1. 下载仓库代码

+

需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)

+
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
+

2. 下载依赖库 or 编译依赖库

+

rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases

+

img

+

下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):

+
cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
+

3. 转换模型

+

需要装 PyTorch

+

我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:

+
python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
+

其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py 这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth 是待转换的模型的路径, ./rwkv.cpp-7B.bin 是转换后的路径,float16 是要转换成什么类型的参数。

+

4. 量化模型

+

其实上面转换好的 ./rwkv.cpp-7B.bin 已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin 量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:

+
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
+

然后你就会得到一个大小只有 6GB 的模型了。

+

运行模型

+

同样,一行命令搞定:

+
python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
+

让我们看看效果,首先是内存占用,不到 6GB

+

img

+

然后是问答和执行命令:

+
    +
  1. 太阳有几只眼睛?
  2. +
  3. 知乎是什么网站?
  4. +
  5. 写一篇介绍数据分析的文章。
  6. +
+

img

+

效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:

+

img

+

希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。

+

以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。

+

参考

+
+
+
    +
  1. +

    https://github.com/antimatter15/alpaca.cpp 

    +
  2. +
  3. +

    https://github.com/THUDM/ChatGLM-6B 

    +
  4. +
  5. +

    https://github.com/LianjiaTech/BELLE 

    +
  6. +
  7. +

    发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 

    +
  8. +
  9. +

    RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 

    +
  10. +
  11. +

    RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 

    +
  12. +
  13. +

    BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL 

    +
  14. +
  15. +

    RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth 

    +
  16. +
  17. +

    https://github.com/BlinkDL/ChatRWKV 

    +
  18. +
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/one_click_deployment/Source-changer/index.html b/en/one_click_deployment/Source-changer/index.html new file mode 100644 index 00000000..14812bef --- /dev/null +++ b/en/one_click_deployment/Source-changer/index.html @@ -0,0 +1,1751 @@ + + + + + + + + + + + + + + + + + + + + + + + + Source-changer换源工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Source-changer换源工具

+

本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率

+

安装

+
+

git clone https://github.com/57307407/Source-changer.git

+
+

介绍

+

目前支持 maven 、 npm 、 python(pip)换源

+

由于本工具使用 python 语言进行开发,使用前请先安装python环境

+
+

下载链接:https://www.python.org/

+
+

输入命令

+
+

python -V

+

or

+

python3 -V

+
+

出现python版本号即为安装完毕

+

python版本

+

使用

+
+

python main.py / python3 main.py

+

更换maven源时需要在命令前加sudo

+

即: sudo python3 main.py

+
+

Source-changer_主页面

+

选择需换源的软件

+

Source-changer_软件选择

+

选择更换的镜像

+

Source-changer_镜像选择

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/one_click_deployment/Windows_Setup/index.html b/en/one_click_deployment/Windows_Setup/index.html new file mode 100644 index 00000000..257052d2 --- /dev/null +++ b/en/one_click_deployment/Windows_Setup/index.html @@ -0,0 +1,1805 @@ + + + + + + + + + + + + + + + + + + + + + + + + windows Environmental deployment - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

windows Environmental deployment

+

This article shows you how to deploy the project in your windows environment.

+
+

Note: This requires a python environment, python3.10 in my case.

+
+

Download ToolDiy

+
git clone https://github.com/cargo-youth/ToolDiy.git
+
+

Install mkdocs

+
Download link:pip install mkdocs
+
+

Install site theme

+

The theme of this site is material. Use the following command to install it.

+
pip install mkdocs-material
+
+

Install other dependencies

+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
+

Install the i18n

+

Here is a pit, when I install, directly install pip install i18n is not ok, you need to specially install i18n under mkdocs, then ask chatGPT, he provided me with a solution is pip install mkdocs-i18n-plugin ; Unfortunately, no, finally find the following command on Google, right.

+
pip install mkdocs-static-i18n
+
+

Running Project

+
mkdocs serve
+
+

Build static website files

+
mkdocs build
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/one_click_deployment/docker_os_c/index.html b/en/one_click_deployment/docker_os_c/index.html new file mode 100644 index 00000000..660facb2 --- /dev/null +++ b/en/one_click_deployment/docker_os_c/index.html @@ -0,0 +1,1791 @@ + + + + + + + + + + + + + + + + + + + + + + + + C-based operating system development environment using Docker - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

C-based operating system development environment using Docker

+

Overview of the development environment

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • gcc 11.3.0
  • +
  • GNU Make 4.3
  • +
  • cmake 3.22.1
  • +
  • QEMU emulator 7.0.0
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • C/C++ 1.14.4
    • +
    +
  • +
+

Quick Start

+

Install Docker Desktop, see Install Docker Desktop on Windows

+

Run Docker Desktop,and then open CMD or PowerShell,execute

+
docker pull jklincn/c-os
+
+

After the image is successfully pulled, execute

+
docker run -d --privileged -p 58888:8080 jklincn/c-os
+
+

Now, you can open http://localhost:58888 in the browser. Development environment is ready.

+

You can control the containers by the Docker Desktop graphical interface.

+
+

The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.

+
+

Dockerfile

+

Here is the Dockerfile, for others who need demand for reference and modification.

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+    code --install-extension cpptools-linux.vsix && \
+    rm cpptools-linux.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/one_click_deployment/docker_os_rust/index.html b/en/one_click_deployment/docker_os_rust/index.html new file mode 100644 index 00000000..4d915bb1 --- /dev/null +++ b/en/one_click_deployment/docker_os_rust/index.html @@ -0,0 +1,1811 @@ + + + + + + + + + + + + + + + + + + + + + + + + C-based operating system development environment using Docker - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

C-based operating system development environment using Docker

+

Overview of the development environment

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • GNU Make 4.3
  • +
  • QEMU emulator 7.0.0
  • +
  • rustc nightly-latest
  • +
  • rustup latest
  • +
  • cargo nightly-latest
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • rust-analyzer 0.3.1435
    • +
    +
  • +
+

Quick Start

+

Install Docker Desktop, see Install Docker Desktop on Windows

+

Run Docker Desktop,and then open CMD or PowerShell,execute

+
docker pull jklincn/rust-os
+
+

After the image is successfully pulled, execute

+
docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
+

Now, you can open http://localhost:58888 in the browser. Development environment is ready.

+

You can control the containers by the Docker Desktop graphical interface.

+
+

The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.

+
+

Dockerfile

+

Here is the Dockerfile, for others who need demand for reference and modification.

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+    echo '[source.crates-io]' >> .cargo/config && \
+    echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+    echo 'replace-with = "ustc"' >> .cargo/config && \
+    echo '[source.ustc]' >> .cargo/config && \
+    echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+    chmod +x rustup-init && \
+    ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+    rm rustup-init && \
+    source $HOME/.cargo/env && \
+    cargo install cargo-binutils && \
+    rustup component add llvm-tools-preview && \
+    rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" "b/en/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" new file mode 100644 index 00000000..691f84ca Binary files /dev/null and "b/en/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" differ diff --git "a/en/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" "b/en/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" new file mode 100644 index 00000000..1f48ceb2 Binary files /dev/null and "b/en/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" differ diff --git "a/en/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" "b/en/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" new file mode 100644 index 00000000..284eb513 Binary files /dev/null and "b/en/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" differ diff --git "a/en/one_click_deployment/img/python\347\211\210\346\234\254.png" "b/en/one_click_deployment/img/python\347\211\210\346\234\254.png" new file mode 100644 index 00000000..7807cd4b Binary files /dev/null and "b/en/one_click_deployment/img/python\347\211\210\346\234\254.png" differ diff --git a/en/one_click_deployment/os/index.html b/en/one_click_deployment/os/index.html new file mode 100644 index 00000000..2ed30437 --- /dev/null +++ b/en/one_click_deployment/os/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + os Introduction to development environment and tools - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

os Introduction to development environment and tools

+
# (ubuntu) install package
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+        gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+        zlib1g-dev libexpat-dev pkg-config  libglib2.0-dev libpixman-1-dev libsdl2-dev \
+        git tmux python3 python3-pip ninja-build
+# install QEMU
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# Configure environment variables
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build 
+# Update the system path after configuration
+source ~/.bashrc 
+# test qemu
+qemu-system-riscv64 --version
+# install rust 
+curl https://sh.rustup.rs -sSf | sh
+# Update the system path after configuration
+source $HOME/.cargo/env
+# test rust
+rustc --version
+# rust related package installation
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
+

Common problems and solutions

+
# (centos) install package
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+                texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc version is too low
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# test gcc
+gcc -v
+
+

Configure rust download mirror

+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/en/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..55eaaca5 --- /dev/null +++ "b/en/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1692 @@ + + + + + + + + + + + + + + + + + + + + + + + + APT(DEB)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

APT(DEB)包管理工具

+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean  #清理无用的包
+
+aptitude
+apt-add-repository [options] repository   #修改软件源命令 (software-properties-common)
+
+
apt search package #搜索包 
+apt show package #获取包的相关信息,如说明、大小、版本等  
+apt depends package #了解使用依赖  
+apt rdepends package #查看该包被哪些包依赖  
+apt-cache pkgnames  #执行pkgnames子命令列出当前所有可用的软件包 
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包  
+sudo apt install package=version #安装指定版本的包  
+sudo apt install package --reinstall #重新安装包  
+sudo apt -f install #修复安装, "-f = --fix-missing"  
+sudo apt remove package #删除包
+sudo apt purge package  #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码   
+sudo apt update #更新apt软件源信息  
+sudo apt upgrade #更新已安装的包  
+sudo apt dist-upgrade #升级系统  
+sudo apt dselect-upgrade #使用dselect升级  
+sudo apt build-dep package #安装相关的编译环境  
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean  #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean  #删除已经卸载的软件包备份  
+sudo apt-get check #检查是否有损坏的依赖
+
+
sudo dpkg -i <package.deb>    #安装包
+sudo dpkg -r <package.deb>   #删除包
+sudo dpkg -p <package.deb>   #彻底删除包(包括配置文件)
+dpkg -l                       #列出当前已安装的包
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" "b/en/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" new file mode 100644 index 00000000..fe87dd4d --- /dev/null +++ "b/en/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" @@ -0,0 +1,1655 @@ + + + + + + + + + + + + + + + + + + + + + + + + AppImage(Linux) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

AppImage(Linux)

+
    +
  1. AppImage Pool :一个帮助你寻找和管理 AppImage 的应用商店 | Linux 中国
  2. +
  3. appimage-installer :这个工具能在十几秒内快速的将一个 AppImage 文件部署到开始菜单,并且设置好图标和名称。
  4. +
  5. AppImageLauncher :可以自动将 AppImage 程序快捷方式添加到桌面环境的程序启动器/菜单(包括程序图标和合适的说明)中。
  6. +
  7. Appimage-installer 工具, AUR 包的问题, https://gitee.com/deepin-opensource/appimage-installer/issues/I421HL
  8. +
  9. AppImage 安装器,深度科技社区 Maicss 分享:深度科技社区 Maicss 分享: ttps://bbs.deepin.org/zh/post/220754
  10. +
  11. AppImage 官网: AppImage 官网: https://appimage.org/
  12. +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" "b/en/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..f39a681a --- /dev/null +++ "b/en/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1908 @@ + + + + + + + + + + + + + + + + + + + + + + + + Chocolatey(WIN) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Chocolatey(WIN)

+
+

本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的

+

为什么要用 Chocolatey

+

如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。

+
+

Chocolatey 的安装

+
    +
  • +

    方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +

     @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    +

    +
  • +
  • +

    方法二:以管理员身份打开 powershell.exe ,执行以下代码

    +
  • +
+
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
+
    +
  • 方法三:直接打开 https://chocolatey.org/install.ps1 ,复制内容到本地新建 install.psl 文件,执行安装。
  • +
+

在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。

+

Chocolatey 的使用

+

Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)

+

安装软件

+
choco install -y git 
+choco install -y python 
+choco install -y chromium
+cinst -y nodejs.install
+...
+
+

choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。

+

查找软件

+
    +
  1. choco search cntlm 搜索软件是否存在,包名是什么。
  2. +
  3. choco info cntlm 查看软件详细信息。
  4. +
+

升级软件

+

choco upgrade git

+

卸载软件

+

choco uninstall git

+

配置统一环境

+
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+    <packages>
+      <package id="jdk8" />
+      <package id="googlechrome" version="71.0.3578.98" />
+      <package id="vscode" />
+      <package id="7zip" />
+    </packages>
+
+

文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。

+

更改本地仓库

+
    +
  • 方法一: cmd.exe 管理员模式下执行以下指令 + setx ChocolateyInstall D:\Chocolatey /M
  • +
  • 方法二: powershell.exe 管理员模式下执行以下指令 + & setx.exe ChocolateyInstall D:\Chocolatey /M + 设定成功提示: + 成功: 已经存储指定的值
  • +
+

卸载Chocolatey

+

卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。

+
    +
  1. 删除环境变量 ChocolateyInstall 对应的安装文件夹,默认是 C:\ProgramData\chocolatey
  2. +
  3. 删除环境变量 ChocolateyInstall
  4. +
  5. 删除环境变量 ChocolateyToolsLocation ,部分工具软件安装的位置,删除需谨慎
  6. +
  7. 删除环境变量 ChocolateyLastPathUpdate
  8. +
  9. 更新环境变量 PATH ,去掉 Chocolatey 相关的配置
  10. +
+

总结

+

Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/en/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..c8f61d59 --- /dev/null +++ "b/en/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1654 @@ + + + + + + + + + + + + + + + + + + + + + + + + DNF(RPM)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

DNF(RPM)包管理工具

+

由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。

+

DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。

+
    +
  • DNF 与 YUM 完全兼容,提供了 YUM 兼容的命令行以及为扩展和插件提供的API。
  • +
  • 使用 DNF 需要管理员权限,本章所有命令需要在管理员权限下执行。
  • +
+

使用 Dnf 管理软件包 (openeuler.org)

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" "b/en/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" new file mode 100644 index 00000000..c2b78e91 --- /dev/null +++ "b/en/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" @@ -0,0 +1,1651 @@ + + + + + + + + + + + + + + + + + + + + + + + + Homebrew(Linux&Mac) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Homebrew(Linux&Mac)

+

Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)

+

详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/

+

搜索可用的软件包: https://sitemap.filecroco.com/a/1.html

+

在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/en/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..da63d904 --- /dev/null +++ "b/en/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Nix(声明式)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Nix(声明式)包管理工具

+

Nix:可重现的构建和部署 (nixos.org)

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/Scoop\357\274\210Win\357\274\211/index.html" "b/en/package_manager/Scoop\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..3b22377d --- /dev/null +++ "b/en/package_manager/Scoop\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1855 @@ + + + + + + + + + + + + + + + + + + + + + + + + Scoop(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Scoop(Win)

+
+

scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2

+

main : https://github.com/ScoopInstaller/Scoop

+
+

一、安装 scoop

+
    +
  • 将 scoop 安装到自定义目录
  • +
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
+

二、配置scoop

+
    +
  • scoop 源配置: scoop config SCOOP_REPO <URL>
  • +
+

软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。

+
cd $env:SCOOP\buckets\Main      
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
+
    +
  • 修改 buckets git 仓库链接:
  • +
+
 cd $env:SCOOP\buckets\Main      这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
+
    +
  • aria2 相关配置 +
    aria2-enabled (默认值: true)
    +aria2-retry-wait (默认值: 2)
    +aria2-split (默认值: 5)
    +aria2-max-connection-per-server (默认值: 5)
    +aria2-min-split-size (默认值: 5M)
    +
  • +
+

三、常用 bucket

+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
+
    +
  1. 查看支持的命令:scoop help
  2. +
  3. 查找软件:scoop search xxx 软件包
  4. +
  5. 安装软件:scoop install xxx 软件包
  6. +
  7. 卸载软件:scoop uninstall xxx 软件
  8. +
  9. 查看软件官方页:scoop home xxx 软件
  10. +
  11. 查看安装的软件列表:scoop list
  12. +
  13. 更新软件:scoop update
  14. +
  15. 查看软件列表:scoop export >> xxx.txt
  16. +
  17. 查看 官方支持的 bucket:scoop bucket known
  18. +
  19. 查看 bucket 命令帮助:scoop bucket help
  20. +
  21. 添加 bucket :scoop bucket add xxxbucket
  22. +
  23. 删除 bukcet :scoop bucket rm xxx 仓库
  24. +
+

常用命令说明

+
alias       Manage scoop aliases # 管理指令的替身
+bucket      Manage Scoop buckets # 管理软件仓库
+cache       Show or clear the download cache # 查看与管理缓存
+checkup     Check for potential problems # 做个体检
+cleanup     Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config      Get or set configuration values # 配置 Scoop
+create      Create a custom app manifest # 创建自定义软件包
+depends     List dependencies for an app # 查看依赖
+export      Exports (an importable) list of installed apps # 导出软件包列表
+help        Show help for a command # 显示帮助指令
+hold        Hold an app to disable updates # 禁止软件包更新
+home        Opens the app homepage # 打开软件包主页
+info        Display information about an app # 显示软件包信息
+install     Install apps # 安装软件包的指令
+list        List installed apps # 列出所有已安装软件包
+prefix      Returns the path to the specified app # 查看软件包路径
+reset       Reset an app to resolve conflicts # 恢复软件包版本
+search      Search available apps # 搜索软件包
+status      Show status and check for new app versions # 查看软件包更新状态
+unhold      Unhold an app to enable updates # 启动软件包更新
+uninstall   Uninstall an app # 卸载软件包的指令
+update      Update apps, or Scoop itself # 更新软件包
+virustotal  Look for app hash on virustotal.com # 查看哈希值
+which       Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
+

卸载Scoop

+

scoop uninstall scoop:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!

+

The scoop 配置文件保存在 ~/.config/scoop/config.json +buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json

+
{
+    "main": "https://github.com/ScoopInstaller/Main",
+    "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
+

Scoop 技巧和知识

+

链接: https://blog.csdn.net/weixin_39986178/article/details/110900876

+

相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/WinGet\357\274\210Win\357\274\211/index.html" "b/en/package_manager/WinGet\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..945ee72a --- /dev/null +++ "b/en/package_manager/WinGet\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1757 @@ + + + + + + + + + + + + + + + + + + + + + + + + WinGet(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

WinGet(Win)

+

WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。

+

前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。

+

下载、安装和验证

+

你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。

+

如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I 进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。

+

输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息

+

基本使用

+

显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install

+

是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。

+

但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!

+

如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:

+

"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},

+

如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow

+

winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。

+

下载 Microsoft Store 软件

+

实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。

+

winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。

+

卸载其他源安装的软件

+

winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。

+

winget 可以卸载多种类型的软件程序

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" "b/en/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" new file mode 100644 index 00000000..258e9f7c --- /dev/null +++ "b/en/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" @@ -0,0 +1,1696 @@ + + + + + + + + + + + + + + + + + + + + + + + + YaST & Zypper(RPM) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

YaST & Zypper(RPM)

+

openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。

+

软件包的分层管理

+

OpenSUSE 是一个一直被低估的多功能 Linux 操作系统

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/en/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..b6d5ee05 --- /dev/null +++ "b/en/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1843 @@ + + + + + + + + + + + + + + + + + + + + + + + + pacman(Arch)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

pacman(Arch)包管理工具

+

Manjaro 换源

+
sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
+

1. 更新系统

+
命令  解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd   使用 -dd跳过所有检测
+
+

2. 搜索包

+
命令  解释
+pacman -Ss keyword  在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword  搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword  按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name    使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name   查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name    要显示软件包的依赖树
+whoneeds package_name   检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
+

3. 安装包

+
命令  解释
+pacman -S package_name  执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name    安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url   安装一个远程包(不在 pacman 配置的源里面)
+
+

4. 删除包

+
命令  解释
+pacman -R package_name  该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name    在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
+

5. 其他用法

+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc  清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
+

Manjaro软件管理

+

1. 切换国内最快的软件源

+

大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作

+

1. 第一部分使用 pacman-mirrors 更新官方软件源

+

1.1 按照地区自动更新为最快最稳定的软件源镜像地址

+

sudo pacman-mirrors --country China

+

1.2. 恢复默认软件源操作

+

sudo pacman-mirrors --interactive --default

+

1.3 软件源更新之后,我们一般会进行系统更新

+

sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作

+

1.4 查看所有可用的地区信息

+

sudo pacman-mirrors -l

+

参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server

+

2. 使用 pacman 管理软件

+

2. 第二部分使用 pacman 管理软件

+

2.1 同步并且更新你的系统

+

sudo pacman -Syyu

+

2.2 在软件仓库中搜索软件

+

sudo pacman -Ss [software package name]

+

2.3 查看已安装软件

+

sudo pacman -Qs [software package name] +sudo pacman -Qi [software package name]# 附带详细信息 +sudo pacman -Qii [software package name]# 附带更加详细的包信息 +sudo pacman -Ql# 列出所有安装的软件包

+

2.4 查看软件的详细依赖

+

sudo pactree [software package name]

+

2.5 查看系统中那些没有被使用软件依赖包(orphans)

+

sudo pacman -Qdt

+

2.6 自动移除那些系统中没有被使用的依赖包【类似于Debian下的 sudo apt autoremove --purge】

+

sudo pacman -Rs $(pacman -Qdtq)

+

2.7 下载并安装软件包

+

sudo pacman -Syu [software package name]# 从软件仓库安装 +yay -S [software package name]# Packages from the AUR +sudo pacman -U [/package_path/][software package name.pkg.tar.xz]# 从本地安装

+

pacman -U http://www.examplepackage/repo/examplepkg.tar.xz# 从网络安装【非官方仓库】

+

2.8 卸载软件

+

sudo pacman -R [software package name] +sudo pacman -Rs [software package name]# 同时删除依赖 +sudo pacman -Rns [software package name]# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除

+

2.9 清空缓存【默认情况下安装软件会先来缓存中查看是否已经下载过,没有再去下载,软件安装后通常下载缓存还在】

+

sudo pacman -Sc +sudo pacman -Scc # 更彻底的清理

+

关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/GitBucket/index.html b/en/platform/GitBucket/index.html new file mode 100644 index 00000000..6dc4bff8 --- /dev/null +++ b/en/platform/GitBucket/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + GitBucket - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GitBucket

+

简介

+

GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。

+
    +
  • +

    优点

    +
      +
    • +

      完全开源,没有任何限制;

      +
    • +
    • +

      运行在JVM平台上,非常容易部署;

      +
    • +
    • +

      类似于GitHub的界面,操作容易;

      +
    • +
    • +

      丰富的插件,使得扩展非常容易;

      +
    • +
    • +

      提供了大量兼容GitHub的API;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      有点残废的权限管理(权限没有依照公开,私有库区分);

      +
    • +
    • +

      开发语言为Scala,对于非Scala用户自己写插件有一定门槛;

      +
    • +
    • +

      由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。

      +
    • +
    +
  • +
+

部署

+
    +
  1. +

    下载 Release + 里面的war到你的服务器;

    +
  2. +
  3. +

    java -jar gitbucket.war 启动。(笔者用的是JDK17);

    +
  4. +
  5. +

    (可选)将启动端口反向代理到子域名。

    +
  6. +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/chatGPT/index.html b/en/platform/chatGPT/index.html new file mode 100644 index 00000000..8d0daad8 --- /dev/null +++ b/en/platform/chatGPT/index.html @@ -0,0 +1,1663 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChatGPT - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

ChatGPT

+

Official website: https://chat.openai.com/

+

ChatGPT is an artificial intelligence chat robot based on natural language processing technology, which uses GPT (Generative Pre-trained Transformer) technology to generate human language responses.

+

Function:

+
    +
  • Used as a search engine, we can easily use it to search for some information, such as directly asking ChatGPT "how to use ChatGPT".
  • +
  • Used to find learning materials, such as directly asking ChatGPT "how to learn natural language processing".
  • +
  • Used to query documents, such as directly asking ChatGPT "what is the usage of the reduce function in the python library functools".
  • +
  • Used to adjust mood, such as directly asking ChatGPT "how should I date a girl".
  • +
+

Configuration method:

+
    +
  • Search ChatGPT through the browser, click to enter the official website, and click the "Sign in" button to register an account.
  • +
  • After successful registration, bind an overseas mobile phone number, and enter the verification code in the received verification code to complete the registration.
  • +
  • It should be noted that ChatGPT cannot be used in Hong Kong for the time being, and even if the node of the ladder is in Hong Kong, even the login to the official website will be restricted.
  • +
  • If you do not have an overseas mobile phone number, you can obtain it through some mobile phone verification code receiving websites. There are many such websites like ladders, and you only need to google to find them.
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/excalidraw/index.html b/en/platform/excalidraw/index.html new file mode 100644 index 00000000..866a631e --- /dev/null +++ b/en/platform/excalidraw/index.html @@ -0,0 +1,1700 @@ + + + + + + + + + + + + + + + + + + + + + + + + Excalidraw - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Excalidraw

+

简介

+

官网: Excalidraw's repository

+

Excalidraw 是一款开源的画图工具,可以“手绘”一些简单的流程图,显示效果像是用笔在纸上画的一样,操作简单。

+

example1

+

同时其拥有丰富的素材库,帮助每个人更好地绘图。

+

example2

+

除了在线网站,也可以通过浏览器扩展直接安装到本地使用,具体可以在官方文档查看。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/flydav/index.html b/en/platform/flydav/index.html new file mode 100644 index 00000000..3a4eef81 --- /dev/null +++ b/en/platform/flydav/index.html @@ -0,0 +1,1736 @@ + + + + + + + + + + + + + + + + + + + + + + + + FlyDav - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

FlyDav

+

简介

+

FlyDav 是一个轻量级的开源 webdav 服务器

+
    +
  • +

    优点

    +
      +
    • 完美兼容 WebDav 协议
    • +
    • 支持无配置运行,双击即可开启 WebDav 服务器
    • +
    • 完全开源,提供中英文文档
    • +
    • 极简,大小 10MB 以内,跨平台
    • +
    • 安全,不存储明文密码,隔离不同目录
    • +
    +
  • +
  • +

    缺点

    +
      +
    • 不支持 SSL
    • +
    • 不支持细粒度权限管理
    • +
    +
  • +
+

部署

+

最简部署:

+
    +
  1. 首先从 发布页 下载 FlyDav。
  2. +
  3. 运行 ./flydav -H 0.0.0.0 来启动服务器。然后你要输入默认用户 flydav 的密码。
  4. +
  5. 在你的 webdav 客户端(比如 RaiDrive)中打开 http://YOUR_IP:7086/webdav
  6. +
+

完整部署可参阅文档。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/gpt-paper/index.html b/en/platform/gpt-paper/index.html new file mode 100644 index 00000000..f0302e59 --- /dev/null +++ b/en/platform/gpt-paper/index.html @@ -0,0 +1,1833 @@ + + + + + + + + + + + + + + + + + + + + + + + + Gpt paper - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+ +
+ + + +
+
+ + + + + + + + + + + + + +

Gpt paper

+ +

本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明

+

内容

+

关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容

+

new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)

+

因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。

+

侧边栏甄别文献

+

使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)

+

阅读左边的论文,告诉我他讲了什么内容。

+

阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。

+

消化文献并输出(无惧查重)

+

我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。

+
    +
  • 英文文献,总结出中文,生成式的,基本不会重复。
  • +
  • 输出内容要强调一下,否则会不成功。
  • +
  • 如果感觉内容不对,换一篇文献,让他说,或者重新开会话
  • +
+

chatgpt组织语言

+
    +
  • 组织new bing生成的中文
  • +
  • 组织原本的英文,生成中文
  • +
  • 不可以组织论文的中文,效果很差。
  • +
+

论文最后:语言润色

+

如果不用以上ai写的文字,纯粹自己写。

+

写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt

+
    +
  • +

    请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:

    +
  • +
  • +

    请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:

    +
  • +
+

论文最后:改错别字

+

Note

+
    +
  • +

    不要陷入无意义的ai玩耍

    +
  • +
  • +

    不要登录cn的bing,不然之后都会记住。只能重新清除cookie。

    +
  • +
+

保存

+
    +
  • single file插件
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/minio/index.html b/en/platform/minio/index.html new file mode 100644 index 00000000..992f66a0 --- /dev/null +++ b/en/platform/minio/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + MinIO - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

MinIO

+

简介

+

MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。

+
    +
  • +

    优点

    +
      +
    • +

      提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;

      +
    • +
    • +

      兼容现有AWS S3的SDK,API等;

      +
    • +
    • +

      非常完善的文档,活跃的社区;

      +
    • +
    • +

      部署相对简单;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      没有任何中文文档;

      +
    • +
    • +

      非付费版软件更新周期较短,需要自行更新;

      +
    • +
    +
  • +
+

部署

+

RTFM

+

官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。

+

笔者的提醒

+

一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/platform/overleaf/index.html b/en/platform/overleaf/index.html new file mode 100644 index 00000000..a74c4ae9 --- /dev/null +++ b/en/platform/overleaf/index.html @@ -0,0 +1,1658 @@ + + + + + + + + + + + + + + + + + + + + + + + + Overleaf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Overleaf

+

Official website: https://www.overleaf.com

+

Overleaf is an online tex rendering website. The configuration of the tex environment is cumbersome and not friendly enough for novices (especially in Windows), but overleaf is a good alternative. You just need to choose a nice template, and it will be very convenient to write assignments or small papers of less than 10 pages. Overleaf also provides the basic teamwork function, which can be edited by multiple people through links or invitations. The free version of Overleaf has a maximum compilation time and a limited set of features. For more complex projects, consider paying for more features.

+

\(\LaTeX\) is NOT a wysiwyg (what you see is what you get) typesetting system in which users enter specific code, save it in a file with the suffix.tex, and compile it to get the desired pdf file. \(\LaTeX\) Excellent large document typesetting ability and mathematical formula rendering ability is one of the reasons why it can be widely used. To learn more about can refer to the CTAN introduce lshort.

+

Features:

+
    +
  • After the template is edited, it is very fast to write assignments within 10 pages
  • +
  • Isolation of projects can be achieved by writing temp files, and tex-related package management is convenient
  • +
  • Friendly editing interface, double-click the content in the pdf preview to jump directly to the code
  • +
  • Automatically save documents in the cloud, and the whole process is completed on the web page without changing the local environment
  • +
  • Many questions overleaf officially gave answers and examples, such as how to embed pseudo-code blocks, etc.
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/plugins/android/index.html b/en/plugins/android/index.html new file mode 100644 index 00000000..5b94ea8c --- /dev/null +++ b/en/plugins/android/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + Android Studio - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Android Studio

+

This article recommends plug-ins for Android Studio, which can greatly improve your development experience.

+

theme class

+

Atom Material Icons

+

The plugin optimizes icons to improve the aesthetics of your interface.

+

Atom Material Icons

+

Material Theme UI

+

The Material theme for JetBrains IDE, with multiple themes for day and night, makes the interface more beautiful.

+

Material Theme UI

+

Tools

+

JSON to Bean

+

JSON as a lightweight data interchange format. It is often used in development, and one of the requirements is to convert Json to the corresponding Bean object. The following two main plugins are recommended:

+ +

Translate

+

Translation plug-in greatly facilitates the development of developers with poor English foundation. It has the following properties:

+

Translation

+
    +
  • +

    Multiple Translation Engines

    +
      +
    • Microsoft Translator
    • +
    • Google Translate
    • +
    • DeepL Translator
    • +
    • Youdao Translate
    • +
    • Baidu Translate
    • +
    • Alibaba Translate
    • +
    +
  • +
  • +

    Multilingual translation

    +
  • +
  • Document translation
  • +
  • Text-to-speech
  • +
  • Automatic word selection
  • +
  • Automatic word breaks
  • +
  • Word Book
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/plugins/browser/index.html b/en/plugins/browser/index.html new file mode 100644 index 00000000..865dcda9 --- /dev/null +++ b/en/plugins/browser/index.html @@ -0,0 +1,1783 @@ + + + + + + + + + + + + + + + + + + + + + + + + Browser - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Browser

+

This article hopes to inspire others and encourage everyone to propose more convenient browser plug-ins.

+

Tampermonkey

+

Official website: https://www.tampermonkey.net/

+

Very convenient script manager, you can install some small scripts that are not available in the extension store.

+

Simpread

+

Official website: https://simpread.pro/

+

Enhance the browser reading experience, provide a focus mode that dilutes irrelevant elements to increase concentration and a completely pure reading mode; you can export web pages to various formats such as markdown to the local, or import them into notion, onenote and other note-taking applications after authorization, which is convenient for archiving and Read it later. There are many related enhancements in the official plug-in center, but the default mode experience is also quite comfortable.

+

Zotero Connector

+

Official website: https://www.zotero.org/download/connectors

+

Zotero Connectors allow you to save to Zotero +directly from your web browser.

+

Global Speed

+

Official website: https://github.com/polywock/globalSpeed

+

Web extension that sets a default speed for HTML media elements (video and audio).

+

Language Reactor

+

Official website: https://www.languagereactor.com/

+

Language Reactor is a powerful toolbox for learning languages. It helps you to discover, understand, and learn from native materials. Studying will become more effective, interesting, and enjoyable!

+

Vimium

+

Official website: https://github.com/philc/vimium

+

Vimium is a browser extension that provides keyboard-based navigation and control of the web in the spirit of the Vim editor.

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/plugins/img/tabnine.png b/en/plugins/img/tabnine.png new file mode 100644 index 00000000..c387a5cc Binary files /dev/null and b/en/plugins/img/tabnine.png differ diff --git a/en/plugins/tabnine/index.html b/en/plugins/tabnine/index.html new file mode 100644 index 00000000..1c332ef1 --- /dev/null +++ b/en/plugins/tabnine/index.html @@ -0,0 +1,1757 @@ + + + + + + + + + + + + + + + + + + + + + + + + Tabnine - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Tabnine

+

install

+

Installer link: https://www.tabnine.com/install/

+

Features(These words are generated by chatgpt)

+

"TabNine is a machine learning-based code autocompletion tool that can be used in various editors and IDEs, including but not limited to VS Code, Sublime Text, PyCharm, Vim, Emacs, and more. Unlike traditional code autocompletion tools, TabNine not only completes based on existing code snippets and syntax rules, but can also generate entirely new code by learning from large code repositories and language syntax, significantly improving coding efficiency and accuracy.

+

The advantages of TabNine include:

+
    +
  • High accuracy: TabNine is trained using machine learning algorithms and can generate the most appropriate code completion options based on the code context.
  • +
  • Fast response: TabNine's completion response speed is very fast and can easily handle large projects and complex code structures.
  • +
  • Intelligent prediction: TabNine can intelligently predict the next possible code completion option based on context and history, making coding smoother and more efficient.
  • +
  • Easy to customize: TabNine supports user-defined configuration and extension, allowing customization of the tool based on personal needs.
  • +
+

By providing high-quality code completion options, TabNine reduces the time and error rate of writing code and is a highly valuable and practical programming tool."

+

The difference with copilot

+

"TabNine and Copilot are both machine learning-based code autocompletion tools that can generate code completion options based on context and syntax rules to improve coding efficiency and accuracy. However, there are some differences between them.

+

Firstly, they are developed by different companies, with TabNine being developed by Codota and Copilot being developed by OpenAI.

+

Secondly, they have different training data sources. TabNine uses both public and private code repositories from GitHub, while Copilot uses public code repositories from GitHub and OpenAI's own internal code repositories.

+

Thirdly, TabNine supports multiple programming languages, including Python, JavaScript, Java, C++, Go, Ruby, and more, while Copilot currently only supports Python, JavaScript, and TypeScript.

+

Fourthly, TabNine focuses on code completion and intelligent prediction, while Copilot's unique feature is the ability to generate code snippets and functions, even based on natural language descriptions.

+

Finally, TabNine's code is mostly open source, allowing users to customize and extend the tool, while Copilot does not currently support customization and is not open source due to its use of OpenAI's GPT series models.

+

Overall, both TabNine and Copilot are valuable code autocompletion tools with their own strengths and suitable use cases. Users can choose the appropriate tool based on their needs."

+

preview

+

preview

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/Double Commander/index.html b/en/software/Double Commander/index.html new file mode 100644 index 00000000..a8016ddb --- /dev/null +++ b/en/software/Double Commander/index.html @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Double Commander - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Double Commander

+

免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/Pycharm/index.html b/en/software/Pycharm/index.html new file mode 100644 index 00000000..0cfd7610 --- /dev/null +++ b/en/software/Pycharm/index.html @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + PyCharm - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

PyCharm

+

1.首先我们要进行Pyhton解释器的下载

+
print('Hello World')
+
+

Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器

+

下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的

+

查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)

+

2.Python解析器的安装

+

第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)

+

第二步:选择所有要安装的功能菜单,默认全部勾选

+

第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置

+

第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了

+

image-python解释器.png

+

使用exit()退出

+

3. Python开发工具PyCharm(我下载的是2021.2.1)新版容易出现未知问题

+

在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE

+

PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者

+

第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/

+

第二步:设置软件的安装路径,不用安装在 C 盘

+

第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面

+

image-pycharm图片.png

+

4.创建Python项目

+

第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)

+

点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project

+

image-Pycharm打开界面.png

+

第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)

+

你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)

+

image-pycharm配置界面.png

+

其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )

+

新建文件并书写代码

+
print('Hello World')
+
+

进行运行,右上角绿色的三角符号 Run 。

+

结果如下,就完成啦。

+

image-Pycharm的配置结果.png

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/TiddlyWiki/index.html b/en/software/TiddlyWiki/index.html new file mode 100644 index 00000000..d6c02cec --- /dev/null +++ b/en/software/TiddlyWiki/index.html @@ -0,0 +1,1893 @@ + + + + + + + + + + + + + + + + + + + + + + + + TiddlyWiki-知识管理框架 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

TiddlyWiki-知识管理框架

+

官网:https://tiddlywiki.com/

+

国际交流社区:https://talk.tiddlywiki.org/

+
+

很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。

+
+

1. 中文社区

+
    +
  • 太微中文教程:https://tw-cn.netlify.app/
  • +
  • 太微中文Github社区:https://github.com/tiddly-gittly/TiddlyWiki-Chinese-Tutorial
  • +
  • 社区中文教程资源链接(丰富且友好的初学者资源):https://tw-cn.netlify.app/#%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5
  • +
+

2. 介绍太微

+
    +
  1. +

    「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。

    +
  2. +
  3. +

    为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……

    +
  4. +
  5. +

    太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。

    +
  6. +
+

3. 太微能做什么

+
    +
  • +

    您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?

    +
  • +
  • +

    欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。

    +
  • +
  • +

    用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。

    +
  • +
+

4. 使用TiddlyWiki构建本地个人知识库

+
+

非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。

+
+

4.1 TidGi(太记)

+
    +
  • +

    下载链接:https://github.com/tiddly-gittly/TidGi-Desktop

    +
  • +
  • +

    TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。

    +
  • +
+

4.2 TiddlyDesktop

+
    +
  • +

    TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。

    +
  • +
  • +

    下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases

    +
  • +
+

4.3 Timimi

+
    +
  • +

    Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。

    +
  • +
  • +

    可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。

    +
  • +
  • +

    下载链接:https://ibnishak.github.io/Timimi/

    +
  • +
+

4.4 NodeJS环境

+
    +
  • +

    最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。

    +
  • +
  • +

    运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。

    +
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/antlr/index.html b/en/software/antlr/index.html new file mode 100644 index 00000000..c2c56869 --- /dev/null +++ b/en/software/antlr/index.html @@ -0,0 +1,1785 @@ + + + + + + + + + + + + + + + + + + + + + + + + Antlr - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Antlr

+

Official website: https://www.antlr.org/

+

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees

+

DownLoad

+ +

Example

+

example.g4 +

// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+//'*' represents 0 or more occurrences of the production
+//'+' represents at least one occurrence
+//The following example will be parsed as vector<number>
+addExp
+    : number ('+' number)*
+    ;
+
+//You can use # nickname after the production
+//Create an alias to analyze the production of different situations with the same name
+number
+    : IntLiteral # number1
+    | FloatLiteral # number2
+    ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+    : [0-9]+
+    | ('0x'|'0X')[0-9a-fA-F]+
+    ;
+
+// '?' Indicates that the production may exist, if it exists, it only occurs once
+FloatLiteral
+    : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+    | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+    ;
+

+

shell command +

antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+

+

exampleVisitor.h +

#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+    virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+    virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+

+

Reference

+ + + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/code-debug/index.html b/en/software/code-debug/index.html new file mode 100644 index 00000000..b920869d --- /dev/null +++ b/en/software/code-debug/index.html @@ -0,0 +1,1649 @@ + + + + + + + + + + + + + + + + + + + + + + + + code-debug - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

code-debug

+

Website: https://github.com/chenzhiy2001/code-debug/

+

code-debug is a source-level kernel debugging tool that supports Rust. Currently it is capable of debugging the rCore-Tutorial-v3 operating system and support tracing from kernel to user space. Recent work has been done to implement richer and more robust tracing capabilities using eBPF technology.

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/eunomia-bpf/index.html b/en/software/eunomia-bpf/index.html new file mode 100644 index 00000000..08aad139 --- /dev/null +++ b/en/software/eunomia-bpf/index.html @@ -0,0 +1,1753 @@ + + + + + + + + + + + + + + + + + + + + + + + + eunomia-bpf: 简化和增强 eBPF 与 CO-RE[^1] 和 WebAssembly[^2] - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

eunomia-bpf: 简化和增强 eBPF 与 CO-RE1 和 WebAssembly2

+

Actions Status +GitHub release (latest by date) +codecov +DeepSource +CodeFactor

+

一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。

+

介绍

+

eunomia-bpf 是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。

+

使用 eunomia-bpf,您可以:

+
    +
  • 简化编写 eBPF 程序:
  • +
  • 简化构建 CO-RE1 libbpf eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf eventring buffer 自动输出采样数据到内核态。
  • +
  • 自动采样 来自 hash mpas 的数据,并在用户空间中打印 hists(直方图等信息)。
  • +
  • 自动生成 并配置 eBPF 程序的 命令行参数
  • +
  • 您可以同时使用 BCClibbpf 等多种格式编写内核部分。
  • +
  • 使用 Wasm2 构建 eBPF 程序:参见 Wasm-bpf 项目
  • +
  • 在使用 C/C++、Rust、Go…等多种语言,使用 Wasm-bpf 库和工具链来使用 Wasm 编写和运行 eBPF,覆盖从tracing、networking、security到其他用例。
  • +
  • 简化分发 eBPF 程序:
  • +
  • 一个工具用于将预编译的 eBPF 程序作为 Wasm OCI 镜像推送、拉取或运行
  • +
  • 在不需要重新编译 eBPF 程序、不限制架构和内核版本的情况下,在1 行 bash中从 云端存储库URL 运行 eBPF 程序。
  • +
  • 动态加载带有 JSON 配置文件或 Wasm 用户态控制和数据处理模块的 eBPF 程序。
  • +
+

更多信息请参见 documents/introduction.md

+

eunomia-bpf 提供了大量教程和示例应用,帮助入门 eBPF 程序开发

+ +

您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:

+
# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
+
+
+
    +
  1. +

    CO-RE:Compile Once – Run Everywhere 

    +
  2. +
  3. +

    WebAssembly 或 Wasm:https://webassembly.org/ 

    +
  4. +
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/fzf/index.html b/en/software/fzf/index.html new file mode 100644 index 00000000..1fb06b65 --- /dev/null +++ b/en/software/fzf/index.html @@ -0,0 +1,1899 @@ + + + + + + + + + + + + + + + + + + + + + + + + Fzf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Fzf

+ +

fzf.png

+

简介

+

仓库地址:https://github.com/junegunn/fzf

+

FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。

+

image-20230209215751132

+

安装

+

macOS

+

对于 macOS ,推荐使用 Homebrew 进行安装:

+
brew install fzf
+
+

Linux

+

在 Linux 发行版上,可使用不同的包管理器进行安装,例如:

+

Debian/Ubuntu(Apt)

+
sudo apt install fzf
+
+

ArchLinux(Pacman)

+
sudo pacman -S fzf
+
+

Windows

+

并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。

+

Windows下可使用 Scoop 进行安装使用。

+
scoop install fzf
+
+

简单使用

+

文件搜索

+

直接执行 FZF ,打开文件搜索功能。

+
fzf
+
+

在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录相对路径

+

使用快捷键 Ctrl+JCtrl+N 可向下滚动列表; Ctrl+KCtrl+P 可向下滚动列表。 +使用 Enter 选中条目并退出 FZF,Ctrl+CCtrl+GEsc 可退出 FZF 而不进行选择。

+

作为 Vim 插件

+

FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。

+

在本例中,使用 vim-plug 插件管理器进行安装: +编辑 ~/.vimrc 文件,在 call plug#begin() 下添加如下行:

+
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
+

重新加载 .vimrc 文件:

+
source ~/.vimrc
+
+

打开 vim ,并执行 :PlugInstall 用于安装插件。

+

更多信息

+

优点

+
    +
  1. 本工具使用 Go 编写,不需其他依赖
  2. +
  3. 性能强悍,搜索效率高
  4. +
  5. 功能丰富,可视化界面(TUI)易于操作
  6. +
  7. 可对接诸多工具(例Vim、tmux 等)
  8. +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/gdbdashboard/index.html b/en/software/gdbdashboard/index.html new file mode 100644 index 00000000..38ce5f2f --- /dev/null +++ b/en/software/gdbdashboard/index.html @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + GDB-dashboard - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GDB-dashboard

+

Introduction

+

Using python to configure the gdb debugging interface, you can write your own code to define the entire debugging interface. It can be said that it is comparable to an IDE, and the display is also very good-looking. It is completely based on the terminal. As the underlying debugging software, it can help developers better view variables and registers. , single-step execution, etc.

+

install

+ +
wget -P ~ https://git.io/.gdbinit # If the network speed is slow, you can directly create a new file with the same name. gdbinit and then copy and paste it
+
+
    +
  • renderings gdbrenderings
  • +
+ +

It is true that the IDE integrates a lot of debugging tools at present, but GDB still plays an irreplaceable role in some kernel programming or other low-level development fields. For this reason, we hope to find a more observable page in the original boring debugging terminal. Fortunately, someone has helped us to realize this tool, we hope to bring such convenience to everyone.

+

Run and debug basic commands

+

Reference common commands for gdb debugging

+

Notice

+

When using this plugin, you need to check whether the gdb currently in use supports python scripts. When Scripting in the "Python" language is not supported in this copy of GDB. appears, it indicates that the gdb does not support python scripts and cannot be used this plugin. In addition, you also need to pay attention to whether the versions of gdb and python match, see issue.

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/en/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" "b/en/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" new file mode 100644 index 00000000..8fe15fb5 Binary files /dev/null and "b/en/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" differ diff --git "a/en/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" "b/en/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" new file mode 100644 index 00000000..34459172 Binary files /dev/null and "b/en/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" differ diff --git "a/en/software/img/pycharm\345\233\276\347\211\207.png" "b/en/software/img/pycharm\345\233\276\347\211\207.png" new file mode 100644 index 00000000..93161268 Binary files /dev/null and "b/en/software/img/pycharm\345\233\276\347\211\207.png" differ diff --git "a/en/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" "b/en/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" new file mode 100644 index 00000000..51b82e7f Binary files /dev/null and "b/en/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" differ diff --git "a/en/software/img/python\350\247\243\351\207\212\345\231\250.png" "b/en/software/img/python\350\247\243\351\207\212\345\231\250.png" new file mode 100644 index 00000000..36da2c5e Binary files /dev/null and "b/en/software/img/python\350\247\243\351\207\212\345\231\250.png" differ diff --git a/en/software/mathpix/index.html b/en/software/mathpix/index.html new file mode 100644 index 00000000..e770e911 --- /dev/null +++ b/en/software/mathpix/index.html @@ -0,0 +1,1660 @@ + + + + + + + + + + + + + + + + + + + + + + + + Mathpix - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Mathpix

+

Official website: https://mathpix.com

+

Mathpix is a tex format formula generation software. Its main function is to identify the formula in the screenshot through OCR technology and generate the corresponding tex code, which can greatly speed up the speed of formula writing in the process of writing a thesis.

+

Features:

+
    +
  • Support the recognition of handwritten formulas and automatically generate tex codes.
  • +
  • Support the operation of the digital board, you can write formulas, recognize and generate tex through an external digital board.
  • +
  • Support table recognition, although not as accurate as formulas, but in most cases the effect is ok.
  • +
  • Interactive editing interface, when the orc result deviates, you can directly modify it.
  • +
+

Shortcoming:

+
    +
  • There is a limit on the number of times of use, but it can be solved by changing the mailbox. According to my experience, I don’t use that much at all. The normal model is enough, and it’s not worthwhile to pay to upgrade the pro version.
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/nano/index.html b/en/software/nano/index.html new file mode 100644 index 00000000..1d7ab0ac --- /dev/null +++ b/en/software/nano/index.html @@ -0,0 +1,1751 @@ + + + + + + + + + + + + + + + + + + + + + + + + Nano - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Nano

+ +

GNU nano

+

Official website: https://www.nano-editor.org/

+

GNU nano is a simple and easy-to-use command line editor, it is the default text editor for some
+linux distributions, and you can also use it in the windows.

+

install

+

In the linux distributions we can use the package manager to install it.

+

Take the debain with apt as example:

+
sudo apt install nano
+
+

basic use

+

Input nano to the terminal you can get the detail instruction.

+

image.png

+

advantages

+
    +
  • lightweight and take a little system recourse.
  • +
  • simple and easy to use.
  • +
+

disadvantages

+
    +
  • few functions, compared with emacs and vim, nano is less scalable.
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/ranger/index.html b/en/software/ranger/index.html new file mode 100644 index 00000000..155e30b2 --- /dev/null +++ b/en/software/ranger/index.html @@ -0,0 +1,1773 @@ + + + + + + + + + + + + + + + + + + + + + + + + Ranger - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Ranger

+

Introduction

+

Ranger is a terminal file manager with Vim-style shortcuts. You can use the keyboard to quickly view and preview files, navigate between different folders, and perform common operations such as copying, pasting, deleting, and renaming files or folders directly under the ranger interface.

+

Install

+
    +
  • Official website https://github.com/ranger/ranger
  • +
  • +

    How to install ranger

    +
      +
    • Ubuntu && Debian
    • +
    +
    sudo apt install ranger
    +
    +
      +
    • install from pip
    • +
    +
    pip install ranger-fm
    +
    +
  • +
  • +

    ranger renderings

    +
  • +
+

ranger interface demo

+ +
    +
  1. No longer need to use the cd command to switch directories.
  2. +
  3. Simplify the operation of copying, pasting and renaming files (folders).
  4. +
  5. Ranger has a corresponding vim plugin, you can open ranger in vim after some configuration, which will boost your effiency.
  6. +
+

refer to

+ + + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/software/texmacs/index.html b/en/software/texmacs/index.html new file mode 100644 index 00000000..fb5a18b8 --- /dev/null +++ b/en/software/texmacs/index.html @@ -0,0 +1,1641 @@ + + + + + + + + + + + + + + + + + + + + + + GNU TeXmacs - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GNU TeXmacs

+

Website: https://www.texmacs.org/tmweb/home/welcome.en.html

+

Try GNU TeXmacs if you are being tortured by LaTeX GNU TeXmacs is a WYSIWYG open source editor for scientific documents (papers, notes, etc.). Highly recommended if you write lots of maths!

+

Features:

+
    +
  • Editing tables and formulas visually.
  • +
  • Intuitive keyboard shortcuts. One of them is that when editing a mathematical formula, you can switch to similar symbols by pressing tab multiple times. For example, press a and then press tab to get \(\alpha\) and other characters that looks like a.
  • +
  • Support many computer algebra systems and interactive software, similar to Jupyter Notebook
  • +
  • Support Scheme and macros for hacking
  • +
+

In most cases the built-in documentations will suit your needs. Occasionally, there are outdated parts in the documentation. In this case you can read The Jolly Writer, which is also written by the main author of TeXmacs.

+

Remember to switch to Chinese mode (click the national flag on the menu bar), otherwise it will not line wrap automatically.

+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/specification/markdown/chinese_copywriting_guidelines/index.html b/en/specification/markdown/chinese_copywriting_guidelines/index.html new file mode 100644 index 00000000..d96bb536 --- /dev/null +++ b/en/specification/markdown/chinese_copywriting_guidelines/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + + + + + + + 中英混排规范 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

中英混排规范

+

空格

+
+

「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。

+

与大家共勉之。」——vinta/paranoid-auto-spacing

+
+

中英文之间需要增加空格

+

正确:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。

+
+

错误:

+
+

在LeanCloud上,数据存储是围绕AVObject进行的。

+

在 LeanCloud上,数据存储是围绕AVObject 进行的。

+
+

完整的正确用法:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。每个 AVObject 都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个 AVObject 上提前指定存在哪些键,只要直接设定对应的 key-value 即可。

+
+

例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。

+

中文与数字之间需要增加空格

+

正确:

+
+

今天出去买菜花了 5000 元。

+
+

错误:

+
+

今天出去买菜花了 5000元。

+

今天出去买菜花了5000元。

+
+

数字与单位之间需要增加空格

+

正确:

+
+

我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB

+
+

错误:

+
+

我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB

+
+

例外:度数/百分比与数字之间不需要增加空格:

+

正确:

+
+

角度为 90° 的角,就是直角。

+

新 MacBook Pro 有 15% 的 CPU 性能提升。

+
+

错误:

+
+

角度为 90 ° 的角,就是直角。

+

新 MacBook Pro 有 15 % 的 CPU 性能提升。

+
+

全角标点与其他字符之间不加空格

+

正确:

+
+

刚刚买了一部 iPhone,好开心!

+
+

错误:

+
+

刚刚买了一部 iPhone ,好开心!

+

刚刚买了一部 iPhone, 好开心!

+
+

text-spacing 来挽救?

+

CSS Text Module Level 4 的 text-spacing 和 Microsoft 的 -ms-text-autospace 可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。

+

标点符号

+

不重复使用标点符号

+

即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。

+

正确:

+
+

德国队竟然战胜了巴西队!

+

她竟然对你说「喵」?!

+
+

错误:

+
+

德国队竟然战胜了巴西队!!

+

德国队竟然战胜了巴西队!!!!!!!!

+

她竟然对你说「喵」??!!

+

她竟然对你说「喵」?!?!??!!

+
+

全角和半角

+

不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。

+

使用全角中文标点

+

正确:

+
+

嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

错误:

+
+

嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!

+

嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!

+

核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

数字使用半角字符

+

正确:

+
+

这个蛋糕只卖 1000 元。

+
+

错误:

+
+

这个蛋糕只卖 1000 元。

+
+

例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。

+

遇到完整的英文整句、特殊名词,其内容使用半角标点

+

正确:

+
+

乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」

+

推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。

+
+

错误:

+
+

乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」

+

推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。

+
+

名词

+

专有名词使用正确的大小写

+

大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。

+

正确:

+
+

使用 GitHub 登录

+

我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。

+
+

错误:

+
+

使用 github 登录

+

使用 GITHUB 登录

+

使用 Github 登录

+

使用 gitHub 登录

+

使用 gイんĤЦ8 登录

+

我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。

+

我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。

+

我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。

+

我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。

+

我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。

+
+

注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;text-transform: lowercase; 对表现形式进行定义。

+

不要使用不地道的缩写

+

正确:

+
+

我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。

+
+

错误:

+
+

我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。

+
+

争议

+

以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。

+

链接之间增加空格

+

用法:

+
+

提交一个 issue 并分配给相关同事。

+

访问我们网站的最新动态,请 点击这里 进行订阅!

+
+

对比用法:

+
+

提交一个 issue并分配给相关同事。

+

访问我们网站的最新动态,请点击这里进行订阅!

+
+

简体中文使用直角引号

+

用法:

+
+

「老师,『有条不紊』的『紊』是什么意思?」

+
+

对比用法:

+
+

“老师,‘有条不紊’的‘紊’是什么意思?”

+
+
+

Note

+

本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/specification/markdown/latex/index.html b/en/specification/markdown/latex/index.html new file mode 100644 index 00000000..58006804 --- /dev/null +++ b/en/specification/markdown/latex/index.html @@ -0,0 +1,2913 @@ + + + + + + + + + + + + + + + + + + + + + + + + LaTeX - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

LaTeX

+

如何插入公式

+

LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。

+

行中公式可以用如下方法表示:

+

$ 数学公式 $

+

独立公式可以用如下方法表示:

+

$$ 数学公式 $$

+

函数、符号及特殊字符

+

声调 / 变音符号

+

\dot{a}, \ddot{a}, \acute{a}, \grave{a}

+

\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)

+

\check{a}, \breve{a}, \tilde{a}, \bar{a}

+

\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)

+

\hat{a}, \widehat{a}, \vec{a}

+

\(\hat{a}, \widehat{a}, \vec{a}\)

+

标准函数

+

指数

+

\exp_a b = a^b, \exp b = e^b, 10^m

+

\(\exp_a b = a^b, \exp b = e^b, 10^m\)

+

对数

+

\ln c, \lg d = \log e, \log_{10} f

+

\(\ln c, \lg d = \log e, \log_{10} f\)

+

三角函数

+

\sin a, \cos b, \tan c, \cot d, \sec e, \csc f

+

\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)

+

\arcsin a, \arccos b, \arctan c

+

\(\arcsin a, \arccos b, \arctan c\)

+

\sinh a, \cosh b, \tanh c, \coth d

+

\(\sinh a, \cosh b, \tanh c, \coth d\)

+

\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n

+

\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)

+

\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q

+

\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)

+

最大值,最小值

+

\min(x,y), \max(x,y)

+

\(\min(x,y), \max(x,y)\)

+

界限,极限

+

\min x, \max y, \inf s, \sup t

+

\(\min x, \max y, \inf s, \sup t\)

+

\lim u, \liminf v, \limsup w

+

\(\lim u, \liminf v, \limsup w\)

+

\lim_{x \to \infty} \frac{1}{n(n+1)}

+

\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)

+

\dim p, \deg q, \det m, \ker\phi

+

\(\dim p, \deg q, \det m, \ker\phi\)

+

投射

+

\Pr j, \hom l, \lVert z \rVert, \arg z

+

\(\Pr j, \hom l, \lVert z \rVert, \arg z\)

+

微分及导数

+

dt, \mathrm{d}t, \partial t, \nabla\psi

+

\(dt, \mathrm{d}t, \partial t, \nabla\psi\)

+

dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y

+

\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)

+

\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y

+

\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)

+

类字母符号及常数

+

\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar

+

∞,ℵ,∁,∍,ð,Ⅎ,ℏ

+

\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS

+

\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)

+

模运算

+

s_k \equiv 0 \pmod{m}

+

\(s_k \equiv 0 \pmod{m}\)

+

a \bmod b

+

\(a \bmod b\)

+

\gcd(m, n), \operatorname{lcm}(m, n)

+

\(\gcd(m, n), \operatorname{lcm}(m, n)\)

+

\mid, \nmid, \shortmid, \nshortmid

+

\(\mid, \nmid, \shortmid, \nshortmid\)

+

根号

+

\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}

+

\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)

+

运算符

+

+, -, \pm, \mp, \dotplus

+

\(+, -, \pm, \mp, \dotplus\)

+

\times, \div, \divideontimes, /, \backslash

+

\(\times, \div, \divideontimes, /, \backslash\)

+

\cdot, * \ast, \star, \circ, \bullet

+

\(\cdot, * \ast, \star, \circ, \bullet\)

+

\boxplus, \boxminus, \boxtimes, \boxdot

+

\(\boxplus, \boxminus, \boxtimes, \boxdot\)

+

\oplus, \ominus, \otimes, \oslash, \odot

+

\(\oplus, \ominus, \otimes, \oslash, \odot\)

+

\circleddash, \circledcirc, \circledast

+

\(\circleddash, \circledcirc, \circledast\)

+

\bigoplus, \bigotimes, \bigodot

+

\(\bigoplus, \bigotimes, \bigodot\)

+

集合

+

\{ \}, \empty \emptyset, \varnothing

+

\(\{ \}, \empty \emptyset, \varnothing\)

+

\in, \notin \not\in, \ni, \not\ni

+

\(\in, \notin \not\in, \ni, \not\ni\)

+

\cap, \Cap, \sqcap, \bigcap

+

\(\cap, \Cap, \sqcap, \bigcap\)

+

\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus

+

\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)

+

\setminus, \smallsetminus, \times

+

\(\setminus, \smallsetminus, \times\)

+

\subset, \Subset, \sqsubset

+

\(\subset, \Subset, \sqsubset\)

+

\supset, \Supset, \sqsupset

+

\(\supset, \Supset, \sqsupset\)

+

\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq

+

\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)

+

\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq

+

\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)

+

\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq

+

\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)

+

\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq

+

\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)

+

关系符号

+

=, \ne, \neq, \equiv, \not\equiv

+

\(=, \ne, \neq, \equiv, \not\equiv\)

+

\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=

+

\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)

+

\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong

+

\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)

+

\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto

+

\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)

+

<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot

+

\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)

+

>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot

+

\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)

+

\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq

+

\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)

+

\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq

+

\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)

+

\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless

+

\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)

+

\leqslant, \nleqslant, \eqslantless

+

\(\leqslant, \nleqslant, \eqslantless\)

+

\geqslant, \ngeqslant, \eqslantgtr

+

\(\geqslant, \ngeqslant, \eqslantgtr\)

+

\lesssim, \lnsim, \lessapprox, \lnapprox

+

\(\lesssim, \lnsim, \lessapprox, \lnapprox\)

+

\gtrsim, \gnsim, \gtrapprox, \gnapprox

+

\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)

+

\prec, \nprec, \preceq, \npreceq, \precneqq

+

\(\prec, \nprec, \preceq, \npreceq, \precneqq\)

+

\succ, \nsucc, \succeq, \nsucceq, \succneqq

+

\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)

+

\preccurlyeq, \curlyeqprec

+

\(\preccurlyeq, \curlyeqprec\)

+

\succcurlyeq, \curlyeqsucc

+

\(\succcurlyeq, \curlyeqsucc\)

+

\precsim, \precnsim, \precapprox, \precnapprox

+

\(\precsim, \precnsim, \precapprox, \precnapprox\)

+

\succsim, \succnsim, \succapprox, \succnapprox

+

\(\succsim, \succnsim, \succapprox, \succnapprox\)

+

几何符号

+

\parallel, \nparallel, \shortparallel, \nshortparallel

+

\(\parallel, \nparallel, \shortparallel, \nshortparallel\)

+

\perp, \angle, \sphericalangle, \measuredangle, 45^\circ

+

\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)

+

\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar

+

\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)

+

\bigcirc, \triangle, \bigtriangleup, \bigtriangledown

+

\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)

+

\vartriangle, \triangledown

+

\(\vartriangle, \triangledown\)

+

\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright

+

\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)

+

逻辑符号

+

\forall, \exists, \nexists

+

\(\forall, \exists, \nexists\)

+

\therefore, \because, \And

+

\(\therefore, \because, \And\)

+

\vee, \curlyvee, \bigvee

+

\(\vee, \curlyvee, \bigvee\)

+

\land, \wedge, \curlywedge, \bigwedge

+

\(\land, \wedge, \curlywedge, \bigwedge\)

+

\bar{q}, \bar{abc}, \overline{q}, \overline{abc},

+

\lnot \neg, \not\operatorname{R}, \bot, \top

+

\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)

+

\(\lnot \neg, \not\operatorname{R}, \bot, \top\)

+

\vdash \dashv, \vDash, \Vdash, \models

+

\(\vdash \dashv, \vDash, \Vdash, \models\)

+

\Vvdash \nvdash \nVdash \nvDash \nVDash

+

\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)

+

\ulcorner \urcorner \llcorner \lrcorner

+

\(\ulcorner \urcorner \llcorner \lrcorner\)

+

箭头

+

\Rrightarrow, \Lleftarrow

+

\(\Rrightarrow, \Lleftarrow\)

+

\Rightarrow, \nRightarrow, \Longrightarrow \implies

+

\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)

+

\Leftarrow, \nLeftarrow, \Longleftarrow

+

\(\Leftarrow, \nLeftarrow, \Longleftarrow\)

+

\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff

+

\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)

+

\Uparrow, \Downarrow, \Updownarrow

+

\(\Uparrow, \Downarrow, \Updownarrow\)

+

\rightarrow \to, \nrightarrow, \longrightarrow

+

\(\rightarrow \to, \nrightarrow, \longrightarrow\)

+

\leftarrow \gets, \nleftarrow, \longleftarrow

+

\(\leftarrow \gets, \nleftarrow, \longleftarrow\)

+

\leftrightarrow, \nleftrightarrow, \longleftrightarrow

+

\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)

+

\uparrow, \downarrow, \updownarrow

+

\(\uparrow, \downarrow, \updownarrow\)

+

\nearrow, \swarrow, \nwarrow, \searrow

+

\(\nearrow, \swarrow, \nwarrow, \searrow\)

+

\mapsto, \longmapsto

+

\(\mapsto, \longmapsto\)

+

\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons

+

\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)

+

\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright

+

\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)

+

\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft

+

\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)

+

\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow

+

\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)

+

特殊符号

+

省略号:数学公式中常见的省略号有两种,\ldots 表示与文本底线对齐的省略号,\cdots 表示与文本中线对齐的省略号。

+

\amalg \% \dagger \ddagger \ldots \cdots

+

\(\amalg \% \dagger \ddagger \ldots \cdots\)

+

\smile \frown \wr \triangleleft \triangleright

+

\(\smile \frown \wr \triangleleft \triangleright\)

+

\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp

+

\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)

+

未分类

+

\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes

+

\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)

+

\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq

+

\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)

+

\intercal \barwedge \veebar \doublebarwedge \between \pitchfork

+

\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)

+

\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright

+

\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)

+

\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq

+

\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)

+

上标、下标及积分等

+

功能|语法|效果

+

^ 表示上标, _ 表示下标。如果上下标的内容多于一个字符,需要用 {} 将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。

+

上标

+

a^2

+

\(a^2\)

+

下标

+

a_2

+

\(a_2\)

+

组合

+

a^{2+2}

+

\(a^{2+2}\)

+

a_{i,j}

+

\(a_{i,j}\)

+

结合上下标

+

x_2^3

+

\(x_2^3\)

+

前置上下标

+

{}_1^2\!X_3^4

+

\({}_1^2\!X_3^4\)

+

导数

+

x'

+

\(x'\)

+

导数

+

x^\prime

+

\(x\prime\)

+

导数点

+

\dot{x}

+

\(\dot{x}\)

+

\ddot{y}

+

\(\ddot{y}\)

+

向量

+

\vec{c}(只有一个字母)

+

\(\vec{c}\)

+

\overleftarrow{a b}

+

\(\overleftarrow{a b}\)

+

\overrightarrow{c d}

+

\(\overrightarrow{c d}\)

+

\overleftrightarrow{a b}

+

\(\overleftrightarrow{a b}\)

+

\widehat{e f g}

+

\(\widehat{e f g}\)

+

上弧

+

(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)

+

\overset{\frown} {AB}

+

\(\overset{\frown} {AB}\)

+

上划线

+

\overline{h i j}

+

\(\overline{h i j}\)

+

下划线

+

\underline{k l m}

+

\(\underline{k l m}\)

+

上括号

+

\overbrace{1+2+\cdots+100}

+

\(\overbrace{1+2+\cdots+100}\)

+

\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}

+

\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)

+

下括号

+

\underbrace{a+b+\cdots+z}

+

\(\underbrace{a+b+\cdots+z}\)

+

\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}

+

\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)

+

求和(累加)

+

\sum_{k=1}^N k^2

+

\(\sum_{k=1}^N k^2\)

+

\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}

+

\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)

+

求积(累乘)

+

\prod_{i=1}^N x_i

+

\(\prod_{i=1}^N x_i\)

+

\begin{matrix} \prod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)

+

上积

+

\coprod_{i=1}^N x_i

+

\(\coprod_{i=1}^N x_i\)

+

\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)

+

极限

+

\lim_{n \to \infty}x_n

+

\(\lim_{n \to \infty}x_n\)

+

\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}

+

\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)

+

积分

+

\int_{-N}^{N} e^x\, {\rm d}x

+

\(\int_{-N}^{N} e^x\, {\rm d}x\)

+

本例中 \ , 和 {\rm d} 部分可省略,但建议加入,能使式子更美观。{\rm d} 可以用 \mathrm{d} 等价替换。

+

\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}(矩阵中积分符号变小)

+

\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)

+

双重积分

+

\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y

+

\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)

+

三重积分

+

\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z

+

\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)

+

闭合的曲线、曲面积分

+

\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y

+

\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)

+

交集

+

\bigcap_1^{n} p

+

\(\bigcap_1^{n} p\)

+

并集

+

\bigcup_1^{k} p

+

\(\bigcup_1^{k} p\)

+

分数

+

通常使用 \frac {分子} {分母} 命令产生一个分数,分数可嵌套。 +便捷情况可直接输入 \frac ab 来快速生成一个 \(\frac ab\) 。 +如果分式很复杂,亦可使用 分子 \over 分母 命令,此时分数仅有一层。

+

功能|语法|效果

+

分数

+

\frac{2}{4} = 0.5

+

\(\frac{2}{4}=0.5\)

+

小型分数

+

\tfrac{2}{4} = 0.5

+

\(\tfrac{2}{4} = 0.5\)

+

连分式(大型嵌套分式)

+

\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a

+

\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)

+

大型不嵌套分式

+

\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a

+

\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)

+

二项式系数

+

\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

小型二项式系数

+

\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

大型二项式系数

+

\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac 符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。 +横着写这些分式,中间使用斜线间隔 / (用斜线代替分数线)。

+

例子:

+
\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
+

显示:

+
\[ +\begin{array}{cc} +\mathrm{Bad} & \mathrm{Better} \\ +\hline \\ +e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\ +\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\ +\end{array} +\]
+

矩阵、条件表达式、方程组

+

语法:

+
\begin{类型}
+公式内容
+\end{类型}
+
+

类型可以是:矩阵 matrix pmatrix bmatrix Bmatrix vmatrix Vmatrix 、条件表达式 cases 、多行对齐方程式 aligned 、数组 array

+

在公式内容中:在每一行中插入 & 来指定需要对齐的内容,在每行结尾处使用 \\ 换行

+

无框矩阵

+

在开头使用 begin{matrix} ,在结尾使用 end{matrix} ,在中间插入矩阵元素,每个元素之间插入 & ,并在每行结尾处使用 \\

+
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
+

\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)

+

有框矩阵

+

在开头将 matrix 替换为 pmatrix bmatrix Bmatrix vmatrix Vmatrix

+
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
+

\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)

+
\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
+

\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)

+

使用 \cdots ⋯ , \ddots ⋱ , \vdots ⋮ 来输入省略符号。

+
\begin{bmatrix}
+0      & \cdots & 0      \\
+\vdots & \ddots & \vdots \\
+0      & \cdots & 0
+\end{bmatrix}
+
+

\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)

+
\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
+

\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)

+
\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
+

\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)

+

条件表达式

+
f(n) =
+\begin{cases} 
+n/2,  & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
+

\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)

+

多行等式、同余式

+

人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}

+
\begin{aligned}
+f(x) & = (m+n)^2 \\
+     & = m^2+2mn+n^2 \\
+\end{aligned}
+
+

\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)

+
\begin{aligned}
+3^{6n+3}+4^{6n+3} 
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\  
+& \equiv 27^{2n+1}+64^{2n+1}\\  
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\ 
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
+

\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)

+
\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+     & = m^2-2mn+n^2 \\
+\end{alignedat}
+
+

\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)

+

方程组

+
\begin{cases}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
+

\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)

+

+
\left\{\begin{aligned}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
+

\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)

+

数组与表格

+

通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array} 开头,并在其后定义列数及每一列的文本对齐属性,c l r 分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 | ,若要插入水平分割线,在下一行输入前插入 \hline 。与矩阵相似,每行元素间均须要插入 & ,每行元素以 \\ 结尾,最后以 \end{array} 结束数组。

+
    +
  • 例子:
  • +
+
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcl}
+z        & = & a \\
+f(x,y,z) & = & x + y + z 
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcr}
+z        & = & a \\
+f(x,y,z) & = & x + y + z    
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)

+

嵌套数组或表格

+

多个数组/表格可 互相嵌套 并组成一组数组/一组表格。 +使用嵌套前必须声明 $$ 符号。

+
    +
  • 例子:
  • +
+
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+    % inner horizontal array of arrays 内层水平表格
+    \begin{array}{cc}
+        % inner array of minimum values 内层"最小值"数组
+        \begin{array}{c|cccc}
+        \text{min} & 0 & 1 & 2 & 3\\
+        \hline
+        0 & 0 & 0 & 0 & 0\\
+        1 & 0 & 1 & 1 & 1\\
+        2 & 0 & 1 & 2 & 2\\
+        3 & 0 & 1 & 2 & 3
+        \end{array}
+    &
+        % inner array of maximum values 内层"最大值"数组
+        \begin{array}{c|cccc}
+        \text{max}&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 1 & 2 & 3\\
+        2 & 2 & 2 & 2 & 3\\
+        3 & 3 & 3 & 3 & 3
+        \end{array}
+    \end{array}
+    % 内层第一行表格组结束
+    \\
+    % inner array of delta values 内层第二行Delta值数组
+        \begin{array}{c|cccc}
+        \Delta&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 0 & 1 & 2\\
+        2 & 2 & 1 & 0 & 1\\
+        3 & 3 & 2 & 1 & 0
+        \end{array}
+        % 内层第二行表格组结束
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)

+

用数组实现带分割符号的矩阵

+
    +
  • 例子:
  • +
+
$$
+\left[
+    \begin{array}{cc|c}
+      1&2&3\\
+      4&5&6
+    \end{array}
+\right]
+$$
+
+

显示:

+
\[ +\left[ + \begin{array}{cc|c} + 1&2&3\\ + 4&5&6 + \end{array} +\right] +\]
+

其中 cc|c 代表在一个三列矩阵中的第二和第三列之间插入分割线。

+

字体

+

希腊字母

+
+

Note

+

对于部分希腊字母,例如 \Alpha 在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题

+
+

输入 \小写希腊字母英文全称\首字母大写希腊字母英文全称 来分别输入小写和大写希腊字母。

+

A B \Gamma \Delta E Z H \Theta

+

\(A B \Gamma \Delta E Z H \Theta\)

+

I K \Lambda M N \Xi O \Pi

+

\(I K \Lambda M N \Xi O \Pi\)

+

P \Sigma T \Upsilon \Phi X \Psi \Omega

+

\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)

+

\alpha \beta \gamma \delta \epsilon \zeta \eta \theta

+

\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)

+

\iota \kappa \lambda \mu \nu \omicron \xi \pi

+

\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)

+

\rho \sigma \tau \upsilon \phi \chi \psi \omega

+

\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)

+

部分字母有变量专用形式,以 \var- 开头

+

\varepsilon \digamma \varkappa \varpi

+

\(\varepsilon \digamma \varkappa \varpi\)

+

\varrho \varsigma \vartheta \varphi

+

\(\varrho \varsigma \vartheta \varphi\)

+

希伯来符号

+

\aleph \beth \gimel \daleth

+

\(\aleph \beth \gimel \daleth\)

+
+

Note

+

该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/specification/markdown/markdown/index.html b/en/specification/markdown/markdown/index.html new file mode 100644 index 00000000..09193ff8 --- /dev/null +++ b/en/specification/markdown/markdown/index.html @@ -0,0 +1,2065 @@ + + + + + + + + + + + + + + + + + + + + + + + + Markdown 写作 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Markdown 写作

+
+

Note

+

本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。

+
+

标题

+

你的内容标题应该从二级标题( ## )开始

+
# 一级标题
+## 二级标题
+### 三级标题
+
+

强调,斜体,删除线

+

我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球

+
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
+

分隔符

+
---
+***
+
+

链接

+

你应该避免直接内嵌 HTML 代码。

+
[link name](link url) 或者 <link url>
+
+

列表

+
    +
  • +

    多翻译引擎

    +
      +
    • 谷歌翻译
    • +
    • 微软翻译
    • +
    • 有道翻译
    • +
    • 百度翻译
    • +
    • 阿里翻译
    • +
    • DeepL 翻译
    • +
    +
  • +
  • +

    多语言互译

    +
  • +
+
- 多翻译引擎
+
+    * 谷歌翻译
+    * 微软翻译
+    * 有道翻译
+    * 百度翻译
+    * 阿里翻译
+    * DeepL 翻译
+
+- 多语言互译
+
+

代码

+

使用单引号 code 来表示行内代码,使用三引号来表示代码块。

+
code
+
+

并且对于代码块,你应该写上对应的语言

+

图片

+

你应该避免内嵌 HTML 来插入图片。

+
![link name](picture url)
+
+

注释

+

下面是一段注释

+
+

这里是一段注释 (<blockquote></blockquote>) +这是注释的第二行

+
+
# 这里是注释里面的代码段
+print("hello")
+
+
+

注释

+
+

注释嵌套 +注释嵌套

+
+
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
+

Emoji

+

暂不支持 emoji 语法,但是可以直接从 emoji 表情大全拷贝表情到文档,比如: +🍊 🍇 😀 😅 😇

+
+

访问http://emojihomepage.com/以获取更多emoji

+
+

上下标

+

H2O, y = x2

+
H~2~O, y = x^2^
+
+

引用

+

我能干饭我自豪。1

+
我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
+

表格

+ + + + + + + + + + + + + + + + + +
Header 1Header2
Cell 1Cell 2 link
Cell 3Cell 4
+
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
+

任务列表

+
    +
  • 任务1
  • +
  • 任务2
  • +
  • 任务3
  • +
  • 任务4
  • +
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
+

数学

+

文档支持 LaTeX ,关于 LaTeX ,你可以访问 LaTeX公式手册 来获取帮助。

+

mermaid 支持

+

使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网

+
sequenceDiagram
+  Alice->>John: Hello John, how are you?
+  loop Healthcheck
+      John->>John: Fight against hypochondria
+  end
+  Note right of John: Rational thoughts!
+  John-->>Alice: Great!
+  John->>Bob: How about you?
+  Bob-->>John: Jolly good!
+
+
    ```mermaid
+    sequenceDiagram
+        Alice->>John: Hello John, how are you?
+        loop Healthcheck
+            John->>John: Fight against hypochondria
+        end
+        Note right of John: Rational thoughts!
+        John-->>Alice: Great!
+        John->>Bob: How about you?
+        Bob-->>John: Jolly good!
+    ```
+
+
+
+
    +
  1. +

    老子说道 +这会在文章末尾进行注解 

    +
  2. +
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/specification/pr/index.html b/en/specification/pr/index.html new file mode 100644 index 00000000..b19f06f5 --- /dev/null +++ b/en/specification/pr/index.html @@ -0,0 +1,1677 @@ + + + + + + + + + + + + + + + + + + + + + + + + Pull Request Message Specification - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Pull Request Message Specification

+

For Pull Request, please follow the following requirements1:

+
    +
  1. The title should be clear about the purpose of this PR (what work is done, what problem is fixed).
  2. +
  3. The content should briefly describe the changes. If you fix an issue, please add fix #xxxx in the content, where xxxx is the issue number.
  4. +
+

For the title, such format is recommended:

+
<Edit type>(<file name>): <content> (<issue number>)
+
+

Edit type can be one of the following:

+
    +
  • feat: for adding new content.
  • +
  • fix: for fixing existing content errors.
  • +
  • refactor: for refactoring a page (larger changes).
  • +
  • revert: for reverting previous changes.
  • +
+

Examples:

+
    +
  • fix(sepecification/specification): edit code comment to make it more clear
  • +
  • fix: plugins/xxx not in directory (#2)
  • +
  • feat(software/mathpix): official website
  • +
  • refactor(specification/template): tidy up page content
  • +
+
+
+
    +
  1. +

    Edited from OI-wiki: 如何参与 

    +
  2. +
+
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/specification/template/index.html b/en/specification/template/index.html new file mode 100644 index 00000000..47acac8f --- /dev/null +++ b/en/specification/template/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + Template - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Template

+

Hello friends, if you have a great tool that you want to share with everyone, but you don’t know how to write a markdown, here is a template for reference

+

Introduction

+

We would like submitted PRs to describe this tool in the introduction section:

+
    +
  • The main function
  • +
  • the environment used
  • +
  • Official website (if available)
  • +
  • Other basic features
  • +
+

Install

+

The PR we want to submit is described in the installation section:

+
    +
  • The version of the operating system that the software is compatible with
  • +
  • The way to install the software, especially the installation in the linux operating system, it is best to give instructions
  • +
  • If you need to install other dependent software in advance to install this software, please specify
  • +
  • If possible, please provide a method to check the successful installation of the software, such as using $clang --version to check whether clang is successfully installed
  • +
+ +

The PR we want to submit is described in the recommendation reason section:

+
    +
  • Advantages of this tool
  • +
  • Disadvantages of this tool
  • +
  • If this tool charges, please specify
  • +
  • If there is an educational support version of this tool, please specify
  • +
+

refer to

+

We hope that the submitted PR will provide some common references in the reference section, such as:

+
    +
  • Official documentation of the tool
  • +
  • Relevant communities
  • +
  • related books
  • +
  • Related pages
  • +
+ + + + + + + + +

Comments

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/firmware/RustSBI/index.html b/firmware/RustSBI/index.html new file mode 100644 index 00000000..2ace20e8 --- /dev/null +++ b/firmware/RustSBI/index.html @@ -0,0 +1,1736 @@ + + + + + + + + + + + + + + + + + + + + + + + + RustSBI - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

RustSBI

+

官网:https://github.com/rustsbi

+

RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。

+

独立包

+

独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:

+ +

这些解决方案的文档和下载链接都在各自的仓库中。

+

原型设计系统

+

RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。

+

为了编译原型设计系统,复制仓库后使用以下的命令:

+
cargo termconfig
+
+

在图形界面配置完毕后,配置文件将保存到Xtask.toml文件中,以供编译过程阅读。

+

接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:

+
cargo make
+
+

或者,使用以下的命令直接编译和烧录到目标主板:

+
cargo flash
+
+

RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frame/img/wasm-bpf-no-bcc.png b/frame/img/wasm-bpf-no-bcc.png new file mode 100644 index 00000000..9fb71736 Binary files /dev/null and b/frame/img/wasm-bpf-no-bcc.png differ diff --git a/frame/wasm-bpf/index.html b/frame/wasm-bpf/index.html new file mode 100644 index 00000000..dddf7fc0 --- /dev/null +++ b/frame/wasm-bpf/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + 📦 Wasm-bpf: 为在 WebAssembly 上运行 eBPF 应用而设计的库、工具链和运行时 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

📦 Wasm-bpf: 为在 WebAssembly 上运行 eBPF 应用而设计的库、工具链和运行时

+

Actions Status +CodeFactor +DeepSource

+

中文文档 Gitee Github

+

Wasm-bpf 是一个由 CO-RE(一次编写 – 到处运行) libbpf libbpf 驱动的 WebAssembly eBPF 库、工具链和运行时。它可以帮助您几乎不用修改地构建几乎所有的 eBPF 程序或用例到 Wasm 中,并在 Wasm 沙箱中跨平台运行。

+

简介

+

WebAssembly(简称Wasm)是一种可执行代码的便携式二进制格式。代码在一个内存安全的沙盒环境中以接近本机速度执行,具有明确定义的资源限制和一个 API ,用于与嵌入式主机环境(例如代理)进行通信。

+

wasm-bpf 项目结合了 Wasm 和 eBPF 技术,提高了eBPF应用程序的性能和可编程性。它提供了一个库和工具链,用于将多种语言编写的 eBPF 应用编译成 Wasm,并提供运行时环境以在安全的沙箱中运行这些程序。

+

使用 wasm-bpf,用户可以动态加载和安全地执行用户自定义或社区贡献的 Wasm-eBPF 代码作为插件,例如在他们的网络相关软件产品,或可观测性平台中。这其中 eBPF 使得数据收集高效可扩展,同时 Wasm 也允许对这些数据进行高级处理和分析。

+

此外,它使开发人员能够使用熟悉的语言,如 C/C ++,Rust,Go 和其他 30 多种能编译到 Wasm 的编程语言编写 eBPF 程序,并轻松地在不同的Linux发行版中部署它们。此外,利用 Wasm 的生态和工具链,云提供商可以利用 wasm-bpf 为其客户提供安全且高性能的环境来开发和部署 eBPF 应用程序。

+

功能

+
    +
  • 通用性: 提供了从 eBPF 到 Wasm 的大多数能力,包括从环形缓冲区perf 缓冲区进行轮询,使用 maps 在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、挂载到 hook 执行等。支持大量的 eBPF 程序类型和 maps 类型。
  • +
  • 高性能: 对于复杂数据类型没有序列化开销,使用共享内存来避免主机和 Wasm 之间的拷贝开销。
  • +
  • 易于使用: 提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义以进行绑定。可以使用 C/C++RustGo 编写 eBPF 程序并编译成 Wasm。
  • +
  • 超轻量级: 最小运行时的二进制大小仅为 1.5 MB。编译后的 Wasm 模块大小仅为 ~90K。使用相同的工具链,您可以轻松地在任何语言和平台上构建自己的 Wasm-eBPF 运行时!
  • +
+

请参阅 examples 目录中以 C、Rust、Go 编写的编译为 Wasm 的 eBPF 程序示例,覆盖了从跟踪、网络到安全的各种用例。

+

有关使用 OCI 镜像分发、动态加载、运行 Wasm-eBPF 程序的工具,请参阅 eunomia-bpf 仓库。

+

🔨 示例

+

请查看 examples 目录中用 C、Rust、Go 编写的编译成 WASM 的 eBPF 程序示例。

+

tracing examples

+ +

security example +- lsm and go-lsm: 检查删除目录的权限

+

networking example +- sockfilter: 监视数据包并处理 __sk_buff +- sockops: 在 syn 数据包中添加 pid 选项。

+

runqlat 的一个示例输出:

+
$ sudo ./wasm-bpf runqlat.wasm 1
+Tracing run queue latency... Hit Ctrl-C to end.
+
+     usecs               : count    distribution
+         0 -> 1          : 72       |*****************************           |
+         2 -> 3          : 93       |*************************************   |
+         4 -> 7          : 98       |****************************************|
+         8 -> 15         : 96       |*************************************** |
+        16 -> 31         : 38       |***************                         |
+        32 -> 63         : 4        |*                                       |
+        64 -> 127        : 5        |**                                      |
+       128 -> 255        : 6        |**                                      |
+       256 -> 511        : 0        |                                        |
+       512 -> 1023       : 0        |                                        |
+      1024 -> 2047       : 0        |                                        |
+      2048 -> 4095       : 1        |                                        |
+
+

构建运行时

+

请参考 docs/build.md

+

Wasm-bpf 工作原理

+

wasm-bpf 运行时需要两部分:主机端(在 Wasm 运行时之外)和 Wasm 客户端端(在 Wasm 运行时之内)。

+
    +
  • 主机端:一个简单的运行时实现示例
  • +
  • 参见 runtime/cpp,它将是在 libbpfWAMR 之上构建的 C++ 示例运行时。另一个更完善的基于 Wasmtime 的 Rust 运行时实现在 runtime/wasm-bpf-rs 中。
  • +
  • 您可以使用相同的系统接口以 任何 语言、任何 eBPF 库和 任何 Wasm 运行时轻松构建自己的 Wasm-eBPF 运行时。
  • +
  • wasm 端:工具链和库
  • +
  • 一个名为 libbpf-wasm 的头文件库,为 Wasm 客户端 C/C++ 代码提供 libbpf API。
  • +
  • 一个名为 bpftool 的工具,用于生成 Wasm-eBPF skeleton 头文件和 C 结构定义,以便在主机和 Wasm 客户端之间传递数据而无需序列化。
  • +
  • 对于 Rust、Go 和其他语言的支持与 C/C++ 支持类似。
  • +
+

有关详细的编译过程,请参阅 examples/bootstrap/README.md。下图显示了 eBPF 和 Wasm 运行时之间的整体交互过程:

+

wasi-bpf

+

Wasm 模块可以同时加载和控制多个 eBPF 程序, 并且能够调用或者控制(通过组件模型)其他语言编写的 Wasm 模块来处理数据。

+

我们也提了一个 WASI 提案 wasi-bpf

+

协议

+

MIT

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frame/zineland/index.html b/frame/zineland/index.html new file mode 100644 index 00000000..e9438a4a --- /dev/null +++ b/frame/zineland/index.html @@ -0,0 +1,1746 @@ + + + + + + + + + + + + + + + + + + + + + + + + Zineland - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Zineland

+

简介

+

Zineland 是一个简单有效的杂志构建框架,能够快速通过 Markdown 文档生成杂志风格的静态网页

+

获取

+ +
  cargo install zine
+
+
    +
  • brew
  • +
+
  brew install zineland/tap/zine
+
+ +

优点

+
    +
  • 移动端阅读体验优先
  • +
  • 优雅的杂志设计
  • +
  • 可定制化程度高,支持扩展
  • +
  • 支持I18n和I10n
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..a0c87677 --- /dev/null +++ b/index.html @@ -0,0 +1,1747 @@ + + + + + + + + + + + + + + + + + + + + + + ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

前言

+

ToolDiy的初衷

+

在时间的长河中,我们发现,重复繁琐的工作带给大家的只有时间和精力的消耗。的确在我们的不断思考和进步中,一个个优秀的工具出现在我们的眼前。但随之而来的是,工具种类和数量的飞速发展,我们难以根据具体需求,快速,简易地上手一款工具。相反,“百度”,“谷歌”成为了我们老生常谈的话语。

+
    +
  1. +

    在一个个链接和回答中不断尝试。有的是生涩的英文文档,有的是寥寥数语,这无疑增加了我们的使用成本。所以 ToolDiy 的初衷就是为了解决这个问题,我们想借助开源社区的环境,不断收集和提炼各行各业的工具(毕竟适合你的才是最好的)。 ToolDiy 将从客观的角度,以用户的视角出发,推荐分析各类工具,而不仅仅局限于固定的方向。

    +
  2. +
  3. +

    很多时候我们在开发过程中会遇到很多工具的环境配置问题,我们不得不花费大量时间去思考和学习使用,很多时候这些工作本身就只能够锻炼你对配置环境的耐心,我们想让大家专注工具本身,于是我们想维护一些工具配置和构建的自动化脚本或者是docker环境方便使用者,当然我们在书写时候留下的构建脚本也可以提供给使用者学习。一个能够开箱即用的工具想想都令人兴奋,让我们一起建设他吧!

    +
  4. +
+

只要能够给大家带来帮助和更好的体验,这便是 ToolDiy 存在的意义。

+

接下来,让我们一起使用它吧!

+

贡献

+

本项目的初衷是提供维护一个工具说明的仓库和维基,本身就是一个降低使用门槛方便大家的项目,我们的原则是不限于任何特定的学科和领域,我们可以将所有自己认为有用的工具进行分享(注意做好入门介绍,符合项目初衷),在尊重工具生产者劳动的前提下都可以分享,因此我们不允许大家分享盗版和破解工具,在规范的前提下我们欢迎各种各样的 PR ,有任何除开上诉的疑惑都可以提出 issue 或者联系仓库管理,在涉及付费内容的工具时我们鼓励分享也希望大家做好信息公开标注他的价格,本项目不会给任何工具广告,不会有特殊位置等广告行为一切以提交时间排版。我们同样欢迎各种改善本项目阅读体验的 PR 请求(包括但不局限于添加一个换行增加阅读体验,增加项目 logo ,中英文校对等),_(:з)∠)_本项目还处于初期阶段,非常需要各位大佬的完善和纠错。

+

如果你有已经写好的文章想要添加到这里,你可以通过下列方式:

+
    +
  1. fork 本仓库,在 docs 文件夹下选择对应分类创建中文英文版 Markdown 文档(英文版文件名以 .en.md 结尾),最后提出 PR 以便进行合并。
  2. +
  3. 联系 SakurajimaMaii ,将文档的中文英文版发送至他的邮箱 Email
  4. +
+

如果你不知道从何处下笔,可以首先参考写作模板

+
+

Note

+
    +
  1. 所有上传到本网站的内容均应该符合规范。
  2. +
  3. 如果你不熟悉 PR ,你可以参考3分钟学会, 如何PR(Pull Request)代码到 Github
  4. +
+
+

联系我们

+

点击链接加入群聊 tooldiy

+

版权声明

+

知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/javascripts/mathjax.js b/javascripts/mathjax.js new file mode 100644 index 00000000..080801ef --- /dev/null +++ b/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() +}) diff --git a/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp b/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp new file mode 100644 index 00000000..5731e05f Binary files /dev/null and b/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp differ diff --git a/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp b/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp new file mode 100644 index 00000000..d2906f1c Binary files /dev/null and b/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp differ diff --git a/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp b/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp new file mode 100644 index 00000000..fcf2b0f7 Binary files /dev/null and b/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp differ diff --git a/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp b/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp new file mode 100644 index 00000000..a196f3ee Binary files /dev/null and b/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp differ diff --git a/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp b/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp new file mode 100644 index 00000000..f464f5e4 Binary files /dev/null and b/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp differ diff --git a/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg b/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg new file mode 100644 index 00000000..cef088ff Binary files /dev/null and b/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg differ diff --git a/large_language_model/rwkv.cpp/index.html b/large_language_model/rwkv.cpp/index.html new file mode 100644 index 00000000..21e49e6e --- /dev/null +++ b/large_language_model/rwkv.cpp/index.html @@ -0,0 +1,1887 @@ + + + + + + + + + + + + + + + + + + + + + + + + rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型

+

最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。

+

但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。

+

RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:

+

Raven RWKV 7B - a Hugging Face Space by BlinkDL

+

不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1% 这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。

+

下载模型

+

首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:

+

img

+

其中:

+
    +
  • 统一前缀 rwkv-4 表示它们都基于 RWKV 的第 4 代架构。
  • +
  • pile 代表基底模型,在 pile 等基础语料上进行预训练,没有进行微调,适合高玩来给自己定制。
  • +
  • novel 代表小说模型,在各种语言的小说上进行微调,适合写小说。
  • +
  • raven 代表对话模型,在各种开源的对话语料上进行微调,适合聊天、问答、写代码。
  • +
  • 430m、7b 这些指的是模型的参数量。
  • +
+

我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。

+

img

+

这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)

+

模型转换

+

下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。

+

所以,这里需要介绍一下能够更充分利用 CPU 的方法:

+

saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)

+

rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。

+

以下是操作步骤。

+

1. 下载仓库代码

+

需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)

+
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
+

2. 下载依赖库 or 编译依赖库

+

rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases

+

img

+

下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):

+
cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
+

3. 转换模型

+

需要装 PyTorch

+

我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:

+
python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
+

其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py 这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth 是待转换的模型的路径, ./rwkv.cpp-7B.bin 是转换后的路径,float16 是要转换成什么类型的参数。

+

4. 量化模型

+

其实上面转换好的 ./rwkv.cpp-7B.bin 已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin 量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:

+
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
+

然后你就会得到一个大小只有 6GB 的模型了。

+

运行模型

+

同样,一行命令搞定:

+
python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
+

让我们看看效果,首先是内存占用,不到 6GB

+

img

+

然后是问答和执行命令:

+
    +
  1. 太阳有几只眼睛?
  2. +
  3. 知乎是什么网站?
  4. +
  5. 写一篇介绍数据分析的文章。
  6. +
+

img

+

效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:

+

img

+

希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。

+

以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。

+

参考

+
+
+
    +
  1. +

    https://github.com/antimatter15/alpaca.cpp 

    +
  2. +
  3. +

    https://github.com/THUDM/ChatGLM-6B 

    +
  4. +
  5. +

    https://github.com/LianjiaTech/BELLE 

    +
  6. +
  7. +

    发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 

    +
  8. +
  9. +

    RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 

    +
  10. +
  11. +

    RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 

    +
  12. +
  13. +

    BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL 

    +
  14. +
  15. +

    RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth 

    +
  16. +
  17. +

    https://github.com/BlinkDL/ChatRWKV 

    +
  18. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/one_click_deployment/Source-changer/index.html b/one_click_deployment/Source-changer/index.html new file mode 100644 index 00000000..55f1059b --- /dev/null +++ b/one_click_deployment/Source-changer/index.html @@ -0,0 +1,1751 @@ + + + + + + + + + + + + + + + + + + + + + + + + Source-changer换源工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Source-changer换源工具

+

本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率

+

安装

+
+

git clone https://github.com/57307407/Source-changer.git

+
+

介绍

+

目前支持 maven 、 npm 、 python(pip)换源

+

由于本工具使用 python 语言进行开发,使用前请先安装python环境

+
+

下载链接:https://www.python.org/

+
+

输入命令

+
+

python -V

+

or

+

python3 -V

+
+

出现python版本号即为安装完毕

+

python版本

+

使用

+
+

python main.py / python3 main.py

+

更换maven源时需要在命令前加sudo

+

即: sudo python3 main.py

+
+

Source-changer_主页面

+

选择需换源的软件

+

Source-changer_软件选择

+

选择更换的镜像

+

Source-changer_镜像选择

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/one_click_deployment/Windows_Setup/index.html b/one_click_deployment/Windows_Setup/index.html new file mode 100644 index 00000000..d5cb7380 --- /dev/null +++ b/one_click_deployment/Windows_Setup/index.html @@ -0,0 +1,1805 @@ + + + + + + + + + + + + + + + + + + + + + + + + windows环境部署 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

windows环境部署

+

本文向大家介绍自己的windows环境如何部署该项目

+
+

注意:这里需要用到python环境,本人是python3.10

+
+

下载 ToolDiy

+
git clone https://github.com/cargo-youth/ToolDiy.git
+
+

安装 mkdocs

+
下载链接:pip install mkdocs
+
+

安装网站主题

+

本站主题是material,使用下面命令进行安装即可。 +

pip install mkdocs-material
+

+

安装其它依赖

+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
+

安装i18n

+

这里是个坑,我安装的时候,直接安装pip install i18n不行,你需要专门安装mkdocs下的i18n,然后问的chatGPT,他给我提供的解决方案是pip install mkdocs-i18n-plugin;可惜不对,最后在谷歌上找到下面命令,就对了。 +

pip install mkdocs-static-i18n
+

+

运行项目

+
mkdocs serve
+
+

构建静态网站文件

+
mkdocs build
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/one_click_deployment/docker_os_c/index.html b/one_click_deployment/docker_os_c/index.html new file mode 100644 index 00000000..fc962d5d --- /dev/null +++ b/one_click_deployment/docker_os_c/index.html @@ -0,0 +1,1807 @@ + + + + + + + + + + + + + + + + + + + + + + + + Docker 搭建 C 语言操作系统开发环境 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Docker 搭建 C 语言操作系统开发环境

+

预设开发环境简述

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • gcc 11.3.0
  • +
  • GNU Make 4.3
  • +
  • cmake 3.22.1
  • +
  • QEMU emulator 7.0.0
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • C/C++ 1.14.4
    • +
    • Chinese (Simplified) Language Pack 1.75.0
    • +
    +
  • +
+

快速开始

+

安装 Docker Desktop,参见 Install Docker Desktop on Windows

+

运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行

+
docker pull jklincn/c-os
+
+

镜像成功拉取后,执行

+
docker run -d --privileged -p 58888:8080 jklincn/c-os
+
+

这时使用浏览器打开 http://localhost:58888 即可启动开发环境。

+

后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。

+
+
    +
  1. +

    主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换。

    +
  2. +
  3. +

    如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击 Apply & restart 重启 Docker,再次尝试拉取。

    +
    "registry-mirrors": [
    +    "http://hub-mirror.c.163.com",
    +    "https://docker.mirrors.ustc.edu.cn"
    +]
    +
    +
  4. +
+
+

Dockerfile

+

此处给出镜像的构建脚本,供有需求的同学参考与修改

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+    code --install-extension cpptools-linux.vsix && \
+    rm cpptools-linux.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/one_click_deployment/docker_os_rust/index.html b/one_click_deployment/docker_os_rust/index.html new file mode 100644 index 00000000..9f78d547 --- /dev/null +++ b/one_click_deployment/docker_os_rust/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + Docker 搭建 Rust 语言操作系统开发环境 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Docker 搭建 Rust 语言操作系统开发环境

+

预设开发环境简述

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • GNU Make 4.3
  • +
  • QEMU emulator 7.0.0
  • +
  • rustc nightly-latest
  • +
  • rustup latest
  • +
  • cargo nightly-latest
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • rust-analyzer 0.3.1435
    • +
    • Chinese (Simplified) Language Pack 1.75.0
    • +
    +
  • +
+

快速开始

+

安装 Docker Desktop,参见 Install Docker Desktop on Windows

+

运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行

+
docker pull jklincn/rust-os
+
+

镜像成功拉取后,执行

+
docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
+

这时使用浏览器打开 http://localhost:58888 即可启动开发环境。

+

后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。

+
+
    +
  1. +

    主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换

    +
  2. +
  3. +

    如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击 Apply & restart 重启 Docker,再次尝试拉取。

    +
    "registry-mirrors": [
    +    "http://hub-mirror.c.163.com",
    +    "https://docker.mirrors.ustc.edu.cn"
    +]
    +
    +
  4. +
+
+

Dockerfile

+

此处给出镜像的构建脚本,供有需求的同学参考与修改

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+# 安装 rust
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+    echo '[source.crates-io]' >> .cargo/config && \
+    echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+    echo 'replace-with = "ustc"' >> .cargo/config && \
+    echo '[source.ustc]' >> .cargo/config && \
+    echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+    chmod +x rustup-init && \
+    ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+    rm rustup-init && \
+    source $HOME/.cargo/env && \
+    cargo install cargo-binutils && \
+    rustup component add llvm-tools-preview && \
+    rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" "b/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" new file mode 100644 index 00000000..691f84ca Binary files /dev/null and "b/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" differ diff --git "a/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" "b/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" new file mode 100644 index 00000000..1f48ceb2 Binary files /dev/null and "b/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" differ diff --git "a/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" "b/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" new file mode 100644 index 00000000..284eb513 Binary files /dev/null and "b/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" differ diff --git "a/one_click_deployment/img/python\347\211\210\346\234\254.png" "b/one_click_deployment/img/python\347\211\210\346\234\254.png" new file mode 100644 index 00000000..7807cd4b Binary files /dev/null and "b/one_click_deployment/img/python\347\211\210\346\234\254.png" differ diff --git a/one_click_deployment/os/index.html b/one_click_deployment/os/index.html new file mode 100644 index 00000000..1c44fe21 --- /dev/null +++ b/one_click_deployment/os/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + os开发环境和工具介绍 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

os开发环境和工具介绍

+
# (ubuntu) 安装QEMU7.0依赖包
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+        gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+        zlib1g-dev libexpat-dev pkg-config  libglib2.0-dev libpixman-1-dev libsdl2-dev \
+        git tmux python3 python3-pip ninja-build
+# 在开发目录执行安装
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# 配置环境变量
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build 
+# 配置后更新系统路径
+source ~/.bashrc 
+# 检测qemu版本(以riscv64 为例上诉配置已将x86_64 aarch64 riscv64安装好均可以检测版本)
+qemu-system-riscv64 --version
+# 配置rust环境
+curl https://sh.rustup.rs -sSf | sh
+# 配置环境变量
+source $HOME/.cargo/env
+# 检测版本
+rustc --version
+# rust相关软件包安装
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
+

常见问题及解决办法

+
# centos 依赖安装
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+                texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc版本过低导致的qemu编译失败(也可以直接官网更高版本安装)
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# 查看gcc版本
+gcc -v
+
+

配置rust下载镜像

+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..f341902c --- /dev/null +++ "b/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1692 @@ + + + + + + + + + + + + + + + + + + + + + + + + APT(DEB)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

APT(DEB)包管理工具

+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean  #清理无用的包
+
+aptitude
+apt-add-repository [options] repository   #修改软件源命令 (software-properties-common)
+
+
apt search package #搜索包 
+apt show package #获取包的相关信息,如说明、大小、版本等  
+apt depends package #了解使用依赖  
+apt rdepends package #查看该包被哪些包依赖  
+apt-cache pkgnames  #执行pkgnames子命令列出当前所有可用的软件包 
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包  
+sudo apt install package=version #安装指定版本的包  
+sudo apt install package --reinstall #重新安装包  
+sudo apt -f install #修复安装, "-f = --fix-missing"  
+sudo apt remove package #删除包
+sudo apt purge package  #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码   
+sudo apt update #更新apt软件源信息  
+sudo apt upgrade #更新已安装的包  
+sudo apt dist-upgrade #升级系统  
+sudo apt dselect-upgrade #使用dselect升级  
+sudo apt build-dep package #安装相关的编译环境  
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean  #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean  #删除已经卸载的软件包备份  
+sudo apt-get check #检查是否有损坏的依赖
+
+
sudo dpkg -i <package.deb>    #安装包
+sudo dpkg -r <package.deb>   #删除包
+sudo dpkg -p <package.deb>   #彻底删除包(包括配置文件)
+dpkg -l                       #列出当前已安装的包
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" "b/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" new file mode 100644 index 00000000..d61356fe --- /dev/null +++ "b/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" @@ -0,0 +1,1655 @@ + + + + + + + + + + + + + + + + + + + + + + + + AppImage(Linux) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

AppImage(Linux)

+
    +
  1. AppImage Pool :一个帮助你寻找和管理 AppImage 的应用商店 | Linux 中国
  2. +
  3. appimage-installer :这个工具能在十几秒内快速的将一个 AppImage 文件部署到开始菜单,并且设置好图标和名称。
  4. +
  5. AppImageLauncher :可以自动将 AppImage 程序快捷方式添加到桌面环境的程序启动器/菜单(包括程序图标和合适的说明)中。
  6. +
  7. Appimage-installer 工具, AUR 包的问题, https://gitee.com/deepin-opensource/appimage-installer/issues/I421HL
  8. +
  9. AppImage 安装器,深度科技社区 Maicss 分享:深度科技社区 Maicss 分享: ttps://bbs.deepin.org/zh/post/220754
  10. +
  11. AppImage 官网: AppImage 官网: https://appimage.org/
  12. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" "b/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..51b16290 --- /dev/null +++ "b/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1908 @@ + + + + + + + + + + + + + + + + + + + + + + + + Chocolatey(WIN) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Chocolatey(WIN)

+
+

本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的

+

为什么要用 Chocolatey

+

如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。

+
+

Chocolatey 的安装

+
    +
  • +

    方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +

     @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    +

    +
  • +
  • +

    方法二:以管理员身份打开 powershell.exe ,执行以下代码

    +
  • +
+
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
+
    +
  • 方法三:直接打开 https://chocolatey.org/install.ps1 ,复制内容到本地新建 install.psl 文件,执行安装。
  • +
+

在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。

+

Chocolatey 的使用

+

Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)

+

安装软件

+
choco install -y git 
+choco install -y python 
+choco install -y chromium
+cinst -y nodejs.install
+...
+
+

choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。

+

查找软件

+
    +
  1. choco search cntlm 搜索软件是否存在,包名是什么。
  2. +
  3. choco info cntlm 查看软件详细信息。
  4. +
+

升级软件

+

choco upgrade git

+

卸载软件

+

choco uninstall git

+

配置统一环境

+
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+    <packages>
+      <package id="jdk8" />
+      <package id="googlechrome" version="71.0.3578.98" />
+      <package id="vscode" />
+      <package id="7zip" />
+    </packages>
+
+

文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。

+

更改本地仓库

+
    +
  • 方法一: cmd.exe 管理员模式下执行以下指令 + setx ChocolateyInstall D:\Chocolatey /M
  • +
  • 方法二: powershell.exe 管理员模式下执行以下指令 + & setx.exe ChocolateyInstall D:\Chocolatey /M + 设定成功提示: + 成功: 已经存储指定的值
  • +
+

卸载Chocolatey

+

卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。

+
    +
  1. 删除环境变量 ChocolateyInstall 对应的安装文件夹,默认是 C:\ProgramData\chocolatey
  2. +
  3. 删除环境变量 ChocolateyInstall
  4. +
  5. 删除环境变量 ChocolateyToolsLocation ,部分工具软件安装的位置,删除需谨慎
  6. +
  7. 删除环境变量 ChocolateyLastPathUpdate
  8. +
  9. 更新环境变量 PATH ,去掉 Chocolatey 相关的配置
  10. +
+

总结

+

Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..c69b6f59 --- /dev/null +++ "b/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1654 @@ + + + + + + + + + + + + + + + + + + + + + + + + DNF(RPM)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

DNF(RPM)包管理工具

+

由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。

+

DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。

+
    +
  • DNF 与 YUM 完全兼容,提供了 YUM 兼容的命令行以及为扩展和插件提供的API。
  • +
  • 使用 DNF 需要管理员权限,本章所有命令需要在管理员权限下执行。
  • +
+

使用 Dnf 管理软件包 (openeuler.org)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" "b/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" new file mode 100644 index 00000000..40a39114 --- /dev/null +++ "b/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" @@ -0,0 +1,1651 @@ + + + + + + + + + + + + + + + + + + + + + + + + Homebrew(Linux&Mac) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Homebrew(Linux&Mac)

+

Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)

+

详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/

+

搜索可用的软件包: https://sitemap.filecroco.com/a/1.html

+

在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..d1e19450 --- /dev/null +++ "b/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Nix(声明式)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Nix(声明式)包管理工具

+

Nix:可重现的构建和部署 (nixos.org)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/Scoop\357\274\210Win\357\274\211/index.html" "b/package_manager/Scoop\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..0df24b22 --- /dev/null +++ "b/package_manager/Scoop\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1855 @@ + + + + + + + + + + + + + + + + + + + + + + + + Scoop(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Scoop(Win)

+
+

scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2

+

main : https://github.com/ScoopInstaller/Scoop

+
+

一、安装 scoop

+
    +
  • 将 scoop 安装到自定义目录
  • +
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
+

二、配置scoop

+
    +
  • scoop 源配置: scoop config SCOOP_REPO <URL>
  • +
+

软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。

+
cd $env:SCOOP\buckets\Main      
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
+
    +
  • 修改 buckets git 仓库链接:
  • +
+
 cd $env:SCOOP\buckets\Main      这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
+
    +
  • aria2 相关配置 +
    aria2-enabled (默认值: true)
    +aria2-retry-wait (默认值: 2)
    +aria2-split (默认值: 5)
    +aria2-max-connection-per-server (默认值: 5)
    +aria2-min-split-size (默认值: 5M)
    +
  • +
+

三、常用 bucket

+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
+
    +
  1. 查看支持的命令:scoop help
  2. +
  3. 查找软件:scoop search xxx 软件包
  4. +
  5. 安装软件:scoop install xxx 软件包
  6. +
  7. 卸载软件:scoop uninstall xxx 软件
  8. +
  9. 查看软件官方页:scoop home xxx 软件
  10. +
  11. 查看安装的软件列表:scoop list
  12. +
  13. 更新软件:scoop update
  14. +
  15. 查看软件列表:scoop export >> xxx.txt
  16. +
  17. 查看 官方支持的 bucket:scoop bucket known
  18. +
  19. 查看 bucket 命令帮助:scoop bucket help
  20. +
  21. 添加 bucket :scoop bucket add xxxbucket
  22. +
  23. 删除 bukcet :scoop bucket rm xxx 仓库
  24. +
+

常用命令说明

+
alias       Manage scoop aliases # 管理指令的替身
+bucket      Manage Scoop buckets # 管理软件仓库
+cache       Show or clear the download cache # 查看与管理缓存
+checkup     Check for potential problems # 做个体检
+cleanup     Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config      Get or set configuration values # 配置 Scoop
+create      Create a custom app manifest # 创建自定义软件包
+depends     List dependencies for an app # 查看依赖
+export      Exports (an importable) list of installed apps # 导出软件包列表
+help        Show help for a command # 显示帮助指令
+hold        Hold an app to disable updates # 禁止软件包更新
+home        Opens the app homepage # 打开软件包主页
+info        Display information about an app # 显示软件包信息
+install     Install apps # 安装软件包的指令
+list        List installed apps # 列出所有已安装软件包
+prefix      Returns the path to the specified app # 查看软件包路径
+reset       Reset an app to resolve conflicts # 恢复软件包版本
+search      Search available apps # 搜索软件包
+status      Show status and check for new app versions # 查看软件包更新状态
+unhold      Unhold an app to enable updates # 启动软件包更新
+uninstall   Uninstall an app # 卸载软件包的指令
+update      Update apps, or Scoop itself # 更新软件包
+virustotal  Look for app hash on virustotal.com # 查看哈希值
+which       Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
+

卸载Scoop

+

scoop uninstall scoop:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!

+

The scoop 配置文件保存在 ~/.config/scoop/config.json +buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json

+
{
+    "main": "https://github.com/ScoopInstaller/Main",
+    "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
+

Scoop 技巧和知识

+

链接: https://blog.csdn.net/weixin_39986178/article/details/110900876

+

相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/WinGet\357\274\210Win\357\274\211/index.html" "b/package_manager/WinGet\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..db2b1d76 --- /dev/null +++ "b/package_manager/WinGet\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1757 @@ + + + + + + + + + + + + + + + + + + + + + + + + WinGet(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

WinGet(Win)

+

WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。

+

前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。

+

下载、安装和验证

+

你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。

+

如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I 进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。

+

输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息

+

基本使用

+

显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install

+

是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。

+

但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!

+

如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:

+

"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},

+

如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow

+

winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。

+

下载 Microsoft Store 软件

+

实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。

+

winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。

+

卸载其他源安装的软件

+

winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。

+

winget 可以卸载多种类型的软件程序

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" "b/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" new file mode 100644 index 00000000..dadd9229 --- /dev/null +++ "b/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" @@ -0,0 +1,1696 @@ + + + + + + + + + + + + + + + + + + + + + + + + YaST & Zypper(RPM) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

YaST & Zypper(RPM)

+

openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。

+

软件包的分层管理

+

OpenSUSE 是一个一直被低估的多功能 Linux 操作系统

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..0359d8b8 --- /dev/null +++ "b/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1843 @@ + + + + + + + + + + + + + + + + + + + + + + + + pacman(Arch)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

pacman(Arch)包管理工具

+

Manjaro 换源

+
sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
+

1. 更新系统

+
命令  解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd   使用 -dd跳过所有检测
+
+

2. 搜索包

+
命令  解释
+pacman -Ss keyword  在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword  搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword  按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name    使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name   查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name    要显示软件包的依赖树
+whoneeds package_name   检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
+

3. 安装包

+
命令  解释
+pacman -S package_name  执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name    安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url   安装一个远程包(不在 pacman 配置的源里面)
+
+

4. 删除包

+
命令  解释
+pacman -R package_name  该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name    在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
+

5. 其他用法

+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc  清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
+

Manjaro软件管理

+

1. 切换国内最快的软件源

+

大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作

+

1. 第一部分使用 pacman-mirrors 更新官方软件源

+

1.1 按照地区自动更新为最快最稳定的软件源镜像地址

+

sudo pacman-mirrors --country China

+

1.2. 恢复默认软件源操作

+

sudo pacman-mirrors --interactive --default

+

1.3 软件源更新之后,我们一般会进行系统更新

+

sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作

+

1.4 查看所有可用的地区信息

+

sudo pacman-mirrors -l

+

参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server

+

2. 使用 pacman 管理软件

+

2. 第二部分使用 pacman 管理软件

+

2.1 同步并且更新你的系统

+

sudo pacman -Syyu

+

2.2 在软件仓库中搜索软件

+

sudo pacman -Ss [software package name]

+

2.3 查看已安装软件

+

sudo pacman -Qs [software package name] +sudo pacman -Qi [software package name]# 附带详细信息 +sudo pacman -Qii [software package name]# 附带更加详细的包信息 +sudo pacman -Ql# 列出所有安装的软件包

+

2.4 查看软件的详细依赖

+

sudo pactree [software package name]

+

2.5 查看系统中那些没有被使用软件依赖包(orphans)

+

sudo pacman -Qdt

+

2.6 自动移除那些系统中没有被使用的依赖包【类似于Debian下的 sudo apt autoremove --purge】

+

sudo pacman -Rs $(pacman -Qdtq)

+

2.7 下载并安装软件包

+

sudo pacman -Syu [software package name]# 从软件仓库安装 +yay -S [software package name]# Packages from the AUR +sudo pacman -U [/package_path/][software package name.pkg.tar.xz]# 从本地安装

+

pacman -U http://www.examplepackage/repo/examplepkg.tar.xz# 从网络安装【非官方仓库】

+

2.8 卸载软件

+

sudo pacman -R [software package name] +sudo pacman -Rs [software package name]# 同时删除依赖 +sudo pacman -Rns [software package name]# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除

+

2.9 清空缓存【默认情况下安装软件会先来缓存中查看是否已经下载过,没有再去下载,软件安装后通常下载缓存还在】

+

sudo pacman -Sc +sudo pacman -Scc # 更彻底的清理

+

关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/GitBucket/index.html b/platform/GitBucket/index.html new file mode 100644 index 00000000..ed26aec1 --- /dev/null +++ b/platform/GitBucket/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + GitBucket - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GitBucket

+

简介

+

GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。

+
    +
  • +

    优点

    +
      +
    • +

      完全开源,没有任何限制;

      +
    • +
    • +

      运行在JVM平台上,非常容易部署;

      +
    • +
    • +

      类似于GitHub的界面,操作容易;

      +
    • +
    • +

      丰富的插件,使得扩展非常容易;

      +
    • +
    • +

      提供了大量兼容GitHub的API;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      有点残废的权限管理(权限没有依照公开,私有库区分);

      +
    • +
    • +

      开发语言为Scala,对于非Scala用户自己写插件有一定门槛;

      +
    • +
    • +

      由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。

      +
    • +
    +
  • +
+

部署

+
    +
  1. +

    下载 Release + 里面的war到你的服务器;

    +
  2. +
  3. +

    java -jar gitbucket.war 启动。(笔者用的是JDK17);

    +
  4. +
  5. +

    (可选)将启动端口反向代理到子域名。

    +
  6. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/chatGPT/index.html b/platform/chatGPT/index.html new file mode 100644 index 00000000..236dede7 --- /dev/null +++ b/platform/chatGPT/index.html @@ -0,0 +1,1663 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChatGPT - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

ChatGPT

+

官网: https://chat.openai.com/

+

ChatGPT是一种基于自然语言处理技术的人工智能聊天机器人,使用GPT(Generative Pre-trained Transformer)技术生成人类语言响应。

+

功能:

+
    +
  • 用来当作搜索引擎,我们可以很容易地使用它来搜索一些信息,例如直接问ChatGPT“如何使用ChatGPT”。
  • +
  • 用来查找学习资料,例如直接问ChatGPT“如何学习自然语言处理”。
  • +
  • 用来查询文档,例如直接问ChatGPT“python库functools里面reduce函数的用法是什么”。
  • +
  • 用来调节心情,例如直接问ChatGPT“我应该怎么和女孩子约会”。
  • +
+

配置方法:

+
    +
  • 通过浏览器搜索ChatGPT,点击进入官网,点击"Sign in"按钮注册账号。
  • +
  • 注册成功后,绑定一个海外的手机号,在接收到的验证码中输入验证码,即可完成注册。
  • +
  • 需要注意的是香港地区暂时不能够使用ChatGPT,甚至如果梯子的节点在香港,连登陆官网都会受到限制。
  • +
  • 如果没有海外手机号码的话,可以通过一些手机验证码接收网站来获取,这样的网站和梯子一样有非常多家,只需要google一下就可以找到。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/excalidraw/index.html b/platform/excalidraw/index.html new file mode 100644 index 00000000..46c348c6 --- /dev/null +++ b/platform/excalidraw/index.html @@ -0,0 +1,1700 @@ + + + + + + + + + + + + + + + + + + + + + + + + Excalidraw - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Excalidraw

+

简介

+

官网: Excalidraw's repository

+

Excalidraw 是一款开源的画图工具,可以“手绘”一些简单的流程图,显示效果像是用笔在纸上画的一样,操作简单。

+

example1

+

同时其拥有丰富的素材库,帮助每个人更好地绘图。

+

example2

+

除了在线网站,也可以通过浏览器扩展直接安装到本地使用,具体可以在官方文档查看。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/flydav/index.html b/platform/flydav/index.html new file mode 100644 index 00000000..43a934e8 --- /dev/null +++ b/platform/flydav/index.html @@ -0,0 +1,1736 @@ + + + + + + + + + + + + + + + + + + + + + + + + FlyDav - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

FlyDav

+

简介

+

FlyDav 是一个轻量级的开源 webdav 服务器

+
    +
  • +

    优点

    +
      +
    • 完美兼容 WebDav 协议
    • +
    • 支持无配置运行,双击即可开启 WebDav 服务器
    • +
    • 完全开源,提供中英文文档
    • +
    • 极简,大小 10MB 以内,跨平台
    • +
    • 安全,不存储明文密码,隔离不同目录
    • +
    +
  • +
  • +

    缺点

    +
      +
    • 不支持 SSL
    • +
    • 不支持细粒度权限管理
    • +
    +
  • +
+

部署

+

最简部署:

+
    +
  1. 首先从 发布页 下载 FlyDav。
  2. +
  3. 运行 ./flydav -H 0.0.0.0 来启动服务器。然后你要输入默认用户 flydav 的密码。
  4. +
  5. 在你的 webdav 客户端(比如 RaiDrive)中打开 http://YOUR_IP:7086/webdav
  6. +
+

完整部署可参阅文档。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/gpt-paper/index.html b/platform/gpt-paper/index.html new file mode 100644 index 00000000..5797d329 --- /dev/null +++ b/platform/gpt-paper/index.html @@ -0,0 +1,1833 @@ + + + + + + + + + + + + + + + + + + + + + + + + Gpt paper - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

Gpt paper

+ +

本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明

+

内容

+

关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容

+

new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)

+

因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。

+

侧边栏甄别文献

+

使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)

+

阅读左边的论文,告诉我他讲了什么内容。

+

阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。

+

消化文献并输出(无惧查重)

+

我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。

+
    +
  • 英文文献,总结出中文,生成式的,基本不会重复。
  • +
  • 输出内容要强调一下,否则会不成功。
  • +
  • 如果感觉内容不对,换一篇文献,让他说,或者重新开会话
  • +
+

chatgpt组织语言

+
    +
  • 组织new bing生成的中文
  • +
  • 组织原本的英文,生成中文
  • +
  • 不可以组织论文的中文,效果很差。
  • +
+

论文最后:语言润色

+

如果不用以上ai写的文字,纯粹自己写。

+

写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt

+
    +
  • +

    请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:

    +
  • +
  • +

    请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:

    +
  • +
+

论文最后:改错别字

+

Note

+
    +
  • +

    不要陷入无意义的ai玩耍

    +
  • +
  • +

    不要登录cn的bing,不然之后都会记住。只能重新清除cookie。

    +
  • +
+

保存

+
    +
  • single file插件
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/minio/index.html b/platform/minio/index.html new file mode 100644 index 00000000..35c84845 --- /dev/null +++ b/platform/minio/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + MinIO - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

MinIO

+

简介

+

MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。

+
    +
  • +

    优点

    +
      +
    • +

      提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;

      +
    • +
    • +

      兼容现有AWS S3的SDK,API等;

      +
    • +
    • +

      非常完善的文档,活跃的社区;

      +
    • +
    • +

      部署相对简单;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      没有任何中文文档;

      +
    • +
    • +

      非付费版软件更新周期较短,需要自行更新;

      +
    • +
    +
  • +
+

部署

+

RTFM

+

官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。

+

笔者的提醒

+

一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/overleaf/index.html b/platform/overleaf/index.html new file mode 100644 index 00000000..39df2708 --- /dev/null +++ b/platform/overleaf/index.html @@ -0,0 +1,1658 @@ + + + + + + + + + + + + + + + + + + + + + + + + Overleaf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Overleaf

+

官网: https://www.overleaf.com

+

Overleaf 是一个在线 \(\LaTeX\) 渲染网站。 \(\LaTeX\) 环境的配置比较麻烦(尤其是在 Windows 环境下),对于新手也不够友好,而 overleaf 是一个很好的替代。只需要选择一个好看的模版,写 10 页以内的作业或者小论文将会十分方便,同时 Overleaf 也提供了基本的团队协作功能,可以通过链接或邀请的方式实现多人共同编辑。 Overleaf 免费版有最大编译时长和一些功能的限制,在完成一些比较复杂的项目时,可以考虑付费获得更多的功能。

+

\(\LaTeX\) 是一种「非所见即所得」的排版系统,用户需要输入特定的代码,保存在后缀为 .tex 的文件中,通过编译得到所需的 pdf 文件。 \(\LaTeX\) 优秀的大型文档排版能力和数学公式渲染能力是其能够广泛应用的原因之一。系统学习 \(\LaTeX\) 需要一定的时间,详细了解可以参阅托管在 CTAN 的中译版介绍 lshort-zh-cn

+

特点:

+
    +
  • 模版编辑好以后编写 10 页以内作业十分快速
  • +
  • 通过写 temp 文件可以实现项目的隔离, tex 相关的包管理方便
  • +
  • 友好的编辑交互界面,双击 pdf 预览中的内容可以直接跳转到代码
  • +
  • 自动保存文档在云端,全程都在网页上完成,不会污染本地环境
  • +
  • 许多问题 overleaf 官方给出了解答和范例,例如怎么嵌入伪代码块等
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/android/index.html b/plugins/android/index.html new file mode 100644 index 00000000..6e64ad6e --- /dev/null +++ b/plugins/android/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + Android Studio - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Android Studio

+

本文为你推荐适用于 Android Studio 的插件,能够极大的改善你的开发体验。

+

主题类

+

Atom Material Icons

+

该插件对图标进行了优化以改善你的界面美观程度。

+

Atom Material Icons

+

Material Theme UI

+

适用于 JetBrains IDE 的 Material 主题,拥有适用于白天和黑夜的多个主题,让界面更加美观。

+

Material Theme UI

+

工具类

+

JSON转Bean

+

JSON作为轻量级资料交换格式。在开发中经常被使用,其中一个需求就是将 Json 转换为对应的 Bean 对象。下面主要推荐两个插件:

+ +

翻译

+

Translation 插件极大的方便了英语基础不好的开发者进行开发。其具有以下特性:

+

Translation

+
    +
  • +

    多翻译引擎

    +
      +
    • 谷歌翻译
    • +
    • 微软翻译
    • +
    • 有道翻译
    • +
    • 百度翻译
    • +
    • 阿里翻译
    • +
    • DeepL 翻译
    • +
    +
  • +
  • +

    多语言互译

    +
  • +
  • 文档翻译
  • +
  • 语音朗读
  • +
  • 自动选词
  • +
  • 自动单词拆分
  • +
  • 单词本
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/browser/index.html b/plugins/browser/index.html new file mode 100644 index 00000000..f9b359a2 --- /dev/null +++ b/plugins/browser/index.html @@ -0,0 +1,1782 @@ + + + + + + + + + + + + + + + + + + + + + + + + Browser - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Browser

+

本文希望抛砖引玉,鼓励大家提出更多方便的浏览器插件。

+

Tampermonkey

+

官网: https://www.tampermonkey.net/

+

很方便的脚本管理器,可以安装一些扩展商店里没有的小脚本。

+

Simpread

+

官网: https://simpread.pro/

+

增强浏览器阅读体验,提供淡化内容无关元素以增加专注的聚焦模式和完全纯净的阅读模式;可以导出网页为 markdown 等多种格式到本地,或授权后导入 notion 、onenote 等笔记应用,方便存档和稍后阅读。官方插件中心还有许多相关增强,但默认模式体验也相当舒适。

+

Zotero Connector

+

官网: https://www.zotero.org/download/connectors

+

从网页上直接保存论文至 Zotero ,支持选择保存分类。

+

Global Speed

+

官网: https://github.com/polywock/globalSpeed

+

调节网页视频播放速度,使用简单。

+

Language Reactor

+

官网: https://www.languagereactor.com/

+

为Youtube视频提供机翻双语字幕,并且支持导出。

+

Vimium

+

官网: https://github.com/philc/vimium

+

Vimium 受到 Vim 编辑器的启发,让你能够抛弃鼠标,完全使用键盘完成浏览器的导航、页面跳转、页面搜索等操作。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/img/tabnine.png b/plugins/img/tabnine.png new file mode 100644 index 00000000..c387a5cc Binary files /dev/null and b/plugins/img/tabnine.png differ diff --git a/plugins/tabnine/index.html b/plugins/tabnine/index.html new file mode 100644 index 00000000..4aebba94 --- /dev/null +++ b/plugins/tabnine/index.html @@ -0,0 +1,1761 @@ + + + + + + + + + + + + + + + + + + + + + + + + Tabnine优秀的代码补全工具(不犯病的时候) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Tabnine优秀的代码补全工具(不犯病的时候)

+

本文为你推荐代码补全工具tabnine的介绍同时将和copilot的区别写出,copilot的安装在评论区后续补充。

+

安装

+

下载链接:https://www.tabnine.com/install/

+

在这个下载页面中可以选择自己所使用的代码编辑器,对于 VSCode 用户来讲,我们可以直接在插件搜索中搜索tabnine,然后安装即可。

+

介绍(本段文字由 ChatGPT 生成)

+

TabNine 是一个基于机器学习的代码自动补全工具,它可以在多种编辑器和 IDE 中使用,包括但不限于 VS Code、Sublime Text、PyCharm、Vim、Emacs 等等。与传统的代码自动补全工具不同,TabNine 不仅可以根据已有的代码段和语法规则进行补全,而且还可以通过学习大量的代码库和语言语法,自动生成全新的代码,大大提高编码效率和准确性。

+

TabNine 的优点包括:

+
    +
  • 准确性高:TabNine 通过机器学习算法训练得到,可以根据代码上下文生成最合适的代码补全选项。
  • +
  • 跨语言支持:TabNine 支持多种编程语言,包括 Python、JavaScript、Java、C++、Go、Ruby 等等。
  • +
  • 快速响应:TabNine 的补全响应速度非常快,可以轻松应对大型项目和复杂的代码结构。
  • +
  • 智能预测:TabNine 可以根据上下文和历史记录智能预测下一个可能的代码补全选项,让编码更加顺畅和高效。
  • +
  • 易于定制:TabNine 支持用户自定义配置和扩展,可以根据个人需求定制化工具。
  • +
  • TabNine 通过提供高质量的代码补全选项,减少了编写代码的时间和错误率,是一个极具价值和实用性的编程工具。
  • +
+

和copilot的区别

+

TabNine 和 Copilot 都是基于机器学习的代码自动补全工具,它们都可以根据上下文和语法规则来生成代码补全选项,提高编码效率和准确性。但是它们之间也有一些不同之处。

+
    +
  • 产品背景:TabNine 是由 Codota 公司开发的,而 Copilot 则是由 OpenAI 公司开发的。
  • +
  • 训练数据:TabNine 训练数据来自于 GitHub 上的公共代码库和用户的私有代码库,而 Copilot 使用的是 GitHub 上公共的代码库和 OpenAI 自己的内部代码库。
  • +
  • 功能特点:TabNine 重点关注代码补全和智能预测功能,而 Copilot 的特点在于能够自动生成代码片段和函数,甚至可以根据自然语言描述来生成代码。
  • +
  • 开源程度:TabNine 的代码基本开源,用户可以自行扩展和定制,而 Copilot 由于使用的是 OpenAI 的 GPT 系列模型,目前不支持自主定制和开源。
  • +
+

总的来说,TabNine 和 Copilot 都是非常有用的代码自动补全工具,具有各自的优点和适用场景,用户可以根据自己的需求选择合适的工具。

+

效果如图

+

效果图 它是个动图捏大家可以体验下嘿嘿

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..d34e2370 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["ja","en"],"separator":"[\\s\\-\uff0c\u3002]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u524d\u8a00","text":""},{"location":"#tooldiy","title":"ToolDiy\u7684\u521d\u8877","text":"

\u5728\u65f6\u95f4\u7684\u957f\u6cb3\u4e2d\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u91cd\u590d\u7e41\u7410\u7684\u5de5\u4f5c\u5e26\u7ed9\u5927\u5bb6\u7684\u53ea\u6709\u65f6\u95f4\u548c\u7cbe\u529b\u7684\u6d88\u8017\u3002\u7684\u786e\u5728\u6211\u4eec\u7684\u4e0d\u65ad\u601d\u8003\u548c\u8fdb\u6b65\u4e2d\uff0c\u4e00\u4e2a\u4e2a\u4f18\u79c0\u7684\u5de5\u5177\u51fa\u73b0\u5728\u6211\u4eec\u7684\u773c\u524d\u3002\u4f46\u968f\u4e4b\u800c\u6765\u7684\u662f\uff0c\u5de5\u5177\u79cd\u7c7b\u548c\u6570\u91cf\u7684\u98de\u901f\u53d1\u5c55\uff0c\u6211\u4eec\u96be\u4ee5\u6839\u636e\u5177\u4f53\u9700\u6c42\uff0c\u5feb\u901f\uff0c\u7b80\u6613\u5730\u4e0a\u624b\u4e00\u6b3e\u5de5\u5177\u3002\u76f8\u53cd\uff0c\u201c\u767e\u5ea6\u201d\uff0c\u201c\u8c37\u6b4c\u201d\u6210\u4e3a\u4e86\u6211\u4eec\u8001\u751f\u5e38\u8c08\u7684\u8bdd\u8bed\u3002

  1. \u5728\u4e00\u4e2a\u4e2a\u94fe\u63a5\u548c\u56de\u7b54\u4e2d\u4e0d\u65ad\u5c1d\u8bd5\u3002\u6709\u7684\u662f\u751f\u6da9\u7684\u82f1\u6587\u6587\u6863\uff0c\u6709\u7684\u662f\u5be5\u5be5\u6570\u8bed\uff0c\u8fd9\u65e0\u7591\u589e\u52a0\u4e86\u6211\u4eec\u7684\u4f7f\u7528\u6210\u672c\u3002\u6240\u4ee5 ToolDiy \u7684\u521d\u8877\u5c31\u662f\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u60f3\u501f\u52a9\u5f00\u6e90\u793e\u533a\u7684\u73af\u5883\uff0c\u4e0d\u65ad\u6536\u96c6\u548c\u63d0\u70bc\u5404\u884c\u5404\u4e1a\u7684\u5de5\u5177(\u6bd5\u7adf\u9002\u5408\u4f60\u7684\u624d\u662f\u6700\u597d\u7684)\u3002 ToolDiy \u5c06\u4ece\u5ba2\u89c2\u7684\u89d2\u5ea6\uff0c\u4ee5\u7528\u6237\u7684\u89c6\u89d2\u51fa\u53d1\uff0c\u63a8\u8350\u5206\u6790\u5404\u7c7b\u5de5\u5177\uff0c\u800c\u4e0d\u4ec5\u4ec5\u5c40\u9650\u4e8e\u56fa\u5b9a\u7684\u65b9\u5411\u3002

  2. \u5f88\u591a\u65f6\u5019\u6211\u4eec\u5728\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u4f1a\u9047\u5230\u5f88\u591a\u5de5\u5177\u7684\u73af\u5883\u914d\u7f6e\u95ee\u9898\uff0c\u6211\u4eec\u4e0d\u5f97\u4e0d\u82b1\u8d39\u5927\u91cf\u65f6\u95f4\u53bb\u601d\u8003\u548c\u5b66\u4e60\u4f7f\u7528\uff0c\u5f88\u591a\u65f6\u5019\u8fd9\u4e9b\u5de5\u4f5c\u672c\u8eab\u5c31\u53ea\u80fd\u591f\u953b\u70bc\u4f60\u5bf9\u914d\u7f6e\u73af\u5883\u7684\u8010\u5fc3\uff0c\u6211\u4eec\u60f3\u8ba9\u5927\u5bb6\u4e13\u6ce8\u5de5\u5177\u672c\u8eab\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\u7ef4\u62a4\u4e00\u4e9b\u5de5\u5177\u914d\u7f6e\u548c\u6784\u5efa\u7684\u81ea\u52a8\u5316\u811a\u672c\u6216\u8005\u662fdocker\u73af\u5883\u65b9\u4fbf\u4f7f\u7528\u8005\uff0c\u5f53\u7136\u6211\u4eec\u5728\u4e66\u5199\u65f6\u5019\u7559\u4e0b\u7684\u6784\u5efa\u811a\u672c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u7ed9\u4f7f\u7528\u8005\u5b66\u4e60\u3002\u4e00\u4e2a\u80fd\u591f\u5f00\u7bb1\u5373\u7528\u7684\u5de5\u5177\u60f3\u60f3\u90fd\u4ee4\u4eba\u5174\u594b\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u5efa\u8bbe\u4ed6\u5427\uff01

\u53ea\u8981\u80fd\u591f\u7ed9\u5927\u5bb6\u5e26\u6765\u5e2e\u52a9\u548c\u66f4\u597d\u7684\u4f53\u9a8c\uff0c\u8fd9\u4fbf\u662f ToolDiy \u5b58\u5728\u7684\u610f\u4e49\u3002

\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u4f7f\u7528\u5b83\u5427\uff01

"},{"location":"#_2","title":"\u8d21\u732e","text":"

\u672c\u9879\u76ee\u7684\u521d\u8877\u662f\u63d0\u4f9b\u7ef4\u62a4\u4e00\u4e2a\u5de5\u5177\u8bf4\u660e\u7684\u4ed3\u5e93\u548c\u7ef4\u57fa\uff0c\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u964d\u4f4e\u4f7f\u7528\u95e8\u69db\u65b9\u4fbf\u5927\u5bb6\u7684\u9879\u76ee\uff0c\u6211\u4eec\u7684\u539f\u5219\u662f\u4e0d\u9650\u4e8e\u4efb\u4f55\u7279\u5b9a\u7684\u5b66\u79d1\u548c\u9886\u57df\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u81ea\u5df1\u8ba4\u4e3a\u6709\u7528\u7684\u5de5\u5177\u8fdb\u884c\u5206\u4eab\uff08\u6ce8\u610f\u505a\u597d\u5165\u95e8\u4ecb\u7ecd\uff0c\u7b26\u5408\u9879\u76ee\u521d\u8877\uff09\uff0c\u5728\u5c0a\u91cd\u5de5\u5177\u751f\u4ea7\u8005\u52b3\u52a8\u7684\u524d\u63d0\u4e0b\u90fd\u53ef\u4ee5\u5206\u4eab\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u5141\u8bb8\u5927\u5bb6\u5206\u4eab\u76d7\u7248\u548c\u7834\u89e3\u5de5\u5177\uff0c\u5728\u89c4\u8303\u7684\u524d\u63d0\u4e0b\u6211\u4eec\u6b22\u8fce\u5404\u79cd\u5404\u6837\u7684 PR ,\u6709\u4efb\u4f55\u9664\u5f00\u4e0a\u8bc9\u7684\u7591\u60d1\u90fd\u53ef\u4ee5\u63d0\u51fa issue \u6216\u8005\u8054\u7cfb\u4ed3\u5e93\u7ba1\u7406\uff0c\u5728\u6d89\u53ca\u4ed8\u8d39\u5185\u5bb9\u7684\u5de5\u5177\u65f6\u6211\u4eec\u9f13\u52b1\u5206\u4eab\u4e5f\u5e0c\u671b\u5927\u5bb6\u505a\u597d\u4fe1\u606f\u516c\u5f00\u6807\u6ce8\u4ed6\u7684\u4ef7\u683c\uff0c\u672c\u9879\u76ee\u4e0d\u4f1a\u7ed9\u4efb\u4f55\u5de5\u5177\u5e7f\u544a\uff0c\u4e0d\u4f1a\u6709\u7279\u6b8a\u4f4d\u7f6e\u7b49\u5e7f\u544a\u884c\u4e3a\u4e00\u5207\u4ee5\u63d0\u4ea4\u65f6\u95f4\u6392\u7248\u3002\u6211\u4eec\u540c\u6837\u6b22\u8fce\u5404\u79cd\u6539\u5584\u672c\u9879\u76ee\u9605\u8bfb\u4f53\u9a8c\u7684 PR \u8bf7\u6c42\uff08\u5305\u62ec\u4f46\u4e0d\u5c40\u9650\u4e8e\u6dfb\u52a0\u4e00\u4e2a\u6362\u884c\u589e\u52a0\u9605\u8bfb\u4f53\u9a8c\uff0c\u589e\u52a0\u9879\u76ee logo \uff0c\u4e2d\u82f1\u6587\u6821\u5bf9\u7b49\uff09\uff0c_(:\u0437)\u2220)_\u672c\u9879\u76ee\u8fd8\u5904\u4e8e\u521d\u671f\u9636\u6bb5\uff0c\u975e\u5e38\u9700\u8981\u5404\u4f4d\u5927\u4f6c\u7684\u5b8c\u5584\u548c\u7ea0\u9519\u3002

\u5982\u679c\u4f60\u6709\u5df2\u7ecf\u5199\u597d\u7684\u6587\u7ae0\u60f3\u8981\u6dfb\u52a0\u5230\u8fd9\u91cc\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u65b9\u5f0f\uff1a

  1. fork \u672c\u4ed3\u5e93\uff0c\u5728 docs \u6587\u4ef6\u5939\u4e0b\u9009\u62e9\u5bf9\u5e94\u5206\u7c7b\u521b\u5efa\u4e2d\u6587\u4e0e\u82f1\u6587\u7248 Markdown \u6587\u6863\uff08\u82f1\u6587\u7248\u6587\u4ef6\u540d\u4ee5 .en.md \u7ed3\u5c3e\uff09\uff0c\u6700\u540e\u63d0\u51fa PR \u4ee5\u4fbf\u8fdb\u884c\u5408\u5e76\u3002
  2. \u8054\u7cfb SakurajimaMaii \uff0c\u5c06\u6587\u6863\u7684\u4e2d\u6587\u548c\u82f1\u6587\u7248\u53d1\u9001\u81f3\u4ed6\u7684\u90ae\u7bb1 Email \u3002

\u5982\u679c\u4f60\u4e0d\u77e5\u9053\u4ece\u4f55\u5904\u4e0b\u7b14\uff0c\u53ef\u4ee5\u9996\u5148\u53c2\u8003\u5199\u4f5c\u6a21\u677f\u3002

Note

  1. \u6240\u6709\u4e0a\u4f20\u5230\u672c\u7f51\u7ad9\u7684\u5185\u5bb9\u5747\u5e94\u8be5\u7b26\u5408\u89c4\u8303\u3002
  2. \u5982\u679c\u4f60\u4e0d\u719f\u6089 PR \uff0c\u4f60\u53ef\u4ee5\u53c2\u80033\u5206\u949f\u5b66\u4f1a, \u5982\u4f55PR(Pull Request)\u4ee3\u7801\u5230 Github\u3002
"},{"location":"#_3","title":"\u8054\u7cfb\u6211\u4eec","text":"

\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u7fa4\u804a tooldiy

"},{"location":"#_4","title":"\u7248\u6743\u58f0\u660e","text":"

\u672c\u4f5c\u54c1\u91c7\u7528\u77e5\u8bc6\u5171\u4eab\u7f72\u540d-\u76f8\u540c\u65b9\u5f0f\u5171\u4eab 4.0 \u56fd\u9645\u8bb8\u53ef\u534f\u8bae\u8fdb\u884c\u8bb8\u53ef\u3002

"},{"location":"firmware/RustSBI/","title":"RustSBI","text":"

\u5b98\u7f51\uff1ahttps://github.com/rustsbi

RustSBI\u662fRISC-V\u4e0b\u53ef\u7528\u7684SBI\u56fa\u4ef6\u5b9e\u73b0\uff0c\u5b83\u62e5\u6709\u201c\u72ec\u7acb\u5305\u201d\u548c\u201c\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u201d\u3002 RISC-V SBI\u662fRISC-V\u4e0b\u4e0d\u53ef\u6216\u7f3a\u7684\u56fa\u4ef6\u63a5\u53e3\uff0c\u5b83\u63d0\u4f9b\u4e86\u8db3\u4ee5\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u7684\u57fa\u672c\u529f\u80fd\uff1b \u66f4\u591a\u7684\u529f\u80fd\u6027\u63a5\u53e3\u5e94\u5f53\u901a\u8fc7\u5176\u5b83\u7684\u5de5\u4e1a\u6807\u51c6\u5b9e\u73b0\u3002

"},{"location":"firmware/RustSBI/#_1","title":"\u72ec\u7acb\u5305","text":"

\u72ec\u7acb\u5305\u662f\u5206\u522b\u5b9e\u73b0RustSBI\u7684\u9879\u76ee\uff0c\u6bcf\u4e2a\u4e0d\u540c\u7684\u4e3b\u677f\u90fd\u62e5\u6709\u4e0d\u540c\u7684\u4ed3\u5e93\u548c\u89e3\u51b3\u65b9\u6848\u3002 \u8fd9\u4e9b\u65b9\u6848\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a

  • rustsbi-k510
  • rustsbi-d1
  • rustsbi-hifive-unmatched
  • rustsbi-qemu
  • rustsbi-k210

\u8fd9\u4e9b\u89e3\u51b3\u65b9\u6848\u7684\u6587\u6863\u548c\u4e0b\u8f7d\u94fe\u63a5\u90fd\u5728\u5404\u81ea\u7684\u4ed3\u5e93\u4e2d\u3002

"},{"location":"firmware/RustSBI/#_2","title":"\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf","text":"

RustSBI\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u63d0\u4f9b\u4e86\u4eceSBI\u5230UEFI\u3001LinuxBoot\u7684\u5b8c\u6574\u89e3\u51b3\u65b9\u6848\uff0c \u5b83\u62e5\u6709\u4e00\u4e2a\u56fe\u5f62\u5316\u7684\u7f16\u8bd1\u754c\u9762\uff0c\u80fd\u5728\u4e0d\u540c\u7684\u4e3b\u677f\u4e0a\u8fd0\u884c\u3002

\u4e3a\u4e86\u7f16\u8bd1\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\uff0c\u590d\u5236\u4ed3\u5e93\u540e\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\uff1a

cargo termconfig\n

\u5728\u56fe\u5f62\u754c\u9762\u914d\u7f6e\u5b8c\u6bd5\u540e\uff0c\u914d\u7f6e\u6587\u4ef6\u5c06\u4fdd\u5b58\u5230Xtask.toml\u6587\u4ef6\u4e2d\uff0c\u4ee5\u4f9b\u7f16\u8bd1\u8fc7\u7a0b\u9605\u8bfb\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4ec5\u7f16\u8bd1\u6216\u8005\u7f16\u8bd1\u5e76\u70e7\u5f55\u3002\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\u7f16\u8bd1\uff1a

cargo make\n

\u6216\u8005\uff0c\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\u76f4\u63a5\u7f16\u8bd1\u548c\u70e7\u5f55\u5230\u76ee\u6807\u4e3b\u677f\uff1a

cargo flash\n

RustSBI\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u7684\u94fe\u63a5\uff1ahttps://github.com/rustsbi/standalone

"},{"location":"frame/wasm-bpf/","title":"\ud83d\udce6 Wasm-bpf: \u4e3a\u5728 WebAssembly \u4e0a\u8fd0\u884c eBPF \u5e94\u7528\u800c\u8bbe\u8ba1\u7684\u5e93\u3001\u5de5\u5177\u94fe\u548c\u8fd0\u884c\u65f6","text":"

\u4e2d\u6587\u6587\u6863 Gitee Github

Wasm-bpf \u662f\u4e00\u4e2a\u7531 CO-RE(\u4e00\u6b21\u7f16\u5199 \u2013 \u5230\u5904\u8fd0\u884c) libbpf libbpf \u9a71\u52a8\u7684 WebAssembly eBPF \u5e93\u3001\u5de5\u5177\u94fe\u548c\u8fd0\u884c\u65f6\u3002\u5b83\u53ef\u4ee5\u5e2e\u52a9\u60a8\u51e0\u4e4e\u4e0d\u7528\u4fee\u6539\u5730\u6784\u5efa\u51e0\u4e4e\u6240\u6709\u7684 eBPF \u7a0b\u5e8f\u6216\u7528\u4f8b\u5230 Wasm \u4e2d\uff0c\u5e76\u5728 Wasm \u6c99\u7bb1\u4e2d\u8de8\u5e73\u53f0\u8fd0\u884c\u3002

"},{"location":"frame/wasm-bpf/#_1","title":"\u7b80\u4ecb","text":"

WebAssembly\uff08\u7b80\u79f0Wasm\uff09\u662f\u4e00\u79cd\u53ef\u6267\u884c\u4ee3\u7801\u7684\u4fbf\u643a\u5f0f\u4e8c\u8fdb\u5236\u683c\u5f0f\u3002\u4ee3\u7801\u5728\u4e00\u4e2a\u5185\u5b58\u5b89\u5168\u7684\u6c99\u76d2\u73af\u5883\u4e2d\u4ee5\u63a5\u8fd1\u672c\u673a\u901f\u5ea6\u6267\u884c\uff0c\u5177\u6709\u660e\u786e\u5b9a\u4e49\u7684\u8d44\u6e90\u9650\u5236\u548c\u4e00\u4e2a API \uff0c\u7528\u4e8e\u4e0e\u5d4c\u5165\u5f0f\u4e3b\u673a\u73af\u5883\uff08\u4f8b\u5982\u4ee3\u7406\uff09\u8fdb\u884c\u901a\u4fe1\u3002

wasm-bpf \u9879\u76ee\u7ed3\u5408\u4e86 Wasm \u548c eBPF \u6280\u672f\uff0c\u63d0\u9ad8\u4e86eBPF\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u53ef\u7f16\u7a0b\u6027\u3002\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5e93\u548c\u5de5\u5177\u94fe\uff0c\u7528\u4e8e\u5c06\u591a\u79cd\u8bed\u8a00\u7f16\u5199\u7684 eBPF \u5e94\u7528\u7f16\u8bd1\u6210 Wasm\uff0c\u5e76\u63d0\u4f9b\u8fd0\u884c\u65f6\u73af\u5883\u4ee5\u5728\u5b89\u5168\u7684\u6c99\u7bb1\u4e2d\u8fd0\u884c\u8fd9\u4e9b\u7a0b\u5e8f\u3002

\u4f7f\u7528 wasm-bpf\uff0c\u7528\u6237\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u548c\u5b89\u5168\u5730\u6267\u884c\u7528\u6237\u81ea\u5b9a\u4e49\u6216\u793e\u533a\u8d21\u732e\u7684 Wasm-eBPF \u4ee3\u7801\u4f5c\u4e3a\u63d2\u4ef6\uff0c\u4f8b\u5982\u5728\u4ed6\u4eec\u7684\u7f51\u7edc\u76f8\u5173\u8f6f\u4ef6\u4ea7\u54c1\uff0c\u6216\u53ef\u89c2\u6d4b\u6027\u5e73\u53f0\u4e2d\u3002\u8fd9\u5176\u4e2d eBPF \u4f7f\u5f97\u6570\u636e\u6536\u96c6\u9ad8\u6548\u53ef\u6269\u5c55\uff0c\u540c\u65f6 Wasm \u4e5f\u5141\u8bb8\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u9ad8\u7ea7\u5904\u7406\u548c\u5206\u6790\u3002

\u6b64\u5916\uff0c\u5b83\u4f7f\u5f00\u53d1\u4eba\u5458\u80fd\u591f\u4f7f\u7528\u719f\u6089\u7684\u8bed\u8a00\uff0c\u5982 C/C ++\uff0cRust\uff0cGo \u548c\u5176\u4ed6 30 \u591a\u79cd\u80fd\u7f16\u8bd1\u5230 Wasm \u7684\u7f16\u7a0b\u8bed\u8a00\u7f16\u5199 eBPF \u7a0b\u5e8f\uff0c\u5e76\u8f7b\u677e\u5730\u5728\u4e0d\u540c\u7684Linux\u53d1\u884c\u7248\u4e2d\u90e8\u7f72\u5b83\u4eec\u3002\u6b64\u5916\uff0c\u5229\u7528 Wasm \u7684\u751f\u6001\u548c\u5de5\u5177\u94fe\uff0c\u4e91\u63d0\u4f9b\u5546\u53ef\u4ee5\u5229\u7528 wasm-bpf \u4e3a\u5176\u5ba2\u6237\u63d0\u4f9b\u5b89\u5168\u4e14\u9ad8\u6027\u80fd\u7684\u73af\u5883\u6765\u5f00\u53d1\u548c\u90e8\u7f72 eBPF \u5e94\u7528\u7a0b\u5e8f\u3002

"},{"location":"frame/wasm-bpf/#_2","title":"\u529f\u80fd","text":"
  • \u901a\u7528\u6027: \u63d0\u4f9b\u4e86\u4ece eBPF \u5230 Wasm \u7684\u5927\u591a\u6570\u80fd\u529b\uff0c\u5305\u62ec\u4ece\u73af\u5f62\u7f13\u51b2\u533a\u6216 perf \u7f13\u51b2\u533a\u8fdb\u884c\u8f6e\u8be2\uff0c\u4f7f\u7528 maps \u5728\u5185\u6838 eBPF \u548c\u7528\u6237\u7a7a\u95f4 Wasm \u4e4b\u95f4\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\uff0c\u52a8\u6001\u52a0\u8f7d\u3001\u6302\u8f7d\u5230 hook \u6267\u884c\u7b49\u3002\u652f\u6301\u5927\u91cf\u7684 eBPF \u7a0b\u5e8f\u7c7b\u578b\u548c maps \u7c7b\u578b\u3002
  • \u9ad8\u6027\u80fd: \u5bf9\u4e8e\u590d\u6742\u6570\u636e\u7c7b\u578b\u6ca1\u6709\u5e8f\u5217\u5316\u5f00\u9500\uff0c\u4f7f\u7528\u5171\u4eab\u5185\u5b58\u6765\u907f\u514d\u4e3b\u673a\u548c Wasm \u4e4b\u95f4\u7684\u62f7\u8d1d\u5f00\u9500\u3002
  • \u6613\u4e8e\u4f7f\u7528: \u63d0\u4f9b\u7c7b\u4f3c\u4e8e libbpf-bootstrap \u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u81ea\u52a8\u751f\u6210 Wasm-eBPF \u9aa8\u67b6\u5934\u6587\u4ef6\u548c\u7c7b\u578b\u5b9a\u4e49\u4ee5\u8fdb\u884c\u7ed1\u5b9a\u3002\u53ef\u4ee5\u4f7f\u7528 C/C++\u3001Rust\u3001Go \u7f16\u5199 eBPF \u7a0b\u5e8f\u5e76\u7f16\u8bd1\u6210 Wasm\u3002
  • \u8d85\u8f7b\u91cf\u7ea7: \u6700\u5c0f\u8fd0\u884c\u65f6\u7684\u4e8c\u8fdb\u5236\u5927\u5c0f\u4ec5\u4e3a 1.5 MB\u3002\u7f16\u8bd1\u540e\u7684 Wasm \u6a21\u5757\u5927\u5c0f\u4ec5\u4e3a ~90K\u3002\u4f7f\u7528\u76f8\u540c\u7684\u5de5\u5177\u94fe\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u5730\u5728\u4efb\u4f55\u8bed\u8a00\u548c\u5e73\u53f0\u4e0a\u6784\u5efa\u81ea\u5df1\u7684 Wasm-eBPF \u8fd0\u884c\u65f6\uff01

\u8bf7\u53c2\u9605 examples \u76ee\u5f55\u4e2d\u4ee5 C\u3001Rust\u3001Go \u7f16\u5199\u7684\u7f16\u8bd1\u4e3a Wasm \u7684 eBPF \u7a0b\u5e8f\u793a\u4f8b\uff0c\u8986\u76d6\u4e86\u4ece\u8ddf\u8e2a\u3001\u7f51\u7edc\u5230\u5b89\u5168\u7684\u5404\u79cd\u7528\u4f8b\u3002

\u6709\u5173\u4f7f\u7528 OCI \u955c\u50cf\u5206\u53d1\u3001\u52a8\u6001\u52a0\u8f7d\u3001\u8fd0\u884c Wasm-eBPF \u7a0b\u5e8f\u7684\u5de5\u5177\uff0c\u8bf7\u53c2\u9605 eunomia-bpf \u4ed3\u5e93\u3002

"},{"location":"frame/wasm-bpf/#_3","title":"\ud83d\udd28 \u793a\u4f8b","text":"

\u8bf7\u67e5\u770b examples \u76ee\u5f55\u4e2d\u7528 C\u3001Rust\u3001Go \u7f16\u5199\u7684\u7f16\u8bd1\u6210 WASM \u7684 eBPF \u7a0b\u5e8f\u793a\u4f8b\u3002

tracing examples

  • bootstrap and rust-bootstrap: \u8ddf\u8e2a\u8fdb\u7a0b\u7684 exec \u548c exit \u64cd\u4f5c
  • runqlat: \u5c06\u8c03\u5ea6\u7a0b\u5e8f\u7684\u8fd0\u884c\u961f\u5217\u5ef6\u8fdf\u6c47\u603b\u6210\u76f4\u65b9\u56fe
  • execve and go-execve: \u8ddf\u8e2a execve \u7cfb\u7edf\u8c03\u7528

security example - lsm and go-lsm: \u68c0\u67e5\u5220\u9664\u76ee\u5f55\u7684\u6743\u9650

networking example - sockfilter: \u76d1\u89c6\u6570\u636e\u5305\u5e76\u5904\u7406 __sk_buff - sockops: \u5728 syn \u6570\u636e\u5305\u4e2d\u6dfb\u52a0 pid \u9009\u9879\u3002

runqlat \u7684\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a

$ sudo ./wasm-bpf runqlat.wasm 1\nTracing run queue latency... Hit Ctrl-C to end.\n\n     usecs               : count    distribution\n         0 -> 1          : 72       |*****************************           |\n         2 -> 3          : 93       |*************************************   |\n         4 -> 7          : 98       |****************************************|\n         8 -> 15         : 96       |*************************************** |\n        16 -> 31         : 38       |***************                         |\n        32 -> 63         : 4        |*                                       |\n        64 -> 127        : 5        |**                                      |\n       128 -> 255        : 6        |**                                      |\n       256 -> 511        : 0        |                                        |\n       512 -> 1023       : 0        |                                        |\n      1024 -> 2047       : 0        |                                        |\n      2048 -> 4095       : 1        |                                        |\n
"},{"location":"frame/wasm-bpf/#_4","title":"\u6784\u5efa\u8fd0\u884c\u65f6","text":"

\u8bf7\u53c2\u8003 docs/build.md\u3002

"},{"location":"frame/wasm-bpf/#wasm-bpf","title":"Wasm-bpf \u5de5\u4f5c\u539f\u7406","text":"

wasm-bpf \u8fd0\u884c\u65f6\u9700\u8981\u4e24\u90e8\u5206\uff1a\u4e3b\u673a\u7aef(\u5728 Wasm \u8fd0\u884c\u65f6\u4e4b\u5916)\u548c Wasm \u5ba2\u6237\u7aef\u7aef(\u5728 Wasm \u8fd0\u884c\u65f6\u4e4b\u5185)\u3002

  • \u4e3b\u673a\u7aef\uff1a\u4e00\u4e2a\u7b80\u5355\u7684\u8fd0\u884c\u65f6\u5b9e\u73b0\u793a\u4f8b
  • \u53c2\u89c1 runtime/cpp\uff0c\u5b83\u5c06\u662f\u5728 libbpf \u548c WAMR \u4e4b\u4e0a\u6784\u5efa\u7684 C++ \u793a\u4f8b\u8fd0\u884c\u65f6\u3002\u53e6\u4e00\u4e2a\u66f4\u5b8c\u5584\u7684\u57fa\u4e8e Wasmtime \u7684 Rust \u8fd0\u884c\u65f6\u5b9e\u73b0\u5728 runtime/wasm-bpf-rs \u4e2d\u3002
  • \u60a8\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u7cfb\u7edf\u63a5\u53e3\u4ee5 \u4efb\u4f55 \u8bed\u8a00\u3001\u4efb\u4f55 eBPF \u5e93\u548c \u4efb\u4f55 Wasm \u8fd0\u884c\u65f6\u8f7b\u677e\u6784\u5efa\u81ea\u5df1\u7684 Wasm-eBPF \u8fd0\u884c\u65f6\u3002
  • wasm \u7aef\uff1a\u5de5\u5177\u94fe\u548c\u5e93
  • \u4e00\u4e2a\u540d\u4e3a libbpf-wasm \u7684\u5934\u6587\u4ef6\u5e93\uff0c\u4e3a Wasm \u5ba2\u6237\u7aef C/C++ \u4ee3\u7801\u63d0\u4f9b libbpf API\u3002
  • \u4e00\u4e2a\u540d\u4e3a bpftool \u7684\u5de5\u5177\uff0c\u7528\u4e8e\u751f\u6210 Wasm-eBPF skeleton \u5934\u6587\u4ef6\u548c C \u7ed3\u6784\u5b9a\u4e49\uff0c\u4ee5\u4fbf\u5728\u4e3b\u673a\u548c Wasm \u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u9012\u6570\u636e\u800c\u65e0\u9700\u5e8f\u5217\u5316\u3002
  • \u5bf9\u4e8e Rust\u3001Go \u548c\u5176\u4ed6\u8bed\u8a00\u7684\u652f\u6301\u4e0e C/C++ \u652f\u6301\u7c7b\u4f3c\u3002

\u6709\u5173\u8be6\u7ec6\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u8bf7\u53c2\u9605 examples/bootstrap/README.md\u3002\u4e0b\u56fe\u663e\u793a\u4e86 eBPF \u548c Wasm \u8fd0\u884c\u65f6\u4e4b\u95f4\u7684\u6574\u4f53\u4ea4\u4e92\u8fc7\u7a0b\uff1a

Wasm \u6a21\u5757\u53ef\u4ee5\u540c\u65f6\u52a0\u8f7d\u548c\u63a7\u5236\u591a\u4e2a eBPF \u7a0b\u5e8f\uff0c \u5e76\u4e14\u80fd\u591f\u8c03\u7528\u6216\u8005\u63a7\u5236\uff08\u901a\u8fc7\u7ec4\u4ef6\u6a21\u578b\uff09\u5176\u4ed6\u8bed\u8a00\u7f16\u5199\u7684 Wasm \u6a21\u5757\u6765\u5904\u7406\u6570\u636e\u3002

\u6211\u4eec\u4e5f\u63d0\u4e86\u4e00\u4e2a WASI \u63d0\u6848 wasi-bpf\u3002

"},{"location":"frame/wasm-bpf/#_5","title":"\u534f\u8bae","text":"

MIT

"},{"location":"frame/zineland/","title":"Zineland","text":""},{"location":"frame/zineland/#_1","title":"\u7b80\u4ecb","text":"

Zineland \u662f\u4e00\u4e2a\u7b80\u5355\u6709\u6548\u7684\u6742\u5fd7\u6784\u5efa\u6846\u67b6\uff0c\u80fd\u591f\u5feb\u901f\u901a\u8fc7 Markdown \u6587\u6863\u751f\u6210\u6742\u5fd7\u98ce\u683c\u7684\u9759\u6001\u7f51\u9875

"},{"location":"frame/zineland/#_2","title":"\u83b7\u53d6","text":"
  • \u6e90\u4ee3\u7801\u4ed3\u5e93 https://github.com/zineland/zine.git
  • \u83b7\u53d6
  • cargo
  cargo install zine\n
  • brew
  brew install zineland/tap/zine\n
  • \u6587\u6863 https://zineland.github.io
"},{"location":"frame/zineland/#_3","title":"\u4f18\u70b9","text":"
  • \u79fb\u52a8\u7aef\u9605\u8bfb\u4f53\u9a8c\u4f18\u5148
  • \u4f18\u96c5\u7684\u6742\u5fd7\u8bbe\u8ba1
  • \u53ef\u5b9a\u5236\u5316\u7a0b\u5ea6\u9ad8\uff0c\u652f\u6301\u6269\u5c55
  • \u652f\u6301I18n\u548cI10n
"},{"location":"large_language_model/rwkv.cpp/","title":"rwkv.cpp: CPU \u4e5f\u80fd\u8dd1\u7684 RNN \u4e2d\u6587\u8bed\u8a00\u5927\u6a21\u578b","text":"

\u6700\u8fd1 LLM\uff08\u5927\u8bed\u8a00\u6a21\u578b\uff09\u5b9e\u5728\u706b\u7206\uff0c\u51fa\u4e86\u4e0d\u5c11\u5f00\u6e90\u6a21\u578b\uff0c\u6bd4\u5982 Alpaca1\u3001ChatGLM2\u3001BELLE3 \u7b49\u7b49\uff0c\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u6709\u673a\u4f1a\u8fd0\u884c\u548c\u8bad\u7ec3\u4e13\u5c5e\u81ea\u5df1\u7684 LLM\uff0c\u6211\u4e5f\u8feb\u4e0d\u53ca\u5f85\u4e86\u3002

\u4f46\u662f\uff0c\u719f\u6089\u6211\u7684\u8001\u8bfb\u8005\u670b\u53cb\u5e94\u8be5\u77e5\u9053\uff0c\u867d\u7136\u6211\u662f\u641e\u7b97\u6cd5\u7684\uff0c\u4e5f\u53d1\u8fc7\u51e0\u7bc7\u8bba\u6587\uff0c\u4f46\u6211\u662f\u8d70\u7684\u662f\u8d2b\u7a77\u79d1\u7814\u7684\u8def\u7ebf\uff0c\u4e00\u5f20\u663e\u5361\u90fd\u6ca1\u6709\u3002\u50cf ChatGLM-6B \u8fd9\u79cd\u6a21\u578b\uff0c\u5728\u6211\u7684\u5c0f\u7834 Mac \u4e0a\u6839\u672c\u8dd1\u4e0d\u8d77\u6765\u3002Alpaca \u7684 CPU \u7248\u672c\u867d\u7136\u80fd\u8dd1\uff0c\u4f46\u5b83\u4e2d\u6587\u6c34\u5e73\u5b9e\u5728\u592a\u70c2\u4e86\u3002\u6709\u6ca1\u6709\u4ec0\u4e48\u6a21\u578b\u4e0d\u4ec5\u4e2d\u6587\u597d\uff0c\u53c8\u53ef\u4ee5\u4e0d\u4f9d\u8d56\u663e\u5361\uff1fRWKV4\u8fdb\u5165\u4e86\u6211\u7684\u89c6\u91ce\u3002

RWKV \u662f\u4e00\u79cd\u7eaf RNN \u7684\u67b6\u6784\uff0c\u80fd\u591f\u8fdb\u884c\u8bed\u8a00\u5efa\u6a215\uff0c\u76ee\u524d\u6700\u5927\u53c2\u6570\u89c4\u6a21\u5df2\u7ecf\u505a\u5230\u4e86 14B6\u3002\u76ee\u524d\u7684\u5728\u7ebf\u4f53\u9a8c\u5730\u5740\uff1a

Raven RWKV 7B - a Hugging Face Space by BlinkDL

\u4e0d\u8fc7\u8bf7\u6ce8\u610f\uff0c\u4e0a\u9762\u8fd9\u4e2a\u4f53\u9a8c\u6a21\u578b\u7684\u5fae\u8c03\u8bed\u6599\u82f1\u6587\u5360 99%\uff0c\u6240\u4ee5\u4e2d\u6587\u6c34\u5e73\u5e76\u4e0d\u662f\u6700\u597d\u7684\u3002\u4f5c\u8005 @PENG Bo \u6700\u8fd1\u53d1\u5e03\u7684 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1% \u8fd9\u4e2a\u6a21\u578b\u7684\u4e2d\u6587\u5fae\u8c03\u8bed\u6599\u5360 50%\uff0c\u4e2d\u6587\u6c34\u5e73\u66f4\u597d\u3002\u4ee5\u4e0b\u6211\u4e5f\u4f1a\u57fa\u4e8e\u8be5\u6a21\u578b\u8fdb\u884c\u64cd\u4f5c\u3002

"},{"location":"large_language_model/rwkv.cpp/#_1","title":"\u4e0b\u8f7d\u6a21\u578b","text":"

\u9996\u5148\uff0cRWKV \u7684\u6a21\u578b\u5206\u4e3a\u5f88\u591a\u79cd\uff0c\u90fd\u53d1\u5e03\u5728\u4f5c\u8005\u7684 huggingface7 \u4e0a\uff1a

\u5176\u4e2d\uff1a

  • \u7edf\u4e00\u524d\u7f00 rwkv-4 \u8868\u793a\u5b83\u4eec\u90fd\u57fa\u4e8e RWKV \u7684\u7b2c 4 \u4ee3\u67b6\u6784\u3002
  • pile \u4ee3\u8868\u57fa\u5e95\u6a21\u578b\uff0c\u5728 pile \u7b49\u57fa\u7840\u8bed\u6599\u4e0a\u8fdb\u884c\u9884\u8bad\u7ec3\uff0c\u6ca1\u6709\u8fdb\u884c\u5fae\u8c03\uff0c\u9002\u5408\u9ad8\u73a9\u6765\u7ed9\u81ea\u5df1\u5b9a\u5236\u3002
  • novel \u4ee3\u8868\u5c0f\u8bf4\u6a21\u578b\uff0c\u5728\u5404\u79cd\u8bed\u8a00\u7684\u5c0f\u8bf4\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u9002\u5408\u5199\u5c0f\u8bf4\u3002
  • raven \u4ee3\u8868\u5bf9\u8bdd\u6a21\u578b\uff0c\u5728\u5404\u79cd\u5f00\u6e90\u7684\u5bf9\u8bdd\u8bed\u6599\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u9002\u5408\u804a\u5929\u3001\u95ee\u7b54\u3001\u5199\u4ee3\u7801\u3002
  • 430m\u30017b \u8fd9\u4e9b\u6307\u7684\u662f\u6a21\u578b\u7684\u53c2\u6570\u91cf\u3002

\u6211\u4e0b\u8f7d\u7684\u662f RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth8 \uff0c \u5373\u53c2\u6570\u91cf\u4e3a 7B \u7684\u5bf9\u8bdd\u6a21\u578b\uff0c\u5fae\u8c03\u9884\u6599\u4e2d 49% \u662f\u82f1\u6587\uff0c50% \u662f\u4e2d\u6587\u3002ctx4096 \u8868\u793a\u5fae\u8c03\u662f\u7684\u4e0a\u4e0b\u6587\u957f\u5ea6\u3002

\u8fd9\u4e2a\u6a21\u578b\u6709 14.8 GB\uff0c\u8bf7\u52a1\u5fc5\u786e\u4fdd\u81ea\u5df1\u7535\u8111\u7684\u53ef\u7528\u786c\u76d8\u7a7a\u95f4\u5728 40 GB \u4ee5\u4e0a\uff08\u56e0\u4e3a\u540e\u9762\u8981\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8fdb\u884c\u8f6c\u6362\u548c\u91cf\u5316\uff0c\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u786c\u76d8\u7a7a\u95f4\u3002\uff09

"},{"location":"large_language_model/rwkv.cpp/#_2","title":"\u6a21\u578b\u8f6c\u6362","text":"

\u4e0b\u8f7d\u597d\u7684\u6a21\u578b\u914d\u5408 ChatRWKV9\u8fd9\u4e2a\u4ed3\u5e93\u91cc\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u8dd1\u4e86\uff0c\u4f46\u662f\u5b83\u5bf9 CPU \u7b56\u7565\u7684\u652f\u6301\u6700\u4f4e\u53ea\u5230 fp32i8\uff0c7B \u6a21\u578b\u9700\u8981 12 GB \u5185\u5b58\u624d\u80fd\u8dd1\u8d77\u6765\uff0c\u6211\u7528 16GB \u5185\u5b58\u7684 Mac \u8bd5\u4e86\u4e00\u4e0b\uff0c\u8dd1\u662f\u8dd1\u8d77\u6765\u4e86\uff0c\u4f46\u662f\u975e\u5e38\u6162\u3002

\u6240\u4ee5\uff0c\u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e0b\u80fd\u591f\u66f4\u5145\u5206\u5229\u7528 CPU \u7684\u65b9\u6cd5\uff1a

saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)

rwkv.cpp \u53ef\u4ee5\u5c06 RWKV \u539f\u59cb\u6a21\u578b\u7684\u53c2\u6570\u8f6c\u5316\u4e3a float16\uff0c\u5e76\u91cf\u5316\u5230 int4\uff0c\u53ef\u4ee5\u5728 CPU \u4e0a\u66f4\u5feb\u5730\u8fd0\u884c\uff0c\u4e5f\u53ef\u4ee5\u8282\u7701\u66f4\u591a\u7684\u5185\u5b58\u3002

\u4ee5\u4e0b\u662f\u64cd\u4f5c\u6b65\u9aa4\u3002

"},{"location":"large_language_model/rwkv.cpp/#1","title":"1. \u4e0b\u8f7d\u4ed3\u5e93\u4ee3\u7801","text":"

\u9700\u8981\u5b89\u88c5 git\uff08\u6ca1\u6709 git \u7684\u670b\u53cb\uff0c\u53ef\u80fd\u4f60\u8981\u8865\u7684\u524d\u7f6e\u77e5\u8bc6\u6709\u70b9\u591a\uff0c\u6211\u5efa\u8bae\u81ea\u884c\u641c\u7d22\uff09

git clone --recursive https://github.com/saharNooby/rwkv.cpp.git\ncd rwkv.cpp\n
"},{"location":"large_language_model/rwkv.cpp/#2-or","title":"2. \u4e0b\u8f7d\u4f9d\u8d56\u5e93 or \u7f16\u8bd1\u4f9d\u8d56\u5e93","text":"

rwkv.cpp \u7684\u5f00\u53d1\u8005\u5df2\u7ecf\u9884\u7f16\u8bd1\u4e86\u4e0d\u540c\u5e73\u53f0\u4e0a\u7684\u4f9d\u8d56\u5e93\uff0c\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\uff1ahttps://github.com/saharNooby/rwkv.cpp/releases

\u4e0b\u8f7d\u7684\u65f6\u5019\u8bf7\u6ce8\u610f\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b\u548c\u652f\u6301\u7684\u67b6\u6784\u3002\u7531\u4e8e\u4f5c\u8005\u6ca1\u6709\u9884\u7f16\u8bd1\u5bf9 Mac m1 \u7684 ARM64 \u67b6\u6784\u7684\u4f9d\u8d56\u5e93\uff0c\u6240\u4ee5\u6211\u9009\u62e9\u81ea\u884c\u7f16\u8bd1\uff08\u9700\u8981\u5b89\u88c5 cmake\uff0c\u5e76\u5728 shell \u4e2d\u79fb\u52a8\u5230 rwkv.cpp \u8def\u5f84\u4e0b\uff09\uff1a

cmake -DBUILD_SHARED_LIBS=ON .\ncmake --build . --config Release\n
"},{"location":"large_language_model/rwkv.cpp/#3","title":"3. \u8f6c\u6362\u6a21\u578b","text":"

\u9700\u8981\u88c5 PyTorch

\u6211\u76f4\u63a5\u628a\u4e0b\u8f7d\u597d\u7684\u6a21\u578b\u653e\u5728\u4e86 rwkv.cpp \u7684\u8def\u5f84\u4e0b\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16\n

\u5176\u5b9e\u5c31\u662f\u8ba9 python \u8fd0\u884c rwkv/convert_pytorch_to_ggml.py \u8fd9\u4e2a\u8f6c\u6362\u6a21\u578b\u7684\u4ee3\u7801\uff0c ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth \u662f\u5f85\u8f6c\u6362\u7684\u6a21\u578b\u7684\u8def\u5f84\uff0c ./rwkv.cpp-7B.bin \u662f\u8f6c\u6362\u540e\u7684\u8def\u5f84\uff0cfloat16 \u662f\u8981\u8f6c\u6362\u6210\u4ec0\u4e48\u7c7b\u578b\u7684\u53c2\u6570\u3002

"},{"location":"large_language_model/rwkv.cpp/#4","title":"4. \u91cf\u5316\u6a21\u578b","text":"

\u5176\u5b9e\u4e0a\u9762\u8f6c\u6362\u597d\u7684 ./rwkv.cpp-7B.bin \u5df2\u7ecf\u53ef\u4ee5\u7528\u4e86\uff0c\u4f46\u662f\u5b83\u8981\u5360\u7528 16GB \u5185\u5b58\u3002\u4e3a\u4e86\u51cf\u5c11\u5185\u5b58\u5360\u7528\uff0c\u53ef\u4ee5\u5c06 ./rwkv.cpp-7B.bin \u91cf\u5316\u4e3a int4\uff0c\u53ef\u4ee5\u7701\u4e00\u534a\u5185\u5b58\uff0c\u4e5f\u5c31\u662f\u53ea\u5360 6GB \u5185\u5b58\u3002\u53ea\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4\n

\u7136\u540e\u4f60\u5c31\u4f1a\u5f97\u5230\u4e00\u4e2a\u5927\u5c0f\u53ea\u6709 6GB \u7684\u6a21\u578b\u4e86\u3002

"},{"location":"large_language_model/rwkv.cpp/#_3","title":"\u8fd0\u884c\u6a21\u578b","text":"

\u540c\u6837\uff0c\u4e00\u884c\u547d\u4ee4\u641e\u5b9a\uff1a

python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin\n

\u8ba9\u6211\u4eec\u770b\u770b\u6548\u679c\uff0c\u9996\u5148\u662f\u5185\u5b58\u5360\u7528\uff0c\u4e0d\u5230 6GB

\u7136\u540e\u662f\u95ee\u7b54\u548c\u6267\u884c\u547d\u4ee4\uff1a

  1. \u592a\u9633\u6709\u51e0\u53ea\u773c\u775b\uff1f
  2. \u77e5\u4e4e\u662f\u4ec0\u4e48\u7f51\u7ad9\uff1f
  3. \u5199\u4e00\u7bc7\u4ecb\u7ecd\u6570\u636e\u5206\u6790\u7684\u6587\u7ae0\u3002

\u6548\u679c\u8fd8\u4e0d\u9519\uff0c\u4e0d\u8fc7\u6700\u540e\u83ab\u540d\u5176\u5999\u53c8\u591a\u8bf4\u4e86\u4e00\u6bb5\u8bdd\uff0c\u53ef\u80fd\u662f\u91cf\u5316\u5e26\u6765\u7684\u7cbe\u5ea6\u635f\u5931\uff1f\u975e\u91cf\u5316\u7248\u672c\u7684\u6548\u679c\u5982\u4e0b\uff1a

\u5e0c\u671b\u5f00\u53d1\u8005\u4e4b\u540e\u80fd\u5bf9\u91cf\u5316\u7248\u672c\u8fdb\u884c\u6d4b\u8bc4\uff0c\u8ba9 rwkv \u53d8\u5f97\u66f4\u597d\u7528\u3002

\u4ee5\u4e0a\u5c31\u662f\u6211\u5728 Mac \u4e0a\u7528 6GB \u5185\u5b58\u8fd0\u884c 7B \u7684\u4e2d\u6587\u8bed\u8a00\u6a21\u578b RWKV \u7684\u8fc7\u7a0b\u4e86\uff0c\u5e0c\u671b\u5bf9\u8bfb\u8005\u670b\u53cb\u4eec\u6709\u6240\u5e2e\u52a9\u3002

\u53c2\u8003

  1. https://github.com/antimatter15/alpaca.cpp\u00a0\u21a9

  2. https://github.com/THUDM/ChatGLM-6B\u00a0\u21a9

  3. https://github.com/LianjiaTech/BELLE\u00a0\u21a9

  4. \u53d1\u5e03\u51e0\u4e2aRWKV\u7684Chat\u6a21\u578b\uff08\u5305\u62ec\u82f1\u6587\u548c\u4e2d\u6587\uff097B/14B\u6b22\u8fce\u5927\u5bb6\u73a9 - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/618011122\u00a0\u21a9

  5. RWKV-v2-RNN \u539f\u7406\uff1a\u8d85\u8d8a Transformer\uff0c\u5b9e\u73b0 O(T) \u7684\u8bed\u8a00\u5efa\u6a21 - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/514840332\u00a0\u21a9

  6. RWKV\uff1a\u7528RNN\u8fbe\u5230Transformer\u6027\u80fd\uff0c\u4e14\u652f\u6301\u5e76\u884c\u6a21\u5f0f\u548c\u957f\u7a0b\u8bb0\u5fc6\uff0c\u65e2\u5feb\u53c8\u7701\u663e\u5b58\uff0c\u5df2\u572814B\u53c2\u6570\u89c4\u6a21\u68c0\u9a8c - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/599150009\u00a0\u21a9

  7. BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL\u00a0\u21a9

  8. RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth\u00a0\u21a9

  9. https://github.com/BlinkDL/ChatRWKV\u00a0\u21a9

"},{"location":"one_click_deployment/Source-changer/","title":"Source-changer\u6362\u6e90\u5de5\u5177","text":"

\u672c\u6587\u5411\u5927\u5bb6\u4ecb\u7ecd\u4e00\u6b3e\u7528\u4e8e\u6362\u6e90\u4e2a\u5de5\u5177\u5e2e\u52a9\u5927\u5bb6\u66f4\u5feb\u7684\u66f4\u6362\u6240\u4f7f\u7528\u8f6f\u4ef6\u7684\u6e90\u63d0\u9ad8\u5f00\u53d1\u6548\u7387

"},{"location":"one_click_deployment/Source-changer/#_1","title":"\u5b89\u88c5","text":"

git clone https://github.com/57307407/Source-changer.git

"},{"location":"one_click_deployment/Source-changer/#_2","title":"\u4ecb\u7ecd","text":"

\u76ee\u524d\u652f\u6301 maven \u3001 npm \u3001 python\uff08pip\uff09\u6362\u6e90

\u7531\u4e8e\u672c\u5de5\u5177\u4f7f\u7528 python \u8bed\u8a00\u8fdb\u884c\u5f00\u53d1\uff0c\u4f7f\u7528\u524d\u8bf7\u5148\u5b89\u88c5python\u73af\u5883

\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://www.python.org/

\u8f93\u5165\u547d\u4ee4

python -V

or

python3 -V

\u51fa\u73b0python\u7248\u672c\u53f7\u5373\u4e3a\u5b89\u88c5\u5b8c\u6bd5

"},{"location":"one_click_deployment/Source-changer/#_3","title":"\u4f7f\u7528","text":"

python main.py / python3 main.py

\u66f4\u6362maven\u6e90\u65f6\u9700\u8981\u5728\u547d\u4ee4\u524d\u52a0sudo

\u5373\uff1a sudo python3 main.py

\u9009\u62e9\u9700\u6362\u6e90\u7684\u8f6f\u4ef6

\u9009\u62e9\u66f4\u6362\u7684\u955c\u50cf

"},{"location":"one_click_deployment/Windows_Setup/","title":"windows\u73af\u5883\u90e8\u7f72","text":"

\u672c\u6587\u5411\u5927\u5bb6\u4ecb\u7ecd\u81ea\u5df1\u7684windows\u73af\u5883\u5982\u4f55\u90e8\u7f72\u8be5\u9879\u76ee

\u6ce8\u610f\uff1a\u8fd9\u91cc\u9700\u8981\u7528\u5230python\u73af\u5883,\u672c\u4eba\u662fpython3.10

"},{"location":"one_click_deployment/Windows_Setup/#tooldiy","title":"\u4e0b\u8f7d ToolDiy","text":"
git clone https://github.com/cargo-youth/ToolDiy.git\n
"},{"location":"one_click_deployment/Windows_Setup/#mkdocs","title":"\u5b89\u88c5 mkdocs","text":"
\u4e0b\u8f7d\u94fe\u63a5\uff1apip install mkdocs\n
"},{"location":"one_click_deployment/Windows_Setup/#_1","title":"\u5b89\u88c5\u7f51\u7ad9\u4e3b\u9898","text":"

\u672c\u7ad9\u4e3b\u9898\u662fmaterial\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u5373\u53ef\u3002

pip install mkdocs-material\n

"},{"location":"one_click_deployment/Windows_Setup/#_2","title":"\u5b89\u88c5\u5176\u5b83\u4f9d\u8d56","text":"
pip install pymdown-extensions\npip install mkdocs-awesome-pages-plugin\n
"},{"location":"one_click_deployment/Windows_Setup/#i18n","title":"\u5b89\u88c5i18n","text":"

\u8fd9\u91cc\u662f\u4e2a\u5751\uff0c\u6211\u5b89\u88c5\u7684\u65f6\u5019\uff0c\u76f4\u63a5\u5b89\u88c5pip install i18n\u4e0d\u884c\uff0c\u4f60\u9700\u8981\u4e13\u95e8\u5b89\u88c5mkdocs\u4e0b\u7684i18n,\u7136\u540e\u95ee\u7684chatGPT,\u4ed6\u7ed9\u6211\u63d0\u4f9b\u7684\u89e3\u51b3\u65b9\u6848\u662fpip install mkdocs-i18n-plugin;\u53ef\u60dc\u4e0d\u5bf9\uff0c\u6700\u540e\u5728\u8c37\u6b4c\u4e0a\u627e\u5230\u4e0b\u9762\u547d\u4ee4\uff0c\u5c31\u5bf9\u4e86\u3002

pip install mkdocs-static-i18n\n

"},{"location":"one_click_deployment/Windows_Setup/#_3","title":"\u8fd0\u884c\u9879\u76ee","text":"
mkdocs serve\n
"},{"location":"one_click_deployment/Windows_Setup/#_4","title":"\u6784\u5efa\u9759\u6001\u7f51\u7ad9\u6587\u4ef6","text":"
mkdocs build\n
"},{"location":"one_click_deployment/docker_os_c/","title":"Docker \u642d\u5efa C \u8bed\u8a00\u64cd\u4f5c\u7cfb\u7edf\u5f00\u53d1\u73af\u5883","text":""},{"location":"one_click_deployment/docker_os_c/#_1","title":"\u9884\u8bbe\u5f00\u53d1\u73af\u5883\u7b80\u8ff0","text":"
  • ubuntu 22.04.2 LTS
  • gcc 11.3.0
  • GNU Make 4.3
  • cmake 3.22.1
  • QEMU emulator 7.0.0
  • code-server 4.10.1
  • code-server extensions

    • C/C++ 1.14.4
    • Chinese (Simplified) Language Pack 1.75.0
"},{"location":"one_click_deployment/docker_os_c/#_2","title":"\u5feb\u901f\u5f00\u59cb","text":"

\u5b89\u88c5 Docker Desktop\uff0c\u53c2\u89c1 Install Docker Desktop on Windows\u3002

\u8fd0\u884c Docker Desktop\uff0c\u518d\u6253\u5f00 CMD \u6216\u8005 PowerShell\uff0c\u6267\u884c

docker pull jklincn/c-os\n

\u955c\u50cf\u6210\u529f\u62c9\u53d6\u540e\uff0c\u6267\u884c

docker run -d --privileged -p 58888:8080 jklincn/c-os\n

\u8fd9\u65f6\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:58888 \u5373\u53ef\u542f\u52a8\u5f00\u53d1\u73af\u5883\u3002

\u540e\u7eed\u53ef\u4ee5\u5728 Docker Desktop \u754c\u9762\u7684 Containers \u4e2d\u63a7\u5236\u5df2\u521b\u5efa\u5bb9\u5668\u7684\u6682\u505c\u4e0e\u5f00\u542f\u3002

  1. \u4e3b\u673a\u6620\u5c04\u7aef\u53e3 58888 \u53ef\u968f\u610f\u66f4\u6362\u3002\u670d\u52a1\u7aef\u53e3 8080 \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 Dockerfile \u66f4\u6362\u3002

  2. \u5982\u679c\u955c\u50cf\u62c9\u53d6\u7f13\u6162\uff0c\u53ef\u4ee5\u70b9\u51fb Docker Desktop \u754c\u9762\u53f3\u4e0a\u89d2\u9f7f\u8f6e\u6253\u5f00\u8bbe\u7f6e\uff0c\u5728 Docker Engine \u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u56fd\u5185\u6e90\uff0c\u518d\u70b9\u51fb Apply & restart \u91cd\u542f Docker\uff0c\u518d\u6b21\u5c1d\u8bd5\u62c9\u53d6\u3002

    \"registry-mirrors\": [\n    \"http://hub-mirror.c.163.com\",\n    \"https://docker.mirrors.ustc.edu.cn\"\n]\n
"},{"location":"one_click_deployment/docker_os_c/#dockerfile","title":"Dockerfile","text":"

\u6b64\u5904\u7ed9\u51fa\u955c\u50cf\u7684\u6784\u5efa\u811a\u672c\uff0c\u4f9b\u6709\u9700\u6c42\u7684\u540c\u5b66\u53c2\u8003\u4e0e\u4fee\u6539

FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\n# \u5b89\u88c5\u5fc5\u8981\u4f9d\u8d56\u4e0e\u5f00\u53d1\u5de5\u5177\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\n# \u5b89\u88c5 QEMU\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\n# \u5b89\u88c5 code-server \u548c\u6269\u5c55\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \\\ncode --install-extension cpptools-linux.vsix && \\\nrm cpptools-linux.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"one_click_deployment/docker_os_rust/","title":"Docker \u642d\u5efa Rust \u8bed\u8a00\u64cd\u4f5c\u7cfb\u7edf\u5f00\u53d1\u73af\u5883","text":""},{"location":"one_click_deployment/docker_os_rust/#_1","title":"\u9884\u8bbe\u5f00\u53d1\u73af\u5883\u7b80\u8ff0","text":"
  • ubuntu 22.04.2 LTS
  • GNU Make 4.3
  • QEMU emulator 7.0.0
  • rustc nightly-latest
  • rustup latest
  • cargo nightly-latest
  • code-server 4.10.1
  • code-server extensions

    • rust-analyzer 0.3.1435
    • Chinese (Simplified) Language Pack 1.75.0
"},{"location":"one_click_deployment/docker_os_rust/#_2","title":"\u5feb\u901f\u5f00\u59cb","text":"

\u5b89\u88c5 Docker Desktop\uff0c\u53c2\u89c1 Install Docker Desktop on Windows\u3002

\u8fd0\u884c Docker Desktop\uff0c\u518d\u6253\u5f00 CMD \u6216\u8005 PowerShell\uff0c\u6267\u884c

docker pull jklincn/rust-os\n

\u955c\u50cf\u6210\u529f\u62c9\u53d6\u540e\uff0c\u6267\u884c

docker run -d --privileged -p 58888:8080 jklincn/rust-os\n

\u8fd9\u65f6\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:58888 \u5373\u53ef\u542f\u52a8\u5f00\u53d1\u73af\u5883\u3002

\u540e\u7eed\u53ef\u4ee5\u5728 Docker Desktop \u754c\u9762\u7684 Containers \u4e2d\u63a7\u5236\u5df2\u521b\u5efa\u5bb9\u5668\u7684\u6682\u505c\u4e0e\u5f00\u542f\u3002

  1. \u4e3b\u673a\u6620\u5c04\u7aef\u53e3 58888 \u53ef\u968f\u610f\u66f4\u6362\u3002\u670d\u52a1\u7aef\u53e3 8080 \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 Dockerfile \u66f4\u6362

  2. \u5982\u679c\u955c\u50cf\u62c9\u53d6\u7f13\u6162\uff0c\u53ef\u4ee5\u70b9\u51fb Docker Desktop \u754c\u9762\u53f3\u4e0a\u89d2\u9f7f\u8f6e\u6253\u5f00\u8bbe\u7f6e\uff0c\u5728 Docker Engine \u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u56fd\u5185\u6e90\uff0c\u518d\u70b9\u51fb Apply & restart \u91cd\u542f Docker\uff0c\u518d\u6b21\u5c1d\u8bd5\u62c9\u53d6\u3002

    \"registry-mirrors\": [\n    \"http://hub-mirror.c.163.com\",\n    \"https://docker.mirrors.ustc.edu.cn\"\n]\n
"},{"location":"one_click_deployment/docker_os_rust/#dockerfile","title":"Dockerfile","text":"

\u6b64\u5904\u7ed9\u51fa\u955c\u50cf\u7684\u6784\u5efa\u811a\u672c\uff0c\u4f9b\u6709\u9700\u6c42\u7684\u540c\u5b66\u53c2\u8003\u4e0e\u4fee\u6539

FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\n# \u5b89\u88c5\u5fc5\u8981\u4f9d\u8d56\u4e0e\u5f00\u53d1\u5de5\u5177\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\n# \u5b89\u88c5 QEMU\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\n# \u5b89\u88c5 code-server \u548c\u6269\u5c55\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\ncode --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nrm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nWORKDIR /root\n# \u5b89\u88c5 rust\nARG RUST_VERSION=nightly\nENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static\nENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup\nRUN mkdir .cargo && \\\necho '[source.crates-io]' >> .cargo/config && \\\necho 'registry = \"https://github.com/rust-lang/crates.io-index\"' >> .cargo/config && \\\necho 'replace-with = \"ustc\"' >> .cargo/config && \\\necho '[source.ustc]' >> .cargo/config && \\\necho 'registry = \"git://mirrors.ustc.edu.cn/crates.io-index\"' >> .cargo/config && \\\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \\\nchmod +x rustup-init && \\\n./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \\\nrm rustup-init && \\\nsource $HOME/.cargo/env && \\\ncargo install cargo-binutils && \\\nrustup component add llvm-tools-preview && \\\nrustup component add rust-src\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"one_click_deployment/os/","title":"os\u5f00\u53d1\u73af\u5883\u548c\u5de5\u5177\u4ecb\u7ecd","text":"
# (ubuntu) \u5b89\u88c5QEMU7.0\u4f9d\u8d56\u5305\nsudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev pkg-config  libglib2.0-dev libpixman-1-dev libsdl2-dev \\\ngit tmux python3 python3-pip ninja-build\n# \u5728\u5f00\u53d1\u76ee\u5f55\u6267\u884c\u5b89\u88c5\nmkdir dev\npushd dev\nwget https://download.qemu.org/qemu-7.0.0.tar.xz\ntar -xf qemu-7.0.0.tar.xz\ncd qemu-7.0.0\n./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug\nmake -j$(nproc)\nmake install\npopd\n# \u914d\u7f6e\u73af\u5883\u53d8\u91cf\nvi ~/.bashrc\nexport PATH=$PATH:/path/to/qemu-7.0.0/build # \u914d\u7f6e\u540e\u66f4\u65b0\u7cfb\u7edf\u8def\u5f84\nsource ~/.bashrc # \u68c0\u6d4bqemu\u7248\u672c(\u4ee5riscv64 \u4e3a\u4f8b\u4e0a\u8bc9\u914d\u7f6e\u5df2\u5c06x86_64 aarch64 riscv64\u5b89\u88c5\u597d\u5747\u53ef\u4ee5\u68c0\u6d4b\u7248\u672c)\nqemu-system-riscv64 --version\n# \u914d\u7f6erust\u73af\u5883\ncurl https://sh.rustup.rs -sSf | sh\n# \u914d\u7f6e\u73af\u5883\u53d8\u91cf\nsource $HOME/.cargo/env\n# \u68c0\u6d4b\u7248\u672c\nrustc --version\n# rust\u76f8\u5173\u8f6f\u4ef6\u5305\u5b89\u88c5\nrustup target add riscv64gc-unknown-none-elf\ncargo install cargo-binutils\nrustup component add llvm-tools-preview\nrustup component add rust-src\n
"},{"location":"one_click_deployment/os/#_1","title":"\u5e38\u89c1\u95ee\u9898\u53ca\u89e3\u51b3\u529e\u6cd5","text":"
# centos \u4f9d\u8d56\u5b89\u88c5\nsudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \\\ntexinfo patchutils gcc gcc-c++ zlib-devel expat-devel git\n# gcc\u7248\u672c\u8fc7\u4f4e\u5bfc\u81f4\u7684qemu\u7f16\u8bd1\u5931\u8d25(\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5b98\u7f51\u66f4\u9ad8\u7248\u672c\u5b89\u88c5)\nyum install centos-release-scl\nscl enable devtoolset-8 bash\n# \u67e5\u770bgcc\u7248\u672c\ngcc -v\n
"},{"location":"one_click_deployment/os/#rust","title":"\u914d\u7f6erust\u4e0b\u8f7d\u955c\u50cf","text":"
vi ~/.cargo/config\n[source.crates-io]\nregistry = \"https://github.com/rust-lang/crates.io-index\"\nreplace-with = 'ustc'\n[source.ustc]\nregistry = \"git://mirrors.ustc.edu.cn/crates.io-index\"\n
"},{"location":"package_manager/APT%EF%BC%88DEB%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"APT\uff08DEB\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"
apt list --installed\napt list --all-versions <package-name>\uff1a\u5217\u51fa\u6307\u5b9a\u8f6f\u4ef6\u5305\u7684\u6240\u6709\u7248\u672c\u3002\napt list --upgradable | grep <search-term>\uff1a\u5217\u51fa\u5305\u542b\u641c\u7d22\u8bcd\u7684\u53ef\u66f4\u65b0\u8f6f\u4ef6\u5305\u3002\napt list --verbose\uff1a\u663e\u793a\u66f4\u8be6\u7ec6\u7684\u8f93\u51fa\u4fe1\u606f\u3002\n\napt edit-sources\n\nsudo apt build-dep package #\u5b89\u88c5\u76f8\u5173\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u8fd9\u771f\u662f\u4e2a\u795e\u6280\u80fd\uff0c\u6709\u4e86\u5b83\uff0c\u7f16\u8bd1\u5b89\u88c5\u90fd\u53d8\u5f97\u7d22\u7136\u65e0\u5473\u4e86\nsudo apt --purge autoremove\napt-get clean && sudo apt-get autoclean  #\u6e05\u7406\u65e0\u7528\u7684\u5305\n\naptitude\napt-add-repository [options] repository   #\u4fee\u6539\u8f6f\u4ef6\u6e90\u547d\u4ee4 (software-properties-common)\n
apt search package #\u641c\u7d22\u5305 \napt show package #\u83b7\u53d6\u5305\u7684\u76f8\u5173\u4fe1\u606f\uff0c\u5982\u8bf4\u660e\u3001\u5927\u5c0f\u3001\u7248\u672c\u7b49  \napt depends package #\u4e86\u89e3\u4f7f\u7528\u4f9d\u8d56  \napt rdepends package #\u67e5\u770b\u8be5\u5305\u88ab\u54ea\u4e9b\u5305\u4f9d\u8d56  \napt-cache pkgnames  #\u6267\u884cpkgnames\u5b50\u547d\u4ee4\u5217\u51fa\u5f53\u524d\u6240\u6709\u53ef\u7528\u7684\u8f6f\u4ef6\u5305 \napt policy package #\u4f7f\u7528policy\u547d\u4ee4\u663e\u793a\u8f6f\u4ef6\u5305\u7684\u5b89\u88c5\u72b6\u6001\u548c\u7248\u672c\u4fe1\u606f\u3002\n\nsudo apt install package #\u5b89\u88c5\u5305  \nsudo apt install package=version #\u5b89\u88c5\u6307\u5b9a\u7248\u672c\u7684\u5305  \nsudo apt install package --reinstall #\u91cd\u65b0\u5b89\u88c5\u5305  \nsudo apt -f install #\u4fee\u590d\u5b89\u88c5, \"-f = --fix-missing\"  \nsudo apt remove package #\u5220\u9664\u5305\nsudo apt purge package  #\u5220\u9664\u5305\uff0c\u5305\u62ec\u5220\u9664\u914d\u7f6e\u6587\u4ef6\u7b49\nsudo apt autoremove #\u81ea\u52a8\u5378\u8f7d\u6240\u6709\u672a\u4f7f\u7528\u7684\u8f6f\u4ef6\u5305\n\nsudo apt source package #\u4e0b\u8f7d\u8be5\u5305\u7684\u6e90\u4ee3\u7801   \nsudo apt update #\u66f4\u65b0apt\u8f6f\u4ef6\u6e90\u4fe1\u606f  \nsudo apt upgrade #\u66f4\u65b0\u5df2\u5b89\u88c5\u7684\u5305  \nsudo apt dist-upgrade #\u5347\u7ea7\u7cfb\u7edf  \nsudo apt dselect-upgrade #\u4f7f\u7528dselect\u5347\u7ea7  \nsudo apt build-dep package #\u5b89\u88c5\u76f8\u5173\u7684\u7f16\u8bd1\u73af\u5883  \nsudo apt clean && sudo apt autoclean #\u6e05\u7406\u65e0\u7528\u7684\u5305\nsudo apt clean  #\u6e05\u7406\u5df2\u4e0b\u8f7d\u7684\u8f6f\u4ef6\u5305\uff0c\u5b9e\u9645\u4e0a\u662f\u6e05\u695a/var/cache/apt/archives\u76ee\u5f55\u4e2d\u7684\u8f6f\u4ef6\u5305\nsudo apt autoclean  #\u5220\u9664\u5df2\u7ecf\u5378\u8f7d\u7684\u8f6f\u4ef6\u5305\u5907\u4efd  \nsudo apt-get check #\u68c0\u67e5\u662f\u5426\u6709\u635f\u574f\u7684\u4f9d\u8d56\n
sudo dpkg -i <package.deb>    #\u5b89\u88c5\u5305\nsudo dpkg -r <package.deb>\u3000  #\u5220\u9664\u5305\nsudo dpkg -p <package.deb>\u3000  #\u5f7b\u5e95\u5220\u9664\u5305(\u5305\u62ec\u914d\u7f6e\u6587\u4ef6)\ndpkg -l                       #\u5217\u51fa\u5f53\u524d\u5df2\u5b89\u88c5\u7684\u5305\n
"},{"location":"package_manager/AppImage%EF%BC%88Linux%EF%BC%89/","title":"AppImage\uff08Linux\uff09","text":"
  1. AppImage Pool \uff1a\u4e00\u4e2a\u5e2e\u52a9\u4f60\u5bfb\u627e\u548c\u7ba1\u7406 AppImage \u7684\u5e94\u7528\u5546\u5e97 | Linux \u4e2d\u56fd
  2. appimage-installer \uff1a\u8fd9\u4e2a\u5de5\u5177\u80fd\u5728\u5341\u51e0\u79d2\u5185\u5feb\u901f\u7684\u5c06\u4e00\u4e2a AppImage \u6587\u4ef6\u90e8\u7f72\u5230\u5f00\u59cb\u83dc\u5355\uff0c\u5e76\u4e14\u8bbe\u7f6e\u597d\u56fe\u6807\u548c\u540d\u79f0\u3002
  3. AppImageLauncher \uff1a\u53ef\u4ee5\u81ea\u52a8\u5c06 AppImage \u7a0b\u5e8f\u5feb\u6377\u65b9\u5f0f\u6dfb\u52a0\u5230\u684c\u9762\u73af\u5883\u7684\u7a0b\u5e8f\u542f\u52a8\u5668/\u83dc\u5355(\u5305\u62ec\u7a0b\u5e8f\u56fe\u6807\u548c\u5408\u9002\u7684\u8bf4\u660e)\u4e2d\u3002
  4. Appimage-installer \u5de5\u5177\uff0c AUR \u5305\u7684\u95ee\u9898\uff0c https://gitee.com/deepin-opensource/appimage-installer/issues/I421HL
  5. AppImage \u5b89\u88c5\u5668\uff0c\u6df1\u5ea6\u79d1\u6280\u793e\u533a Maicss \u5206\u4eab\uff1a\u6df1\u5ea6\u79d1\u6280\u793e\u533a Maicss \u5206\u4eab\uff1a ttps://bbs.deepin.org/zh/post/220754
  6. AppImage \u5b98\u7f51\uff1a AppImage \u5b98\u7f51\uff1a https://appimage.org/
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/","title":"Chocolatey\uff08WIN\uff09","text":"

\u672c\u6587\u4ecb\u7ecd\u4e86 Chocolatey \u7684\u5b89\u88c5\u4e0e\u4f7f\u7528\u8fc7\u7a0b\u3002\u8fd9\u7bc7\u6587\u7ae0\u4e0d\u662f\u4e3a\u666e\u901a\u7528\u6237\u7f16\u5199\u7684\uff0c\u800c\u662f\u7ed9\u9700\u8981\u7edf\u4e00\u5f00\u53d1\u73af\u5883\u7684\u5f00\u53d1\u4eba\u5458\u5199\u7684

\u4e3a\u4ec0\u4e48\u8981\u7528 Chocolatey

\u5982\u679c\u4f7f\u7528\u8fc7 Linux \u4e00\u5b9a\u719f\u6089\u4e00\u884c\u4ee3\u7801\u8fdb\u884c\u8f6f\u4ef6\u7684\u641c\u7d22\uff0c\u5b89\u88c5\uff0c\u66f4\u65b0\uff0c\u5378\u8f7d\u7b49\u6240\u6709\u64cd\u4f5c\u3002\u800c Windows \u4e2d\u7684\u4e5f\u6709\u5305\u7ba1\u7406\u5668 Chocolatey \u3002\u867d\u7136\u6ca1\u6709 Linux \u91cc\u7684\u5305\u7ba1\u7406\u5668\u90a3\u4e48\u5f3a\u5927\uff0c\u4f46\u8ba9 Windows \u5b89\u88c5\u8f6f\u4ef6\u65b9\u4fbf\u4e86\u5f88\u591a\u3002

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#chocolatey","title":"Chocolatey \u7684\u5b89\u88c5","text":"
  • \u65b9\u6cd5\u4e00\uff1a\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u6253\u5f00 cmd.exe \uff08\u5f88\u91cd\u8981\uff09\uff0c\u6267\u884c\u4ee5\u4e0b\u4ee3\u7801

     @\"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command \"iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\" && SET \"PATH=%PATH%;%ALLUSERSPROFILE%\\chocolatey\\bin\"\n

  • \u65b9\u6cd5\u4e8c\uff1a\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u6253\u5f00 powershell.exe \uff0c\u6267\u884c\u4ee5\u4e0b\u4ee3\u7801

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\n
  • \u65b9\u6cd5\u4e09\uff1a\u76f4\u63a5\u6253\u5f00 https://chocolatey.org/install.ps1 \uff0c\u590d\u5236\u5185\u5bb9\u5230\u672c\u5730\u65b0\u5efa install.psl \u6587\u4ef6\uff0c\u6267\u884c\u5b89\u88c5\u3002

\u5728\u6709\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u7535\u8111\u5b89\u88c5\u9632\u706b\u5899\u7684\u539f\u56e0\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u524d\u4e24\u4e2a\u65b9\u6cd5\u51fa\u73b0\u95ee\u9898\uff0c\u4f46\u662f\u65b9\u6cd5\u4e09\u4e0d\u5b58\u5728\u6b64\u95ee\u9898\uff0c\u6700\u597d\u7528 powershell.exe \u6765\u6267\u884c install.psl \u811a\u672c\uff0c\u53ef\u4ee5\u770b\u5230\u5b89\u88c5\u7684\u5b8c\u6574\u8fc7\u7a0b\u3002

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#chocolatey_1","title":"Chocolatey \u7684\u4f7f\u7528","text":"

Chocolatey \u8fd0\u884c\u9700\u8981\u7684\u73af\u5883\uff1a - Windows 7+ / Windows Server 2003+ - PowerShell v2+ - .NET Framework 4+ \uff08\u4e0d\u7528\u5b89\u88c5\uff0c\u5b89\u88c5\u811a\u672c\u65f6\u4f1a\u81ea\u52a8\u5b89\u88c5\uff09

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_1","title":"\u5b89\u88c5\u8f6f\u4ef6","text":"
choco install -y git \nchoco install -y python \nchoco install -y chromium\ncinst -y nodejs.install\n...\n

choco \u548c cinst \u90fd\u662f\u5b89\u88c5\u547d\u4ee4\uff0c -y \u907f\u514d\u5bf9\u534f\u8bae\u7684\u4e8c\u6b21\u786e\u8ba4\uff0c\u53ef\u4ee5\u5728\u5b98\u7f51 https://chocolatey.org/packages \u67e5\u627e\u786e\u8ba4\u81ea\u5df1\u8981\u5b89\u88c5\u7684\u5305\u3002

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_2","title":"\u67e5\u627e\u8f6f\u4ef6","text":"
  1. choco search cntlm \u641c\u7d22\u8f6f\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u5305\u540d\u662f\u4ec0\u4e48\u3002
  2. choco info cntlm \u67e5\u770b\u8f6f\u4ef6\u8be6\u7ec6\u4fe1\u606f\u3002
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_3","title":"\u5347\u7ea7\u8f6f\u4ef6","text":"

choco upgrade git

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_4","title":"\u5378\u8f7d\u8f6f\u4ef6","text":"

choco uninstall git

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_5","title":"\u914d\u7f6e\u7edf\u4e00\u73af\u5883","text":"
choco install dev-package.config\ndev-package.config:\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n<package id=\"jdk8\" />\n<package id=\"googlechrome\" version=\"71.0.3578.98\" />\n<package id=\"vscode\" />\n<package id=\"7zip\" />\n</packages>\n

\u6587\u4ef6\u540d\u79f0\u968f\u610f\uff0c\u4f46\u662f\u6269\u5c55\u540d\u5fc5\u987b\u662f .config \u3002\u901a\u8fc7 .config \u7684\u65b9\u5f0f\uff0c\u5c31\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a\u56e2\u961f\u7edf\u4e00\u7684\u5f00\u53d1\u73af\u5883\uff0c\u8f6f\u4ef6\u548c\u7248\u672c\u90fd\u53ef\u4ee5\u7edf\u4e00\u3002\u8fd9\u6837\u53ef\u4ee5\u4e3a\u5f00\u53d1\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u907f\u514d\u7531\u4e8e\u5f00\u53d1\u73af\u5883\u4e0d\u4e00\u6837\u5f15\u8d77\u7684\u5404\u79cd\u4e0d\u540c\u9519\u8bef\u3002 \u901a\u8fc7\u4f20\u7edf\u65b9\u5f0f\u5b89\u88c5\u8f6f\u4ef6\uff0c\u5982\u679c\u914d\u7f6e\u4e86\u73af\u5883\u53d8\u91cf\uff0c\u4f8b\u5982 JAVA_HOME \uff0c PATH \u7b49\u7b49\uff0c\u90fd\u9700\u8981\u91cd\u542f\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u751a\u81f3\u8981\u7b49\u4e00\u4f1a\u624d\u80fd\u751f\u6548\u3002 Chocolatey \u63d0\u4f9b\u4e86\u4e00\u4e2a refreshenv \u547d\u4ee4\uff0c\u53ef\u4ee5\u5feb\u901f\u751f\u6548\u73af\u5883\u53d8\u91cf\u3002

"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_6","title":"\u66f4\u6539\u672c\u5730\u4ed3\u5e93","text":"
  • \u65b9\u6cd5\u4e00\uff1a cmd.exe \u7ba1\u7406\u5458\u6a21\u5f0f\u4e0b\u6267\u884c\u4ee5\u4e0b\u6307\u4ee4 setx ChocolateyInstall D:\\Chocolatey /M
  • \u65b9\u6cd5\u4e8c\uff1a powershell.exe \u7ba1\u7406\u5458\u6a21\u5f0f\u4e0b\u6267\u884c\u4ee5\u4e0b\u6307\u4ee4 & setx.exe ChocolateyInstall D:\\Chocolatey /M \u8bbe\u5b9a\u6210\u529f\u63d0\u793a\uff1a \u6210\u529f: \u5df2\u7ecf\u5b58\u50a8\u6307\u5b9a\u7684\u503c
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#chocolatey_2","title":"\u5378\u8f7dChocolatey","text":"

\u5378\u8f7d Chocolatey \u53ea\u9700\u8981\u5220\u9664\u5b83\u5b89\u88c5\u7684\u6587\u4ef6\u5939\uff0c\u5e76\u5220\u9664\u5bf9\u5e94\u7684\u73af\u5883\u53d8\u91cf\u5373\u53ef\u3002\u5bf9\u4e8e\u4f7f\u7528 Chocolatey \u5b89\u88c5\u7684\u5176\u5b83\u8f6f\u4ef6\uff0c\u5982\u679c\u4e5f\u9700\u8981\u5378\u8f7d\u7684\u8bdd\uff0c\u9700\u8981\u5148\u624b\u52a8\u5378\u8f7d\u3002

  1. \u5220\u9664\u73af\u5883\u53d8\u91cf ChocolateyInstall \u5bf9\u5e94\u7684\u5b89\u88c5\u6587\u4ef6\u5939\uff0c\u9ed8\u8ba4\u662f C:\\ProgramData\\chocolatey
  2. \u5220\u9664\u73af\u5883\u53d8\u91cf ChocolateyInstall
  3. \u5220\u9664\u73af\u5883\u53d8\u91cf ChocolateyToolsLocation \uff0c\u90e8\u5206\u5de5\u5177\u8f6f\u4ef6\u5b89\u88c5\u7684\u4f4d\u7f6e\uff0c\u5220\u9664\u9700\u8c28\u614e
  4. \u5220\u9664\u73af\u5883\u53d8\u91cf ChocolateyLastPathUpdate
  5. \u66f4\u65b0\u73af\u5883\u53d8\u91cf PATH \uff0c\u53bb\u6389 Chocolatey \u76f8\u5173\u7684\u914d\u7f6e
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_7","title":"\u603b\u7ed3","text":"

Chocolatey \u66f4\u6ce8\u91cd\u7684\u662f\u6574\u4e2a\u56e2\u961f\u7684\u8f6f\u4ef6\u914d\u7f6e\u7edf\u4e00\uff0c\u7edf\u4e00\u7528\u67d0\u4e00\u4e2a\u8f6f\u4ef6\uff0c\u7edf\u4e00\u7528\u67d0\u4e00\u4e2a\u7248\u672c\uff0c\u7edf\u4e00\u5b89\u88c5\u914d\u7f6e(\u5305\u62ec\u5b89\u88c5\u8def\u5f84)\u3002\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u592a\u591a\u6b21\u56e0\u4e3a\u5b89\u88c5\u8def\u5f84\u5f15\u8d77\u95ee\u9898\uff0c\u4f8b\u5982\u8def\u5f84\u91cc\u6709\u7a7a\u683c\u6216\u4e2d\u6587\u7b49\u7b49\u3002\u6700\u597d\u5c31\u7528\u9ed8\u8ba4\u5b89\u88c5\u8def\u5f84\u3002

"},{"location":"package_manager/DNF%EF%BC%88RPM%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"DNF\uff08RPM\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"

\u7531\u4e8e Yum \u4e2d\u8bb8\u591a\u957f\u671f\u5b58\u5728\u7684\u95ee\u9898\u4ecd\u672a\u5f97\u5230\u89e3\u51b3\uff0c\u56e0\u6b64 Yum \u5305\u7ba1\u7406\u5668\u5df2\u88ab DNF \u5305\u7ba1\u7406\u5668\u53d6\u4ee3\u3002\u8fd9\u4e9b\u95ee\u9898\u5305\u62ec\u6027\u80fd\u5dee\u3001\u5185\u5b58\u5360\u7528\u8fc7\u591a\u3001\u4f9d\u8d56\u89e3\u6790\u901f\u5ea6\u53d8\u6162\u7b49\u3002

DNF \u662f\u4e00\u6b3e Linux \u8f6f\u4ef6\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u7528\u4e8e\u7ba1\u7406 RPM \u8f6f\u4ef6\u5305\u3002 DNF \u53ef\u4ee5\u67e5\u8be2\u8f6f\u4ef6\u5305\u4fe1\u606f\uff0c\u4ece\u6307\u5b9a\u8f6f\u4ef6\u5e93\u83b7\u53d6\u8f6f\u4ef6\u5305\uff0c\u81ea\u52a8\u5904\u7406\u4f9d\u8d56\u5173\u7cfb\u4ee5\u5b89\u88c5\u6216\u5378\u8f7d\u8f6f\u4ef6\u5305\uff0c\u4ee5\u53ca\u66f4\u65b0\u7cfb\u7edf\u5230\u6700\u65b0\u53ef\u7528\u7248\u672c\u3002

  • DNF \u4e0e YUM \u5b8c\u5168\u517c\u5bb9\uff0c\u63d0\u4f9b\u4e86 YUM \u517c\u5bb9\u7684\u547d\u4ee4\u884c\u4ee5\u53ca\u4e3a\u6269\u5c55\u548c\u63d2\u4ef6\u63d0\u4f9b\u7684API\u3002
  • \u4f7f\u7528 DNF \u9700\u8981\u7ba1\u7406\u5458\u6743\u9650\uff0c\u672c\u7ae0\u6240\u6709\u547d\u4ee4\u9700\u8981\u5728\u7ba1\u7406\u5458\u6743\u9650\u4e0b\u6267\u884c\u3002

\u4f7f\u7528 Dnf \u7ba1\u7406\u8f6f\u4ef6\u5305 (openeuler.org)

"},{"location":"package_manager/Homebrew%EF%BC%88Linux%26Mac%EF%BC%89/","title":"Homebrew\uff08Linux&Mac\uff09","text":"

Linuxbrew\uff08Mac OS \u7684 Homebrew \u5206\u652f\uff0c\u652f\u6301mac\u548clinux\uff0c\u7528\u6cd5\u5b8c\u5168\u76f8\u540c\uff09

\u8be6\u60c5\u9875\uff1a https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/

\u641c\u7d22\u53ef\u7528\u7684\u8f6f\u4ef6\u5305\uff1a https://sitemap.filecroco.com/a/1.html

\u5728 Linux \u4e0a\u5b89\u88c5\u548c\u4f7f\u7528 Homebrew \u5305\u7ba1\u7406\u5668 | Linux \u4e2d\u56fd - \u77e5\u4e4e (zhihu.com)

"},{"location":"package_manager/Nix%EF%BC%88%E5%A3%B0%E6%98%8E%E5%BC%8F%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"Nix\uff08\u58f0\u660e\u5f0f\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"

Nix\uff1a\u53ef\u91cd\u73b0\u7684\u6784\u5efa\u548c\u90e8\u7f72 (nixos.org)

"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/","title":"Scoop(Win)","text":"

scoop \u5fc5\u8981\u7ec4\u4ef6\uff1a 7zip git innounp lessmsi dark sudo aria2

main : https://github.com/ScoopInstaller/Scoop

"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop","title":"\u4e00\u3001\u5b89\u88c5 scoop","text":"
  • \u5c06 scoop \u5b89\u88c5\u5230\u81ea\u5b9a\u4e49\u76ee\u5f55
# \u8bbe\u7f6e\u81ea\u5b9a\u4e49\u5b89\u88c5\u8def\u5f84\uff1aD:\\Software\\Scoop\n$env:SCOOP='D:\\Software\\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')\n\n# \u5141\u8bb8\u6267\u884c\u672c\u5730\u811a\u672c\nset-executionpolicy remotesigned -scope currentuser\n\n# \u4ece github \u4e0b\u8f7d\u5e76\u5b89\u88c5 scoop\niex (new-object net.webclient).downloadstring('https://get.scoop.sh')\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_1","title":"\u4e8c\u3001\u914d\u7f6escoop","text":"
  • scoop \u6e90\u914d\u7f6e: scoop config SCOOP_REPO <URL>

\u8f6f\u4ef6\u4ed3\u5e93 bucket \u6e90\uff1a\u8f6f\u4ef6\u6e90\u4f7f\u7528 git \u7248\u672c\u7ba1\u7406\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528\u4fee\u6539\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u5740\u4fee\u6539\u6e90\u5730\u5740\u52a0\u5feb\u901f\u5ea6\u3002

cd $env:SCOOP\\buckets\\Main      \ngit remote set-url origin <URL>\n\ncd $env:SCOOP\\buckets\\Extras\ngit remote set-url origin <URL>\n
  • \u4fee\u6539 buckets git \u4ed3\u5e93\u94fe\u63a5\uff1a
 cd $env:SCOOP\\buckets\\Main      \u8fd9\u662f\u4e00\u4e2a git \u7ba1\u7406\u7684\u6587\u4ef6\u5939\n git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main\n
  • aria2 \u76f8\u5173\u914d\u7f6e
    aria2-enabled (\u9ed8\u8ba4\u503c: true)\naria2-retry-wait (\u9ed8\u8ba4\u503c: 2)\naria2-split (\u9ed8\u8ba4\u503c: 5)\naria2-max-connection-per-server (\u9ed8\u8ba4\u503c: 5)\naria2-min-split-size (\u9ed8\u8ba4\u503c: 5M)\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#bucket","title":"\u4e09\u3001\u5e38\u7528 bucket","text":"
#scoop bucket remove main\nscoop bucket add main 'https://github.com/ScoopInstaller/Main'\nscoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'\nscoop bucket add versions 'https://github.com/ScoopInstaller/Versions'\nscoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'\nscoop bucket add java 'https://github.com/ScoopInstaller/Java'\nscoop bucket add dorado https://github.com/chawyehsu/dorado\nscoop bucket add scoopet https://github.com/ivaquero/scoopet\n
  1. \u67e5\u770b\u652f\u6301\u7684\u547d\u4ee4\uff1ascoop help
  2. \u67e5\u627e\u8f6f\u4ef6\uff1ascoop search xxx \u8f6f\u4ef6\u5305
  3. \u5b89\u88c5\u8f6f\u4ef6\uff1ascoop install xxx \u8f6f\u4ef6\u5305
  4. \u5378\u8f7d\u8f6f\u4ef6\uff1ascoop uninstall xxx \u8f6f\u4ef6
  5. \u67e5\u770b\u8f6f\u4ef6\u5b98\u65b9\u9875\uff1ascoop home xxx \u8f6f\u4ef6
  6. \u67e5\u770b\u5b89\u88c5\u7684\u8f6f\u4ef6\u5217\u8868\uff1ascoop list
  7. \u66f4\u65b0\u8f6f\u4ef6\uff1ascoop update
  8. \u67e5\u770b\u8f6f\u4ef6\u5217\u8868\uff1ascoop export >> xxx.txt
  9. \u67e5\u770b \u5b98\u65b9\u652f\u6301\u7684 bucket\uff1ascoop bucket known
  10. \u67e5\u770b bucket \u547d\u4ee4\u5e2e\u52a9\uff1ascoop bucket help
  11. \u6dfb\u52a0 bucket \uff1ascoop bucket add xxxbucket
  12. \u5220\u9664 bukcet \uff1ascoop bucket rm xxx \u4ed3\u5e93

\u5e38\u7528\u547d\u4ee4\u8bf4\u660e

alias       Manage scoop aliases # \u7ba1\u7406\u6307\u4ee4\u7684\u66ff\u8eab\nbucket      Manage Scoop buckets # \u7ba1\u7406\u8f6f\u4ef6\u4ed3\u5e93\ncache       Show or clear the download cache # \u67e5\u770b\u4e0e\u7ba1\u7406\u7f13\u5b58\ncheckup     Check for potential problems # \u505a\u4e2a\u4f53\u68c0\ncleanup     Cleanup apps by removing old versions # \u6e05\u7406\u7f13\u5b58\u4e0e\u65e7\u7248\u672c\u8f6f\u4ef6\u5305\nconfig      Get or set configuration values # \u914d\u7f6e Scoop\ncreate      Create a custom app manifest # \u521b\u5efa\u81ea\u5b9a\u4e49\u8f6f\u4ef6\u5305\ndepends     List dependencies for an app # \u67e5\u770b\u4f9d\u8d56\nexport      Exports (an importable) list of installed apps # \u5bfc\u51fa\u8f6f\u4ef6\u5305\u5217\u8868\nhelp        Show help for a command # \u663e\u793a\u5e2e\u52a9\u6307\u4ee4\nhold        Hold an app to disable updates # \u7981\u6b62\u8f6f\u4ef6\u5305\u66f4\u65b0\nhome        Opens the app homepage # \u6253\u5f00\u8f6f\u4ef6\u5305\u4e3b\u9875\ninfo        Display information about an app # \u663e\u793a\u8f6f\u4ef6\u5305\u4fe1\u606f\ninstall     Install apps # \u5b89\u88c5\u8f6f\u4ef6\u5305\u7684\u6307\u4ee4\nlist        List installed apps # \u5217\u51fa\u6240\u6709\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\nprefix      Returns the path to the specified app # \u67e5\u770b\u8f6f\u4ef6\u5305\u8def\u5f84\nreset       Reset an app to resolve conflicts # \u6062\u590d\u8f6f\u4ef6\u5305\u7248\u672c\nsearch      Search available apps # \u641c\u7d22\u8f6f\u4ef6\u5305\nstatus      Show status and check for new app versions # \u67e5\u770b\u8f6f\u4ef6\u5305\u66f4\u65b0\u72b6\u6001\nunhold      Unhold an app to enable updates # \u542f\u52a8\u8f6f\u4ef6\u5305\u66f4\u65b0\nuninstall   Uninstall an app # \u5378\u8f7d\u8f6f\u4ef6\u5305\u7684\u6307\u4ee4\nupdate      Update apps, or Scoop itself # \u66f4\u65b0\u8f6f\u4ef6\u5305\nvirustotal  Look for app hash on virustotal.com # \u67e5\u770b\u54c8\u5e0c\u503c\nwhich       Locate a shim/executable (similar to 'which' on Linux) # \u67e5\u770b\u53ef\u6267\u884c\u7a0b\u5e8f\u8def\u5f84\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_2","title":"\u5378\u8f7dScoop","text":"

scoop uninstall scoop\uff1a\u8fd9\u5c06\u5378\u8f7d Scoop \u548c\u6240\u6709\u4e0e Scoop \u4e00\u8d77\u5b89\u88c5\u7684\u7a0b\u5e8f!

The scoop \u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728 ~/.config/scoop/config.json buckets \u6e90\u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728 SCOOP\\apps\\scoop\\current\\buckets.json

{\n\"main\": \"https://github.com/ScoopInstaller/Main\",\n\"extras\": \"https://github.com/ScoopInstaller/Extras\"\n}\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_3","title":"Scoop \u6280\u5de7\u548c\u77e5\u8bc6","text":"

\u94fe\u63a5: https://blog.csdn.net/weixin_39986178/article/details/110900876

\u76f8\u6bd4\u4e8e Chocolatey \uff0c Scoop \u5219\u66f4\u4e13\u6ce8\u4e8e\u5f00\u6e90\u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u4f7f\u7528 Scoop \u5b89\u88c5\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u79f0\u4e3a\"\u4fbf\u643a\u5f0f\"\u5e94\u7528\u7a0b\u5e8f\uff0c\u9700\u8981\u7684\u6743\u9650\u66f4\u5c11\uff0c\u5bf9\u7cfb\u7edf\u4ea7\u751f\u7684\u526f\u4f5c\u7528\u4e5f\u66f4\u5c11\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u9009\u62e9\u4e86\u4f7f\u7528 Scoop\u3002 \u6ce8\u610f\uff1a\u5bf9\u4e8e\u50cf VirtualBox\u3001Docker for Windows \uff0c\u8f93\u5165\u6cd5\u7b49\u8fd9\u4e9b\u9700\u8981\u9ad8\u6743\u9650\u7684\u8f6f\u4ef6\u8fd8\u662f\u901a\u8fc7\u5728\u5b98\u7f51\u4e0b\u8f7d\u5b89\u88c5\u5305\u8fdb\u884c\u5b89\u88c5\u3002

"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/","title":"WinGet\uff08Win\uff09","text":"

WinGet \uff08 Windows \u7a0b\u5e8f\u5305\u7ba1\u7406\u5668\uff1a Windows Package Manager \uff09\u662f\u5fae\u8f6f\u4e3a win10 \u5f00\u53d1\u7684\u4e00\u6b3e\u5f00\u6e90\u7684\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\uff0c\u4e8e 2020 \u5e74 5 \u6708\u7684 Microsoft Build \u5f00\u53d1\u8005\u5927\u4f1a\u4e0a\u9996\u5ba3\u3002

\u524d\u63d0\uff1aWindows 10 1709 \u53ca\u4ee5\u4e0a\u7248\u672c \u5f53\u524d WinGet \u652f\u6301\u7684\u5b89\u88c5\u7a0b\u5e8f\u7c7b\u578b\u5c1a\u4e0d\u591a\uff0c\u9664\u4e86 EXE\u3001 MSIX \u3001 MSI \u4e09\u79cd\u4e4b\u5916\uff0c\u8fd8\u80fd\u591f\u5728\u81ea\u5b9a\u4e49\u914d\u7f6e\u540e\u4e0b\u8f7d\u90e8\u5206\u5fae\u8f6f\u5e94\u7528\u5546\u5e97\u7684\u7a0b\u5e8f\u3002

"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_1","title":"\u4e0b\u8f7d\u3001\u5b89\u88c5\u548c\u9a8c\u8bc1","text":"

\u4f60\u53ef\u4ee5\u5728 Github Release \u4e0b\u8f7d .appxbundle \u683c\u5f0f\u7684\u6587\u4ef6\uff0c\u53cc\u51fb\u6253\u5f00\u5e76\u8fd0\u884c\u3002

\u5982\u679c\u51fa\u73b0\u300c\u6b64\u7535\u8111\u4e0d\u652f\u6301\u6253\u5f00\u8be5\u7c7b\u578b\u6587\u4ef6\u300d\u7684\u63d0\u793a\uff0c\u5219\u53ef\u5728 Win + I \u8fdb\u5165\u8bbe\u7f6e -> \u66f4\u65b0\u548c\u5b89\u5168 -> \u5f00\u53d1\u8005\u9009\u9879 -> \u6253\u5f00\u5f00\u53d1\u4eba\u5458\u6a21\u5f0f\u3002

\u8f93\u5165 winget \u53ef\u4ee5\u67e5\u770b\u7b80\u7565\u5e2e\u52a9\u6587\u6863\uff1b\u8f93\u5165 winget -v \u67e5\u770b\u7248\u672c\u4fe1\u606f

"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_2","title":"\u57fa\u672c\u4f7f\u7528","text":"

\u663e\u793a\u7b80\u7565\u5e2e\u52a9\u6587\u6863\uff1a winget -?\uff08-?\u53ef\u9009\uff09\uff1b\u67e5\u770b\u7279\u5b9a\u547d\u4ee4\u7684\u8be6\u7ec6\u5e2e\u52a9\u6587\u6863\uff1a winget [] -?\uff0c\u5982 winget install -?\u663e\u793a\u8f6f\u4ef6\u8be6\u7ec6\u4fe1\u606f\uff1a winget show \u641c\u7d22\u8f6f\u4ef6\uff1a winget search \u5b89\u88c5\u8f6f\u4ef6\uff1awinget install

\u662f\u7684\uff0c\u5982\u4f60\u6240\u89c1\uff0c WinGet \u5e76\u6ca1\u6709\u81ea\u52a8\u5f00\u542f\u5378\u8f7d\u3001\u5347\u7ea7\u7b49\u529f\u80fd\uff0c\u8fd9\u4e5f\u662f\u5176\u5728\u53d1\u5e03\u4e4b\u540e\u5f88\u957f\u65f6\u95f4\u4e0d\u6e29\u4e0d\u706b\u7684\u91cd\u8981\u539f\u56e0\u3002

\u4f46\u662f\u4e0d\u8981\u7740\u6025\uff0c\u622a\u6b62\u5230 2021/03/25 \u53d1\u5e03\u7684\u6700\u65b0\u9884\u89c8\u7248 v0.2.10771 \uff0c WinGet \u5b9e\u9a8c\u6027\u529f\u80fd\uff08\u9700\u8981\u7528\u6237\u81ea\u542f\uff09\u7684\u6570\u91cf\u5df2\u7ecf\u589e\u52a0\u5230\u4e86\u516b\u4e2a\uff0c\u5176\u4e2d\u5c31\u5305\u62ec uninstall \u3001 upgrade \u3001 list \u7b49\u91cd\u8981\u529f\u80fd\uff0c\u4ee5\u53ca\u652f\u6301\u5b89\u88c5 Microsoft Store \u4e0a\u7684\u5e94\u7528\u7a0b\u5e8f\uff01

\u5982\u679c\u60f3\u8981\u5f00\u542f\u5b9e\u9a8c\u529f\u80fd\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u8f93\u5165 winget settiings\uff0c\u6253\u5f00 WinGet \u914d\u7f6e\u6587\u4ef6 settings.json \u589e\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a

\"experimentalFeatures\": { \"uninstall\": true, \"upgrade\": true, \"list\": true, \"experimentalMSStore\": true},

\u5982\u679c\u60f3\u8981\u66f4\u6539 winget \u663e\u793a\u7684\u8fdb\u5ea6\u6761\u89c6\u89c9\u6548\u679c\uff0c\u53ef\u4ee5\u5728 setting.json \u91cc\u589e\u52a0\uff1a \"visual\": { \"progressBar\": \"accent\"},# \u4e09\u79cd\u6837\u5f0f\u53ef\u9009\uff1aaccent(\u9ed8\u8ba4\u503c)\u3001 retro\u3001 rainbow

winget list > winget.txt \u540c\u6837\u652f\u6301\u4e00\u952e\u5bfc\u51fa\u8f6f\u4ef6\u5217\u8868\uff0c\u65b9\u4fbf\u5907\u4efd\u548c\u6362\u673a\u91cd\u88c5\u3002

"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#microsoft-store","title":"\u4e0b\u8f7d Microsoft Store \u8f6f\u4ef6","text":"

\u5b9e\u9a8c\u529f\u80fd\u5f00\u542f\"experimentalMSStore\": true\u4e4b\u540e\uff0cwinget \u53ef\u4ee5\u4e0b\u8f7d MStore \u7684\u8f6f\u4ef6\u4e86\uff08\u4e0d\u8fc7\u76ee\u524d\u652f\u6301\u7684\u5e76\u4e0d\u591a\uff09\u3002

winget source list \u67e5\u770b\u8f6f\u4ef6\u6e90\u5217\u8868\uff0c\u53d1\u73b0\u9664\u4e86 winget \u6e90\u4e4b\u5916\uff0cMSStore \u6e90\u5df2\u7ecf\u6dfb\u52a0\u4e0a\u4e86\u3002\u90e8\u5206\u5546\u5e97\u5185\u8f6f\u4ef6\u53ef\u4ee5\u6b63\u5e38\u4e0b\u8f7d\u5b89\u88c5\u4e86\u3002

"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_3","title":"\u5378\u8f7d\u5176\u4ed6\u6e90\u5b89\u88c5\u7684\u8f6f\u4ef6","text":"

winget \u53ef\u4ee5\u5378\u8f7d winget list \u663e\u793a\u51fa\u7684\u6240\u6709\u8f6f\u4ef6\u3002\u5305\u62ec\u7535\u8111\u4e0a\u7684\u5927\u591a\u6570\u8f6f\u4ef6\uff0c\u5982 Windows \u7cfb\u7edf\u81ea\u5e26\u7684\u3001\u624b\u52a8\u5b89\u88c5\u7684\u3001 Chocolatey \u5b89\u88c5\u7684\u90e8\u5206\u7b49\u3002\u552f\u4e00\u4e0d\u8db3\u7684\u662f\uff0c\u5378\u8f7d\u65f6\u4f1a\u88ab\u5f39\u51fa\u7684\u5378\u8f7d\u7a97\u53e3\u6253\u65ad\uff0c\u964d\u4f4e\u4e86\u81ea\u52a8\u5316\u7684\u4e00\u81f4\u6027\u3002

winget \u53ef\u4ee5\u5378\u8f7d\u591a\u79cd\u7c7b\u578b\u7684\u8f6f\u4ef6\u7a0b\u5e8f

"},{"location":"package_manager/YaST%20%26%20Zypper%EF%BC%88RPM%EF%BC%89/","title":"YaST & Zypper\uff08RPM\uff09","text":"

openSUSE \u662f\u4e00\u4e2a\u72ec\u7acb\u7684 Linux \u53d1\u884c\u7248\u5206\u652f\uff0c\u4f7f\u7528 RPM \u4f5c\u4e3a\u5206\u53d1\u7684\u8f6f\u4ef6\u5305\u683c\u5f0f\uff0c\u91c7\u7528 zypper \u4f5c\u4e3a\u5305\u7ba1\u7406\u5668\uff0c\u540c\u65f6\u517c\u5bb9\u591a\u79cd\u8ba1\u7b97\u673a\u786c\u4ef6\u3002 openSUSE \u6709\u4e24\u4e2a\u6b63\u5f0f\u7684\u53d1\u884c\u7248\uff1a Leap \u548c Tumbleweed \u3002

"},{"location":"package_manager/YaST%20%26%20Zypper%EF%BC%88RPM%EF%BC%89/#_1","title":"\u8f6f\u4ef6\u5305\u7684\u5206\u5c42\u7ba1\u7406","text":"

OpenSUSE \u662f\u4e00\u4e2a\u4e00\u76f4\u88ab\u4f4e\u4f30\u7684\u591a\u529f\u80fd Linux \u64cd\u4f5c\u7cfb\u7edf

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"pacman\uff08Arch\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"

Manjaro \u6362\u6e90

sudo pacman-mirrors -i -c China -m rank\nsudo pacman -Syy\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1","title":"1. \u66f4\u65b0\u7cfb\u7edf","text":"
\u547d\u4ee4  \u89e3\u91ca\npacman -Syu \u5bf9\u6574\u4e2a\u7cfb\u7edf\u8fdb\u884c\u66f4\u65b0\uff08\u5e38\u7528\uff09\npacman -Syy \u5f3a\u5236\u66f4\u65b0\npacman -Syudd   \u4f7f\u7528 -dd\u8df3\u8fc7\u6240\u6709\u68c0\u6d4b\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2","title":"2. \u641c\u7d22\u5305","text":"
\u547d\u4ee4  \u89e3\u91ca\npacman -Ss keyword  \u5728\u4ed3\u5e93\u4e2d\u641c\u7d22\u542b\u5173\u952e\u5b57\u7684\u5305\uff08\u5e38\u7528\uff09pacman -Ss '^fcitx-'\npacman -Qs keyword  \u641c\u7d22\u5df2\u5b89\u88c5\u7684\u5305\uff08\u5e38\u7528\uff09pacman -Qs '^fcitx-'\npacman -Qi package_name \u67e5\u8be2\u672c\u5730\u5b89\u88c5\u5305\u7684\u8be6\u7ec6\u4fe1\u606f\npacman -Ql package_name \u5217\u51fa\u8be5\u5305\u7684\u6587\u4ef6\npacman -Fs keyword  \u6309\u6587\u4ef6\u540d\u67e5\u627e\u8f6f\u4ef6\u5e93\npacman -Si package_name \u663e\u793a\u8fdc\u7a0b\u8f6f\u4ef6\u5305\u7684\u8be6\u5c3d\u7684\u4fe1\u606f\npacman -Qii package_name    \u4f7f\u7528\u4e24\u4e2a -i \u5c06\u540c\u65f6\u663e\u793a\u5907\u4efd\u6587\u4ef6\u548c\u4fee\u6539\u72b6\u6001\npacman -Ql package_name \u8981\u83b7\u53d6\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\u6240\u5305\u542b\u6587\u4ef6\u7684\u5217\u8868\npacman -Fl package_name \u67e5\u8be2\u8fdc\u7a0b\u5e93\u4e2d\u8f6f\u4ef6\u5305\u5305\u542b\u7684\u6587\u4ef6\npacman -Qk package_name \u68c0\u67e5\u8f6f\u4ef6\u5305\u5b89\u88c5\u7684\u6587\u4ef6\u662f\u5426\u90fd\u5b58\u5728\npacman -Fo /path/to/file_name   \u67e5\u8be2\u6587\u4ef6\u5c5e\u4e8e\u8fdc\u7a0b\u6570\u636e\u5e93\u4e2d\u7684\u54ea\u4e2a\u8f6f\u4ef6\u5305\npacman -Qdt \u8981\u7f57\u5217\u6240\u6709\u4e0d\u518d\u4f5c\u4e3a\u4f9d\u8d56\u7684\u8f6f\u4ef6\u5305(\u5b64\u7acb orphans )\npacman -Qet \u8981\u7f57\u5217\u6240\u6709\u660e\u786e\u5b89\u88c5\u800c\u4e14\u4e0d\u88ab\u5176\u5b83\u5305\u4f9d\u8d56\u7684\u8f6f\u4ef6\u5305\npactree package_name    \u8981\u663e\u793a\u8f6f\u4ef6\u5305\u7684\u4f9d\u8d56\u6811\nwhoneeds package_name   \u68c0\u67e5\u4e00\u4e2a\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u88ab\u90a3\u4e9b\u5305\u4f9d\u8d56pkgtoolsAUR\u4e2d\u7684whoneeds\npactree -r package_name \u68c0\u67e5\u4e00\u4e2a\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u88ab\u90a3\u4e9b\u5305\u4f9d\u8d56\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#3","title":"3. \u5b89\u88c5\u5305","text":"
\u547d\u4ee4  \u89e3\u91ca\npacman -S package_name  \u6267\u884c pacman -S firefox \u5c06\u5b89\u88c5 Firefox\uff08\u5e38\u7528\uff09\npacman -Sy package_name \u5c06\u5728\u540c\u6b65\u5305\u6570\u636e\u5e93\u540e\u518d\u6267\u884c\u5b89\u88c5\u3002\npacman -Sv package_name \u5728\u663e\u793a\u4e00\u4e9b\u64cd\u4f5c\u4fe1\u606f\u540e\u6267\u884c\u5b89\u88c5\u3002\npacman -U local_package_name    \u5b89\u88c5\u672c\u5730\u5305\uff0c\u5176\u6269\u5c55\u540d\u4e3apkg.tar.gz\u6216pkg.tar.xz\npacman -U url   \u5b89\u88c5\u4e00\u4e2a\u8fdc\u7a0b\u5305\uff08\u4e0d\u5728 pacman \u914d\u7f6e\u7684\u6e90\u91cc\u9762\uff09\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#4","title":"4. \u5220\u9664\u5305","text":"
\u547d\u4ee4  \u89e3\u91ca\npacman -R package_name  \u8be5\u547d\u4ee4\u5c06\u53ea\u5220\u9664\u5305\uff0c\u4fdd\u7559\u5176\u5168\u90e8\u5df2\u7ecf\u5b89\u88c5\u7684\u4f9d\u8d56\u5173\u7cfb\npacman -Rs package_name \u5728\u5220\u9664\u5305\u7684\u540c\u65f6\uff0c\u5220\u9664\u5176\u6240\u6709\u6ca1\u6709\u88ab\u5176\u4ed6\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\u4f7f\u7528\u7684\u4f9d\u8d56\u5173\u7cfb\uff08\u5e38\u7528\uff09\npacman -Rsc package_name    \u5728\u5220\u9664\u5305\u7684\u540c\u65f6\uff0c\u5220\u9664\u6240\u6709\u4f9d\u8d56\u8fd9\u4e2a\u8f6f\u4ef6\u5305\u7684\u7a0b\u5e8f\npacman -Rd package_name \u5728\u5220\u9664\u5305\u65f6\u4e0d\u68c0\u67e5\u4f9d\u8d56\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#5","title":"5. \u5176\u4ed6\u7528\u6cd5","text":"
pacman -Sw package_name \u53ea\u4e0b\u8f7d\u5305\uff0c\u4e0d\u5b89\u88c5\u3002\npacman -Sc  \u6e05\u7406\u672a\u5b89\u88c5\u7684\u5305\u6587\u4ef6\uff08\u5e38\u7528\uff09\u5305\u6587\u4ef6\u4f4d\u4e8e /var/cache/pacman/pkg/ \u76ee\u5f55\npacman -Scc \u6e05\u7406\u6240\u6709\u7684\u7f13\u5b58\u6587\u4ef6\uff08\u5e38\u7528\uff09\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#manjaro","title":"Manjaro\u8f6f\u4ef6\u7ba1\u7406","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1_1","title":"1. \u5207\u6362\u56fd\u5185\u6700\u5feb\u7684\u8f6f\u4ef6\u6e90","text":"

\u5927\u591a\u6570 Linux \u53d1\u884c\u7248\u90fd\u662f\u6765\u81ea\u56fd\u5916\uff0c\u81ea\u7136\u5b98\u65b9\u4ed3\u5e93\u5730\u5740\u4e5f\u5728\u56fd\u5916\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u4e0b\u5b89\u88c5\u5b8c Linux \u53d1\u884c\u7248\u4e4b\u540e\u505a\u7684\u7b2c\u4e00\u4ef6\u4e8b\u5c31\u662f\u5207\u6362\u6e90\u4e3a\u56fd\u5185\u7684\u6e90\u3002\u6e90\u7684\u5207\u6362\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u53d1\u884c\u7248\u4e5f\u90fd\u652f\u6301 GUI \u5207\u6362\uff0c\u8fd9\u91cc\u53ea\u5217\u51fa\u5728\u547d\u4ee4\u884c\u4e0b\u5982\u4f55\u64e6\u64cd\u4f5c

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1-pacman-mirrors","title":"1. \u7b2c\u4e00\u90e8\u5206\u4f7f\u7528 pacman-mirrors \u66f4\u65b0\u5b98\u65b9\u8f6f\u4ef6\u6e90","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#11","title":"1.1 \u6309\u7167\u5730\u533a\u81ea\u52a8\u66f4\u65b0\u4e3a\u6700\u5feb\u6700\u7a33\u5b9a\u7684\u8f6f\u4ef6\u6e90\u955c\u50cf\u5730\u5740","text":"

sudo pacman-mirrors --country China

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#12","title":"1.2. \u6062\u590d\u9ed8\u8ba4\u8f6f\u4ef6\u6e90\u64cd\u4f5c","text":"

sudo pacman-mirrors --interactive --default

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#13","title":"1.3 \u8f6f\u4ef6\u6e90\u66f4\u65b0\u4e4b\u540e\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u8fdb\u884c\u7cfb\u7edf\u66f4\u65b0","text":"

sudo pacman -Syyu# \u8f6f\u4ef6\u6e90\u66f4\u65b0\u5b8c\u6210\u4e4b\u540e\u8fdb\u884c\u7cfb\u7edf\u8f6f\u4ef6\u66f4\u65b0\u64cd\u4f5c

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#14","title":"1.4 \u67e5\u770b\u6240\u6709\u53ef\u7528\u7684\u5730\u533a\u4fe1\u606f","text":"

sudo pacman-mirrors -l

\u53c2\u8003\u7ffb\u8bd1\u81ea\uff1a https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2-pacman","title":"2. \u4f7f\u7528 pacman \u7ba1\u7406\u8f6f\u4ef6","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2-pacman_1","title":"2. \u7b2c\u4e8c\u90e8\u5206\u4f7f\u7528 pacman \u7ba1\u7406\u8f6f\u4ef6","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#21","title":"2.1 \u540c\u6b65\u5e76\u4e14\u66f4\u65b0\u4f60\u7684\u7cfb\u7edf","text":"

sudo pacman -Syyu

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#22","title":"2.2 \u5728\u8f6f\u4ef6\u4ed3\u5e93\u4e2d\u641c\u7d22\u8f6f\u4ef6","text":"

sudo pacman -Ss [software package name]

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#23","title":"2.3 \u67e5\u770b\u5df2\u5b89\u88c5\u8f6f\u4ef6","text":"

sudo pacman -Qs [software package name] sudo pacman -Qi [software package name]# \u9644\u5e26\u8be6\u7ec6\u4fe1\u606f sudo pacman -Qii [software package name]# \u9644\u5e26\u66f4\u52a0\u8be6\u7ec6\u7684\u5305\u4fe1\u606f sudo pacman -Ql# \u5217\u51fa\u6240\u6709\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#24","title":"2.4 \u67e5\u770b\u8f6f\u4ef6\u7684\u8be6\u7ec6\u4f9d\u8d56","text":"

sudo pactree [software package name]

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#25-orphans","title":"2.5 \u67e5\u770b\u7cfb\u7edf\u4e2d\u90a3\u4e9b\u6ca1\u6709\u88ab\u4f7f\u7528\u8f6f\u4ef6\u4f9d\u8d56\u5305\uff08orphans\uff09","text":"

sudo pacman -Qdt

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#26-debian-sudo-apt-autoremove-purge","title":"2.6 \u81ea\u52a8\u79fb\u9664\u90a3\u4e9b\u7cfb\u7edf\u4e2d\u6ca1\u6709\u88ab\u4f7f\u7528\u7684\u4f9d\u8d56\u5305\u3010\u7c7b\u4f3c\u4e8eDebian\u4e0b\u7684 sudo apt autoremove --purge\u3011","text":"

sudo pacman -Rs $(pacman -Qdtq)

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#27","title":"2.7 \u4e0b\u8f7d\u5e76\u5b89\u88c5\u8f6f\u4ef6\u5305","text":"

sudo pacman -Syu [software package name]# \u4ece\u8f6f\u4ef6\u4ed3\u5e93\u5b89\u88c5 yay -S [software package name]# Packages from the AUR sudo pacman -U [/package_path/][software package name.pkg.tar.xz]# \u4ece\u672c\u5730\u5b89\u88c5

pacman -U http://www.examplepackage/repo/examplepkg.tar.xz# \u4ece\u7f51\u7edc\u5b89\u88c5\u3010\u975e\u5b98\u65b9\u4ed3\u5e93\u3011

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#28","title":"2.8 \u5378\u8f7d\u8f6f\u4ef6","text":"

sudo pacman -R [software package name] sudo pacman -Rs [software package name]# \u540c\u65f6\u5220\u9664\u4f9d\u8d56 sudo pacman -Rns [software package name]# \u5220\u9664\u8f6f\u4ef6\u53ca\u5176\u4f9d\u8d56\uff0c\u8fd8\u6709pacman\u751f\u6210\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5373\u66f4\u5f7b\u5e95\u7684\u5220\u9664

"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#29","title":"2.9 \u6e05\u7a7a\u7f13\u5b58\u3010\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5b89\u88c5\u8f6f\u4ef6\u4f1a\u5148\u6765\u7f13\u5b58\u4e2d\u67e5\u770b\u662f\u5426\u5df2\u7ecf\u4e0b\u8f7d\u8fc7\uff0c\u6ca1\u6709\u518d\u53bb\u4e0b\u8f7d\uff0c\u8f6f\u4ef6\u5b89\u88c5\u540e\u901a\u5e38\u4e0b\u8f7d\u7f13\u5b58\u8fd8\u5728\u3011","text":"

sudo pacman -Sc sudo pacman -Scc # \u66f4\u5f7b\u5e95\u7684\u6e05\u7406

\u5173\u4e8e pacman \u5e38\u7528\u5c31\u8fd9\u4e9b\u4e86\uff0c\u66f4\u591a\u8bf7\u4f7f\u7528 man pacman OR pacman -h \u53bb\u67e5\u770b \u53c2\u8003\u7ffb\u8bd1\u81ea\uff1a https://wiki.manjaro.org/index.php?title=Pacman_Overview From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>

"},{"location":"platform/GitBucket/","title":"GitBucket","text":""},{"location":"platform/GitBucket/#_1","title":"\u7b80\u4ecb","text":"

GitBucket \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u514d\u8d39\u5f00\u6e90\uff0c\u6613\u90e8\u7f72\u7684\u5f00\u6e90Git\u5e73\u53f0\uff0c\u540c\u65f6\u62e5\u6709\u8bf8\u591a\u4f18\u52bf\uff0c\u867d\u7136\u4e5f\u6709\u5f0a\u7aef\u3002

  • \u4f18\u70b9

    • \u5b8c\u5168\u5f00\u6e90\uff0c\u6ca1\u6709\u4efb\u4f55\u9650\u5236\uff1b

    • \u8fd0\u884c\u5728JVM\u5e73\u53f0\u4e0a\uff0c\u975e\u5e38\u5bb9\u6613\u90e8\u7f72\uff1b

    • \u7c7b\u4f3c\u4e8eGitHub\u7684\u754c\u9762\uff0c\u64cd\u4f5c\u5bb9\u6613\uff1b

    • \u4e30\u5bcc\u7684\u63d2\u4ef6\uff0c\u4f7f\u5f97\u6269\u5c55\u975e\u5e38\u5bb9\u6613\uff1b

    • \u63d0\u4f9b\u4e86\u5927\u91cf\u517c\u5bb9GitHub\u7684API\uff1b

  • \u7f3a\u70b9

    • \u6709\u70b9\u6b8b\u5e9f\u7684\u6743\u9650\u7ba1\u7406\uff08\u6743\u9650\u6ca1\u6709\u4f9d\u7167\u516c\u5f00\uff0c\u79c1\u6709\u5e93\u533a\u5206\uff09\uff1b

    • \u5f00\u53d1\u8bed\u8a00\u4e3aScala\uff0c\u5bf9\u4e8e\u975eScala\u7528\u6237\u81ea\u5df1\u5199\u63d2\u4ef6\u6709\u4e00\u5b9a\u95e8\u69db\uff1b

    • \u7531\u4e8e\u4f5c\u8005\u6682\u672a\u5b8c\u6210\u5e73\u53f0\u5347\u7ea7\uff0c\u6682\u65f6\u65e0\u6cd5\u90e8\u7f72\u5728\u9664Tomcat\u4e4b\u5916\u7684Servlet\u5bb9\u5668\u3002

"},{"location":"platform/GitBucket/#_2","title":"\u90e8\u7f72","text":"
  1. \u4e0b\u8f7d Release \u91cc\u9762\u7684war\u5230\u4f60\u7684\u670d\u52a1\u5668\uff1b

  2. java -jar gitbucket.war \u542f\u52a8\u3002\uff08\u7b14\u8005\u7528\u7684\u662fJDK17\uff09\uff1b

  3. (\u53ef\u9009)\u5c06\u542f\u52a8\u7aef\u53e3\u53cd\u5411\u4ee3\u7406\u5230\u5b50\u57df\u540d\u3002

"},{"location":"platform/chatGPT/","title":"ChatGPT","text":"

\u5b98\u7f51: https://chat.openai.com/

ChatGPT\u662f\u4e00\u79cd\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u5904\u7406\u6280\u672f\u7684\u4eba\u5de5\u667a\u80fd\u804a\u5929\u673a\u5668\u4eba\uff0c\u4f7f\u7528GPT\uff08Generative Pre-trained Transformer\uff09\u6280\u672f\u751f\u6210\u4eba\u7c7b\u8bed\u8a00\u54cd\u5e94\u3002

\u529f\u80fd:

  • \u7528\u6765\u5f53\u4f5c\u641c\u7d22\u5f15\u64ce\uff0c\u6211\u4eec\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u4f7f\u7528\u5b83\u6765\u641c\u7d22\u4e00\u4e9b\u4fe1\u606f\uff0c\u4f8b\u5982\u76f4\u63a5\u95eeChatGPT\u201c\u5982\u4f55\u4f7f\u7528ChatGPT\u201d\u3002
  • \u7528\u6765\u67e5\u627e\u5b66\u4e60\u8d44\u6599\uff0c\u4f8b\u5982\u76f4\u63a5\u95eeChatGPT\u201c\u5982\u4f55\u5b66\u4e60\u81ea\u7136\u8bed\u8a00\u5904\u7406\u201d\u3002
  • \u7528\u6765\u67e5\u8be2\u6587\u6863\uff0c\u4f8b\u5982\u76f4\u63a5\u95eeChatGPT\u201cpython\u5e93functools\u91cc\u9762reduce\u51fd\u6570\u7684\u7528\u6cd5\u662f\u4ec0\u4e48\u201d\u3002
  • \u7528\u6765\u8c03\u8282\u5fc3\u60c5\uff0c\u4f8b\u5982\u76f4\u63a5\u95eeChatGPT\u201c\u6211\u5e94\u8be5\u600e\u4e48\u548c\u5973\u5b69\u5b50\u7ea6\u4f1a\u201d\u3002

\u914d\u7f6e\u65b9\u6cd5\uff1a

  • \u901a\u8fc7\u6d4f\u89c8\u5668\u641c\u7d22ChatGPT\uff0c\u70b9\u51fb\u8fdb\u5165\u5b98\u7f51\uff0c\u70b9\u51fb\"Sign in\"\u6309\u94ae\u6ce8\u518c\u8d26\u53f7\u3002
  • \u6ce8\u518c\u6210\u529f\u540e\uff0c\u7ed1\u5b9a\u4e00\u4e2a\u6d77\u5916\u7684\u624b\u673a\u53f7\uff0c\u5728\u63a5\u6536\u5230\u7684\u9a8c\u8bc1\u7801\u4e2d\u8f93\u5165\u9a8c\u8bc1\u7801\uff0c\u5373\u53ef\u5b8c\u6210\u6ce8\u518c\u3002
  • \u9700\u8981\u6ce8\u610f\u7684\u662f\u9999\u6e2f\u5730\u533a\u6682\u65f6\u4e0d\u80fd\u591f\u4f7f\u7528ChatGPT\uff0c\u751a\u81f3\u5982\u679c\u68af\u5b50\u7684\u8282\u70b9\u5728\u9999\u6e2f\uff0c\u8fde\u767b\u9646\u5b98\u7f51\u90fd\u4f1a\u53d7\u5230\u9650\u5236\u3002
  • \u5982\u679c\u6ca1\u6709\u6d77\u5916\u624b\u673a\u53f7\u7801\u7684\u8bdd\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u624b\u673a\u9a8c\u8bc1\u7801\u63a5\u6536\u7f51\u7ad9\u6765\u83b7\u53d6\uff0c\u8fd9\u6837\u7684\u7f51\u7ad9\u548c\u68af\u5b50\u4e00\u6837\u6709\u975e\u5e38\u591a\u5bb6\uff0c\u53ea\u9700\u8981google\u4e00\u4e0b\u5c31\u53ef\u4ee5\u627e\u5230\u3002
"},{"location":"platform/excalidraw/","title":"Excalidraw","text":""},{"location":"platform/excalidraw/#_1","title":"\u7b80\u4ecb","text":"

\u5b98\u7f51\uff1a Excalidraw's repository

Excalidraw \u662f\u4e00\u6b3e\u5f00\u6e90\u7684\u753b\u56fe\u5de5\u5177\uff0c\u53ef\u4ee5\u201c\u624b\u7ed8\u201d\u4e00\u4e9b\u7b80\u5355\u7684\u6d41\u7a0b\u56fe\uff0c\u663e\u793a\u6548\u679c\u50cf\u662f\u7528\u7b14\u5728\u7eb8\u4e0a\u753b\u7684\u4e00\u6837\uff0c\u64cd\u4f5c\u7b80\u5355\u3002

\u540c\u65f6\u5176\u62e5\u6709\u4e30\u5bcc\u7684\u7d20\u6750\u5e93\uff0c\u5e2e\u52a9\u6bcf\u4e2a\u4eba\u66f4\u597d\u5730\u7ed8\u56fe\u3002

\u9664\u4e86\u5728\u7ebf\u7f51\u7ad9\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6d4f\u89c8\u5668\u6269\u5c55\u76f4\u63a5\u5b89\u88c5\u5230\u672c\u5730\u4f7f\u7528\uff0c\u5177\u4f53\u53ef\u4ee5\u5728\u5b98\u65b9\u6587\u6863\u67e5\u770b\u3002

"},{"location":"platform/flydav/","title":"FlyDav","text":""},{"location":"platform/flydav/#_1","title":"\u7b80\u4ecb","text":"

FlyDav \u662f\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u7684\u5f00\u6e90 webdav \u670d\u52a1\u5668

  • \u4f18\u70b9

    • \u5b8c\u7f8e\u517c\u5bb9 WebDav \u534f\u8bae
    • \u652f\u6301\u65e0\u914d\u7f6e\u8fd0\u884c\uff0c\u53cc\u51fb\u5373\u53ef\u5f00\u542f WebDav \u670d\u52a1\u5668
    • \u5b8c\u5168\u5f00\u6e90\uff0c\u63d0\u4f9b\u4e2d\u82f1\u6587\u6587\u6863
    • \u6781\u7b80\uff0c\u5927\u5c0f 10MB \u4ee5\u5185\uff0c\u8de8\u5e73\u53f0
    • \u5b89\u5168\uff0c\u4e0d\u5b58\u50a8\u660e\u6587\u5bc6\u7801\uff0c\u9694\u79bb\u4e0d\u540c\u76ee\u5f55
  • \u7f3a\u70b9

    • \u4e0d\u652f\u6301 SSL
    • \u4e0d\u652f\u6301\u7ec6\u7c92\u5ea6\u6743\u9650\u7ba1\u7406
"},{"location":"platform/flydav/#_2","title":"\u90e8\u7f72","text":"

\u6700\u7b80\u90e8\u7f72\uff1a

  1. \u9996\u5148\u4ece \u53d1\u5e03\u9875 \u4e0b\u8f7d FlyDav\u3002
  2. \u8fd0\u884c ./flydav -H 0.0.0.0 \u6765\u542f\u52a8\u670d\u52a1\u5668\u3002\u7136\u540e\u4f60\u8981\u8f93\u5165\u9ed8\u8ba4\u7528\u6237 flydav \u7684\u5bc6\u7801\u3002
  3. \u5728\u4f60\u7684 webdav \u5ba2\u6237\u7aef\uff08\u6bd4\u5982 RaiDrive\uff09\u4e2d\u6253\u5f00 http://YOUR_IP:7086/webdav\u3002

\u5b8c\u6574\u90e8\u7f72\u53ef\u53c2\u9605\u6587\u6863\u3002

"},{"location":"platform/gpt-paper/","title":"Gpt paper","text":"

\u672c\u6587\u4ecb\u7ecd\u4f7f\u7528new bing\u548cchatgpt\u641e\u79d1\u7814\u7684\u5177\u4f53\u65b9\u6cd5\uff0c\u89c6\u9891\u6559\u7a0b\u53ef\u53c2\u770bbilibili\u4f7f\u7528\u8bf4\u660e

"},{"location":"platform/gpt-paper/#_1","title":"\u5185\u5bb9","text":"

\u5173\u4e8e\u5982\u4f55\u6b63\u786e\u4f7f\u7528new bing\uff0c\u5982\u4f55\u4e0d\u8f6c\u5230\u56fd\u5185\u7279\u4f9b\u7248\u3002\u4e0d\u662f\u672c\u8282\u7684\u5185\u5bb9

new bing(\u6d88\u5316\u4ee5\u53ca\u8f93\u51fa) --> chatgpt\uff08\u7ec4\u7ec7\u8bed\u8a00\uff09--> \u5212\u6c34\u5b66\u751f\uff08\u590d\u5236\u7c98\u8d34\uff09

\u56e0\u4e3a\uff1anew bing\u88ab\u9609\u5272\u4e86\uff0c\u8f93\u51fa\u548c\u8f93\u5165\u6587\u5b57\u90fd\u6bd4chatgpt\u9650\u5236\u4e86\u592a\u591a\u3002\u4f46\u662fnew bing \u53ef\u4ee5\u8054\u7f51\uff0c\u53ef\u4ee5\u6807\u6ce8\u6587\u732e\u6765\u6e90\u3002

"},{"location":"platform/gpt-paper/#_2","title":"\u4fa7\u8fb9\u680f\u7504\u522b\u6587\u732e","text":"

\u4f7f\u7528edge\u7504\u522b\u6587\u732e\uff0c\u4f46\u4e0d\u53bb\u9605\u8bfb\u3002\u56e0\u4e3a\u7ffb\u8bd1\u5f88\u6162\u3002\uff08\u770b\u7684\u8bdd\u53ef\u4ee5\u7ed3\u5408wps\uff09

\u9605\u8bfb\u5de6\u8fb9\u7684\u8bba\u6587\uff0c\u544a\u8bc9\u6211\u4ed6\u8bb2\u4e86\u4ec0\u4e48\u5185\u5bb9\u3002

\u9605\u8bfb\u5de6\u8fb9\u7684\u8bba\u6587\uff0c\u7ec6\u81f4\u5730\u544a\u8bc9\u6211\u4ed6\u6bcf\u4e00\u5c0f\u8282\u90fd\u8bb2\u4e86\u4ec0\u4e48\u5185\u5bb9\u3002

"},{"location":"platform/gpt-paper/#_3","title":"\u6d88\u5316\u6587\u732e\u5e76\u8f93\u51fa\uff08\u65e0\u60e7\u67e5\u91cd\uff09","text":"

\u6211\u5e0c\u671b\u4f60\u9605\u8bfb\u82f1\u6587\u6587\u732e \uff1a\u3010A Survey of Surface Reconstruction from Point Clouds\u3011\uff0c\u5206\u522b\u4ecb\u7ecdXXXX\u7684\u3010(\u57fa\u672c\u539f\u7406)\u3001\u5206\u7c7b\u3001\u6548\u679c\u3001\u53d1\u5c55\u8d8b\u52bf\u3001(\u4f18\u70b9\u548c\u7f3a\u70b9\u3001\u5e94\u7528\u8303\u56f4)\u3011\u3002 \u6700\u540e\u5bf9\u4e8c\u8005\u6bd4\u8f83\uff0c\u5e76\u901a\u8fc7\u8868\u683c\uff0c\u6700\u540e\u8bc1\u660eXXXX\u7ed3\u8bba\u3002\u6211\u5e0c\u671b\u4f60\u8f93\u51fa\u7684\u6587\u5b57\u4e3a\u4e2d\u6587\uff0c\u603b\u4f53\u5185\u5bb9\u8981\u8d85\u8fc7500\u5b57\u3002

  • \u82f1\u6587\u6587\u732e\uff0c\u603b\u7ed3\u51fa\u4e2d\u6587\uff0c\u751f\u6210\u5f0f\u7684\uff0c\u57fa\u672c\u4e0d\u4f1a\u91cd\u590d\u3002
  • \u8f93\u51fa\u5185\u5bb9\u8981\u5f3a\u8c03\u4e00\u4e0b\uff0c\u5426\u5219\u4f1a\u4e0d\u6210\u529f\u3002
  • \u5982\u679c\u611f\u89c9\u5185\u5bb9\u4e0d\u5bf9\uff0c\u6362\u4e00\u7bc7\u6587\u732e\uff0c\u8ba9\u4ed6\u8bf4\uff0c\u6216\u8005\u91cd\u65b0\u5f00\u4f1a\u8bdd
"},{"location":"platform/gpt-paper/#chatgpt","title":"chatgpt\u7ec4\u7ec7\u8bed\u8a00","text":"
  • \u7ec4\u7ec7new bing\u751f\u6210\u7684\u4e2d\u6587
  • \u7ec4\u7ec7\u539f\u672c\u7684\u82f1\u6587\uff0c\u751f\u6210\u4e2d\u6587
  • \u4e0d\u53ef\u4ee5\u7ec4\u7ec7\u8bba\u6587\u7684\u4e2d\u6587\uff0c\u6548\u679c\u5f88\u5dee\u3002
"},{"location":"platform/gpt-paper/#_4","title":"\u8bba\u6587\u6700\u540e\uff1a\u8bed\u8a00\u6da6\u8272","text":"

\u5982\u679c\u4e0d\u7528\u4ee5\u4e0aai\u5199\u7684\u6587\u5b57\uff0c\u7eaf\u7cb9\u81ea\u5df1\u5199\u3002

\u5199\u51fa\u6765\u6548\u679c\u53ef\u80fd\u4e0d\u592a\u884c\uff0c\u8ba9ai\u5229\u7528\u4e66\u9762\u8bed\u8a00\u6da6\u8272\u3002\u8fd9\u91cc\u53ef\u4ee5\u4e0a\u7f51\u641c\u4e00\u4e9b\u76f8\u5173\u7684prompt

  • \u8bf7\u7528\u5199\u8bba\u6587\u7684\u4e2d\u6587\u4e66\u9762\u8bed\u6539\u5199\u6216\u8005\u4e30\u5bcc\u4ee5\u4e0b\u6bb5\u843d\uff0c\u8ba9\u5176\u66f4\u6709\u903b\u8f91\uff0c\u91cd\u70b9\u7a81\u51fa\uff1a

  • \u8bf7\u7528\u5199\u8bba\u6587\u7684\u4e2d\u6587\u4e66\u9762\u8bed\u4e30\u5bcc\u4ee5\u4e0b\u6bb5\u843d\uff0c\u8ba9\u5176\u7528\u8bcd\u66f4\u51c6\u786e\uff0c\u5185\u5bb9\u66f4\u4e30\u5bcc\uff1a

"},{"location":"platform/gpt-paper/#_5","title":"\u8bba\u6587\u6700\u540e\uff1a\u6539\u9519\u522b\u5b57","text":""},{"location":"platform/gpt-paper/#note","title":"Note","text":"
  • \u4e0d\u8981\u9677\u5165\u65e0\u610f\u4e49\u7684ai\u73a9\u800d

  • \u4e0d\u8981\u767b\u5f55cn\u7684bing\uff0c\u4e0d\u7136\u4e4b\u540e\u90fd\u4f1a\u8bb0\u4f4f\u3002\u53ea\u80fd\u91cd\u65b0\u6e05\u9664cookie\u3002

"},{"location":"platform/gpt-paper/#_6","title":"\u4fdd\u5b58","text":"
  • single file\u63d2\u4ef6
"},{"location":"platform/minio/","title":"MinIO","text":""},{"location":"platform/minio/#_1","title":"\u7b80\u4ecb","text":"

MinIO \u662f\u4e00\u4e2a\u63d0\u4f9b\u5f00\u6e90\u90e8\u7f72\u65b9\u6848\u7684\u591a\u7ea7\u4e91\u5bf9\u8c61\u5b58\u50a8(S3)\u65b9\u6848\u3002

  • \u4f18\u70b9

    • \u63d0\u4f9b\u8bb8\u53ef\u8bc1\u4e3aAGPL v3\u7684\u5f00\u6e90\u8bb8\u53ef\u8bc1\u7684\u7248\u672c\uff0c\u65e0\u4efb\u4f55\u5bb9\u91cf\uff0c\u5e26\u5bbd\u9650\u5236\uff1b

    • \u517c\u5bb9\u73b0\u6709AWS S3\u7684SDK\uff0cAPI\u7b49\uff1b

    • \u975e\u5e38\u5b8c\u5584\u7684\u6587\u6863\uff0c\u6d3b\u8dc3\u7684\u793e\u533a\uff1b

    • \u90e8\u7f72\u76f8\u5bf9\u7b80\u5355\uff1b

  • \u7f3a\u70b9

    • \u6ca1\u6709\u4efb\u4f55\u4e2d\u6587\u6587\u6863\uff1b

    • \u975e\u4ed8\u8d39\u7248\u8f6f\u4ef6\u66f4\u65b0\u5468\u671f\u8f83\u77ed\uff0c\u9700\u8981\u81ea\u884c\u66f4\u65b0\uff1b

"},{"location":"platform/minio/#_2","title":"\u90e8\u7f72","text":"

RTFM

\u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u8be6\u5c3d\uff0c\u591a\u79cd\u6781\u4e3a\u5bb9\u6613\u7684\u5b89\u88c5\u65b9\u5f0f\uff0c\u8fd9\u91cc\u4e0d\u518d\u8d58\u8ff0\u3002

"},{"location":"platform/minio/#_3","title":"\u7b14\u8005\u7684\u63d0\u9192","text":"

\u4e00\u5b9a\u8981\u5230\u5b98\u65b9\u7684\u6587\u6863\u53bb\u786e\u8ba4\u4f60\u662f\u4e0d\u662f\u6709\u53c2\u6570\u6ca1\u6709\u8bbe\u5b9a\uff0c\u662f\u4e0d\u662f\u4f7f\u7528\u4e86\u72ec\u7acb\u7684\u5377\uff08\u6700\u5c11\u662f\u72ec\u7acb\u7684\u6587\u4ef6\u5939\uff09\u3002

"},{"location":"platform/overleaf/","title":"Overleaf","text":"

\u5b98\u7f51: https://www.overleaf.com

Overleaf \u662f\u4e00\u4e2a\u5728\u7ebf \\(\\LaTeX\\) \u6e32\u67d3\u7f51\u7ad9\u3002 \\(\\LaTeX\\) \u73af\u5883\u7684\u914d\u7f6e\u6bd4\u8f83\u9ebb\u70e6\uff08\u5c24\u5176\u662f\u5728 Windows \u73af\u5883\u4e0b\uff09\uff0c\u5bf9\u4e8e\u65b0\u624b\u4e5f\u4e0d\u591f\u53cb\u597d\uff0c\u800c overleaf \u662f\u4e00\u4e2a\u5f88\u597d\u7684\u66ff\u4ee3\u3002\u53ea\u9700\u8981\u9009\u62e9\u4e00\u4e2a\u597d\u770b\u7684\u6a21\u7248\uff0c\u5199 10 \u9875\u4ee5\u5185\u7684\u4f5c\u4e1a\u6216\u8005\u5c0f\u8bba\u6587\u5c06\u4f1a\u5341\u5206\u65b9\u4fbf\uff0c\u540c\u65f6 Overleaf \u4e5f\u63d0\u4f9b\u4e86\u57fa\u672c\u7684\u56e2\u961f\u534f\u4f5c\u529f\u80fd\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u6216\u9080\u8bf7\u7684\u65b9\u5f0f\u5b9e\u73b0\u591a\u4eba\u5171\u540c\u7f16\u8f91\u3002 Overleaf \u514d\u8d39\u7248\u6709\u6700\u5927\u7f16\u8bd1\u65f6\u957f\u548c\u4e00\u4e9b\u529f\u80fd\u7684\u9650\u5236\uff0c\u5728\u5b8c\u6210\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u9879\u76ee\u65f6\uff0c\u53ef\u4ee5\u8003\u8651\u4ed8\u8d39\u83b7\u5f97\u66f4\u591a\u7684\u529f\u80fd\u3002

\\(\\LaTeX\\) \u662f\u4e00\u79cd\u300c\u975e\u6240\u89c1\u5373\u6240\u5f97\u300d\u7684\u6392\u7248\u7cfb\u7edf\uff0c\u7528\u6237\u9700\u8981\u8f93\u5165\u7279\u5b9a\u7684\u4ee3\u7801\uff0c\u4fdd\u5b58\u5728\u540e\u7f00\u4e3a .tex \u7684\u6587\u4ef6\u4e2d\uff0c\u901a\u8fc7\u7f16\u8bd1\u5f97\u5230\u6240\u9700\u7684 pdf \u6587\u4ef6\u3002 \\(\\LaTeX\\) \u4f18\u79c0\u7684\u5927\u578b\u6587\u6863\u6392\u7248\u80fd\u529b\u548c\u6570\u5b66\u516c\u5f0f\u6e32\u67d3\u80fd\u529b\u662f\u5176\u80fd\u591f\u5e7f\u6cdb\u5e94\u7528\u7684\u539f\u56e0\u4e4b\u4e00\u3002\u7cfb\u7edf\u5b66\u4e60 \\(\\LaTeX\\) \u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4\uff0c\u8be6\u7ec6\u4e86\u89e3\u53ef\u4ee5\u53c2\u9605\u6258\u7ba1\u5728 CTAN \u7684\u4e2d\u8bd1\u7248\u4ecb\u7ecd lshort-zh-cn\u3002

\u7279\u70b9:

  • \u6a21\u7248\u7f16\u8f91\u597d\u4ee5\u540e\u7f16\u5199 10 \u9875\u4ee5\u5185\u4f5c\u4e1a\u5341\u5206\u5feb\u901f
  • \u901a\u8fc7\u5199 temp \u6587\u4ef6\u53ef\u4ee5\u5b9e\u73b0\u9879\u76ee\u7684\u9694\u79bb\uff0c tex \u76f8\u5173\u7684\u5305\u7ba1\u7406\u65b9\u4fbf
  • \u53cb\u597d\u7684\u7f16\u8f91\u4ea4\u4e92\u754c\u9762\uff0c\u53cc\u51fb pdf \u9884\u89c8\u4e2d\u7684\u5185\u5bb9\u53ef\u4ee5\u76f4\u63a5\u8df3\u8f6c\u5230\u4ee3\u7801
  • \u81ea\u52a8\u4fdd\u5b58\u6587\u6863\u5728\u4e91\u7aef\uff0c\u5168\u7a0b\u90fd\u5728\u7f51\u9875\u4e0a\u5b8c\u6210\uff0c\u4e0d\u4f1a\u6c61\u67d3\u672c\u5730\u73af\u5883
  • \u8bb8\u591a\u95ee\u9898 overleaf \u5b98\u65b9\u7ed9\u51fa\u4e86\u89e3\u7b54\u548c\u8303\u4f8b\uff0c\u4f8b\u5982\u600e\u4e48\u5d4c\u5165\u4f2a\u4ee3\u7801\u5757\u7b49
"},{"location":"plugins/android/","title":"Android Studio","text":"

\u672c\u6587\u4e3a\u4f60\u63a8\u8350\u9002\u7528\u4e8e Android Studio \u7684\u63d2\u4ef6\uff0c\u80fd\u591f\u6781\u5927\u7684\u6539\u5584\u4f60\u7684\u5f00\u53d1\u4f53\u9a8c\u3002

"},{"location":"plugins/android/#_1","title":"\u4e3b\u9898\u7c7b","text":""},{"location":"plugins/android/#atom-material-icons","title":"Atom Material Icons","text":"

\u8be5\u63d2\u4ef6\u5bf9\u56fe\u6807\u8fdb\u884c\u4e86\u4f18\u5316\u4ee5\u6539\u5584\u4f60\u7684\u754c\u9762\u7f8e\u89c2\u7a0b\u5ea6\u3002

"},{"location":"plugins/android/#material-theme-ui","title":"Material Theme UI","text":"

\u9002\u7528\u4e8e JetBrains IDE \u7684 Material \u4e3b\u9898\uff0c\u62e5\u6709\u9002\u7528\u4e8e\u767d\u5929\u548c\u9ed1\u591c\u7684\u591a\u4e2a\u4e3b\u9898\uff0c\u8ba9\u754c\u9762\u66f4\u52a0\u7f8e\u89c2\u3002

"},{"location":"plugins/android/#_2","title":"\u5de5\u5177\u7c7b","text":""},{"location":"plugins/android/#jsonbean","title":"JSON\u8f6cBean","text":"

JSON\u4f5c\u4e3a\u8f7b\u91cf\u7ea7\u8d44\u6599\u4ea4\u6362\u683c\u5f0f\u3002\u5728\u5f00\u53d1\u4e2d\u7ecf\u5e38\u88ab\u4f7f\u7528\uff0c\u5176\u4e2d\u4e00\u4e2a\u9700\u6c42\u5c31\u662f\u5c06 Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Bean \u5bf9\u8c61\u3002\u4e0b\u9762\u4e3b\u8981\u63a8\u8350\u4e24\u4e2a\u63d2\u4ef6\uff1a

  • GsonFormatPlus

    \u80fd\u5c06Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Java Bean

  • JSON To Kotlin Class \u200b(JsonToKotlinClass)\u200b

    \u80fd\u5c06Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Kotlin Bean

"},{"location":"plugins/android/#_3","title":"\u7ffb\u8bd1","text":"

Translation \u63d2\u4ef6\u6781\u5927\u7684\u65b9\u4fbf\u4e86\u82f1\u8bed\u57fa\u7840\u4e0d\u597d\u7684\u5f00\u53d1\u8005\u8fdb\u884c\u5f00\u53d1\u3002\u5176\u5177\u6709\u4ee5\u4e0b\u7279\u6027\uff1a

  • \u591a\u7ffb\u8bd1\u5f15\u64ce

    • \u8c37\u6b4c\u7ffb\u8bd1
    • \u5fae\u8f6f\u7ffb\u8bd1
    • \u6709\u9053\u7ffb\u8bd1
    • \u767e\u5ea6\u7ffb\u8bd1
    • \u963f\u91cc\u7ffb\u8bd1
    • DeepL \u7ffb\u8bd1
  • \u591a\u8bed\u8a00\u4e92\u8bd1

  • \u6587\u6863\u7ffb\u8bd1
  • \u8bed\u97f3\u6717\u8bfb
  • \u81ea\u52a8\u9009\u8bcd
  • \u81ea\u52a8\u5355\u8bcd\u62c6\u5206
  • \u5355\u8bcd\u672c
"},{"location":"plugins/browser/","title":"Browser","text":"

\u672c\u6587\u5e0c\u671b\u629b\u7816\u5f15\u7389\uff0c\u9f13\u52b1\u5927\u5bb6\u63d0\u51fa\u66f4\u591a\u65b9\u4fbf\u7684\u6d4f\u89c8\u5668\u63d2\u4ef6\u3002

"},{"location":"plugins/browser/#tampermonkey","title":"Tampermonkey","text":"

\u5b98\u7f51\uff1a https://www.tampermonkey.net/

\u5f88\u65b9\u4fbf\u7684\u811a\u672c\u7ba1\u7406\u5668\uff0c\u53ef\u4ee5\u5b89\u88c5\u4e00\u4e9b\u6269\u5c55\u5546\u5e97\u91cc\u6ca1\u6709\u7684\u5c0f\u811a\u672c\u3002

"},{"location":"plugins/browser/#simpread","title":"Simpread","text":"

\u5b98\u7f51\uff1a https://simpread.pro/

\u589e\u5f3a\u6d4f\u89c8\u5668\u9605\u8bfb\u4f53\u9a8c\uff0c\u63d0\u4f9b\u6de1\u5316\u5185\u5bb9\u65e0\u5173\u5143\u7d20\u4ee5\u589e\u52a0\u4e13\u6ce8\u7684\u805a\u7126\u6a21\u5f0f\u548c\u5b8c\u5168\u7eaf\u51c0\u7684\u9605\u8bfb\u6a21\u5f0f\uff1b\u53ef\u4ee5\u5bfc\u51fa\u7f51\u9875\u4e3a markdown \u7b49\u591a\u79cd\u683c\u5f0f\u5230\u672c\u5730\uff0c\u6216\u6388\u6743\u540e\u5bfc\u5165 notion \u3001onenote \u7b49\u7b14\u8bb0\u5e94\u7528\uff0c\u65b9\u4fbf\u5b58\u6863\u548c\u7a0d\u540e\u9605\u8bfb\u3002\u5b98\u65b9\u63d2\u4ef6\u4e2d\u5fc3\u8fd8\u6709\u8bb8\u591a\u76f8\u5173\u589e\u5f3a\uff0c\u4f46\u9ed8\u8ba4\u6a21\u5f0f\u4f53\u9a8c\u4e5f\u76f8\u5f53\u8212\u9002\u3002

"},{"location":"plugins/browser/#zotero-connector","title":"Zotero Connector","text":"

\u5b98\u7f51\uff1a https://www.zotero.org/download/connectors

\u4ece\u7f51\u9875\u4e0a\u76f4\u63a5\u4fdd\u5b58\u8bba\u6587\u81f3 Zotero \uff0c\u652f\u6301\u9009\u62e9\u4fdd\u5b58\u5206\u7c7b\u3002

"},{"location":"plugins/browser/#global-speed","title":"Global Speed","text":"

\u5b98\u7f51\uff1a https://github.com/polywock/globalSpeed

\u8c03\u8282\u7f51\u9875\u89c6\u9891\u64ad\u653e\u901f\u5ea6\uff0c\u4f7f\u7528\u7b80\u5355\u3002

"},{"location":"plugins/browser/#language-reactor","title":"Language Reactor","text":"

\u5b98\u7f51\uff1a https://www.languagereactor.com/

\u4e3aYoutube\u89c6\u9891\u63d0\u4f9b\u673a\u7ffb\u53cc\u8bed\u5b57\u5e55\uff0c\u5e76\u4e14\u652f\u6301\u5bfc\u51fa\u3002

"},{"location":"plugins/browser/#vimium","title":"Vimium","text":"

\u5b98\u7f51\uff1a https://github.com/philc/vimium

Vimium \u53d7\u5230 Vim \u7f16\u8f91\u5668\u7684\u542f\u53d1\uff0c\u8ba9\u4f60\u80fd\u591f\u629b\u5f03\u9f20\u6807\uff0c\u5b8c\u5168\u4f7f\u7528\u952e\u76d8\u5b8c\u6210\u6d4f\u89c8\u5668\u7684\u5bfc\u822a\u3001\u9875\u9762\u8df3\u8f6c\u3001\u9875\u9762\u641c\u7d22\u7b49\u64cd\u4f5c\u3002

"},{"location":"plugins/tabnine/","title":"Tabnine\u4f18\u79c0\u7684\u4ee3\u7801\u8865\u5168\u5de5\u5177(\u4e0d\u72af\u75c5\u7684\u65f6\u5019)","text":"

\u672c\u6587\u4e3a\u4f60\u63a8\u8350\u4ee3\u7801\u8865\u5168\u5de5\u5177tabnine\u7684\u4ecb\u7ecd\u540c\u65f6\u5c06\u548ccopilot\u7684\u533a\u522b\u5199\u51fa\uff0ccopilot\u7684\u5b89\u88c5\u5728\u8bc4\u8bba\u533a\u540e\u7eed\u8865\u5145\u3002

"},{"location":"plugins/tabnine/#_1","title":"\u5b89\u88c5","text":"

\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://www.tabnine.com/install/

\u5728\u8fd9\u4e2a\u4e0b\u8f7d\u9875\u9762\u4e2d\u53ef\u4ee5\u9009\u62e9\u81ea\u5df1\u6240\u4f7f\u7528\u7684\u4ee3\u7801\u7f16\u8f91\u5668\uff0c\u5bf9\u4e8e VSCode \u7528\u6237\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5728\u63d2\u4ef6\u641c\u7d22\u4e2d\u641c\u7d22tabnine\uff0c\u7136\u540e\u5b89\u88c5\u5373\u53ef\u3002

"},{"location":"plugins/tabnine/#chatgpt","title":"\u4ecb\u7ecd(\u672c\u6bb5\u6587\u5b57\u7531 ChatGPT \u751f\u6210)","text":"

TabNine \u662f\u4e00\u4e2a\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5b83\u53ef\u4ee5\u5728\u591a\u79cd\u7f16\u8f91\u5668\u548c IDE \u4e2d\u4f7f\u7528\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e VS Code\u3001Sublime Text\u3001PyCharm\u3001Vim\u3001Emacs \u7b49\u7b49\u3002\u4e0e\u4f20\u7edf\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\u4e0d\u540c\uff0cTabNine \u4e0d\u4ec5\u53ef\u4ee5\u6839\u636e\u5df2\u6709\u7684\u4ee3\u7801\u6bb5\u548c\u8bed\u6cd5\u89c4\u5219\u8fdb\u884c\u8865\u5168\uff0c\u800c\u4e14\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5b66\u4e60\u5927\u91cf\u7684\u4ee3\u7801\u5e93\u548c\u8bed\u8a00\u8bed\u6cd5\uff0c\u81ea\u52a8\u751f\u6210\u5168\u65b0\u7684\u4ee3\u7801\uff0c\u5927\u5927\u63d0\u9ad8\u7f16\u7801\u6548\u7387\u548c\u51c6\u786e\u6027\u3002

TabNine \u7684\u4f18\u70b9\u5305\u62ec\uff1a

  • \u51c6\u786e\u6027\u9ad8\uff1aTabNine \u901a\u8fc7\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u8bad\u7ec3\u5f97\u5230\uff0c\u53ef\u4ee5\u6839\u636e\u4ee3\u7801\u4e0a\u4e0b\u6587\u751f\u6210\u6700\u5408\u9002\u7684\u4ee3\u7801\u8865\u5168\u9009\u9879\u3002
  • \u8de8\u8bed\u8a00\u652f\u6301\uff1aTabNine \u652f\u6301\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\uff0c\u5305\u62ec Python\u3001JavaScript\u3001Java\u3001C++\u3001Go\u3001Ruby \u7b49\u7b49\u3002
  • \u5feb\u901f\u54cd\u5e94\uff1aTabNine \u7684\u8865\u5168\u54cd\u5e94\u901f\u5ea6\u975e\u5e38\u5feb\uff0c\u53ef\u4ee5\u8f7b\u677e\u5e94\u5bf9\u5927\u578b\u9879\u76ee\u548c\u590d\u6742\u7684\u4ee3\u7801\u7ed3\u6784\u3002
  • \u667a\u80fd\u9884\u6d4b\uff1aTabNine \u53ef\u4ee5\u6839\u636e\u4e0a\u4e0b\u6587\u548c\u5386\u53f2\u8bb0\u5f55\u667a\u80fd\u9884\u6d4b\u4e0b\u4e00\u4e2a\u53ef\u80fd\u7684\u4ee3\u7801\u8865\u5168\u9009\u9879\uff0c\u8ba9\u7f16\u7801\u66f4\u52a0\u987a\u7545\u548c\u9ad8\u6548\u3002
  • \u6613\u4e8e\u5b9a\u5236\uff1aTabNine \u652f\u6301\u7528\u6237\u81ea\u5b9a\u4e49\u914d\u7f6e\u548c\u6269\u5c55\uff0c\u53ef\u4ee5\u6839\u636e\u4e2a\u4eba\u9700\u6c42\u5b9a\u5236\u5316\u5de5\u5177\u3002
  • TabNine \u901a\u8fc7\u63d0\u4f9b\u9ad8\u8d28\u91cf\u7684\u4ee3\u7801\u8865\u5168\u9009\u9879\uff0c\u51cf\u5c11\u4e86\u7f16\u5199\u4ee3\u7801\u7684\u65f6\u95f4\u548c\u9519\u8bef\u7387\uff0c\u662f\u4e00\u4e2a\u6781\u5177\u4ef7\u503c\u548c\u5b9e\u7528\u6027\u7684\u7f16\u7a0b\u5de5\u5177\u3002
"},{"location":"plugins/tabnine/#copilot","title":"\u548ccopilot\u7684\u533a\u522b","text":"

TabNine \u548c Copilot \u90fd\u662f\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5b83\u4eec\u90fd\u53ef\u4ee5\u6839\u636e\u4e0a\u4e0b\u6587\u548c\u8bed\u6cd5\u89c4\u5219\u6765\u751f\u6210\u4ee3\u7801\u8865\u5168\u9009\u9879\uff0c\u63d0\u9ad8\u7f16\u7801\u6548\u7387\u548c\u51c6\u786e\u6027\u3002\u4f46\u662f\u5b83\u4eec\u4e4b\u95f4\u4e5f\u6709\u4e00\u4e9b\u4e0d\u540c\u4e4b\u5904\u3002

  • \u4ea7\u54c1\u80cc\u666f\uff1aTabNine \u662f\u7531 Codota \u516c\u53f8\u5f00\u53d1\u7684\uff0c\u800c Copilot \u5219\u662f\u7531 OpenAI \u516c\u53f8\u5f00\u53d1\u7684\u3002
  • \u8bad\u7ec3\u6570\u636e\uff1aTabNine \u8bad\u7ec3\u6570\u636e\u6765\u81ea\u4e8e GitHub \u4e0a\u7684\u516c\u5171\u4ee3\u7801\u5e93\u548c\u7528\u6237\u7684\u79c1\u6709\u4ee3\u7801\u5e93\uff0c\u800c Copilot \u4f7f\u7528\u7684\u662f GitHub \u4e0a\u516c\u5171\u7684\u4ee3\u7801\u5e93\u548c OpenAI \u81ea\u5df1\u7684\u5185\u90e8\u4ee3\u7801\u5e93\u3002
  • \u529f\u80fd\u7279\u70b9\uff1aTabNine \u91cd\u70b9\u5173\u6ce8\u4ee3\u7801\u8865\u5168\u548c\u667a\u80fd\u9884\u6d4b\u529f\u80fd\uff0c\u800c Copilot \u7684\u7279\u70b9\u5728\u4e8e\u80fd\u591f\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u7247\u6bb5\u548c\u51fd\u6570\uff0c\u751a\u81f3\u53ef\u4ee5\u6839\u636e\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u6765\u751f\u6210\u4ee3\u7801\u3002
  • \u5f00\u6e90\u7a0b\u5ea6\uff1aTabNine \u7684\u4ee3\u7801\u57fa\u672c\u5f00\u6e90\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u884c\u6269\u5c55\u548c\u5b9a\u5236\uff0c\u800c Copilot \u7531\u4e8e\u4f7f\u7528\u7684\u662f OpenAI \u7684 GPT \u7cfb\u5217\u6a21\u578b\uff0c\u76ee\u524d\u4e0d\u652f\u6301\u81ea\u4e3b\u5b9a\u5236\u548c\u5f00\u6e90\u3002

\u603b\u7684\u6765\u8bf4\uff0cTabNine \u548c Copilot \u90fd\u662f\u975e\u5e38\u6709\u7528\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5177\u6709\u5404\u81ea\u7684\u4f18\u70b9\u548c\u9002\u7528\u573a\u666f\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u5de5\u5177\u3002

"},{"location":"plugins/tabnine/#_2","title":"\u6548\u679c\u5982\u56fe","text":"

\u5b83\u662f\u4e2a\u52a8\u56fe\u634f\u5927\u5bb6\u53ef\u4ee5\u4f53\u9a8c\u4e0b\u563f\u563f

"},{"location":"software/Double%20Commander/","title":"Double Commander","text":"

\u514d\u8d39\u7684\u8de8\u5e73\u53f0\u5f00\u6e90\u6587\u4ef6\u7ba1\u7406\u5668\uff0c\u5b83\u7684\u7075\u611f\u6765\u81ea Total Commander \uff0c\u5e76\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b0\u7684\u60f3\u6cd5\uff08\u652f\u6301 Linux \uff09\u3002

"},{"location":"software/Pycharm/","title":"PyCharm","text":""},{"location":"software/Pycharm/#1pyhton","title":"1.\u9996\u5148\u6211\u4eec\u8981\u8fdb\u884cPyhton\u89e3\u91ca\u5668\u7684\u4e0b\u8f7d","text":"
print('Hello World')\n

Python \u4e0d\u80fd\u76f4\u63a5\u5728\u8ba1\u7b97\u673a\u4e2d\u8fd0\u884c\uff0c\u56e0\u6b64\u9700\u8981 Python \u8bed\u8a00\u7684\u8fd0\u884c\u73af\u5883\uff1a Python \u89e3\u6790\u5668

\u4e0b\u8f7d\u5730\u5740\uff1ahttps://www.python.org/downloads/release/python-379/ \u5f53\u7136\u4f60\u5b89\u88c53.8\u6216\u80053.9\u4e5f\u662f\u6ca1\u95ee\u9898\u7684

\u67e5\u627e\u76ee\u6807\u6587\u4ef6\uff1aWindows x86-64 executable installer -- \u5355\u51fb\u5373\u53ef\u4e0b\u8f7d\u3002(\u683c\u5f0f\u4e0d\u80fd\u627e\u9519)

"},{"location":"software/Pycharm/#2python","title":"2.Python\u89e3\u6790\u5668\u7684\u5b89\u88c5","text":"

\u7b2c\u4e00\u6b65\uff1a\u53cc\u51fb\u8fd0\u884c Python \u7684\u89e3\u6790\u5668\uff0c\u9009\u62e9 \u81ea\u5b9a\u4e49\u5b89\u88c5 \u4ee5\u53ca \u6dfb\u52a0 Python \u5230\u73af\u5883\u53d8\u91cf(\u8fd9\u4e00\u6b65\u975e\u5e38\u91cd\u8981)

\u7b2c\u4e8c\u6b65\uff1a\u9009\u62e9\u6240\u6709\u8981\u5b89\u88c5\u7684\u529f\u80fd\u83dc\u5355\uff0c\u9ed8\u8ba4\u5168\u90e8\u52fe\u9009

\u7b2c\u4e09\u6b65\uff1a\u8bbe\u7f6e Python \u89e3\u6790\u5668\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u5c3d\u91cf\u4e0d\u8981\u5b89\u88c5\u5728C\u76d8\uff0c\u4f46\u9700\u8981\u77e5\u9053\u81ea\u5df1\u5b89\u88c5\u7684\u4f4d\u7f6e

\u7b2c\u56db\u6b65\uff1a\u6d4b\u8bd5 Python \u89e3\u6790\u5668\u662f\u5426\u53ef\u4ee5\u4f7f\u7528 \u65b9\u6cd5\uff1a\u6309 Windows + R \uff0c\u8f93\u5165 cmd \uff0c\u6253\u5f00 Windows \u7684 DOS \u7a97\u53e3\uff0c\u8f93\u5165 python\uff08\u5168\u90e8\u5c0f\u5199\uff09,\u5f53\u51fa\u73b0\u4e0b\u56fe\u5c31\u6210\u529f\u4e86

\u4f7f\u7528exit()\u9000\u51fa

"},{"location":"software/Pycharm/#3-pythonpycharm202121","title":"3. Python\u5f00\u53d1\u5de5\u5177PyCharm(\u6211\u4e0b\u8f7d\u7684\u662f2021.2.1)\u65b0\u7248\u5bb9\u6613\u51fa\u73b0\u672a\u77e5\u95ee\u9898","text":"

\u5728\u4e0d\u6d89\u53ca\u5230\u4eba\u5de5\u667a\u80fd\u7684\u65b9\u5411\uff0c\u63a8\u8350\u4e0d\u7528\u5b89\u88c5 anaconda \uff0c\u76f4\u63a5\u5b89\u88c5 PyCharm \u5373\u53ef\u3002\u5b83\u662f\u76ee\u524d\u529f\u80fd\u6700\u5f3a\u5927\u7684 IDE

PyCharm \u4e00\u5171\u6709\u4e24\u4e2a\u7248\u672c\uff1a\u4e13\u4e1a\u7248\uff08\u6536\u8d39\uff09 \u4e0e \u793e\u533a\u7248\uff08\u514d\u8d39\u3001\u5f00\u6e90\uff09\u3002\u6211\u4eec\u9009\u62e9\u540e\u8005

\u7b2c\u4e00\u6b65\uff1a\u4e0b\u8f7d PyCharm \u3002https://www.jetbrains.com/pycharm/download/

\u7b2c\u4e8c\u6b65\uff1a\u8bbe\u7f6e\u8f6f\u4ef6\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u4e0d\u7528\u5b89\u88c5\u5728 C \u76d8

\u7b2c\u4e09\u6b65\uff1aPyCharm \u57fa\u672c\u8bbe\u7f6e\u3002\u5982\u4e0b\u56fe\u8bbe\u7f6e\uff0c\u4e0d\u5efa\u8bae\u628a Pycharm \u6dfb\u52a0\u5230\u73af\u5883\u53d8\u91cf\u91cc\u9762

"},{"location":"software/Pycharm/#4python","title":"4.\u521b\u5efaPython\u9879\u76ee","text":"

\u7b2c\u4e00\u6b65\uff1a\u521b\u5efa\u9879\u76ee (Pycharm \u4e0d\u8981\u6c49\u5316\uff01\u4e0d\u8981\u6c49\u5316\uff01\u4e0d\u8981\u6c49\u5316\uff01)

\u70b9\u5f00\u56fe\u6807\uff0c\u521d\u6b21\u70b9\u5f00\u4f1a\u6709\u4e00\u4e2a\u63d0\u793a\u7a97\u53e3\uff0c\u4e0d\u7528\u7ba1\u4ed6\uff0c\u70b9\u51fb New Project

\u7b2c\u4e8c\u6b65\uff1a\u8bbe\u7f6e\u9879\u76ee\u8def\u5f84\uff0c\u5c3d\u91cf\u653e\u5230 C \u76d8\u4ee5\u5916\uff08\u975e\u5e38\u91cd\u8981\uff01\uff01\uff09

\u4f60\u4f1a\u770b\u5230\u7c7b\u4f3c\u5982\u4e0b\u56fe\u7247\u3002(\u56e0\u4e3a\u6211\u4f7f\u7528\u7684\u662f\u865a\u62df\u673a\u5b89\u88c5\uff0c\u53ea\u7528\u4e8e\u5f00\u53d1 pycharm \uff0c\u53ea\u6709\u4e00\u4e2a\u76d8\u6240\u4ee5\u653e\u5728\u4e86 C \u76d8)

\u5176\u4e2d base interpreter \u4f1a\u81ea\u52a8\u611f\u77e5\u5230 python.exe \u7684\u4f4d\u7f6e\uff0c\u6ca1\u611f\u77e5\u5230\u53ef\u4ee5\u624b\u52a8\u5b9a\u4f4d(\u627e\u5230 python \u5b89\u88c5\u8def\u5f84\u7136\u540e\u9009\u5b9a python.exe )

\u65b0\u5efa\u6587\u4ef6\u5e76\u4e66\u5199\u4ee3\u7801

print('Hello World')\n

\u8fdb\u884c\u8fd0\u884c\uff0c\u53f3\u4e0a\u89d2\u7eff\u8272\u7684\u4e09\u89d2\u7b26\u53f7 Run \u3002

\u7ed3\u679c\u5982\u4e0b\uff0c\u5c31\u5b8c\u6210\u5566\u3002

"},{"location":"software/TiddlyWiki/","title":"TiddlyWiki-\u77e5\u8bc6\u7ba1\u7406\u6846\u67b6","text":"

\u5b98\u7f51\uff1ahttps://tiddlywiki.com/

\u56fd\u9645\u4ea4\u6d41\u793e\u533a\uff1ahttps://talk.tiddlywiki.org/

\u5f88\u4e45\u5f88\u4e45\u4ee5\u524d\uff0c\u5728\u4e00\u6761\u6cb3\u6d41\u91cc\uff0c\u751f\u6d3b\u7740\u8bb8\u591a\u8bb8\u591a\u7684\u5c0f\u9c7c\u513f\uff08Tiddlers\uff09\uff0c\u5b83\u4eec\u5feb\u6d3b\u5730\u5728\u6545\u4e8b\u6cb3\uff08Story River\uff09\u91cc\u6e38\u6765\u6e38\u53bb\u3002\u8fd9\u4e9b\u5c0f\u9c7c\u513f\u6bcf\u4e00\u4e2a\u90fd\u6709\u81ea\u5df1\u7684\u540d\u5b57\uff08\u6761\u76ee\u540d\uff09\uff0c\u81ea\u5df1\u7684\u79cd\u7c7b\uff08\u5185\u5bb9\u7c7b\u578b\uff09\uff0c\u5b83\u643a\u5e26\u7684\u4fe1\u606f\u7ec4\u6210\u4e86\u9c7c\u513f\u7f8e\u4e3d\u7684\u8eab\u4f53\u4e0e\u9aa8\u67b6\uff0c\u9644\u52a0\u7684\u5b57\u6bb5\u6784\u6210\u4e86\u5b83\u7f8e\u4e3d\u7684\u9cde\u7247\u3002\u2014\u2014TiddlyWiki\u7b80\u6613\u6559\u7a0b\u3002

"},{"location":"software/TiddlyWiki/#1","title":"1. \u4e2d\u6587\u793e\u533a","text":"
  • \u592a\u5fae\u4e2d\u6587\u6559\u7a0b\uff1ahttps://tw-cn.netlify.app/
  • \u592a\u5fae\u4e2d\u6587Github\u793e\u533a\uff1ahttps://github.com/tiddly-gittly/TiddlyWiki-Chinese-Tutorial
  • \u793e\u533a\u4e2d\u6587\u6559\u7a0b\u8d44\u6e90\u94fe\u63a5\uff08\u4e30\u5bcc\u4e14\u53cb\u597d\u7684\u521d\u5b66\u8005\u8d44\u6e90\uff09\uff1ahttps://tw-cn.netlify.app/#%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5
"},{"location":"software/TiddlyWiki/#2","title":"2. \u4ecb\u7ecd\u592a\u5fae","text":"
  1. \u300c\u592a\u5fae\u300d\u662f\u6211\u4eec\u5bf9 TiddlyWiki \u7684\u4e2d\u6587\u79f0\u547c\uff0cTiddlyWiki\u662f\u4e00\u6b3e\u6781\u5176\u5f3a\u5927\u53c8\u6781\u5177\u62d3\u5c55\u6027\u7684\u4e2a\u4eba Wiki \u7cfb\u7edf\u3002

  2. \u4e3a\u4ec0\u4e48\u628a TiddlyWiki \u7ffb\u8bd1\u6210\u300c\u592a\u5fae\u300d\uff1f\u56e0\u4e3a\u53d7\u5230 @pimgeek \u7684\u542f\u53d1\uff1aTiddlyWiki \u53ef\u4ee5\u5e72\u5f88\u591a\u7ec6\u81f4\u8f7b\u91cf\u7684\u5de5\u4f5c\uff0c\u4f46\u4e5f\u4ece\u4e0d\u9650\u5236\u7528\u6cd5\uff0c\u53ef\u4ee5\u65e0\u9650\u7ec4\u5408\u53e0\u52a0\u3002\u6545\u4ee5\u5176\u9996\u5b57\u6bcd\u97f3\u8bd1\u4e3a\u300c\u592a\u5fae\u300d\uff0cTiddlyWiki \u53ef\u4ee5\u79f0\u4e3a\u300c\u592a\u5fae\u7b14\u8bb0\u300d\u300c\u592a\u5fae\u4e07\u80fd\u62bd\u5c49\u300d\u300c\u592a\u5fae\u5361\u7247\u76d2\u300d\u2026\u2026

  3. \u592a\u5fae\u5177\u6709\u591a\u79cd\u5f62\u6001\u3002\u62e5\u6709HTML\u6587\u4ef6\u4e0e\u6587\u4ef6\u5939 2\u79cd\u5b58\u50a8\u5f62\u5f0f\u3002\u684c\u9762\u6d4f\u89c8\u5668\uff0c\u670d\u52a1\u7aef\u8f6f\u4ef6\uff0c\u5e94\u7528\u8f6f\u4ef6 3\u79cd\u4f7f\u7528\u65b9\u5f0f\u3002\u53ef\u4ee5\u5728\u4efb\u610f\u5e73\u53f0\u4e2d\u4f7f\u7528\uff0c\u53ea\u6709\u4f60\u60f3\u4e0d\u5230\u7684\uff0c\u6ca1\u6709\u505a\u4e0d\u5230\u7684\u3002

"},{"location":"software/TiddlyWiki/#3","title":"3. \u592a\u5fae\u80fd\u505a\u4ec0\u4e48","text":"
  • \u60a8\u66fe\u611f\u89c9\u4eba\u7c7b\u7684\u5927\u8111\u662f\u6709\u6781\u9650\u7684\u5417\uff1f\u611f\u89c9\u5b83\u4e0d\u8db3\u4ee5\u5bb9\u7eb3\u4e00\u5207\u4f60\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\uff1f

  • \u6b22\u8fce\u4f7f\u7528 TiddlyWiki\uff0c\u4e00\u4e2a\u72ec\u7279\u7684\u975e\u7ebf\u6027\u7b14\u8bb0\u672c\uff0c\u7528\u4e8e\u622a\u53d6\u3001\u7ba1\u7406\u548c\u590d\u7528\u590d\u6742\u7684\u4fe1\u606f\u3002

  • \u7528\u5b83\u6765\u4fdd\u7559\u60a8\u7684\u5f85\u529e\u6e05\u5355\u3001\u8ba1\u5212\u4e00\u7bc7\u6563\u6587\u6216\u4e00\u90e8\u5c0f\u8bf4\u3001\u6216\u5b89\u6392\u60a8\u7684\u5a5a\u793c\u3002\u8bb0\u5f55\u6bcf\u4e2a\u95ea\u8fc7\u60a8\u8111\u4e2d\u7684\u60f3\u6cd5\uff0c\u6216\u521b\u5efa\u4e00\u4e2a\u7075\u6d3b\u548c\u53cd\u5e94\u8fc5\u901f\u7684\u7f51\u7ad9\u3002

"},{"location":"software/TiddlyWiki/#4-tiddlywiki","title":"4. \u4f7f\u7528TiddlyWiki\u6784\u5efa\u672c\u5730\u4e2a\u4eba\u77e5\u8bc6\u5e93","text":"

\u975e\u7ebf\u6027\u7b14\u8bb0\uff0c\u8fd9\u5f88\u50cf\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u7ef4\u4e60\u60ef\uff0c\u4e0d\u8fde\u7eed\u7684\u3001\u7247\u6bb5\u7684\u4fe1\u606f\uff0c\u901a\u8fc7\u4e00\u4e9b\u7ebf\u7d22\u8054\u7cfb\u5728\u4e00\u8d77\u3002\u6b63\u5982TiddlyWiki\u7684\u6761\u76ee\u8bb0\u8f7d\u7684\u4fe1\u606f\uff0c\u901a\u8fc7\u6807\u7b7e\u6216\u8005\u5b57\u6bb5\u53c8\u6216\u8005\u94fe\u63a5\u4e0e\u5d4c\u5165\u76f8\u4e92\u8054\u7cfb\u5728\u4e00\u8d77\u3002

"},{"location":"software/TiddlyWiki/#41-tidgi","title":"4.1 TidGi\uff08\u592a\u8bb0\uff09","text":"
  • \u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://github.com/tiddly-gittly/TidGi-Desktop

  • TidGi\uff0c\u5168\u5e73\u53f0\u7684\u684c\u9762\u7aef\u7535\u8111\u652f\u6301\uff0c\u5feb\u901f\u5b89\u88c5\u4f7f\u7528\u3002\u5185\u7f6eItonNote TiddlyWiki\u6a21\u677f\uff08\u9884\u88c5\u5e38\u7528\u63d2\u4ef6\uff09\u3002\u7701\u53bb\u914d\u7f6e\u63d2\u4ef6\u7684\u8fc7\u7a0b\u3002

"},{"location":"software/TiddlyWiki/#42-tiddlydesktop","title":"4.2 TiddlyDesktop","text":"
  • TiddlyDesktop\u3002\u5168\u5e73\u53f0\u684c\u9762\u7aef\u8f6f\u4ef6\uff0ctiddlywiki\u6a21\u677f\u53ef\u4ee5\u5728Tiddlystow\u4e2d\u9009\u4e00\u4e2a\u4f7f\u7528\uff0c\u6bd4\u8f83\u63a8\u8350\u7684\u662ftiddlywiki XP\u4ee5\u53ca\u9002\u914dTidGi\u5355\u6587\u4ef6wiki\u3002TiddlyDesktop\u4e3b\u8981\u662f\u7528\u4e8e\u7ba1\u7406\u5355\u4e2atiddlywiki\u7684\u5de5\u5177\uff0c\u800cTidGi\u662f\u4e00\u4e2awiki\u5c31\u662f\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u91c7\u7528all in one\u7684\u601d\u8def\u3002

  • \u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://github.com/TiddlyWiki/TiddlyDesktop/releases

"},{"location":"software/TiddlyWiki/#43-timimi","title":"4.3 Timimi","text":"
  • Timimi\uff0c\u4e00\u4e2a\u6d4f\u89c8\u5668\u63d2\u4ef6\u4e0e\u4f3a\u670d\u8f6f\u4ef6\u914d\u5957\u4f7f\u7528\u7684\u8f6f\u4ef6\u3002\u4f18\u70b9\u662f\u4f7f\u7528\u65b9\u4fbf\uff0c\u5373\u70b9\u5373\u7528\uff0c\u7f3a\u70b9\u662f\uff0c\u914d\u7f6e\u6b65\u9aa4\u6bd4\u524d\u4e24\u4e2a\u591a\u4e00\u70b9\u3002

  • \u53ef\u4ee5\u628a\u4e00\u4e2aHTML\u5355\u6587\u4ef6\u7248wiki\u4f5c\u4e3a\u8d85\u7ea7\u7075\u6d3b\u7684word\u6587\u6863\u4f7f\u7528\u3002\u5373\u5373\u70b9\u5373\u7528\u3002

  • \u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://ibnishak.github.io/Timimi/

"},{"location":"software/TiddlyWiki/#44-nodejs","title":"4.4 NodeJS\u73af\u5883","text":"
  • \u6700\u540e\u4e00\u4e2aNode.js\uff0c\u9002\u7528\u4e8e\u5bf9\u547d\u4ee4\u884c\u5de5\u5177\u3001JS\u4ee5\u53caNodeJS\u6709\u4e00\u5b9a\u4e86\u89e3\u7684\u7528\u6237\u3002

  • \u8fd0\u884c\u5728NodeJS\u73af\u5883\u7684TiddlyWiki\uff0c\u652f\u6301\u591a\u7528\u6237\u540c\u65f6\u4f7f\u7528/\u7f16\u8f91\u76f8\u540c\u7684wiki\u7684\u63d2\u4ef6\uff1aTW5-Bob\uff0c\u4e0e\u6b64\u518d\u8fdb\u4e00\u6b65\u5c01\u88c5\u4e86TW5-BobEXE\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0b\u8f7d\u5230\u4f60\u7684\u7535\u8111\u4e0a\u8fd0\u884c\u3002

"},{"location":"software/antlr/","title":"Antlr","text":"

\u5b98\u7f51\uff1ahttps://www.antlr.org/

ANTLR(ANother-Tool-for-Language-Recognition)\u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684\u8bed\u6cd5\u5206\u6790\u5668\u751f\u6210\u5668\uff0c\u7528\u4e8e\u8bfb\u53d6\u3001\u5904\u7406\u3001\u6267\u884c\u6216\u7ffb\u8bd1\u7ed3\u6784\u5316\u6587\u672c\u6216\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u5b83\u88ab\u5e7f\u6cdb\u7528\u4e8e\u6784\u5efa\u8bed\u8a00\u3001\u5de5\u5177\u548c\u6846\u67b6\u3002ANTLR\u6839\u636e\u8bed\u6cd5\u751f\u6210\u4e00\u4e2a\u89e3\u6790\u5668\uff0c\u8be5\u89e3\u6790\u5668\u53ef\u4ee5\u6784\u5efa\u548c\u904d\u5386\u89e3\u6790\u6811

"},{"location":"software/antlr/#_1","title":"\u5b89\u88c5","text":"
  • \u5b98\u65b9\u6307\u5bfc download guide
"},{"location":"software/antlr/#example","title":"Example","text":"

example.g4

// specific grammar name\ngrammar example;\n// for non-terminal, star with lower-case letter\n\n// '*' \u4ee3\u8868\u8be5\u4ea7\u751f\u5f0f\u51fa\u73b00\u6b21\u6216\u4ee5\u4e0a\n// '+' \u4ee3\u8868\u81f3\u5c11\u51fa\u73b0\u4e00\u6b21\n// \u4e0b\u4f8b\u5c06\u4f1a\u88ab\u89e3\u6790\u6210vector<number>\naddExp\n: number ('+' number)*\n;\n\n// \u53ef\u4ee5\u901a\u8fc7\u5728\u4ea7\u751f\u5f0f\u540e # nickname\n// \u521b\u5efa\u4e00\u4e2a\u522b\u540d\u7528\u6765\u5206\u6790\u540c\u540d\u7684\u4e0d\u540c\u60c5\u51b5\u4e0b\u7684\u4ea7\u751f\u5f0f\nnumber\n: IntLiteral # number1\n| FloatLiteral # number2\n;\n\n// for terminal, star with lower-case letter\nIntLiteral\n: [0-9]+\n| ('0x'|'0X')[0-9a-fA-F]+\n;\n\n// '?' \u4ee3\u8868\u8be5\u4ea7\u751f\u5f0f\u53ef\u80fd\u5b58\u5728\uff0c\u82e5\u5b58\u5728\u4ec5\u51fa\u73b0\u4e00\u6b21\nFloatLiteral\n: ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?\n| ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?\n;\n

shell command

antlr -Dlanguage=Cpp -no-listener -visitor example.g4\n

exampleVisitor.h

#include \"exampleBaseVisitor.h\"\n\nclass ExampleVisitor : public exampleBaseVisitor {\nvirtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;\nvirtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;\n};\n// Access string of current node by `ctx->getText()`\n// Visit `number` node of `addExp` by `ctx->number()`\n// then you can override visit-function to build your own parser !\n

"},{"location":"software/antlr/#_2","title":"\u53c2\u8003","text":"
  • \u5b98\u65b9\u4ed3\u5e93 antlr repository

  • \u5b98\u65b9\u6587\u6863 antlr official doc

"},{"location":"software/code-debug/","title":"code-debug","text":"

\u5b98\u7f51: https://github.com/chenzhiy2001/code-debug/

code-debug \u662f\u4e00\u4e2a\u652f\u6301Rust\u8bed\u8a00\u7684\u6e90\u4ee3\u7801\u7ea7\u5185\u6838\u8c03\u8bd5\u5de5\u5177. \u73b0\u5728\u53ef\u4ee5\u8c03\u8bd5rCore-Tutorial-v3\u64cd\u4f5c\u7cfb\u7edf\uff0c\u652f\u6301\u4ece\u5185\u6838\u6001\u8ddf\u8e2a\u5230\u7528\u6237\u6001. \u6700\u8fd1\u7684\u5de5\u4f5c\u662f\uff0c\u5229\u7528eBPF\u6280\u672f\u5b9e\u73b0\u66f4\u4e30\u5bcc\uff0c\u66f4\u9c81\u68d2\u7684\u8ddf\u8e2a\u529f\u80fd.

"},{"location":"software/eunomia-bpf/","title":"eunomia-bpf: \u7b80\u5316\u548c\u589e\u5f3a eBPF \u4e0e CO-RE1 \u548c WebAssembly2","text":"

\u4e00\u4e2a\u7f16\u8bd1\u5668\u548c\u8fd0\u884c\u65f6\u6846\u67b6\uff0c\u4ee5\u5e2e\u52a9\u60a8\u5c3d\u53ef\u80fd\u8f7b\u677e\u5730\u6784\u5efa\u548c\u5206\u53d1 eBPF \u7a0b\u5e8f\u3002

"},{"location":"software/eunomia-bpf/#_1","title":"\u4ecb\u7ecd","text":"

eunomia-bpf \u662f\u4e00\u4e2a\u52a8\u6001\u52a0\u8f7d\u5e93/\u8fd0\u884c\u65f6\u548c\u7f16\u8bd1\u5de5\u5177\u94fe\u6846\u67b6\uff0c\u65e8\u5728\u5e2e\u52a9\u60a8\u66f4\u8f7b\u677e\u5730\u6784\u5efa\u548c\u5206\u53d1 eBPF \u7a0b\u5e8f\u3002

\u4f7f\u7528 eunomia-bpf\uff0c\u60a8\u53ef\u4ee5\uff1a

  • \u7b80\u5316\u7f16\u5199 eBPF \u7a0b\u5e8f\uff1a
  • \u7b80\u5316\u6784\u5efa CO-RE1 libbpf eBPF \u5e94\u7528\u7a0b\u5e8f\uff1a\u4ec5\u7f16\u5199 eBPF \u5185\u6838\u4ee3\u7801\uff0c\u5e76\u81ea\u52a8\u4ece\u5185\u6838\u4e2d\u4f7f\u7528 perf event \u6216 ring buffer \u81ea\u52a8\u8f93\u51fa\u91c7\u6837\u6570\u636e\u5230\u5185\u6838\u6001\u3002
  • \u81ea\u52a8\u91c7\u6837 \u6765\u81ea hash mpas \u7684\u6570\u636e\uff0c\u5e76\u5728\u7528\u6237\u7a7a\u95f4\u4e2d\u6253\u5370 hists\uff08\u76f4\u65b9\u56fe\u7b49\u4fe1\u606f\uff09\u3002
  • \u81ea\u52a8\u751f\u6210 \u5e76\u914d\u7f6e eBPF \u7a0b\u5e8f\u7684 \u547d\u4ee4\u884c\u53c2\u6570\u3002
  • \u60a8\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528 BCC \u548c libbpf \u7b49\u591a\u79cd\u683c\u5f0f\u7f16\u5199\u5185\u6838\u90e8\u5206\u3002
  • \u4f7f\u7528 Wasm2 \u6784\u5efa eBPF \u7a0b\u5e8f\uff1a\u53c2\u89c1 Wasm-bpf \u9879\u76ee
  • \u5728\u4f7f\u7528 C/C++\u3001Rust\u3001Go\u2026\u7b49\u591a\u79cd\u8bed\u8a00\uff0c\u4f7f\u7528 Wasm-bpf \u5e93\u548c\u5de5\u5177\u94fe\u6765\u4f7f\u7528 Wasm \u7f16\u5199\u548c\u8fd0\u884c eBPF\uff0c\u8986\u76d6\u4ecetracing\u3001networking\u3001security\u5230\u5176\u4ed6\u7528\u4f8b\u3002
  • \u7b80\u5316\u5206\u53d1 eBPF \u7a0b\u5e8f\uff1a
  • \u4e00\u4e2a\u5de5\u5177\u7528\u4e8e\u5c06\u9884\u7f16\u8bd1\u7684 eBPF \u7a0b\u5e8f\u4f5c\u4e3a Wasm OCI \u955c\u50cf\u63a8\u9001\u3001\u62c9\u53d6\u6216\u8fd0\u884c
  • \u5728\u4e0d\u9700\u8981\u91cd\u65b0\u7f16\u8bd1 eBPF \u7a0b\u5e8f\u3001\u4e0d\u9650\u5236\u67b6\u6784\u548c\u5185\u6838\u7248\u672c\u7684\u60c5\u51b5\u4e0b\uff0c\u57281 \u884c bash\u4e2d\u4ece \u4e91\u7aef\u5b58\u50a8\u5e93 \u6216 URL \u8fd0\u884c eBPF \u7a0b\u5e8f\u3002
  • \u52a8\u6001\u52a0\u8f7d\u5e26\u6709 JSON \u914d\u7f6e\u6587\u4ef6\u6216 Wasm \u7528\u6237\u6001\u63a7\u5236\u548c\u6570\u636e\u5904\u7406\u6a21\u5757\u7684 eBPF \u7a0b\u5e8f\u3002

\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u89c1 documents/introduction.md\u3002

"},{"location":"software/eunomia-bpf/#eunomia-bpf-ebpf","title":"eunomia-bpf \u63d0\u4f9b\u4e86\u5927\u91cf\u6559\u7a0b\u548c\u793a\u4f8b\u5e94\u7528\uff0c\u5e2e\u52a9\u5165\u95e8 eBPF \u7a0b\u5e8f\u5f00\u53d1","text":"
  • Github \u6a21\u677f\uff1aeunomia-bpf/ebpm-template
  • \u793a\u4f8b bpf \u7a0b\u5e8f\uff1aexamples/bpftools
  • eBPF \u5f00\u53d1\u6559\u7a0b\uff1aeunomia-bpf/bpf-developer-tutorial

\u60a8\u53ef\u4ee5\u4f7f\u7528\u4e00\u884c bash \u4ece\u4e91\u7aef\u4e0b\u8f7d\u9884\u7f16\u8bd1\u7684 eBPF \u7a0b\u5e8f\u5e76\u5c06\u5176\u8fd0\u884c\u5230\u5185\u6838\u4e2d\uff1a

# \u4ece https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli \u4e0b\u8f7d ecli \u8fd0\u884c\u65f6\n$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli\n$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # \u4ece url \u8fd0\u884c\u9884\u7f16\u8bd1\u7684 ebpf \u4ee3\u7801\n$ sudo ./ecli sigsnoop:latest # \u76f4\u63a5\u4f7f\u7528\u540d\u79f0\u8fd0\u884c\uff0c\u5e76\u4ece\u6211\u4eec\u7684\u4ed3\u5e93\u4e0b\u8f7d\u6700\u65b0\u7248\u672c bpf \u5de5\u5177\n
  1. CO-RE\uff1aCompile Once \u2013 Run Everywhere \u21a9\u21a9

  2. WebAssembly \u6216 Wasm\uff1ahttps://webassembly.org/\u00a0\u21a9\u21a9

"},{"location":"software/fzf/","title":"Fzf","text":""},{"location":"software/fzf/#_1","title":"\u7b80\u4ecb","text":"

\u4ed3\u5e93\u5730\u5740\uff1ahttps://github.com/junegunn/fzf

FZF \u662f\u4e00\u6b3e\u4f7f\u7528 Go \u7f16\u5199\u7684\u4ea4\u4e92\u5f0f CLI \uff0c\u53ef\u7528\u6765\u67e5\u627e\u4efb\u4f55\u5217\u8868\u5185\u5bb9\u3001\u6587\u4ef6\u3001\u5386\u53f2\u6307\u4ee4\u3001\u8fdb\u7a0b\u3001host \u540d\u3001\u4e66\u7b7e\u6216 Git commit \u7b49\u5185\u5bb9\u3002

"},{"location":"software/fzf/#_2","title":"\u5b89\u88c5","text":""},{"location":"software/fzf/#macos","title":"macOS","text":"

\u5bf9\u4e8e macOS \uff0c\u63a8\u8350\u4f7f\u7528 Homebrew \u8fdb\u884c\u5b89\u88c5\uff1a

brew install fzf\n
"},{"location":"software/fzf/#linux","title":"Linux","text":"

\u5728 Linux \u53d1\u884c\u7248\u4e0a\uff0c\u53ef\u4f7f\u7528\u4e0d\u540c\u7684\u5305\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\uff0c\u4f8b\u5982\uff1a

Debian/Ubuntu(Apt)\uff1a

sudo apt install fzf\n

ArchLinux(Pacman)\uff1a

sudo pacman -S fzf\n
"},{"location":"software/fzf/#windows","title":"Windows","text":"

\u5e76\u4e0d\u63a8\u8350\u5728 Windows \u4e2d\u4f7f\u7528 FZF \u3002Windows \u53ef\u4f7f\u7528 Everything \u8fdb\u884c\u641c\u7d22\u3002

Windows\u4e0b\u53ef\u4f7f\u7528 Scoop \u8fdb\u884c\u5b89\u88c5\u4f7f\u7528\u3002

scoop install fzf\n
"},{"location":"software/fzf/#_3","title":"\u7b80\u5355\u4f7f\u7528","text":""},{"location":"software/fzf/#_4","title":"\u6587\u4ef6\u641c\u7d22","text":"

\u76f4\u63a5\u6267\u884c FZF \uff0c\u6253\u5f00\u6587\u4ef6\u641c\u7d22\u529f\u80fd\u3002

fzf\n

\u5728\u6b64\u6a21\u5f0f\u4e0b\uff0c\u7528\u6237\u53ef\u8f93\u5165\u7279\u5b9a\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u540d\uff0cFZF \u5c06\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u6267\u884c\u67e5\u627e\uff0c\u5e76\u663e\u793a\u51fa\u6307\u5b9a\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u76f8\u5bf9\u8def\u5f84\u3002

\u4f7f\u7528\u5feb\u6377\u952e Ctrl+J \u6216 Ctrl+N \u53ef\u5411\u4e0b\u6eda\u52a8\u5217\u8868\uff1b Ctrl+K \u6216 Ctrl+P \u53ef\u5411\u4e0b\u6eda\u52a8\u5217\u8868\u3002 \u4f7f\u7528 Enter \u9009\u4e2d\u6761\u76ee\u5e76\u9000\u51fa FZF\uff0cCtrl+C \u3001Ctrl+G \u6216 Esc \u53ef\u9000\u51fa FZF \u800c\u4e0d\u8fdb\u884c\u9009\u62e9\u3002

"},{"location":"software/fzf/#vim","title":"\u4f5c\u4e3a Vim \u63d2\u4ef6","text":"

FZF \u53ef\u4f5c\u4e3a Vim \u7684\u63d2\u4ef6\u4f7f\u7528\uff0c\u65b9\u4fbf\u5feb\u901f\u67e5\u627e\u9700\u8981\u7f16\u8f91\u7684\u6587\u4ef6\u3002

\u5728\u672c\u4f8b\u4e2d\uff0c\u4f7f\u7528 vim-plug \u63d2\u4ef6\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\uff1a \u7f16\u8f91 ~/.vimrc \u6587\u4ef6\uff0c\u5728 call plug#begin() \u4e0b\u6dfb\u52a0\u5982\u4e0b\u884c\uff1a

Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }\n

\u91cd\u65b0\u52a0\u8f7d .vimrc \u6587\u4ef6\uff1a

source ~/.vimrc\n

\u6253\u5f00 vim \uff0c\u5e76\u6267\u884c :PlugInstall \u7528\u4e8e\u5b89\u88c5\u63d2\u4ef6\u3002

"},{"location":"software/fzf/#_5","title":"\u66f4\u591a\u4fe1\u606f","text":""},{"location":"software/fzf/#_6","title":"\u4f18\u70b9","text":"
  1. \u672c\u5de5\u5177\u4f7f\u7528 Go \u7f16\u5199\uff0c\u4e0d\u9700\u5176\u4ed6\u4f9d\u8d56
  2. \u6027\u80fd\u5f3a\u608d\uff0c\u641c\u7d22\u6548\u7387\u9ad8
  3. \u529f\u80fd\u4e30\u5bcc\uff0c\u53ef\u89c6\u5316\u754c\u9762(TUI)\u6613\u4e8e\u64cd\u4f5c
  4. \u53ef\u5bf9\u63a5\u8bf8\u591a\u5de5\u5177(\u4f8bVim\u3001tmux \u7b49)
"},{"location":"software/gdbdashboard/","title":"GDB-dashboard","text":""},{"location":"software/gdbdashboard/#_1","title":"\u7b80\u4ecb","text":"

\u4f7f\u7528 python \u914d\u7f6e\u4e86 gdb \u8c03\u8bd5\u754c\u9762\uff0c\u5b8c\u5168\u53ef\u4ee5\u81ea\u5df1\u5199\u4ee3\u7801\u53bb\u5b9a\u4e49\u6574\u4e2a\u8c03\u8bd5\u754c\u9762\u53ef\u4ee5\u8bf4\u662f\u582a\u6bd4 IDE \uff0c\u663e\u793a\u4e5f\u975e\u5e38\u597d\u770b\uff0c\u5b8c\u5168\u57fa\u4e8e\u7ec8\u7aef,\u4f5c\u4e3a\u5e95\u5c42\u7684\u8c03\u8bd5\u8f6f\u4ef6\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u66f4\u597d\u7684\u67e5\u770b\u53d8\u91cf\u3001\u5bc4\u5b58\u5668\u3001\u5355\u6b65\u6267\u884c\u7b49\u3002

"},{"location":"software/gdbdashboard/#linux","title":"\u5b89\u88c5(linux\u73af\u5883)","text":"
  • \u5f00\u6e90\u5730\u5740 https://github.com/cyrus-and/gdb-dashboard.git

  • \u83b7\u53d6

wget -P ~ https://git.io/.gdbinit #\u5982\u679c\u7f51\u901f\u8f83\u6162\u53ef\u4ee5\u76f4\u63a5\u65b0\u5efa\u540c\u540d\u6587\u4ef6.gdbinit\u4e4b\u540e\u590d\u5236\u7c98\u8d34\u8fc7\u6765\n
  • \u6548\u679c\u56fe
"},{"location":"software/gdbdashboard/#_2","title":"\u63a8\u8350\u7406\u7531","text":"

\u76ee\u524d IDE \u96c6\u6210\u4e86\u5f88\u591a\u7684\u8c03\u8bd5\u5de5\u5177\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u5185\u6838\u7f16\u7a0b\u6216\u8005\u5176\u4ed6\u7684\u5e95\u5c42\u5f00\u53d1\u9886\u57df gdb \u4ecd\u7136\u5177\u5907\u4e0d\u53ef\u66ff\u4ee3\u7684\u4f5c\u7528\uff0c\u4e3a\u6b64\u6211\u4eec\u5e0c\u671b\u5728\u539f\u672c\u67af\u71e5\u7684\u8c03\u8bd5\u7ec8\u7aef\u627e\u5230\u66f4\u52a0\u4fbf\u4e8e\u89c2\u5bdf\u7684\u9875\u9762\u597d\u5728\u5df2\u7ecf\u6709\u4eba\u5e2e\u6211\u4eec\u5b9e\u73b0\u4e86\u8fd9\u4e00\u5de5\u5177\u4e3a\u6b64\u6211\u4eec\u5e0c\u671b\u628a\u8fd9\u6837\u7684\u4fbf\u6377\u5e26\u7ed9\u6bcf\u4e00\u4e2a\u4eba\u3002

"},{"location":"software/gdbdashboard/#_3","title":"\u8fd0\u884c\u8c03\u8bd5\u57fa\u672c\u6307\u4ee4","text":"

\u53c2\u8003 gdb\u8c03\u8bd5\u5e38\u89c1\u6307\u4ee4

"},{"location":"software/gdbdashboard/#_4","title":"\u6ce8\u610f","text":"

\u5728\u4f7f\u7528\u8be5\u63d2\u4ef6\u65f6\u9700\u8981\u67e5\u770b\u5f53\u524d\u6240\u4f7f\u7528\u7684 gdb \u662f\u5426\u652f\u6301 python \u811a\u672c\uff0c\u5f53\u51fa\u73b0 Scripting in the \"Python\" language is not supported in this copy of GDB. \u65f6\u5219\u8868\u660e\u8be5 gdb \u4e0d\u652f\u6301 python \u811a\u672c\uff0c\u65e0\u6cd5\u4f7f\u7528\u8be5\u63d2\u4ef6\u3002\u53e6\u5916\uff0c\u4e5f\u9700\u8981\u6ce8\u610f gdb \u4e0e python \u7684\u7248\u672c\u662f\u5426\u5339\u914d\u7684\u95ee\u9898\uff0c\u89c1 issue

"},{"location":"software/mathpix/","title":"Mathpix","text":"

\u5b98\u7f51\uff1ahttps://mathpix.com

Mathpix\u662f\u4e00\u6b3e tex \u683c\u5f0f\u516c\u5f0f\u751f\u6210\u8f6f\u4ef6\uff0c\u5b83\u4e3b\u8981\u7684\u529f\u80fd\u662f\u901a\u8fc7 ocr \u6280\u672f\u8bc6\u522b\u622a\u56fe\u5f53\u4e2d\u7684\u516c\u5f0f\uff0c\u5e76\u751f\u6210\u5bf9\u5e94\u7684 tex \u4ee3\u7801\uff0c\u5728\u8bba\u6587\u5199\u4f5c\u7684\u8fc7\u7a0b\u4e2d\u80fd\u591f\u6781\u5927\u7684\u52a0\u901f\u516c\u5f0f\u7f16\u5199\u7684\u901f\u5ea6\u3002

\u7279\u6027:

  • \u652f\u6301\u624b\u5199\u516c\u5f0f\u7684\u8bc6\u522b\u5e76\u81ea\u52a8\u751f\u6210 tex \u4ee3\u7801\u3002
  • \u652f\u6301\u6570\u4f4d\u677f\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u901a\u8fc7\u5916\u63a5\u6570\u4f4d\u677f\u7684\u65b9\u5f0f\u5199\u5165\u516c\u5f0f\uff0c\u8bc6\u522b\u5e76\u751f\u6210 tex \u3002
  • \u652f\u6301\u8868\u683c\u7684\u8bc6\u522b\uff0c\u867d\u7136\u4e0d\u5982\u516c\u5f0f\u90a3\u4e48\u7cbe\u51c6\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6548\u679c\u8fd8\u884c\u3002
  • \u4ea4\u4e92\u5f0f\u7f16\u8f91\u754c\u9762\uff0c orc \u7ed3\u679c\u6709\u504f\u5dee\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u4fee\u6539\u3002

\u7f3a\u70b9:

  • \u6709\u4f7f\u7528\u6b21\u6570\u7684\u9650\u5236\uff0c\u4f46\u662f\u53ef\u4ee5\u901a\u8fc7\u66f4\u6362\u90ae\u7bb1\u7684\u65b9\u5f0f\u89e3\u51b3\uff0c\u6839\u636e\u672c\u4eba\u7684\u7ecf\u9a8c\u6839\u672c\u7528\u4e0d\u5230\u90a3\u4e48\u591a\uff0c\u666e\u901a\u6b3e\u5df2\u7ecf\u5f88\u8db3\u591f\uff0c\u4ed8\u8d39\u5347\u7ea7 pro \u7248\u672c\u5e76\u4e0d\u5212\u7b97\u3002
"},{"location":"software/nano/","title":"GNU nano","text":"

\u5b98\u7f51: https://www.nano-editor.org/

gnu nano \u662f\u4e00\u4e2a\u7b80\u5355\u6613\u4e0a\u624b\u7684\u547d\u4ee4\u884c\u7f16\u8f91\u5668\uff0c\u90e8\u5206 linux \u53d1\u884c\u7248\u7684\u9ed8\u8ba4\u7f16\u8f91\u5668\u5c31\u662f nano \uff0c\u540c\u65f6\u4f60\u4e5f\u53ef\u4ee5\u5728 windows \u4e2d\u5b89\u88c5\u5b83\u3002

"},{"location":"software/nano/#_1","title":"\u5b89\u88c5","text":"

\u5728 linux \u53d1\u884c\u7248\u4e2d\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u53d1\u884c\u7248\u5bf9\u5e94\u7684\u7684\u5305\u7ba1\u7406\u5de5\u5177\u8fdb\u884c\u5b89\u88c5\u3002

\u4ee5\u4f7f\u7528 apt \u4f5c\u4e3a\u5305\u7ba1\u7406\u5de5\u5177\u7684 debain \u4e3a\u4f8b\uff1a

sudo apt install nano\n
"},{"location":"software/nano/#_2","title":"\u57fa\u7840\u4f7f\u7528","text":"

\u5728\u547d\u4ee4\u884c\u4e2d\u8f93\u5165 nano \u5c31\u4f1a\u51fa\u73b0\u8be6\u7ec6\u7684\u64cd\u4f5c\u6307\u5bfc\u3002

"},{"location":"software/nano/#_3","title":"\u4f18\u70b9","text":"
  • \u8f7b\u91cf\uff0c\u5360\u7528\u7cfb\u7edf\u8d44\u6e90\u5c11\u3002
  • \u7b80\u5355\u6613\u4e0a\u624b\u3002
"},{"location":"software/nano/#_4","title":"\u7f3a\u70b9","text":"
  • \u529f\u80fd\u8f83\u5c11\uff0c\u76f8\u6bd4emacs\uff0cvim\u62d3\u5c55\u6027\u8f83\u5dee\u3002
"},{"location":"software/ranger/","title":"Ranger","text":""},{"location":"software/ranger/#_1","title":"\u7b80\u4ecb","text":"

Ranger \u662f\u6709\u7740 Vim \u98ce\u683c\u7684\u5feb\u6377\u952e\u7684\u7ec8\u7aef\u6587\u4ef6\u7ba1\u7406\u5668\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u952e\u76d8\u5feb\u901f\u67e5\u770b\u3001\u9884\u89c8\u6587\u4ef6\uff0c\u5728\u4e0d\u540c\u7684\u6587\u4ef6\u5939\u4e4b\u95f4\u5bfc\u822a\uff0c\u8fd8\u53ef\u4ee5\u76f4\u63a5\u5728ranger\u4e0b\u5bf9\u6587\u4ef6\uff08\u6587\u4ef6\u5939\uff09\u8fdb\u884c\u590d\u5236\u3001\u7c98\u8d34\u3001\u5220\u9664\u3001\u91cd\u547d\u540d\u7b49\u5e38\u7528\u64cd\u4f5c\u3002

"},{"location":"software/ranger/#_2","title":"\u5b89\u88c5","text":"
  • \u5f00\u6e90\u5730\u5740 https://github.com/ranger/ranger
  • \u83b7\u53d6

    • Ubuntu && Debian
    sudo apt install ranger\n
    • \u901a\u8fc7 pip \u5b89\u88c5
    pip install ranger-fm\n
  • \u6548\u679c\u56fe

"},{"location":"software/ranger/#_3","title":"\u63a8\u8350\u7406\u7531","text":"
  1. \u4e0d\u518d\u9700\u8981\u518d\u4f7f\u7528 cd \u547d\u4ee4\u5207\u6362\u76ee\u5f55
  2. \u7b80\u5316\u4e86\u5bf9\u6587\u4ef6(\u5939)\u7684\u590d\u5236\u3001\u7c98\u8d34\u3001\u91cd\u547d\u540d\u7b49\u64cd\u4f5c\u3002
  3. ranger \u6709\u5bf9\u5e94\u7684 Vim \u63d2\u4ef6\uff0c\u53ef\u4ee5\u5728 Vim \u91cc\u6253\u5f00 ranger\uff0c\u80fd\u63d0\u9ad8\u6587\u4ef6\u7684\u7f16\u8f91\u6548\u7387\u3002
"},{"location":"software/ranger/#_4","title":"\u53c2\u8003","text":"

\u53c2\u8003

  • \u5b98\u65b9\u6587\u6863

    ranger official wiki

  • \u5feb\u6377\u952e\u603b\u7ed3

    ranger cheat sheet

"},{"location":"software/texmacs/","title":"GNU TeXmacs","text":"

\u5b98\u7f51\uff1ahttps://www.texmacs.org/tmweb/home/welcome.en.html

\u88ab LaTeX \u6298\u78e8\u7684\u8bdd\uff0c\u4e0d\u59a8\u8bd5\u8bd5 GNU TeXmacs\uff01TeXmacs \u662f\u4e00\u6b3e\u6240\u89c1\u5373\u6240\u5f97\u7684\u79d1\u5b66\u6587\u6863\uff08\u8bba\u6587\uff0c\u7b14\u8bb0\u7b49\uff09\u5f00\u6e90\u7f16\u8f91\u5668\u3002 \u5982\u679c\u5199\u5f88\u591a\u7684\u6570\u5b66\u516c\u5f0f\u7684\u8bdd\u53ef\u4ee5\u8bd5\u8bd5\uff0c\u975e\u5e38\u597d\u7528\uff01

\u7279\u6027:

  • \u5b8c\u5168\u53ef\u89c6\u5316\u7684\u8868\u683c\uff0c\u516c\u5f0f\u7f16\u8f91\u73af\u5883\u3002
  • \u975e\u5e38\u4eba\u6027\u5316\u7684\u6309\u952e\u8bbe\u8ba1\u3002\u6700\u597d\u7528\u7684\u4e00\u4e2a\u529f\u80fd\u662f\uff0c\u5728\u7f16\u8f91\u6570\u5b66\u516c\u5f0f\u65f6\uff0c\u4f60\u6309\u4efb\u610f\u4e00\u4e2a\u5b57\u7b26\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u7528\u591a\u6b21 TAB \u952e\u76f8\u7ee7\u9009\u62e9\u76f8\u4f3c\u7684\u5b57\u7b26\u3002\u6bd4\u5982\uff0c\u6309 a \u518d\u6309tab\u5c31\u53ef\u4ee5\u5f97\u5230 \\(\\alpha\\) \u7b49\u770b\u7740\u50cf a \u7684\u5b57\u7b26\u3002
  • \u652f\u6301\u5f88\u591a\u79cd\u8ba1\u7b97\u673a\u4ee3\u6570\u7cfb\u7edf\uff0c\u548c\u4ea4\u4e92\u5f0f\u8f6f\u4ef6\uff0c\u7c7b\u4f3c Jupyter Notebook \u3002
  • \u652f\u6301Scheme\u8bed\u8a00\u548c\u5b8f\u8fdb\u884c\u529f\u80fd\u6269\u5c55\u3002

\u9700\u8981\u4ec0\u4e48\u529f\u80fd\u770b\u4e00\u770b\u5185\u5efa\u6587\u6863\u5c31\u5dee\u4e0d\u591a\u4f1a\u4e86\uff0c\u5076\u5c14\u6587\u6863\u91cc\u6709\u8fc7\u65f6\u7684\u5730\u65b9\uff0c\u53ef\u4ee5\u4e0b\u4e00\u672c The Jolly Writer \uff0c\u4e5f\u662f\u8f6f\u4ef6\u7684\u4e3b\u8981\u4f5c\u8005\u5199\u7684\u3002

\u552f\u4e00\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u8bb0\u5f97\u5207\u6362\u5230\u4e2d\u6587\u6a21\u5f0f\uff08\u70b9\u83dc\u5355\u680f\u4e0a\u9762\u7684\u56fd\u65d7\uff09\uff0c\u5426\u5219\u4e0d\u4f1a\u81ea\u52a8\u6362\u884c\u3002

"},{"location":"specification/pr/","title":"Pull Request \u89c4\u8303","text":"

\u5bf9\u4e8e Pull Request\uff0c\u8bf7\u9075\u5b88\u4ee5\u4e0b\u51e0\u70b9\u8981\u6c421\uff1a

  1. \u6807\u9898\u8bf7\u5199\u660e\u672c\u6b21 PR \u7684\u76ee\u7684\uff08\u505a\u4e86 \u4ec0\u4e48 \u5de5\u4f5c\uff0c\u4fee\u590d\u4e86 \u4ec0\u4e48 \u95ee\u9898\uff09\u3002
  2. \u5185\u5bb9\u8bf7\u7b80\u8981\u53d9\u8ff0\u4fee\u6539\u7684\u5185\u5bb9\u3002\u5982\u679c\u4fee\u590d\u4e86\u4e00\u4e2a issue \u7684\u95ee\u9898\uff0c\u8bf7\u5728\u5185\u5bb9\u4e2d\u6dfb\u52a0 fix #xxxx \u5b57\u6bb5\uff0c\u5176\u4e2d xxxx \u4ee3\u8868 issue \u7684\u7f16\u53f7\u3002
  3. \u63a8\u8350\u5220\u9664 pull request message \u4e2d\u7684\u6a21\u677f\u4fe1\u606f\uff08\u201c\u9996\u5148\uff0c\u5341\u5206\u611f\u8c22\u2026\u2026\u201d\u8fd9\u4e00\u6bb5\uff09\u3002

\u5bf9\u4e8e Pull Request \u7684\u6807\u9898\uff0c\u63a8\u8350\u4f7f\u7528\u5982\u4e0b\u683c\u5f0f\u4e66\u5199\uff1a

<\u4fee\u6539\u7c7b\u578b>(<\u6587\u4ef6\u540d>): <\u4fee\u6539\u7684\u5185\u5bb9> (<\u5bf9\u5e94 issue \u7684\u7f16\u53f7>)\n

\u4fee\u6539\u7c7b\u578b\u5206\u4e3a\u5982\u4e0b\u51e0\u7c7b\uff1a

  • feat\uff1a\u7528\u4e8e\u6dfb\u52a0\u5185\u5bb9\u7684\u60c5\u51b5\u3002
  • fix\uff1a\u7528\u4e8e\u4fee\u6b63\u73b0\u6709\u5185\u5bb9\u9519\u8bef\u7684\u60c5\u51b5\u3002
  • refactor\uff1a\u7528\u4e8e\u5bf9\u4e00\u4e2a\u9875\u9762\u8fdb\u884c\u91cd\u6784\uff08\u8f83\u5927\u89c4\u6a21\u7684\u66f4\u6539\uff09\u7684\u60c5\u51b5\u3002
  • revert\uff1a\u7528\u4e8e\u56de\u9000\u4e4b\u524d\u66f4\u6539\u7684\u60c5\u51b5\u3002

\u793a\u4f8b\uff1a

  • fix(sepecification/specification): \u4fee\u6539\u4ee3\u7801\u6ce8\u91ca\u4f7f\u63cf\u8ff0\u66f4\u6e05\u6670
  • fix: plugins/xxx \u4e0d\u5728\u76ee\u5f55\u4e2d (#2)
  • feat(software/mathpix): official website
  • refactor(specification/template): \u6574\u7406\u9875\u9762\u5185\u5bb9
  1. \u4fee\u6539\u81ea OI-wiki: \u5982\u4f55\u53c2\u4e0e \u21a9

"},{"location":"specification/template/","title":"\u6a21\u7248\uff08\u8f6f\u4ef6\u7684\u6807\u9898\uff0c\u5982\u679c\u662f\u5fc5\u987b\u4ed8\u8d39\u8f6f\u4ef6\uff0c\u76f4\u63a5\u5728\u6807\u9898\u5199\u4e0a\u201c\u4ed8\u8d39\u201d\uff09","text":"

\u670b\u53cb\u4f60\u597d\uff0c\u5982\u679c\u4f60\u6709\u4e00\u4e2a\u5f88\u68d2\u7684\u5de5\u5177\u5e0c\u671b\u548c\u5927\u5bb6\u5206\u4eab\uff0c\u4f46\u662f\u4f60\u4e0d\u77e5\u9053\u600e\u4e48\u5199\u4e00\u4e2amarkdown\uff0c\u8fd9\u91cc\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u4ee5\u53c2\u8003\u7684\u6a21\u7248

"},{"location":"specification/template/#_2","title":"\u7b80\u4ecb","text":"

\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u7b80\u4ecb\u90e8\u5206\u63cf\u8ff0\u8fd9\u4e2a\u5de5\u5177\u7684:

  • \u5b98\u65b9\u7684\u7f51\u7ad9(\u5982\u679c\u6709\uff0c\u5c3d\u53ef\u80fd\u4ee5\u5185\u5d4c\u94fe\u63a5\u5f62\u5f0f\u5d4c\u5165\u5230\u7b80\u4ecb)
  • \u4e3b\u8981\u529f\u80fd
  • \u4f7f\u7528\u7684\u73af\u5883
  • \u5176\u4ed6\u57fa\u672c\u7684\u7279\u70b9
"},{"location":"specification/template/#_3","title":"\u5b89\u88c5","text":"

\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u5b89\u88c5\u90e8\u5206\u63cf\u8ff0:

  • \u8f6f\u4ef6\u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\u7684\u7248\u672c
  • \u5b89\u88c5\u8f6f\u4ef6\u7684\u65b9\u5f0f \u7279\u522b\u662f\u975eWindows\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u5b89\u88c5\u6700\u597d\u7ed9\u51fa\u6307\u4ee4
  • \u5982\u679c\u5b89\u88c5\u8fd9\u4e2a\u8f6f\u4ef6\u9700\u8981\u63d0\u524d\u5b89\u88c5\u5176\u4ed6\u7684\u4f9d\u8d56\u8f6f\u4ef6\uff0c\u8bf7\u6ce8\u660e
  • \u5982\u679c\u53ef\u4ee5\u8bf7\u63d0\u4f9b\u68c0\u67e5\u8f6f\u4ef6\u6210\u529f\u5b89\u88c5\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u4f7f\u7528 $clang --version \u68c0\u67e5 clang \u662f\u5426\u6210\u529f\u5b89\u88c5
"},{"location":"specification/template/#_4","title":"\u63a8\u8350\u7406\u7531","text":"

\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u63a8\u8350\u7406\u7531\u90e8\u5206\u63cf\u8ff0:

  • \u8fd9\u4e2a\u5de5\u5177\u7684\u4f18\u70b9
  • \u8fd9\u4e2a\u5de5\u5177\u7684\u7f3a\u70b9
  • \u8fd9\u4e2a\u5de5\u5177\u662f\u5426\u5f00\u6e90\uff08\u5f00\u6e90\uff0c\u4f46\u63d0\u4f9b\u4ed8\u8d39\u670d\u52a1\u6700\u597d\u6807\u660e\uff09
  • \u5982\u679c\u8fd9\u4e2a\u5de5\u5177\u4e0d\u5f00\u6e90\uff0c\u662f\u5426\u514d\u8d39\uff0c\u662f\u5426\u5141\u8bb8\u5546\u4e1a\u5316\u4f7f\u7528\uff0c\u662f\u5426\u63d0\u4f9b\u6559\u80b2\u7248
  • \u5982\u679c\u8fd9\u4e2a\u5de5\u5177\u9700\u8981\u4ed8\u8d39\uff0c\u8d77\u6b65\u4ef7\u683c\u662f\u591a\u5c11\uff0c\u5982\u679c\u6709\u5176\u4ed6\u5c42\u7ea7\u4ef7\u4f4d\uff0c\u8bf7\u6ce8\u660e\u5b98\u7f51\u5b9a\u4ef7\u94fe\u63a5
"},{"location":"specification/template/#_5","title":"\u53c2\u8003","text":"

\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u53c2\u8003\u90e8\u5206\u63d0\u4f9b\u4e00\u4e9b\u5e38\u7528\u7684\u53c2\u8003\uff0c\u4f8b\u5982:

  • \u5de5\u5177\u7684\u5b98\u65b9\u6587\u6863
  • \u7b14\u8005\u5b9e\u9645\u4f7f\u7528\u4e2d\u9047\u5230\u7684\u60c5\u51b5
  • \u76f8\u5173\u7684\u793e\u533a\uff0c\u4e66\u7c4d\uff0c\u7f51\u9875
"},{"location":"specification/markdown/chinese_copywriting_guidelines/","title":"\u4e2d\u82f1\u6df7\u6392\u89c4\u8303","text":""},{"location":"specification/markdown/chinese_copywriting_guidelines/#_2","title":"\u7a7a\u683c","text":"

\u300c\u6709\u7814\u7a76\u663e\u793a\uff0c\u6253\u5b57\u7684\u65f6\u5019\u4e0d\u559c\u6b22\u5728\u4e2d\u6587\u548c\u82f1\u6587\u4e4b\u95f4\u52a0\u7a7a\u683c\u7684\u4eba\uff0c\u611f\u60c5\u8def\u90fd\u8d70\u5f97\u5f88\u8f9b\u82e6\uff0c\u6709\u4e03\u6210\u7684\u6bd4\u4f8b\u4f1a\u5728 34 \u5c81\u7684\u65f6\u5019\u8ddf\u81ea\u5df1\u4e0d\u7231\u7684\u4eba\u7ed3\u5a5a\uff0c\u800c\u5176\u4f59\u4e09\u6210\u7684\u4eba\u6700\u540e\u53ea\u80fd\u628a\u9057\u4ea7\u7559\u7ed9\u81ea\u5df1\u7684\u732b\u3002\u6bd5\u7adf\u7231\u60c5\u8ddf\u4e66\u5199\u90fd\u9700\u8981\u9002\u65f6\u5730\u7559\u767d\u3002

\u4e0e\u5927\u5bb6\u5171\u52c9\u4e4b\u3002\u300d\u2014\u2014vinta/paranoid-auto-spacing

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_3","title":"\u4e2d\u82f1\u6587\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"

\u6b63\u786e\uff1a

\u5728 LeanCloud \u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5 AVObject \u8fdb\u884c\u7684\u3002

\u9519\u8bef\uff1a

\u5728LeanCloud\u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5AVObject\u8fdb\u884c\u7684\u3002

\u5728 LeanCloud\u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5AVObject \u8fdb\u884c\u7684\u3002

\u5b8c\u6574\u7684\u6b63\u786e\u7528\u6cd5\uff1a

\u5728 LeanCloud \u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5 AVObject \u8fdb\u884c\u7684\u3002\u6bcf\u4e2a AVObject \u90fd\u5305\u542b\u4e86\u4e0e JSON \u517c\u5bb9\u7684 key-value \u5bf9\u5e94\u7684\u6570\u636e\u3002\u6570\u636e\u662f schema-free \u7684\uff0c\u4f60\u4e0d\u9700\u8981\u5728\u6bcf\u4e2a AVObject \u4e0a\u63d0\u524d\u6307\u5b9a\u5b58\u5728\u54ea\u4e9b\u952e\uff0c\u53ea\u8981\u76f4\u63a5\u8bbe\u5b9a\u5bf9\u5e94\u7684 key-value \u5373\u53ef\u3002

\u4f8b\u5916\uff1a\u300c\u8c46\u74e3FM\u300d\u7b49\u4ea7\u54c1\u540d\u8bcd\uff0c\u6309\u7167\u5b98\u65b9\u6240\u5b9a\u4e49\u7684\u683c\u5f0f\u4e66\u5199\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_4","title":"\u4e2d\u6587\u4e0e\u6570\u5b57\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"

\u6b63\u786e\uff1a

\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e86 5000 \u5143\u3002

\u9519\u8bef\uff1a

\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e86 5000\u5143\u3002

\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e865000\u5143\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_5","title":"\u6570\u5b57\u4e0e\u5355\u4f4d\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"

\u6b63\u786e\uff1a

\u6211\u5bb6\u7684\u5149\u7ea4\u5165\u5c4b\u5bbd\u5e26\u6709 10 Gbps\uff0cSSD \u4e00\u5171\u6709 20 TB

\u9519\u8bef\uff1a

\u6211\u5bb6\u7684\u5149\u7ea4\u5165\u5c4b\u5bbd\u5e26\u6709 10Gbps\uff0cSSD \u4e00\u5171\u6709 20TB

\u4f8b\u5916\uff1a\u5ea6\u6570\uff0f\u767e\u5206\u6bd4\u4e0e\u6570\u5b57\u4e4b\u95f4\u4e0d\u9700\u8981\u589e\u52a0\u7a7a\u683c\uff1a

\u6b63\u786e\uff1a

\u89d2\u5ea6\u4e3a 90\u00b0 \u7684\u89d2\uff0c\u5c31\u662f\u76f4\u89d2\u3002

\u65b0 MacBook Pro \u6709 15% \u7684 CPU \u6027\u80fd\u63d0\u5347\u3002

\u9519\u8bef\uff1a

\u89d2\u5ea6\u4e3a 90 \u00b0 \u7684\u89d2\uff0c\u5c31\u662f\u76f4\u89d2\u3002

\u65b0 MacBook Pro \u6709 15 % \u7684 CPU \u6027\u80fd\u63d0\u5347\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_6","title":"\u5168\u89d2\u6807\u70b9\u4e0e\u5176\u4ed6\u5b57\u7b26\u4e4b\u95f4\u4e0d\u52a0\u7a7a\u683c","text":"

\u6b63\u786e\uff1a

\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone\uff0c\u597d\u5f00\u5fc3\uff01

\u9519\u8bef\uff1a

\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone \uff0c\u597d\u5f00\u5fc3\uff01

\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone\uff0c \u597d\u5f00\u5fc3\uff01

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#text-spacing","title":"\u7528 text-spacing \u6765\u633d\u6551\uff1f","text":"

CSS Text Module Level 4 \u7684 text-spacing \u548c Microsoft \u7684 -ms-text-autospace \u53ef\u4ee5\u5b9e\u73b0\u81ea\u52a8\u4e3a\u4e2d\u82f1\u6587\u4e4b\u95f4\u589e\u52a0\u7a7a\u767d\u3002\u4e0d\u8fc7\u76ee\u524d\u5e76\u672a\u666e\u53ca\uff0c\u53e6\u5916\u5728\u5176\u4ed6\u5e94\u7528\u573a\u666f\uff0c\u4f8b\u5982 macOS\u3001iOS\u3001Windows \u7b49\u7528\u6237\u754c\u9762\u76ee\u524d\u5e76\u4e0d\u5b58\u5728\u8fd9\u4e2a\u7279\u6027\uff0c\u6240\u4ee5\u8bf7\u7ee7\u7eed\u4fdd\u6301\u968f\u624b\u52a0\u7a7a\u683c\u7684\u4e60\u60ef\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_7","title":"\u6807\u70b9\u7b26\u53f7","text":""},{"location":"specification/markdown/chinese_copywriting_guidelines/#_8","title":"\u4e0d\u91cd\u590d\u4f7f\u7528\u6807\u70b9\u7b26\u53f7","text":"

\u5373\u4f7f\u4e2d\u56fd\u5927\u9646\u7684\u6807\u70b9\u7b26\u53f7\u7528\u6cd5\u5141\u8bb8\u91cd\u590d\u4f7f\u7528\u6807\u70b9\u7b26\u53f7\uff0c\u4f46\u662f\u8fd9\u4e48\u505a\u4f1a\u7834\u574f\u53e5\u5b50\u7684\u7f8e\u89c2\u6027\u3002

\u6b63\u786e\uff1a

\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01

\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff01

\u9519\u8bef\uff1a

\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01\uff01

\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01

\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff1f\uff01\uff01

\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff01\uff1f\uff01\uff1f\uff1f\uff01\uff01

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_9","title":"\u5168\u89d2\u548c\u534a\u89d2","text":"

\u4e0d\u660e\u767d\u4ec0\u4e48\u662f\u5168\u89d2\uff08\u5168\u5f62\uff09\u4e0e\u534a\u89d2\uff08\u534a\u5f62\uff09\u7b26\u53f7\uff1f\u8bf7\u67e5\u770b\u7ef4\u57fa\u767e\u79d1\u6761\u76ee\u300e\u5168\u89d2\u548c\u534a\u89d2\u300f\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_10","title":"\u4f7f\u7528\u5168\u89d2\u4e2d\u6587\u6807\u70b9","text":"

\u6b63\u786e\uff1a

\u55e8\uff01\u4f60\u77e5\u9053\u561b\uff1f\u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4\u300c\u55b5\u300d\u4e86\u54ce\uff01

\u6838\u78c1\u5171\u632f\u6210\u50cf\uff08NMRI\uff09\u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053\uff1fJFGI\uff01

\u9519\u8bef\uff1a

\u55e8! \u4f60\u77e5\u9053\u561b? \u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4 \"\u55b5\" \u4e86\u54ce\uff01

\u55e8!\u4f60\u77e5\u9053\u561b?\u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4\"\u55b5\"\u4e86\u54ce\uff01

\u6838\u78c1\u5171\u632f\u6210\u50cf (NMRI) \u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053? JFGI!

\u6838\u78c1\u5171\u632f\u6210\u50cf(NMRI)\u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053?JFGI!

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_11","title":"\u6570\u5b57\u4f7f\u7528\u534a\u89d2\u5b57\u7b26","text":"

\u6b63\u786e\uff1a

\u8fd9\u4e2a\u86cb\u7cd5\u53ea\u5356 1000 \u5143\u3002

\u9519\u8bef\uff1a

\u8fd9\u4e2a\u86cb\u7cd5\u53ea\u5356 \uff11\uff10\uff10\uff10 \u5143\u3002

\u4f8b\u5916\uff1a\u5728\u8bbe\u8ba1\u7a3f\u3001\u5ba3\u4f20\u6d77\u62a5\u4e2d\u5982\u51fa\u73b0\u6781\u5c11\u91cf\u6570\u5b57\u7684\u60c5\u5f62\u65f6\uff0c\u4e3a\u65b9\u4fbf\u6587\u5b57\u5bf9\u9f50\uff0c\u662f\u53ef\u4ee5\u4f7f\u7528\u5168\u89d2\u6570\u5b57\u7684\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_12","title":"\u9047\u5230\u5b8c\u6574\u7684\u82f1\u6587\u6574\u53e5\u3001\u7279\u6b8a\u540d\u8bcd\uff0c\u5176\u5185\u5bb9\u4f7f\u7528\u534a\u89d2\u6807\u70b9","text":"

\u6b63\u786e\uff1a

\u4e54\u5e03\u65af\u90a3\u53e5\u8bdd\u662f\u600e\u4e48\u8bf4\u7684\uff1f\u300cStay hungry, stay foolish.\u300d

\u63a8\u8350\u4f60\u9605\u8bfb\u300aHackers & Painters: Big Ideas from the Computer Age\u300b\uff0c\u975e\u5e38\u7684\u6709\u8da3\u3002

\u9519\u8bef\uff1a

\u4e54\u5e03\u65af\u90a3\u53e5\u8bdd\u662f\u600e\u4e48\u8bf4\u7684\uff1f\u300cStay hungry\uff0cstay foolish\u3002\u300d

\u63a8\u8350\u4f60\u9605\u8bfb\u300aHackers\uff06Painters\uff1aBig Ideas from the Computer Age\u300b\uff0c\u975e\u5e38\u7684\u6709\u8da3\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_13","title":"\u540d\u8bcd","text":""},{"location":"specification/markdown/chinese_copywriting_guidelines/#_14","title":"\u4e13\u6709\u540d\u8bcd\u4f7f\u7528\u6b63\u786e\u7684\u5927\u5c0f\u5199","text":"

\u5927\u5c0f\u5199\u76f8\u5173\u7528\u6cd5\u539f\u5c5e\u4e8e\u82f1\u6587\u4e66\u5199\u8303\u7574\uff0c\u4e0d\u5c5e\u4e8e\u672c wiki \u8ba8\u8bba\u5185\u5bb9\uff0c\u5728\u8fd9\u91cc\u53ea\u5bf9\u90e8\u5206\u6613\u9519\u7528\u6cd5\u8fdb\u884c\u7b80\u8ff0\u3002

\u6b63\u786e\uff1a

\u4f7f\u7528 GitHub \u767b\u5f55

\u6211\u4eec\u7684\u5ba2\u6237\u6709 GitHub\u3001Foursquare\u3001Microsoft Corporation\u3001Google\u3001Facebook, Inc.\u3002

\u9519\u8bef\uff1a

\u4f7f\u7528 github \u767b\u5f55

\u4f7f\u7528 GITHUB \u767b\u5f55

\u4f7f\u7528 Github \u767b\u5f55

\u4f7f\u7528 gitHub \u767b\u5f55

\u4f7f\u7528 g\uff72\u3093\u0124\u04268 \u767b\u5f55

\u6211\u4eec\u7684\u5ba2\u6237\u6709 github\u3001foursquare\u3001microsoft corporation\u3001google\u3001facebook, inc.\u3002

\u6211\u4eec\u7684\u5ba2\u6237\u6709 GITHUB\u3001FOURSQUARE\u3001MICROSOFT CORPORATION\u3001GOOGLE\u3001FACEBOOK, INC.\u3002

\u6211\u4eec\u7684\u5ba2\u6237\u6709 Github\u3001FourSquare\u3001MicroSoft Corporation\u3001Google\u3001FaceBook, Inc.\u3002

\u6211\u4eec\u7684\u5ba2\u6237\u6709 gitHub\u3001fourSquare\u3001microSoft Corporation\u3001google\u3001faceBook, Inc.\u3002

\u6211\u4eec\u7684\u5ba2\u6237\u6709 g\uff72\u3093\u0124\u04268\u3001\uff77ou\u042f\u01a7qu\uff91\u0433\u0454\u3001\u0e53\u0e40\u03c2\u0433\u0e4f\u0e23\u0e4f\u0166t \u03c2\u0e4f\u0433\u05e7\u0e4f\u0433\u0e04t\u0e40\u0e4f\u0e20n\u3001900913\u3001\u01924\u1103\u00eb\u0432\u0e4f\u0e4f\u043a, I\u041f\u1103.\u3002

\u6ce8\u610f\uff1a\u5f53\u7f51\u9875\u4e2d\u9700\u8981\u914d\u5408\u6574\u4f53\u89c6\u89c9\u98ce\u683c\u800c\u51fa\u73b0\u5168\u90e8\u5927\u5199\uff0f\u5c0f\u5199\u7684\u60c5\u5f62\uff0cHTML \u4e2d\u8bf7\u4f7f\u7528\u6807\u6dee\u7684\u5927\u5c0f\u5199\u89c4\u8303\u8fdb\u884c\u4e66\u5199\uff1b\u5e76\u901a\u8fc7 text-transform: uppercase;\uff0ftext-transform: lowercase; \u5bf9\u8868\u73b0\u5f62\u5f0f\u8fdb\u884c\u5b9a\u4e49\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_15","title":"\u4e0d\u8981\u4f7f\u7528\u4e0d\u5730\u9053\u7684\u7f29\u5199","text":"

\u6b63\u786e\uff1a

\u6211\u4eec\u9700\u8981\u4e00\u4f4d\u719f\u6089 TypeScript\u3001HTML5\uff0c\u81f3\u5c11\u7406\u89e3\u4e00\u79cd\u6846\u67b6\uff08\u5982 React\u3001Next.js\uff09\u7684\u524d\u7aef\u5f00\u53d1\u8005\u3002

\u9519\u8bef\uff1a

\u6211\u4eec\u9700\u8981\u4e00\u4f4d\u719f\u6089 Ts\u3001h5\uff0c\u81f3\u5c11\u7406\u89e3\u4e00\u79cd\u6846\u67b6\uff08\u5982 RJS\u3001nextjs\uff09\u7684 FED\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_16","title":"\u4e89\u8bae","text":"

\u4ee5\u4e0b\u7528\u6cd5\u7565\u5e26\u6709\u4e2a\u4eba\u8272\u5f69\uff0c\u5373\uff1a\u65e0\u8bba\u662f\u5426\u9075\u5faa\u4e0b\u8ff0\u89c4\u5219\uff0c\u4ece\u8bed\u6cd5\u7684\u89d2\u5ea6\u6765\u8bb2\u90fd\u662f\u6b63\u786e\u7684\u3002

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_17","title":"\u94fe\u63a5\u4e4b\u95f4\u589e\u52a0\u7a7a\u683c","text":"

\u7528\u6cd5\uff1a

\u8bf7 \u63d0\u4ea4\u4e00\u4e2a issue \u5e76\u5206\u914d\u7ed9\u76f8\u5173\u540c\u4e8b\u3002

\u8bbf\u95ee\u6211\u4eec\u7f51\u7ad9\u7684\u6700\u65b0\u52a8\u6001\uff0c\u8bf7 \u70b9\u51fb\u8fd9\u91cc \u8fdb\u884c\u8ba2\u9605\uff01

\u5bf9\u6bd4\u7528\u6cd5\uff1a

\u8bf7\u63d0\u4ea4\u4e00\u4e2a issue\u5e76\u5206\u914d\u7ed9\u76f8\u5173\u540c\u4e8b\u3002

\u8bbf\u95ee\u6211\u4eec\u7f51\u7ad9\u7684\u6700\u65b0\u52a8\u6001\uff0c\u8bf7\u70b9\u51fb\u8fd9\u91cc\u8fdb\u884c\u8ba2\u9605\uff01

"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_18","title":"\u7b80\u4f53\u4e2d\u6587\u4f7f\u7528\u76f4\u89d2\u5f15\u53f7","text":"

\u7528\u6cd5\uff1a

\u300c\u8001\u5e08\uff0c\u300e\u6709\u6761\u4e0d\u7d0a\u300f\u7684\u300e\u7d0a\u300f\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u300d

\u5bf9\u6bd4\u7528\u6cd5\uff1a

\u201c\u8001\u5e08\uff0c\u2018\u6709\u6761\u4e0d\u7d0a\u2019\u7684\u2018\u7d0a\u2019\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u201d

Note

\u672c\u8981\u6c42\u53d6\u81ea \u4e2d\u6587\u6587\u6848\u6392\u7248\u6307\u5317 \uff0c\u4f60\u53ef\u4ee5\u70b9\u51fb\u94fe\u63a5\u6765\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002

"},{"location":"specification/markdown/latex/","title":"LaTeX","text":""},{"location":"specification/markdown/latex/#_1","title":"\u5982\u4f55\u63d2\u5165\u516c\u5f0f","text":"

LaTeX \u7684\u6570\u5b66\u516c\u5f0f\u6709\u4e24\u79cd\uff1a\u884c\u4e2d\u516c\u5f0f\u548c\u72ec\u7acb\u516c\u5f0f\uff08\u884c\u95f4\u516c\u5f0f\uff09\u3002\u884c\u4e2d\u516c\u5f0f\u653e\u5728\u6587\u4e2d\u4e0e\u5176\u5b83\u6587\u5b57\u6df7\u7f16\uff0c\u72ec\u7acb\u516c\u5f0f\u5355\u72ec\u6210\u884c\u3002

\u884c\u4e2d\u516c\u5f0f\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u6cd5\u8868\u793a\uff1a

$ \u6570\u5b66\u516c\u5f0f $

\u72ec\u7acb\u516c\u5f0f\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u6cd5\u8868\u793a\uff1a

$$ \u6570\u5b66\u516c\u5f0f $$

"},{"location":"specification/markdown/latex/#_2","title":"\u51fd\u6570\u3001\u7b26\u53f7\u53ca\u7279\u6b8a\u5b57\u7b26","text":""},{"location":"specification/markdown/latex/#_3","title":"\u58f0\u8c03 / \u53d8\u97f3\u7b26\u53f7","text":"

\\dot{a}, \\ddot{a}, \\acute{a}, \\grave{a}

\\(\\dot{a}, \\ddot{a}, \\acute{a}, \\grave{a}\\)

\\check{a}, \\breve{a}, \\tilde{a}, \\bar{a}

\\(\\check{a}, \\breve{a}, \\tilde{a}, \\bar{a}\\)

\\hat{a}, \\widehat{a}, \\vec{a}

\\(\\hat{a}, \\widehat{a}, \\vec{a}\\)

"},{"location":"specification/markdown/latex/#_4","title":"\u6807\u51c6\u51fd\u6570","text":"

\u6307\u6570

\\exp_a b = a^b, \\exp b = e^b, 10^m

\\(\\exp_a b = a^b, \\exp b = e^b, 10^m\\)

\u5bf9\u6570

\\ln c, \\lg d = \\log e, \\log_{10} f

\\(\\ln c, \\lg d = \\log e, \\log_{10} f\\)

\u4e09\u89d2\u51fd\u6570

\\sin a, \\cos b, \\tan c, \\cot d, \\sec e, \\csc f

\\(\\sin a, \\cos b, \\tan c, \\cot d, \\sec e, \\csc f\\)

\\arcsin a, \\arccos b, \\arctan c

\\(\\arcsin a, \\arccos b, \\arctan c\\)

\\sinh a, \\cosh b, \\tanh c, \\coth d

\\(\\sinh a, \\cosh b, \\tanh c, \\coth d\\)

\\operatorname{sh}k, \\operatorname{ch}l, \\operatorname{th}m, \\operatorname{coth}n

\\(\\operatorname{sh}k, \\operatorname{ch}l, \\operatorname{th}m, \\operatorname{coth}n\\)

\\operatorname{argsh}o, \\operatorname{argch}p, \\operatorname{argth}q

\\(\\operatorname{argsh}o, \\operatorname{argch}p, \\operatorname{argth}q\\)

\u6700\u5927\u503c\uff0c\u6700\u5c0f\u503c

\\min(x,y), \\max(x,y)

\\(\\min(x,y), \\max(x,y)\\)

"},{"location":"specification/markdown/latex/#_5","title":"\u754c\u9650\uff0c\u6781\u9650","text":"

\\min x, \\max y, \\inf s, \\sup t

\\(\\min x, \\max y, \\inf s, \\sup t\\)

\\lim u, \\liminf v, \\limsup w

\\(\\lim u, \\liminf v, \\limsup w\\)

\\lim_{x \\to \\infty} \\frac{1}{n(n+1)}

\\(\\lim_{x \\to \\infty} \\frac{1}{n(n+1)}\\)

\\dim p, \\deg q, \\det m, \\ker\\phi

\\(\\dim p, \\deg q, \\det m, \\ker\\phi\\)

"},{"location":"specification/markdown/latex/#_6","title":"\u6295\u5c04","text":"

\\Pr j, \\hom l, \\lVert z \\rVert, \\arg z

\\(\\Pr j, \\hom l, \\lVert z \\rVert, \\arg z\\)

"},{"location":"specification/markdown/latex/#_7","title":"\u5fae\u5206\u53ca\u5bfc\u6570","text":"

dt, \\mathrm{d}t, \\partial t, \\nabla\\psi

\\(dt, \\mathrm{d}t, \\partial t, \\nabla\\psi\\)

dy/dx, \\mathrm{d}y/\\mathrm{d}x, \\frac{dy}{dx}, \\frac{\\mathrm{d}y}{\\mathrm{d}x}, \\frac{\\partial^2}{\\partial x_1\\partial x_2}y

\\(dy/dx, \\mathrm{d}y/\\mathrm{d}x, \\frac{dy}{dx}, \\frac{\\mathrm{d}y}{\\mathrm{d}x}, \\frac{\\partial^2}{\\partial x_1\\partial x_2}y\\)

\\prime, \\backprime, f^\\prime, f', f'', f^{(3)}, \\dot y, \\ddot y

\\(\\prime, \\backprime, f^\\prime, f', f'', f^{(3)}, \\dot y, \\ddot y\\)

"},{"location":"specification/markdown/latex/#_8","title":"\u7c7b\u5b57\u6bcd\u7b26\u53f7\u53ca\u5e38\u6570","text":"

\\infty, \\aleph, \\complement, \\backepsilon, \\eth, \\Finv, \\hbar

\u221e,\u2135,\u2201,\u220d,\u00f0,\u2132,\u210f

\\Im, \\imath, \\jmath, \\Bbbk, \\ell, \\mho, \\wp, \\Re, \\circledS

\\(\\Im, \\imath, \\jmath, \\Bbbk, \\ell, \\mho, \\wp, \\Re, \\circledS\\)

"},{"location":"specification/markdown/latex/#_9","title":"\u6a21\u8fd0\u7b97","text":"

s_k \\equiv 0 \\pmod{m}

\\(s_k \\equiv 0 \\pmod{m}\\)

a \\bmod b

\\(a \\bmod b\\)

\\gcd(m, n), \\operatorname{lcm}(m, n)

\\(\\gcd(m, n), \\operatorname{lcm}(m, n)\\)

\\mid, \\nmid, \\shortmid, \\nshortmid

\\(\\mid, \\nmid, \\shortmid, \\nshortmid\\)

"},{"location":"specification/markdown/latex/#_10","title":"\u6839\u53f7","text":"

\\surd, \\sqrt{2}, \\sqrt[n]{}, \\sqrt[3]{\\frac{x^3+y^3}{2}}

\\(\\surd, \\sqrt{2}, \\sqrt[n]{}, \\sqrt[3]{\\frac{x^3+y^3}{2}}\\)

"},{"location":"specification/markdown/latex/#_11","title":"\u8fd0\u7b97\u7b26","text":"

+, -, \\pm, \\mp, \\dotplus

\\(+, -, \\pm, \\mp, \\dotplus\\)

\\times, \\div, \\divideontimes, /, \\backslash

\\(\\times, \\div, \\divideontimes, /, \\backslash\\)

\\cdot, * \\ast, \\star, \\circ, \\bullet

\\(\\cdot, * \\ast, \\star, \\circ, \\bullet\\)

\\boxplus, \\boxminus, \\boxtimes, \\boxdot

\\(\\boxplus, \\boxminus, \\boxtimes, \\boxdot\\)

\\oplus, \\ominus, \\otimes, \\oslash, \\odot

\\(\\oplus, \\ominus, \\otimes, \\oslash, \\odot\\)

\\circleddash, \\circledcirc, \\circledast

\\(\\circleddash, \\circledcirc, \\circledast\\)

\\bigoplus, \\bigotimes, \\bigodot

\\(\\bigoplus, \\bigotimes, \\bigodot\\)

"},{"location":"specification/markdown/latex/#_12","title":"\u96c6\u5408","text":"

\\{ \\}, \\empty \\emptyset, \\varnothing

\\(\\{ \\}, \\empty \\emptyset, \\varnothing\\)

\\in, \\notin \\not\\in, \\ni, \\not\\ni

\\(\\in, \\notin \\not\\in, \\ni, \\not\\ni\\)

\\cap, \\Cap, \\sqcap, \\bigcap

\\(\\cap, \\Cap, \\sqcap, \\bigcap\\)

\\cup, \\Cup, \\sqcup, \\bigcup, \\bigsqcup, \\uplus, \\biguplus

\\(\\cup, \\Cup, \\sqcup, \\bigcup, \\bigsqcup, \\uplus, \\biguplus\\)

\\setminus, \\smallsetminus, \\times

\\(\\setminus, \\smallsetminus, \\times\\)

\\subset, \\Subset, \\sqsubset

\\(\\subset, \\Subset, \\sqsubset\\)

\\supset, \\Supset, \\sqsupset

\\(\\supset, \\Supset, \\sqsupset\\)

\\subseteq, \\nsubseteq, \\subsetneq, \\varsubsetneq, \\sqsubseteq

\\(\\subseteq, \\nsubseteq, \\subsetneq, \\varsubsetneq, \\sqsubseteq\\)

\\supseteq, \\nsupseteq, \\supsetneq, \\varsupsetneq, \\sqsupseteq

\\(\\supseteq, \\nsupseteq, \\supsetneq, \\varsupsetneq, \\sqsupseteq\\)

\\subseteqq, \\nsubseteqq, \\subsetneqq, \\varsubsetneqq

\\(\\subseteqq, \\nsubseteqq, \\subsetneqq, \\varsubsetneqq\\)

\\supseteqq, \\nsupseteqq, \\supsetneqq, \\varsupsetneqq

\\(\\supseteqq, \\nsupseteqq, \\supsetneqq, \\varsupsetneqq\\)

"},{"location":"specification/markdown/latex/#_13","title":"\u5173\u7cfb\u7b26\u53f7","text":"

=, \\ne, \\neq, \\equiv, \\not\\equiv

\\(=, \\ne, \\neq, \\equiv, \\not\\equiv\\)

\\doteq, \\doteqdot, \\overset{\\underset{\\mathrm{def}}{}}{=}, :=

\\(\\doteq, \\doteqdot, \\overset{\\underset{\\mathrm{def}}{}}{=}, :=\\)

\\sim, \\nsim, \\backsim, \\thicksim, \\simeq, \\backsimeq, \\eqsim, \\cong, \\ncong

\\(\\sim, \\nsim, \\backsim, \\thicksim, \\simeq, \\backsimeq, \\eqsim, \\cong, \\ncong\\)

\\approx, \\thickapprox, \\approxeq, \\asymp, \\propto, \\varpropto

\\(\\approx, \\thickapprox, \\approxeq, \\asymp, \\propto, \\varpropto\\)

<, \\nless, \\ll, \\not\\ll, \\lll, \\not\\lll, \\lessdot

\\(<, \\nless, \\ll, \\not\\ll, \\lll, \\not\\lll, \\lessdot\\)

>, \\ngtr, \\gg, \\not\\gg, \\ggg, \\not\\ggg, \\gtrdot

\\(>, \\ngtr, \\gg, \\not\\gg, \\ggg, \\not\\ggg, \\gtrdot\\)

\\le, \\leq, \\lneq, \\leqq, \\nleq, \\nleqq, \\lneqq, \\lvertneqq

\\(\\le, \\leq, \\lneq, \\leqq, \\nleq, \\nleqq, \\lneqq, \\lvertneqq\\)

\\ge, \\geq, \\gneq, \\geqq, \\ngeq, \\ngeqq, \\gneqq, \\gvertneqq

\\(\\ge, \\geq, \\gneq, \\geqq, \\ngeq, \\ngeqq, \\gneqq, \\gvertneqq\\)

\\lessgtr, \\lesseqgtr, \\lesseqqgtr, \\gtrless, \\gtreqless, \\gtreqqless

\\(\\lessgtr, \\lesseqgtr, \\lesseqqgtr, \\gtrless, \\gtreqless, \\gtreqqless\\)

\\leqslant, \\nleqslant, \\eqslantless

\\(\\leqslant, \\nleqslant, \\eqslantless\\)

\\geqslant, \\ngeqslant, \\eqslantgtr

\\(\\geqslant, \\ngeqslant, \\eqslantgtr\\)

\\lesssim, \\lnsim, \\lessapprox, \\lnapprox

\\(\\lesssim, \\lnsim, \\lessapprox, \\lnapprox\\)

\\gtrsim, \\gnsim, \\gtrapprox, \\gnapprox

\\(\\gtrsim, \\gnsim, \\gtrapprox, \\gnapprox\\)

\\prec, \\nprec, \\preceq, \\npreceq, \\precneqq

\\(\\prec, \\nprec, \\preceq, \\npreceq, \\precneqq\\)

\\succ, \\nsucc, \\succeq, \\nsucceq, \\succneqq

\\(\\succ, \\nsucc, \\succeq, \\nsucceq, \\succneqq\\)

\\preccurlyeq, \\curlyeqprec

\\(\\preccurlyeq, \\curlyeqprec\\)

\\succcurlyeq, \\curlyeqsucc

\\(\\succcurlyeq, \\curlyeqsucc\\)

\\precsim, \\precnsim, \\precapprox, \\precnapprox

\\(\\precsim, \\precnsim, \\precapprox, \\precnapprox\\)

\\succsim, \\succnsim, \\succapprox, \\succnapprox

\\(\\succsim, \\succnsim, \\succapprox, \\succnapprox\\)

"},{"location":"specification/markdown/latex/#_14","title":"\u51e0\u4f55\u7b26\u53f7","text":"

\\parallel, \\nparallel, \\shortparallel, \\nshortparallel

\\(\\parallel, \\nparallel, \\shortparallel, \\nshortparallel\\)

\\perp, \\angle, \\sphericalangle, \\measuredangle, 45^\\circ

\\(\\perp, \\angle, \\sphericalangle, \\measuredangle, 45^\\circ\\)

\\Box, \\blacksquare, \\diamond, \\Diamond \\lozenge, \\blacklozenge, \\bigstar

\\(\\Box, \\blacksquare, \\diamond, \\Diamond \\lozenge, \\blacklozenge, \\bigstar\\)

\\bigcirc, \\triangle, \\bigtriangleup, \\bigtriangledown

\\(\\bigcirc, \\triangle, \\bigtriangleup, \\bigtriangledown\\)

\\vartriangle, \\triangledown

\\(\\vartriangle, \\triangledown\\)

\\blacktriangle, \\blacktriangledown, \\blacktriangleleft, \\blacktriangleright

\\(\\blacktriangle, \\blacktriangledown, \\blacktriangleleft, \\blacktriangleright\\)

"},{"location":"specification/markdown/latex/#_15","title":"\u903b\u8f91\u7b26\u53f7","text":"

\\forall, \\exists, \\nexists

\\(\\forall, \\exists, \\nexists\\)

\\therefore, \\because, \\And

\\(\\therefore, \\because, \\And\\)

\\vee, \\curlyvee, \\bigvee

\\(\\vee, \\curlyvee, \\bigvee\\)

\\land, \\wedge, \\curlywedge, \\bigwedge

\\(\\land, \\wedge, \\curlywedge, \\bigwedge\\)

\\bar{q}, \\bar{abc}, \\overline{q}, \\overline{abc},

\\lnot \\neg, \\not\\operatorname{R}, \\bot, \\top

\\(\\bar{q}, \\bar{abc}, \\overline{q}, \\overline{abc},\\)

\\(\\lnot \\neg, \\not\\operatorname{R}, \\bot, \\top\\)

\\vdash \\dashv, \\vDash, \\Vdash, \\models

\\(\\vdash \\dashv, \\vDash, \\Vdash, \\models\\)

\\Vvdash \\nvdash \\nVdash \\nvDash \\nVDash

\\(\\Vvdash \\nvdash \\nVdash \\nvDash \\nVDash\\)

\\ulcorner \\urcorner \\llcorner \\lrcorner

\\(\\ulcorner \\urcorner \\llcorner \\lrcorner\\)

"},{"location":"specification/markdown/latex/#_16","title":"\u7bad\u5934","text":"

\\Rrightarrow, \\Lleftarrow

\\(\\Rrightarrow, \\Lleftarrow\\)

\\Rightarrow, \\nRightarrow, \\Longrightarrow \\implies

\\(\\Rightarrow, \\nRightarrow, \\Longrightarrow \\implies\\)

\\Leftarrow, \\nLeftarrow, \\Longleftarrow

\\(\\Leftarrow, \\nLeftarrow, \\Longleftarrow\\)

\\Leftrightarrow, \\nLeftrightarrow, \\Longleftrightarrow \\iff

\\(\\Leftrightarrow, \\nLeftrightarrow, \\Longleftrightarrow \\iff\\)

\\Uparrow, \\Downarrow, \\Updownarrow

\\(\\Uparrow, \\Downarrow, \\Updownarrow\\)

\\rightarrow \\to, \\nrightarrow, \\longrightarrow

\\(\\rightarrow \\to, \\nrightarrow, \\longrightarrow\\)

\\leftarrow \\gets, \\nleftarrow, \\longleftarrow

\\(\\leftarrow \\gets, \\nleftarrow, \\longleftarrow\\)

\\leftrightarrow, \\nleftrightarrow, \\longleftrightarrow

\\(\\leftrightarrow, \\nleftrightarrow, \\longleftrightarrow\\)

\\uparrow, \\downarrow, \\updownarrow

\\(\\uparrow, \\downarrow, \\updownarrow\\)

\\nearrow, \\swarrow, \\nwarrow, \\searrow

\\(\\nearrow, \\swarrow, \\nwarrow, \\searrow\\)

\\mapsto, \\longmapsto

\\(\\mapsto, \\longmapsto\\)

\\rightharpoonup \\rightharpoondown \\leftharpoonup \\leftharpoondown \\upharpoonleft \\upharpoonright \\downharpoonleft \\downharpoonright \\rightleftharpoons \\leftrightharpoons

\\(\\rightharpoonup \\rightharpoondown \\leftharpoonup \\leftharpoondown \\upharpoonleft \\upharpoonright \\downharpoonleft \\downharpoonright \\rightleftharpoons \\leftrightharpoons\\)

\\curvearrowleft \\circlearrowleft \\Lsh \\upuparrows \\rightrightarrows \\rightleftarrows \\rightarrowtail \\looparrowright

\\(\\curvearrowleft \\circlearrowleft \\Lsh \\upuparrows \\rightrightarrows \\rightleftarrows \\rightarrowtail \\looparrowright\\)

\\curvearrowright \\circlearrowright \\Rsh \\downdownarrows \\leftleftarrows \\leftrightarrows \\leftarrowtail \\looparrowleft

\\(\\curvearrowright \\circlearrowright \\Rsh \\downdownarrows \\leftleftarrows \\leftrightarrows \\leftarrowtail \\looparrowleft\\)

\\hookrightarrow \\hookleftarrow \\multimap \\leftrightsquigarrow \\rightsquigarrow \\twoheadrightarrow \\twoheadleftarrow

\\(\\hookrightarrow \\hookleftarrow \\multimap \\leftrightsquigarrow \\rightsquigarrow \\twoheadrightarrow \\twoheadleftarrow\\)

"},{"location":"specification/markdown/latex/#_17","title":"\u7279\u6b8a\u7b26\u53f7","text":"

\u7701\u7565\u53f7\uff1a\u6570\u5b66\u516c\u5f0f\u4e2d\u5e38\u89c1\u7684\u7701\u7565\u53f7\u6709\u4e24\u79cd\uff0c\\ldots \u8868\u793a\u4e0e\u6587\u672c\u5e95\u7ebf\u5bf9\u9f50\u7684\u7701\u7565\u53f7\uff0c\\cdots \u8868\u793a\u4e0e\u6587\u672c\u4e2d\u7ebf\u5bf9\u9f50\u7684\u7701\u7565\u53f7\u3002

\\amalg \\% \\dagger \\ddagger \\ldots \\cdots

\\(\\amalg \\% \\dagger \\ddagger \\ldots \\cdots\\)

\\smile \\frown \\wr \\triangleleft \\triangleright

\\(\\smile \\frown \\wr \\triangleleft \\triangleright\\)

\\diamondsuit, \\heartsuit, \\clubsuit, \\spadesuit, \\Game, \\flat, \\natural, \\sharp

\\(\\diamondsuit, \\heartsuit, \\clubsuit, \\spadesuit, \\Game, \\flat, \\natural, \\sharp\\)

"},{"location":"specification/markdown/latex/#_18","title":"\u672a\u5206\u7c7b","text":"

\\diagup \\diagdown \\centerdot \\ltimes \\rtimes \\leftthreetimes \\rightthreetimes

\\(\\diagup \\diagdown \\centerdot \\ltimes \\rtimes \\leftthreetimes \\rightthreetimes\\)

\\eqcirc \\circeq \\triangleq \\bumpeq \\Bumpeq \\doteqdot \\risingdotseq \\fallingdotseq

\\(\\eqcirc \\circeq \\triangleq \\bumpeq \\Bumpeq \\doteqdot \\risingdotseq \\fallingdotseq\\)

\\intercal \\barwedge \\veebar \\doublebarwedge \\between \\pitchfork

\\(\\intercal \\barwedge \\veebar \\doublebarwedge \\between \\pitchfork\\)

\\vartriangleleft \\ntriangleleft \\vartriangleright \\ntriangleright

\\(\\vartriangleleft \\ntriangleleft \\vartriangleright \\ntriangleright\\)

\\trianglelefteq \\ntrianglelefteq \\trianglerighteq \\ntrianglerighteq

\\(\\trianglelefteq \\ntrianglelefteq \\trianglerighteq \\ntrianglerighteq\\)

"},{"location":"specification/markdown/latex/#_19","title":"\u4e0a\u6807\u3001\u4e0b\u6807\u53ca\u79ef\u5206\u7b49","text":"

\u529f\u80fd|\u8bed\u6cd5|\u6548\u679c

^ \u8868\u793a\u4e0a\u6807, _ \u8868\u793a\u4e0b\u6807\u3002\u5982\u679c\u4e0a\u4e0b\u6807\u7684\u5185\u5bb9\u591a\u4e8e\u4e00\u4e2a\u5b57\u7b26\uff0c\u9700\u8981\u7528 {} \u5c06\u8fd9\u4e9b\u5185\u5bb9\u62ec\u6210\u4e00\u4e2a\u6574\u4f53\u3002\u4e0a\u4e0b\u6807\u53ef\u4ee5\u5d4c\u5957\uff0c\u4e5f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u3002

\u4e0a\u6807

a^2

\\(a^2\\)

\u4e0b\u6807

a_2

\\(a_2\\)

\u7ec4\u5408

a^{2+2}

\\(a^{2+2}\\)

a_{i,j}

\\(a_{i,j}\\)

\u7ed3\u5408\u4e0a\u4e0b\u6807

x_2^3

\\(x_2^3\\)

\u524d\u7f6e\u4e0a\u4e0b\u6807

{}_1^2\\!X_3^4

\\({}_1^2\\!X_3^4\\)

\u5bfc\u6570

x'

\\(x'\\)

\u5bfc\u6570

x^\\prime

\\(x\\prime\\)

\u5bfc\u6570\u70b9

\\dot{x}

\\(\\dot{x}\\)

\\ddot{y}

\\(\\ddot{y}\\)

\u5411\u91cf

\\vec{c}\uff08\u53ea\u6709\u4e00\u4e2a\u5b57\u6bcd\uff09

\\(\\vec{c}\\)

\\overleftarrow{a b}

\\(\\overleftarrow{a b}\\)

\\overrightarrow{c d}

\\(\\overrightarrow{c d}\\)

\\overleftrightarrow{a b}

\\(\\overleftrightarrow{a b}\\)

\\widehat{e f g}

\\(\\widehat{e f g}\\)

\u4e0a\u5f27

\uff08\u6ce8: \u6b63\u786e\u5e94\u8be5\u7528 \\overarc\uff0c\u4f46\u5728\u8fd9\u91cc\u884c\u4e0d\u901a\u3002\u8981\u7528\u5efa\u8bae\u7684\u8bed\u6cd5\u4f5c\u4e3a\u89e3\u51b3\u529e\u6cd5\u3002\uff09\uff08\u4f7f\u7528 overarc \u65f6\u9700\u8981\u5f15\u5165 {arcs} \u5305\u3002\uff09

\\overset{\\frown} {AB}

\\(\\overset{\\frown} {AB}\\)

\u4e0a\u5212\u7ebf

\\overline{h i j}

\\(\\overline{h i j}\\)

\u4e0b\u5212\u7ebf

\\underline{k l m}

\\(\\underline{k l m}\\)

\u4e0a\u62ec\u53f7

\\overbrace{1+2+\\cdots+100}

\\(\\overbrace{1+2+\\cdots+100}\\)

\\begin{matrix} 5050 \\\\ \\overbrace{ 1+2+\\cdots+100 } \\end{matrix}

\\(\\begin{matrix} 5050 \\\\ \\overbrace{ 1+2+\\cdots+100 } \\end{matrix}\\)

\u4e0b\u62ec\u53f7

\\underbrace{a+b+\\cdots+z}

\\(\\underbrace{a+b+\\cdots+z}\\)

\\begin{matrix} \\underbrace{ a+b+\\cdots+z } \\\\ 26 \\end{matrix}

\\(\\begin{matrix} \\underbrace{ a+b+\\cdots+z } \\\\ 26 \\end{matrix}\\)

\u6c42\u548c\uff08\u7d2f\u52a0\uff09

\\sum_{k=1}^N k^2

\\(\\sum_{k=1}^N k^2\\)

\\begin{matrix} \\sum_{k=1}^N k^2 \\end{matrix}

\\(\\begin{matrix} \\sum_{k=1}^N k^2 \\end{matrix}\\)

\u6c42\u79ef\uff08\u7d2f\u4e58\uff09

\\prod_{i=1}^N x_i

\\(\\prod_{i=1}^N x_i\\)

\\begin{matrix} \\prod_{i=1}^N x_i \\end{matrix}

\\(\\begin{matrix} \\prod_{i=1}^N x_i \\end{matrix}\\)

\u4e0a\u79ef

\\coprod_{i=1}^N x_i

\\(\\coprod_{i=1}^N x_i\\)

\\begin{matrix} \\coprod_{i=1}^N x_i \\end{matrix}

\\(\\begin{matrix} \\coprod_{i=1}^N x_i \\end{matrix}\\)

\u6781\u9650

\\lim_{n \\to \\infty}x_n

\\(\\lim_{n \\to \\infty}x_n\\)

\\begin{matrix} \\lim_{n \\to \\infty}x_n \\end{matrix}

\\(\\begin{matrix} \\lim_{n \\to \\infty}x_n \\end{matrix}\\)

\u79ef\u5206

\\int_{-N}^{N} e^x\\, {\\rm d}x

\\(\\int_{-N}^{N} e^x\\, {\\rm d}x\\)

\u672c\u4f8b\u4e2d \\ , \u548c {\\rm d} \u90e8\u5206\u53ef\u7701\u7565\uff0c\u4f46\u5efa\u8bae\u52a0\u5165\uff0c\u80fd\u4f7f\u5f0f\u5b50\u66f4\u7f8e\u89c2\u3002{\\rm d} \u53ef\u4ee5\u7528 \\mathrm{d} \u7b49\u4ef7\u66ff\u6362\u3002

\\begin{matrix} \\int_{-N}^{N} e^x\\, \\mathrm{d}x \\end{matrix}\uff08\u77e9\u9635\u4e2d\u79ef\u5206\u7b26\u53f7\u53d8\u5c0f\uff09

\\(\\begin{matrix} \\int_{-N}^{N} e^x\\, \\mathrm{d}x \\end{matrix}\\)

\u53cc\u91cd\u79ef\u5206

\\iint_{D}^{W} \\, \\mathrm{d}x\\,\\mathrm{d}y

\\(\\iint_{D}^{W} \\, \\mathrm{d}x\\,\\mathrm{d}y\\)

\u4e09\u91cd\u79ef\u5206

\\iiint_{E}^{V} \\, \\mathrm{d}x\\,\\mathrm{d}y\\,\\mathrm{d}z

\\(\\iiint_{E}^{V} \\, \\mathrm{d}x\\,\\mathrm{d}y\\,\\mathrm{d}z\\)

\u95ed\u5408\u7684\u66f2\u7ebf\u3001\u66f2\u9762\u79ef\u5206

\\oint_{C} x^3\\, \\mathrm{d}x + 4y^2\\, \\mathrm{d}y

\\(\\oint_{C} x^3\\, \\mathrm{d}x + 4y^2\\, \\mathrm{d}y\\)

\u4ea4\u96c6

\\bigcap_1^{n} p

\\(\\bigcap_1^{n} p\\)

\u5e76\u96c6

\\bigcup_1^{k} p

\\(\\bigcup_1^{k} p\\)

"},{"location":"specification/markdown/latex/#_20","title":"\u5206\u6570","text":"

\u901a\u5e38\u4f7f\u7528 \\frac {\u5206\u5b50} {\u5206\u6bcd} \u547d\u4ee4\u4ea7\u751f\u4e00\u4e2a\u5206\u6570\uff0c\u5206\u6570\u53ef\u5d4c\u5957\u3002 \u4fbf\u6377\u60c5\u51b5\u53ef\u76f4\u63a5\u8f93\u5165 \\frac ab \u6765\u5feb\u901f\u751f\u6210\u4e00\u4e2a \\(\\frac ab\\) \u3002 \u5982\u679c\u5206\u5f0f\u5f88\u590d\u6742\uff0c\u4ea6\u53ef\u4f7f\u7528 \u5206\u5b50 \\over \u5206\u6bcd \u547d\u4ee4\uff0c\u6b64\u65f6\u5206\u6570\u4ec5\u6709\u4e00\u5c42\u3002

\u529f\u80fd|\u8bed\u6cd5|\u6548\u679c

\u5206\u6570

\\frac{2}{4} = 0.5

\\(\\frac{2}{4}=0.5\\)

\u5c0f\u578b\u5206\u6570

\\tfrac{2}{4} = 0.5

\\(\\tfrac{2}{4} = 0.5\\)

\u8fde\u5206\u5f0f\uff08\u5927\u578b\u5d4c\u5957\u5206\u5f0f\uff09

\\cfrac{2}{c + \\cfrac{2}{d + \\cfrac{2}{4}}} = a

\\(\\cfrac{2}{c + \\cfrac{2}{d + \\cfrac{2}{4}}} = a\\)

\u5927\u578b\u4e0d\u5d4c\u5957\u5206\u5f0f

\\dfrac{2}{4} = 0.5 \\qquad \\dfrac{2}{c + \\dfrac{2}{d + \\dfrac{2}{4}}} = a

\\(\\dfrac{2}{4} = 0.5 \\qquad \\dfrac{2}{c + \\dfrac{2}{d + \\dfrac{2}{4}}} = a\\)

\u4e8c\u9879\u5f0f\u7cfb\u6570

\\dbinom{n}{r}=\\binom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}

\\(\\dbinom{n}{r}=\\binom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)

\u5c0f\u578b\u4e8c\u9879\u5f0f\u7cfb\u6570

\\tbinom{n}{r}=\\tbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}

\\(\\tbinom{n}{r}=\\tbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)

\u5927\u578b\u4e8c\u9879\u5f0f\u7cfb\u6570

\\binom{n}{r}=\\dbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}

\\(\\binom{n}{r}=\\dbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)

\u5728\u4ee5 \\(e\\) \u4e3a\u5e95\u7684\u6307\u6570\u51fd\u6570\u3001\u6781\u9650\u548c\u79ef\u5206\u4e2d\u5c3d\u91cf\u4e0d\u8981\u4f7f\u7528 \\frac \u7b26\u53f7\uff1a\u5b83\u4f1a\u4f7f\u6574\u6bb5\u51fd\u6570\u770b\u8d77\u6765\u5f88\u602a\uff0c\u800c\u4e14\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\u3002\u4e5f\u6b63\u662f\u56e0\u6b64\u5b83\u5728\u4e13\u4e1a\u6570\u5b66\u6392\u7248\u4e2d\u51e0\u4e4e\u4ece\u4e0d\u51fa\u73b0\u3002 \u6a2a\u7740\u5199\u8fd9\u4e9b\u5206\u5f0f\uff0c\u4e2d\u95f4\u4f7f\u7528\u659c\u7ebf\u95f4\u9694 / \uff08\u7528\u659c\u7ebf\u4ee3\u66ff\u5206\u6570\u7ebf\uff09\u3002

\u4f8b\u5b50\uff1a

\\begin{array}{cc}\n\\mathrm{Bad} & \\mathrm{Better} \\\\\n\\hline \\\\\ne^{i\\frac{\\pi}2} \\quad e^{\\frac{i\\pi}2}& e^{i\\pi/2} \\\\\n\\int_{-\\frac\\pi2}^\\frac\\pi2 \\sin x\\,dx & \\int_{-\\pi/2}^{\\pi/2}\\sin x\\,dx \\\\\n\\end{array}\n

\u663e\u793a\uff1a

\\[ \\begin{array}{cc} \\mathrm{Bad} & \\mathrm{Better} \\\\ \\hline \\\\ e^{i\\frac{\\pi}2} \\quad e^{\\frac{i\\pi}2}& e^{i\\pi/2} \\\\ \\int_{-\\frac\\pi2}^\\frac\\pi2 \\sin x\\,dx & \\int_{-\\pi/2}^{\\pi/2}\\sin x\\,dx \\\\ \\end{array} \\]"},{"location":"specification/markdown/latex/#_21","title":"\u77e9\u9635\u3001\u6761\u4ef6\u8868\u8fbe\u5f0f\u3001\u65b9\u7a0b\u7ec4","text":"

\u8bed\u6cd5\uff1a

\\begin{\u7c7b\u578b}\n\u516c\u5f0f\u5185\u5bb9\n\\end{\u7c7b\u578b}\n

\u7c7b\u578b\u53ef\u4ee5\u662f\uff1a\u77e9\u9635 matrix pmatrix bmatrix Bmatrix vmatrix Vmatrix \u3001\u6761\u4ef6\u8868\u8fbe\u5f0f cases \u3001\u591a\u884c\u5bf9\u9f50\u65b9\u7a0b\u5f0f aligned \u3001\u6570\u7ec4 array\u3002

\u5728\u516c\u5f0f\u5185\u5bb9\u4e2d\uff1a\u5728\u6bcf\u4e00\u884c\u4e2d\u63d2\u5165 & \u6765\u6307\u5b9a\u9700\u8981\u5bf9\u9f50\u7684\u5185\u5bb9\uff0c\u5728\u6bcf\u884c\u7ed3\u5c3e\u5904\u4f7f\u7528 \\\\ \u6362\u884c\u3002

"},{"location":"specification/markdown/latex/#_22","title":"\u65e0\u6846\u77e9\u9635","text":"

\u5728\u5f00\u5934\u4f7f\u7528 begin{matrix} \uff0c\u5728\u7ed3\u5c3e\u4f7f\u7528 end{matrix} \uff0c\u5728\u4e2d\u95f4\u63d2\u5165\u77e9\u9635\u5143\u7d20\uff0c\u6bcf\u4e2a\u5143\u7d20\u4e4b\u95f4\u63d2\u5165 & \uff0c\u5e76\u5728\u6bcf\u884c\u7ed3\u5c3e\u5904\u4f7f\u7528 \\\\ \u3002

\\begin{matrix}\nx & y \\\\\nz & v\n\\end{matrix}\n

\\(\\begin{matrix} x & y \\\\ z & v \\end{matrix}\\)

"},{"location":"specification/markdown/latex/#_23","title":"\u6709\u6846\u77e9\u9635","text":"

\u5728\u5f00\u5934\u5c06 matrix \u66ff\u6362\u4e3a pmatrix bmatrix Bmatrix vmatrix Vmatrix \u3002

\\begin{vmatrix}\nx & y \\\\\nz & v\n\\end{vmatrix}\n

\\(\\begin{vmatrix} x & y \\\\ z & v \\end{vmatrix}\\)

\\begin{Vmatrix}\nx & y \\\\\nz & v\n\\end{Vmatrix}\n

\\(\\begin{Vmatrix} x & y \\\\ z & v \\end{Vmatrix}\\)

\u4f7f\u7528 \\cdots \u22ef \uff0c \\ddots \u22f1 \uff0c \\vdots \u22ee \u6765\u8f93\u5165\u7701\u7565\u7b26\u53f7\u3002

\\begin{bmatrix}\n0      & \\cdots & 0      \\\\\n\\vdots & \\ddots & \\vdots \\\\\n0      & \\cdots & 0\n\\end{bmatrix}\n

\\(\\begin{bmatrix} 0 & \\cdots & 0 \\\\ \\vdots & \\ddots & \\vdots \\\\ 0 & \\cdots & 0 \\end{bmatrix}\\)

\\begin{Bmatrix}\nx & y \\\\\nz & v\n\\end{Bmatrix}\n

\\(\\begin{Bmatrix} x & y \\\\ z & v \\end{Bmatrix}\\)

\\begin{pmatrix}\nx & y \\\\\nz & v\n\\end{pmatrix}\n

\\(\\begin{pmatrix} x & y \\\\ z & v \\end{pmatrix}\\)

"},{"location":"specification/markdown/latex/#_24","title":"\u6761\u4ef6\u8868\u8fbe\u5f0f","text":"
f(n) =\n\\begin{cases} \nn/2,  & \\text{if }n\\text{ is even} \\\\\n3n+1, & \\text{if }n\\text{ is odd}\n\\end{cases}\n

\\(f(n) = \\begin{cases} n/2, & \\text{if }n\\text{ is even} \\\\ 3n+1, & \\text{if }n\\text{ is odd} \\end{cases}\\)

"},{"location":"specification/markdown/latex/#_25","title":"\u591a\u884c\u7b49\u5f0f\u3001\u540c\u4f59\u5f0f","text":"

\u4eba\u4eec\u7ecf\u5e38\u60f3\u8981\u4e00\u5217\u6574\u9f50\u4e14\u5c45\u4e2d\u7684\u65b9\u7a0b\u5f0f\u5e8f\u5217\u3002\u4f7f\u7528 \\begin{aligned}\u2026\\end{aligned} \u3002

\\begin{aligned}\nf(x) & = (m+n)^2 \\\\\n     & = m^2+2mn+n^2 \\\\\n\\end{aligned}\n

\\(\\begin{aligned} f(x) & = (m+n)^2 \\\\ & = m^2+2mn+n^2 \\\\ \\end{aligned}\\)

\\begin{aligned}\n3^{6n+3}+4^{6n+3} \n& \\equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\\\  \n& \\equiv 27^{2n+1}+64^{2n+1}\\\\  \n& \\equiv 27^{2n+1}+(-27)^{2n+1}\\\\ \n& \\equiv 27^{2n+1}-27^{2n+1}\\\\\n& \\equiv 0 \\pmod{91}\\\\\n\\end{aligned}\n

\\(\\begin{aligned} 3^{6n+3}+4^{6n+3} & \\equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\\\ & \\equiv 27^{2n+1}+64^{2n+1}\\\\ & \\equiv 27^{2n+1}+(-27)^{2n+1}\\\\ & \\equiv 27^{2n+1}-27^{2n+1}\\\\ & \\equiv 0 \\pmod{91}\\\\ \\end{aligned}\\)

\\begin{alignedat}{3}\nf(x) & = (m-n)^2 \\\\\nf(x) & = (-m+n)^2 \\\\\n     & = m^2-2mn+n^2 \\\\\n\\end{alignedat}\n

\\(\\begin{alignedat}{3} f(x) & = (m-n)^2 \\\\ f(x) & = (-m+n)^2 \\\\ & = m^2-2mn+n^2 \\\\ \\end{alignedat}\\)

"},{"location":"specification/markdown/latex/#_26","title":"\u65b9\u7a0b\u7ec4","text":"
\\begin{cases}\n3x + 5y +  z \\\\\n7x - 2y + 4z \\\\\n-6x + 3y + 2z\n\\end{cases}\n

\\(\\begin{cases} 3x + 5y + z \\\\ 7x - 2y + 4z \\\\ -6x + 3y + 2z \\end{cases}\\)

\u6216

\\left\\{\\begin{aligned}\n3x + 5y +  z \\\\\n7x - 2y + 4z \\\\\n-6x + 3y + 2z\n\\end{aligned}\\right.\n

\\(\\left\\{\\begin{aligned} 3x + 5y + z \\\\ 7x - 2y + 4z \\\\ -6x + 3y + 2z \\end{aligned}\\right.\\)

"},{"location":"specification/markdown/latex/#_27","title":"\u6570\u7ec4\u4e0e\u8868\u683c","text":"

\u901a\u5e38\uff0c\u4e00\u4e2a\u683c\u5f0f\u5316\u540e\u7684\u8868\u683c\u6bd4\u5355\u7eaf\u7684\u6587\u5b57\u6216\u6392\u7248\u540e\u7684\u6587\u5b57\u66f4\u5177\u6709\u53ef\u8bfb\u6027\u3002\u6570\u7ec4\u548c\u8868\u683c\u5747\u4ee5 \\begin{array} \u5f00\u5934\uff0c\u5e76\u5728\u5176\u540e\u5b9a\u4e49\u5217\u6570\u53ca\u6bcf\u4e00\u5217\u7684\u6587\u672c\u5bf9\u9f50\u5c5e\u6027\uff0cc l r \u5206\u522b\u4ee3\u8868\u5c45\u4e2d\u3001\u5de6\u5bf9\u9f50\u53ca\u53f3\u5bf9\u9f50\u3002\u82e5\u9700\u8981\u63d2\u5165\u5782\u76f4\u5206\u5272\u7ebf\uff0c\u5728\u5b9a\u4e49\u5f0f\u4e2d\u63d2\u5165 | \uff0c\u82e5\u8981\u63d2\u5165\u6c34\u5e73\u5206\u5272\u7ebf\uff0c\u5728\u4e0b\u4e00\u884c\u8f93\u5165\u524d\u63d2\u5165 \\hline \u3002\u4e0e\u77e9\u9635\u76f8\u4f3c\uff0c\u6bcf\u884c\u5143\u7d20\u95f4\u5747\u987b\u8981\u63d2\u5165 & \uff0c\u6bcf\u884c\u5143\u7d20\u4ee5 \\\\ \u7ed3\u5c3e\uff0c\u6700\u540e\u4ee5 \\end{array} \u7ed3\u675f\u6570\u7ec4\u3002

  • \u4f8b\u5b50\uff1a
\\begin{array}{c|lcr}\nn & \\text{\u5de6\u5bf9\u9f50} & \\text{\u5c45\u4e2d\u5bf9\u9f50} & \\text{\u53f3\u5bf9\u9f50} \\\\\n\\hline\n1 & 0.24 & 1 & 125 \\\\\n2 & -1 & 189 & -8 \\\\\n3 & -20 & 2000 & 1+10i\n\\end{array}\n
  • \u663e\u793a\uff1a

\\(\\begin{array}{c|lcr} n & \\text{\u5de6\u5bf9\u9f50} & \\text{\u5c45\u4e2d\u5bf9\u9f50} & \\text{\u53f3\u5bf9\u9f50} \\\\ \\hline 1 & 0.24 & 1 & 125 \\\\ 2 & -1 & 189 & -8 \\\\ 3 & -20 & 2000 & 1+10i \\end{array}\\)

  • \u4f8b\u5b50:
\\begin{array}{lcl}\nz        & = & a \\\\\nf(x,y,z) & = & x + y + z \n\\end{array}\n
  • \u663e\u793a\uff1a

\\(\\begin{array}{lcl} z & = & a \\\\ f(x,y,z) & = & x + y + z \\end{array}\\)

  • \u4f8b\u5b50:
\\begin{array}{lcr}\nz        & = & a \\\\\nf(x,y,z) & = & x + y + z    \n\\end{array}\n
  • \u663e\u793a:

\\(\\begin{array}{lcr} z & = & a \\\\ f(x,y,z) & = & x + y + z \\end{array}\\)

  • \u4f8b\u5b50:
\\begin{array}{ccc}\na & b & S \\\\\n\\hline\n0&0&1\\\\\n0&1&1\\\\\n1&0&1\\\\\n1&1&0\\\\\n\\end{array}\n
  • \u663e\u793a:

\\(\\begin{array}{ccc} a & b & S \\\\ \\hline 0&0&1\\\\ 0&1&1\\\\ 1&0&1\\\\ 1&1&0\\\\ \\end{array}\\)

"},{"location":"specification/markdown/latex/#_28","title":"\u5d4c\u5957\u6570\u7ec4\u6216\u8868\u683c","text":"

\u591a\u4e2a\u6570\u7ec4/\u8868\u683c\u53ef \u4e92\u76f8\u5d4c\u5957 \u5e76\u7ec4\u6210\u4e00\u7ec4\u6570\u7ec4/\u4e00\u7ec4\u8868\u683c\u3002 \u4f7f\u7528\u5d4c\u5957\u524d\u5fc5\u987b\u58f0\u660e $$ \u7b26\u53f7\u3002

  • \u4f8b\u5b50\uff1a
% outer vertical array of arrays \u5916\u5c42\u5782\u76f4\u8868\u683c\n\\begin{array}{c}\n    % inner horizontal array of arrays \u5185\u5c42\u6c34\u5e73\u8868\u683c\n    \\begin{array}{cc}\n        % inner array of minimum values \u5185\u5c42\"\u6700\u5c0f\u503c\"\u6570\u7ec4\n        \\begin{array}{c|cccc}\n        \\text{min} & 0 & 1 & 2 & 3\\\\\n        \\hline\n        0 & 0 & 0 & 0 & 0\\\\\n        1 & 0 & 1 & 1 & 1\\\\\n        2 & 0 & 1 & 2 & 2\\\\\n        3 & 0 & 1 & 2 & 3\n        \\end{array}\n    &\n        % inner array of maximum values \u5185\u5c42\"\u6700\u5927\u503c\"\u6570\u7ec4\n        \\begin{array}{c|cccc}\n        \\text{max}&0&1&2&3\\\\\n        \\hline\n        0 & 0 & 1 & 2 & 3\\\\\n        1 & 1 & 1 & 2 & 3\\\\\n        2 & 2 & 2 & 2 & 3\\\\\n        3 & 3 & 3 & 3 & 3\n        \\end{array}\n    \\end{array}\n    % \u5185\u5c42\u7b2c\u4e00\u884c\u8868\u683c\u7ec4\u7ed3\u675f\n    \\\\\n    % inner array of delta values \u5185\u5c42\u7b2c\u4e8c\u884cDelta\u503c\u6570\u7ec4\n        \\begin{array}{c|cccc}\n        \\Delta&0&1&2&3\\\\\n        \\hline\n        0 & 0 & 1 & 2 & 3\\\\\n        1 & 1 & 0 & 1 & 2\\\\\n        2 & 2 & 1 & 0 & 1\\\\\n        3 & 3 & 2 & 1 & 0\n        \\end{array}\n        % \u5185\u5c42\u7b2c\u4e8c\u884c\u8868\u683c\u7ec4\u7ed3\u675f\n\\end{array}\n
  • \u663e\u793a\uff1a

\\(% outer vertical array of arrays \u5916\u5c42\u5782\u76f4\u8868\u683c \\begin{array}{c} % inner horizontal array of arrays \u5185\u5c42\u6c34\u5e73\u8868\u683c \\begin{array}{cc} % inner array of minimum values \u5185\u5c42\"\u6700\u5c0f\u503c\"\u6570\u7ec4 \\begin{array}{c|cccc} \\text{min} & 0 & 1 & 2 & 3\\\\ \\hline 0 & 0 & 0 & 0 & 0\\\\ 1 & 0 & 1 & 1 & 1\\\\ 2 & 0 & 1 & 2 & 2\\\\ 3 & 0 & 1 & 2 & 3 \\end{array} & % inner array of maximum values \u5185\u5c42\"\u6700\u5927\u503c\"\u6570\u7ec4 \\begin{array}{c|cccc} \\text{max}&0&1&2&3\\\\ \\hline 0 & 0 & 1 & 2 & 3\\\\ 1 & 1 & 1 & 2 & 3\\\\ 2 & 2 & 2 & 2 & 3\\\\ 3 & 3 & 3 & 3 & 3 \\end{array} \\end{array} % \u5185\u5c42\u7b2c\u4e00\u884c\u8868\u683c\u7ec4\u7ed3\u675f \\\\ % inner array of delta values \u5185\u5c42\u7b2c\u4e8c\u884cDelta\u503c\u6570\u7ec4 \\begin{array}{c|cccc} \\Delta&0&1&2&3\\\\ \\hline 0 & 0 & 1 & 2 & 3\\\\ 1 & 1 & 0 & 1 & 2\\\\ 2 & 2 & 1 & 0 & 1\\\\ 3 & 3 & 2 & 1 & 0 \\end{array} % \u5185\u5c42\u7b2c\u4e8c\u884c\u8868\u683c\u7ec4\u7ed3\u675f \\end{array}\\)

"},{"location":"specification/markdown/latex/#_29","title":"\u7528\u6570\u7ec4\u5b9e\u73b0\u5e26\u5206\u5272\u7b26\u53f7\u7684\u77e9\u9635","text":"
  • \u4f8b\u5b50\uff1a
$$\n\\left[\n\\begin{array}{cc|c}\n1&2&3\\\\\n4&5&6\n\\end{array}\n\\right]\n$$\n

\u663e\u793a\uff1a

\\[ \\left[ \\begin{array}{cc|c} 1&2&3\\\\ 4&5&6 \\end{array} \\right] \\]

\u5176\u4e2d cc|c \u4ee3\u8868\u5728\u4e00\u4e2a\u4e09\u5217\u77e9\u9635\u4e2d\u7684\u7b2c\u4e8c\u548c\u7b2c\u4e09\u5217\u4e4b\u95f4\u63d2\u5165\u5206\u5272\u7ebf\u3002

"},{"location":"specification/markdown/latex/#_30","title":"\u5b57\u4f53","text":""},{"location":"specification/markdown/latex/#_31","title":"\u5e0c\u814a\u5b57\u6bcd","text":"

Note

\u5bf9\u4e8e\u90e8\u5206\u5e0c\u814a\u5b57\u6bcd\uff0c\u4f8b\u5982 \\Alpha \u5728\u9884\u89c8\u65f6\u4f1a\u751f\u6548\u4f46\u5728\u7f51\u9875\u4e0a\u6e32\u67d3\u4f1a\u51fa\u73b0\u9519\u8bef\uff0c\u56e0\u6b64\u8fd9\u91cc\u7684\u5e0c\u814a\u5b57\u7b26\u5199\u6cd5\u53c2\u8003 Greek letters \u8fdb\u884c\u7f16\u8f91\uff0c\u66f4\u591a\u8be6\u60c5\u8bf7\u53c2\u8003 #39 LaTeX\u6587\u6863\u5e0c\u814a\u5b57\u6bcd\u5927\u5199\u663e\u793a\u6709\u95ee\u9898 \u3002

\u8f93\u5165 \\\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd\u82f1\u6587\u5168\u79f0 \u548c \\\u9996\u5b57\u6bcd\u5927\u5199\u5e0c\u814a\u5b57\u6bcd\u82f1\u6587\u5168\u79f0 \u6765\u5206\u522b\u8f93\u5165\u5c0f\u5199\u548c\u5927\u5199\u5e0c\u814a\u5b57\u6bcd\u3002

A B \\Gamma \\Delta E Z H \\Theta

\\(A B \\Gamma \\Delta E Z H \\Theta\\)

I K \\Lambda M N \\Xi O \\Pi

\\(I K \\Lambda M N \\Xi O \\Pi\\)

P \\Sigma T \\Upsilon \\Phi X \\Psi \\Omega

\\(P \\Sigma T \\Upsilon \\Phi X \\Psi \\Omega\\)

\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta

\\(\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta\\)

\\iota \\kappa \\lambda \\mu \\nu \\omicron \\xi \\pi

\\(\\iota \\kappa \\lambda \\mu \\nu \\omicron \\xi \\pi\\)

\\rho \\sigma \\tau \\upsilon \\phi \\chi \\psi \\omega

\\(\\rho \\sigma \\tau \\upsilon \\phi \\chi \\psi \\omega\\)

\u90e8\u5206\u5b57\u6bcd\u6709\u53d8\u91cf\u4e13\u7528\u5f62\u5f0f\uff0c\u4ee5 \\var- \u5f00\u5934\u3002

\\varepsilon \\digamma \\varkappa \\varpi

\\(\\varepsilon \\digamma \\varkappa \\varpi\\)

\\varrho \\varsigma \\vartheta \\varphi

\\(\\varrho \\varsigma \\vartheta \\varphi\\)

"},{"location":"specification/markdown/latex/#_32","title":"\u5e0c\u4f2f\u6765\u7b26\u53f7","text":"

\\aleph \\beth \\gimel \\daleth

\\(\\aleph \\beth \\gimel \\daleth\\)

Note

\u8be5\u6307\u5357\u6458\u81ea LaTeX\u516c\u5f0f\u624b\u518c \uff0c\u4f60\u53ef\u4ee5\u70b9\u51fb\u94fe\u63a5\u6765\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002

"},{"location":"specification/markdown/markdown/","title":"Markdown \u5199\u4f5c","text":"

Note

\u672c\u6587\u63d0\u4f9b\u4e86Markdown\u7684\u57fa\u672c\u64b0\u5199\u8bf4\u660e\u3002\u56e0\u4e3a\u4e3b\u9898\u8bbe\u7f6e\u7684\u7f18\u6545\u53ef\u80fd\u4f1a\u5bfc\u81f4\u67d0\u4e9b\u6548\u679c\u4e0d\u751f\u6548\uff0c\u9047\u5230\u6b64\u95ee\u9898\u8bf7\u524d\u5f80 issues \u8fdb\u884c\u53cd\u9988\u3002

"},{"location":"specification/markdown/markdown/#_1","title":"\u6807\u9898","text":"

\u4f60\u7684\u5185\u5bb9\u6807\u9898\u5e94\u8be5\u4ece\u4e8c\u7ea7\u6807\u9898\uff08 ## \uff09\u5f00\u59cb

# \u4e00\u7ea7\u6807\u9898\n## \u4e8c\u7ea7\u6807\u9898\n### \u4e09\u7ea7\u6807\u9898\n
"},{"location":"specification/markdown/markdown/#_2","title":"\u5f3a\u8c03\uff0c\u659c\u4f53\uff0c\u5220\u9664\u7ebf","text":"

\u6211\u4eec\u53ea\u77e5\u9053 \u5730\u7403 \u5177\u6709\u8ba9\u4eba\u7c7b\u751f\u5b58\u7684\u73af\u5883\uff0c\u8fd8\u6709 \u706b\u661f \uff0c\u4e5f\u8bb8\u8fd8\u6709 \u5176\u5b83\u661f\u7403 \u3002

\u6211\u4eec\u53ea\u77e5\u9053 **\u5730\u7403** \u5177\u6709\u8ba9\u4eba\u7c7b\u751f\u5b58\u7684\u73af\u5883\uff0c\u8fd8\u6709 ~~\u706b\u661f~~ \uff0c\u4e5f\u8bb8\u8fd8\u6709 *\u5176\u5b83\u661f\u7403* \u3002\n
"},{"location":"specification/markdown/markdown/#_3","title":"\u5206\u9694\u7b26","text":"
---\n***\n
"},{"location":"specification/markdown/markdown/#_4","title":"\u94fe\u63a5","text":"

\u4f60\u5e94\u8be5\u907f\u514d\u76f4\u63a5\u5185\u5d4c HTML \u4ee3\u7801\u3002

[link name](link url) \u6216\u8005 <link url>\n
"},{"location":"specification/markdown/markdown/#_5","title":"\u5217\u8868","text":"
  • \u591a\u7ffb\u8bd1\u5f15\u64ce

    • \u8c37\u6b4c\u7ffb\u8bd1
    • \u5fae\u8f6f\u7ffb\u8bd1
    • \u6709\u9053\u7ffb\u8bd1
    • \u767e\u5ea6\u7ffb\u8bd1
    • \u963f\u91cc\u7ffb\u8bd1
    • DeepL \u7ffb\u8bd1
  • \u591a\u8bed\u8a00\u4e92\u8bd1

- \u591a\u7ffb\u8bd1\u5f15\u64ce\n\n    * \u8c37\u6b4c\u7ffb\u8bd1\n    * \u5fae\u8f6f\u7ffb\u8bd1\n    * \u6709\u9053\u7ffb\u8bd1\n    * \u767e\u5ea6\u7ffb\u8bd1\n    * \u963f\u91cc\u7ffb\u8bd1\n    * DeepL \u7ffb\u8bd1\n\n- \u591a\u8bed\u8a00\u4e92\u8bd1\n
"},{"location":"specification/markdown/markdown/#_6","title":"\u4ee3\u7801","text":"

\u4f7f\u7528\u5355\u5f15\u53f7 code \u6765\u8868\u793a\u884c\u5185\u4ee3\u7801\uff0c\u4f7f\u7528\u4e09\u5f15\u53f7\u6765\u8868\u793a\u4ee3\u7801\u5757\u3002

code\n

\u5e76\u4e14\u5bf9\u4e8e\u4ee3\u7801\u5757\uff0c\u4f60\u5e94\u8be5\u5199\u4e0a\u5bf9\u5e94\u7684\u8bed\u8a00\u3002

"},{"location":"specification/markdown/markdown/#_7","title":"\u56fe\u7247","text":"

\u4f60\u5e94\u8be5\u907f\u514d\u5185\u5d4c HTML \u6765\u63d2\u5165\u56fe\u7247\u3002

![link name](picture url)\n
"},{"location":"specification/markdown/markdown/#_8","title":"\u6ce8\u91ca","text":"

\u4e0b\u9762\u662f\u4e00\u6bb5\u6ce8\u91ca

\u8fd9\u91cc\u662f\u4e00\u6bb5\u6ce8\u91ca (<blockquote></blockquote>) \u8fd9\u662f\u6ce8\u91ca\u7684\u7b2c\u4e8c\u884c

# \u8fd9\u91cc\u662f\u6ce8\u91ca\u91cc\u9762\u7684\u4ee3\u7801\u6bb5\nprint(\"hello\")\n

\u6ce8\u91ca

\u6ce8\u91ca\u5d4c\u5957 \u6ce8\u91ca\u5d4c\u5957

\u4e0b\u9762\u662f\u4e00\u6bb5\u6ce8\u91ca\n> \u8fd9\u91cc\u662f\u4e00\u6bb5\u6ce8\u91ca (`<blockquote></blockquote>`)\n> \u8fd9\u662f\u6ce8\u91ca\u7684\u7b2c\u4e8c\u884c\n\n# \u8fd9\u91cc\u662f\u6ce8\u91ca\u91cc\u9762\u7684\u4ee3\u7801\u6bb5\nprint(\"hello\")\n\n> \u6ce8\u91ca\n>> \u6ce8\u91ca\u5d4c\u5957\n>> \u6ce8\u91ca\u5d4c\u5957\n
"},{"location":"specification/markdown/markdown/#emoji","title":"Emoji","text":"

\u6682\u4e0d\u652f\u6301 emoji \u8bed\u6cd5\uff0c\u4f46\u662f\u53ef\u4ee5\u76f4\u63a5\u4ece emoji \u8868\u60c5\u5927\u5168\u62f7\u8d1d\u8868\u60c5\u5230\u6587\u6863\uff0c\u6bd4\u5982: \ud83c\udf4a \ud83c\udf47 \ud83d\ude00 \ud83d\ude05 \ud83d\ude07

\u8bbf\u95eehttp://emojihomepage.com/\u4ee5\u83b7\u53d6\u66f4\u591aemoji

"},{"location":"specification/markdown/markdown/#_9","title":"\u4e0a\u4e0b\u6807","text":"

H2O\uff0c y = x2

H~2~O\uff0c y = x^2^\n
"},{"location":"specification/markdown/markdown/#_10","title":"\u5f15\u7528","text":"

\u6211\u80fd\u5e72\u996d\u6211\u81ea\u8c6a\u30021

\u6211\u80fd\u5e72\u996d\u6211\u81ea\u8c6a\u3002[^\u5e72\u996d\u4eba]\n\n[^\u5e72\u996d\u4eba]: \u8001\u5b50\u8bf4\u9053\n\u8fd9\u4f1a\u5728\u6587\u7ae0\u672b\u5c3e\u8fdb\u884c\u6ce8\u89e3\n
"},{"location":"specification/markdown/markdown/#_11","title":"\u8868\u683c","text":"Header 1 Header2 Cell 1 Cell 2 link Cell 3 Cell 4
| Header 1 | *Header2* |\n| -------- | -------- |\n| `Cell 1` | [Cell 2](http://example.com) link |\n| Cell 3 | **Cell 4** |\n
"},{"location":"specification/markdown/markdown/#_12","title":"\u4efb\u52a1\u5217\u8868","text":"
  • \u4efb\u52a11
  • \u4efb\u52a12
  • \u4efb\u52a13
  • \u4efb\u52a14
- [x] \u4efb\u52a11\n- [x] \u4efb\u52a12\n- [ ] \u4efb\u52a13\n- [ ] \u4efb\u52a14\n
"},{"location":"specification/markdown/markdown/#_13","title":"\u6570\u5b66","text":"

\u6587\u6863\u652f\u6301 LaTeX \uff0c\u5173\u4e8e LaTeX \uff0c\u4f60\u53ef\u4ee5\u8bbf\u95ee LaTeX\u516c\u5f0f\u624b\u518c \u6765\u83b7\u53d6\u5e2e\u52a9\u3002

"},{"location":"specification/markdown/markdown/#mermaid","title":"mermaid \u652f\u6301","text":"

\u4f7f\u7528 mermaid \u53ef\u4ee5\u753b\u5f88\u591a\u7c7b\u578b\u7684\u56fe\u8868\uff0c \u8be6\u7ec6\u7684\u8bed\u6cd5\u548c\u652f\u6301\u8bf7\u770b\u5b98\u7f51

sequenceDiagram\n  Alice->>John: Hello John, how are you?\n  loop Healthcheck\n      John->>John: Fight against hypochondria\n  end\n  Note right of John: Rational thoughts!\n  John-->>Alice: Great!\n  John->>Bob: How about you?\n  Bob-->>John: Jolly good!\n
    ```mermaid\n    sequenceDiagram\n        Alice->>John: Hello John, how are you?\n        loop Healthcheck\n            John->>John: Fight against hypochondria\n        end\n        Note right of John: Rational thoughts!\n        John-->>Alice: Great!\n        John->>Bob: How about you?\n        Bob-->>John: Jolly good!\n    ```\n
  1. \u8001\u5b50\u8bf4\u9053 \u8fd9\u4f1a\u5728\u6587\u7ae0\u672b\u5c3e\u8fdb\u884c\u6ce8\u89e3\u00a0\u21a9

"},{"location":"en/","title":"Preface","text":""},{"location":"en/#the-original-intention-of-tooldiy","title":"The original intention of ToolDiy","text":"
  1. In the long river of time, we found that repetitive and tedious work brings only time and energy consumption to everyone.Indeed,in our continuous thinking and progress, excellent tools have appeared before our eyes.But what follows is that the rapid development of the types and quantities of tools makes it difficult for us to quickly and easily get started with a tool according to specific needs. On the contrary, \"Baidu\" and \"Google\" have become our commonplace. Keep trying in link after link and answer. Some are jerky English documents, some are a few words, which undoubtedly increases our cost of use. So the original intention of Tooldiy is to solve this problem.We want to use the environment of the open source community to continuously collect and refine tools from all walks of life (after all, the one that suits you is the best). Tooldiy will recommend and analyze various tools from an objective and user perspective, not just limited to a fixed direction.

  2. Many times we will encounter environment configuration problems of many tools during the development process. We have to spend a lot of time thinking and learning to use them. Many times, these tasks can only exercise your patience in configuring the environment. We want to Everyone focuses on the tool itself, so we want to maintain some automated scripts for tool configuration and construction or a docker environment for the convenience of users. Of course, the build scripts we left when writing can also be provided for users to learn. It's exciting to think about a tool that can be obtained with one click, let's build it together!

As long as it can bring you help and a better experience, this is the meaning of Tooldiy's existence.

Now, let's use it together!

"},{"location":"en/#contribute","title":"Contribute","text":"

The original intention of this project is to provide a warehouse and wiki for maintaining a tool description. It is a project that lowers the threshold of use and is convenient for everyone. Our principle is not limited to any specific discipline and field. We can share all the tools we think are useful (Pay attention to the introductory introduction, which is in line with the original intention of the project). It can be shared under the premise of respecting the labor of tool producers. Therefore, we do not allow everyone to share pirated and cracked tools. We welcome all kinds of PR on the premise of standardization. If you have any doubts other than the appeal, you can file an issue or contact the warehouse management. When it comes to paid content tools, we encourage sharing and hope that everyone will do a good job of disclosing their information and marking their prices. This project will not advertise any tools, and there will be no special advertisement behaviors such as location are arranged according to the time of submission. We also welcome various PR requests to improve the reading experience of this project (including but not limited to adding a line break to improve the reading experience, adding a project logo, Chinese and English proofreading, etc.) (:\u0437)\u2220) This project is still in its infancy, and it is very much in need of improvement and error correction from everyone.

If you have already written articles that you would like to add here, you can do so in the following ways:

  1. Fork this repository, create an Markdown document in the docs folder under the corresponding category and submit a PR to merge.
  2. Contact SakurajimaMaii and send the Chinese and English versions of the document to his email Email.

If you wonder where to start, check the writing template is a good idea.

Note

  1. All content uploaded to this website should strictly conform to Specification.
  2. If you are not familiar with PR, you can refer to 3 minutes to learn, how to PR (Pull Request) code to Github
"},{"location":"en/#contact-us","title":"Contact us","text":"

Click the link to join the group chat tooldiy

"},{"location":"en/#copyright","title":"Copyright","text":"

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

"},{"location":"en/frame/wasm-bpf/","title":"Wasm bpf","text":""},{"location":"en/frame/wasm-bpf/#wasm-bpf-wasm-library-and-toolchain-for-ebpf","title":"\ud83d\udce6 Wasm-bpf: Wasm library and toolchain for eBPF","text":"

\u4e2d\u6587\u6587\u6863 Gitee Github

Wasm-bpf is a WebAssembly eBPF library, toolchain and runtime powered by CO-RE(Compile Once \u2013 Run Everywhere) libbpf. It can help you build almost every eBPF programs or usecases to Wasm with nearly zero modification, and run them cross platforms with Wasm sandbox.

"},{"location":"en/frame/wasm-bpf/#quick-start-guides","title":"Quick start guides","text":"

\u2328\ufe0f Introduction to wasm-bpf \\ \ud83d\udce6 Features \\ \ud83d\ude80 Running a standalone Wasm program from CLI or Docker \\ \ud83d\udd0c Embed a Wasm-eBPF function in your Rust program or C/C++ program \\ \ud83d\udd28 Examples covering the use cases from tracing, networking to security \\ \ud83d\udcda How it works \\ \ud83e\udd16 Build the runtime

\ud83d\udcda Check out our more documentations

"},{"location":"en/frame/wasm-bpf/#introduction","title":"Introduction","text":"

WebAssembly (Wasm) is a portable binary format for executable code. The code is executed at a nearly-native speed in a memory-safe (for host) sandbox, with clearly defined resource constraints, and APIs for communicating with the embedding host environment (eg. proxy).The wasm-bpf project combines Wasm and eBPF technologies to enhance the performance and programmability of eBPF applications.

With wasm-bpf, users can dynamically load and securely execute user-defined or community-contributed Wasm-eBPF codes as plug-ins in their software products, such as observability platforms or service proxy. This enables efficient and scalable data collection, while also allowing for advanced processing and analysis of that data.

It also enables developers to write eBPF programs in familiar languages like C/C++, Rust, Go, and more than 30 other programming languages, and deploy them easily across different Linux distributions. Additionally, cloud providers can leverage wasm-bpf to offer a secure and high-performance environment for their customers to develop and deploy eBPF applications in their cloud environments.

"},{"location":"en/frame/wasm-bpf/#get-started","title":"\ud83d\ude80 Get started","text":""},{"location":"en/frame/wasm-bpf/#install-wasm-bpf","title":"\ud83d\udce6 Install wasm-bpf","text":"

Run the following command to install the wasm-bpf CLI tool:

cargo install wasm-bpf 
"},{"location":"en/frame/wasm-bpf/#running-a-standalone-wasm-ebpf-program","title":"Running a standalone Wasm-eBPF program","text":"

Running the runqlat example with docker:

$ wget https://eunomia-bpf.github.io/wasm-bpf/examples/runqlat/runqlat.wasm\n$ docker run --rm -it --privileged -v $(pwd):/examples ghcr.io/eunomia-bpf/wasm-bpf:latest /examples/runqlat.wasm\nTracing run queue latency... Hit Ctrl-C to end.\n\n     usecs               : count    distribution\n         0 -> 1          : 72       |*****************************           |\n         2 -> 3          : 93       |*************************************   |\n         4 -> 7          : 98       |****************************************|\n         8 -> 15         : 96       |*************************************** |\n        16 -> 31         : 38       |***************                         |\n        32 -> 63         : 4        |*                                       |\n        64 -> 127        : 5        |**                                      |\n       128 -> 255        : 6        |**                                      |\n       256 -> 511        : 0        |                                        |\n       512 -> 1023       : 0        |                                        |\n      1024 -> 2047       : 0        |                                        |\n      2048 -> 4095       : 1        |                                        |\n

For more tools to distribute and deploy Wasm-eBPF programs for usecases from Observability, Networking to Security, please refer to eunomia-bpf repo.

"},{"location":"en/frame/wasm-bpf/#embed-a-wasm-ebpf-function-in-your-program","title":"Embed a Wasm-eBPF function in your program","text":"

Add the following line to your Cargo.toml to use Wasm-bpf as a library:

wasm-bpf-rs = \"0.2.1\"\n

See the main.rs for an example of how to use the wasm-bpf-rs library.

"},{"location":"en/frame/wasm-bpf/#features","title":"Features","text":"
  • General purpose: provide most abilities from eBPF to Wasm, polling from the ring buffer or perf buffer, bidirectional communications between kernel eBPF and userspace Wasm using maps, dynamically loading, attaching or detaching, etc. Supports a large number of eBPF program types and map types.
  • High performance: No serialization overhead for complex data types, using shared memory to avoid copy overhead between host and Wasm.
  • Easy to use: provide a similar developing experience as the libbpf-bootstrap, auto generate the Wasm-eBPF skeleton headers and type definitions for bindings. Write your eBPF programs in C/C++, Rust, Go and compile to Wasm.
  • Ultralightweight: the miminal runtime has only 1.5 MB in binary size. Compiled Wasm module would be only ~90K. With the same toolchain, you can easily build your own Wasm-eBPF runtime in any languages and platforms!

See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to Wasm, covering the use cases from tracing, networking to security.

For tools to distribute Wasm-eBPF programs in OCI images, please refer to eunomia-bpf repo.

"},{"location":"en/frame/wasm-bpf/#examples","title":"Examples","text":"

See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to WASM.

tracing examples - bootstrap and rust-bootstrap: trace process exec and exit - runqlat: summarizes scheduler run queue latency as a histogram - execve and go-execve: trace execve syscall

security example - lsm and go-lsm: check the permission to remove a directory

networking example - sockfilter: monitoring packet and dealing with __sk_buff. - sockops: Add the pid int tcp option in syn packet.

"},{"location":"en/frame/wasm-bpf/#how-it-works","title":"How it works","text":"

An eBPF application typically consists of two parts: the user space part and the kernel space part. With wasm-bpf, the user space part is executed in a WebAssembly (Wasm) sandbox while the kernel space part is executed in the eBPF runtime in the Linux kernel. This separation of concerns allows for greater flexibility and security in developing and running eBPF programs, as well as the ability to leverage the benefits of both Wasm and eBPF.

The wasm-bpf runtime require two parts: the host side(Outside the Wasm runtime) and the Wasm guest side(Inside the Wasm runtime).

  • host side: A simple runtime implementation example
  • see runtime/cpp, which would be a sample runtime in C++ built on the top of libbpf and WAMR. Another more complex runtime implement in Rust is runtime/wasm-bpf-rs, based on Wasmtime.
  • You can easily build your own Wasm-eBPF runtime in any languages, any eBPF libraries and any Wasm runtimes with the same System interface.
  • wasm side: toolchains and libraries
  • a libbpf-wasm header only library to provide libbpf APIs for Wasm guest C/C++ code.
  • a bpftool tool to generate the Wasm-eBPF skeleton headers, and C struct definitions for passing data between the host and Wasm guest without serialization.
  • Rust, Go and other language support is similar to the C/C++ support.

For details compile process, please refer to the examples/bootstrap/README.md. The figure below shows the overall interaction between the eBPF and Wasm runtimes:

A Wasm module could load and control multiple eBPF programs at the same time, and can call another Wasm module written in other languages to process the data or control with the component model.

We have proposed a new WASI issue wasi-bpf.

"},{"location":"en/frame/wasm-bpf/#build-the-runtime","title":"Build the runtime","text":"

We have two types of runtime samples:

  • A C/C++ runtime example, which is a minimal runtime based on WAMR. see runtime/cpp for more details.
  • A Rust runtime example, which is a more complex runtime based on Wasmtime. see runtime/wasm-bpf-rs for more details.

The runtime can be built as a library or a standalone executable. see docs/build.md to build the runtimes.

"},{"location":"en/frame/wasm-bpf/#license","title":"LICENSE","text":"

MIT LICENSE

"},{"location":"en/frame/wasm-bpf/#links","title":"\ud83d\udd17 Links","text":"
  • eunomia-bpf project: simplify and enhance eBPF with CO-RE and WebAssembly https://github.com/eunomia-bpf/eunomia-bpf
  • documents and blogs: https://docs.eunomia.dev
  • CO-RE (Compile Once \u2013 Run Everywhere): https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html
  • WAMR (WebAssembly Micro Runtime): https://github.com/bytecodealliance/wasm-micro-runtime
  • libbpf: https://github.com/libbpf/libbpf
"},{"location":"en/frame/zineland/#introduction","title":"Introduction","text":"

Zineland is a simple and effective magazine building framework that can quickly generate magazine-style static pages from Markdown documents

"},{"location":"en/frame/zineland/#install","title":"Install","text":"
  • repository https://github.com/zineland/zine.git
  • install
  • cargo
  cargo install zine\n
  • brew
  brew install zineland/tap/zine\n
  • doc https://zineland.github.io
"},{"location":"en/frame/zineland/#advantages","title":"Advantages","text":"
  • Mobile-first.
  • Intuitive and elegant magazine design.
  • Best reading experiences.
  • Theme customizable, extend friendly.
  • RSS Feed supported.
  • Open Graph Protocol supported.
  • Article topic supported.
  • I18n and l10n supported.
  • Build into a static website, hosting anywhere.
"},{"location":"en/one_click_deployment/Windows_Setup/","title":"windows Environmental deployment","text":"

This article shows you how to deploy the project in your windows environment.

Note: This requires a python environment, python3.10 in my case.

"},{"location":"en/one_click_deployment/Windows_Setup/#download-tooldiy","title":"Download ToolDiy","text":"
git clone https://github.com/cargo-youth/ToolDiy.git\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-mkdocs","title":"Install mkdocs","text":"
Download link\uff1apip install mkdocs\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-site-theme","title":"Install site theme","text":"

The theme of this site is material. Use the following command to install it.

pip install mkdocs-material\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-other-dependencies","title":"Install other dependencies","text":"
pip install pymdown-extensions\npip install mkdocs-awesome-pages-plugin\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-the-i18n","title":"Install the i18n","text":"

Here is a pit, when I install, directly install pip install i18n is not ok, you need to specially install i18n under mkdocs, then ask chatGPT, he provided me with a solution is pip install mkdocs-i18n-plugin ; Unfortunately, no, finally find the following command on Google, right.

pip install mkdocs-static-i18n\n
"},{"location":"en/one_click_deployment/Windows_Setup/#running-project","title":"Running Project","text":"
mkdocs serve\n
"},{"location":"en/one_click_deployment/Windows_Setup/#build-static-website-files","title":"Build static website files","text":"
mkdocs build\n
"},{"location":"en/one_click_deployment/docker_os_c/","title":"C-based operating system development environment using Docker","text":""},{"location":"en/one_click_deployment/docker_os_c/#overview-of-the-development-environment","title":"Overview of the development environment","text":"
  • ubuntu 22.04.2 LTS
  • gcc 11.3.0
  • GNU Make 4.3
  • cmake 3.22.1
  • QEMU emulator 7.0.0
  • code-server 4.10.1
  • code-server extensions

    • C/C++ 1.14.4
"},{"location":"en/one_click_deployment/docker_os_c/#quick-start","title":"Quick Start","text":"

Install Docker Desktop, see Install Docker Desktop on Windows

Run Docker Desktop\uff0cand then open CMD or PowerShell\uff0cexecute

docker pull jklincn/c-os\n

After the image is successfully pulled, execute

docker run -d --privileged -p 58888:8080 jklincn/c-os\n

Now, you can open http://localhost:58888 in the browser. Development environment is ready.

You can control the containers by the Docker Desktop graphical interface.

The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.

"},{"location":"en/one_click_deployment/docker_os_c/#dockerfile","title":"Dockerfile","text":"

Here is the Dockerfile, for others who need demand for reference and modification.

FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \\\ncode --install-extension cpptools-linux.vsix && \\\nrm cpptools-linux.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"en/one_click_deployment/docker_os_rust/","title":"C-based operating system development environment using Docker","text":""},{"location":"en/one_click_deployment/docker_os_rust/#overview-of-the-development-environment","title":"Overview of the development environment","text":"
  • ubuntu 22.04.2 LTS
  • GNU Make 4.3
  • QEMU emulator 7.0.0
  • rustc nightly-latest
  • rustup latest
  • cargo nightly-latest
  • code-server 4.10.1
  • code-server extensions

    • rust-analyzer 0.3.1435
"},{"location":"en/one_click_deployment/docker_os_rust/#quick-start","title":"Quick Start","text":"

Install Docker Desktop, see Install Docker Desktop on Windows

Run Docker Desktop\uff0cand then open CMD or PowerShell\uff0cexecute

docker pull jklincn/rust-os\n

After the image is successfully pulled, execute

docker run -d --privileged -p 58888:8080 jklincn/rust-os\n

Now, you can open http://localhost:58888 in the browser. Development environment is ready.

You can control the containers by the Docker Desktop graphical interface.

The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.

"},{"location":"en/one_click_deployment/docker_os_rust/#dockerfile","title":"Dockerfile","text":"

Here is the Dockerfile, for others who need demand for reference and modification.

FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\ncode --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nrm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nWORKDIR /root\nARG RUST_VERSION=nightly\nENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static\nENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup\nRUN mkdir .cargo && \\\necho '[source.crates-io]' >> .cargo/config && \\\necho 'registry = \"https://github.com/rust-lang/crates.io-index\"' >> .cargo/config && \\\necho 'replace-with = \"ustc\"' >> .cargo/config && \\\necho '[source.ustc]' >> .cargo/config && \\\necho 'registry = \"git://mirrors.ustc.edu.cn/crates.io-index\"' >> .cargo/config && \\\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \\\nchmod +x rustup-init && \\\n./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \\\nrm rustup-init && \\\nsource $HOME/.cargo/env && \\\ncargo install cargo-binutils && \\\nrustup component add llvm-tools-preview && \\\nrustup component add rust-src\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"en/one_click_deployment/os/","title":"os Introduction to development environment and tools","text":"
# (ubuntu) install package\nsudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev pkg-config  libglib2.0-dev libpixman-1-dev libsdl2-dev \\\ngit tmux python3 python3-pip ninja-build\n# install QEMU\nmkdir dev\npushd dev\nwget https://download.qemu.org/qemu-7.0.0.tar.xz\ntar -xf qemu-7.0.0.tar.xz\ncd qemu-7.0.0\n./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug\nmake -j$(nproc)\nmake install\npopd\n# Configure environment variables\nvi ~/.bashrc\nexport PATH=$PATH:/path/to/qemu-7.0.0/build # Update the system path after configuration\nsource ~/.bashrc # test qemu\nqemu-system-riscv64 --version\n# install rust \ncurl https://sh.rustup.rs -sSf | sh\n# Update the system path after configuration\nsource $HOME/.cargo/env\n# test rust\nrustc --version\n# rust related package installation\nrustup target add riscv64gc-unknown-none-elf\ncargo install cargo-binutils\nrustup component add llvm-tools-preview\nrustup component add rust-src\n
"},{"location":"en/one_click_deployment/os/#common-problems-and-solutions","title":"Common problems and solutions","text":"
# (centos) install package\nsudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \\\ntexinfo patchutils gcc gcc-c++ zlib-devel expat-devel git\n# gcc version is too low\nyum install centos-release-scl\nscl enable devtoolset-8 bash\n# test gcc\ngcc -v\n
"},{"location":"en/one_click_deployment/os/#configure-rust-download-mirror","title":"Configure rust download mirror","text":"
vi ~/.cargo/config\n[source.crates-io]\nregistry = \"https://github.com/rust-lang/crates.io-index\"\nreplace-with = 'ustc'\n[source.ustc]\nregistry = \"git://mirrors.ustc.edu.cn/crates.io-index\"\n
"},{"location":"en/platform/chatGPT/","title":"ChatGPT","text":"

Official website: https://chat.openai.com/

ChatGPT is an artificial intelligence chat robot based on natural language processing technology, which uses GPT (Generative Pre-trained Transformer) technology to generate human language responses.

Function:

  • Used as a search engine, we can easily use it to search for some information, such as directly asking ChatGPT \"how to use ChatGPT\".
  • Used to find learning materials, such as directly asking ChatGPT \"how to learn natural language processing\".
  • Used to query documents, such as directly asking ChatGPT \"what is the usage of the reduce function in the python library functools\".
  • Used to adjust mood, such as directly asking ChatGPT \"how should I date a girl\".

Configuration method:

  • Search ChatGPT through the browser, click to enter the official website, and click the \"Sign in\" button to register an account.
  • After successful registration, bind an overseas mobile phone number, and enter the verification code in the received verification code to complete the registration.
  • It should be noted that ChatGPT cannot be used in Hong Kong for the time being, and even if the node of the ladder is in Hong Kong, even the login to the official website will be restricted.
  • If you do not have an overseas mobile phone number, you can obtain it through some mobile phone verification code receiving websites. There are many such websites like ladders, and you only need to google to find them.
"},{"location":"en/platform/overleaf/","title":"Overleaf","text":"

Official website: https://www.overleaf.com

Overleaf is an online tex rendering website. The configuration of the tex environment is cumbersome and not friendly enough for novices (especially in Windows), but overleaf is a good alternative. You just need to choose a nice template, and it will be very convenient to write assignments or small papers of less than 10 pages. Overleaf also provides the basic teamwork function, which can be edited by multiple people through links or invitations. The free version of Overleaf has a maximum compilation time and a limited set of features. For more complex projects, consider paying for more features.

\\(\\LaTeX\\) is NOT a wysiwyg (what you see is what you get) typesetting system in which users enter specific code, save it in a file with the suffix.tex, and compile it to get the desired pdf file. \\(\\LaTeX\\) Excellent large document typesetting ability and mathematical formula rendering ability is one of the reasons why it can be widely used. To learn more about can refer to the CTAN introduce lshort.

Features:

  • After the template is edited, it is very fast to write assignments within 10 pages
  • Isolation of projects can be achieved by writing temp files, and tex-related package management is convenient
  • Friendly editing interface, double-click the content in the pdf preview to jump directly to the code
  • Automatically save documents in the cloud, and the whole process is completed on the web page without changing the local environment
  • Many questions overleaf officially gave answers and examples, such as how to embed pseudo-code blocks, etc.
"},{"location":"en/plugins/android/","title":"Android Studio","text":"

This article recommends plug-ins for Android Studio, which can greatly improve your development experience.

"},{"location":"en/plugins/android/#theme-class","title":"theme class","text":""},{"location":"en/plugins/android/#atom-material-icons","title":"Atom Material Icons","text":"

The plugin optimizes icons to improve the aesthetics of your interface.

"},{"location":"en/plugins/android/#material-theme-ui","title":"Material Theme UI","text":"

The Material theme for JetBrains IDE, with multiple themes for day and night, makes the interface more beautiful.

"},{"location":"en/plugins/android/#tools","title":"Tools","text":""},{"location":"en/plugins/android/#json-to-bean","title":"JSON to Bean","text":"

JSON as a lightweight data interchange format. It is often used in development, and one of the requirements is to convert Json to the corresponding Bean object. The following two main plugins are recommended:

  • GsonFormatPlus

    Can convert Json to corresponding Java Bean

  • JSON To Kotlin Class \u200b(JsonToKotlinClass)\u200b

    Can convert Json to corresponding Kotlin Bean

"},{"location":"en/plugins/android/#translate","title":"Translate","text":"

Translation plug-in greatly facilitates the development of developers with poor English foundation. It has the following properties:

  • Multiple Translation Engines

    • Microsoft Translator
    • Google Translate
    • DeepL Translator
    • Youdao Translate
    • Baidu Translate
    • Alibaba Translate
  • Multilingual translation

  • Document translation
  • Text-to-speech
  • Automatic word selection
  • Automatic word breaks
  • Word Book
"},{"location":"en/plugins/browser/","title":"Browser","text":"

This article hopes to inspire others and encourage everyone to propose more convenient browser plug-ins.

"},{"location":"en/plugins/browser/#tampermonkey","title":"Tampermonkey","text":"

Official website: https://www.tampermonkey.net/

Very convenient script manager, you can install some small scripts that are not available in the extension store.

"},{"location":"en/plugins/browser/#simpread","title":"Simpread","text":"

Official website: https://simpread.pro/

Enhance the browser reading experience, provide a focus mode that dilutes irrelevant elements to increase concentration and a completely pure reading mode; you can export web pages to various formats such as markdown to the local, or import them into notion, onenote and other note-taking applications after authorization, which is convenient for archiving and Read it later. There are many related enhancements in the official plug-in center, but the default mode experience is also quite comfortable.

"},{"location":"en/plugins/browser/#zotero-connector","title":"Zotero Connector","text":"

Official website: https://www.zotero.org/download/connectors

Zotero Connectors allow you to save to Zotero directly from your web browser.

"},{"location":"en/plugins/browser/#global-speed","title":"Global Speed","text":"

Official website: https://github.com/polywock/globalSpeed

Web extension that sets a default speed for HTML media elements (video and audio).

"},{"location":"en/plugins/browser/#language-reactor","title":"Language Reactor","text":"

Official website: https://www.languagereactor.com/

Language Reactor is a powerful toolbox for learning languages. It helps you to discover, understand, and learn from native materials. Studying will become more effective, interesting, and enjoyable!

"},{"location":"en/plugins/browser/#vimium","title":"Vimium","text":"

Official website: https://github.com/philc/vimium

Vimium is a browser extension that provides keyboard-based navigation and control of the web in the spirit of the Vim editor.

"},{"location":"en/plugins/tabnine/","title":"Tabnine","text":""},{"location":"en/plugins/tabnine/#install","title":"install","text":"

Installer link: https://www.tabnine.com/install/

"},{"location":"en/plugins/tabnine/#featuresthese-words-are-generated-by-chatgpt","title":"Features(These words are generated by chatgpt)","text":"

\"TabNine is a machine learning-based code autocompletion tool that can be used in various editors and IDEs, including but not limited to VS Code, Sublime Text, PyCharm, Vim, Emacs, and more. Unlike traditional code autocompletion tools, TabNine not only completes based on existing code snippets and syntax rules, but can also generate entirely new code by learning from large code repositories and language syntax, significantly improving coding efficiency and accuracy.

The advantages of TabNine include:

  • High accuracy: TabNine is trained using machine learning algorithms and can generate the most appropriate code completion options based on the code context.
  • Fast response: TabNine's completion response speed is very fast and can easily handle large projects and complex code structures.
  • Intelligent prediction: TabNine can intelligently predict the next possible code completion option based on context and history, making coding smoother and more efficient.
  • Easy to customize: TabNine supports user-defined configuration and extension, allowing customization of the tool based on personal needs.

By providing high-quality code completion options, TabNine reduces the time and error rate of writing code and is a highly valuable and practical programming tool.\"

"},{"location":"en/plugins/tabnine/#the-difference-with-copilot","title":"The difference with copilot","text":"

\"TabNine and Copilot are both machine learning-based code autocompletion tools that can generate code completion options based on context and syntax rules to improve coding efficiency and accuracy. However, there are some differences between them.

Firstly, they are developed by different companies, with TabNine being developed by Codota and Copilot being developed by OpenAI.

Secondly, they have different training data sources. TabNine uses both public and private code repositories from GitHub, while Copilot uses public code repositories from GitHub and OpenAI's own internal code repositories.

Thirdly, TabNine supports multiple programming languages, including Python, JavaScript, Java, C++, Go, Ruby, and more, while Copilot currently only supports Python, JavaScript, and TypeScript.

Fourthly, TabNine focuses on code completion and intelligent prediction, while Copilot's unique feature is the ability to generate code snippets and functions, even based on natural language descriptions.

Finally, TabNine's code is mostly open source, allowing users to customize and extend the tool, while Copilot does not currently support customization and is not open source due to its use of OpenAI's GPT series models.

Overall, both TabNine and Copilot are valuable code autocompletion tools with their own strengths and suitable use cases. Users can choose the appropriate tool based on their needs.\"

"},{"location":"en/plugins/tabnine/#preview","title":"preview","text":""},{"location":"en/software/antlr/","title":"Antlr","text":"

Official website: https://www.antlr.org/

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees

"},{"location":"en/software/antlr/#download","title":"DownLoad","text":"
  • DownLoad Guide download guide
"},{"location":"en/software/antlr/#example","title":"Example","text":"

example.g4

// specific grammar name\ngrammar example;\n// for non-terminal, star with lower-case letter\n\n//'*' represents 0 or more occurrences of the production\n//'+' represents at least one occurrence\n//The following example will be parsed as vector<number>\naddExp\n: number ('+' number)*\n;\n\n//You can use # nickname after the production\n//Create an alias to analyze the production of different situations with the same name\nnumber\n: IntLiteral # number1\n| FloatLiteral # number2\n;\n\n// for terminal, star with lower-case letter\nIntLiteral\n: [0-9]+\n| ('0x'|'0X')[0-9a-fA-F]+\n;\n\n// '?' Indicates that the production may exist, if it exists, it only occurs once\nFloatLiteral\n: ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?\n| ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?\n;\n

shell command

antlr -Dlanguage=Cpp -no-listener -visitor example.g4\n

exampleVisitor.h

#include \"exampleBaseVisitor.h\"\n\nclass ExampleVisitor : public exampleBaseVisitor {\nvirtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;\nvirtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;\n};\n// Access string of current node by `ctx->getText()`\n// Visit `number` node of `addExp` by `ctx->number()`\n// then you can override visit-function to build your own parser !\n

"},{"location":"en/software/antlr/#reference","title":"Reference","text":"
  • Antlr Repository antlr repository

  • Antlr Document antlr official doc

"},{"location":"en/software/code-debug/","title":"code-debug","text":"

Website: https://github.com/chenzhiy2001/code-debug/

code-debug is a source-level kernel debugging tool that supports Rust. Currently it is capable of debugging the rCore-Tutorial-v3 operating system and support tracing from kernel to user space. Recent work has been done to implement richer and more robust tracing capabilities using eBPF technology.

"},{"location":"en/software/gdbdashboard/#introduction","title":"Introduction","text":"

Using python to configure the gdb debugging interface, you can write your own code to define the entire debugging interface. It can be said that it is comparable to an IDE, and the display is also very good-looking. It is completely based on the terminal. As the underlying debugging software, it can help developers better view variables and registers. , single-step execution, etc.

"},{"location":"en/software/gdbdashboard/#install","title":"install","text":"
  • open source address: https://github.com/cyrus-and/gdb-dashboard.git

  • get it

wget -P ~ https://git.io/.gdbinit # If the network speed is slow, you can directly create a new file with the same name. gdbinit and then copy and paste it\n
  • renderings
"},{"location":"en/software/gdbdashboard/#recommended-reason","title":"Recommended reason","text":"

It is true that the IDE integrates a lot of debugging tools at present, but GDB still plays an irreplaceable role in some kernel programming or other low-level development fields. For this reason, we hope to find a more observable page in the original boring debugging terminal. Fortunately, someone has helped us to realize this tool, we hope to bring such convenience to everyone.

"},{"location":"en/software/gdbdashboard/#run-and-debug-basic-commands","title":"Run and debug basic commands","text":"

Reference common commands for gdb debugging

"},{"location":"en/software/gdbdashboard/#notice","title":"Notice","text":"

When using this plugin, you need to check whether the gdb currently in use supports python scripts. When Scripting in the \"Python\" language is not supported in this copy of GDB. appears, it indicates that the gdb does not support python scripts and cannot be used this plugin. In addition, you also need to pay attention to whether the versions of gdb and python match, see issue.

"},{"location":"en/software/mathpix/","title":"Mathpix","text":"

Official website: https://mathpix.com

Mathpix is a tex format formula generation software. Its main function is to identify the formula in the screenshot through OCR technology and generate the corresponding tex code, which can greatly speed up the speed of formula writing in the process of writing a thesis.

Features:

  • Support the recognition of handwritten formulas and automatically generate tex codes.
  • Support the operation of the digital board, you can write formulas, recognize and generate tex through an external digital board.
  • Support table recognition, although not as accurate as formulas, but in most cases the effect is ok.
  • Interactive editing interface, when the orc result deviates, you can directly modify it.

Shortcoming:

  • There is a limit on the number of times of use, but it can be solved by changing the mailbox. According to my experience, I don\u2019t use that much at all. The normal model is enough, and it\u2019s not worthwhile to pay to upgrade the pro version.
"},{"location":"en/software/nano/","title":"Nano","text":"

GNU nano

Official website: https://www.nano-editor.org/

GNU nano is a simple and easy-to-use command line editor, it is the default text editor for some linux distributions, and you can also use it in the windows.

"},{"location":"en/software/nano/#install","title":"install","text":"

In the linux distributions we can use the package manager to install it.

Take the debain with apt as example:

sudo apt install nano\n
"},{"location":"en/software/nano/#basic-use","title":"basic use","text":"

Input nano to the terminal you can get the detail instruction.

"},{"location":"en/software/nano/#advantages","title":"advantages","text":"
  • lightweight and take a little system recourse.
  • simple and easy to use.
"},{"location":"en/software/nano/#disadvantages","title":"disadvantages","text":"
  • few functions, compared with emacs and vim, nano is less scalable.
"},{"location":"en/software/ranger/#introduction","title":"Introduction","text":"

Ranger is a terminal file manager with Vim-style shortcuts. You can use the keyboard to quickly view and preview files, navigate between different folders, and perform common operations such as copying, pasting, deleting, and renaming files or folders directly under the ranger interface.

"},{"location":"en/software/ranger/#install","title":"Install","text":"
  • Official website https://github.com/ranger/ranger
  • How to install ranger

    • Ubuntu && Debian
    sudo apt install ranger\n
    • install from pip
    pip install ranger-fm\n
  • ranger renderings

"},{"location":"en/software/ranger/#recommended-reason","title":"Recommended reason","text":"
  1. No longer need to use the cd command to switch directories.
  2. Simplify the operation of copying, pasting and renaming files (folders).
  3. Ranger has a corresponding vim plugin, you can open ranger in vim after some configuration, which will boost your effiency.
"},{"location":"en/software/ranger/#refer-to","title":"refer to","text":"
  • Official documentation of the tool

    ranger official wiki - Related pages

    ranger cheat sheet

"},{"location":"en/software/texmacs/","title":"GNU TeXmacs","text":"

Website: https://www.texmacs.org/tmweb/home/welcome.en.html

Try GNU TeXmacs if you are being tortured by LaTeX GNU TeXmacs is a WYSIWYG open source editor for scientific documents (papers, notes, etc.). Highly recommended if you write lots of maths!

Features:

  • Editing tables and formulas visually.
  • Intuitive keyboard shortcuts. One of them is that when editing a mathematical formula, you can switch to similar symbols by pressing tab multiple times. For example, press a and then press tab to get \\(\\alpha\\) and other characters that looks like a.
  • Support many computer algebra systems and interactive software, similar to Jupyter Notebook
  • Support Scheme and macros for hacking

In most cases the built-in documentations will suit your needs. Occasionally, there are outdated parts in the documentation. In this case you can read The Jolly Writer, which is also written by the main author of TeXmacs.

Remember to switch to Chinese mode (click the national flag on the menu bar), otherwise it will not line wrap automatically.

"},{"location":"en/specification/pr/","title":"Pull Request Message Specification","text":"

For Pull Request, please follow the following requirements1:

  1. The title should be clear about the purpose of this PR (what work is done, what problem is fixed).
  2. The content should briefly describe the changes. If you fix an issue, please add fix #xxxx in the content, where xxxx is the issue number.

For the title, such format is recommended:

<Edit type>(<file name>): <content> (<issue number>)\n

Edit type can be one of the following:

  • feat: for adding new content.
  • fix: for fixing existing content errors.
  • refactor: for refactoring a page (larger changes).
  • revert: for reverting previous changes.

Examples:

  • fix(sepecification/specification): edit code comment to make it more clear
  • fix: plugins/xxx not in directory (#2)
  • feat(software/mathpix): official website
  • refactor(specification/template): tidy up page content
  1. Edited from OI-wiki: \u5982\u4f55\u53c2\u4e0e \u21a9

"},{"location":"en/specification/template/","title":"Template","text":"

Hello friends, if you have a great tool that you want to share with everyone, but you don\u2019t know how to write a markdown, here is a template for reference

"},{"location":"en/specification/template/#introduction","title":"Introduction","text":"

We would like submitted PRs to describe this tool in the introduction section:

  • The main function
  • the environment used
  • Official website (if available)
  • Other basic features
"},{"location":"en/specification/template/#install","title":"Install","text":"

The PR we want to submit is described in the installation section:

  • The version of the operating system that the software is compatible with
  • The way to install the software, especially the installation in the linux operating system, it is best to give instructions
  • If you need to install other dependent software in advance to install this software, please specify
  • If possible, please provide a method to check the successful installation of the software, such as using $clang --version to check whether clang is successfully installed
"},{"location":"en/specification/template/#recommended-reason","title":"Recommended reason","text":"

The PR we want to submit is described in the recommendation reason section:

  • Advantages of this tool
  • Disadvantages of this tool
  • If this tool charges, please specify
  • If there is an educational support version of this tool, please specify
"},{"location":"en/specification/template/#refer-to","title":"refer to","text":"

We hope that the submitted PR will provide some common references in the reference section, such as:

  • Official documentation of the tool
  • Relevant communities
  • related books
  • Related pages
"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..46ec3e0e --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,379 @@ + + + + https://github.com/cargo-youth/ToolDiy/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/firmware/RustSBI/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/frame/wasm-bpf/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/frame/zineland/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/large_language_model/rwkv.cpp/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/one_click_deployment/Source-changer/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/one_click_deployment/Windows_Setup/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/one_click_deployment/docker_os_c/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/one_click_deployment/docker_os_rust/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/one_click_deployment/os/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/APT%EF%BC%88DEB%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/AppImage%EF%BC%88Linux%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/DNF%EF%BC%88RPM%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/Homebrew%EF%BC%88Linux%26Mac%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/Nix%EF%BC%88%E5%A3%B0%E6%98%8E%E5%BC%8F%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/Scoop%EF%BC%88Win%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/WinGet%EF%BC%88Win%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/YaST%20%26%20Zypper%EF%BC%88RPM%EF%BC%89/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/GitBucket/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/chatGPT/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/excalidraw/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/flydav/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/gpt-paper/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/minio/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/platform/overleaf/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/plugins/android/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/plugins/browser/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/plugins/tabnine/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/Double%20Commander/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/Pycharm/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/TiddlyWiki/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/antlr/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/code-debug/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/eunomia-bpf/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/fzf/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/gdbdashboard/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/mathpix/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/nano/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/ranger/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/software/texmacs/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/specification/pr/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/specification/template/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/specification/markdown/chinese_copywriting_guidelines/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/specification/markdown/latex/ + 2023-06-04 + daily + + + + + + https://github.com/cargo-youth/ToolDiy/specification/markdown/markdown/ + 2023-06-04 + daily + + + + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..83b3c2ad Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/software/Double Commander/index.html b/software/Double Commander/index.html new file mode 100644 index 00000000..9aded7de --- /dev/null +++ b/software/Double Commander/index.html @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Double Commander - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Double Commander

+

免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/Pycharm/index.html b/software/Pycharm/index.html new file mode 100644 index 00000000..e3bd25b5 --- /dev/null +++ b/software/Pycharm/index.html @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + PyCharm - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

PyCharm

+

1.首先我们要进行Pyhton解释器的下载

+
print('Hello World')
+
+

Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器

+

下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的

+

查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)

+

2.Python解析器的安装

+

第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)

+

第二步:选择所有要安装的功能菜单,默认全部勾选

+

第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置

+

第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了

+

image-python解释器.png

+

使用exit()退出

+

3. Python开发工具PyCharm(我下载的是2021.2.1)新版容易出现未知问题

+

在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE

+

PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者

+

第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/

+

第二步:设置软件的安装路径,不用安装在 C 盘

+

第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面

+

image-pycharm图片.png

+

4.创建Python项目

+

第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)

+

点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project

+

image-Pycharm打开界面.png

+

第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)

+

你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)

+

image-pycharm配置界面.png

+

其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )

+

新建文件并书写代码

+
print('Hello World')
+
+

进行运行,右上角绿色的三角符号 Run 。

+

结果如下,就完成啦。

+

image-Pycharm的配置结果.png

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/TiddlyWiki/index.html b/software/TiddlyWiki/index.html new file mode 100644 index 00000000..b69b79c1 --- /dev/null +++ b/software/TiddlyWiki/index.html @@ -0,0 +1,1893 @@ + + + + + + + + + + + + + + + + + + + + + + + + TiddlyWiki-知识管理框架 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

TiddlyWiki-知识管理框架

+

官网:https://tiddlywiki.com/

+

国际交流社区:https://talk.tiddlywiki.org/

+
+

很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。

+
+

1. 中文社区

+
    +
  • 太微中文教程:https://tw-cn.netlify.app/
  • +
  • 太微中文Github社区:https://github.com/tiddly-gittly/TiddlyWiki-Chinese-Tutorial
  • +
  • 社区中文教程资源链接(丰富且友好的初学者资源):https://tw-cn.netlify.app/#%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5
  • +
+

2. 介绍太微

+
    +
  1. +

    「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。

    +
  2. +
  3. +

    为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……

    +
  4. +
  5. +

    太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。

    +
  6. +
+

3. 太微能做什么

+
    +
  • +

    您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?

    +
  • +
  • +

    欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。

    +
  • +
  • +

    用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。

    +
  • +
+

4. 使用TiddlyWiki构建本地个人知识库

+
+

非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。

+
+

4.1 TidGi(太记)

+
    +
  • +

    下载链接:https://github.com/tiddly-gittly/TidGi-Desktop

    +
  • +
  • +

    TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。

    +
  • +
+

4.2 TiddlyDesktop

+
    +
  • +

    TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。

    +
  • +
  • +

    下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases

    +
  • +
+

4.3 Timimi

+
    +
  • +

    Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。

    +
  • +
  • +

    可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。

    +
  • +
  • +

    下载链接:https://ibnishak.github.io/Timimi/

    +
  • +
+

4.4 NodeJS环境

+
    +
  • +

    最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。

    +
  • +
  • +

    运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。

    +
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/antlr/index.html b/software/antlr/index.html new file mode 100644 index 00000000..177e1dbe --- /dev/null +++ b/software/antlr/index.html @@ -0,0 +1,1785 @@ + + + + + + + + + + + + + + + + + + + + + + + + Antlr - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Antlr

+

官网:https://www.antlr.org/

+

ANTLR(ANother-Tool-for-Language-Recognition)是一个功能强大的语法分析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。ANTLR根据语法生成一个解析器,该解析器可以构建和遍历解析树

+

安装

+ +

Example

+

example.g4 +

// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+// '*' 代表该产生式出现0次或以上
+// '+' 代表至少出现一次
+// 下例将会被解析成vector<number>
+addExp
+    : number ('+' number)*
+    ;
+
+// 可以通过在产生式后 # nickname
+// 创建一个别名用来分析同名的不同情况下的产生式
+number
+    : IntLiteral # number1
+    | FloatLiteral # number2
+    ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+    : [0-9]+
+    | ('0x'|'0X')[0-9a-fA-F]+
+    ;
+
+// '?' 代表该产生式可能存在,若存在仅出现一次
+FloatLiteral
+    : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+    | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+    ;
+

+

shell command +

antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+

+

exampleVisitor.h +

#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+    virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+    virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+

+

参考

+ + + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/code-debug/index.html b/software/code-debug/index.html new file mode 100644 index 00000000..66d455f8 --- /dev/null +++ b/software/code-debug/index.html @@ -0,0 +1,1649 @@ + + + + + + + + + + + + + + + + + + + + + + + + code-debug - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

code-debug

+

官网: https://github.com/chenzhiy2001/code-debug/

+

code-debug 是一个支持Rust语言的源代码级内核调试工具. 现在可以调试rCore-Tutorial-v3操作系统,支持从内核态跟踪到用户态. 最近的工作是,利用eBPF技术实现更丰富,更鲁棒的跟踪功能.

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/eunomia-bpf/index.html b/software/eunomia-bpf/index.html new file mode 100644 index 00000000..2840f60e --- /dev/null +++ b/software/eunomia-bpf/index.html @@ -0,0 +1,1753 @@ + + + + + + + + + + + + + + + + + + + + + + + + eunomia-bpf: 简化和增强 eBPF 与 CO-RE[^1] 和 WebAssembly[^2] - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + + + + + + + +

eunomia-bpf: 简化和增强 eBPF 与 CO-RE1 和 WebAssembly2

+

Actions Status +GitHub release (latest by date) +codecov +DeepSource +CodeFactor

+

一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。

+

介绍

+

eunomia-bpf 是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。

+

使用 eunomia-bpf,您可以:

+
    +
  • 简化编写 eBPF 程序:
  • +
  • 简化构建 CO-RE1 libbpf eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf eventring buffer 自动输出采样数据到内核态。
  • +
  • 自动采样 来自 hash mpas 的数据,并在用户空间中打印 hists(直方图等信息)。
  • +
  • 自动生成 并配置 eBPF 程序的 命令行参数
  • +
  • 您可以同时使用 BCClibbpf 等多种格式编写内核部分。
  • +
  • 使用 Wasm2 构建 eBPF 程序:参见 Wasm-bpf 项目
  • +
  • 在使用 C/C++、Rust、Go…等多种语言,使用 Wasm-bpf 库和工具链来使用 Wasm 编写和运行 eBPF,覆盖从tracing、networking、security到其他用例。
  • +
  • 简化分发 eBPF 程序:
  • +
  • 一个工具用于将预编译的 eBPF 程序作为 Wasm OCI 镜像推送、拉取或运行
  • +
  • 在不需要重新编译 eBPF 程序、不限制架构和内核版本的情况下,在1 行 bash中从 云端存储库URL 运行 eBPF 程序。
  • +
  • 动态加载带有 JSON 配置文件或 Wasm 用户态控制和数据处理模块的 eBPF 程序。
  • +
+

更多信息请参见 documents/introduction.md

+

eunomia-bpf 提供了大量教程和示例应用,帮助入门 eBPF 程序开发

+ +

您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:

+
# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
+
+
+
    +
  1. +

    CO-RE:Compile Once – Run Everywhere 

    +
  2. +
  3. +

    WebAssembly 或 Wasm:https://webassembly.org/ 

    +
  4. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/fzf/index.html b/software/fzf/index.html new file mode 100644 index 00000000..b323ac6f --- /dev/null +++ b/software/fzf/index.html @@ -0,0 +1,1899 @@ + + + + + + + + + + + + + + + + + + + + + + + + Fzf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Fzf

+ +

fzf.png

+

简介

+

仓库地址:https://github.com/junegunn/fzf

+

FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。

+

image-20230209215751132

+

安装

+

macOS

+

对于 macOS ,推荐使用 Homebrew 进行安装:

+
brew install fzf
+
+

Linux

+

在 Linux 发行版上,可使用不同的包管理器进行安装,例如:

+

Debian/Ubuntu(Apt)

+
sudo apt install fzf
+
+

ArchLinux(Pacman)

+
sudo pacman -S fzf
+
+

Windows

+

并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。

+

Windows下可使用 Scoop 进行安装使用。

+
scoop install fzf
+
+

简单使用

+

文件搜索

+

直接执行 FZF ,打开文件搜索功能。

+
fzf
+
+

在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录相对路径

+

使用快捷键 Ctrl+JCtrl+N 可向下滚动列表; Ctrl+KCtrl+P 可向下滚动列表。 +使用 Enter 选中条目并退出 FZF,Ctrl+CCtrl+GEsc 可退出 FZF 而不进行选择。

+

作为 Vim 插件

+

FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。

+

在本例中,使用 vim-plug 插件管理器进行安装: +编辑 ~/.vimrc 文件,在 call plug#begin() 下添加如下行:

+
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
+

重新加载 .vimrc 文件:

+
source ~/.vimrc
+
+

打开 vim ,并执行 :PlugInstall 用于安装插件。

+

更多信息

+

优点

+
    +
  1. 本工具使用 Go 编写,不需其他依赖
  2. +
  3. 性能强悍,搜索效率高
  4. +
  5. 功能丰富,可视化界面(TUI)易于操作
  6. +
  7. 可对接诸多工具(例Vim、tmux 等)
  8. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/gdbdashboard/index.html b/software/gdbdashboard/index.html new file mode 100644 index 00000000..dfe3d9e6 --- /dev/null +++ b/software/gdbdashboard/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + GDB-dashboard - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GDB-dashboard

+

简介

+

使用 python 配置了 gdb 调试界面,完全可以自己写代码去定义整个调试界面可以说是堪比 IDE ,显示也非常好看,完全基于终端,作为底层的调试软件可以帮助开发者更好的查看变量、寄存器、单步执行等。

+

安装(linux环境)

+ +
wget -P ~ https://git.io/.gdbinit #如果网速较慢可以直接新建同名文件.gdbinit之后复制粘贴过来
+
+
    +
  • 效果图 + gdb效果图
  • +
+

推荐理由

+

目前 IDE 集成了很多的调试工具,但是在一些内核编程或者其他的底层开发领域 gdb 仍然具备不可替代的作用,为此我们希望在原本枯燥的调试终端找到更加便于观察的页面好在已经有人帮我们实现了这一工具为此我们希望把这样的便捷带给每一个人。

+

运行调试基本指令

+

参考 gdb调试常见指令

+

注意

+

在使用该插件时需要查看当前所使用的 gdb 是否支持 python 脚本,当出现 Scripting in the "Python" language is not supported in this copy of GDB. 时则表明该 gdb 不支持 python 脚本,无法使用该插件。另外,也需要注意 gdb 与 python 的版本是否匹配的问题,见 issue

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" "b/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" new file mode 100644 index 00000000..8fe15fb5 Binary files /dev/null and "b/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" differ diff --git "a/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" "b/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" new file mode 100644 index 00000000..34459172 Binary files /dev/null and "b/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" differ diff --git "a/software/img/pycharm\345\233\276\347\211\207.png" "b/software/img/pycharm\345\233\276\347\211\207.png" new file mode 100644 index 00000000..93161268 Binary files /dev/null and "b/software/img/pycharm\345\233\276\347\211\207.png" differ diff --git "a/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" "b/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" new file mode 100644 index 00000000..51b82e7f Binary files /dev/null and "b/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" differ diff --git "a/software/img/python\350\247\243\351\207\212\345\231\250.png" "b/software/img/python\350\247\243\351\207\212\345\231\250.png" new file mode 100644 index 00000000..36da2c5e Binary files /dev/null and "b/software/img/python\350\247\243\351\207\212\345\231\250.png" differ diff --git a/software/mathpix/index.html b/software/mathpix/index.html new file mode 100644 index 00000000..2329630d --- /dev/null +++ b/software/mathpix/index.html @@ -0,0 +1,1660 @@ + + + + + + + + + + + + + + + + + + + + + + + + Mathpix - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Mathpix

+

官网:https://mathpix.com

+

Mathpix是一款 tex 格式公式生成软件,它主要的功能是通过 ocr 技术识别截图当中的公式,并生成对应的 tex 代码,在论文写作的过程中能够极大的加速公式编写的速度。

+

特性:

+
    +
  • 支持手写公式的识别并自动生成 tex 代码。
  • +
  • 支持数位板的操作,可以通过外接数位板的方式写入公式,识别并生成 tex 。
  • +
  • 支持表格的识别,虽然不如公式那么精准,但是大部分情况下效果还行。
  • +
  • 交互式编辑界面, orc 结果有偏差的时候可以直接修改。
  • +
+

缺点:

+
    +
  • 有使用次数的限制,但是可以通过更换邮箱的方式解决,根据本人的经验根本用不到那么多,普通款已经很足够,付费升级 pro 版本并不划算。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/nano/index.html b/software/nano/index.html new file mode 100644 index 00000000..ea28c242 --- /dev/null +++ b/software/nano/index.html @@ -0,0 +1,1754 @@ + + + + + + + + + + + + + + + + + + + + + + + + GNU nano - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GNU nano

+

官网: https://www.nano-editor.org/

+

gnu nano 是一个简单易上手的命令行编辑器,部分 linux 发行版的默认编辑器就是 nano ,同时你也可以在 windows 中安装它。

+

安装

+

在 linux 发行版中我们可以使用发行版对应的的包管理工具进行安装。

+

以使用 apt 作为包管理工具的 debain 为例:

+
sudo apt install nano
+
+

基础使用

+

在命令行中输入 nano 就会出现详细的操作指导。

+

image.png

+

优点

+
    +
  • 轻量,占用系统资源少。
  • +
  • 简单易上手。
  • +
+

缺点

+
    +
  • 功能较少,相比emacs,vim拓展性较差。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/ranger/index.html b/software/ranger/index.html new file mode 100644 index 00000000..3eaf737b --- /dev/null +++ b/software/ranger/index.html @@ -0,0 +1,1776 @@ + + + + + + + + + + + + + + + + + + + + + + + + Ranger - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Ranger

+

简介

+

Ranger 是有着 Vim 风格的快捷键的终端文件管理器。你可以使用键盘快速查看、预览文件,在不同的文件夹之间导航,还可以直接在ranger下对文件(文件夹)进行复制、粘贴、删除、重命名等常用操作。

+

安装

+
    +
  • 开源地址 https://github.com/ranger/ranger
  • +
  • +

    获取

    +
      +
    • Ubuntu && Debian
    • +
    +
    sudo apt install ranger
    +
    +
      +
    • 通过 pip 安装
    • +
    +
    pip install ranger-fm
    +
    +
  • +
  • +

    效果图 +ranger 效果图

    +
  • +
+

推荐理由

+
    +
  1. 不再需要再使用 cd 命令切换目录
  2. +
  3. 简化了对文件(夹)的复制、粘贴、重命名等操作。
  4. +
  5. ranger 有对应的 Vim 插件,可以在 Vim 里打开 ranger,能提高文件的编辑效率。
  6. +
+

参考

+

参考

+ + + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/texmacs/index.html b/software/texmacs/index.html new file mode 100644 index 00000000..2688054c --- /dev/null +++ b/software/texmacs/index.html @@ -0,0 +1,1642 @@ + + + + + + + + + + + + + + + + + + + + + + GNU TeXmacs - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GNU TeXmacs

+

官网:https://www.texmacs.org/tmweb/home/welcome.en.html

+

LaTeX 折磨的话,不妨试试 GNU TeXmacs!TeXmacs 是一款所见即所得的科学文档(论文,笔记等)开源编辑器。 +如果写很多的数学公式的话可以试试,非常好用!

+

特性:

+
    +
  • 完全可视化的表格,公式编辑环境。
  • +
  • 非常人性化的按键设计。最好用的一个功能是,在编辑数学公式时,你按任意一个字符,然后就可以用多次 TAB 键相继选择相似的字符。比如,按 a 再按tab就可以得到 \(\alpha\) 等看着像 a 的字符。
  • +
  • 支持很多种计算机代数系统,和交互式软件,类似 Jupyter Notebook 。
  • +
  • 支持Scheme语言和宏进行功能扩展。
  • +
+

需要什么功能看一看内建文档就差不多会了,偶尔文档里有过时的地方,可以下一本 The Jolly Writer ,也是软件的主要作者写的。

+

唯一要注意的一点是,记得切换到中文模式(点菜单栏上面的国旗),否则不会自动换行。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/markdown/chinese_copywriting_guidelines/index.html b/specification/markdown/chinese_copywriting_guidelines/index.html new file mode 100644 index 00000000..8e782f1b --- /dev/null +++ b/specification/markdown/chinese_copywriting_guidelines/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + + + + + + + 中英混排规范 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

中英混排规范

+

空格

+
+

「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。

+

与大家共勉之。」——vinta/paranoid-auto-spacing

+
+

中英文之间需要增加空格

+

正确:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。

+
+

错误:

+
+

在LeanCloud上,数据存储是围绕AVObject进行的。

+

在 LeanCloud上,数据存储是围绕AVObject 进行的。

+
+

完整的正确用法:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。每个 AVObject 都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个 AVObject 上提前指定存在哪些键,只要直接设定对应的 key-value 即可。

+
+

例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。

+

中文与数字之间需要增加空格

+

正确:

+
+

今天出去买菜花了 5000 元。

+
+

错误:

+
+

今天出去买菜花了 5000元。

+

今天出去买菜花了5000元。

+
+

数字与单位之间需要增加空格

+

正确:

+
+

我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB

+
+

错误:

+
+

我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB

+
+

例外:度数/百分比与数字之间不需要增加空格:

+

正确:

+
+

角度为 90° 的角,就是直角。

+

新 MacBook Pro 有 15% 的 CPU 性能提升。

+
+

错误:

+
+

角度为 90 ° 的角,就是直角。

+

新 MacBook Pro 有 15 % 的 CPU 性能提升。

+
+

全角标点与其他字符之间不加空格

+

正确:

+
+

刚刚买了一部 iPhone,好开心!

+
+

错误:

+
+

刚刚买了一部 iPhone ,好开心!

+

刚刚买了一部 iPhone, 好开心!

+
+

text-spacing 来挽救?

+

CSS Text Module Level 4 的 text-spacing 和 Microsoft 的 -ms-text-autospace 可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。

+

标点符号

+

不重复使用标点符号

+

即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。

+

正确:

+
+

德国队竟然战胜了巴西队!

+

她竟然对你说「喵」?!

+
+

错误:

+
+

德国队竟然战胜了巴西队!!

+

德国队竟然战胜了巴西队!!!!!!!!

+

她竟然对你说「喵」??!!

+

她竟然对你说「喵」?!?!??!!

+
+

全角和半角

+

不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。

+

使用全角中文标点

+

正确:

+
+

嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

错误:

+
+

嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!

+

嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!

+

核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

数字使用半角字符

+

正确:

+
+

这个蛋糕只卖 1000 元。

+
+

错误:

+
+

这个蛋糕只卖 1000 元。

+
+

例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。

+

遇到完整的英文整句、特殊名词,其内容使用半角标点

+

正确:

+
+

乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」

+

推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。

+
+

错误:

+
+

乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」

+

推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。

+
+

名词

+

专有名词使用正确的大小写

+

大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。

+

正确:

+
+

使用 GitHub 登录

+

我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。

+
+

错误:

+
+

使用 github 登录

+

使用 GITHUB 登录

+

使用 Github 登录

+

使用 gitHub 登录

+

使用 gイんĤЦ8 登录

+

我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。

+

我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。

+

我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。

+

我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。

+

我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。

+
+

注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;text-transform: lowercase; 对表现形式进行定义。

+

不要使用不地道的缩写

+

正确:

+
+

我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。

+
+

错误:

+
+

我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。

+
+

争议

+

以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。

+

链接之间增加空格

+

用法:

+
+

提交一个 issue 并分配给相关同事。

+

访问我们网站的最新动态,请 点击这里 进行订阅!

+
+

对比用法:

+
+

提交一个 issue并分配给相关同事。

+

访问我们网站的最新动态,请点击这里进行订阅!

+
+

简体中文使用直角引号

+

用法:

+
+

「老师,『有条不紊』的『紊』是什么意思?」

+
+

对比用法:

+
+

“老师,‘有条不紊’的‘紊’是什么意思?”

+
+
+

Note

+

本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/markdown/latex/index.html b/specification/markdown/latex/index.html new file mode 100644 index 00000000..e8da35f2 --- /dev/null +++ b/specification/markdown/latex/index.html @@ -0,0 +1,2913 @@ + + + + + + + + + + + + + + + + + + + + + + + + LaTeX - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

LaTeX

+

如何插入公式

+

LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。

+

行中公式可以用如下方法表示:

+

$ 数学公式 $

+

独立公式可以用如下方法表示:

+

$$ 数学公式 $$

+

函数、符号及特殊字符

+

声调 / 变音符号

+

\dot{a}, \ddot{a}, \acute{a}, \grave{a}

+

\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)

+

\check{a}, \breve{a}, \tilde{a}, \bar{a}

+

\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)

+

\hat{a}, \widehat{a}, \vec{a}

+

\(\hat{a}, \widehat{a}, \vec{a}\)

+

标准函数

+

指数

+

\exp_a b = a^b, \exp b = e^b, 10^m

+

\(\exp_a b = a^b, \exp b = e^b, 10^m\)

+

对数

+

\ln c, \lg d = \log e, \log_{10} f

+

\(\ln c, \lg d = \log e, \log_{10} f\)

+

三角函数

+

\sin a, \cos b, \tan c, \cot d, \sec e, \csc f

+

\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)

+

\arcsin a, \arccos b, \arctan c

+

\(\arcsin a, \arccos b, \arctan c\)

+

\sinh a, \cosh b, \tanh c, \coth d

+

\(\sinh a, \cosh b, \tanh c, \coth d\)

+

\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n

+

\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)

+

\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q

+

\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)

+

最大值,最小值

+

\min(x,y), \max(x,y)

+

\(\min(x,y), \max(x,y)\)

+

界限,极限

+

\min x, \max y, \inf s, \sup t

+

\(\min x, \max y, \inf s, \sup t\)

+

\lim u, \liminf v, \limsup w

+

\(\lim u, \liminf v, \limsup w\)

+

\lim_{x \to \infty} \frac{1}{n(n+1)}

+

\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)

+

\dim p, \deg q, \det m, \ker\phi

+

\(\dim p, \deg q, \det m, \ker\phi\)

+

投射

+

\Pr j, \hom l, \lVert z \rVert, \arg z

+

\(\Pr j, \hom l, \lVert z \rVert, \arg z\)

+

微分及导数

+

dt, \mathrm{d}t, \partial t, \nabla\psi

+

\(dt, \mathrm{d}t, \partial t, \nabla\psi\)

+

dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y

+

\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)

+

\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y

+

\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)

+

类字母符号及常数

+

\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar

+

∞,ℵ,∁,∍,ð,Ⅎ,ℏ

+

\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS

+

\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)

+

模运算

+

s_k \equiv 0 \pmod{m}

+

\(s_k \equiv 0 \pmod{m}\)

+

a \bmod b

+

\(a \bmod b\)

+

\gcd(m, n), \operatorname{lcm}(m, n)

+

\(\gcd(m, n), \operatorname{lcm}(m, n)\)

+

\mid, \nmid, \shortmid, \nshortmid

+

\(\mid, \nmid, \shortmid, \nshortmid\)

+

根号

+

\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}

+

\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)

+

运算符

+

+, -, \pm, \mp, \dotplus

+

\(+, -, \pm, \mp, \dotplus\)

+

\times, \div, \divideontimes, /, \backslash

+

\(\times, \div, \divideontimes, /, \backslash\)

+

\cdot, * \ast, \star, \circ, \bullet

+

\(\cdot, * \ast, \star, \circ, \bullet\)

+

\boxplus, \boxminus, \boxtimes, \boxdot

+

\(\boxplus, \boxminus, \boxtimes, \boxdot\)

+

\oplus, \ominus, \otimes, \oslash, \odot

+

\(\oplus, \ominus, \otimes, \oslash, \odot\)

+

\circleddash, \circledcirc, \circledast

+

\(\circleddash, \circledcirc, \circledast\)

+

\bigoplus, \bigotimes, \bigodot

+

\(\bigoplus, \bigotimes, \bigodot\)

+

集合

+

\{ \}, \empty \emptyset, \varnothing

+

\(\{ \}, \empty \emptyset, \varnothing\)

+

\in, \notin \not\in, \ni, \not\ni

+

\(\in, \notin \not\in, \ni, \not\ni\)

+

\cap, \Cap, \sqcap, \bigcap

+

\(\cap, \Cap, \sqcap, \bigcap\)

+

\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus

+

\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)

+

\setminus, \smallsetminus, \times

+

\(\setminus, \smallsetminus, \times\)

+

\subset, \Subset, \sqsubset

+

\(\subset, \Subset, \sqsubset\)

+

\supset, \Supset, \sqsupset

+

\(\supset, \Supset, \sqsupset\)

+

\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq

+

\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)

+

\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq

+

\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)

+

\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq

+

\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)

+

\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq

+

\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)

+

关系符号

+

=, \ne, \neq, \equiv, \not\equiv

+

\(=, \ne, \neq, \equiv, \not\equiv\)

+

\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=

+

\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)

+

\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong

+

\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)

+

\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto

+

\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)

+

<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot

+

\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)

+

>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot

+

\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)

+

\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq

+

\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)

+

\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq

+

\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)

+

\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless

+

\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)

+

\leqslant, \nleqslant, \eqslantless

+

\(\leqslant, \nleqslant, \eqslantless\)

+

\geqslant, \ngeqslant, \eqslantgtr

+

\(\geqslant, \ngeqslant, \eqslantgtr\)

+

\lesssim, \lnsim, \lessapprox, \lnapprox

+

\(\lesssim, \lnsim, \lessapprox, \lnapprox\)

+

\gtrsim, \gnsim, \gtrapprox, \gnapprox

+

\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)

+

\prec, \nprec, \preceq, \npreceq, \precneqq

+

\(\prec, \nprec, \preceq, \npreceq, \precneqq\)

+

\succ, \nsucc, \succeq, \nsucceq, \succneqq

+

\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)

+

\preccurlyeq, \curlyeqprec

+

\(\preccurlyeq, \curlyeqprec\)

+

\succcurlyeq, \curlyeqsucc

+

\(\succcurlyeq, \curlyeqsucc\)

+

\precsim, \precnsim, \precapprox, \precnapprox

+

\(\precsim, \precnsim, \precapprox, \precnapprox\)

+

\succsim, \succnsim, \succapprox, \succnapprox

+

\(\succsim, \succnsim, \succapprox, \succnapprox\)

+

几何符号

+

\parallel, \nparallel, \shortparallel, \nshortparallel

+

\(\parallel, \nparallel, \shortparallel, \nshortparallel\)

+

\perp, \angle, \sphericalangle, \measuredangle, 45^\circ

+

\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)

+

\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar

+

\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)

+

\bigcirc, \triangle, \bigtriangleup, \bigtriangledown

+

\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)

+

\vartriangle, \triangledown

+

\(\vartriangle, \triangledown\)

+

\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright

+

\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)

+

逻辑符号

+

\forall, \exists, \nexists

+

\(\forall, \exists, \nexists\)

+

\therefore, \because, \And

+

\(\therefore, \because, \And\)

+

\vee, \curlyvee, \bigvee

+

\(\vee, \curlyvee, \bigvee\)

+

\land, \wedge, \curlywedge, \bigwedge

+

\(\land, \wedge, \curlywedge, \bigwedge\)

+

\bar{q}, \bar{abc}, \overline{q}, \overline{abc},

+

\lnot \neg, \not\operatorname{R}, \bot, \top

+

\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)

+

\(\lnot \neg, \not\operatorname{R}, \bot, \top\)

+

\vdash \dashv, \vDash, \Vdash, \models

+

\(\vdash \dashv, \vDash, \Vdash, \models\)

+

\Vvdash \nvdash \nVdash \nvDash \nVDash

+

\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)

+

\ulcorner \urcorner \llcorner \lrcorner

+

\(\ulcorner \urcorner \llcorner \lrcorner\)

+

箭头

+

\Rrightarrow, \Lleftarrow

+

\(\Rrightarrow, \Lleftarrow\)

+

\Rightarrow, \nRightarrow, \Longrightarrow \implies

+

\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)

+

\Leftarrow, \nLeftarrow, \Longleftarrow

+

\(\Leftarrow, \nLeftarrow, \Longleftarrow\)

+

\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff

+

\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)

+

\Uparrow, \Downarrow, \Updownarrow

+

\(\Uparrow, \Downarrow, \Updownarrow\)

+

\rightarrow \to, \nrightarrow, \longrightarrow

+

\(\rightarrow \to, \nrightarrow, \longrightarrow\)

+

\leftarrow \gets, \nleftarrow, \longleftarrow

+

\(\leftarrow \gets, \nleftarrow, \longleftarrow\)

+

\leftrightarrow, \nleftrightarrow, \longleftrightarrow

+

\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)

+

\uparrow, \downarrow, \updownarrow

+

\(\uparrow, \downarrow, \updownarrow\)

+

\nearrow, \swarrow, \nwarrow, \searrow

+

\(\nearrow, \swarrow, \nwarrow, \searrow\)

+

\mapsto, \longmapsto

+

\(\mapsto, \longmapsto\)

+

\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons

+

\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)

+

\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright

+

\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)

+

\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft

+

\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)

+

\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow

+

\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)

+

特殊符号

+

省略号:数学公式中常见的省略号有两种,\ldots 表示与文本底线对齐的省略号,\cdots 表示与文本中线对齐的省略号。

+

\amalg \% \dagger \ddagger \ldots \cdots

+

\(\amalg \% \dagger \ddagger \ldots \cdots\)

+

\smile \frown \wr \triangleleft \triangleright

+

\(\smile \frown \wr \triangleleft \triangleright\)

+

\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp

+

\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)

+

未分类

+

\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes

+

\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)

+

\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq

+

\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)

+

\intercal \barwedge \veebar \doublebarwedge \between \pitchfork

+

\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)

+

\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright

+

\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)

+

\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq

+

\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)

+

上标、下标及积分等

+

功能|语法|效果

+

^ 表示上标, _ 表示下标。如果上下标的内容多于一个字符,需要用 {} 将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。

+

上标

+

a^2

+

\(a^2\)

+

下标

+

a_2

+

\(a_2\)

+

组合

+

a^{2+2}

+

\(a^{2+2}\)

+

a_{i,j}

+

\(a_{i,j}\)

+

结合上下标

+

x_2^3

+

\(x_2^3\)

+

前置上下标

+

{}_1^2\!X_3^4

+

\({}_1^2\!X_3^4\)

+

导数

+

x'

+

\(x'\)

+

导数

+

x^\prime

+

\(x\prime\)

+

导数点

+

\dot{x}

+

\(\dot{x}\)

+

\ddot{y}

+

\(\ddot{y}\)

+

向量

+

\vec{c}(只有一个字母)

+

\(\vec{c}\)

+

\overleftarrow{a b}

+

\(\overleftarrow{a b}\)

+

\overrightarrow{c d}

+

\(\overrightarrow{c d}\)

+

\overleftrightarrow{a b}

+

\(\overleftrightarrow{a b}\)

+

\widehat{e f g}

+

\(\widehat{e f g}\)

+

上弧

+

(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)

+

\overset{\frown} {AB}

+

\(\overset{\frown} {AB}\)

+

上划线

+

\overline{h i j}

+

\(\overline{h i j}\)

+

下划线

+

\underline{k l m}

+

\(\underline{k l m}\)

+

上括号

+

\overbrace{1+2+\cdots+100}

+

\(\overbrace{1+2+\cdots+100}\)

+

\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}

+

\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)

+

下括号

+

\underbrace{a+b+\cdots+z}

+

\(\underbrace{a+b+\cdots+z}\)

+

\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}

+

\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)

+

求和(累加)

+

\sum_{k=1}^N k^2

+

\(\sum_{k=1}^N k^2\)

+

\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}

+

\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)

+

求积(累乘)

+

\prod_{i=1}^N x_i

+

\(\prod_{i=1}^N x_i\)

+

\begin{matrix} \prod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)

+

上积

+

\coprod_{i=1}^N x_i

+

\(\coprod_{i=1}^N x_i\)

+

\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)

+

极限

+

\lim_{n \to \infty}x_n

+

\(\lim_{n \to \infty}x_n\)

+

\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}

+

\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)

+

积分

+

\int_{-N}^{N} e^x\, {\rm d}x

+

\(\int_{-N}^{N} e^x\, {\rm d}x\)

+

本例中 \ , 和 {\rm d} 部分可省略,但建议加入,能使式子更美观。{\rm d} 可以用 \mathrm{d} 等价替换。

+

\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}(矩阵中积分符号变小)

+

\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)

+

双重积分

+

\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y

+

\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)

+

三重积分

+

\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z

+

\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)

+

闭合的曲线、曲面积分

+

\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y

+

\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)

+

交集

+

\bigcap_1^{n} p

+

\(\bigcap_1^{n} p\)

+

并集

+

\bigcup_1^{k} p

+

\(\bigcup_1^{k} p\)

+

分数

+

通常使用 \frac {分子} {分母} 命令产生一个分数,分数可嵌套。 +便捷情况可直接输入 \frac ab 来快速生成一个 \(\frac ab\) 。 +如果分式很复杂,亦可使用 分子 \over 分母 命令,此时分数仅有一层。

+

功能|语法|效果

+

分数

+

\frac{2}{4} = 0.5

+

\(\frac{2}{4}=0.5\)

+

小型分数

+

\tfrac{2}{4} = 0.5

+

\(\tfrac{2}{4} = 0.5\)

+

连分式(大型嵌套分式)

+

\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a

+

\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)

+

大型不嵌套分式

+

\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a

+

\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)

+

二项式系数

+

\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

小型二项式系数

+

\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

大型二项式系数

+

\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac 符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。 +横着写这些分式,中间使用斜线间隔 / (用斜线代替分数线)。

+

例子:

+
\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
+

显示:

+
\[ +\begin{array}{cc} +\mathrm{Bad} & \mathrm{Better} \\ +\hline \\ +e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\ +\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\ +\end{array} +\]
+

矩阵、条件表达式、方程组

+

语法:

+
\begin{类型}
+公式内容
+\end{类型}
+
+

类型可以是:矩阵 matrix pmatrix bmatrix Bmatrix vmatrix Vmatrix 、条件表达式 cases 、多行对齐方程式 aligned 、数组 array

+

在公式内容中:在每一行中插入 & 来指定需要对齐的内容,在每行结尾处使用 \\ 换行

+

无框矩阵

+

在开头使用 begin{matrix} ,在结尾使用 end{matrix} ,在中间插入矩阵元素,每个元素之间插入 & ,并在每行结尾处使用 \\

+
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
+

\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)

+

有框矩阵

+

在开头将 matrix 替换为 pmatrix bmatrix Bmatrix vmatrix Vmatrix

+
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
+

\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)

+
\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
+

\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)

+

使用 \cdots ⋯ , \ddots ⋱ , \vdots ⋮ 来输入省略符号。

+
\begin{bmatrix}
+0      & \cdots & 0      \\
+\vdots & \ddots & \vdots \\
+0      & \cdots & 0
+\end{bmatrix}
+
+

\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)

+
\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
+

\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)

+
\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
+

\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)

+

条件表达式

+
f(n) =
+\begin{cases} 
+n/2,  & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
+

\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)

+

多行等式、同余式

+

人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}

+
\begin{aligned}
+f(x) & = (m+n)^2 \\
+     & = m^2+2mn+n^2 \\
+\end{aligned}
+
+

\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)

+
\begin{aligned}
+3^{6n+3}+4^{6n+3} 
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\  
+& \equiv 27^{2n+1}+64^{2n+1}\\  
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\ 
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
+

\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)

+
\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+     & = m^2-2mn+n^2 \\
+\end{alignedat}
+
+

\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)

+

方程组

+
\begin{cases}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
+

\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)

+

+
\left\{\begin{aligned}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
+

\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)

+

数组与表格

+

通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array} 开头,并在其后定义列数及每一列的文本对齐属性,c l r 分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 | ,若要插入水平分割线,在下一行输入前插入 \hline 。与矩阵相似,每行元素间均须要插入 & ,每行元素以 \\ 结尾,最后以 \end{array} 结束数组。

+
    +
  • 例子:
  • +
+
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcl}
+z        & = & a \\
+f(x,y,z) & = & x + y + z 
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcr}
+z        & = & a \\
+f(x,y,z) & = & x + y + z    
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)

+

嵌套数组或表格

+

多个数组/表格可 互相嵌套 并组成一组数组/一组表格。 +使用嵌套前必须声明 $$ 符号。

+
    +
  • 例子:
  • +
+
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+    % inner horizontal array of arrays 内层水平表格
+    \begin{array}{cc}
+        % inner array of minimum values 内层"最小值"数组
+        \begin{array}{c|cccc}
+        \text{min} & 0 & 1 & 2 & 3\\
+        \hline
+        0 & 0 & 0 & 0 & 0\\
+        1 & 0 & 1 & 1 & 1\\
+        2 & 0 & 1 & 2 & 2\\
+        3 & 0 & 1 & 2 & 3
+        \end{array}
+    &
+        % inner array of maximum values 内层"最大值"数组
+        \begin{array}{c|cccc}
+        \text{max}&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 1 & 2 & 3\\
+        2 & 2 & 2 & 2 & 3\\
+        3 & 3 & 3 & 3 & 3
+        \end{array}
+    \end{array}
+    % 内层第一行表格组结束
+    \\
+    % inner array of delta values 内层第二行Delta值数组
+        \begin{array}{c|cccc}
+        \Delta&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 0 & 1 & 2\\
+        2 & 2 & 1 & 0 & 1\\
+        3 & 3 & 2 & 1 & 0
+        \end{array}
+        % 内层第二行表格组结束
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)

+

用数组实现带分割符号的矩阵

+
    +
  • 例子:
  • +
+
$$
+\left[
+    \begin{array}{cc|c}
+      1&2&3\\
+      4&5&6
+    \end{array}
+\right]
+$$
+
+

显示:

+
\[ +\left[ + \begin{array}{cc|c} + 1&2&3\\ + 4&5&6 + \end{array} +\right] +\]
+

其中 cc|c 代表在一个三列矩阵中的第二和第三列之间插入分割线。

+

字体

+

希腊字母

+
+

Note

+

对于部分希腊字母,例如 \Alpha 在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题

+
+

输入 \小写希腊字母英文全称\首字母大写希腊字母英文全称 来分别输入小写和大写希腊字母。

+

A B \Gamma \Delta E Z H \Theta

+

\(A B \Gamma \Delta E Z H \Theta\)

+

I K \Lambda M N \Xi O \Pi

+

\(I K \Lambda M N \Xi O \Pi\)

+

P \Sigma T \Upsilon \Phi X \Psi \Omega

+

\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)

+

\alpha \beta \gamma \delta \epsilon \zeta \eta \theta

+

\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)

+

\iota \kappa \lambda \mu \nu \omicron \xi \pi

+

\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)

+

\rho \sigma \tau \upsilon \phi \chi \psi \omega

+

\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)

+

部分字母有变量专用形式,以 \var- 开头

+

\varepsilon \digamma \varkappa \varpi

+

\(\varepsilon \digamma \varkappa \varpi\)

+

\varrho \varsigma \vartheta \varphi

+

\(\varrho \varsigma \vartheta \varphi\)

+

希伯来符号

+

\aleph \beth \gimel \daleth

+

\(\aleph \beth \gimel \daleth\)

+
+

Note

+

该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/markdown/markdown/index.html b/specification/markdown/markdown/index.html new file mode 100644 index 00000000..e09beb68 --- /dev/null +++ b/specification/markdown/markdown/index.html @@ -0,0 +1,2065 @@ + + + + + + + + + + + + + + + + + + + + + + + + Markdown 写作 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Markdown 写作

+
+

Note

+

本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。

+
+

标题

+

你的内容标题应该从二级标题( ## )开始

+
# 一级标题
+## 二级标题
+### 三级标题
+
+

强调,斜体,删除线

+

我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球

+
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
+

分隔符

+
---
+***
+
+

链接

+

你应该避免直接内嵌 HTML 代码。

+
[link name](link url) 或者 <link url>
+
+

列表

+
    +
  • +

    多翻译引擎

    +
      +
    • 谷歌翻译
    • +
    • 微软翻译
    • +
    • 有道翻译
    • +
    • 百度翻译
    • +
    • 阿里翻译
    • +
    • DeepL 翻译
    • +
    +
  • +
  • +

    多语言互译

    +
  • +
+
- 多翻译引擎
+
+    * 谷歌翻译
+    * 微软翻译
+    * 有道翻译
+    * 百度翻译
+    * 阿里翻译
+    * DeepL 翻译
+
+- 多语言互译
+
+

代码

+

使用单引号 code 来表示行内代码,使用三引号来表示代码块。

+
code
+
+

并且对于代码块,你应该写上对应的语言

+

图片

+

你应该避免内嵌 HTML 来插入图片。

+
![link name](picture url)
+
+

注释

+

下面是一段注释

+
+

这里是一段注释 (<blockquote></blockquote>) +这是注释的第二行

+
+
# 这里是注释里面的代码段
+print("hello")
+
+
+

注释

+
+

注释嵌套 +注释嵌套

+
+
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
+

Emoji

+

暂不支持 emoji 语法,但是可以直接从 emoji 表情大全拷贝表情到文档,比如: +🍊 🍇 😀 😅 😇

+
+

访问http://emojihomepage.com/以获取更多emoji

+
+

上下标

+

H2O, y = x2

+
H~2~O, y = x^2^
+
+

引用

+

我能干饭我自豪。1

+
我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
+

表格

+ + + + + + + + + + + + + + + + + +
Header 1Header2
Cell 1Cell 2 link
Cell 3Cell 4
+
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
+

任务列表

+
    +
  • 任务1
  • +
  • 任务2
  • +
  • 任务3
  • +
  • 任务4
  • +
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
+

数学

+

文档支持 LaTeX ,关于 LaTeX ,你可以访问 LaTeX公式手册 来获取帮助。

+

mermaid 支持

+

使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网

+
sequenceDiagram
+  Alice->>John: Hello John, how are you?
+  loop Healthcheck
+      John->>John: Fight against hypochondria
+  end
+  Note right of John: Rational thoughts!
+  John-->>Alice: Great!
+  John->>Bob: How about you?
+  Bob-->>John: Jolly good!
+
+
    ```mermaid
+    sequenceDiagram
+        Alice->>John: Hello John, how are you?
+        loop Healthcheck
+            John->>John: Fight against hypochondria
+        end
+        Note right of John: Rational thoughts!
+        John-->>Alice: Great!
+        John->>Bob: How about you?
+        Bob-->>John: Jolly good!
+    ```
+
+
+
+
    +
  1. +

    老子说道 +这会在文章末尾进行注解 

    +
  2. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/pr/index.html b/specification/pr/index.html new file mode 100644 index 00000000..19f556a7 --- /dev/null +++ b/specification/pr/index.html @@ -0,0 +1,1678 @@ + + + + + + + + + + + + + + + + + + + + + + + + Pull Request 规范 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Pull Request 规范

+

对于 Pull Request,请遵守以下几点要求1

+
    +
  1. 标题请写明本次 PR 的目的(做了 什么 工作,修复了 什么 问题)。
  2. +
  3. 内容请简要叙述修改的内容。如果修复了一个 issue 的问题,请在内容中添加 fix #xxxx 字段,其中 xxxx 代表 issue 的编号。
  4. +
  5. 推荐删除 pull request message 中的模板信息(“首先,十分感谢……”这一段)。
  6. +
+

对于 Pull Request 的标题,推荐使用如下格式书写:

+
<修改类型>(<文件名>): <修改的内容> (<对应 issue 的编号>)
+
+

修改类型分为如下几类:

+
    +
  • feat:用于添加内容的情况。
  • +
  • fix:用于修正现有内容错误的情况。
  • +
  • refactor:用于对一个页面进行重构(较大规模的更改)的情况。
  • +
  • revert:用于回退之前更改的情况。
  • +
+

示例:

+
    +
  • fix(sepecification/specification): 修改代码注释使描述更清晰
  • +
  • fix: plugins/xxx 不在目录中 (#2)
  • +
  • feat(software/mathpix): official website
  • +
  • refactor(specification/template): 整理页面内容
  • +
+
+
+
    +
  1. +

    修改自 OI-wiki: 如何参与 

    +
  2. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/template/index.html b/specification/template/index.html new file mode 100644 index 00000000..bdad0982 --- /dev/null +++ b/specification/template/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + 模版(软件的标题,如果是必须付费软件,直接在标题写上“付费”) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

模版(软件的标题,如果是必须付费软件,直接在标题写上“付费”)

+

朋友你好,如果你有一个很棒的工具希望和大家分享,但是你不知道怎么写一个markdown,这里提供了一个可以参考的模版

+

简介

+

我们希望提交的pr在简介部分描述这个工具的:

+
    +
  • 官方的网站(如果有,尽可能以内嵌链接形式嵌入到简介)
  • +
  • 主要功能
  • +
  • 使用的环境
  • +
  • 其他基本的特点
  • +
+

安装

+

我们希望提交的pr在安装部分描述:

+
    +
  • 软件适配的操作系统的版本
  • +
  • 安装软件的方式 特别是非Windows操作系统中的安装最好给出指令
  • +
  • 如果安装这个软件需要提前安装其他的依赖软件,请注明
  • +
  • 如果可以请提供检查软件成功安装的方法,例如使用 $clang --version 检查 clang 是否成功安装
  • +
+

推荐理由

+

我们希望提交的pr在推荐理由部分描述:

+
    +
  • 这个工具的优点
  • +
  • 这个工具的缺点
  • +
  • 这个工具是否开源(开源,但提供付费服务最好标明)
  • +
  • 如果这个工具不开源,是否免费,是否允许商业化使用,是否提供教育版
  • +
  • 如果这个工具需要付费,起步价格是多少,如果有其他层级价位,请注明官网定价链接
  • +
+

参考

+

我们希望提交的pr在参考部分提供一些常用的参考,例如:

+
    +
  • 工具的官方文档
  • +
  • 笔者实际使用中遇到的情况
  • +
  • 相关的社区,书籍,网页
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/CNAME b/zh/CNAME new file mode 100644 index 00000000..fc63c12d --- /dev/null +++ b/zh/CNAME @@ -0,0 +1 @@ +tooldiy.ry.rs diff --git a/zh/firmware/RustSBI/index.html b/zh/firmware/RustSBI/index.html new file mode 100644 index 00000000..648c3bf9 --- /dev/null +++ b/zh/firmware/RustSBI/index.html @@ -0,0 +1,1736 @@ + + + + + + + + + + + + + + + + + + + + + + + + RustSBI - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

RustSBI

+

官网:https://github.com/rustsbi

+

RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。

+

独立包

+

独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:

+ +

这些解决方案的文档和下载链接都在各自的仓库中。

+

原型设计系统

+

RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。

+

为了编译原型设计系统,复制仓库后使用以下的命令:

+
cargo termconfig
+
+

在图形界面配置完毕后,配置文件将保存到Xtask.toml文件中,以供编译过程阅读。

+

接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:

+
cargo make
+
+

或者,使用以下的命令直接编译和烧录到目标主板:

+
cargo flash
+
+

RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/frame/img/wasm-bpf-no-bcc.png b/zh/frame/img/wasm-bpf-no-bcc.png new file mode 100644 index 00000000..9fb71736 Binary files /dev/null and b/zh/frame/img/wasm-bpf-no-bcc.png differ diff --git a/zh/frame/wasm-bpf/index.html b/zh/frame/wasm-bpf/index.html new file mode 100644 index 00000000..07113721 --- /dev/null +++ b/zh/frame/wasm-bpf/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + 📦 Wasm-bpf: 为在 WebAssembly 上运行 eBPF 应用而设计的库、工具链和运行时 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

📦 Wasm-bpf: 为在 WebAssembly 上运行 eBPF 应用而设计的库、工具链和运行时

+

Actions Status +CodeFactor +DeepSource

+

中文文档 Gitee Github

+

Wasm-bpf 是一个由 CO-RE(一次编写 – 到处运行) libbpf libbpf 驱动的 WebAssembly eBPF 库、工具链和运行时。它可以帮助您几乎不用修改地构建几乎所有的 eBPF 程序或用例到 Wasm 中,并在 Wasm 沙箱中跨平台运行。

+

简介

+

WebAssembly(简称Wasm)是一种可执行代码的便携式二进制格式。代码在一个内存安全的沙盒环境中以接近本机速度执行,具有明确定义的资源限制和一个 API ,用于与嵌入式主机环境(例如代理)进行通信。

+

wasm-bpf 项目结合了 Wasm 和 eBPF 技术,提高了eBPF应用程序的性能和可编程性。它提供了一个库和工具链,用于将多种语言编写的 eBPF 应用编译成 Wasm,并提供运行时环境以在安全的沙箱中运行这些程序。

+

使用 wasm-bpf,用户可以动态加载和安全地执行用户自定义或社区贡献的 Wasm-eBPF 代码作为插件,例如在他们的网络相关软件产品,或可观测性平台中。这其中 eBPF 使得数据收集高效可扩展,同时 Wasm 也允许对这些数据进行高级处理和分析。

+

此外,它使开发人员能够使用熟悉的语言,如 C/C ++,Rust,Go 和其他 30 多种能编译到 Wasm 的编程语言编写 eBPF 程序,并轻松地在不同的Linux发行版中部署它们。此外,利用 Wasm 的生态和工具链,云提供商可以利用 wasm-bpf 为其客户提供安全且高性能的环境来开发和部署 eBPF 应用程序。

+

功能

+
    +
  • 通用性: 提供了从 eBPF 到 Wasm 的大多数能力,包括从环形缓冲区perf 缓冲区进行轮询,使用 maps 在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、挂载到 hook 执行等。支持大量的 eBPF 程序类型和 maps 类型。
  • +
  • 高性能: 对于复杂数据类型没有序列化开销,使用共享内存来避免主机和 Wasm 之间的拷贝开销。
  • +
  • 易于使用: 提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义以进行绑定。可以使用 C/C++RustGo 编写 eBPF 程序并编译成 Wasm。
  • +
  • 超轻量级: 最小运行时的二进制大小仅为 1.5 MB。编译后的 Wasm 模块大小仅为 ~90K。使用相同的工具链,您可以轻松地在任何语言和平台上构建自己的 Wasm-eBPF 运行时!
  • +
+

请参阅 examples 目录中以 C、Rust、Go 编写的编译为 Wasm 的 eBPF 程序示例,覆盖了从跟踪、网络到安全的各种用例。

+

有关使用 OCI 镜像分发、动态加载、运行 Wasm-eBPF 程序的工具,请参阅 eunomia-bpf 仓库。

+

🔨 示例

+

请查看 examples 目录中用 C、Rust、Go 编写的编译成 WASM 的 eBPF 程序示例。

+

tracing examples

+ +

security example +- lsm and go-lsm: 检查删除目录的权限

+

networking example +- sockfilter: 监视数据包并处理 __sk_buff +- sockops: 在 syn 数据包中添加 pid 选项。

+

runqlat 的一个示例输出:

+
$ sudo ./wasm-bpf runqlat.wasm 1
+Tracing run queue latency... Hit Ctrl-C to end.
+
+     usecs               : count    distribution
+         0 -> 1          : 72       |*****************************           |
+         2 -> 3          : 93       |*************************************   |
+         4 -> 7          : 98       |****************************************|
+         8 -> 15         : 96       |*************************************** |
+        16 -> 31         : 38       |***************                         |
+        32 -> 63         : 4        |*                                       |
+        64 -> 127        : 5        |**                                      |
+       128 -> 255        : 6        |**                                      |
+       256 -> 511        : 0        |                                        |
+       512 -> 1023       : 0        |                                        |
+      1024 -> 2047       : 0        |                                        |
+      2048 -> 4095       : 1        |                                        |
+
+

构建运行时

+

请参考 docs/build.md

+

Wasm-bpf 工作原理

+

wasm-bpf 运行时需要两部分:主机端(在 Wasm 运行时之外)和 Wasm 客户端端(在 Wasm 运行时之内)。

+
    +
  • 主机端:一个简单的运行时实现示例
  • +
  • 参见 runtime/cpp,它将是在 libbpfWAMR 之上构建的 C++ 示例运行时。另一个更完善的基于 Wasmtime 的 Rust 运行时实现在 runtime/wasm-bpf-rs 中。
  • +
  • 您可以使用相同的系统接口以 任何 语言、任何 eBPF 库和 任何 Wasm 运行时轻松构建自己的 Wasm-eBPF 运行时。
  • +
  • wasm 端:工具链和库
  • +
  • 一个名为 libbpf-wasm 的头文件库,为 Wasm 客户端 C/C++ 代码提供 libbpf API。
  • +
  • 一个名为 bpftool 的工具,用于生成 Wasm-eBPF skeleton 头文件和 C 结构定义,以便在主机和 Wasm 客户端之间传递数据而无需序列化。
  • +
  • 对于 Rust、Go 和其他语言的支持与 C/C++ 支持类似。
  • +
+

有关详细的编译过程,请参阅 examples/bootstrap/README.md。下图显示了 eBPF 和 Wasm 运行时之间的整体交互过程:

+

wasi-bpf

+

Wasm 模块可以同时加载和控制多个 eBPF 程序, 并且能够调用或者控制(通过组件模型)其他语言编写的 Wasm 模块来处理数据。

+

我们也提了一个 WASI 提案 wasi-bpf

+

协议

+

MIT

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/frame/zineland/index.html b/zh/frame/zineland/index.html new file mode 100644 index 00000000..b452fda0 --- /dev/null +++ b/zh/frame/zineland/index.html @@ -0,0 +1,1746 @@ + + + + + + + + + + + + + + + + + + + + + + + + Zineland - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Zineland

+

简介

+

Zineland 是一个简单有效的杂志构建框架,能够快速通过 Markdown 文档生成杂志风格的静态网页

+

获取

+ +
  cargo install zine
+
+
    +
  • brew
  • +
+
  brew install zineland/tap/zine
+
+ +

优点

+
    +
  • 移动端阅读体验优先
  • +
  • 优雅的杂志设计
  • +
  • 可定制化程度高,支持扩展
  • +
  • 支持I18n和I10n
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html new file mode 100644 index 00000000..d14a78f6 --- /dev/null +++ b/zh/index.html @@ -0,0 +1,1747 @@ + + + + + + + + + + + + + + + + + + + + + + 前言 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

前言

+

ToolDiy的初衷

+

在时间的长河中,我们发现,重复繁琐的工作带给大家的只有时间和精力的消耗。的确在我们的不断思考和进步中,一个个优秀的工具出现在我们的眼前。但随之而来的是,工具种类和数量的飞速发展,我们难以根据具体需求,快速,简易地上手一款工具。相反,“百度”,“谷歌”成为了我们老生常谈的话语。

+
    +
  1. +

    在一个个链接和回答中不断尝试。有的是生涩的英文文档,有的是寥寥数语,这无疑增加了我们的使用成本。所以 ToolDiy 的初衷就是为了解决这个问题,我们想借助开源社区的环境,不断收集和提炼各行各业的工具(毕竟适合你的才是最好的)。 ToolDiy 将从客观的角度,以用户的视角出发,推荐分析各类工具,而不仅仅局限于固定的方向。

    +
  2. +
  3. +

    很多时候我们在开发过程中会遇到很多工具的环境配置问题,我们不得不花费大量时间去思考和学习使用,很多时候这些工作本身就只能够锻炼你对配置环境的耐心,我们想让大家专注工具本身,于是我们想维护一些工具配置和构建的自动化脚本或者是docker环境方便使用者,当然我们在书写时候留下的构建脚本也可以提供给使用者学习。一个能够开箱即用的工具想想都令人兴奋,让我们一起建设他吧!

    +
  4. +
+

只要能够给大家带来帮助和更好的体验,这便是 ToolDiy 存在的意义。

+

接下来,让我们一起使用它吧!

+

贡献

+

本项目的初衷是提供维护一个工具说明的仓库和维基,本身就是一个降低使用门槛方便大家的项目,我们的原则是不限于任何特定的学科和领域,我们可以将所有自己认为有用的工具进行分享(注意做好入门介绍,符合项目初衷),在尊重工具生产者劳动的前提下都可以分享,因此我们不允许大家分享盗版和破解工具,在规范的前提下我们欢迎各种各样的 PR ,有任何除开上诉的疑惑都可以提出 issue 或者联系仓库管理,在涉及付费内容的工具时我们鼓励分享也希望大家做好信息公开标注他的价格,本项目不会给任何工具广告,不会有特殊位置等广告行为一切以提交时间排版。我们同样欢迎各种改善本项目阅读体验的 PR 请求(包括但不局限于添加一个换行增加阅读体验,增加项目 logo ,中英文校对等),_(:з)∠)_本项目还处于初期阶段,非常需要各位大佬的完善和纠错。

+

如果你有已经写好的文章想要添加到这里,你可以通过下列方式:

+
    +
  1. fork 本仓库,在 docs 文件夹下选择对应分类创建中文英文版 Markdown 文档(英文版文件名以 .en.md 结尾),最后提出 PR 以便进行合并。
  2. +
  3. 联系 SakurajimaMaii ,将文档的中文英文版发送至他的邮箱 Email
  4. +
+

如果你不知道从何处下笔,可以首先参考写作模板

+
+

Note

+
    +
  1. 所有上传到本网站的内容均应该符合规范。
  2. +
  3. 如果你不熟悉 PR ,你可以参考3分钟学会, 如何PR(Pull Request)代码到 Github
  4. +
+
+

联系我们

+

点击链接加入群聊 tooldiy

+

版权声明

+

知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/javascripts/mathjax.js b/zh/javascripts/mathjax.js new file mode 100644 index 00000000..080801ef --- /dev/null +++ b/zh/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() +}) diff --git a/zh/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp b/zh/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp new file mode 100644 index 00000000..5731e05f Binary files /dev/null and b/zh/large_language_model/img/v2-0e4e1e401f478835a3d093653a594751_720w.webp differ diff --git a/zh/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp b/zh/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp new file mode 100644 index 00000000..d2906f1c Binary files /dev/null and b/zh/large_language_model/img/v2-1227b07bc19529ebed99f6af17d81566_720w.webp differ diff --git a/zh/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp b/zh/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp new file mode 100644 index 00000000..fcf2b0f7 Binary files /dev/null and b/zh/large_language_model/img/v2-486e3098f940511231b353ff5ca2783c_720w.webp differ diff --git a/zh/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp b/zh/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp new file mode 100644 index 00000000..a196f3ee Binary files /dev/null and b/zh/large_language_model/img/v2-4d614aad71b16c9588d241f07bdd72c0_720w.webp differ diff --git a/zh/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp b/zh/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp new file mode 100644 index 00000000..f464f5e4 Binary files /dev/null and b/zh/large_language_model/img/v2-673e9a0cde7e3f50fe20994a5d0eec72_720w.webp differ diff --git a/zh/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg b/zh/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg new file mode 100644 index 00000000..cef088ff Binary files /dev/null and b/zh/large_language_model/img/v2-8881c00c2d9940545e76e28c29794f96_720w.jpg differ diff --git a/zh/large_language_model/rwkv.cpp/index.html b/zh/large_language_model/rwkv.cpp/index.html new file mode 100644 index 00000000..0515fbb0 --- /dev/null +++ b/zh/large_language_model/rwkv.cpp/index.html @@ -0,0 +1,1887 @@ + + + + + + + + + + + + + + + + + + + + + + + + rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

rwkv.cpp: CPU 也能跑的 RNN 中文语言大模型

+

最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。

+

但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。

+

RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:

+

Raven RWKV 7B - a Hugging Face Space by BlinkDL

+

不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1% 这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。

+

下载模型

+

首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:

+

img

+

其中:

+
    +
  • 统一前缀 rwkv-4 表示它们都基于 RWKV 的第 4 代架构。
  • +
  • pile 代表基底模型,在 pile 等基础语料上进行预训练,没有进行微调,适合高玩来给自己定制。
  • +
  • novel 代表小说模型,在各种语言的小说上进行微调,适合写小说。
  • +
  • raven 代表对话模型,在各种开源的对话语料上进行微调,适合聊天、问答、写代码。
  • +
  • 430m、7b 这些指的是模型的参数量。
  • +
+

我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。

+

img

+

这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)

+

模型转换

+

下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。

+

所以,这里需要介绍一下能够更充分利用 CPU 的方法:

+

saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)

+

rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。

+

以下是操作步骤。

+

1. 下载仓库代码

+

需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)

+
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
+

2. 下载依赖库 or 编译依赖库

+

rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases

+

img

+

下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):

+
cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
+

3. 转换模型

+

需要装 PyTorch

+

我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:

+
python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
+

其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py 这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth 是待转换的模型的路径, ./rwkv.cpp-7B.bin 是转换后的路径,float16 是要转换成什么类型的参数。

+

4. 量化模型

+

其实上面转换好的 ./rwkv.cpp-7B.bin 已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin 量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:

+
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
+

然后你就会得到一个大小只有 6GB 的模型了。

+

运行模型

+

同样,一行命令搞定:

+
python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
+

让我们看看效果,首先是内存占用,不到 6GB

+

img

+

然后是问答和执行命令:

+
    +
  1. 太阳有几只眼睛?
  2. +
  3. 知乎是什么网站?
  4. +
  5. 写一篇介绍数据分析的文章。
  6. +
+

img

+

效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:

+

img

+

希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。

+

以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。

+

参考

+
+
+
    +
  1. +

    https://github.com/antimatter15/alpaca.cpp 

    +
  2. +
  3. +

    https://github.com/THUDM/ChatGLM-6B 

    +
  4. +
  5. +

    https://github.com/LianjiaTech/BELLE 

    +
  6. +
  7. +

    发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 

    +
  8. +
  9. +

    RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 

    +
  10. +
  11. +

    RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 

    +
  12. +
  13. +

    BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL 

    +
  14. +
  15. +

    RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth 

    +
  16. +
  17. +

    https://github.com/BlinkDL/ChatRWKV 

    +
  18. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/one_click_deployment/Source-changer/index.html b/zh/one_click_deployment/Source-changer/index.html new file mode 100644 index 00000000..1bc5a487 --- /dev/null +++ b/zh/one_click_deployment/Source-changer/index.html @@ -0,0 +1,1751 @@ + + + + + + + + + + + + + + + + + + + + + + + + Source-changer换源工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Source-changer换源工具

+

本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率

+

安装

+
+

git clone https://github.com/57307407/Source-changer.git

+
+

介绍

+

目前支持 maven 、 npm 、 python(pip)换源

+

由于本工具使用 python 语言进行开发,使用前请先安装python环境

+
+

下载链接:https://www.python.org/

+
+

输入命令

+
+

python -V

+

or

+

python3 -V

+
+

出现python版本号即为安装完毕

+

python版本

+

使用

+
+

python main.py / python3 main.py

+

更换maven源时需要在命令前加sudo

+

即: sudo python3 main.py

+
+

Source-changer_主页面

+

选择需换源的软件

+

Source-changer_软件选择

+

选择更换的镜像

+

Source-changer_镜像选择

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/one_click_deployment/Windows_Setup/index.html b/zh/one_click_deployment/Windows_Setup/index.html new file mode 100644 index 00000000..8c04152f --- /dev/null +++ b/zh/one_click_deployment/Windows_Setup/index.html @@ -0,0 +1,1805 @@ + + + + + + + + + + + + + + + + + + + + + + + + windows环境部署 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

windows环境部署

+

本文向大家介绍自己的windows环境如何部署该项目

+
+

注意:这里需要用到python环境,本人是python3.10

+
+

下载 ToolDiy

+
git clone https://github.com/cargo-youth/ToolDiy.git
+
+

安装 mkdocs

+
下载链接:pip install mkdocs
+
+

安装网站主题

+

本站主题是material,使用下面命令进行安装即可。 +

pip install mkdocs-material
+

+

安装其它依赖

+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
+

安装i18n

+

这里是个坑,我安装的时候,直接安装pip install i18n不行,你需要专门安装mkdocs下的i18n,然后问的chatGPT,他给我提供的解决方案是pip install mkdocs-i18n-plugin;可惜不对,最后在谷歌上找到下面命令,就对了。 +

pip install mkdocs-static-i18n
+

+

运行项目

+
mkdocs serve
+
+

构建静态网站文件

+
mkdocs build
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/one_click_deployment/docker_os_c/index.html b/zh/one_click_deployment/docker_os_c/index.html new file mode 100644 index 00000000..837f85ef --- /dev/null +++ b/zh/one_click_deployment/docker_os_c/index.html @@ -0,0 +1,1807 @@ + + + + + + + + + + + + + + + + + + + + + + + + Docker 搭建 C 语言操作系统开发环境 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Docker 搭建 C 语言操作系统开发环境

+

预设开发环境简述

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • gcc 11.3.0
  • +
  • GNU Make 4.3
  • +
  • cmake 3.22.1
  • +
  • QEMU emulator 7.0.0
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • C/C++ 1.14.4
    • +
    • Chinese (Simplified) Language Pack 1.75.0
    • +
    +
  • +
+

快速开始

+

安装 Docker Desktop,参见 Install Docker Desktop on Windows

+

运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行

+
docker pull jklincn/c-os
+
+

镜像成功拉取后,执行

+
docker run -d --privileged -p 58888:8080 jklincn/c-os
+
+

这时使用浏览器打开 http://localhost:58888 即可启动开发环境。

+

后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。

+
+
    +
  1. +

    主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换。

    +
  2. +
  3. +

    如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击 Apply & restart 重启 Docker,再次尝试拉取。

    +
    "registry-mirrors": [
    +    "http://hub-mirror.c.163.com",
    +    "https://docker.mirrors.ustc.edu.cn"
    +]
    +
    +
  4. +
+
+

Dockerfile

+

此处给出镜像的构建脚本,供有需求的同学参考与修改

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+    code --install-extension cpptools-linux.vsix && \
+    rm cpptools-linux.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/one_click_deployment/docker_os_rust/index.html b/zh/one_click_deployment/docker_os_rust/index.html new file mode 100644 index 00000000..450836b4 --- /dev/null +++ b/zh/one_click_deployment/docker_os_rust/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + Docker 搭建 Rust 语言操作系统开发环境 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Docker 搭建 Rust 语言操作系统开发环境

+

预设开发环境简述

+
    +
  • ubuntu 22.04.2 LTS
  • +
  • GNU Make 4.3
  • +
  • QEMU emulator 7.0.0
  • +
  • rustc nightly-latest
  • +
  • rustup latest
  • +
  • cargo nightly-latest
  • +
  • code-server 4.10.1
  • +
  • +

    code-server extensions

    +
      +
    • rust-analyzer 0.3.1435
    • +
    • Chinese (Simplified) Language Pack 1.75.0
    • +
    +
  • +
+

快速开始

+

安装 Docker Desktop,参见 Install Docker Desktop on Windows

+

运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行

+
docker pull jklincn/rust-os
+
+

镜像成功拉取后,执行

+
docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
+

这时使用浏览器打开 http://localhost:58888 即可启动开发环境。

+

后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。

+
+
    +
  1. +

    主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换

    +
  2. +
  3. +

    如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击 Apply & restart 重启 Docker,再次尝试拉取。

    +
    "registry-mirrors": [
    +    "http://hub-mirror.c.163.com",
    +    "https://docker.mirrors.ustc.edu.cn"
    +]
    +
    +
  4. +
+
+

Dockerfile

+

此处给出镜像的构建脚本,供有需求的同学参考与修改

+
FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+    apt-get update && apt-get install -y \
+    gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+    git wget python3 vim file curl \
+    autoconf automake autotools-dev  libmpc-dev libmpfr-dev libgmp-dev \
+    gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+    zlib1g-dev libexpat-dev \
+    ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ 
+    && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+    wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+    tar xf qemu-${QEMU_VERSION}.tar.xz && \
+    cd qemu-${QEMU_VERSION} && \
+    ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+    make -j && \
+    make install && \
+    cd .. && \
+    rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+    wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    ln -s  /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+    rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+    wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+    wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+    rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+# 安装 rust
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+    echo '[source.crates-io]' >> .cargo/config && \
+    echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+    echo 'replace-with = "ustc"' >> .cargo/config && \
+    echo '[source.ustc]' >> .cargo/config && \
+    echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+    chmod +x rustup-init && \
+    ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+    rm rustup-init && \
+    source $HOME/.cargo/env && \
+    cargo install cargo-binutils && \
+    rustup component add llvm-tools-preview && \
+    rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" "b/zh/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" new file mode 100644 index 00000000..691f84ca Binary files /dev/null and "b/zh/one_click_deployment/img/Source-changer_\344\270\273\351\241\265\351\235\242.png" differ diff --git "a/zh/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" "b/zh/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" new file mode 100644 index 00000000..1f48ceb2 Binary files /dev/null and "b/zh/one_click_deployment/img/Source-changer_\350\275\257\344\273\266\351\200\211\346\213\251.png" differ diff --git "a/zh/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" "b/zh/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" new file mode 100644 index 00000000..284eb513 Binary files /dev/null and "b/zh/one_click_deployment/img/Source-changer_\351\225\234\345\203\217\351\200\211\346\213\251.png" differ diff --git "a/zh/one_click_deployment/img/python\347\211\210\346\234\254.png" "b/zh/one_click_deployment/img/python\347\211\210\346\234\254.png" new file mode 100644 index 00000000..7807cd4b Binary files /dev/null and "b/zh/one_click_deployment/img/python\347\211\210\346\234\254.png" differ diff --git a/zh/one_click_deployment/os/index.html b/zh/one_click_deployment/os/index.html new file mode 100644 index 00000000..f41f427c --- /dev/null +++ b/zh/one_click_deployment/os/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + os开发环境和工具介绍 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

os开发环境和工具介绍

+
# (ubuntu) 安装QEMU7.0依赖包
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+        gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+        zlib1g-dev libexpat-dev pkg-config  libglib2.0-dev libpixman-1-dev libsdl2-dev \
+        git tmux python3 python3-pip ninja-build
+# 在开发目录执行安装
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# 配置环境变量
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build 
+# 配置后更新系统路径
+source ~/.bashrc 
+# 检测qemu版本(以riscv64 为例上诉配置已将x86_64 aarch64 riscv64安装好均可以检测版本)
+qemu-system-riscv64 --version
+# 配置rust环境
+curl https://sh.rustup.rs -sSf | sh
+# 配置环境变量
+source $HOME/.cargo/env
+# 检测版本
+rustc --version
+# rust相关软件包安装
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
+

常见问题及解决办法

+
# centos 依赖安装
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+                texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc版本过低导致的qemu编译失败(也可以直接官网更高版本安装)
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# 查看gcc版本
+gcc -v
+
+

配置rust下载镜像

+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/zh/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..c827cd22 --- /dev/null +++ "b/zh/package_manager/APT\357\274\210DEB\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1692 @@ + + + + + + + + + + + + + + + + + + + + + + + + APT(DEB)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

APT(DEB)包管理工具

+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean  #清理无用的包
+
+aptitude
+apt-add-repository [options] repository   #修改软件源命令 (software-properties-common)
+
+
apt search package #搜索包 
+apt show package #获取包的相关信息,如说明、大小、版本等  
+apt depends package #了解使用依赖  
+apt rdepends package #查看该包被哪些包依赖  
+apt-cache pkgnames  #执行pkgnames子命令列出当前所有可用的软件包 
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包  
+sudo apt install package=version #安装指定版本的包  
+sudo apt install package --reinstall #重新安装包  
+sudo apt -f install #修复安装, "-f = --fix-missing"  
+sudo apt remove package #删除包
+sudo apt purge package  #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码   
+sudo apt update #更新apt软件源信息  
+sudo apt upgrade #更新已安装的包  
+sudo apt dist-upgrade #升级系统  
+sudo apt dselect-upgrade #使用dselect升级  
+sudo apt build-dep package #安装相关的编译环境  
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean  #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean  #删除已经卸载的软件包备份  
+sudo apt-get check #检查是否有损坏的依赖
+
+
sudo dpkg -i <package.deb>    #安装包
+sudo dpkg -r <package.deb>   #删除包
+sudo dpkg -p <package.deb>   #彻底删除包(包括配置文件)
+dpkg -l                       #列出当前已安装的包
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" "b/zh/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" new file mode 100644 index 00000000..279128fd --- /dev/null +++ "b/zh/package_manager/AppImage\357\274\210Linux\357\274\211/index.html" @@ -0,0 +1,1655 @@ + + + + + + + + + + + + + + + + + + + + + + + + AppImage(Linux) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

AppImage(Linux)

+
    +
  1. AppImage Pool :一个帮助你寻找和管理 AppImage 的应用商店 | Linux 中国
  2. +
  3. appimage-installer :这个工具能在十几秒内快速的将一个 AppImage 文件部署到开始菜单,并且设置好图标和名称。
  4. +
  5. AppImageLauncher :可以自动将 AppImage 程序快捷方式添加到桌面环境的程序启动器/菜单(包括程序图标和合适的说明)中。
  6. +
  7. Appimage-installer 工具, AUR 包的问题, https://gitee.com/deepin-opensource/appimage-installer/issues/I421HL
  8. +
  9. AppImage 安装器,深度科技社区 Maicss 分享:深度科技社区 Maicss 分享: ttps://bbs.deepin.org/zh/post/220754
  10. +
  11. AppImage 官网: AppImage 官网: https://appimage.org/
  12. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" "b/zh/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..52b9ac45 --- /dev/null +++ "b/zh/package_manager/Chocolatey\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1908 @@ + + + + + + + + + + + + + + + + + + + + + + + + Chocolatey(WIN) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Chocolatey(WIN)

+
+

本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的

+

为什么要用 Chocolatey

+

如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。

+
+

Chocolatey 的安装

+
    +
  • +

    方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +

     @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    +

    +
  • +
  • +

    方法二:以管理员身份打开 powershell.exe ,执行以下代码

    +
  • +
+
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
+
    +
  • 方法三:直接打开 https://chocolatey.org/install.ps1 ,复制内容到本地新建 install.psl 文件,执行安装。
  • +
+

在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。

+

Chocolatey 的使用

+

Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)

+

安装软件

+
choco install -y git 
+choco install -y python 
+choco install -y chromium
+cinst -y nodejs.install
+...
+
+

choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。

+

查找软件

+
    +
  1. choco search cntlm 搜索软件是否存在,包名是什么。
  2. +
  3. choco info cntlm 查看软件详细信息。
  4. +
+

升级软件

+

choco upgrade git

+

卸载软件

+

choco uninstall git

+

配置统一环境

+
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+    <packages>
+      <package id="jdk8" />
+      <package id="googlechrome" version="71.0.3578.98" />
+      <package id="vscode" />
+      <package id="7zip" />
+    </packages>
+
+

文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。

+

更改本地仓库

+
    +
  • 方法一: cmd.exe 管理员模式下执行以下指令 + setx ChocolateyInstall D:\Chocolatey /M
  • +
  • 方法二: powershell.exe 管理员模式下执行以下指令 + & setx.exe ChocolateyInstall D:\Chocolatey /M + 设定成功提示: + 成功: 已经存储指定的值
  • +
+

卸载Chocolatey

+

卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。

+
    +
  1. 删除环境变量 ChocolateyInstall 对应的安装文件夹,默认是 C:\ProgramData\chocolatey
  2. +
  3. 删除环境变量 ChocolateyInstall
  4. +
  5. 删除环境变量 ChocolateyToolsLocation ,部分工具软件安装的位置,删除需谨慎
  6. +
  7. 删除环境变量 ChocolateyLastPathUpdate
  8. +
  9. 更新环境变量 PATH ,去掉 Chocolatey 相关的配置
  10. +
+

总结

+

Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/zh/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..35620d15 --- /dev/null +++ "b/zh/package_manager/DNF\357\274\210RPM\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1654 @@ + + + + + + + + + + + + + + + + + + + + + + + + DNF(RPM)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

DNF(RPM)包管理工具

+

由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。

+

DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。

+
    +
  • DNF 与 YUM 完全兼容,提供了 YUM 兼容的命令行以及为扩展和插件提供的API。
  • +
  • 使用 DNF 需要管理员权限,本章所有命令需要在管理员权限下执行。
  • +
+

使用 Dnf 管理软件包 (openeuler.org)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" "b/zh/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" new file mode 100644 index 00000000..ec3ab9e5 --- /dev/null +++ "b/zh/package_manager/Homebrew\357\274\210Linux&Mac\357\274\211/index.html" @@ -0,0 +1,1651 @@ + + + + + + + + + + + + + + + + + + + + + + + + Homebrew(Linux&Mac) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Homebrew(Linux&Mac)

+

Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)

+

详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/

+

搜索可用的软件包: https://sitemap.filecroco.com/a/1.html

+

在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/zh/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..dcae3d7f --- /dev/null +++ "b/zh/package_manager/Nix\357\274\210\345\243\260\346\230\216\345\274\217\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Nix(声明式)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Nix(声明式)包管理工具

+

Nix:可重现的构建和部署 (nixos.org)

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/Scoop\357\274\210Win\357\274\211/index.html" "b/zh/package_manager/Scoop\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..587eddc7 --- /dev/null +++ "b/zh/package_manager/Scoop\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1855 @@ + + + + + + + + + + + + + + + + + + + + + + + + Scoop(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Scoop(Win)

+
+

scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2

+

main : https://github.com/ScoopInstaller/Scoop

+
+

一、安装 scoop

+
    +
  • 将 scoop 安装到自定义目录
  • +
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
+

二、配置scoop

+
    +
  • scoop 源配置: scoop config SCOOP_REPO <URL>
  • +
+

软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。

+
cd $env:SCOOP\buckets\Main      
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
+
    +
  • 修改 buckets git 仓库链接:
  • +
+
 cd $env:SCOOP\buckets\Main      这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
+
    +
  • aria2 相关配置 +
    aria2-enabled (默认值: true)
    +aria2-retry-wait (默认值: 2)
    +aria2-split (默认值: 5)
    +aria2-max-connection-per-server (默认值: 5)
    +aria2-min-split-size (默认值: 5M)
    +
  • +
+

三、常用 bucket

+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
+
    +
  1. 查看支持的命令:scoop help
  2. +
  3. 查找软件:scoop search xxx 软件包
  4. +
  5. 安装软件:scoop install xxx 软件包
  6. +
  7. 卸载软件:scoop uninstall xxx 软件
  8. +
  9. 查看软件官方页:scoop home xxx 软件
  10. +
  11. 查看安装的软件列表:scoop list
  12. +
  13. 更新软件:scoop update
  14. +
  15. 查看软件列表:scoop export >> xxx.txt
  16. +
  17. 查看 官方支持的 bucket:scoop bucket known
  18. +
  19. 查看 bucket 命令帮助:scoop bucket help
  20. +
  21. 添加 bucket :scoop bucket add xxxbucket
  22. +
  23. 删除 bukcet :scoop bucket rm xxx 仓库
  24. +
+

常用命令说明

+
alias       Manage scoop aliases # 管理指令的替身
+bucket      Manage Scoop buckets # 管理软件仓库
+cache       Show or clear the download cache # 查看与管理缓存
+checkup     Check for potential problems # 做个体检
+cleanup     Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config      Get or set configuration values # 配置 Scoop
+create      Create a custom app manifest # 创建自定义软件包
+depends     List dependencies for an app # 查看依赖
+export      Exports (an importable) list of installed apps # 导出软件包列表
+help        Show help for a command # 显示帮助指令
+hold        Hold an app to disable updates # 禁止软件包更新
+home        Opens the app homepage # 打开软件包主页
+info        Display information about an app # 显示软件包信息
+install     Install apps # 安装软件包的指令
+list        List installed apps # 列出所有已安装软件包
+prefix      Returns the path to the specified app # 查看软件包路径
+reset       Reset an app to resolve conflicts # 恢复软件包版本
+search      Search available apps # 搜索软件包
+status      Show status and check for new app versions # 查看软件包更新状态
+unhold      Unhold an app to enable updates # 启动软件包更新
+uninstall   Uninstall an app # 卸载软件包的指令
+update      Update apps, or Scoop itself # 更新软件包
+virustotal  Look for app hash on virustotal.com # 查看哈希值
+which       Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
+

卸载Scoop

+

scoop uninstall scoop:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!

+

The scoop 配置文件保存在 ~/.config/scoop/config.json +buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json

+
{
+    "main": "https://github.com/ScoopInstaller/Main",
+    "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
+

Scoop 技巧和知识

+

链接: https://blog.csdn.net/weixin_39986178/article/details/110900876

+

相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/WinGet\357\274\210Win\357\274\211/index.html" "b/zh/package_manager/WinGet\357\274\210Win\357\274\211/index.html" new file mode 100644 index 00000000..be66e1dd --- /dev/null +++ "b/zh/package_manager/WinGet\357\274\210Win\357\274\211/index.html" @@ -0,0 +1,1757 @@ + + + + + + + + + + + + + + + + + + + + + + + + WinGet(Win) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

WinGet(Win)

+

WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。

+

前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。

+

下载、安装和验证

+

你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。

+

如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I 进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。

+

输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息

+

基本使用

+

显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install

+

是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。

+

但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!

+

如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:

+

"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},

+

如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow

+

winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。

+

下载 Microsoft Store 软件

+

实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。

+

winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。

+

卸载其他源安装的软件

+

winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。

+

winget 可以卸载多种类型的软件程序

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" "b/zh/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" new file mode 100644 index 00000000..7e6c77e7 --- /dev/null +++ "b/zh/package_manager/YaST & Zypper\357\274\210RPM\357\274\211/index.html" @@ -0,0 +1,1696 @@ + + + + + + + + + + + + + + + + + + + + + + + + YaST & Zypper(RPM) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

YaST & Zypper(RPM)

+

openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。

+

软件包的分层管理

+

OpenSUSE 是一个一直被低估的多功能 Linux 操作系统

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" "b/zh/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" new file mode 100644 index 00000000..d8d51427 --- /dev/null +++ "b/zh/package_manager/pacman\357\274\210Arch\357\274\211\345\214\205\347\256\241\347\220\206\345\267\245\345\205\267/index.html" @@ -0,0 +1,1843 @@ + + + + + + + + + + + + + + + + + + + + + + + + pacman(Arch)包管理工具 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

pacman(Arch)包管理工具

+

Manjaro 换源

+
sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
+

1. 更新系统

+
命令  解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd   使用 -dd跳过所有检测
+
+

2. 搜索包

+
命令  解释
+pacman -Ss keyword  在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword  搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword  按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name    使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name   查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name    要显示软件包的依赖树
+whoneeds package_name   检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
+

3. 安装包

+
命令  解释
+pacman -S package_name  执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name    安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url   安装一个远程包(不在 pacman 配置的源里面)
+
+

4. 删除包

+
命令  解释
+pacman -R package_name  该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name    在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
+

5. 其他用法

+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc  清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
+

Manjaro软件管理

+

1. 切换国内最快的软件源

+

大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作

+

1. 第一部分使用 pacman-mirrors 更新官方软件源

+

1.1 按照地区自动更新为最快最稳定的软件源镜像地址

+

sudo pacman-mirrors --country China

+

1.2. 恢复默认软件源操作

+

sudo pacman-mirrors --interactive --default

+

1.3 软件源更新之后,我们一般会进行系统更新

+

sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作

+

1.4 查看所有可用的地区信息

+

sudo pacman-mirrors -l

+

参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server

+

2. 使用 pacman 管理软件

+

2. 第二部分使用 pacman 管理软件

+

2.1 同步并且更新你的系统

+

sudo pacman -Syyu

+

2.2 在软件仓库中搜索软件

+

sudo pacman -Ss [software package name]

+

2.3 查看已安装软件

+

sudo pacman -Qs [software package name] +sudo pacman -Qi [software package name]# 附带详细信息 +sudo pacman -Qii [software package name]# 附带更加详细的包信息 +sudo pacman -Ql# 列出所有安装的软件包

+

2.4 查看软件的详细依赖

+

sudo pactree [software package name]

+

2.5 查看系统中那些没有被使用软件依赖包(orphans)

+

sudo pacman -Qdt

+

2.6 自动移除那些系统中没有被使用的依赖包【类似于Debian下的 sudo apt autoremove --purge】

+

sudo pacman -Rs $(pacman -Qdtq)

+

2.7 下载并安装软件包

+

sudo pacman -Syu [software package name]# 从软件仓库安装 +yay -S [software package name]# Packages from the AUR +sudo pacman -U [/package_path/][software package name.pkg.tar.xz]# 从本地安装

+

pacman -U http://www.examplepackage/repo/examplepkg.tar.xz# 从网络安装【非官方仓库】

+

2.8 卸载软件

+

sudo pacman -R [software package name] +sudo pacman -Rs [software package name]# 同时删除依赖 +sudo pacman -Rns [software package name]# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除

+

2.9 清空缓存【默认情况下安装软件会先来缓存中查看是否已经下载过,没有再去下载,软件安装后通常下载缓存还在】

+

sudo pacman -Sc +sudo pacman -Scc # 更彻底的清理

+

关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/GitBucket/index.html b/zh/platform/GitBucket/index.html new file mode 100644 index 00000000..ffa88d64 --- /dev/null +++ b/zh/platform/GitBucket/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + GitBucket - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GitBucket

+

简介

+

GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。

+
    +
  • +

    优点

    +
      +
    • +

      完全开源,没有任何限制;

      +
    • +
    • +

      运行在JVM平台上,非常容易部署;

      +
    • +
    • +

      类似于GitHub的界面,操作容易;

      +
    • +
    • +

      丰富的插件,使得扩展非常容易;

      +
    • +
    • +

      提供了大量兼容GitHub的API;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      有点残废的权限管理(权限没有依照公开,私有库区分);

      +
    • +
    • +

      开发语言为Scala,对于非Scala用户自己写插件有一定门槛;

      +
    • +
    • +

      由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。

      +
    • +
    +
  • +
+

部署

+
    +
  1. +

    下载 Release + 里面的war到你的服务器;

    +
  2. +
  3. +

    java -jar gitbucket.war 启动。(笔者用的是JDK17);

    +
  4. +
  5. +

    (可选)将启动端口反向代理到子域名。

    +
  6. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/chatGPT/index.html b/zh/platform/chatGPT/index.html new file mode 100644 index 00000000..8b79a165 --- /dev/null +++ b/zh/platform/chatGPT/index.html @@ -0,0 +1,1663 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChatGPT - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

ChatGPT

+

官网: https://chat.openai.com/

+

ChatGPT是一种基于自然语言处理技术的人工智能聊天机器人,使用GPT(Generative Pre-trained Transformer)技术生成人类语言响应。

+

功能:

+
    +
  • 用来当作搜索引擎,我们可以很容易地使用它来搜索一些信息,例如直接问ChatGPT“如何使用ChatGPT”。
  • +
  • 用来查找学习资料,例如直接问ChatGPT“如何学习自然语言处理”。
  • +
  • 用来查询文档,例如直接问ChatGPT“python库functools里面reduce函数的用法是什么”。
  • +
  • 用来调节心情,例如直接问ChatGPT“我应该怎么和女孩子约会”。
  • +
+

配置方法:

+
    +
  • 通过浏览器搜索ChatGPT,点击进入官网,点击"Sign in"按钮注册账号。
  • +
  • 注册成功后,绑定一个海外的手机号,在接收到的验证码中输入验证码,即可完成注册。
  • +
  • 需要注意的是香港地区暂时不能够使用ChatGPT,甚至如果梯子的节点在香港,连登陆官网都会受到限制。
  • +
  • 如果没有海外手机号码的话,可以通过一些手机验证码接收网站来获取,这样的网站和梯子一样有非常多家,只需要google一下就可以找到。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/excalidraw/index.html b/zh/platform/excalidraw/index.html new file mode 100644 index 00000000..1036c343 --- /dev/null +++ b/zh/platform/excalidraw/index.html @@ -0,0 +1,1700 @@ + + + + + + + + + + + + + + + + + + + + + + + + Excalidraw - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Excalidraw

+

简介

+

官网: Excalidraw's repository

+

Excalidraw 是一款开源的画图工具,可以“手绘”一些简单的流程图,显示效果像是用笔在纸上画的一样,操作简单。

+

example1

+

同时其拥有丰富的素材库,帮助每个人更好地绘图。

+

example2

+

除了在线网站,也可以通过浏览器扩展直接安装到本地使用,具体可以在官方文档查看。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/flydav/index.html b/zh/platform/flydav/index.html new file mode 100644 index 00000000..edc2980d --- /dev/null +++ b/zh/platform/flydav/index.html @@ -0,0 +1,1736 @@ + + + + + + + + + + + + + + + + + + + + + + + + FlyDav - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

FlyDav

+

简介

+

FlyDav 是一个轻量级的开源 webdav 服务器

+
    +
  • +

    优点

    +
      +
    • 完美兼容 WebDav 协议
    • +
    • 支持无配置运行,双击即可开启 WebDav 服务器
    • +
    • 完全开源,提供中英文文档
    • +
    • 极简,大小 10MB 以内,跨平台
    • +
    • 安全,不存储明文密码,隔离不同目录
    • +
    +
  • +
  • +

    缺点

    +
      +
    • 不支持 SSL
    • +
    • 不支持细粒度权限管理
    • +
    +
  • +
+

部署

+

最简部署:

+
    +
  1. 首先从 发布页 下载 FlyDav。
  2. +
  3. 运行 ./flydav -H 0.0.0.0 来启动服务器。然后你要输入默认用户 flydav 的密码。
  4. +
  5. 在你的 webdav 客户端(比如 RaiDrive)中打开 http://YOUR_IP:7086/webdav
  6. +
+

完整部署可参阅文档。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/gpt-paper/index.html b/zh/platform/gpt-paper/index.html new file mode 100644 index 00000000..7825d772 --- /dev/null +++ b/zh/platform/gpt-paper/index.html @@ -0,0 +1,1833 @@ + + + + + + + + + + + + + + + + + + + + + + + + Gpt paper - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

Gpt paper

+ +

本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明

+

内容

+

关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容

+

new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)

+

因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。

+

侧边栏甄别文献

+

使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)

+

阅读左边的论文,告诉我他讲了什么内容。

+

阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。

+

消化文献并输出(无惧查重)

+

我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。

+
    +
  • 英文文献,总结出中文,生成式的,基本不会重复。
  • +
  • 输出内容要强调一下,否则会不成功。
  • +
  • 如果感觉内容不对,换一篇文献,让他说,或者重新开会话
  • +
+

chatgpt组织语言

+
    +
  • 组织new bing生成的中文
  • +
  • 组织原本的英文,生成中文
  • +
  • 不可以组织论文的中文,效果很差。
  • +
+

论文最后:语言润色

+

如果不用以上ai写的文字,纯粹自己写。

+

写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt

+
    +
  • +

    请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:

    +
  • +
  • +

    请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:

    +
  • +
+

论文最后:改错别字

+

Note

+
    +
  • +

    不要陷入无意义的ai玩耍

    +
  • +
  • +

    不要登录cn的bing,不然之后都会记住。只能重新清除cookie。

    +
  • +
+

保存

+
    +
  • single file插件
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/minio/index.html b/zh/platform/minio/index.html new file mode 100644 index 00000000..ea4c09c2 --- /dev/null +++ b/zh/platform/minio/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + MinIO - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

MinIO

+

简介

+

MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。

+
    +
  • +

    优点

    +
      +
    • +

      提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;

      +
    • +
    • +

      兼容现有AWS S3的SDK,API等;

      +
    • +
    • +

      非常完善的文档,活跃的社区;

      +
    • +
    • +

      部署相对简单;

      +
    • +
    +
  • +
  • +

    缺点

    +
      +
    • +

      没有任何中文文档;

      +
    • +
    • +

      非付费版软件更新周期较短,需要自行更新;

      +
    • +
    +
  • +
+

部署

+

RTFM

+

官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。

+

笔者的提醒

+

一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/platform/overleaf/index.html b/zh/platform/overleaf/index.html new file mode 100644 index 00000000..e5a92718 --- /dev/null +++ b/zh/platform/overleaf/index.html @@ -0,0 +1,1658 @@ + + + + + + + + + + + + + + + + + + + + + + + + Overleaf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Overleaf

+

官网: https://www.overleaf.com

+

Overleaf 是一个在线 \(\LaTeX\) 渲染网站。 \(\LaTeX\) 环境的配置比较麻烦(尤其是在 Windows 环境下),对于新手也不够友好,而 overleaf 是一个很好的替代。只需要选择一个好看的模版,写 10 页以内的作业或者小论文将会十分方便,同时 Overleaf 也提供了基本的团队协作功能,可以通过链接或邀请的方式实现多人共同编辑。 Overleaf 免费版有最大编译时长和一些功能的限制,在完成一些比较复杂的项目时,可以考虑付费获得更多的功能。

+

\(\LaTeX\) 是一种「非所见即所得」的排版系统,用户需要输入特定的代码,保存在后缀为 .tex 的文件中,通过编译得到所需的 pdf 文件。 \(\LaTeX\) 优秀的大型文档排版能力和数学公式渲染能力是其能够广泛应用的原因之一。系统学习 \(\LaTeX\) 需要一定的时间,详细了解可以参阅托管在 CTAN 的中译版介绍 lshort-zh-cn

+

特点:

+
    +
  • 模版编辑好以后编写 10 页以内作业十分快速
  • +
  • 通过写 temp 文件可以实现项目的隔离, tex 相关的包管理方便
  • +
  • 友好的编辑交互界面,双击 pdf 预览中的内容可以直接跳转到代码
  • +
  • 自动保存文档在云端,全程都在网页上完成,不会污染本地环境
  • +
  • 许多问题 overleaf 官方给出了解答和范例,例如怎么嵌入伪代码块等
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/plugins/android/index.html b/zh/plugins/android/index.html new file mode 100644 index 00000000..e5d96955 --- /dev/null +++ b/zh/plugins/android/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + Android Studio - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Android Studio

+

本文为你推荐适用于 Android Studio 的插件,能够极大的改善你的开发体验。

+

主题类

+

Atom Material Icons

+

该插件对图标进行了优化以改善你的界面美观程度。

+

Atom Material Icons

+

Material Theme UI

+

适用于 JetBrains IDE 的 Material 主题,拥有适用于白天和黑夜的多个主题,让界面更加美观。

+

Material Theme UI

+

工具类

+

JSON转Bean

+

JSON作为轻量级资料交换格式。在开发中经常被使用,其中一个需求就是将 Json 转换为对应的 Bean 对象。下面主要推荐两个插件:

+ +

翻译

+

Translation 插件极大的方便了英语基础不好的开发者进行开发。其具有以下特性:

+

Translation

+
    +
  • +

    多翻译引擎

    +
      +
    • 谷歌翻译
    • +
    • 微软翻译
    • +
    • 有道翻译
    • +
    • 百度翻译
    • +
    • 阿里翻译
    • +
    • DeepL 翻译
    • +
    +
  • +
  • +

    多语言互译

    +
  • +
  • 文档翻译
  • +
  • 语音朗读
  • +
  • 自动选词
  • +
  • 自动单词拆分
  • +
  • 单词本
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/plugins/browser/index.html b/zh/plugins/browser/index.html new file mode 100644 index 00000000..ff10d8ca --- /dev/null +++ b/zh/plugins/browser/index.html @@ -0,0 +1,1782 @@ + + + + + + + + + + + + + + + + + + + + + + + + Browser - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Browser

+

本文希望抛砖引玉,鼓励大家提出更多方便的浏览器插件。

+

Tampermonkey

+

官网: https://www.tampermonkey.net/

+

很方便的脚本管理器,可以安装一些扩展商店里没有的小脚本。

+

Simpread

+

官网: https://simpread.pro/

+

增强浏览器阅读体验,提供淡化内容无关元素以增加专注的聚焦模式和完全纯净的阅读模式;可以导出网页为 markdown 等多种格式到本地,或授权后导入 notion 、onenote 等笔记应用,方便存档和稍后阅读。官方插件中心还有许多相关增强,但默认模式体验也相当舒适。

+

Zotero Connector

+

官网: https://www.zotero.org/download/connectors

+

从网页上直接保存论文至 Zotero ,支持选择保存分类。

+

Global Speed

+

官网: https://github.com/polywock/globalSpeed

+

调节网页视频播放速度,使用简单。

+

Language Reactor

+

官网: https://www.languagereactor.com/

+

为Youtube视频提供机翻双语字幕,并且支持导出。

+

Vimium

+

官网: https://github.com/philc/vimium

+

Vimium 受到 Vim 编辑器的启发,让你能够抛弃鼠标,完全使用键盘完成浏览器的导航、页面跳转、页面搜索等操作。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/plugins/img/tabnine.png b/zh/plugins/img/tabnine.png new file mode 100644 index 00000000..c387a5cc Binary files /dev/null and b/zh/plugins/img/tabnine.png differ diff --git a/zh/plugins/tabnine/index.html b/zh/plugins/tabnine/index.html new file mode 100644 index 00000000..e3a64992 --- /dev/null +++ b/zh/plugins/tabnine/index.html @@ -0,0 +1,1761 @@ + + + + + + + + + + + + + + + + + + + + + + + + Tabnine优秀的代码补全工具(不犯病的时候) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Tabnine优秀的代码补全工具(不犯病的时候)

+

本文为你推荐代码补全工具tabnine的介绍同时将和copilot的区别写出,copilot的安装在评论区后续补充。

+

安装

+

下载链接:https://www.tabnine.com/install/

+

在这个下载页面中可以选择自己所使用的代码编辑器,对于 VSCode 用户来讲,我们可以直接在插件搜索中搜索tabnine,然后安装即可。

+

介绍(本段文字由 ChatGPT 生成)

+

TabNine 是一个基于机器学习的代码自动补全工具,它可以在多种编辑器和 IDE 中使用,包括但不限于 VS Code、Sublime Text、PyCharm、Vim、Emacs 等等。与传统的代码自动补全工具不同,TabNine 不仅可以根据已有的代码段和语法规则进行补全,而且还可以通过学习大量的代码库和语言语法,自动生成全新的代码,大大提高编码效率和准确性。

+

TabNine 的优点包括:

+
    +
  • 准确性高:TabNine 通过机器学习算法训练得到,可以根据代码上下文生成最合适的代码补全选项。
  • +
  • 跨语言支持:TabNine 支持多种编程语言,包括 Python、JavaScript、Java、C++、Go、Ruby 等等。
  • +
  • 快速响应:TabNine 的补全响应速度非常快,可以轻松应对大型项目和复杂的代码结构。
  • +
  • 智能预测:TabNine 可以根据上下文和历史记录智能预测下一个可能的代码补全选项,让编码更加顺畅和高效。
  • +
  • 易于定制:TabNine 支持用户自定义配置和扩展,可以根据个人需求定制化工具。
  • +
  • TabNine 通过提供高质量的代码补全选项,减少了编写代码的时间和错误率,是一个极具价值和实用性的编程工具。
  • +
+

和copilot的区别

+

TabNine 和 Copilot 都是基于机器学习的代码自动补全工具,它们都可以根据上下文和语法规则来生成代码补全选项,提高编码效率和准确性。但是它们之间也有一些不同之处。

+
    +
  • 产品背景:TabNine 是由 Codota 公司开发的,而 Copilot 则是由 OpenAI 公司开发的。
  • +
  • 训练数据:TabNine 训练数据来自于 GitHub 上的公共代码库和用户的私有代码库,而 Copilot 使用的是 GitHub 上公共的代码库和 OpenAI 自己的内部代码库。
  • +
  • 功能特点:TabNine 重点关注代码补全和智能预测功能,而 Copilot 的特点在于能够自动生成代码片段和函数,甚至可以根据自然语言描述来生成代码。
  • +
  • 开源程度:TabNine 的代码基本开源,用户可以自行扩展和定制,而 Copilot 由于使用的是 OpenAI 的 GPT 系列模型,目前不支持自主定制和开源。
  • +
+

总的来说,TabNine 和 Copilot 都是非常有用的代码自动补全工具,具有各自的优点和适用场景,用户可以根据自己的需求选择合适的工具。

+

效果如图

+

效果图 它是个动图捏大家可以体验下嘿嘿

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/Double Commander/index.html b/zh/software/Double Commander/index.html new file mode 100644 index 00000000..1c01706a --- /dev/null +++ b/zh/software/Double Commander/index.html @@ -0,0 +1,1648 @@ + + + + + + + + + + + + + + + + + + + + + + + + Double Commander - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Double Commander

+

免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/Pycharm/index.html b/zh/software/Pycharm/index.html new file mode 100644 index 00000000..f2c6f2f7 --- /dev/null +++ b/zh/software/Pycharm/index.html @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + PyCharm - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

PyCharm

+

1.首先我们要进行Pyhton解释器的下载

+
print('Hello World')
+
+

Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器

+

下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的

+

查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)

+

2.Python解析器的安装

+

第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)

+

第二步:选择所有要安装的功能菜单,默认全部勾选

+

第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置

+

第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了

+

image-python解释器.png

+

使用exit()退出

+

3. Python开发工具PyCharm(我下载的是2021.2.1)新版容易出现未知问题

+

在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE

+

PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者

+

第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/

+

第二步:设置软件的安装路径,不用安装在 C 盘

+

第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面

+

image-pycharm图片.png

+

4.创建Python项目

+

第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)

+

点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project

+

image-Pycharm打开界面.png

+

第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)

+

你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)

+

image-pycharm配置界面.png

+

其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )

+

新建文件并书写代码

+
print('Hello World')
+
+

进行运行,右上角绿色的三角符号 Run 。

+

结果如下,就完成啦。

+

image-Pycharm的配置结果.png

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/TiddlyWiki/index.html b/zh/software/TiddlyWiki/index.html new file mode 100644 index 00000000..ec456193 --- /dev/null +++ b/zh/software/TiddlyWiki/index.html @@ -0,0 +1,1893 @@ + + + + + + + + + + + + + + + + + + + + + + + + TiddlyWiki-知识管理框架 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

TiddlyWiki-知识管理框架

+

官网:https://tiddlywiki.com/

+

国际交流社区:https://talk.tiddlywiki.org/

+
+

很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。

+
+

1. 中文社区

+
    +
  • 太微中文教程:https://tw-cn.netlify.app/
  • +
  • 太微中文Github社区:https://github.com/tiddly-gittly/TiddlyWiki-Chinese-Tutorial
  • +
  • 社区中文教程资源链接(丰富且友好的初学者资源):https://tw-cn.netlify.app/#%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5
  • +
+

2. 介绍太微

+
    +
  1. +

    「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。

    +
  2. +
  3. +

    为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……

    +
  4. +
  5. +

    太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。

    +
  6. +
+

3. 太微能做什么

+
    +
  • +

    您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?

    +
  • +
  • +

    欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。

    +
  • +
  • +

    用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。

    +
  • +
+

4. 使用TiddlyWiki构建本地个人知识库

+
+

非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。

+
+

4.1 TidGi(太记)

+
    +
  • +

    下载链接:https://github.com/tiddly-gittly/TidGi-Desktop

    +
  • +
  • +

    TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。

    +
  • +
+

4.2 TiddlyDesktop

+
    +
  • +

    TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。

    +
  • +
  • +

    下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases

    +
  • +
+

4.3 Timimi

+
    +
  • +

    Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。

    +
  • +
  • +

    可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。

    +
  • +
  • +

    下载链接:https://ibnishak.github.io/Timimi/

    +
  • +
+

4.4 NodeJS环境

+
    +
  • +

    最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。

    +
  • +
  • +

    运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。

    +
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/antlr/index.html b/zh/software/antlr/index.html new file mode 100644 index 00000000..d9e68c66 --- /dev/null +++ b/zh/software/antlr/index.html @@ -0,0 +1,1785 @@ + + + + + + + + + + + + + + + + + + + + + + + + Antlr - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Antlr

+

官网:https://www.antlr.org/

+

ANTLR(ANother-Tool-for-Language-Recognition)是一个功能强大的语法分析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。ANTLR根据语法生成一个解析器,该解析器可以构建和遍历解析树

+

安装

+ +

Example

+

example.g4 +

// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+// '*' 代表该产生式出现0次或以上
+// '+' 代表至少出现一次
+// 下例将会被解析成vector<number>
+addExp
+    : number ('+' number)*
+    ;
+
+// 可以通过在产生式后 # nickname
+// 创建一个别名用来分析同名的不同情况下的产生式
+number
+    : IntLiteral # number1
+    | FloatLiteral # number2
+    ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+    : [0-9]+
+    | ('0x'|'0X')[0-9a-fA-F]+
+    ;
+
+// '?' 代表该产生式可能存在,若存在仅出现一次
+FloatLiteral
+    : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+    | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+    ;
+

+

shell command +

antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+

+

exampleVisitor.h +

#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+    virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+    virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+

+

参考

+ + + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/code-debug/index.html b/zh/software/code-debug/index.html new file mode 100644 index 00000000..492d478b --- /dev/null +++ b/zh/software/code-debug/index.html @@ -0,0 +1,1649 @@ + + + + + + + + + + + + + + + + + + + + + + + + code-debug - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

code-debug

+

官网: https://github.com/chenzhiy2001/code-debug/

+

code-debug 是一个支持Rust语言的源代码级内核调试工具. 现在可以调试rCore-Tutorial-v3操作系统,支持从内核态跟踪到用户态. 最近的工作是,利用eBPF技术实现更丰富,更鲁棒的跟踪功能.

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/eunomia-bpf/index.html b/zh/software/eunomia-bpf/index.html new file mode 100644 index 00000000..2832d0a8 --- /dev/null +++ b/zh/software/eunomia-bpf/index.html @@ -0,0 +1,1753 @@ + + + + + + + + + + + + + + + + + + + + + + + + eunomia-bpf: 简化和增强 eBPF 与 CO-RE[^1] 和 WebAssembly[^2] - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+ + + +
+
+ + + + + + + + + + + + + +

eunomia-bpf: 简化和增强 eBPF 与 CO-RE1 和 WebAssembly2

+

Actions Status +GitHub release (latest by date) +codecov +DeepSource +CodeFactor

+

一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。

+

介绍

+

eunomia-bpf 是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。

+

使用 eunomia-bpf,您可以:

+
    +
  • 简化编写 eBPF 程序:
  • +
  • 简化构建 CO-RE1 libbpf eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf eventring buffer 自动输出采样数据到内核态。
  • +
  • 自动采样 来自 hash mpas 的数据,并在用户空间中打印 hists(直方图等信息)。
  • +
  • 自动生成 并配置 eBPF 程序的 命令行参数
  • +
  • 您可以同时使用 BCClibbpf 等多种格式编写内核部分。
  • +
  • 使用 Wasm2 构建 eBPF 程序:参见 Wasm-bpf 项目
  • +
  • 在使用 C/C++、Rust、Go…等多种语言,使用 Wasm-bpf 库和工具链来使用 Wasm 编写和运行 eBPF,覆盖从tracing、networking、security到其他用例。
  • +
  • 简化分发 eBPF 程序:
  • +
  • 一个工具用于将预编译的 eBPF 程序作为 Wasm OCI 镜像推送、拉取或运行
  • +
  • 在不需要重新编译 eBPF 程序、不限制架构和内核版本的情况下,在1 行 bash中从 云端存储库URL 运行 eBPF 程序。
  • +
  • 动态加载带有 JSON 配置文件或 Wasm 用户态控制和数据处理模块的 eBPF 程序。
  • +
+

更多信息请参见 documents/introduction.md

+

eunomia-bpf 提供了大量教程和示例应用,帮助入门 eBPF 程序开发

+ +

您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:

+
# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
+
+
+
    +
  1. +

    CO-RE:Compile Once – Run Everywhere 

    +
  2. +
  3. +

    WebAssembly 或 Wasm:https://webassembly.org/ 

    +
  4. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/fzf/index.html b/zh/software/fzf/index.html new file mode 100644 index 00000000..d2186e29 --- /dev/null +++ b/zh/software/fzf/index.html @@ -0,0 +1,1899 @@ + + + + + + + + + + + + + + + + + + + + + + + + Fzf - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Fzf

+ +

fzf.png

+

简介

+

仓库地址:https://github.com/junegunn/fzf

+

FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。

+

image-20230209215751132

+

安装

+

macOS

+

对于 macOS ,推荐使用 Homebrew 进行安装:

+
brew install fzf
+
+

Linux

+

在 Linux 发行版上,可使用不同的包管理器进行安装,例如:

+

Debian/Ubuntu(Apt)

+
sudo apt install fzf
+
+

ArchLinux(Pacman)

+
sudo pacman -S fzf
+
+

Windows

+

并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。

+

Windows下可使用 Scoop 进行安装使用。

+
scoop install fzf
+
+

简单使用

+

文件搜索

+

直接执行 FZF ,打开文件搜索功能。

+
fzf
+
+

在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录相对路径

+

使用快捷键 Ctrl+JCtrl+N 可向下滚动列表; Ctrl+KCtrl+P 可向下滚动列表。 +使用 Enter 选中条目并退出 FZF,Ctrl+CCtrl+GEsc 可退出 FZF 而不进行选择。

+

作为 Vim 插件

+

FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。

+

在本例中,使用 vim-plug 插件管理器进行安装: +编辑 ~/.vimrc 文件,在 call plug#begin() 下添加如下行:

+
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
+

重新加载 .vimrc 文件:

+
source ~/.vimrc
+
+

打开 vim ,并执行 :PlugInstall 用于安装插件。

+

更多信息

+

优点

+
    +
  1. 本工具使用 Go 编写,不需其他依赖
  2. +
  3. 性能强悍,搜索效率高
  4. +
  5. 功能丰富,可视化界面(TUI)易于操作
  6. +
  7. 可对接诸多工具(例Vim、tmux 等)
  8. +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/gdbdashboard/index.html b/zh/software/gdbdashboard/index.html new file mode 100644 index 00000000..77da862a --- /dev/null +++ b/zh/software/gdbdashboard/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + GDB-dashboard - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GDB-dashboard

+

简介

+

使用 python 配置了 gdb 调试界面,完全可以自己写代码去定义整个调试界面可以说是堪比 IDE ,显示也非常好看,完全基于终端,作为底层的调试软件可以帮助开发者更好的查看变量、寄存器、单步执行等。

+

安装(linux环境)

+ +
wget -P ~ https://git.io/.gdbinit #如果网速较慢可以直接新建同名文件.gdbinit之后复制粘贴过来
+
+
    +
  • 效果图 + gdb效果图
  • +
+

推荐理由

+

目前 IDE 集成了很多的调试工具,但是在一些内核编程或者其他的底层开发领域 gdb 仍然具备不可替代的作用,为此我们希望在原本枯燥的调试终端找到更加便于观察的页面好在已经有人帮我们实现了这一工具为此我们希望把这样的便捷带给每一个人。

+

运行调试基本指令

+

参考 gdb调试常见指令

+

注意

+

在使用该插件时需要查看当前所使用的 gdb 是否支持 python 脚本,当出现 Scripting in the "Python" language is not supported in this copy of GDB. 时则表明该 gdb 不支持 python 脚本,无法使用该插件。另外,也需要注意 gdb 与 python 的版本是否匹配的问题,见 issue

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/zh/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" "b/zh/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" new file mode 100644 index 00000000..8fe15fb5 Binary files /dev/null and "b/zh/software/img/Pycharm\346\211\223\345\274\200\347\225\214\351\235\242.png" differ diff --git "a/zh/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" "b/zh/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" new file mode 100644 index 00000000..34459172 Binary files /dev/null and "b/zh/software/img/Pycharm\347\232\204\351\205\215\347\275\256\347\273\223\346\236\234.png" differ diff --git "a/zh/software/img/pycharm\345\233\276\347\211\207.png" "b/zh/software/img/pycharm\345\233\276\347\211\207.png" new file mode 100644 index 00000000..93161268 Binary files /dev/null and "b/zh/software/img/pycharm\345\233\276\347\211\207.png" differ diff --git "a/zh/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" "b/zh/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" new file mode 100644 index 00000000..51b82e7f Binary files /dev/null and "b/zh/software/img/pycharm\351\205\215\347\275\256\347\225\214\351\235\242.png" differ diff --git "a/zh/software/img/python\350\247\243\351\207\212\345\231\250.png" "b/zh/software/img/python\350\247\243\351\207\212\345\231\250.png" new file mode 100644 index 00000000..36da2c5e Binary files /dev/null and "b/zh/software/img/python\350\247\243\351\207\212\345\231\250.png" differ diff --git a/zh/software/mathpix/index.html b/zh/software/mathpix/index.html new file mode 100644 index 00000000..48fbc545 --- /dev/null +++ b/zh/software/mathpix/index.html @@ -0,0 +1,1660 @@ + + + + + + + + + + + + + + + + + + + + + + + + Mathpix - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Mathpix

+

官网:https://mathpix.com

+

Mathpix是一款 tex 格式公式生成软件,它主要的功能是通过 ocr 技术识别截图当中的公式,并生成对应的 tex 代码,在论文写作的过程中能够极大的加速公式编写的速度。

+

特性:

+
    +
  • 支持手写公式的识别并自动生成 tex 代码。
  • +
  • 支持数位板的操作,可以通过外接数位板的方式写入公式,识别并生成 tex 。
  • +
  • 支持表格的识别,虽然不如公式那么精准,但是大部分情况下效果还行。
  • +
  • 交互式编辑界面, orc 结果有偏差的时候可以直接修改。
  • +
+

缺点:

+
    +
  • 有使用次数的限制,但是可以通过更换邮箱的方式解决,根据本人的经验根本用不到那么多,普通款已经很足够,付费升级 pro 版本并不划算。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/nano/index.html b/zh/software/nano/index.html new file mode 100644 index 00000000..7f6f1f15 --- /dev/null +++ b/zh/software/nano/index.html @@ -0,0 +1,1754 @@ + + + + + + + + + + + + + + + + + + + + + + + + GNU nano - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GNU nano

+

官网: https://www.nano-editor.org/

+

gnu nano 是一个简单易上手的命令行编辑器,部分 linux 发行版的默认编辑器就是 nano ,同时你也可以在 windows 中安装它。

+

安装

+

在 linux 发行版中我们可以使用发行版对应的的包管理工具进行安装。

+

以使用 apt 作为包管理工具的 debain 为例:

+
sudo apt install nano
+
+

基础使用

+

在命令行中输入 nano 就会出现详细的操作指导。

+

image.png

+

优点

+
    +
  • 轻量,占用系统资源少。
  • +
  • 简单易上手。
  • +
+

缺点

+
    +
  • 功能较少,相比emacs,vim拓展性较差。
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/ranger/index.html b/zh/software/ranger/index.html new file mode 100644 index 00000000..9e26b02e --- /dev/null +++ b/zh/software/ranger/index.html @@ -0,0 +1,1776 @@ + + + + + + + + + + + + + + + + + + + + + + + + Ranger - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Ranger

+

简介

+

Ranger 是有着 Vim 风格的快捷键的终端文件管理器。你可以使用键盘快速查看、预览文件,在不同的文件夹之间导航,还可以直接在ranger下对文件(文件夹)进行复制、粘贴、删除、重命名等常用操作。

+

安装

+
    +
  • 开源地址 https://github.com/ranger/ranger
  • +
  • +

    获取

    +
      +
    • Ubuntu && Debian
    • +
    +
    sudo apt install ranger
    +
    +
      +
    • 通过 pip 安装
    • +
    +
    pip install ranger-fm
    +
    +
  • +
  • +

    效果图 +ranger 效果图

    +
  • +
+

推荐理由

+
    +
  1. 不再需要再使用 cd 命令切换目录
  2. +
  3. 简化了对文件(夹)的复制、粘贴、重命名等操作。
  4. +
  5. ranger 有对应的 Vim 插件,可以在 Vim 里打开 ranger,能提高文件的编辑效率。
  6. +
+

参考

+

参考

+ + + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/software/texmacs/index.html b/zh/software/texmacs/index.html new file mode 100644 index 00000000..8d0e5570 --- /dev/null +++ b/zh/software/texmacs/index.html @@ -0,0 +1,1642 @@ + + + + + + + + + + + + + + + + + + + + + + GNU TeXmacs - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

GNU TeXmacs

+

官网:https://www.texmacs.org/tmweb/home/welcome.en.html

+

LaTeX 折磨的话,不妨试试 GNU TeXmacs!TeXmacs 是一款所见即所得的科学文档(论文,笔记等)开源编辑器。 +如果写很多的数学公式的话可以试试,非常好用!

+

特性:

+
    +
  • 完全可视化的表格,公式编辑环境。
  • +
  • 非常人性化的按键设计。最好用的一个功能是,在编辑数学公式时,你按任意一个字符,然后就可以用多次 TAB 键相继选择相似的字符。比如,按 a 再按tab就可以得到 \(\alpha\) 等看着像 a 的字符。
  • +
  • 支持很多种计算机代数系统,和交互式软件,类似 Jupyter Notebook 。
  • +
  • 支持Scheme语言和宏进行功能扩展。
  • +
+

需要什么功能看一看内建文档就差不多会了,偶尔文档里有过时的地方,可以下一本 The Jolly Writer ,也是软件的主要作者写的。

+

唯一要注意的一点是,记得切换到中文模式(点菜单栏上面的国旗),否则不会自动换行。

+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/specification/markdown/chinese_copywriting_guidelines/index.html b/zh/specification/markdown/chinese_copywriting_guidelines/index.html new file mode 100644 index 00000000..23704674 --- /dev/null +++ b/zh/specification/markdown/chinese_copywriting_guidelines/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + + + + + + + 中英混排规范 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

中英混排规范

+

空格

+
+

「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。

+

与大家共勉之。」——vinta/paranoid-auto-spacing

+
+

中英文之间需要增加空格

+

正确:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。

+
+

错误:

+
+

在LeanCloud上,数据存储是围绕AVObject进行的。

+

在 LeanCloud上,数据存储是围绕AVObject 进行的。

+
+

完整的正确用法:

+
+

在 LeanCloud 上,数据存储是围绕 AVObject 进行的。每个 AVObject 都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个 AVObject 上提前指定存在哪些键,只要直接设定对应的 key-value 即可。

+
+

例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。

+

中文与数字之间需要增加空格

+

正确:

+
+

今天出去买菜花了 5000 元。

+
+

错误:

+
+

今天出去买菜花了 5000元。

+

今天出去买菜花了5000元。

+
+

数字与单位之间需要增加空格

+

正确:

+
+

我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB

+
+

错误:

+
+

我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB

+
+

例外:度数/百分比与数字之间不需要增加空格:

+

正确:

+
+

角度为 90° 的角,就是直角。

+

新 MacBook Pro 有 15% 的 CPU 性能提升。

+
+

错误:

+
+

角度为 90 ° 的角,就是直角。

+

新 MacBook Pro 有 15 % 的 CPU 性能提升。

+
+

全角标点与其他字符之间不加空格

+

正确:

+
+

刚刚买了一部 iPhone,好开心!

+
+

错误:

+
+

刚刚买了一部 iPhone ,好开心!

+

刚刚买了一部 iPhone, 好开心!

+
+

text-spacing 来挽救?

+

CSS Text Module Level 4 的 text-spacing 和 Microsoft 的 -ms-text-autospace 可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。

+

标点符号

+

不重复使用标点符号

+

即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。

+

正确:

+
+

德国队竟然战胜了巴西队!

+

她竟然对你说「喵」?!

+
+

错误:

+
+

德国队竟然战胜了巴西队!!

+

德国队竟然战胜了巴西队!!!!!!!!

+

她竟然对你说「喵」??!!

+

她竟然对你说「喵」?!?!??!!

+
+

全角和半角

+

不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。

+

使用全角中文标点

+

正确:

+
+

嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

错误:

+
+

嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!

+

嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!

+

核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!

+

核磁共振成像(NMRI)是什么原理都不知道?JFGI!

+
+

数字使用半角字符

+

正确:

+
+

这个蛋糕只卖 1000 元。

+
+

错误:

+
+

这个蛋糕只卖 1000 元。

+
+

例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。

+

遇到完整的英文整句、特殊名词,其内容使用半角标点

+

正确:

+
+

乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」

+

推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。

+
+

错误:

+
+

乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」

+

推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。

+
+

名词

+

专有名词使用正确的大小写

+

大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。

+

正确:

+
+

使用 GitHub 登录

+

我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。

+
+

错误:

+
+

使用 github 登录

+

使用 GITHUB 登录

+

使用 Github 登录

+

使用 gitHub 登录

+

使用 gイんĤЦ8 登录

+

我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。

+

我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。

+

我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。

+

我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。

+

我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。

+
+

注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;text-transform: lowercase; 对表现形式进行定义。

+

不要使用不地道的缩写

+

正确:

+
+

我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。

+
+

错误:

+
+

我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。

+
+

争议

+

以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。

+

链接之间增加空格

+

用法:

+
+

提交一个 issue 并分配给相关同事。

+

访问我们网站的最新动态,请 点击这里 进行订阅!

+
+

对比用法:

+
+

提交一个 issue并分配给相关同事。

+

访问我们网站的最新动态,请点击这里进行订阅!

+
+

简体中文使用直角引号

+

用法:

+
+

「老师,『有条不紊』的『紊』是什么意思?」

+
+

对比用法:

+
+

“老师,‘有条不紊’的‘紊’是什么意思?”

+
+
+

Note

+

本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/specification/markdown/latex/index.html b/zh/specification/markdown/latex/index.html new file mode 100644 index 00000000..02f07213 --- /dev/null +++ b/zh/specification/markdown/latex/index.html @@ -0,0 +1,2913 @@ + + + + + + + + + + + + + + + + + + + + + + + + LaTeX - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + +

LaTeX

+

如何插入公式

+

LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。

+

行中公式可以用如下方法表示:

+

$ 数学公式 $

+

独立公式可以用如下方法表示:

+

$$ 数学公式 $$

+

函数、符号及特殊字符

+

声调 / 变音符号

+

\dot{a}, \ddot{a}, \acute{a}, \grave{a}

+

\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)

+

\check{a}, \breve{a}, \tilde{a}, \bar{a}

+

\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)

+

\hat{a}, \widehat{a}, \vec{a}

+

\(\hat{a}, \widehat{a}, \vec{a}\)

+

标准函数

+

指数

+

\exp_a b = a^b, \exp b = e^b, 10^m

+

\(\exp_a b = a^b, \exp b = e^b, 10^m\)

+

对数

+

\ln c, \lg d = \log e, \log_{10} f

+

\(\ln c, \lg d = \log e, \log_{10} f\)

+

三角函数

+

\sin a, \cos b, \tan c, \cot d, \sec e, \csc f

+

\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)

+

\arcsin a, \arccos b, \arctan c

+

\(\arcsin a, \arccos b, \arctan c\)

+

\sinh a, \cosh b, \tanh c, \coth d

+

\(\sinh a, \cosh b, \tanh c, \coth d\)

+

\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n

+

\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)

+

\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q

+

\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)

+

最大值,最小值

+

\min(x,y), \max(x,y)

+

\(\min(x,y), \max(x,y)\)

+

界限,极限

+

\min x, \max y, \inf s, \sup t

+

\(\min x, \max y, \inf s, \sup t\)

+

\lim u, \liminf v, \limsup w

+

\(\lim u, \liminf v, \limsup w\)

+

\lim_{x \to \infty} \frac{1}{n(n+1)}

+

\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)

+

\dim p, \deg q, \det m, \ker\phi

+

\(\dim p, \deg q, \det m, \ker\phi\)

+

投射

+

\Pr j, \hom l, \lVert z \rVert, \arg z

+

\(\Pr j, \hom l, \lVert z \rVert, \arg z\)

+

微分及导数

+

dt, \mathrm{d}t, \partial t, \nabla\psi

+

\(dt, \mathrm{d}t, \partial t, \nabla\psi\)

+

dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y

+

\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)

+

\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y

+

\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)

+

类字母符号及常数

+

\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar

+

∞,ℵ,∁,∍,ð,Ⅎ,ℏ

+

\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS

+

\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)

+

模运算

+

s_k \equiv 0 \pmod{m}

+

\(s_k \equiv 0 \pmod{m}\)

+

a \bmod b

+

\(a \bmod b\)

+

\gcd(m, n), \operatorname{lcm}(m, n)

+

\(\gcd(m, n), \operatorname{lcm}(m, n)\)

+

\mid, \nmid, \shortmid, \nshortmid

+

\(\mid, \nmid, \shortmid, \nshortmid\)

+

根号

+

\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}

+

\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)

+

运算符

+

+, -, \pm, \mp, \dotplus

+

\(+, -, \pm, \mp, \dotplus\)

+

\times, \div, \divideontimes, /, \backslash

+

\(\times, \div, \divideontimes, /, \backslash\)

+

\cdot, * \ast, \star, \circ, \bullet

+

\(\cdot, * \ast, \star, \circ, \bullet\)

+

\boxplus, \boxminus, \boxtimes, \boxdot

+

\(\boxplus, \boxminus, \boxtimes, \boxdot\)

+

\oplus, \ominus, \otimes, \oslash, \odot

+

\(\oplus, \ominus, \otimes, \oslash, \odot\)

+

\circleddash, \circledcirc, \circledast

+

\(\circleddash, \circledcirc, \circledast\)

+

\bigoplus, \bigotimes, \bigodot

+

\(\bigoplus, \bigotimes, \bigodot\)

+

集合

+

\{ \}, \empty \emptyset, \varnothing

+

\(\{ \}, \empty \emptyset, \varnothing\)

+

\in, \notin \not\in, \ni, \not\ni

+

\(\in, \notin \not\in, \ni, \not\ni\)

+

\cap, \Cap, \sqcap, \bigcap

+

\(\cap, \Cap, \sqcap, \bigcap\)

+

\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus

+

\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)

+

\setminus, \smallsetminus, \times

+

\(\setminus, \smallsetminus, \times\)

+

\subset, \Subset, \sqsubset

+

\(\subset, \Subset, \sqsubset\)

+

\supset, \Supset, \sqsupset

+

\(\supset, \Supset, \sqsupset\)

+

\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq

+

\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)

+

\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq

+

\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)

+

\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq

+

\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)

+

\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq

+

\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)

+

关系符号

+

=, \ne, \neq, \equiv, \not\equiv

+

\(=, \ne, \neq, \equiv, \not\equiv\)

+

\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=

+

\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)

+

\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong

+

\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)

+

\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto

+

\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)

+

<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot

+

\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)

+

>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot

+

\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)

+

\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq

+

\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)

+

\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq

+

\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)

+

\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless

+

\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)

+

\leqslant, \nleqslant, \eqslantless

+

\(\leqslant, \nleqslant, \eqslantless\)

+

\geqslant, \ngeqslant, \eqslantgtr

+

\(\geqslant, \ngeqslant, \eqslantgtr\)

+

\lesssim, \lnsim, \lessapprox, \lnapprox

+

\(\lesssim, \lnsim, \lessapprox, \lnapprox\)

+

\gtrsim, \gnsim, \gtrapprox, \gnapprox

+

\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)

+

\prec, \nprec, \preceq, \npreceq, \precneqq

+

\(\prec, \nprec, \preceq, \npreceq, \precneqq\)

+

\succ, \nsucc, \succeq, \nsucceq, \succneqq

+

\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)

+

\preccurlyeq, \curlyeqprec

+

\(\preccurlyeq, \curlyeqprec\)

+

\succcurlyeq, \curlyeqsucc

+

\(\succcurlyeq, \curlyeqsucc\)

+

\precsim, \precnsim, \precapprox, \precnapprox

+

\(\precsim, \precnsim, \precapprox, \precnapprox\)

+

\succsim, \succnsim, \succapprox, \succnapprox

+

\(\succsim, \succnsim, \succapprox, \succnapprox\)

+

几何符号

+

\parallel, \nparallel, \shortparallel, \nshortparallel

+

\(\parallel, \nparallel, \shortparallel, \nshortparallel\)

+

\perp, \angle, \sphericalangle, \measuredangle, 45^\circ

+

\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)

+

\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar

+

\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)

+

\bigcirc, \triangle, \bigtriangleup, \bigtriangledown

+

\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)

+

\vartriangle, \triangledown

+

\(\vartriangle, \triangledown\)

+

\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright

+

\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)

+

逻辑符号

+

\forall, \exists, \nexists

+

\(\forall, \exists, \nexists\)

+

\therefore, \because, \And

+

\(\therefore, \because, \And\)

+

\vee, \curlyvee, \bigvee

+

\(\vee, \curlyvee, \bigvee\)

+

\land, \wedge, \curlywedge, \bigwedge

+

\(\land, \wedge, \curlywedge, \bigwedge\)

+

\bar{q}, \bar{abc}, \overline{q}, \overline{abc},

+

\lnot \neg, \not\operatorname{R}, \bot, \top

+

\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)

+

\(\lnot \neg, \not\operatorname{R}, \bot, \top\)

+

\vdash \dashv, \vDash, \Vdash, \models

+

\(\vdash \dashv, \vDash, \Vdash, \models\)

+

\Vvdash \nvdash \nVdash \nvDash \nVDash

+

\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)

+

\ulcorner \urcorner \llcorner \lrcorner

+

\(\ulcorner \urcorner \llcorner \lrcorner\)

+

箭头

+

\Rrightarrow, \Lleftarrow

+

\(\Rrightarrow, \Lleftarrow\)

+

\Rightarrow, \nRightarrow, \Longrightarrow \implies

+

\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)

+

\Leftarrow, \nLeftarrow, \Longleftarrow

+

\(\Leftarrow, \nLeftarrow, \Longleftarrow\)

+

\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff

+

\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)

+

\Uparrow, \Downarrow, \Updownarrow

+

\(\Uparrow, \Downarrow, \Updownarrow\)

+

\rightarrow \to, \nrightarrow, \longrightarrow

+

\(\rightarrow \to, \nrightarrow, \longrightarrow\)

+

\leftarrow \gets, \nleftarrow, \longleftarrow

+

\(\leftarrow \gets, \nleftarrow, \longleftarrow\)

+

\leftrightarrow, \nleftrightarrow, \longleftrightarrow

+

\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)

+

\uparrow, \downarrow, \updownarrow

+

\(\uparrow, \downarrow, \updownarrow\)

+

\nearrow, \swarrow, \nwarrow, \searrow

+

\(\nearrow, \swarrow, \nwarrow, \searrow\)

+

\mapsto, \longmapsto

+

\(\mapsto, \longmapsto\)

+

\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons

+

\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)

+

\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright

+

\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)

+

\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft

+

\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)

+

\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow

+

\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)

+

特殊符号

+

省略号:数学公式中常见的省略号有两种,\ldots 表示与文本底线对齐的省略号,\cdots 表示与文本中线对齐的省略号。

+

\amalg \% \dagger \ddagger \ldots \cdots

+

\(\amalg \% \dagger \ddagger \ldots \cdots\)

+

\smile \frown \wr \triangleleft \triangleright

+

\(\smile \frown \wr \triangleleft \triangleright\)

+

\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp

+

\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)

+

未分类

+

\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes

+

\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)

+

\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq

+

\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)

+

\intercal \barwedge \veebar \doublebarwedge \between \pitchfork

+

\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)

+

\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright

+

\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)

+

\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq

+

\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)

+

上标、下标及积分等

+

功能|语法|效果

+

^ 表示上标, _ 表示下标。如果上下标的内容多于一个字符,需要用 {} 将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。

+

上标

+

a^2

+

\(a^2\)

+

下标

+

a_2

+

\(a_2\)

+

组合

+

a^{2+2}

+

\(a^{2+2}\)

+

a_{i,j}

+

\(a_{i,j}\)

+

结合上下标

+

x_2^3

+

\(x_2^3\)

+

前置上下标

+

{}_1^2\!X_3^4

+

\({}_1^2\!X_3^4\)

+

导数

+

x'

+

\(x'\)

+

导数

+

x^\prime

+

\(x\prime\)

+

导数点

+

\dot{x}

+

\(\dot{x}\)

+

\ddot{y}

+

\(\ddot{y}\)

+

向量

+

\vec{c}(只有一个字母)

+

\(\vec{c}\)

+

\overleftarrow{a b}

+

\(\overleftarrow{a b}\)

+

\overrightarrow{c d}

+

\(\overrightarrow{c d}\)

+

\overleftrightarrow{a b}

+

\(\overleftrightarrow{a b}\)

+

\widehat{e f g}

+

\(\widehat{e f g}\)

+

上弧

+

(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)

+

\overset{\frown} {AB}

+

\(\overset{\frown} {AB}\)

+

上划线

+

\overline{h i j}

+

\(\overline{h i j}\)

+

下划线

+

\underline{k l m}

+

\(\underline{k l m}\)

+

上括号

+

\overbrace{1+2+\cdots+100}

+

\(\overbrace{1+2+\cdots+100}\)

+

\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}

+

\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)

+

下括号

+

\underbrace{a+b+\cdots+z}

+

\(\underbrace{a+b+\cdots+z}\)

+

\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}

+

\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)

+

求和(累加)

+

\sum_{k=1}^N k^2

+

\(\sum_{k=1}^N k^2\)

+

\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}

+

\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)

+

求积(累乘)

+

\prod_{i=1}^N x_i

+

\(\prod_{i=1}^N x_i\)

+

\begin{matrix} \prod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)

+

上积

+

\coprod_{i=1}^N x_i

+

\(\coprod_{i=1}^N x_i\)

+

\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}

+

\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)

+

极限

+

\lim_{n \to \infty}x_n

+

\(\lim_{n \to \infty}x_n\)

+

\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}

+

\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)

+

积分

+

\int_{-N}^{N} e^x\, {\rm d}x

+

\(\int_{-N}^{N} e^x\, {\rm d}x\)

+

本例中 \ , 和 {\rm d} 部分可省略,但建议加入,能使式子更美观。{\rm d} 可以用 \mathrm{d} 等价替换。

+

\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}(矩阵中积分符号变小)

+

\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)

+

双重积分

+

\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y

+

\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)

+

三重积分

+

\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z

+

\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)

+

闭合的曲线、曲面积分

+

\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y

+

\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)

+

交集

+

\bigcap_1^{n} p

+

\(\bigcap_1^{n} p\)

+

并集

+

\bigcup_1^{k} p

+

\(\bigcup_1^{k} p\)

+

分数

+

通常使用 \frac {分子} {分母} 命令产生一个分数,分数可嵌套。 +便捷情况可直接输入 \frac ab 来快速生成一个 \(\frac ab\) 。 +如果分式很复杂,亦可使用 分子 \over 分母 命令,此时分数仅有一层。

+

功能|语法|效果

+

分数

+

\frac{2}{4} = 0.5

+

\(\frac{2}{4}=0.5\)

+

小型分数

+

\tfrac{2}{4} = 0.5

+

\(\tfrac{2}{4} = 0.5\)

+

连分式(大型嵌套分式)

+

\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a

+

\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)

+

大型不嵌套分式

+

\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a

+

\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)

+

二项式系数

+

\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

小型二项式系数

+

\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

大型二项式系数

+

\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}

+

\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)

+

在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac 符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。 +横着写这些分式,中间使用斜线间隔 / (用斜线代替分数线)。

+

例子:

+
\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
+

显示:

+
\[ +\begin{array}{cc} +\mathrm{Bad} & \mathrm{Better} \\ +\hline \\ +e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\ +\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\ +\end{array} +\]
+

矩阵、条件表达式、方程组

+

语法:

+
\begin{类型}
+公式内容
+\end{类型}
+
+

类型可以是:矩阵 matrix pmatrix bmatrix Bmatrix vmatrix Vmatrix 、条件表达式 cases 、多行对齐方程式 aligned 、数组 array

+

在公式内容中:在每一行中插入 & 来指定需要对齐的内容,在每行结尾处使用 \\ 换行

+

无框矩阵

+

在开头使用 begin{matrix} ,在结尾使用 end{matrix} ,在中间插入矩阵元素,每个元素之间插入 & ,并在每行结尾处使用 \\

+
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
+

\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)

+

有框矩阵

+

在开头将 matrix 替换为 pmatrix bmatrix Bmatrix vmatrix Vmatrix

+
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
+

\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)

+
\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
+

\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)

+

使用 \cdots ⋯ , \ddots ⋱ , \vdots ⋮ 来输入省略符号。

+
\begin{bmatrix}
+0      & \cdots & 0      \\
+\vdots & \ddots & \vdots \\
+0      & \cdots & 0
+\end{bmatrix}
+
+

\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)

+
\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
+

\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)

+
\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
+

\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)

+

条件表达式

+
f(n) =
+\begin{cases} 
+n/2,  & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
+

\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)

+

多行等式、同余式

+

人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}

+
\begin{aligned}
+f(x) & = (m+n)^2 \\
+     & = m^2+2mn+n^2 \\
+\end{aligned}
+
+

\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)

+
\begin{aligned}
+3^{6n+3}+4^{6n+3} 
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\  
+& \equiv 27^{2n+1}+64^{2n+1}\\  
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\ 
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
+

\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)

+
\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+     & = m^2-2mn+n^2 \\
+\end{alignedat}
+
+

\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)

+

方程组

+
\begin{cases}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
+

\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)

+

+
\left\{\begin{aligned}
+3x + 5y +  z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
+

\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)

+

数组与表格

+

通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array} 开头,并在其后定义列数及每一列的文本对齐属性,c l r 分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 | ,若要插入水平分割线,在下一行输入前插入 \hline 。与矩阵相似,每行元素间均须要插入 & ,每行元素以 \\ 结尾,最后以 \end{array} 结束数组。

+
    +
  • 例子:
  • +
+
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcl}
+z        & = & a \\
+f(x,y,z) & = & x + y + z 
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{lcr}
+z        & = & a \\
+f(x,y,z) & = & x + y + z    
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)

+
    +
  • 例子:
  • +
+
\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)

+

嵌套数组或表格

+

多个数组/表格可 互相嵌套 并组成一组数组/一组表格。 +使用嵌套前必须声明 $$ 符号。

+
    +
  • 例子:
  • +
+
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+    % inner horizontal array of arrays 内层水平表格
+    \begin{array}{cc}
+        % inner array of minimum values 内层"最小值"数组
+        \begin{array}{c|cccc}
+        \text{min} & 0 & 1 & 2 & 3\\
+        \hline
+        0 & 0 & 0 & 0 & 0\\
+        1 & 0 & 1 & 1 & 1\\
+        2 & 0 & 1 & 2 & 2\\
+        3 & 0 & 1 & 2 & 3
+        \end{array}
+    &
+        % inner array of maximum values 内层"最大值"数组
+        \begin{array}{c|cccc}
+        \text{max}&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 1 & 2 & 3\\
+        2 & 2 & 2 & 2 & 3\\
+        3 & 3 & 3 & 3 & 3
+        \end{array}
+    \end{array}
+    % 内层第一行表格组结束
+    \\
+    % inner array of delta values 内层第二行Delta值数组
+        \begin{array}{c|cccc}
+        \Delta&0&1&2&3\\
+        \hline
+        0 & 0 & 1 & 2 & 3\\
+        1 & 1 & 0 & 1 & 2\\
+        2 & 2 & 1 & 0 & 1\\
+        3 & 3 & 2 & 1 & 0
+        \end{array}
+        % 内层第二行表格组结束
+\end{array}
+
+
    +
  • 显示:
  • +
+

\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)

+

用数组实现带分割符号的矩阵

+
    +
  • 例子:
  • +
+
$$
+\left[
+    \begin{array}{cc|c}
+      1&2&3\\
+      4&5&6
+    \end{array}
+\right]
+$$
+
+

显示:

+
\[ +\left[ + \begin{array}{cc|c} + 1&2&3\\ + 4&5&6 + \end{array} +\right] +\]
+

其中 cc|c 代表在一个三列矩阵中的第二和第三列之间插入分割线。

+

字体

+

希腊字母

+
+

Note

+

对于部分希腊字母,例如 \Alpha 在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题

+
+

输入 \小写希腊字母英文全称\首字母大写希腊字母英文全称 来分别输入小写和大写希腊字母。

+

A B \Gamma \Delta E Z H \Theta

+

\(A B \Gamma \Delta E Z H \Theta\)

+

I K \Lambda M N \Xi O \Pi

+

\(I K \Lambda M N \Xi O \Pi\)

+

P \Sigma T \Upsilon \Phi X \Psi \Omega

+

\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)

+

\alpha \beta \gamma \delta \epsilon \zeta \eta \theta

+

\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)

+

\iota \kappa \lambda \mu \nu \omicron \xi \pi

+

\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)

+

\rho \sigma \tau \upsilon \phi \chi \psi \omega

+

\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)

+

部分字母有变量专用形式,以 \var- 开头

+

\varepsilon \digamma \varkappa \varpi

+

\(\varepsilon \digamma \varkappa \varpi\)

+

\varrho \varsigma \vartheta \varphi

+

\(\varrho \varsigma \vartheta \varphi\)

+

希伯来符号

+

\aleph \beth \gimel \daleth

+

\(\aleph \beth \gimel \daleth\)

+
+

Note

+

该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。

+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/specification/markdown/markdown/index.html b/zh/specification/markdown/markdown/index.html new file mode 100644 index 00000000..97ed040a --- /dev/null +++ b/zh/specification/markdown/markdown/index.html @@ -0,0 +1,2065 @@ + + + + + + + + + + + + + + + + + + + + + + + + Markdown 写作 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Markdown 写作

+
+

Note

+

本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。

+
+

标题

+

你的内容标题应该从二级标题( ## )开始

+
# 一级标题
+## 二级标题
+### 三级标题
+
+

强调,斜体,删除线

+

我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球

+
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
+

分隔符

+
---
+***
+
+

链接

+

你应该避免直接内嵌 HTML 代码。

+
[link name](link url) 或者 <link url>
+
+

列表

+
    +
  • +

    多翻译引擎

    +
      +
    • 谷歌翻译
    • +
    • 微软翻译
    • +
    • 有道翻译
    • +
    • 百度翻译
    • +
    • 阿里翻译
    • +
    • DeepL 翻译
    • +
    +
  • +
  • +

    多语言互译

    +
  • +
+
- 多翻译引擎
+
+    * 谷歌翻译
+    * 微软翻译
+    * 有道翻译
+    * 百度翻译
+    * 阿里翻译
+    * DeepL 翻译
+
+- 多语言互译
+
+

代码

+

使用单引号 code 来表示行内代码,使用三引号来表示代码块。

+
code
+
+

并且对于代码块,你应该写上对应的语言

+

图片

+

你应该避免内嵌 HTML 来插入图片。

+
![link name](picture url)
+
+

注释

+

下面是一段注释

+
+

这里是一段注释 (<blockquote></blockquote>) +这是注释的第二行

+
+
# 这里是注释里面的代码段
+print("hello")
+
+
+

注释

+
+

注释嵌套 +注释嵌套

+
+
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
+

Emoji

+

暂不支持 emoji 语法,但是可以直接从 emoji 表情大全拷贝表情到文档,比如: +🍊 🍇 😀 😅 😇

+
+

访问http://emojihomepage.com/以获取更多emoji

+
+

上下标

+

H2O, y = x2

+
H~2~O, y = x^2^
+
+

引用

+

我能干饭我自豪。1

+
我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
+

表格

+ + + + + + + + + + + + + + + + + +
Header 1Header2
Cell 1Cell 2 link
Cell 3Cell 4
+
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
+

任务列表

+
    +
  • 任务1
  • +
  • 任务2
  • +
  • 任务3
  • +
  • 任务4
  • +
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
+

数学

+

文档支持 LaTeX ,关于 LaTeX ,你可以访问 LaTeX公式手册 来获取帮助。

+

mermaid 支持

+

使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网

+
sequenceDiagram
+  Alice->>John: Hello John, how are you?
+  loop Healthcheck
+      John->>John: Fight against hypochondria
+  end
+  Note right of John: Rational thoughts!
+  John-->>Alice: Great!
+  John->>Bob: How about you?
+  Bob-->>John: Jolly good!
+
+
    ```mermaid
+    sequenceDiagram
+        Alice->>John: Hello John, how are you?
+        loop Healthcheck
+            John->>John: Fight against hypochondria
+        end
+        Note right of John: Rational thoughts!
+        John-->>Alice: Great!
+        John->>Bob: How about you?
+        Bob-->>John: Jolly good!
+    ```
+
+
+
+
    +
  1. +

    老子说道 +这会在文章末尾进行注解 

    +
  2. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/specification/pr/index.html b/zh/specification/pr/index.html new file mode 100644 index 00000000..fb5bc0ab --- /dev/null +++ b/zh/specification/pr/index.html @@ -0,0 +1,1678 @@ + + + + + + + + + + + + + + + + + + + + + + + + Pull Request 规范 - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

Pull Request 规范

+

对于 Pull Request,请遵守以下几点要求1

+
    +
  1. 标题请写明本次 PR 的目的(做了 什么 工作,修复了 什么 问题)。
  2. +
  3. 内容请简要叙述修改的内容。如果修复了一个 issue 的问题,请在内容中添加 fix #xxxx 字段,其中 xxxx 代表 issue 的编号。
  4. +
  5. 推荐删除 pull request message 中的模板信息(“首先,十分感谢……”这一段)。
  6. +
+

对于 Pull Request 的标题,推荐使用如下格式书写:

+
<修改类型>(<文件名>): <修改的内容> (<对应 issue 的编号>)
+
+

修改类型分为如下几类:

+
    +
  • feat:用于添加内容的情况。
  • +
  • fix:用于修正现有内容错误的情况。
  • +
  • refactor:用于对一个页面进行重构(较大规模的更改)的情况。
  • +
  • revert:用于回退之前更改的情况。
  • +
+

示例:

+
    +
  • fix(sepecification/specification): 修改代码注释使描述更清晰
  • +
  • fix: plugins/xxx 不在目录中 (#2)
  • +
  • feat(software/mathpix): official website
  • +
  • refactor(specification/template): 整理页面内容
  • +
+
+
+
    +
  1. +

    修改自 OI-wiki: 如何参与 

    +
  2. +
+
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh/specification/template/index.html b/zh/specification/template/index.html new file mode 100644 index 00000000..45665418 --- /dev/null +++ b/zh/specification/template/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + 模版(软件的标题,如果是必须付费软件,直接在标题写上“付费”) - ToolDiy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 跳转至 + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + +

模版(软件的标题,如果是必须付费软件,直接在标题写上“付费”)

+

朋友你好,如果你有一个很棒的工具希望和大家分享,但是你不知道怎么写一个markdown,这里提供了一个可以参考的模版

+

简介

+

我们希望提交的pr在简介部分描述这个工具的:

+
    +
  • 官方的网站(如果有,尽可能以内嵌链接形式嵌入到简介)
  • +
  • 主要功能
  • +
  • 使用的环境
  • +
  • 其他基本的特点
  • +
+

安装

+

我们希望提交的pr在安装部分描述:

+
    +
  • 软件适配的操作系统的版本
  • +
  • 安装软件的方式 特别是非Windows操作系统中的安装最好给出指令
  • +
  • 如果安装这个软件需要提前安装其他的依赖软件,请注明
  • +
  • 如果可以请提供检查软件成功安装的方法,例如使用 $clang --version 检查 clang 是否成功安装
  • +
+

推荐理由

+

我们希望提交的pr在推荐理由部分描述:

+
    +
  • 这个工具的优点
  • +
  • 这个工具的缺点
  • +
  • 这个工具是否开源(开源,但提供付费服务最好标明)
  • +
  • 如果这个工具不开源,是否免费,是否允许商业化使用,是否提供教育版
  • +
  • 如果这个工具需要付费,起步价格是多少,如果有其他层级价位,请注明官网定价链接
  • +
+

参考

+

我们希望提交的pr在参考部分提供一些常用的参考,例如:

+
    +
  • 工具的官方文档
  • +
  • 笔者实际使用中遇到的情况
  • +
  • 相关的社区,书籍,网页
  • +
+ + + + + + + + +

评论

+ + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file