Jekyll2021-07-19T10:13:47+00:00/feed.xml梦宇我是一个讲师,一个程序员。在Docker Debian容器中安装ps,top等命令2019-04-29T03:10:00+00:002019-04-29T03:10:00+00:00/tools/2019/04/29/install-ps-top-in-a-debian-docker-container<p>有些debian镜像默认没有包括进程管理相关工具,在实际使用时可能有些麻烦,如果需要也可以自己安装,使用如下命令。</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt <span class="nb">install </span>procps
</code></pre></div></div>有些debian镜像默认没有包括进程管理相关工具,在实际使用时可能有些麻烦,如果需要也可以自己安装,使用如下命令。HighSierra删除文件后清理磁盘2019-04-20T03:10:00+00:002019-04-20T03:10:00+00:00/tools/2019/04/20/clean-osx-10.13-after-delete-files<p>在HighSierra(OSX 10.13)系统中,有时删除文件后你会发现磁盘空间并没有变少,这是因为如果你开启了TimeMachine,它会存储备份的文件,这时你只需要将TimeMachine相关的文件删除即可。</p>
<ul>
<li>打开终端,执行以下代码。
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>tmutil listlocalsnapshots /
</code></pre></div> </div>
<p>这会列出所有备份的TimeMachine文件。</p>
</li>
<li>然后使用 <code class="language-plaintext highlighter-rouge">tmutil deletelocalsnapshots</code> 命令根据上面命令列出的名称进行删除。</li>
</ul>在HighSierra(OSX 10.13)系统中,有时删除文件后你会发现磁盘空间并没有变少,这是因为如果你开启了TimeMachine,它会存储备份的文件,这时你只需要将TimeMachine相关的文件删除即可。安装及重新配置tzdata2019-04-17T06:10:00+00:002019-04-17T06:10:00+00:00/tools/2019/04/17/install-and-reconfig-tzdata<ul>
<li>在Linux Debian系统中安装时间相关工具的命令如下所示
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt <span class="nb">install </span>tzdata
</code></pre></div> </div>
<p>在安装过程中会出现选择时区的相关配置提示</p>
</li>
<li>如果想重新配置时间选择,则使用下面所示的命令
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dpkg-reconfigure tzdata
</code></pre></div> </div>
</li>
</ul>在Linux Debian系统中安装时间相关工具的命令如下所示 apt install tzdata 在安装过程中会出现选择时区的相关配置提示 如果想重新配置时间选择,则使用下面所示的命令 dpkg-reconfigure tzdata为Electron平台重新编译sqlite2019-01-17T12:40:00+00:002019-01-17T12:40:00+00:00/electron/2019/01/17/rebuild-sqlite-for-electron<p>Electron 环境与本机 Node 环境稍微有些不同,在使用npm安装有些需要编译的模块时,编译生成的文件可能与Electron内置的Node不环境不匹配,从而导致无法运行,这时我们就需要使用Electron提供的工具进行重新编译。</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> <span class="nt">--save-dev</span> electron-rebuild
./node_modules/.bin/electron-rebuild
</code></pre></div></div>Electron 环境与本机 Node 环境稍微有些不同,在使用npm安装有些需要编译的模块时,编译生成的文件可能与Electron内置的Node不环境不匹配,从而导致无法运行,这时我们就需要使用Electron提供的工具进行重新编译。记录git的用户名和密码2019-01-08T06:07:00+00:002019-01-08T06:07:00+00:00/tools/2019/01/08/store-git-password<h3 id="永久记住密码">永久记住密码</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config <span class="nt">--global</span> credential.helper store
</code></pre></div></div>
<h3 id="只记住当前库的密码">只记住当前库的密码</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config credential.helper store
</code></pre></div></div>
<h3 id="编辑gitconfig-文件记住密码">编辑.git/config 文件记住密码</h3>
<p>也可以通过编辑 .git/config 文件以记住密码,只需要在该文件中添加如下代码即可。</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[credential]
helper = store
</code></pre></div></div>永久记住密码配置SSH服务器以使用证书登陆2018-08-23T06:38:00+00:002018-08-23T06:38:00+00:00/tools/2018/08/23/ssh-login-via-key<p>下面以192.168.1.104上的主机为服务器来演示</p>
<ol>
<li>在服务器端使用 <code class="language-plaintext highlighter-rouge">ssh-keygen</code> 命令生成密钥对,将在 <code class="language-plaintext highlighter-rouge">~/.ssh</code> 目录下生成id_rsa和id_rsa.pub两个文件,其中id_rsa是私钥,id_rsa.pub是公钥。</li>
<li>通过命令 <code class="language-plaintext highlighter-rouge">cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys</code> 将公钥添加到授权文件中</li>
<li>将 <code class="language-plaintext highlighter-rouge">id_rsa</code> 文件下载到本地,通过命令 <code class="language-plaintext highlighter-rouge">ssh -i ./id_rsa root@192.168.1.104</code> 进行登陆</li>
</ol>下面以192.168.1.104上的主机为服务器来演示IframeBridge使用方式2018-07-30T06:38:00+00:002018-07-30T06:38:00+00:00/html5/2018/07/30/using-iframe-bridge<p>IframeBridge项目开源地址:
<a href="https://github.com/plter/IframeBridge">https://github.com/plter/IframeBridge</a></p>
<p>IframeBridge 用于在同一个页面中的不同框架之间跨域通信。</p>
<p>比如主页面与嵌入的页面之间通信,方式如下:</p>
<p>index.html 文件内容如下</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp"><!DOCTYPE html></span>
<span class="nt"><html</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">></span>
<span class="nt"><head></span>
<span class="nt"><meta</span> <span class="na">charset=</span><span class="s">"UTF-8"</span><span class="nt">></span>
<span class="nt"><title></span>Title<span class="nt"></title></span>
<span class="nt"><script </span><span class="na">src=</span><span class="s">"../../lib/iframebridge.js"</span><span class="nt">></script></span>
<span class="nt"></head></span>
<span class="nt"><body></span>
<span class="nt"><script></span>
<span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">frame</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="dl">"</span><span class="s2">iframe</span><span class="dl">"</span><span class="p">);</span>
<span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">frame</span><span class="p">);</span>
<span class="nx">frame</span><span class="p">.</span><span class="nx">onload</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">bridge</span> <span class="o">=</span> <span class="nx">IframeBridge</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">frame</span><span class="p">.</span><span class="nx">contentWindow</span><span class="p">);</span>
<span class="nx">bridge</span><span class="p">.</span><span class="nx">hello</span><span class="p">(</span><span class="dl">"</span><span class="s2">Hello iframe</span><span class="dl">"</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">frame</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">content.html</span><span class="dl">"</span><span class="p">;</span>
<span class="p">})();</span>
<span class="nt"></script></span>
<span class="nt"></body></span>
<span class="nt"></html></span>
</code></pre></div></div>
<p>对应的 content.html 内容如下</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp"><!DOCTYPE html></span>
<span class="nt"><html</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">></span>
<span class="nt"><head></span>
<span class="nt"><meta</span> <span class="na">charset=</span><span class="s">"UTF-8"</span><span class="nt">></span>
<span class="nt"><title></span>Title<span class="nt"></title></span>
<span class="nt"><script </span><span class="na">src=</span><span class="s">"../../lib/iframebridge.js"</span><span class="nt">></script></span>
<span class="nt"></head></span>
<span class="nt"><body></span>
<span class="nt"><script></span>
<span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">bridge</span> <span class="o">=</span> <span class="nx">IframeBridge</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nb">window</span><span class="p">);</span>
<span class="nx">bridge</span><span class="p">.</span><span class="nx">hello</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">name</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">})();</span>
<span class="nt"></script></span>
<span class="nt"></body></span>
<span class="nt"></html></span>
</code></pre></div></div>IframeBridge项目开源地址: https://github.com/plter/IframeBridgeApache代理设置2018-07-03T11:23:00+00:002018-07-03T11:23:00+00:00/tools/2018/07/03/apache-proxy<p>如果想配置基于HTTP协议的代理,如下所示:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ProxyPass /cdb http://127.0.0.1:8080/cdb
</code></pre></div></div>
<p>如果是Java语言所写的服务器,为了提高代理的运行效率,可使用AJP,如下所示:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ProxyPass /cdb ajp://127.0.0.1:8009/cdb
</code></pre></div></div>
<p>如果想以Apache来处理静态文件,则可配置虚拟目录用于实现简单的负载均衡,如下所示:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Alias /cdb "/opt/apache-tomcat-9.0.10/webapps/cdb"
<Directory "/opt/apache-tomcat-9.0.10/webapps/cdb">
Require all granted
</Directory>
ProxyPass /cdb/static !
ProxyPass /cdb ajp://127.0.0.1:8009/cdb
</code></pre></div></div>如果想配置基于HTTP协议的代理,如下所示:Apache虚拟目录配置2018-07-03T11:17:00+00:002018-07-03T11:17:00+00:00/tools/2018/07/03/apache-httpd-vertual-directory<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Alias /cdb "/opt/apache-tomcat-9.0.10/webapps/cdb"
<Directory "/opt/apache-tomcat-9.0.10/webapps/cdb">
Require all granted
</Directory>
</code></pre></div></div>```text Alias /cdb “/opt/apache-tomcat-9.0.10/webapps/cdb”Welcome to Jekyll!2018-07-03T04:50:39+00:002018-07-03T04:50:39+00:00/jekyll/update/2018/07/03/welcome-to-jekyll<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>
<p>To add new posts, simply add a file in the <code class="language-plaintext highlighter-rouge">_posts</code> directory that follows the convention <code class="language-plaintext highlighter-rouge">YYYY-MM-DD-name-of-post.ext</code> and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>
<p>Jekyll also offers powerful support for code snippets:</p>
<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=> prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>
<p>Check out the <a href="https://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.