<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>未分类 on 勇气</title><link>https://courages.us/category/%E6%9C%AA%E5%88%86%E7%B1%BB/</link><description>Recent content in 未分类 on 勇气</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 26 Nov 2022 22:03:08 +0800</lastBuildDate><atom:link href="https://courages.us/category/%E6%9C%AA%E5%88%86%E7%B1%BB/index.xml" rel="self" type="application/rss+xml"/><item><title>Android平板安装Termux和LunarVim</title><link>https://courages.us/android%E5%B9%B3%E6%9D%BF%E5%AE%89%E8%A3%85termux%E5%92%8Clunarvim/</link><pubDate>Sun, 20 Nov 2022 22:03:18 +0800</pubDate><guid>https://courages.us/android%E5%B9%B3%E6%9D%BF%E5%AE%89%E8%A3%85termux%E5%92%8Clunarvim/</guid><description>&lt;p&gt;这次趁着双11买了个小米平板5pro，才发现不过是大号手机而已，系统是基于Android 11的MIUI 13。除了WPS，bilibili、浏览器都不过兼容桌面模式而已，然而却又失去了移动设备的便利性：touch事件不能精确响应，于是卸掉重新安装的普通版。终于体会到了雪球不明真相群众的那句话：平板上的东西已经在手机上进化完了。想想这个平板除了刷视频、看书、画画，还能干点啥？看代码应该也有优势，毕竟分辨率还不错。Android上并没有什么好用的代码App，虽然可以安装Github查看代码，但还是看不了几行，也不如IDE来的方便。幸好还有&lt;a class="link" href="https://termux.dev/" target="_blank" rel="noopener"&#10; &gt;Termux&lt;/a&gt;，极大的拓展了Android的可用性，增加了超过1万个cli应用，比如比应用市场上任何服务器连接App都好用的ssh，强大的编程开发工具&lt;a class="link" href="https://www.lunarvim.org" target="_blank" rel="noopener"&#10; &gt;LunarVim&lt;/a&gt;。&lt;br&gt;&#10;&lt;a class="link" href="https://termux.dev/" target="_blank" rel="noopener"&#10; &gt;Termux&lt;/a&gt;是一个Android终端（terminal）模拟软件并提供Linux环境，可以安装许多Linux下常见软件，比如ssh、git、curl，和各种开发软件，比如nodejs、python、rust、golang等等。Termux既可以从&lt;a class="link" href="https://github.com/termux/termux-app" target="_blank" rel="noopener"&#10; &gt;GitHub&lt;/a&gt;上下载安装，也可以使用&lt;a class="link" href="https://f-droid.org" target="_blank" rel="noopener"&#10; &gt;F-Droid&lt;/a&gt;安装。使用F-Droid的好处在于可以自动更新，和管理其他的扩展，比如Termux:Styling、Termux:API。安装完成后记得给予联网权限，如果安装了其他的扩展，记得在安全中心－联网管理中找到对应的扩展App也给予联网权限，否则Termux就上不了网。 安装完成后打开Termux，这里注意Termux重置了目录，所有目录都是在data/data/com.termux/files/下面，并提供了两个快捷访问$HOME: data/data/com.termux/files/home和$PREFIX: /data/data/com.termux/files/usr。运行下面的命令设置一下存储和文件夹软链接，这样方便Termux与外部目录(比如Downloads）互相复制粘贴&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;termux-setup-storage&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以更改一些配置，比如软键盘快捷键之类的&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vim ~/.termux/termux.properties&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#重新加载配置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;termux-reload-settings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#更改使用的源仓库，默认使用多仓库，可以改为使用单一仓库，比如清华源&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;termux-change-repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后安装一些基础软件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pkg install openssh git curl wget vim bat croc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后安装oh-my-zsh和自动补全插件，其他插件的安装与正常安装无差别&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pkg install zsh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sh -c &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span style="color:#e6db74"&gt;${&lt;/span&gt;ZSH_CUSTOM&lt;span style="color:#66d9ef"&gt;:-&lt;/span&gt;~/.oh-my-zsh/custom&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后编辑~/.zshrc，更改主题和插件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#ZSH_THEME=&amp;#34;robbyrussell&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ZSH_THEME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;agnoster&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Which plugins would you like to load?&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Standard plugins can be found in $ZSH/plugins/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Custom plugins may be added to $ZSH_CUSTOM/plugins/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Example format: plugins=(rails git textmate ruby lighthouse)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Add wisely, as too many plugins slow down shell startup.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;plugins&lt;span style="color:#f92672"&gt;=(&lt;/span&gt;git zsh-autosuggestions&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果zsh显示乱码的话，可以按住屏幕在弹出的more菜单里面更改nerd font字体，比如ubuntu。&lt;br&gt;&#10;现在可以开始安装LunarVim的依赖&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pkg install neovim build-essential python vim-python nodejs rust fd ripgrep&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装完成完成后neovim, make，npm，pip，cargo也都安装好了。这时候就可以使用nvim来编辑了，可以参考:help nvim/:Tutor进行学习。这里顺便安装了pyhon vim的交互包，等下可以跳过python依赖的安装。还安装了两个rust写的神器：文件查找&lt;a class="link" href="https://github.com/sharkdp/fd" target="_blank" rel="noopener"&#10; &gt;fd&lt;/a&gt;和文件内容搜索&lt;a class="link" href="https://github.com/BurntSushi/ripgrep" target="_blank" rel="noopener"&#10; &gt;ripgrep&lt;/a&gt;，等下也可以跳过rust依赖安装。，&lt;br&gt;&#10;&lt;a class="link" href="https://www.lunarvim.org/" target="_blank" rel="noopener"&#10; &gt;LunarVim&lt;/a&gt;是一个基于&lt;a class="link" href="https://neovim.io/" target="_blank" rel="noopener"&#10; &gt;Neovim&lt;/a&gt;开发的IDE，打包了文件搜索、内容查找、代码补全，语法高亮等许多功能，这个可比简单vim强多了，更多功能、特点可以在官网视频学习。官方提供的安装脚本并不包含Termux的，我们下载下来看一下是否都已经安装好依赖、做一些改动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh &amp;gt; install.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里稍微改一下，匹配不到OS就使用pkg安装&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; detect_platform&lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;case&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$OS&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Linux&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/arch-release&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/artix-release&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RECOMMEND_INSTALL&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sudo pacman -S&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/fedora-release&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/redhat-release&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RECOMMEND_INSTALL&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sudo dnf install -y&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/gentoo-release&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RECOMMEND_INSTALL&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;emerge -tv&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#75715e"&gt;# it&amp;#39;s termux&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RECOMMEND_INSTALL&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;pkg install -y&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后开始安装LunarVim&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod +x install.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export LV_BRANCH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;release-1.2/neovim-0.8&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./install.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; 88&lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_|&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; 88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt;888888$&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; 888888&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; 888888&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt;88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; 88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt;88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt;888888&lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;888&lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; __88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;___88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt;&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; __88&lt;span style="color:#ae81ff"&gt;\\&lt;/span&gt;88&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; _88 _88&lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | 888888$ |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_|&lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;8&lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; / &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; / &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; / &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; __88 |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;8$ / &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;88888&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;\8&lt;/span&gt;88888$ |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;\$&lt;/span&gt; / &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; | &lt;span style="color:#ae81ff"&gt;88&lt;/span&gt; |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_____/ &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;______|&lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;/ &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_|&lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_| &lt;span style="color:#ae81ff"&gt;\_&lt;/span&gt;_|&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--------------------------------------------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Detecting platform &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; managing any additional neovim dependencies&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--------------------------------------------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Would you like to install LunarVim&lt;span style="color:#e6db74"&gt;&amp;#39;s NodeJS dependencies?&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;[y]es or [n]o (default: no) : y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Installing node modules with npm..&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;All NodeJS dependencies are successfully installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;--------------------------------------------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Would you like to install LunarVim&amp;#39;&lt;/span&gt;s Python dependencies?&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;y&lt;span style="color:#f92672"&gt;]&lt;/span&gt;es or &lt;span style="color:#f92672"&gt;[&lt;/span&gt;n&lt;span style="color:#f92672"&gt;]&lt;/span&gt;o &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default: no&lt;span style="color:#f92672"&gt;)&lt;/span&gt; : y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Verifying that pip is available..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/python3: No module named ensurepip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Installing with pip..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Requirement already satisfied: pynvim in /usr/lib/python3/dist-packages &lt;span style="color:#f92672"&gt;(&lt;/span&gt;0.4.2&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;All Python dependencies are successfully installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--------------------------------------------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Would you like to install LunarVim&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;s Rust dependencies?&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;y&lt;span style="color:#f92672"&gt;]&lt;/span&gt;es or &lt;span style="color:#f92672"&gt;[&lt;/span&gt;n&lt;span style="color:#f92672"&gt;]&lt;/span&gt;o &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default: no&lt;span style="color:#f92672"&gt;)&lt;/span&gt; : y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;All Rust dependencies are successfully installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里注意，除了NodeJS依赖需要安装，Python、Rust都已经安装好了，选择No就可以了。安装完成后可以使用命令打开&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#打开默认窗口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lvim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#打开指定文件&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#lvim install.sh&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#打开指定目录&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#lvim downloads&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;默认界面长这样子，可以搜索文件、搜索内容，打开文件、项目等。如果有出现文字、图标显示乱码，那么需要安装nerd font，参考上面的字体配置。&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_163449.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="447px" data-flex-grow="186" height="161" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_163449-300x161.jpg" width="300"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215642.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="275" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215642-300x275.jpg" width="300"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215610.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="260px" data-flex-grow="108" height="276" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215610-300x276.jpg" width="300"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;按下空格键就会出现引导界面&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_220013.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="517px" data-flex-grow="215" height="139" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_220013-300x139.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;比如空格+e打开目录&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_163300.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="177px" data-flex-grow="74" height="300" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_163300-222x300.jpg" width="222"&gt;&lt;/a&gt;&lt;br&gt;&#10;空格+s搜索&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215913.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="517px" data-flex-grow="215" height="139" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215913-300x139.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;空格+L打开LunarVim配置，比如keyMaps&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215539.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="258px" data-flex-grow="107" height="279" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215539-300x279.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;剩下就是neovim、LuarVim的操作了，比如ctrl+h/ctrl+l的文件目录与代码窗口左右切换，空格+b+p/n/e/j在打开的文件里面切换、打开、关闭，alt+1/2/3打开下边、右边、弹出窗口里面打开终端&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215348.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="447px" data-flex-grow="186" height="161" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215348-300x161.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215503.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="418px" data-flex-grow="174" height="172" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215503-300x172.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215848.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img class="gallery-image" data-flex-basis="517px" data-flex-grow="215" height="139" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2022/11/IMG_20221120_215848-300x139.jpg" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;如此便可以使用LunarVim写代码了。基于Neovim的编辑器还有&lt;a class="link" href="https://nvchad.com/" target="_blank" rel="noopener"&#10; &gt;NvChad&lt;/a&gt;，&lt;a class="link" href="https://spacevim.org/" target="_blank" rel="noopener"&#10; &gt;SpaceVim&lt;/a&gt;，也都非常强大，不过LunarVim默认配置了许多开箱即用的功能。另外，还可以使用&lt;a class="link" href="https://coder.com/docs/code-server/latest/termux" target="_blank" rel="noopener"&#10; &gt;code server&lt;/a&gt;，不过这个方案直接安装是不可以，需要借助&lt;a class="link" href="https://github.com/termux/proot-distro" target="_blank" rel="noopener"&#10; &gt;proot-distro&lt;/a&gt;安装其他Liunx才可以。如果Termux不能满足你的需求，可以使用proot-distro安装一个Linux来进一步模拟。如果觉得Termux好用的话，可以给它&lt;a class="link" href="https://termux.dev/en/donate.html" target="_blank" rel="noopener"&#10; &gt;捐款&lt;/a&gt;。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="https://wiki.termux.com/wiki/Main_Page" target="_blank" rel="noopener"&#10; &gt;Termux wiki&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://www.sqlsec.com/2018/05/termux.html" target="_blank" rel="noopener"&#10; &gt;Termux 高级终端安装使用配置教程&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>PHP yield应用</title><link>https://courages.us/php-yield%E5%BA%94%E7%94%A8/</link><pubDate>Mon, 25 May 2015 18:48:33 +0800</pubDate><guid>https://courages.us/php-yield%E5%BA%94%E7%94%A8/</guid><description>&lt;p&gt;PHP 5.5开始新增了神奇的关键字yield，能够从生成器（generators）中返回数据。yield有点像普通函数中的关键字return，但是不会彻底停止函数的执行（普通函数一旦return便不执行了），可以暂停循环并返回值，每一次调用便从中断处继续迭代。生成器可以用于替代循环迭代，每一次调用返回一个&lt;a class="link" href="http://php.net/manual/en/class.generator.php" target="_blank" rel="noopener"&#10; &gt;生成器对象（generator）&lt;/a&gt;。&lt;/p&gt;&#10;&lt;p&gt;yield能够延迟执行，可以用于对大量数据进行迭代而不用预先在内存中生成数组。例如动态生成一个大数组：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;xrange&lt;/span&gt;($start, $end, $step &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ($i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $start; $i &lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt; $end; $i &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; $step) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt; $i;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;xrange&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1000000&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $num) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $num, &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$range &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;xrange&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1000000&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;var_dump&lt;/span&gt;($range); &lt;span style="color:#75715e"&gt;// object(Generator)#1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;var_dump&lt;/span&gt;($range &lt;span style="color:#a6e22e"&gt;instanceof&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Iterator&lt;/span&gt;); &lt;span style="color:#75715e"&gt;// bool(true)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;利用yield简便、高效的生成fibonacci数列而不是循环或递归&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fibonacci&lt;/span&gt;($count) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $prev &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $current &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ($i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;; $i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; $count; &lt;span style="color:#f92672"&gt;++&lt;/span&gt;$i) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt; $prev;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $next &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $prev &lt;span style="color:#f92672"&gt;+&lt;/span&gt; $current;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $prev &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $current;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $current &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $next;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;fibonacci&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;48&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $i &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; $value) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $i , &lt;span style="color:#e6db74"&gt;&amp;#39; -&amp;gt; &amp;#39;&lt;/span&gt; , $value, &lt;span style="color:#a6e22e"&gt;PHP_EOL&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;利用yield来循环读取文件，而不需要像file函数那样一次性加载进来，节省内存&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;file_lines&lt;/span&gt;($filename) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fopen&lt;/span&gt;($filename, &lt;span style="color:#e6db74"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;); &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (($line &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fgets&lt;/span&gt;($file)) &lt;span style="color:#f92672"&gt;!==&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt; $line; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fclose&lt;/span&gt;($file); &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;file_lines&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;somefile&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $line) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// do some work here&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;yield除了能够返回值，用作变量时还可以接收值。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;logger&lt;/span&gt;($fileName) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $fileHandle &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fopen&lt;/span&gt;($fileName, &lt;span style="color:#e6db74"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fwrite&lt;/span&gt;($fileHandle, &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$logger &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;logger&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/log&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$logger&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;send&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Foo&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$logger&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;send&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Bar&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于yield具有中断执行后再次调用又可以从中断处执行，外界又可以通过&lt;a class="link" href="http://php.net/manual/en/generator.send.php" target="_blank" rel="noopener"&#10; &gt;生成器对象（generator）的send方法&lt;/a&gt;进行交互，可以用于协程（coroutine），作多任务协作的流程控制。这里有个&lt;a class="link" href="https://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html" target="_blank" rel="noopener"&#10; &gt;例子&lt;/a&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Task&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $taskId;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $coroutine;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $sendValue &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $beforeFirstYield &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__construct&lt;/span&gt;($taskId, &lt;span style="color:#a6e22e"&gt;Generator&lt;/span&gt; $coroutine) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskId&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $taskId;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;coroutine&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $coroutine;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getTaskId&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskId&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setSendValue&lt;/span&gt;($sendValue) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;sendValue&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $sendValue;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;beforeFirstYield&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;beforeFirstYield&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;coroutine&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;current&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $retval &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;coroutine&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;send&lt;/span&gt;($this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;sendValue&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;sendValue&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $retval;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;isFinished&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#f92672"&gt;!&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;coroutine&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;valid&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Scheduler&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $maxTaskId &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $taskMap &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []; &lt;span style="color:#75715e"&gt;// taskId =&amp;gt; task&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $taskQueue;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__construct&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskQueue&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;SplQueue&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;newTask&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Generator&lt;/span&gt; $coroutine) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $tid &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;++&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;maxTaskId&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $task &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Task&lt;/span&gt;($tid, $coroutine);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskMap&lt;/span&gt;[$tid] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $task;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;schedule&lt;/span&gt;($task);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $tid;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;schedule&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Task&lt;/span&gt; $task) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskQueue&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;enqueue&lt;/span&gt;($task);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskQueue&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isEmpty&lt;/span&gt;()) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $task &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskQueue&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;dequeue&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $task&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($task&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isFinished&lt;/span&gt;()) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;unset&lt;/span&gt;($this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;taskMap&lt;/span&gt;[$task&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getTaskId&lt;/span&gt;()]);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;schedule&lt;/span&gt;($task);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;task1&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ($i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; $i &lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; &lt;span style="color:#f92672"&gt;++&lt;/span&gt;$i) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;This is task 1 iteration &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$i&lt;/span&gt;&lt;span style="color:#e6db74"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;task2&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ($i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; $i &lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;; &lt;span style="color:#f92672"&gt;++&lt;/span&gt;$i) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;This is task 2 iteration &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$i&lt;/span&gt;&lt;span style="color:#e6db74"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;yield&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$scheduler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Scheduler&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$scheduler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newTask&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;task1&lt;/span&gt;());&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$scheduler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newTask&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;task2&lt;/span&gt;());&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$scheduler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有些任务是需要交互进行的，如socket的监听和回复；有些任务异步执行又需要回调，如A执行不阻塞程序，但B执行又取决于A是否执行完毕。这些都可以使用yield来进行封装，达到流程控制的目的。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="http://php.net/manual/en/language.generators.overview.php" target="_blank" rel="noopener"&#10; &gt;Generators overview&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://stackoverflow.com/questions/17483806/what-does-yield-mean-in-php" target="_blank" rel="noopener"&#10; &gt;What does yield mean in PHP?&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://stackoverflow.com/questions/17223802/what-is-the-difference-between-a-generator-and-an-array" target="_blank" rel="noopener"&#10; &gt;What is the difference between a generator and an array?&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html" target="_blank" rel="noopener"&#10; &gt;Cooperative multitasking using coroutines (in PHP!)&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://blog.ircmaxell.com/2012/07/what-generators-can-do-for-you.html" target="_blank" rel="noopener"&#10; &gt;What Generators Can Do For You&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.masnun.com/2013/12/27/generators-and-coroutines-in-php.html" target="_blank" rel="noopener"&#10; &gt;Generators and Coroutines in PHP&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://Generators%20in%20PHP" target="_blank" rel="noopener"&#10; &gt;Generators in PHP&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.hitoy.org/coroutine-and-yield.html" target="_blank" rel="noopener"&#10; &gt;协程与yield&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://github.com/recoilphp/recoil" target="_blank" rel="noopener"&#10; &gt;http://www.hitoy.org/coroutine-and-yield.html&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://medium.com/@assertchris/co-operative-php-multitasking-ce4ef52858a0" target="_blank" rel="noopener"&#10; &gt;Co-operative PHP Multitasking&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://en.wikipedia.org/wiki/Generator_%28computer_programming%29" target="_blank" rel="noopener"&#10; &gt;Generator (computer programming)&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.infoq.com/cn/presentations/optimization-of-asynchronous-processing-in-distributed-systems" target="_blank" rel="noopener"&#10; &gt;异步处理在分布式系统中的优化作用&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>使用PC控制android手机</title><link>https://courages.us/%E7%94%A8%E7%94%B5%E8%84%91%E6%8E%A7%E5%88%B6android%E6%89%8B%E6%9C%BA/</link><pubDate>Tue, 31 Mar 2015 21:03:25 +0800</pubDate><guid>https://courages.us/%E7%94%A8%E7%94%B5%E8%84%91%E6%8E%A7%E5%88%B6android%E6%89%8B%E6%9C%BA/</guid><description>&lt;p&gt;跑步的时候不小心把手机屏幕摔裂了，操作不了。在等待新手机的时候，又没有其他手机可以用。于是想用电脑来控制手机，这里推荐一个软件&lt;a class="link" href="http://tc.sigma-rt.com.cn/index.php" title="Total Control"&#10; target="_blank" rel="noopener"&#10; &gt;Total Control&lt;/a&gt;，可以在用鼠标代替手指操作手机，也可以用于手机截屏、演示等。&lt;/p&gt;&#10;&lt;p&gt;首先到&lt;a class="link" href="http://tc.sigma-rt.com.cn/index.php" target="_blank" rel="noopener"&#10; &gt;官网下载&lt;/a&gt;Total Control 最新的PC版软件。安装时会提示下载&lt;a class="link" href="http://www.java.com/zh_CN/" title="java"&#10; target="_blank" rel="noopener"&#10; &gt;Java&lt;/a&gt;环境，安装完Java后，可以开始安装Total Control了。&lt;/p&gt;&#10;&lt;p&gt;Total Control通过USB连接手机需要驱动，这里推荐一个懒人方法：通过&lt;a class="link" href="http://www.wandoujia.com/" title="豌豆荚"&#10; target="_blank" rel="noopener"&#10; &gt;豌豆荚&lt;/a&gt;自动识别你的手机并安装驱动，然后Total Control也可以连接手机了，会自动安装Total Control手机端 ，然后就可以开始玩了。&lt;/p&gt;&#10;&lt;p&gt;更新：发现另外一个PC控制手机的软件&lt;a class="link" href="http://www.iplaysoft.com/teamviewer-quicksupport.html" target="_blank" rel="noopener"&#10; &gt;Teamviewer QuickSupport&lt;/a&gt;，通过网络来控制。（需root，不需驱动）&lt;/p&gt;&#10;&lt;p&gt;一些截图：&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2015/03/tc3.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="连接手机" class="gallery-image" data-flex-basis="356px" data-flex-grow="148" height="202" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2015/03/tc3-300x202.png" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2015/03/tc1.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="连接成功" class="gallery-image" data-flex-basis="137px" data-flex-grow="57" height="300" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2015/03/tc1-172x300.png" width="172"&gt;&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2015/03/tc2.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="手机演示" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="169" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2015/03/tc2-300x169.png" width="300"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="http://club.tech.163.com/bbs/mobile_a2ox/301774877.html" title="PC端控制android手机"&#10; target="_blank" rel="noopener"&#10; &gt;PC端控制android手机&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://tc.sigma-rt.com.cn/index.php" title="Total Control-帮助你的电脑控制手机"&#10; target="_blank" rel="noopener"&#10; &gt;Total Control-帮助你电脑控制手机&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Mysql INT和CHAR类型的隐式转换</title><link>https://courages.us/mysql-int%E5%92%8Cchar%E7%B1%BB%E5%9E%8B%E7%9A%84%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2/</link><pubDate>Sat, 23 Aug 2014 22:09:47 +0800</pubDate><guid>https://courages.us/mysql-int%E5%92%8Cchar%E7%B1%BB%E5%9E%8B%E7%9A%84%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2/</guid><description>&lt;p&gt;最近碰到一个问题，由于没有对参数进行过滤和转换，直接拿到mysql里面进行查询了，大概是这样的：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; store &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;1}&amp;#39;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; store &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;{1}&amp;#39;&lt;/span&gt;;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;测试&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是前者仍然可以查出id为1的记录，后者是不行。知道mysql有隐式转换却不知道具体是怎么样的。google了下，发现隐式转换还有其他的问题，例如:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; store &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; store &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前者将会查询出所有的记录，而后者只会匹配name值为0的记录。&lt;br&gt;&#10;总结了一下大概是这些大概是以下的原因：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;当查询字段是INT类型，如果查询条件为CHAR，将查询条件转换为INT，如果是字符串前导都是数字将会进行截取，如果不是转换为0。&lt;/li&gt;&#10;&lt;li&gt;当查询字段是CHAR类型，如果查询条件为INT，将查询字段为换为INT再进行比较，可能会造成全表扫描。示例2的name字段为CHAR类型，第一句查询转换为INT时都等于0，所以全部匹配了；第二句查询同为CHAR类型不发生转换，所以仅匹配值为0的记录。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;mysql的隐式转换还有很多&lt;a class="link" href="http://www.hustdba.com/?p=145" target="_blank" rel="noopener"&#10; &gt;其他的坑&lt;/a&gt;，所以一定要指明查询条件类型，不要让mysql去做自动转换。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="http://blog.eood.cn/mysql_params" target="_blank" rel="noopener"&#10; &gt;价值百万的 MySQL 的隐式类型转换&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://hi.baidu.com/315058122/item/83bac5b97784747f254b09d5" target="_blank" rel="noopener"&#10; &gt;mysql字符串的隐式转换导致数据库操作异常&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://blog.csdn.net/lidan3959/article/details/21653149" target="_blank" rel="noopener"&#10; &gt;关于mysql 隐式转换的一个小问题&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.zhihu.com/question/20162439" target="_blank" rel="noopener"&#10; &gt;MySQL查询类型不正确不使用索引？&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.javaranger.com/archives/1098" target="_blank" rel="noopener"&#10; &gt;mysql的隐式的数据类型转换&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.hustdba.com/?p=145" target="_blank" rel="noopener"&#10; &gt;MySQL隐式转换之坑&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://dev.mysql.com/doc/refman/5.1/zh/column-types.html" target="_blank" rel="noopener"&#10; &gt;列类型&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Windows 8 安装Vagrant和VirtualBox</title><link>https://courages.us/windows-8-%E5%AE%89%E8%A3%85vagrant%E5%92%8Cvirtualbox/</link><pubDate>Wed, 23 Jul 2014 22:12:45 +0800</pubDate><guid>https://courages.us/windows-8-%E5%AE%89%E8%A3%85vagrant%E5%92%8Cvirtualbox/</guid><description>&lt;p&gt;由于php的一些扩展只有在linux下面才能用，就算是Cygwin下面也不行，例如pcntl。所以就决定安装一个linux虚拟机来作为开发环境，顺带找到了另外一个东西：&lt;a class="link" href="http://www.vagrantup.com/" target="_blank" rel="noopener"&#10; &gt;Vagrant&lt;/a&gt;。Vagrant作为一款虚拟机环境统一配置管理工具，后端可以是&lt;a class="link" href="https://www.virtualbox.org/" target="_blank" rel="noopener"&#10; &gt;VirtualBox&lt;/a&gt;，VMWare，AWS。这样当运行环境配置完了可以方便的部署在其他机器上或给予其他开发人员，实现配置一次，到处运行的功能。当使用Vagrant管理VirtualBox是运行在命令行下面的，而不需要打开界面。&lt;/p&gt;&#10;&lt;p&gt;首先，安装VirtualBox，&lt;a class="link" href="https://www.virtualbox.org/wiki/Downloads" target="_blank" rel="noopener"&#10; &gt;地址&lt;/a&gt;。&lt;/p&gt;&#10;&lt;p&gt;然后，安装Vagrant，&lt;a class="link" href="http://www.vagrantup.com/downloads.html" target="_blank" rel="noopener"&#10; &gt;地址&lt;/a&gt;。安装完成后，将Vagrant的bin目录添加到系统的环境变量Path里面。&lt;/p&gt;&#10;&lt;p&gt;再然后，下载做好的虚拟机镜像，&lt;a class="link" href="http://www.vagrantbox.es/" target="_blank" rel="noopener"&#10; &gt;地址&lt;/a&gt;。我这里下载的是Ubuntu precise 64 VirtualBox，对应链接：http://files.vagrantup.com/precise64.box。这个镜像的下载速度还不错，centos的就不怎么样了，但还是建议先下载到本地硬盘在加载进来。&lt;/p&gt;&#10;&lt;p&gt;这时候应该先为这个虚拟机（Ubuntu precise 64）建一个目录，以便初始化和管理这个虚拟机主机。如果有多个虚拟机的话，就分别建立不同的目录来初始化。比如：E:\project\vagrant\dev。然后就在这个目录下面初始化这个镜像。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;E:&lt;span style="color:#ae81ff"&gt;\p&lt;/span&gt;roject&lt;span style="color:#ae81ff"&gt;\v&lt;/span&gt;agrant&lt;span style="color:#ae81ff"&gt;\d&lt;/span&gt;ev&amp;gt;vagrant box add Ubuntu12.04x64 &lt;span style="color:#e6db74"&gt;&amp;#34;file:///f:\box\precise64.box&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意，file后面应该是三个/而不是两个。add后面跟的是这个虚拟机的名称，也可以用base自动识别。&lt;br&gt;&#10;打开对应目录下面的配置文件Vagrantfile，配置虚拟机的ip和共享目录。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; config.vm.network &lt;span style="color:#e6db74"&gt;&amp;#34;private_network&amp;#34;&lt;/span&gt;, ip: &lt;span style="color:#e6db74"&gt;&amp;#34;192.168.33.10&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; config.vm.synced_folder &lt;span style="color:#e6db74"&gt;&amp;#34;E:/wamp/www&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;/home/vagrant/www&amp;#34;&lt;/span&gt;　&lt;span style="color:#75715e"&gt;#将前者映射到后者&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;初始化并启动：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;E:&lt;span style="color:#ae81ff"&gt;\p&lt;/span&gt;roject&lt;span style="color:#ae81ff"&gt;\v&lt;/span&gt;agrant&lt;span style="color:#ae81ff"&gt;\d&lt;/span&gt;ev&amp;gt;vagrant init Ubuntu12.04x64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;E:&lt;span style="color:#ae81ff"&gt;\p&lt;/span&gt;roject&lt;span style="color:#ae81ff"&gt;\v&lt;/span&gt;agrant&lt;span style="color:#ae81ff"&gt;\d&lt;/span&gt;ev&amp;gt;vagrant up&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="vagrant up" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/s3.homezz.com/201407/4966/46661_o.png"&gt;&lt;br&gt;&#10;然后可以通过ssh连接上去管理了，这里使用Cygwin下面的&lt;a class="link" href="https://courages.us/cygwin-%e5%ae%89%e8%a3%85/" target="_blank" rel="noopener"&#10; &gt;ssh客户端&lt;/a&gt;，默认用户和密码都是vagrant。&lt;br&gt;&#10;&lt;img alt="vagrant ssh" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/s3.homezz.com/201407/4966/46660_o.png"&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update &lt;span style="color:#75715e"&gt;#先更新下软件包，要不然有的可能会装不上&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意启动和连接虚拟机都需要切换到该虚拟机所在开发目录。还有一些其他的命令。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant init &lt;span style="color:#75715e"&gt;# 初始化&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant up &lt;span style="color:#75715e"&gt;# 启动虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant halt &lt;span style="color:#75715e"&gt;# 关闭虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant reload &lt;span style="color:#75715e"&gt;# 重启虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant ssh &lt;span style="color:#75715e"&gt;# SSH 至虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant status &lt;span style="color:#75715e"&gt;# 查看虚拟机运行状态&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant destroy &lt;span style="color:#75715e"&gt;# 销毁当前虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant package &lt;span style="color:#75715e"&gt;# 导出当前虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里有别人推荐的一个小软件win-sshfs，可以将Linux的目录直接mount到Windows系统上作为一个根盘符。注意：这是个32位软件，可能会安装不成功，需要采用兼容模式。&lt;br&gt;&#10;&lt;a class="link" href="https://courages.us/wp-content/uploads/2015/05/sshfs.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="sshfs" class="gallery-image" data-flex-basis="385px" data-flex-grow="160" height="187" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/2015/05/sshfs-300x187.png" width="300"&gt;&lt;/a&gt;&lt;br&gt;&#10;然后就可以在我的电脑里面像本地文件一样管理。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="http://blog.segmentfault.com/fenbox/1190000000264347" target="_blank" rel="noopener"&#10; &gt;使用 Vagrant 打造跨平台开发环境&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://kiwik.github.io/openstack/2013/12/22/%E4%BD%BF%E7%94%A8Vagrant%E5%92%8Cwin-sshfs%E6%94%AF%E6%8C%81OpenStack%E5%BC%80%E5%8F%91/" target="_blank" rel="noopener"&#10; &gt;使用vagrant和win Sshfs支持openstack开发&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://github.com/astaxie/Go-in-Action/blob/master/ebook/zh/01.2.md" target="_blank" rel="noopener"&#10; &gt;Vagrant安装配置&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://windrocblog.sinaapp.com/?p=1145" target="_blank" rel="noopener"&#10; &gt;Windows 7使用Vagrant构建虚拟开发环境&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://chenpeng.info/html/1951" target="_blank" rel="noopener"&#10; &gt;Vagrant+VirtualBox搭建统一开发环境&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Cygwin 安装</title><link>https://courages.us/cygwin-%E5%AE%89%E8%A3%85/</link><pubDate>Wed, 23 Jul 2014 20:40:01 +0800</pubDate><guid>https://courages.us/cygwin-%E5%AE%89%E8%A3%85/</guid><description>&lt;p&gt;在windows 8.1上安装&lt;a class="link" href="https://www.cygwin.com/" target="_blank" rel="noopener"&#10; &gt;Cygwin&lt;/a&gt;真的是非常蛋疼，网络一会儿就会自己停了，只能取消重试。为了装上php，找到了一个好东西：&lt;a class="link" href="http://zengrong.net/post/1792.htm" target="_blank" rel="noopener"&#10; &gt;apt-cyg&lt;/a&gt;，Cygwin的包管理器，有点像ubuntu的apt-get，强烈推荐。&lt;br&gt;&#10;安装apt-cyg很简单，但是国内访问googlecode非常不方便，这里提供一个&lt;a class="link" href="https://courages.us/wp-content/uploads/2014/07/apt-cyg.rar" target="_blank" rel="noopener"&#10; &gt;下载链接&lt;/a&gt;（注意：githut上的&lt;a class="link" href="https://github.com/transcode-open/apt-cyg" target="_blank" rel="noopener"&#10; &gt;这个链接&lt;/a&gt;跟&lt;a class="link" href="htpp://code.google.com/p/apt-cyg" &gt;googlecode&lt;/a&gt;上不一样的）．&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://courages.us/wp-content/uploads/2014/07/apt-cyg.rar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod +x apt-cyg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mv apt-cyg /usr/local/bin/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后就可以用了，例如查找包，安装包，指定源。这里也推荐下另外一个cygwinports（ftp://ftp.cygwinports.org/pub/cygwinports），当你找不你想要的就可以来这里找。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-cyg -m ftp://ftp.cygwinports.org/pub/cygwinports find php&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-cyg -m http://mirrors.163.com/cygwin find openssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-cyg install openssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="apt-cyg" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;br&gt;&#10;安装完成后就可以使用ssh了。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="htpp://code.google.com/p/apt-cyg" &gt;apt-cyg&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://zengrong.net/post/1792.htm" target="_blank" rel="noopener"&#10; &gt;CYGWIN的包管理器：APT-CYG&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://zengrong.net/post/2048.htm" target="_blank" rel="noopener"&#10; &gt;CYGWIN在WINDOWS8.1上的CHMOD无法修改权限&lt;/a&gt;&lt;/p&gt;</description></item><item><title>真正的喜欢是不会那么容易放弃的</title><link>https://courages.us/%E7%9C%9F%E6%AD%A3%E7%9A%84%E5%96%9C%E6%AC%A2%E6%98%AF%E4%B8%8D%E4%BC%9A%E9%82%A3%E4%B9%88%E5%AE%B9%E6%98%93%E6%94%BE%E5%BC%83%E7%9A%84/</link><pubDate>Sun, 02 Mar 2014 21:27:14 +0800</pubDate><guid>https://courages.us/%E7%9C%9F%E6%AD%A3%E7%9A%84%E5%96%9C%E6%AC%A2%E6%98%AF%E4%B8%8D%E4%BC%9A%E9%82%A3%E4%B9%88%E5%AE%B9%E6%98%93%E6%94%BE%E5%BC%83%E7%9A%84/</guid><description>&lt;p&gt;真正的喜欢是不会那么容易放弃的，再次记录下，以免找不到。来自&lt;a class="link" href="http://site.douban.com/106407/widget/notes/335509/note/157592419/" target="_blank" rel="noopener"&#10; &gt;这里&lt;/a&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/s1.homezz.com/201403/4966/43686_o.jpg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/s1.homezz.com/201403/4966/43688_o.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;a class="link" href="https://courages.us/wp-content/uploads/external/image-unavailable.svg" &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://courages.us/wp-content/uploads/external/image-unavailable.svg"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;作者：家训&lt;/p&gt;</description></item><item><title>Hello,World!</title><link>https://courages.us/hello-world/</link><pubDate>Wed, 13 Feb 2013 08:21:50 +0800</pubDate><guid>https://courages.us/hello-world/</guid><description>&lt;p&gt;时间过的真快，仿佛没有留下什么，不如开个博客记录一下吧&lt;/p&gt;&#10;</description></item></channel></rss>