typora使用

2018年8月26日 · 0 分钟 · 天边的星星

轻量级微服务架构下总结

轻量级的微服务 总结:整个微服务使用Spring boot + Docker 冰山上,ZooKeeper服务注册、Node.js服务网关、Jenkins等冰山下。 总体上可以分为:开发框架(上)、容器技术(上)、注册中心(下)、调用中心、部署中心、日志中心、监控中心、追踪中心、消息中心、配置中心。 注册中心:用于注册微服务相关配置信息的中心 调用中心:用于提供给前端调用的统一入口(我们选用Node.js实现) 部署中心:用于编译并打包微服务源码并将其部署到Docker引擎中(Jenkins) 日志中心:用于收集并管理微服务应用程序中产生的日志 监控中心:用于监控微服务的实时运行状况 追踪中心:用于最终微服务的调用轨迹 消息中心:用于解耦服务之间的调用关系 配置中心:用于管理微服务应用程序所需的配置参数 (我们认为,中心分为两类:一类是含有业务意义的中心,另一类是不含业务意义的中心-只是技术层面的中心) 微服务日志 总结:docker中查看日志路径 /var/lib/docker/containers/<container_id目录看到一个container_id-json.log文件,Docker默认使用docker logs查看的就是这些json文件,Docker默认使用Json-file格式,还有其他格式 none:容器不输出任何日志 json-file:容器默认输出的日志以json格式写入文件中(默认) syslog:容器输出日志写入宿主机的Syslog中 journald:容器输出日志写入宿主机的Journald中 gelf:容器输出的日志以GELF(Graylog Extended log fromat)格式写入Graylog中 fluentd: 容器输出的日志写入宿主机的Fluentd中 awalogs:容器输出日志写入Ammazon CloudWatch Logs中 splunk:容器输出日志写入splunk中 etwlogs:容器输出日志写入ETW (event tracing for windows)中 gcplogs:容器输出日志写入GCP(Google Cloud Platform)中 nats:容器输出日志写入NATS服务器中 docker中 –log-driver参数配置日志驱动 –log-opt max-size –log-opt max-file 分别设置日志文件大小和日志文件数量 例如:docker run -p 80:80 –log-dirver json-file –log-opt max-size=10m –log-opt max-file=3 –name xxx 容器名称 docker日志驱动(https://docs.docker.com/engine/admin/logging/overview/) ...

2018年8月26日 · 1 分钟 · 天边的星星

Android实现斑马Wifi打印机打印小票图片

最近一期做WiFi打印机打印小票功能,其中有一个功能点是把Logo打印在小票上面。 实现思路就是对网上的思路进行一下调整修改,方便Android端调用,很简单; 测试的打印机型号:Zebra GK888T Bitmap to ZPL <div class="line"> 1 </div> <div class="line"> 2 </div> <div class="line"> 3 </div> <div class="line"> 4 </div> <div class="line"> 5 </div> <div class="line"> 6 </div> <div class="line"> 7 </div> <div class="line"> 8 </div> <div class="line"> 9 </div> <div class="line"> 10 </div> <div class="line"> 11 </div> <div class="line"> 12 </div> <div class="line"> 13 </div> <div class="line"> 14 </div> <div class="line"> 15 </div> <div class="line"> 16 </div> <div class="line"> 17 </div> <div class="line"> 18 </div> <div class="line"> 19 </div> <div class="line"> 20 </div> <div class="line"> 21 </div> <div class="line"> 22 </div> <div class="line"> 23 </div> <div class="line"> 24 </div> <div class="line"> 25 </div> <div class="line"> 26 </div> <div class="line"> 27 </div> <div class="line"> 28 </div> <div class="line"> 29 </div> <div class="line"> 30 </div> <div class="line"> 31 </div> <div class="line"> 32 </div> <div class="line"> 33 </div> <div class="line"> 34 </div> <div class="line"> 35 </div> <div class="line"> 36 </div> <div class="line"> 37 </div> <div class="line"> 38 </div> <div class="line"> 39 </div> <div class="line"> 40 </div> <div class="line"> 41 </div> <div class="line"> 42 </div> <div class="line"> 43 </div> <div class="line"> 44 </div> <div class="line"> 45 </div> <div class="line"> 46 </div> <div class="line"> 47 </div> <div class="line"> 48 </div> <div class="line"> 49 </div> <div class="line"> 50 </div> <div class="line"> 51 </div> <div class="line"> 52 </div> <div class="line"> 53 </div> <div class="line"> 54 </div> <div class="line"> 55 </div> <div class="line"> 56 </div> <div class="line"> 57 </div> <div class="line"> 58 </div> <div class="line"> 59 </div> <div class="line"> 60 </div> <div class="line"> 61 </div> <div class="line"> 62 </div> <div class="line"> 63 </div> <div class="line"> 64 </div> <div class="line"> 65 </div> <div class="line"> 66 </div> <div class="line"> 67 </div> <div class="line"> 68 </div> <div class="line"> 69 </div> <div class="line"> 70 </div> <div class="line"> 71 </div> <div class="line"> 72 </div> <div class="line"> 73 </div> <div class="line"> 74 </div> <div class="line"> 75 </div> <div class="line"> 76 </div> <div class="line"> 77 </div> <div class="line"> 78 </div> <div class="line"> 79 </div> <div class="line"> 80 </div> <div class="line"> 81 </div> <div class="line"> 82 </div> <div class="line"> 83 </div> <div class="line"> 84 </div> <div class="line"> 85 </div> <div class="line"> 86 </div> <div class="line"> 87 </div> <div class="line"> 88 </div> <div class="line"> 89 </div> <div class="line"> 90 </div> <div class="line"> 91 </div> <div class="line"> 92 </div> <div class="line"> 93 </div> <div class="line"> 94 </div> <div class="line"> 95 </div> <div class="line"> 96 </div> <div class="line"> 97 </div> <div class="line"> 98 </div> <div class="line"> 99 </div> <div class="line"> 100 </div> <div class="line"> 101 </div> <div class="line"> 102 </div> <div class="line"> 103 </div> <div class="line"> 104 </div> <div class="line"> 105 </div> <div class="line"> 106 </div> <div class="line"> 107 </div> <div class="line"> 108 </div> <div class="line"> 109 </div> <div class="line"> 110 </div> <div class="line"> 111 </div> <div class="line"> 112 </div> <div class="line"> 113 </div> <div class="line"> 114 </div> <div class="line"> 115 </div> <div class="line"> 116 </div> <div class="line"> 117 </div> <div class="line"> 118 </div> <div class="line"> 119 </div> <div class="line"> 120 </div> <div class="line"> 121 </div> <div class="line"> 122 </div> <div class="line"> 123 </div> <div class="line"> 124 </div> <div class="line"> 125 </div> <div class="line"> 126 </div> <div class="line"> 127 </div> <div class="line"> 128 </div> <div class="line"> 129 </div> <div class="line"> 130 </div> <div class="line"> 131 </div> <div class="line"> 132 </div> <div class="line"> 133 </div> <div class="line"> 134 </div> <div class="line"> 135 </div> <div class="line"> 136 </div> <div class="line"> 137 </div> <div class="line"> 138 </div> <div class="line"> 139 </div> <div class="line"> 140 </div> <div class="line"> 141 </div> <div class="line"> 142 </div> <div class="line"> 143 </div> <div class="line"> 144 </div> <div class="line"> 145 </div> <div class="line"> 146 </div> <div class="line"> 147 </div> <div class="line"> 148 </div> <div class="line"> 149 </div> <div class="line"> 150 </div> <div class="line"> 151 </div> <div class="line"> 152 </div> <div class="line"> 153 </div> <div class="line"> 154 </div> <div class="line"> 155 </div> <div class="line"> 156 </div> <div class="line"> 157 </div> <div class="line"> 158 </div> <div class="line"> 159 </div> <div class="line"> 160 </div> <div class="line"> 161 </div> <div class="line"> 162 </div> <div class="line"> 163 </div> <div class="line"> 164 </div> <div class="line"> 165 </div> <div class="line"> 166 </div> <div class="line"> 167 </div> <div class="line"> 168 </div> <div class="line"> 169 </div> <div class="line"> 170 </div> <div class="line"> 171 </div> <div class="line"> 172 </div> <div class="line"> 173 </div> <div class="line"> 174 </div> <div class="line"> 175 </div> <div class="line"> 176 </div> <div class="line"> 177 </div> <div class="line"> 178 </div> <div class="line"> 179 </div> <div class="line"> 180 </div> <div class="line"> 181 </div> <div class="line"> 182 </div> <div class="line"> 183 </div> <div class="line"> 184 </div> <div class="line"> 185 </div> <div class="line"> 186 </div> <div class="line"> 187 </div> <div class="line"> 188 </div> <div class="line"> 189 </div> <div class="line"> 190 </div> <div class="line"> 191 </div> <div class="line"> 192 </div> <div class="line"> 193 </div> <div class="line"> 194 </div> <div class="line"> 195 </div> <div class="line"> 196 </div> <div class="line"> 197 </div> <div class="line"> 198 </div> </td> <td class="code"> <div class="top-box hide"> <div class="alert-info"> </div> </div> <div class="line"> </div> <div class="line"> <span class="comment">/**</span> </div> <div class="line"> </div> <div class="line"> */ </div> <div class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ZPLImageConverter</span> </span>{ </div> <div class="line"> </div> <div class="line"> <span class="keyword">private</span> Context context; </div> <div class="line"> </div> <div class="line"> <span class="function"><span class="keyword">public</span> <span class="title">ZPLImageConverter</span><span class="params">(Context context)</span> </span>{ </div> <div class="line"> <span class="keyword">this</span>.context = context; </div> <div class="line"> } </div> <div class="line"> </div> <div class="line"> <span class="keyword">private</span> <span class="keyword">int</span> blackLimit = <span class="number">380</span>; </div> <div class="line"> <span class="keyword">private</span> <span class="keyword">int</span> total; </div> <div class="line"> <span class="keyword">private</span> <span class="keyword">int</span> widthBytes; </div> <div class="line"> <span class="keyword">private</span> <span class="keyword">boolean</span> compressHex = <span class="keyword">false</span>; </div> <div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> Map<Integer, String> mapCode = <span class="keyword">new</span> HashMap<Integer, String>(); </div> <div class="line"> </div> <div class="line"> { </div> <div class="line"> mapCode.put(<span class="number">1</span>, <span class="string">&#8220;G&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">2</span>, <span class="string">&#8220;H&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">3</span>, <span class="string">&#8220;I&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">4</span>, <span class="string">&#8220;J&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">5</span>, <span class="string">&#8220;K&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">6</span>, <span class="string">&#8220;L&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">7</span>, <span class="string">&#8220;M&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">8</span>, <span class="string">&#8220;N&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">9</span>, <span class="string">&#8220;O&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">10</span>, <span class="string">&#8220;P&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">11</span>, <span class="string">&#8220;Q&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">12</span>, <span class="string">&#8220;R&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">13</span>, <span class="string">&#8220;S&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">14</span>, <span class="string">&#8220;T&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">15</span>, <span class="string">&#8220;U&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">16</span>, <span class="string">&#8220;V&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">17</span>, <span class="string">&#8220;W&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">18</span>, <span class="string">&#8220;X&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">19</span>, <span class="string">&#8220;Y&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">20</span>, <span class="string">&#8220;g&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">40</span>, <span class="string">&#8220;h&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">60</span>, <span class="string">&#8220;i&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">80</span>, <span class="string">&#8220;j&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">100</span>, <span class="string">&#8220;k&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">120</span>, <span class="string">&#8220;l&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">140</span>, <span class="string">&#8220;m&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">160</span>, <span class="string">&#8220;n&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">180</span>, <span class="string">&#8220;o&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">200</span>, <span class="string">&#8220;p&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">220</span>, <span class="string">&#8220;q&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">240</span>, <span class="string">&#8220;r&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">260</span>, <span class="string">&#8220;s&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">280</span>, <span class="string">&#8220;t&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">300</span>, <span class="string">&#8220;u&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">320</span>, <span class="string">&#8220;v&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">340</span>, <span class="string">&#8220;w&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">360</span>, <span class="string">&#8220;x&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">380</span>, <span class="string">&#8220;y&#8221;</span>); </div> <div class="line"> mapCode.put(<span class="number">400</span>, <span class="string">&#8220;z&#8221;</span>); </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">public</span> String <span class="title">convertFromImg</span><span class="params">(Bitmap image)</span> <span class="keyword">throws</span> IOException </span>{ </div> <div class="line"> </div> <div class="line"> String cuerpo = createBody(image); </div> <div class="line"> <span class="keyword">if</span>(compressHex) </div> <div class="line"> cuerpo = encodeHexAscii(cuerpo); </div> <div class="line"> <span class="keyword">return</span> headDoc() + cuerpo + footDoc(); </div> <div class="line"> } </div> <div class="line"> </div> <div class="line"> <span class="function"><span class="keyword">private</span> String <span class="title">createBody</span><span class="params">(Bitmap originalImage)</span> <span class="keyword">throws</span> IOException </span>{ </div> <div class="line"> StringBuffer sb = <span class="keyword">new</span> StringBuffer(); </div> <div class="line"> <span class="comment">// Graphics2D graphics = originalImage.createGraphics();</span> </div> <div class="line"> <span class="comment">// graphics.drawImage(originalImage, 0, 0, null);</span> </div> <div class="line"> </div> <div class="line"> <span class="keyword">int</span> height = originalImage.getHeight(); </div> <div class="line"> <span class="keyword">int</span> width = originalImage.getWidth(); </div> <div class="line"> <span class="keyword">int</span> rgb, red, green, blue, index=<span class="number"></span>; </div> <div class="line"> <span class="keyword">char</span> auxBinaryChar[] = {<span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>}; </div> <div class="line"> widthBytes = width/<span class="number">8</span>; </div> <div class="line"> <span class="keyword">if</span>(width%<span class="number">8</span> > <span class="number"></span>){ </div> <div class="line"> widthBytes= (((<span class="keyword">int</span>)(width / <span class="number">8</span>)) + <span class="number">1</span>); </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> widthBytes= width/<span class="number">8</span>; </div> <div class="line"> } </div> <div class="line"> <span class="keyword">this</span>.total = widthBytes*height; </div> <div class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> h = <span class="number"></span>; h<height; h++) </div> <div class="line"> { </div> <div class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> w = <span class="number"></span>; w<width; w++) </div> <div class="line"> { </div> <div class="line"> <span class="comment">// rgb = originalImage.getRGB(w, h);</span> </div> <div class="line"> rgb = originalImage.getPixel(w, h); </div> <div class="line"> red = (rgb >> <span class="number">16</span> ) & <span class="number">0x000000FF</span>; </div> <div class="line"> green = (rgb >> <span class="number">8</span> ) & <span class="number">0x000000FF</span>; </div> <div class="line"> blue = (rgb) & <span class="number">0x000000FF</span>; </div> <div class="line"> <span class="keyword">char</span> auxChar = <span class="string">&#8216;1&#8217;</span>; </div> <div class="line"> <span class="keyword">int</span> totalColor = red + green + blue; </div> <div class="line"> <span class="keyword">if</span>(totalColor>blackLimit){ </div> <div class="line"> auxChar = <span class="string">&#8216;0&#8217;</span>; </div> <div class="line"> } </div> <div class="line"> auxBinaryChar[index] = auxChar; </div> <div class="line"> index++; </div> <div class="line"> <span class="keyword">if</span>(index==<span class="number">8</span> || w==(width-<span class="number">1</span>)){ </div> <div class="line"> sb.append(fourByteBinary(<span class="keyword">new</span> String(auxBinaryChar))); </div> <div class="line"> auxBinaryChar = <span class="keyword">new</span> <span class="keyword">char</span>[]{<span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>, <span class="string">&#8216;0&#8217;</span>}; </div> <div class="line"> index=<span class="number"></span>; </div> <div class="line"> } </div> <div class="line"> } </div> <div class="line"> sb.append(<span class="string">&#8220;\n&#8221;</span>); </div> <div class="line"> } </div> <div class="line"> <span class="keyword">return</span> sb.toString(); </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">private</span> String <span class="title">fourByteBinary</span><span class="params">(String binaryStr)</span></span>{ </div> <div class="line"> <span class="keyword">int</span> decimal = Integer.parseInt(binaryStr,<span class="number">2</span>); </div> <div class="line"> <span class="keyword">if</span> (decimal><span class="number">15</span>){ </div> <div class="line"> <span class="keyword">return</span> Integer.toString(decimal,<span class="number">16</span>).toUpperCase(); </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> <span class="keyword">return</span> <span class="string">&#8220;0&#8221;</span> + Integer.toString(decimal,<span class="number">16</span>).toUpperCase(); </div> <div class="line"> } </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">private</span> String <span class="title">encodeHexAscii</span><span class="params">(String code)</span></span>{ </div> <div class="line"> <span class="keyword">int</span> maxlinea = widthBytes * <span class="number">2</span>; </div> <div class="line"> StringBuffer sbCode = <span class="keyword">new</span> StringBuffer(); </div> <div class="line"> StringBuffer sbLinea = <span class="keyword">new</span> StringBuffer(); </div> <div class="line"> String previousLine = <span class="keyword">null</span>; </div> <div class="line"> <span class="keyword">int</span> counter = <span class="number">1</span>; </div> <div class="line"> <span class="keyword">char</span> aux = code.charAt(<span class="number"></span>); </div> <div class="line"> <span class="keyword">boolean</span> firstChar = <span class="keyword">false</span>; </div> <div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; i< code.length(); i++ ){ </div> <div class="line"> <span class="keyword">if</span>(firstChar){ </div> <div class="line"> aux = code.charAt(i); </div> <div class="line"> firstChar = <span class="keyword">false</span>; </div> <div class="line"> <span class="keyword">continue</span>; </div> <div class="line"> } </div> <div class="line"> <span class="keyword">if</span>(code.charAt(i)==<span class="string">&#8216;\n&#8217;</span>){ </div> <div class="line"> <span class="keyword">if</span>(counter>=maxlinea && aux==<span class="string">&#8216;0&#8217;</span>){ </div> <div class="line"> sbLinea.append(<span class="string">&#8220;,&#8221;</span>); </div> <div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span>(counter>=maxlinea && aux==<span class="string">&#8216;F&#8217;</span>){ </div> <div class="line"> sbLinea.append(<span class="string">&#8220;!&#8221;</span>); </div> <div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (counter><span class="number">20</span>){ </div> <div class="line"> <span class="keyword">int</span> multi20 = (counter/<span class="number">20</span>)*<span class="number">20</span>; </div> <div class="line"> <span class="keyword">int</span> resto20 = (counter%<span class="number">20</span>); </div> <div class="line"> sbLinea.append(mapCode.get(multi20)); </div> <div class="line"> <span class="keyword">if</span>(resto20!=<span class="number"></span>){ </div> <div class="line"> sbLinea.append(mapCode.get(resto20) + aux); </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> sbLinea.append(aux); </div> <div class="line"> } </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> sbLinea.append(mapCode.get(counter) + aux); </div> <div class="line"> <span class="keyword">if</span>(mapCode.get(counter)==<span class="keyword">null</span>){ </div> <div class="line"> } </div> <div class="line"> } </div> <div class="line"> counter = <span class="number">1</span>; </div> <div class="line"> firstChar = <span class="keyword">true</span>; </div> <div class="line"> <span class="keyword">if</span>(sbLinea.toString().equals(previousLine)){ </div> <div class="line"> sbCode.append(<span class="string">&#8220;:&#8221;</span>); </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> sbCode.append(sbLinea.toString()); </div> <div class="line"> } </div> <div class="line"> previousLine = sbLinea.toString(); </div> <div class="line"> sbLinea.setLength(<span class="number"></span>); </div> <div class="line"> <span class="keyword">continue</span>; </div> <div class="line"> } </div> <div class="line"> <span class="keyword">if</span>(aux == code.charAt(i)){ </div> <div class="line"> counter++; </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> <span class="keyword">if</span>(counter><span class="number">20</span>){ </div> <div class="line"> <span class="keyword">int</span> multi20 = (counter/<span class="number">20</span>)*<span class="number">20</span>; </div> <div class="line"> <span class="keyword">int</span> resto20 = (counter%<span class="number">20</span>); </div> <div class="line"> sbLinea.append(mapCode.get(multi20)); </div> <div class="line"> <span class="keyword">if</span>(resto20!=<span class="number"></span>){ </div> <div class="line"> sbLinea.append(mapCode.get(resto20) + aux); </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> sbLinea.append(aux); </div> <div class="line"> } </div> <div class="line"> } <span class="keyword">else</span> { </div> <div class="line"> sbLinea.append(mapCode.get(counter) + aux); </div> <div class="line"> } </div> <div class="line"> counter = <span class="number">1</span>; </div> <div class="line"> aux = code.charAt(i); </div> <div class="line"> } </div> <div class="line"> } </div> <div class="line"> <span class="keyword">return</span> sbCode.toString(); </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">private</span> String <span class="title">headDoc</span><span class="params">()</span> </span>{ </div> <div class="line"> String str = <span class="comment">/*&#8221;^XA &#8221; +*/</span> </div> <div class="line"> <span class="string">&#8220;^FO10,50^GFA,&#8221;</span>+ total + <span class="string">&#8220;,&#8221;</span>+ total + <span class="string">&#8220;,&#8221;</span> + widthBytes +<span class="string">&#8220;, &#8220;</span>; </div> <div class="line"> <span class="keyword">return</span> str; </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">private</span> String <span class="title">footDoc</span><span class="params">()</span></span>{ </div> <div class="line"> String str = <span class="string">&#8220;^FS&#8221;</span><span class="comment">/*+ &#8220;^XZ&#8221;*/</span>; </div> <div class="line"> <span class="keyword">return</span> str; </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setCompressHex</span><span class="params">(<span class="keyword">boolean</span> compressHex)</span> </span>{ </div> <div class="line"> <span class="keyword">this</span>.compressHex = compressHex; </div> <div class="line"> } </div> <div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setBlacknessLimitPercentage</span><span class="params">(<span class="keyword">int</span> percentage)</span></span>{ </div> <div class="line"> blackLimit = (percentage * <span class="number">768</span> / <span class="number">100</span>); </div> <div class="line"> } </div> <div class="line"> } </div> </td> </tr> 调用方式 就是把Bitmap对象转化为ZPL编码格式,并把转化后的内容塞到ZPL命令中,和打印机通过Wifi 连接,把组装后的命令发给打印机就可以了。 1 <div class="line"> 2 </div> <div class="line"> 3 </div> <div class="line"> 4 </div> <div class="line"> 5 </div> <div class="line"> 6 </div> <div class="line"> 7 </div> </td> <td class="code"> <div class="top-box hide"> <div class="alert-info"> </div> </div> <div class="line"> </div> <div class="line"> ZPLImageConverter zp = <span class="keyword">new</span> ZPLImageConverter(context); </div> <div class="line"> zp.setCompressHex(<span class="keyword">true</span>); </div> <div class="line"> zp.setBlacknessLimitPercentage(<span class="number">50</span>); </div> <div class="line"> String str = zp.convertFromImg(myBitmap); </div> <div class="line"> zplStr += str; </div> <div class="line"> <span class="comment">//&#8230;</span> </div> </td> </tr> 其它命令的时候可以参考zebra打印机官方文档。 refs - [http://labelary.com/viewer.html](http://labelary.com/viewer.html) (在线调整打印小票样式细节) - [http://www.jcgonzalez.com/java-image-to-zpl-example](http://www.jcgonzalez.com/java-image-to-zpl-example) - https://jinfengli.github.io/2017/11/17/zebra_printer_logo/

2018年8月14日 · 11 分钟 · 天边的星星

Centos7安装MariaDB

1.yum -y install mariadb mariadb-server 2. 安装完成MariaDB,首先启动MariaDB systemctl start mariadb 3.设置开机启动 systemctl enable mariadb 4.接下来进行MariaDB的相关简单配置 systemctl enable mariadb 首先是设置密码,会提示先输入密码 Enter current password for root (enter for none):<–初次运行直接回车 设置密码 Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车 New password: <– 设置root用户的密码 Re-enter new password: <– 再输入一次你设置的密码 其他配置 Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车 Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车, Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车 Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车 ...

2018年7月8日 · 2 分钟 · 天边的星星

Linux CentOS完全卸载PHP及手动安装php

很无语,CentOS居然php版本才5.1.6,很多开源的CMS无法安装。 查看php版本命令: #php -v 下面的命令是删除不干净的 #yum remove php 因为使用这个命令以后再用 #php -v 还是会看到有版本信息的。。。。。 &nbsp; 必须强制删除,使用下面命令查看全部php软件包 #rpm -qa|grep php 提示如下: #php-pdo-5.1.6-27.el5_5.3 #php-mysql-5.1.6-27.el5_5.3 #php-xml-5.1.6-27.el5_5.3 #php-cli-5.1.6-27.el5_5.3 #php-common-5.1.6-27.el5_5.3 #php-gd-5.1.6-27.el5_5.3 注意卸载要先卸载没有依赖的 pdo是mysql的依赖项;common是gd的依赖项; 例如:# rpm -e php-pdo-5.1.6-27.el5_5.3 error: Failed dependencies: php-pdo is needed by (installed) php-mysql-5.1.6-27.el5_5.3.i386 所以正确的卸载顺序是(卸载顺序很重要): # rpm -e php-mysql-5.1.6-27.el5_5.3 rpm -e php-pdo-5.1.6-27.el5_5.3 rpm -e php-xml-5.1.6-27.el5_5.3 rpm -e php-cli-5.1.6-27.el5_5.3 rpm -e php-gd-5.1.6-27.el5_5.3 rpm -e php-common-5.1.6-27.el5_5.3 再用 # php -v 查看版本信息已经没有提示 ## 关于php-fpm nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。 PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。 PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。所以已经不需要另外下载了。 获取PHP下载地址 为什么选择5.6.30这个版本,因为学习,不是研究。诚然,7.0新增了很多PHP的新特性,性能上面也有些提升,如果是研究,倒是可以折腾一番,后面得空再讲7.0的版本以及如何在各个PHP版本之间切换。 打开php的官网:http://php.net/,查看php的版本列表 ![](https://images2015.cnblogs.com/blog/465728/201702/465728-20170222135638429-399501886.png) 右击,复制链接地址,在远程主机登录,下载该软件(我选的是Australia的主机mirror下载的) ``` wget http://au1.php.net/get/php-5.6.30.tar.gz/from/this/mirror </div> 下载下来的是一个mirror文件,改成我们需要的文件名 <div class="cnblogs_code"> <div class="top-box hide"> <div class="alert-info"> </div> </div> ``` #mv mirror php-5.6.30.tar.gz #tar zxvf php-5.6.30.tar.gz #cd php-5.6.30 配置安装 进入到目录,我们需要在安装的时候将安装目录配置到/usr/local/php/里 ![复制代码](https://common.cnblogs.com/images/copycode.gif) <div class="top-box hide"> <div class="alert-info"> </div> </div> ``` #./configure –prefix=/usr/local/php –with-curl –with-freetype-dir –with-gd –with-gettext –with-iconv-dir –with-kerberos –with-libdir=lib64 –with-libxml-dir –with-MySQL –with-mysqli –with-openssl –with-pcre-regex –with-pdo-mysql –with-pdo-sqlite –with-pear –with-png-dir –with-xmlrpc –with-xsl –with-zlib –enable-fpm –enable-bcmath –enable-libxml –enable-inline-optimization –enable-gd-native-ttf –enable-mbregex –enable-mbstring –enable-opcache –enable-pcntl –enable-shmop –enable-soap –enable-sockets –enable-sysvsem –enable-xml –enable-zip ...

2018年7月8日 · 3 分钟 · 天边的星星

Doxygen—程序文档生成工具

doxygen是一种从源代码生成文档的工具,支持多种语言。当然,源代码中需按一定的格式写注释,这些注释的格式也能帮助我们养成很好的注释习惯,可以尝试一下。 使用doxygen生成文档的方法很简单: ** $ doxygen -g –s $ doxygen </blockquote> 只需两个简单命令就可以了。 下面简单说明一下: 1、在工程目录下输入doxygen –s –g doxyconfig,其中doxyconfig为生成配置的文件名称,可任意指定,如果不指定,默认生成的配置文件为Doxyfile。man手册中没有详细说明选项的意思,这里不妨猜测一下,-s为simple,-g为generate,如果不指定-s,则生成的配置文件大约为63KB,行数约1500左右;反之,则约成10KB,行数约250左右。——此处猜测便根据这些测试而来的。 2、生成配置文件后,会出现提示信息,大意是说那个配置文件已经生成了,现在编辑它,之后输入doxygen Doxyfile(经实践证明,可以只输入doxygen命令)就可以产生工程的文档了。如果再次使用doxygen生产配置文件,则原来的就配置文件就变成了备份文件,添加后缀名.bak。 3、根据doxygen要求的注释格式来编写代码的注释,这一步要求比较高,而且工作量比较大。我们在文章后面还要讲解的。 下面介绍一下如何编辑生成的配置文件,我们以我们的串口程序为例子。 &nbsp; doxygen的配置文件与大多数linux平台的配置文件类似,就是一些关键字与值,配置文件中的值以YES和NO居多。 <blockquote> DOXYFILE_ENCODING = UTF-8,默认编码为UTF-8,这样可以支持中文。 PROJECT_NAME = “SerialPort”,项目名称,多个单词需要使用引号(“”)。 PROJECT_NUMBER = “1.0 beta”,项目版本号。 OUTPUT_DIRECTORY = serialport-html,输出文档的目录,如果为空,表示在当前目录,建议写上表示本工程的有意义的目录名称,比如我们就指定目录名称为serialport-html。 OUTPUT_LANGUAGE = English,文档语言,可以指定为Chinese。 IMAGE_PATH = image_dir,指定图片存放的目录,我们将图片放到当前目录下的image_dir目录中,因为我们的文档会出现测试图片示例。 HTML_OUTPUT= . ,html输出目录名称,默认为html目录,如果为“.”则表明为上述OUTPUT_DIRECTORY目录。 GENERATE_LATEX = NO,是否生成LaTeX,默认生成的,但我们不想生成。 好了,我们需要修改的就这么多,使用上述第2步骤的命令就可以生成一个漂亮的文档了。此外还有一些常用的设置选项。 INPUT =xxx,代码文件或目录,多个文件(目录)需要以空格隔开,如果不指定,表示当前目录,但是,如果指定目录且当前目录有代码文件的话,需要使用点号(“.”)表示当前目录。 FILE_PATTERNS=xxx,指定各种文件,我们常用为*.cpp *.c *.h,等等。 </blockquote> 上面基本就是我们常用的了,如果还想更深入了解,请移步到google网站。 下面就是真正需要花费一定时间的工作:为我们的程序作特定格式的注释。 doxygen支持多种注释风格,比如JavaDoc风格,它在C语言块注释开始处再添加一个星号(*)构成,如下: <div> 1. /** 2. * … text … 3. */ </div> Qt风格: <div> ``` 1. /*! ``` 2. * ... text ... ``` 3. */ </div> 上面两种方式中间的星号(*)是可选的,不过,个人认为添加会更美观一些。 C++风格的,——就是在C++注释后面再添加“/”: <div> ``` 1. /// ``` 2. /// ... text ... ``` 3. /// </div> 或者是这样: <div> ``` 1. //! ``` 2. //!... text ... ``` 3. //! </div> 经测试,实际使用中,如果是单行注释的话,可以使用如下的格式: <div> ``` 1. /** ... text ... */ ``` 2. /**&lt; ... text ... */ </div> 这些格式会被doxygen文档化,如果不想让它文档化,可以“破坏”这些格式,比如可以使用“正宗”的C/C++注释: <div> ``` 1. /* ... text ... */ ``` 2. // ... text ... </div> 上述风格来自doxygen的manual页面,具体地址为: [http://www.stack.nl/~dimitri/doxygen/docblocks.html](http://www.stack.nl/~dimitri/doxygen/docblocks.html) http://www.stack.nl/~dimitri/doxygen/index.html ``` # 自定义文档首页 # INPUT = README.md other_sources # USE_MDFILE_AS_MAINPAGE = README.md 下面介绍一下常用doxygen的命令,更多详细使用说明,请参考如下地址: [http://www.stack.nl/~dimitri/doxygen/commands.html#cmde](http://www.stack.nl/~dimitri/doxygen/commands.html#cmde) doxygen命令以@或开始,两种方式均可以。文中以@标记之。 <blockquote> @def 宏定义说明 @fn 函数 函数说明 @param 参数 参数说明 @return 返回值说明(出错返回什么值,等等) @file 文件名 @author 作者 @version 程序版本 @date 日期 @note 注解(注意事项,等) @warning 警告信息 @bug bug信息 @test 测试示例、信息 @todo 一些未完事宜 (@bug、@test以及@todo等会出现链接页面) 上面这样适合在函数、文件前面出现。 下面为生成特殊字体的命令: @a @e @em:其后的单个字(word)表现为斜体,以强调作用。如有多个word的话,使用*xxx xxx*代替。 @b:其后的word为粗体,多个则使用<b>xxx xxx**。 @c @p:字体表现为打印机字体,多个则使用<tt>xxx xxx</tt>。 </blockquote> ` ` `下面是一些具体的实例。 ` `在文件开始处的版权声明及其它信息:` ** /** * Copyleft (C) 2010 Late Lee * This program is tested on LINUX PLATFORM, WITH GCC 4.x. * The program is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY. Please feel free to * use the program, and I feel free to ignore the related * issues. Any questions or suggestions, or bugs, please * contact me at or e-mail to * if you want to do this. * @file serialport.c * @author Late Lee * @date Mon Jan 10 2011 * * @brief Some utils of the serial port, such as open the port, close * the port and setup the port. * @note This is a note. * @warning This is a warning. * @bug This is a bug. */ </blockquote> &nbsp; 在函数前的注释: &nbsp; <blockquote> /** * open_port – Open a serial port * * @param port : The port number, eg, open_port(1) will open com1 * * @return Return fd if success, otherwise will return -1 with some msg. */ </blockquote> 定义宏使用的注释: <blockquote> /** * @def error_exit * @brief A macro that prints the @a error msg and exit. */ #define error_exit(error) do{ fprintf(stderr, “%sn”, error); exit(0); } while(0) </blockquote> &nbsp; &nbsp; 或者你会说,这样的注释风格太麻烦了!不怕!现在有了跟emacs结合的doxymacs,在emacs中配置了doxymacs,这些注释是十分方便的!比如需要在文件前插入注释,按C-c d i即可,在函数前插入注释,按C-c d f即可,等等。具体的请移步到这里的文章:[http://www.latelee.org/embedded-linux/learning-elinux-4-my-emacs-ii](http://www.latelee.org/embedded-linux/learning-elinux-4-my-emacs-ii.html)及[http://www.latelee.org/embedded-linux/learning-elinux-4-my-emacs](http://www.latelee.org/embedded-linux/learning-elinux-4-my-emacs.html)。如果你使用的不是emacs,那Sorry,我也不太会,如果你懂,不妨分享一下。 这个串口程序的文档已经放到网站上了,这里main.c文件参考页面地址:[http://www.latelee.org/yetanothertest/serialport-html-cn/main_8c.html](http://www.latelee.org/yetanothertest/serialport-html-cn/main_8c.html) 此外,我们还测试生成中文文档,因此doxygen使用UTF8,因此只要将代码文件保存为utf8编码即可(使用Ultra Edit或notepad++等等编辑器很容易做到)。但这又引出一个问题,gcc并不支持utf8!经过google,发现gcc 4.4.0版本以后已经支持utf8了,因此,为了做这个测试,花了一个小时左右编译、安装高版本的gcc(我们使用4.4.5版本),结果,这个版本的gcc是支持utf8的。后来,又发现,如果使用“UTF-8 无BOM格式编码”格式保存源文件的话,在原来的gcc下也编译通过。因此如果想在程序中使用中文注释,建议以此格式保存,当然,在系统的locale不是中文的情况下看到的中文是乱码的。 1、尽信书则不如无书,我们建议各位到实践中试一试,这样学到的知识才是我们自己的,比如,在指定源代码目录中,我的测试文件main.c放在当前目录下,如果不指定“.”的话,doxygen便不会处理该文件,这是网上很多资料没有说明的,因此需要实践才能了解。 2、我们强烈建议各位到官方网站学习,因为其它地方绝大部分都出自官方网站,manual页面地址是: [http://www.stack.nl/~dimitri/doxygen/manual.html](http://www.stack.nl/~dimitri/doxygen/manual.html) ...

2018年7月6日 · 6 分钟 · 天边的星星

给你 60 家免费版权图片网站,以后别再跟我说找不到图了

无论是写文章、做 PPT 还是找壁纸、换头像,搜图片都是件费时却最出效果的事情。之前小美给大家分享了最好用无版权图片网站之一的 Pixabay,不过图片素材这种东西,尤其是可自由修改使用的图片素材,向来是嫌少不嫌多的。所以这次,小美就把私藏的 60 余家无版权图片网站分享给大家,这家找不到合适的图片?没关系,下一家就有了!从此再也不会被找图这件事情所束缚。 本次推荐分为第一找图梯队、第二找图梯队、精准找图、分门别类找图、备选方案以及最后的终极找图梯队组成。 第一找图梯队 根据二八定律,80% 的结果可能来自于 20% 的原因。这在找图片这件事上也适用。虽然这次推荐的无版权图片网站有数十家,但是真正好用的也是只有一部分,而这一部分就足够使用了。 Unsplash** 最知名的无版权图片网站,这家以风景为主,数量足够多,但是很多滤镜感太强,颜色太过厚重,比较适合做壁纸,事实上很多壁纸软件也是直接从这上面下载的图 Pixabay** 小美最常用的一家,可以说是全球最大的免费图片网站了。图多而且种类足够丰富。这其实也是一家集合网站,可以看到 Unsplash 家的很多图也能在 Pixabay 里搜到 Pexels** 这家也有很多精美的图片,而且比较好的一点是会有「一周精选」,平常没事的时候来收收图也挺好的 visualhunt** 数量超级多的无版权图片网站,可以根据颜色进行搜索 第二找图梯队 这里面是一些图片资源没有那么丰富,但是质量都还不错的,如果之前的网站没有找到合适的,可以在这里再次搜寻一下。 别样网** 找图新欢,旅行日常为主,图片多为用户自己上传,所以在其他地方很少见到 Gratisography** 每周都会更新,图片角度和题材都比较另类,人物图片不少,另外他家的 logo 也比较另类…… StreetWill 优点是图片都比较精致小众,缺点是更新慢 IM FREE** 图片分类详细,可按分类进行筛选 Magdeleine** 有编辑精选,图片也比较厚重 FancyCrave** 每天两张手工筛选精品照片,每张都在诉说一个故事 精准找图梯队 一般搜索图片都是用关键词进行搜索,搜索单一的关键词还好,一旦稍复杂些的就很容易搜索不出来,这时候你就需要一些精准找图方案。 Flickr** 第一个是雅虎著名的图片社区——Flickr,由于汇集了大批的摄影师,所以 Flickr 家的图片质量都相当之高,不过你可能会说 Flickr 的图片不都是有版权的吗?别急,在「授权」那里选择「所有创用CC」或者「允许商业用途」即可找到那些可以使用的图片啦 ps.由于 Flickr 目前没有简体中文版,所以搜索时用英文或者繁体中文会得到比较好的结果 Google** 第二个是我大谷歌,谷歌的图片搜索那是相当的强大,选择右侧的「工具」,可以自定义很多东西,包括大小、颜色及使用权限 分类找图 Life of Pix** 景色建筑为主,色调比较统一 ...

2018年6月12日 · 2 分钟 · 天边的星星

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disable firewalld 禁用: systemctl stop firewalld 2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。 启动一个服务:systemctl start firewalld.service 关闭一个服务:systemctl stop firewalld.service 重启一个服务:systemctl restart firewalld.service 显示一个服务的状态:systemctl status firewalld.service 在开机时启用一个服务:systemctl enable firewalld.service 在开机时禁用一个服务:systemctl disable firewalld.service 查看服务是否开机启动:systemctl is-enabled firewalld.service 查看已启动的服务列表:systemctl list-unit-files|grep enabled 3.配置firewalld-cmd <div> </div> <div> <div> </div> <div> </div> <div> </div> <div> </div> <div> 那怎么开启一个端口呢 </div> <div> 添加 </div> <div> </div> <div> 重新载入 </div> <div> </div> <div> 查看 </div> <div> </div> <div> 删除 </div> <div> </div> <div> </div> </div>

2018年6月10日 · 1 分钟 · 天边的星星

微信小程序开发总结

不支持HTML、没有 Dom。网页用的 JS、CSS 基本要全部重写,WXML 的语法和 HTML 差异还挺大,基本是一个个照着手册的属性去改。CSS 选择器不支持级联。 小程序源码打包后的大小限制为1M,超大传不上去。单次通过 wx.request传输的数据最大也是1M。 MINA 框架实现的 tab bar,最多5个 tab;通过 wx. navigateTo 推入后台的页面最多5层,超过会无法打开新页面。 小程序没有 webview 控件,自带的 view 和 text 又不支持图文混排,还不能动态 set WXML …… 所以小程序上的富文本也就只能做到固定焦点图+纯文本+emoji了 [二哈] 不支持 A 标签,无法打开普通网页。 未经腾讯公司授权的情况下,微信小程序的添加,必须是免费的,不得设置付费添加。 强制用户分享或关注:分享或关注后才能继续下一步操作。包括但不限于:分享或关注后方可解锁功能或能力,分享或关注后方查阅、下载图片或视频等。 不得滥用模板消息和客服消息,包括但不限于利用模板消息和客服消息骚扰用户、广告营销、向用户发送与客服咨询无关的任何文案、图片。 完成注册后,如帐号长期未登录,微信小程序可能被终止使用,终止使用后注册所使用的邮箱、身份证、微信号等信息可能将被取消注册状态。 除个体工商户类型可认证5个小程序外,其他类型一个主体可认证50个小程序 标签数量不得少于2个,最多不得超过5个,为确保点击区域,建议标签数量不超过4项 绑定开发者 > 登录微信公众平台小程序,进入用户身份- 开发者,新增绑定开发者。 > 个人主体小程序最多可绑定5个开发者,10个体验者。 > 未认证的组织类型小程序最多可绑定10个开发者,20个体验者 > 已认证的小程序最多可绑定20个开发者,40个体验者 > 代码大小限制2M以内(包括图片等所有资源) > 请问现在小程序代码支持多大? > 采用分包,可以到 4 M > wx.setStorage(OBJECT) 小程序存储的容量有多大限制?目前每个小程序限制5M 绑定开发者 ` 个人主体小程序最多可绑定5个开发者,10个体验者。 未认证的组织类型小程序最多可绑定10个开发者,20个体验者 已认证的小程序最多可绑定20个开发者,40个体验者。 ` 请求必须是https ...

2018年5月30日 · 1 分钟 · 天边的星星

使用 Doxygen 生成源码文档

Doxygen 是一个开源跨平台的,以类似 JavaDoc 风格编写软件参考文檔的工具 Getting started 创建配置文件 `doxygen -g &lt;config-&lt;span class="hljs-built_in">file&lt;/span>&gt;` 运行 doxygen `doxygen &lt;config-&lt;span class="hljs-built_in">file&lt;/span>&gt;` Configuration 项目名称 `&lt;span class="hljs-attr">PROJECT_NAME&lt;/span> = My Project` 项目简介 `&lt;span class="hljs-attr">PROJECT_BRIEF&lt;/span> = What a project` 项目 Logo `&lt;span class="hljs-attr">PROJECT_LOGO&lt;/span> = src/images/logo.png` 主页面 `&lt;span class="hljs-attr">USE_MDFILE_AS_MAINPAGE&lt;/span> = README.md` 文档的语言 `&lt;span class="hljs-attr">OUTPUT_LANGUAGE&lt;/span> = Chinese` 指定需要生成文档的文件,以空格分割 `&lt;span class="hljs-attr">INPUT&lt;/span> = ./src` 排除的文件 `&lt;span class="hljs-keyword">EXCLUDE&lt;/span> = .&lt;span class="hljs-regexp">/src/&lt;/span>Demo` 写入文档的路径 `&lt;span class="hljs-attr">OUTPUT_DIRECTORY&lt;/span> = ./docs` 是否搜索子目录 `&lt;span class="hljs-attr">RECURSIVE&lt;/span> = &lt;span class="hljs-literal">YES&lt;/span>` 标记指定一个或多个通配符模式 ...

2018年5月29日 · 1 分钟 · 天边的星星