代码拉取完成,页面将自动刷新
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>マクロス</title>
<link href="/atom.xml" rel="self"/>
<link href="http://www.upwzr.com/"/>
<updated>2016-09-01T19:47:38.429Z</updated>
<id>http://www.upwzr.com/</id>
<author>
<name>小灰机灰上天</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>暑假越南行(经验篇)</title>
<link href="http://www.upwzr.com/2016/09/02/vietnam-experience/"/>
<id>http://www.upwzr.com/2016/09/02/vietnam-experience/</id>
<published>2016-09-01T19:14:41.000Z</published>
<updated>2016-09-01T19:47:38.429Z</updated>
<content type="html"><![CDATA[<h2 id="友情链接"><a href="#友情链接" class="headerlink" title="友情链接"></a>友情链接</h2><p>想阅读我的游记请移步:(多图预警)<br><a href="/2016/08/29/summer-trip-to-Vietnam/">暑假越南行(一)南宁->河内</a><br><a href="/2016/09/01/summer-trip-to-Vietnam/">暑假越南行(二)顺化->岘港</a></p>
<p>未完:<br><a href="">暑假越南行(三)芽庄->大叻</a><br><a href="">暑假越南行(三)美奈->胡志明</a></p>
<h2 id="交通"><a href="#交通" class="headerlink" title="交通"></a>交通</h2><ul>
<li>在河内胡志明完全可以多做公交车。人很少,票价一般在7000盾左右。会有很贴近本地人的体验。</li>
<li><strong>顺化到岘港这一段路一定要坐火车体验</strong>,非常有特色,无论是火车还是景色。哪怕你没有经过顺化直接到了岘港(从北往南玩的方向),从岘港坐到顺化再回来也是值得的。</li>
<li>岘港到会安在地图上显示只有20多公里,骑摩托车过去的话大概需要接近1个小时(40左右的时速)。</li>
<li></li>
</ul>
<h2 id="钱和银行卡"><a href="#钱和银行卡" class="headerlink" title="钱和银行卡"></a>钱和银行卡</h2><ul>
<li>可以在金店换钱,河内三十六行街上有无数金店,汇率跟在友谊关基本是一样的。越往南方城市的金店汇率可能会越低。</li>
<li><strong>胡志明机场的汇率很高</strong>。如果是直接飞到胡志明往北玩的同学,可以在胡志明机场换钱。</li>
<li><strong>在标有银联标识的pos机上刷卡是不收任何手续费的</strong>。花多少钱扣多少钱。乐天超市、Big C、Vinmart、circle K 等等在越南比较常见的超市和便利店里直接刷卡会划算一些。</li>
<li>办一张华夏的卡感觉还是有必要的,每天第一笔取款不收各种手续费。这样就不用像我一样带了一路的人民币。。而且在ATM上取钱是实时汇率转换过来的,比直接换钱要划算。</li>
<li>给钱的时候要看好有几个零。。</li>
</ul>
<h2 id="物价"><a href="#物价" class="headerlink" title="物价"></a>物价</h2><ul>
<li>基本上除了在正规超市便利店之类的地方,商贩给你的价格跟本地人是不一样的。只能接受,砍价。</li>
<li>东西的价格合不合理,其实主要看自己心情。差不多的东西你觉得比国内便宜不少,那就干脆快乐地接受。</li>
<li>芽庄的榴莲和椰子很便宜。美奈的火龙果非常便宜。</li>
<li>上一条的经验当然不是指在旅游区,要到当地百姓实际生活的区域。尤其是芽庄,只要稍微离开酒店几条街就差不多。美奈的话,基本就是一条长长的街加上那个渔村,纯是面向游客的。</li>
<li>我非常建议各位在到每一个城市的时候,都先去正规一点的超市考察一下物价。尤其是水果的价格,外面的市场不可能会比超市要高。实际上我发现酸奶、矿泉水、咖啡、泡面等等类似的东西在大型超市里面是最便宜的。河内岘港芽庄我去了乐天和big C,胡志明我去了Vinmart。</li>
<li>还要推荐一下大超市里头的法棍,一米多长,只要不到4k(合人民币1块几毛钱)。尤其是刚出锅的(。→v←。)<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160805_143338.jpg" alt="岘港big C里面的法棍"></li>
</ul>
<h2 id="未完"><a href="#未完" class="headerlink" title="未完"></a>未完</h2>]]></content>
<summary type="html">
<h2 id="友情链接"><a href="#友情链接" class="headerlink" title="友情链接"></a>友情链接</h2><p>想阅读我的游记请移步:(多图预警)<br><a href="/2016/08/29/summer-trip-to-Vietn
</summary>
<category term="生活" scheme="http://www.upwzr.com/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="旅行" scheme="http://www.upwzr.com/tags/%E6%97%85%E8%A1%8C/"/>
<category term="越南" scheme="http://www.upwzr.com/tags/%E8%B6%8A%E5%8D%97/"/>
</entry>
<entry>
<title>暑假越南行(二)</title>
<link href="http://www.upwzr.com/2016/09/01/summer-trip-to-Vietnam/"/>
<id>http://www.upwzr.com/2016/09/01/summer-trip-to-Vietnam/</id>
<published>2016-08-31T19:28:01.000Z</published>
<updated>2016-09-01T19:40:12.166Z</updated>
<content type="html"><![CDATA[<p>需要看攻略的童鞋请直接跳至<a href="http://www.upwzr.com/2016/09/02/vietnam-experience/">经验篇</a>。</p>
<h2 id="2016-8-3-岘港"><a href="#2016-8-3-岘港" class="headerlink" title="2016.8.3 岘港"></a>2016.8.3 岘港</h2><p>新咖啡并没有从河内直达岘港的车,所以我实际上买到的是河内->顺化,顺化->岘港的车。在顺化只有半个小时的时间,所以并没有玩顺化。<br>顺化街道<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_074152.jpg" alt="img"></p>
<p>顺化去往岘港的途中。<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_092150.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_093203.jpg" alt="img"><br>这里 <strong>强烈推荐从顺化到岘港之间的这段路一定要坐一次火车来体检</strong>。后面的<a href="#交通">攻略</a>会具体说。汽车的话会通过好长好长的一段隧道,错过了一段好美好美的景色。</p>
<p>到岘港以后我决定步行去订的青旅,后来发现真的好远。。<br>远远的就看见这条大黄龙<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_104728.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_113312.jpg" alt="img"></p>
<p>民宅<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_115239.jpg" alt="img"></p>
<p>岘港的海滩<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_155330.jpg" alt="img"></p>
<p>在岘港我跟几个在sleeping bus上认识小伙伴一起租摩托车并在傍晚出发去了会安。<br>下面几张是在会安夜市上拍的。<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_202152.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_202414.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_202817.jpg" alt="img"><br>仔细看的话,可以发现有很多壁虎<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160803_203955.jpg" alt="img"></p>
<p>花110k买了一整个榴莲,吃到饱<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160805_104217.jpg" alt="img"></p>
<p>在去往山茶半岛的路上拍的海景。<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160805_104217.jpg" alt="img"></p>
<p>不过山茶半岛没去成。。租的摩托太坑了,一上坡就特么熄火。。推着翻过几个坡之后累的我蛋疼,干脆回去了。</p>
<p>离开前体验了下本地人消遣的方式之一。。<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160805_161045.jpg" alt="img"></p>
<p>感觉在岘港留下了不少遗憾,玩的不是很尽兴,希望以后会有机会再弥补吧。不过在岘港认识了来自上海的岘港通Jimmy帅哥,帮了我很多忙,这里也祝他创业顺利啦!还有超级老司机Michael,祝他。。约到性价比更高的妹子?</p>
]]></content>
<summary type="html">
<p>需要看攻略的童鞋请直接跳至<a href="http://www.upwzr.com/2016/09/02/vietnam-experience/">经验篇</a>。</p>
<h2 id="2016-8-3-岘港"><a href="#2016-8-3-岘港" class
</summary>
<category term="生活" scheme="http://www.upwzr.com/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="旅行" scheme="http://www.upwzr.com/tags/%E6%97%85%E8%A1%8C/"/>
<category term="越南" scheme="http://www.upwzr.com/tags/%E8%B6%8A%E5%8D%97/"/>
</entry>
<entry>
<title>暑假越南行(一)</title>
<link href="http://www.upwzr.com/2016/08/29/summer-trip-to-Vietnam/"/>
<id>http://www.upwzr.com/2016/08/29/summer-trip-to-Vietnam/</id>
<published>2016-08-28T16:00:00.000Z</published>
<updated>2016-09-01T19:36:11.608Z</updated>
<content type="html"><![CDATA[<h2 id="【2016-8-25-已更新完在越南境内的第三天】"><a href="#【2016-8-25-已更新完在越南境内的第三天】" class="headerlink" title="【2016.8.25 已更新完在越南境内的第三天】"></a>【2016.8.25 已更新完在越南境内的第三天】</h2><p>需要看攻略的童鞋请直接跳至<a href="http://www.upwzr.com/2016/09/02/vietnam-experience/">经验篇</a>。</p>
<h2 id="准备阶段"><a href="#准备阶段" class="headerlink" title="准备阶段"></a>准备阶段</h2><p>2016.6.3 开始写此文。之前的几个月办下了护照,看了些攻略。</p>
<h3 id="路线计划:"><a href="#路线计划:" class="headerlink" title="路线计划:"></a>路线计划:</h3><p>我只是在脑子里想了想大概的路线,因为打算自由一点,走一步算一步(其实是实在没耐心做详细的规划)。<br>河内 顺化 岘港 会安 芽庄 大叻 美奈 胡志明<br>从长沙出发到南宁,做大巴出关。</p>
<h3 id="待办:"><a href="#待办:" class="headerlink" title="待办:"></a>待办:</h3><p><del>签证 保险 买背包、一双徒步鞋</del></p>
<h2 id="出发啦"><a href="#出发啦" class="headerlink" title="出发啦"></a>出发啦</h2><h3 id="2016-7-31-南宁"><a href="#2016-7-31-南宁" class="headerlink" title="2016.7.31 南宁"></a>2016.7.31 南宁</h3><p>出发去南宁~在瓦舍订了一晚,听说是很棒的青旅。到了之后发现位置不是很好,但是里面的环境还不错。(忘了拍照)<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160731_205641.jpg" alt="img"></p>
<p>在夜市上吃到的一碗不知叫什么的粉<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160731_222154.jpg" alt="img"></p>
<h3 id="2016-8-1-南宁-河内"><a href="#2016-8-1-南宁-河内" class="headerlink" title="2016.8.1 南宁-河内"></a>2016.8.1 南宁-河内</h3><p>早上到车站,准备坐大巴出发<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_080821.jpg" alt="img"></p>
<p>越南那一侧的边检,在我们这边时没敢拍照。。</p>
<p><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_112540.jpg" alt="img"></p>
<p>话说我们的兵哥哥真不是盖的,无论是气势,纪律还是外观,比越南简直强太多了。。</p>
<p>从口岸去河内的路上<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_112548.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/IMG_20160801_145519.jpg" alt="img"></p>
<p>在离河内大概还有20多公里的时候,我们的大巴竟然 <strong>爆胎了!!!</strong>左后轮并列的两个胎全爆<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_153814.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_153902.jpg" alt="img"><br>倾斜的大巴,这要是爆的前胎的话,简直不敢想会有什么后果<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_154148.jpg" alt="img"><br>兵哥哥过来查看,丑爆的交警制服。。<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_154412.jpg" alt="img"></p>
<p>终于到了市里~<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_175203.jpg" alt="img"></p>
<p>在河内三十六行街吃到了人生中第一碗河粉。<strong>好吃到爆!</strong><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_192308.jpg" alt="img"></p>
<p>当晚的青旅,就在三十六行街<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_195540.jpg" alt="img"></p>
<p>还剑湖夜景<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_200800.jpg" alt="img"></p>
<p>湖边卖艺的欧洲帅哥<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_201847.jpg" alt="img"></p>
<p>๑乛◡乛๑<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160801_203526.jpg" alt="img"></p>
<h3 id="2016-8-2-河内"><a href="#2016-8-2-河内" class="headerlink" title="2016.8.2 河内"></a>2016.8.2 河内</h3><p>属于河内的一天</p>
<p><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_112209.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_112617.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_112954.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_113025.jpg" alt="img"><br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_115419.jpg" alt="img"></p>
<p>巴亭广场&胡志明纪念堂<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_132245.jpg" alt="img"></p>
<p>高地咖啡店里头点的法棍<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_135556.jpg" alt="img"></p>
<p>下午又遇到了在大巴上认识的大叔,超级超级nice的人,拉着我去他酒店歇脚,又拿饮料又泡茶,临走还多次嘱托我一个人要注意安全。合影就不贴上来了(//▽//)</p>
<p>晚上坐上了去岘港(实际是去顺化)的sleeping bus,是(在国内)比较出名的新咖啡。一天算是结束啦<br><img src="http://7xi8b3.com1.z0.glb.clouddn.com/blog/vietnamIMG_20160802_183318.jpg" alt="img"></p>
<p>感想:河内街头的摩的 <strong>不能坐</strong> ,无论他们怎样跟你打感情牌;掏钱的时候要注意数清楚有几个零;去便利店买酸奶喝,有个妹子跟我聊的很开心,老板娘也很善意,这在人人都想宰你一笔的河内来说真的好难得。。</p>
]]></content>
<summary type="html">
<h2 id="【2016-8-25-已更新完在越南境内的第三天】"><a href="#【2016-8-25-已更新完在越南境内的第三天】" class="headerlink" title="【2016.8.25 已更新完在越南境内的第三天】"></a>【2016.8.25
</summary>
<category term="生活" scheme="http://www.upwzr.com/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="旅行" scheme="http://www.upwzr.com/tags/%E6%97%85%E8%A1%8C/"/>
<category term="越南" scheme="http://www.upwzr.com/tags/%E8%B6%8A%E5%8D%97/"/>
</entry>
<entry>
<title>日语自学笔记</title>
<link href="http://www.upwzr.com/2016/08/28/japanese-learning-notes/"/>
<id>http://www.upwzr.com/2016/08/28/japanese-learning-notes/</id>
<published>2016-08-27T16:57:04.000Z</published>
<updated>2016-08-27T17:13:00.610Z</updated>
<content type="html"><![CDATA[<h2 id="浊音"><a href="#浊音" class="headerlink" title="浊音"></a>浊音</h2><p>对于じ和ぢ有一些比较特殊的地方。じ和ぢ的发音是一样的,じ[zi]读作ji,ぢ[di]读作ji,在打字时,zi和ji都会打出じ,而ぢ只能用di。</p>
]]></content>
<summary type="html">
<h2 id="浊音"><a href="#浊音" class="headerlink" title="浊音"></a>浊音</h2><p>对于じ和ぢ有一些比较特殊的地方。じ和ぢ的发音是一样的,じ[zi]读作ji,ぢ[di]读作ji,在打字时,zi和ji都会打出じ,而ぢ只能用di
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="日语" scheme="http://www.upwzr.com/tags/%E6%97%A5%E8%AF%AD/"/>
<category term="japanese" scheme="http://www.upwzr.com/tags/japanese/"/>
</entry>
<entry>
<title>hexo迁移心得</title>
<link href="http://www.upwzr.com/2016/08/26/hexo/"/>
<id>http://www.upwzr.com/2016/08/26/hexo/</id>
<published>2016-08-26T10:44:24.000Z</published>
<updated>2016-08-26T13:15:44.104Z</updated>
<content type="html"><![CDATA[<p>经过一番折腾,把博客从Jekyll迁移到了Hexo。不得不说Hexo的体验真的不错。有很多jekyll没有的特性。</p>
<h2 id="skip-render"><a href="#skip-render" class="headerlink" title="skip_render"></a>skip_render</h2><p>博客建立完之后想提交readme,结果放在source文件夹下的readme.md总是会被渲染成html。后来发现在根目录的__config.yml里有<code>skip_render</code>这个参数,用来定义不进行解析的文件。</p>
<pre><code>skip_render: readme.md
</code></pre><h2 id="生成sitemap"><a href="#生成sitemap" class="headerlink" title="生成sitemap"></a>生成sitemap</h2><p>先安装:</p>
<pre><code>npm install hexo-generator-sitemap --save
</code></pre><p>然后再根目录的<code>_config.yml</code>里设置:</p>
<pre><code>sitemap:
path: sitemap.xml
</code></pre>]]></content>
<summary type="html">
<p>经过一番折腾,把博客从Jekyll迁移到了Hexo。不得不说Hexo的体验真的不错。有很多jekyll没有的特性。</p>
<h2 id="skip-render"><a href="#skip-render" class="headerlink" title="skip_
</summary>
<category term="技术" scheme="http://www.upwzr.com/categories/%E6%8A%80%E6%9C%AF/"/>
<category term="hexo" scheme="http://www.upwzr.com/tags/hexo/"/>
<category term="blog" scheme="http://www.upwzr.com/tags/blog/"/>
</entry>
<entry>
<title>ioc要点简记</title>
<link href="http://www.upwzr.com/2016/08/24/ioc-notes/"/>
<id>http://www.upwzr.com/2016/08/24/ioc-notes/</id>
<published>2016-08-23T17:50:45.000Z</published>
<updated>2016-09-01T19:39:03.797Z</updated>
<content type="html"><![CDATA[<blockquote>
<p>文中资料出处:<br><a href="http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html" target="_blank" rel="external">浅谈IOC–说清楚IOC是什么</a><br><a href="https://phphub.org/topics/1954" target="_blank" rel="external">浅谈 Laravel 设计模式</a><br><a href="http://www.cnblogs.com/xingyukun/archive/2007/10/20/931331.html" target="_blank" rel="external">深度理解依赖注入</a></p>
</blockquote>
<h2 id="IOC的含义"><a href="#IOC的含义" class="headerlink" title="IOC的含义"></a>IOC的含义</h2><blockquote>
<p>IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。</p>
</blockquote>
<p>面向对象设计及编程的基本思想简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。</p>
<p>在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑。<br><img src="/img/2016-8-31-ioc-notes_1.png" alt="img"><br>伴随着应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。</p>
<p>IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。<br><img src="/img/2016-8-31-ioc-notes_2.png" alt="img"><br>由图可以看出,系统增加了在中间位置的第三方。此时构成系统的各个部分并没有耦合关系,而是是借助这个第三方来互相粘合。这个第三方也就是IOC容器的作用。在容器的穿针引线下,系统的各个部分才能结合起来发挥作用。如果图中没有IOC容器这个第三方存在,系统的各个部件彼此毫无联系。也就是说,在实现与变更A的时候,完全不用考虑与其他部件之间的影响。<br>这也就是IOC(控制反转)这个名字的含义: 软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。<br>软件系统在引入IOC容器之后,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。</p>
<pre><code>//主动依赖
function __construct() {
$this->user = new UserModel();
}
//被动依赖
function __construct(UserModel $user) {
$this->user = $user;
}
</code></pre><p>IOC中最基本的技术就是 <strong>反射(Reflection)</strong> 编程。反射通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象。这种编程方式可以让对象在生成时才决定到底是哪一种对象。很多框架中都是把“反射”做为最基本的技术手段。</p>
<h2 id="IOC的优缺点"><a href="#IOC的优缺点" class="headerlink" title="IOC的优缺点"></a>IOC的优缺点</h2><h3 id="优点"><a href="#优点" class="headerlink" title="优点"></a>优点</h3><ul>
<li>flexibility<ul>
<li>changing the implementation class for a widely used interface is simpler (e.g. replace a mock web service by the production instance)</li>
<li>changing the retrieval strategy for a given class is simpler (e.g. moving a service from the classpath to the JNDI tree)</li>
<li>adding interceptors is easy and done in a single place (e.g. adding a caching interceptor to a JDBC-based DAO)</li>
</ul>
</li>
<li>readability<br> -the project has one unified and consistent component model and is not littered with factories (e.g. DAO factories)<br> -the code is briefer and is not littered without dependency lookup code (e.g. calls to JNDI InitialContext)</li>
<li>testability<ul>
<li>dependencies are easy to replace mocks when they’re exposed through a constructor or setter</li>
<li>easier testing leads to more testing</li>
<li>more testing leads to better code quality, lower coupling, higher cohesion</li>
</ul>
</li>
</ul>
<p>我们大体可以得出这样的结论:一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。</p>
]]></content>
<summary type="html">
<blockquote>
<p>文中资料出处:<br><a href="http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html" target="_blank" rel="external">浅谈IOC–说清
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="laravel" scheme="http://www.upwzr.com/tags/laravel/"/>
<category term="软件工程" scheme="http://www.upwzr.com/tags/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/"/>
</entry>
<entry>
<title>laravel设计模式</title>
<link href="http://www.upwzr.com/2016/08/20/laravel-design-patterns/"/>
<id>http://www.upwzr.com/2016/08/20/laravel-design-patterns/</id>
<published>2016-08-20T15:29:17.000Z</published>
<updated>2016-09-01T19:38:45.349Z</updated>
<content type="html"><![CDATA[<h2 id="DI与IOC"><a href="#DI与IOC" class="headerlink" title="DI与IOC"></a>DI与IOC</h2><p>laravel中实现了DI依赖注入,如:</p>
<pre><code><?php
class UserController
{
private $user;
function __construct(UserModel $user) {
$this->user = $user;
}
}
$user = new UserController(new UserMonel());
?>
</code></pre><p><code>UserController</code>依赖<code>UserModel</code>,在实例化时,laravel会自动主注入UserModel实例。</p>
]]></content>
<summary type="html">
<h2 id="DI与IOC"><a href="#DI与IOC" class="headerlink" title="DI与IOC"></a>DI与IOC</h2><p>laravel中实现了DI依赖注入,如:</p>
<pre><code>&lt;?php
class
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="laravel" scheme="http://www.upwzr.com/tags/laravel/"/>
</entry>
<entry>
<title>composer用法</title>
<link href="http://www.upwzr.com/2016/07/10/composer-usages/"/>
<id>http://www.upwzr.com/2016/07/10/composer-usages/</id>
<published>2016-07-10T04:21:46.000Z</published>
<updated>2016-09-01T19:39:37.725Z</updated>
<content type="html"><![CDATA[<h2 id="composer-json"><a href="#composer-json" class="headerlink" title="composer.json"></a>composer.json</h2><p>要开始在你的项目中使用 Composer,你只需要一个<code>composer.json</code>文件。该文件包含了项目的依赖和其它的一些元数据。</p>
<p>首先需要指定<code>require key</code>的值<br><figure class="highlight json"><table><tr><td class="gutter"><pre><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></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"require"</span>: {</div><div class="line"> <span class="attr">"monolog/monolog"</span>: <span class="string">"1.0.*"</span></div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h2 id="包名"><a href="#包名" class="headerlink" title="包名"></a>包名</h2><p>包名应该包含供应商名和项目名</p>
<h3 id="包版本"><a href="#包版本" class="headerlink" title="包版本"></a>包版本</h3><ul>
<li>指定版本号 <code>1.0.2</code>,<code>1.0.0-dev</code>,<code>1.0.0-alpha3</code></li>
<li>范围 <code>>=1.0</code> <code>>=1.0,<2.0</code> <code>>=1.0,<1.1|>=1.2</code> <code>,</code>的优先级高于<code>|</code></li>
<li>通配符 <code>1.0.*</code></li>
<li>赋值运算符 <code>~1.2</code> 相当于<code>>=1.2,<2.0</code></li>
<li>允许依赖不稳定包 <code>@beta</code> <code>@dev</code></li>
</ul>
<p>形如<code>1.0.*@beta</code>,或者<code>dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7</code>这种明确了版本号的也是支持的。</p>
<p>波浪号运算符的意义在于,防止大版本更新而产生的兼容性问题。</p>
<h3 id="Dist"><a href="#Dist" class="headerlink" title="Dist"></a>Dist</h3><p>dist 指向一个存档,该存档是对一个资源包的某个版本的数据进行的打包。通常是已经发行的稳定版本。</p>
<h3 id="Source"><a href="#Source" class="headerlink" title="Source"></a>Source</h3><p>source 指向一个开发中的源。这通常是一个源代码仓库,例如<code>git</code>。当你想要对下载下来的资源包进行修改时,可以这样获取。</p>
<p>你可以使用其中任意一个,或者同时使用。这取决于其它的一些因素,比如<code>user-supplied</code> 选项和包的稳定性,前者将会被优先考虑。</p>
<h3 id="repositories"><a href="#repositories" class="headerlink" title="repositories"></a>repositories</h3><p>默认情况下 composer 只使用 packagist 作为包的资源库。通过指定资源库,你可以从其他地方获取资源包。</p>
<p>Repositories 并不是递归调用的,只能在Root包的 <code>composer.json</code> 中定义。附属包中的 <code>composer.json</code> 将被忽略。</p>
<p>支持一下类型的资源库:</p>
<ul>
<li>composer: 一个 composer 类型的资源库,是一个简单的网络服务器(HTTP、FTP、SSH)上的 <code>packages.json</code> 文件,它包含一个 <code>composer.json</code> 对象的列表,有额外的 <code>dist</code> 和/或 <code>source</code> 信息。这个 <code>packages.json</code> 文件是用一个 PHP 流加载的。你可以使用 <code>options</code> 参数来设定额外的流信息。</li>
<li>vcs: 从 <code>git</code>、<code>svn</code> 和 <code>hg</code> 取得资源。</li>
<li>pear: 从 <code>pear</code> 获取资源。</li>
<li>package: 如果你依赖于一个项目,它不提供任何对 composer 的支持,你就可以使用这种类型。你基本上就只需要内联一个 <code>composer.json</code> 对象。</li>
</ul>
<figure class="highlight json"><table><tr><td class="gutter"><pre><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></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"require"</span>: {</div><div class="line"> <span class="attr">"vendor/my-private-repo"</span>: <span class="string">"dev-master"</span></div><div class="line"> },</div><div class="line"> <span class="attr">"repositories"</span>: [</div><div class="line"> {</div><div class="line"> <span class="attr">"type"</span>: <span class="string">"vcs"</span>,</div><div class="line"> <span class="attr">"url"</span>: <span class="string">"git@github.com:vendor/my-private-repo.git"</span></div><div class="line"> }</div><div class="line"> ]</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="config"><a href="#config" class="headerlink" title="config"></a>config</h3><p>config字段仅适用于root项目。</p>
<p>几个常用的值:</p>
<ul>
<li>use-include-path: 默认为 <code>false</code>。如果为 <code>true</code>,Composer autoloader 还将在 PHP include path 中继续查找类文件。</li>
<li>preferred-install: 默认为 <code>auto</code>。它的值可以是 <code>source</code>、<code>dist</code> 或 <code>auto</code>。这个选项允许你设置 Composer 的默认安装方法。</li>
<li>github-protocols: 默认为 [“git”, “https”, “ssh”]。从 github.com 克隆时使用的协议优先级清单。</li>
<li>vendor-dir: 默认为 <code>vendor</code>。指定依赖安装目录</li>
<li>bin-dir: 默认为 <code>vendor/bin</code>。如果一个项目包含二进制文件,它们将被连接到这个目录。</li>
<li>cache-dir: unix 下默认为 <code>$home/cache</code>,Windows 下默认为 <code>C:\Users\<user>\AppData\Local\Composer</code>。用于存储 composer 所有的缓存文件。其子文件夹<code>cache-files-dir</code> <code>cache-repo-dir</code> <code>cache-vcs-dir</code>也可以分别指定路径。</li>
</ul>
<figure class="highlight json"><table><tr><td class="gutter"><pre><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></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"config"</span>: {</div><div class="line"> <span class="attr">"bin-dir"</span>: <span class="string">"bin"</span></div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="发布包相关"><a href="#发布包相关" class="headerlink" title="发布包相关"></a>发布包相关</h3><p><code>name</code> <code>description</code> 必填,<code>license</code> <code>authors</code> <code>support</code> 等是强烈建议填写的可选项。</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><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></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"authors"</span>: [</div><div class="line"> {</div><div class="line"> <span class="attr">"name"</span>: <span class="string">"Nils Adermann"</span>,</div><div class="line"> <span class="attr">"email"</span>: <span class="string">"naderman@naderman.de"</span>,</div><div class="line"> <span class="attr">"homepage"</span>: <span class="string">"http://www.naderman.de"</span>,</div><div class="line"> <span class="attr">"role"</span>: <span class="string">"Developer"</span></div><div class="line"> },</div><div class="line"> {</div><div class="line"> <span class="attr">"name"</span>: <span class="string">"Jordi Boggiano"</span>,</div><div class="line"> <span class="attr">"email"</span>: <span class="string">"j.boggiano@seld.be"</span>,</div><div class="line"> <span class="attr">"homepage"</span>: <span class="string">"http://seld.be"</span>,</div><div class="line"> <span class="attr">"role"</span>: <span class="string">"Developer"</span></div><div class="line"> }</div><div class="line"> ],</div><div class="line"> <span class="attr">"license"</span>: <span class="string">"MIT"</span>,</div><div class="line"> <span class="attr">"support"</span>: {</div><div class="line"> <span class="attr">"email"</span>: <span class="string">"support@example.org"</span>,</div><div class="line"> <span class="attr">"irc"</span>: <span class="string">"irc://irc.freenode.org/composer"</span></div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h2><p>在<code>composer.json</code>所在目录调用<code>install</code>命令</p>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">composer <span class="keyword">install</span></div></pre></td></tr></table></figure>
<p>install命令会将依赖下载到<code>vendor</code>目录,并会生成<code>composer.lock</code>锁文件。</p>
<h2 id="composer-lock"><a href="#composer-lock" class="headerlink" title="composer.lock"></a>composer.lock</h2><p>安装依赖后composer会把当前的确切版本号全部写入<code>composer.lock</code>,用来锁定版本。install命令会首先检查锁文件并根据锁文件指定的版本下载依赖。如果需要更新依赖的版本需要执行<code>update</code>命令。</p>
<figure class="highlight accesslog"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">composer update <span class="string">[monolog/monolog]</span></div></pre></td></tr></table></figure>
<blockquote>
<p>在团队协作开发时,<strong>应提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中</strong></p>
</blockquote>
<h2 id="自动加载"><a href="#自动加载" class="headerlink" title="自动加载"></a>自动加载</h2><p>Composer 生成了一个 <code>vendor/autoload.php</code> 文件,可在项目中引用它得到一个简单的自动加载支持。</p>
<figure class="highlight coffeescript"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="built_in">require</span> <span class="string">'vendor/autoload.php'</span>;</div></pre></td></tr></table></figure>
<p>也可以在 <code>composer.json</code> 的 <code>autoload</code> 字段中增加自己的 <code>autoloader</code>。当前composer支持<code>PSR-0</code> <code>PSR-4</code> <code>classmap</code> 和文件包含。官方提倡使用PSR-4标准的方式。</p>
<blockquote class="blockquote-center"><p>PSR-4 is the recommended way though since it offers greater ease of use (no need to regenerate the autoloader when you add classes). </p>
</blockquote>
<p>在 <code>composer.json</code> 中配置 <code>autoloader</code></p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><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></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"autoload"</span>: {</div><div class="line"> <span class="attr">"psr-4"</span>: {<span class="attr">"Wzr\\"</span>: <span class="string">"src/"</span>}</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>Composer 将注册一个 <code>PSR-4 autoloader</code> 到 <code>Wzr</code> 命名空间,且该命名空间映射到根目录的 <code>src</code> 文件夹,比如 <code>src/IsMonkey.php</code> 文件应该包含 <code>Wzr\IsMonkey</code> 类。</p>
<p>添加 <code>autoload</code> 字段后应该再次执行 <code>install</code> 来重新生成 <code>vendor/autoload.php</code> 文件。</p>
<p>命名空间一定要以<code>\\</code>来分隔,好处在这:(懒得翻译了<( ̄3 ̄)>)</p>
<blockquote class="blockquote-center"><p>Namespace prefixes must end in <code>\\</code> to avoid conflicts between similar prefixes. For example Foo would match classes in the FooBar namespace so the trailing backslashes solve the problem: <code>Foo\\</code> and <code>FooBar\\</code> are distinct. </p>
</blockquote>
<h2 id="发布"><a href="#发布" class="headerlink" title="发布"></a>发布</h2><h3 id="发布到-packagist"><a href="#发布到-packagist" class="headerlink" title="发布到 packagist"></a>发布到 packagist</h3><p>去<a href="https://packagist.org/" target="_blank" rel="external">网站</a>上发布,提交库来源地址即可。composer有些字段需要定义。移步<a href="#发布包相关">composer.json</a></p>
<h3 id="发布到vcs"><a href="#发布到vcs" class="headerlink" title="发布到vcs"></a>发布到vcs</h3><p>只要包含着<code>composer.json</code>的项目上传到版本仓库,你的库就可以通过composer安装。在<code>composer.json</code>中需要定义<code>name</code>和<code>description</code>字段。当然,依赖这类库时需要在<code>repositories</code>中声明库的来源。参见<a href="#repositories">repositories</a></p>
<h2 id="命令行"><a href="#命令行" class="headerlink" title="命令行"></a>命令行</h2><p>在日常使用中,运行 <code>composer</code> 或者 <code>composer list</code> 命令得到命令列表,然后结合 –help 命令获得详细的帮助信息。</p>
<p><strong>未完待续。。。</strong></p>
]]></content>
<summary type="html">
<h2 id="composer-json"><a href="#composer-json" class="headerlink" title="composer.json"></a>composer.json</h2><p>要开始在你的项目中使用 Composer,你只需要一
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="composer" scheme="http://www.upwzr.com/tags/composer/"/>
</entry>
<entry>
<title>git日常使用心得</title>
<link href="http://www.upwzr.com/2016/07/05/git-notes/"/>
<id>http://www.upwzr.com/2016/07/05/git-notes/</id>
<published>2016-07-04T16:00:00.000Z</published>
<updated>2016-07-05T13:13:25.649Z</updated>
<content type="html"><![CDATA[<h2 id="忽略文件"><a href="#忽略文件" class="headerlink" title="忽略文件"></a>忽略文件</h2><h3 id="忽略文件或文件夹只在本地需要使用"><a href="#忽略文件或文件夹只在本地需要使用" class="headerlink" title="忽略文件或文件夹只在本地需要使用"></a>忽略文件或文件夹只在本地需要使用</h3><p>此种情况为,文件或文件夹只在本地需要,不应该出现在远程仓库时。<br>在将忽略文件或路径更新到<code>.gitignore</code>后,若对于已经trace的文件,需要让git不再跟踪,执行下列命令:</p>
<pre><code>//目标为文件夹则需加入-r参数
git rm --cache /path/to/file
</code></pre><h3 id="文件或文件夹的改动不需要提交"><a href="#文件或文件夹的改动不需要提交" class="headerlink" title="文件或文件夹的改动不需要提交"></a>文件或文件夹的改动不需要提交</h3><p>有些文件或文件夹的改动不需要提交,则在更新<code>.gitignore</code>的同时也要执行执行:</p>
<pre><code>git update-index --assume-unchanged logs/*.log
</code></pre><p>此种情况下需要每位成员都在自己的本地仓库执行上述命令。</p>
]]></content>
<summary type="html">
<h2 id="忽略文件"><a href="#忽略文件" class="headerlink" title="忽略文件"></a>忽略文件</h2><h3 id="忽略文件或文件夹只在本地需要使用"><a href="#忽略文件或文件夹只在本地需要使用" class="head
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="git" scheme="http://www.upwzr.com/tags/git/"/>
</entry>
<entry>
<title>jquery实现表单上传图片预览</title>
<link href="http://www.upwzr.com/2016/06/03/form-image-preview/"/>
<id>http://www.upwzr.com/2016/06/03/form-image-preview/</id>
<published>2016-06-02T16:00:00.000Z</published>
<updated>2016-06-03T13:26:33.650Z</updated>
<content type="html"><![CDATA[<p>最近有个小页面需要实现图片上传预览,自己还不擅长javascript,迷茫的看了好久文档之后算是利用File API实现了这个事情。<br>js代码:</p>
<pre><code><script>
function preview(files){
for (var i = 0; i < files.length; i++) {
var file = files[i];
var reader = new FileReader();
reader.onload = (function(aImg) {
return function(e) {
//假设页面上的img元素id为showimg
$('#showimg') . attr('src', e.target.result);
};
})();
reader.readAsDataURL(file);
}
}
</script>
</code></pre><p>调用只要在input元素上加上<code>onchange="preview(this.files)"</code>。</p>
<blockquote>
<p>相关链接<br><a href="https://developer.mozilla.org/zh-CN/docs/Using_files_from_web_applications#%E4%BE%8B%E5%AD%90%EF%BC%9A%E6%98%BE%E7%A4%BA%E7%94%A8%E6%88%B7%E6%89%80%E9%80%89%E5%9B%BE%E7%89%87%E7%9A%84%E7%BC%A9%E7%95%A5%E5%9B%BE" target="_blank" rel="external">在web应用中使用文件 – Mozilla 文档</a><br>来自百度的一个上传组件<a href="http://fex.baidu.com/webuploader/" target="_blank" rel="external">http://fex.baidu.com/webuploader/</a></p>
</blockquote>
]]></content>
<summary type="html">
<p>最近有个小页面需要实现图片上传预览,自己还不擅长javascript,迷茫的看了好久文档之后算是利用File API实现了这个事情。<br>js代码:</p>
<pre><code>&lt;script&gt;
function preview(files){
</summary>
<category term="技术" scheme="http://www.upwzr.com/categories/%E6%8A%80%E6%9C%AF/"/>
<category term="html" scheme="http://www.upwzr.com/tags/html/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="jquery" scheme="http://www.upwzr.com/tags/jquery/"/>
</entry>
<entry>
<title>文件上传组件Web Uploader</title>
<link href="http://www.upwzr.com/2016/06/03/webuploader/"/>
<id>http://www.upwzr.com/2016/06/03/webuploader/</id>
<published>2016-06-02T16:00:00.000Z</published>
<updated>2016-06-03T14:10:08.394Z</updated>
<content type="html"><![CDATA[<p>WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。感觉对于实现图片上传预览,截屏等效功能会很方便。虽然我并没有用过。。</p>
<blockquote>
<p><a href="http://fex.baidu.com/webuploader/" target="_blank" rel="external">http://fex.baidu.com/webuploader/</a><br><a href="https://github.com/fex-team/webuploader/" target="_blank" rel="external">https://github.com/fex-team/webuploader/</a></p>
</blockquote>
]]></content>
<summary type="html">
<p>WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。感觉对于实现图片上传预览,截屏等效功能会很方便。虽然我并没有用过。。</p>
<blockquote>
<p><a href="http://f
</summary>
<category term="资料" scheme="http://www.upwzr.com/categories/%E8%B5%84%E6%96%99/"/>
<category term="api" scheme="http://www.upwzr.com/tags/api/"/>
<category term="library" scheme="http://www.upwzr.com/tags/library/"/>
</entry>
<entry>
<title>kali2016下phpredis的使用</title>
<link href="http://www.upwzr.com/2016/05/17/phpredis/"/>
<id>http://www.upwzr.com/2016/05/17/phpredis/</id>
<published>2016-05-16T16:00:00.000Z</published>
<updated>2016-06-03T14:01:16.606Z</updated>
<content type="html"><![CDATA[<h2 id="phpredis安装"><a href="#phpredis安装" class="headerlink" title="phpredis安装"></a>phpredis安装</h2><p>安装phpredis非常的简单,github上文档写的很详细。<br>在源码根目录执行:</p>
<pre><code>phpize
./configure [--enable-redis-igbinary]
sudo make && sudo make install
</code></pre><p>对于没有安装phpize的情况,可以apt-get安装dev包</p>
<pre><code>sudo apt-get install php5-dev
</code></pre><p>如果用的是php7,记得要使用php7分支,或者终端下载:</p>
<pre><code>git clone -b php7 https://github.com/phpredis/phpredis.git
</code></pre>]]></content>
<summary type="html">
<h2 id="phpredis安装"><a href="#phpredis安装" class="headerlink" title="phpredis安装"></a>phpredis安装</h2><p>安装phpredis非常的简单,github上文档写的很详细。<br>在源码
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="kali" scheme="http://www.upwzr.com/tags/kali/"/>
<category term="redis" scheme="http://www.upwzr.com/tags/redis/"/>
<category term="phpredis" scheme="http://www.upwzr.com/tags/phpredis/"/>
</entry>
<entry>
<title>简记oath2.0</title>
<link href="http://www.upwzr.com/2016/04/22/understanding-oauth2/"/>
<id>http://www.upwzr.com/2016/04/22/understanding-oauth2/</id>
<published>2016-04-21T16:00:00.000Z</published>
<updated>2016-08-24T05:57:51.287Z</updated>
<content type="html"><![CDATA[<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>OAuth2就是第三方应用获取授权的一套开放网络标准。它在客户端和服务端提供了一层中间授权层,客户端提供登录信息给授权层,登录成功后会拿到一张自己的通行令牌(token),客户端凭借此令牌别可以得到相行的服务端访问权限。</p>
<h3 id="授权流程"><a href="#授权流程" class="headerlink" title="授权流程"></a>授权流程</h3><p><img src="/img/2016-04-13-understanding-oauth2_1.png" alt="img"></p>
<ul>
<li>客户端向用户提示授权</li>
<li>用户同意授权,向客户端提供授权许可(grant)</li>
<li>客户端向认证服务器发送认证请求,请求中包含用户提供的授权许可</li>
<li>认证成功后认证服务器向客户端发放令牌(token)</li>
<li>客户端使用令牌向服务器端请求资源</li>
<li>资源服务器验证令牌有效,答复请求</li>
</ul>
<h2 id="授权许可方式"><a href="#授权许可方式" class="headerlink" title="授权许可方式"></a>授权许可方式</h2><p>在用户向客户端提供授权许可这一环节,OAuth2定义了四种类型:授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)、客户端模式(client credentials)。</p>
<h3 id="授权码(authorization-code)"><a href="#授权码(authorization-code)" class="headerlink" title="授权码(authorization code)"></a>授权码(authorization code)</h3><p>这种模式中,客户端将用户引导到授权服务器上,用户同意授权后授权服务器将会令用户重定向至客户端指定的回调地址,并带有授权码。客户端收到授权码后便会自行请求认证服务器,认证服务器核对无误即会返回给客户端访问令牌和更新令牌。整个流程中用户实际上只是跟认证服务器提交了认证,并未与客户端分享任何登录信息。</p>
<h3 id="简化模式(implicit)"><a href="#简化模式(implicit)" class="headerlink" title="简化模式(implicit)"></a>简化模式(implicit)</h3><p>(懒得简化了,先贴出来放在这=。=)<br>The implicit grant is a simplified authorization code flow optimized<br>for clients implemented in a browser using a scripting language such<br>as JavaScript. In the implicit flow, instead of issuing the client<br>an authorization code, the client is issued an access token directly<br>(as the result of the resource owner authorization). The grant type<br>is implicit, as no intermediate credentials (such as an authorization<br>code) are issued (and later used to obtain an access token).<br>When issuing an access token during the implicit grant flow, the<br>authorization server does not authenticate the client. In some<br>cases, the client identity can be verified via the redirection URI<br>used to deliver the access token to the client. The access token may<br>be exposed to the resource owner or other applications with access to<br>the resource owner’s user-agent.<br>Implicit grants improve the responsiveness and efficiency of some<br>clients (such as a client implemented as an in-browser application),<br>since it reduces the number of round trips required to obtain an<br>access token. However, this convenience should be weighed against<br>the security implications of using implicit grants, such as those<br>described in Sections 10.3 and 10.16, especially when the<br>authorization code grant type is available.</p>
<h3 id="密码凭证(resource-owner-password-credentials)"><a href="#密码凭证(resource-owner-password-credentials)" class="headerlink" title="密码凭证(resource owner password credentials)"></a>密码凭证(resource owner password credentials)</h3><p>这种授权模式适用于客户端具有高可信度的情况。用户将会给客户端提供自己的的登录信息(如用户名和密码),客户端使用这些信息向认证服务器发送请求获取令牌。原则上客户端是不允许存储这些登录信息的,但是客户端有没有真的遵守就不知道了。。。</p>
<h3 id="客户端凭证(client-credentials)"><a href="#客户端凭证(client-credentials)" class="headerlink" title="客户端凭证(client credentials)"></a>客户端凭证(client credentials)</h3><p>这种模式下用户并没有与认证服务器进行交流,而是在客户端进行注册或登录,登录成功后客户端会以自己的名义去请求认证服务器获取令牌。也就是说认证服务器是看在客户端的面子上给用户提供了相应的权限。</p>
<h2 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h2><p>this is a deep hole。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</p>
]]></content>
<summary type="html">
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>OAuth2就是第三方应用获取授权的一套开放网络标准。它在客户端和服务端提供了一层中间授权层,客户端提供登录信息给授权层,登录成功后会拿到一
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="oauth2" scheme="http://www.upwzr.com/tags/oauth2/"/>
</entry>
<entry>
<title>php几种设计模式</title>
<link href="http://www.upwzr.com/2016/04/18/php-moshi/"/>
<id>http://www.upwzr.com/2016/04/18/php-moshi/</id>
<published>2016-04-17T16:00:00.000Z</published>
<updated>2016-06-03T16:33:18.404Z</updated>
<content type="html"><![CDATA[<h2 id="php设计模式"><a href="#php设计模式" class="headerlink" title="php设计模式"></a>php设计模式</h2><h3 id="单例模式"><a href="#单例模式" class="headerlink" title="单例模式"></a>单例模式</h3><h3 id="多例模式"><a href="#多例模式" class="headerlink" title="多例模式"></a>多例模式</h3><h3 id="代理模式"><a href="#代理模式" class="headerlink" title="代理模式"></a>代理模式</h3><p>代理模式实际上就是解决了在有些不适合继承的情况下使用方法的问题。在proxy类中实现__call()方法调用被代理类的方法。</p>
<h3 id="外观模式(facade)"><a href="#外观模式(facade)" class="headerlink" title="外观模式(facade)"></a>外观模式(facade)</h3><h3 id="装饰者模式-decorator"><a href="#装饰者模式-decorator" class="headerlink" title="装饰者模式(decorator)"></a>装饰者模式(decorator)</h3><h3 id="工厂模式"><a href="#工厂模式" class="headerlink" title="工厂模式"></a>工厂模式</h3><h3 id="观察者模式"><a href="#观察者模式" class="headerlink" title="观察者模式"></a>观察者模式</h3><h3 id="发布者-订阅者模式"><a href="#发布者-订阅者模式" class="headerlink" title="发布者/订阅者模式"></a>发布者/订阅者模式</h3>]]></content>
<summary type="html">
<h2 id="php设计模式"><a href="#php设计模式" class="headerlink" title="php设计模式"></a>php设计模式</h2><h3 id="单例模式"><a href="#单例模式" class="headerlink" titl
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="设计模式" scheme="http://www.upwzr.com/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/"/>
</entry>
<entry>
<title>ubuntu server 搭建apache/mysql/php7</title>
<link href="http://www.upwzr.com/2016/04/01/ubuntu-server-lamp/"/>
<id>http://www.upwzr.com/2016/04/01/ubuntu-server-lamp/</id>
<published>2016-03-31T16:00:00.000Z</published>
<updated>2016-07-04T13:40:31.837Z</updated>
<content type="html"><![CDATA[<h2 id="先安装php的情况"><a href="#先安装php的情况" class="headerlink" title="先安装php的情况"></a>先安装php的情况</h2><p>如果安装php的时候还没有安装apache,那么安装好apache后需要安装一个模块:</p>
<pre><code>$ sudo apt-get install libapache2-mod-php7.0
//如果安装的是php5则安装下面的包
$ sudo apt-get install libapache2-mod-php
</code></pre>]]></content>
<summary type="html">
<h2 id="先安装php的情况"><a href="#先安装php的情况" class="headerlink" title="先安装php的情况"></a>先安装php的情况</h2><p>如果安装php的时候还没有安装apache,那么安装好apache后需要安装一个模块
</summary>
<category term="技术" scheme="http://www.upwzr.com/categories/%E6%8A%80%E6%9C%AF/"/>
<category term="mysql" scheme="http://www.upwzr.com/tags/mysql/"/>
<category term="linux" scheme="http://www.upwzr.com/tags/linux/"/>
<category term="lamp" scheme="http://www.upwzr.com/tags/lamp/"/>
<category term="apache" scheme="http://www.upwzr.com/tags/apache/"/>
<category term="php" scheme="http://www.upwzr.com/tags/php/"/>
<category term="php7" scheme="http://www.upwzr.com/tags/php7/"/>
</entry>
<entry>
<title>Django常用命令</title>
<link href="http://www.upwzr.com/2016/03/29/django-commands/"/>
<id>http://www.upwzr.com/2016/03/29/django-commands/</id>
<published>2016-03-28T16:00:00.000Z</published>
<updated>2016-06-03T13:22:25.211Z</updated>
<content type="html"><![CDATA[<ul>
<li><code>makemigrations</code> 创建迁移信息</li>
<li><code>sqlmigrate</code> 输出生成的sql语句</li>
<li><code>migrate</code> 同步所有未应用的改动</li>
</ul>
]]></content>
<summary type="html">
<ul>
<li><code>makemigrations</code> 创建迁移信息</li>
<li><code>sqlmigrate</code> 输出生成的sql语句</li>
<li><code>migrate</code> 同步所有未应用的改动</li>
</ul>
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="Django" scheme="http://www.upwzr.com/tags/Django/"/>
<category term="python" scheme="http://www.upwzr.com/tags/python/"/>
</entry>
<entry>
<title>docker基础简记</title>
<link href="http://www.upwzr.com/2016/03/09/docker-guide/"/>
<id>http://www.upwzr.com/2016/03/09/docker-guide/</id>
<published>2016-03-08T16:00:00.000Z</published>
<updated>2016-03-12T02:44:01.144Z</updated>
<content type="html"><![CDATA[<h2 id="Docker是什么"><a href="#Docker是什么" class="headerlink" title="Docker是什么"></a>Docker是什么</h2><blockquote>
<p>Docker allows you to package an application with all of its dependencies into a standardized unit for software development.<br> <em>—-<a href="https://www.docker.com/what-docker#/copy1" target="_blank" rel="external">What is Docker?</a></em></p>
</blockquote>
<p>Docker是近几年兴起的发展非常快速的开源项目,可用来创建非常轻量的“虚拟机”。在这里重要的两个概念是 <strong>镜像</strong> 和 <strong>容器</strong> 。</p>
<h2 id="docker命令简记"><a href="#docker命令简记" class="headerlink" title="docker命令简记"></a>docker命令简记</h2><ul>
<li><code>run</code> 启动<ul>
<li>-t 在容器内指定一个终端</li>
<li>-i 允许对容器内的STDIN进行交互</li>
<li>-d 在容器内已后台进程模式运行</li>
<li>-P 将容器内部使用的网络端口随机映射到主机高端口上</li>
<li>-p 指定要绑定的端口,具体用法见文档</li>
<li>-e <em>KEY=value</em> 设置环境变量</li>
<li>–name _container_name_ 为容器命名</li>
<li>–rm 创建临时容器,停止后删除</li>
</ul>
</li>
<li><code>ps</code> 查看正在运行的容器<ul>
<li>-l 显示最后启动容器的详细信息</li>
<li>-a 显示所有容器,包括已经停止的</li>
</ul>
</li>
<li><code>logs</code> _container_name_ 查看容器内的标准输出<ul>
<li>-f 保持活动状态,动态显示新添加的信息</li>
</ul>
</li>
<li><code>stop</code> 停止正在工作的容器</li>
<li><code>version</code> 返回Docker 客户端和进程的版本信息</li>
<li><code>port</code> _container_name_</li>
<li><code>top</code> 查看容器内部运行的进程</li>
<li><code>inspect</code> 查看容器的底层信息(配置和状态),JSON格式<ul>
<li>-f ‘<em>‘</em> 显示指定的信息</li>
</ul>
</li>
<li><code>search</code> 搜索镜像</li>
<li><code>tag</code> 为镜像添加标签</li>
</ul>
]]></content>
<summary type="html">
<h2 id="Docker是什么"><a href="#Docker是什么" class="headerlink" title="Docker是什么"></a>Docker是什么</h2><blockquote>
<p>Docker allows you to package
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="docker" scheme="http://www.upwzr.com/tags/docker/"/>
<category term="基础" scheme="http://www.upwzr.com/tags/%E5%9F%BA%E7%A1%80/"/>
<category term="命令" scheme="http://www.upwzr.com/tags/%E5%91%BD%E4%BB%A4/"/>
<category term="原理" scheme="http://www.upwzr.com/tags/%E5%8E%9F%E7%90%86/"/>
</entry>
<entry>
<title>基本的bash shell命令</title>
<link href="http://www.upwzr.com/2016/03/05/bash-shell/"/>
<id>http://www.upwzr.com/2016/03/05/bash-shell/</id>
<published>2016-03-04T16:00:00.000Z</published>
<updated>2016-07-22T17:21:50.098Z</updated>
<content type="html"><![CDATA[<h2 id="基本的bash-shell命令"><a href="#基本的bash-shell命令" class="headerlink" title="基本的bash shell命令"></a>基本的bash shell命令</h2><h3 id="处理文件和目录"><a href="#处理文件和目录" class="headerlink" title="处理文件和目录"></a>处理文件和目录</h3><ul>
<li><code>ls</code> 输出目录<ul>
<li>-s 显示文件大小</li>
<li>-a 输出隐藏文件</li>
<li>-i 显示文件的索引值</li>
<li>-l 产生长列表的输出</li>
<li>-R 递归列出子目录内容</li>
</ul>
</li>
<li><code>touch</code> 创建新文件或者改变访问/修改时间<ul>
<li>-a 只改变访问时间</li>
<li>-m 只改变修改时间</li>
<li>-t 指定时间戳</li>
</ul>
</li>
<li><code>cp</code> 复制文件<ul>
<li>-f 强制覆盖不提示</li>
<li>-i 覆盖前提示</li>
<li>-r 递归的复制文件</li>
<li>-R 递归的复制目录</li>
<li>-l 创建文件链接(硬链接)</li>
<li>-s 创建符号链接(软连接)</li>
<li>-v 详细模式</li>
</ul>
</li>
<li><code>mv</code> 移动文件(重命名)</li>
<li><code>rm</code> 删除文件<ul>
<li>-i 删除前提示</li>
<li>-f 强制删除不提示</li>
<li>-r 递归删除非空目录</li>
</ul>
</li>
<li><code>mkdir</code> 创建目录</li>
<li><code>stat</code> 提供文件的所有状态信息</li>
<li><code>file</code> 查看文件类型</li>
<li><code>cat</code> 显示文本数据<ul>
<li>-n 给所有行加上行号</li>
<li>-b 给有文本的行加上行号</li>
<li>-s 多个空白行压缩为一行</li>
<li>-T 用^I替换制表符</li>
</ul>
</li>
<li><code>more</code> 分页显示<ul>
<li>空格 显示下一屏</li>
<li>ENTER 显示下一行</li>
<li>/expression 查找</li>
<li>n 查找下一处匹配的内容</li>
<li>‘ 调到匹配的第一处内容</li>
<li>!cmd 执行shell</li>
<li>v 在当前行启动vi</li>
<li>= 显示当前行号</li>
<li>. 执行前一条命令</li>
</ul>
</li>
<li><code>sort</code> 读文本文件中的数据行排序<ul>
<li>-n 数字识别为数字</li>
<li>-M 按月排序(常用于日志文件)</li>
<li>-r 反序</li>
<li>-b 忽略起始的空白</li>
<li>-t 指定字段分隔符</li>
<li>-k 指定排序字段</li>
</ul>
</li>
<li><code>tail</code> 显示文件末尾的内容<ul>
<li>-c <em>bytes</em> 显示文件最后的bytes字节的内容</li>
<li>-n <em>lines</em> 显示文件最后的lines行</li>
<li>-f 保持活动,有新内容添加到末尾就显示</li>
<li>-s sec 与-f一起,每次输出前休眠sec秒ps</li>
<li>-v 显示带文件名的头</li>
<li>-q 从不显示带文件名的头</li>
</ul>
</li>
<li><code>head</code> 显示文件开头的内容,类似tail</li>
<li><code>grep</code> <em>[option] pattern [file]</em> 查找文件中大的一行数据<ul>
<li>-v 输出不匹配的行</li>
<li>-n 显示匹配行的行号</li>
<li>-c 输出匹配的行数</li>
<li>-e 指定多个匹配字符串(满足任意一个),通常用正则表达式替代</li>
<li>-i 忽略大小写</li>
</ul>
</li>
<li><code>tr</code> 替换或删除文件或文本中的字符</li>
<li><code>egrep</code> 支持POSIX扩展正则表达式</li>
<li><code>tar</code> <em>function [options] obj1 obj2</em> 归档<ul>
<li>-A 将一个tar文件追加到另一个tar文件</li>
<li>-c 创建新的tar归档文件</li>
<li>-r 追加文件到tar文件末尾</li>
<li>-x 从tar文件中提取文件</li>
<li>-C 切换到指定目录</li>
<li>-f 输出结果到文件或设备</li>
<li>-j 将输出重定向为bzip2</li>
<li>-z 将输出重定向给gzip</li>
<li>-p保留所有文件权限</li>
<li>-v 处理文件时显示文件</li>
</ul>
</li>
</ul>
<p>实例:</p>
<pre><code>//解压.tgz
tar -zxvf filename.tgz
</code></pre><ul>
<li><code>ln</code> <em>option source_file dist_file</em> <ul>
<li>-b 覆盖已有的链接</li>
<li>-f 强制执行</li>
<li>-i 交互模式,提示是否覆盖等</li>
<li>-n 把符号链接视为一般目录</li>
<li>-s 软链接(即符号链接)</li>
<li>-v 显示详细过程</li>
</ul>
</li>
</ul>
<h3 id="进程和设备管理"><a href="#进程和设备管理" class="headerlink" title="进程和设备管理"></a>进程和设备管理</h3><ul>
<li><code>ps</code> 检测进程<ul>
<li>-A 显示所有进程</li>
<li>-e 显示所有进程</li>
<li>-p <em>pidlist</em> 显示指定pid的进程</li>
<li>-f 显示完整格式的输出</li>
<li>-F 显示更多额外输出(相对-f而言)</li>
<li>-l 显示长列表</li>
<li>-L 显示进程中的线程</li>
<li>-H 用层级格式显示进程</li>
<li>–forest 图表形式显示层级信息</li>
</ul>
</li>
<li><code>top</code> 实时显示进程信息,<strong>很有用</strong>,详见man</li>
<li><code>pgrep</code> <em>pattern</em> 获取进程id</li>
<li><code>kill</code> <em>pid</em> 结束进程(默认发送TERM信号)<ul>
<li>-s <em>signal</em> 发送其他信号</li>
</ul>
</li>
<li><code>killall</code> <em>name</em> 通过进程名结束进程</li>
<li><p><code>mount</code> 挂载媒体设备,详见man<br>实例:</p>
<pre><code>//挂载iso文件
mount -t iso9660 -o loop file_name.iso /path/to/
</code></pre></li>
<li><p><code>unmonut</code> 卸载设备</p>
<blockquote>
<p>当提示设备繁忙无法卸载设备时可使用<code>lsof</code>命令获得使用它的进程信息</p>
</blockquote>
</li>
<li><code>df</code> 查看已挂载磁盘的使用情况<ul>
<li>-h human-readable</li>
</ul>
</li>
<li><code>du</code> 显示当前目录下所有文件、目录、子目录占用的磁盘块数<ul>
<li>-c 显示所有已列出文件的总大小</li>
<li>-h human-readable</li>
<li>-s 显示每个输出参数的总计</li>
</ul>
</li>
</ul>
<h3 id="系统和权限"><a href="#系统和权限" class="headerlink" title="系统和权限"></a>系统和权限</h3><ul>
<li><code>set</code> 显示进程的所有环境变量</li>
<li><code>export</code> <em>var</em> 将局部变量导出为全局变量</li>
<li><code>unset</code> <em>var</em> 删除环境变量</li>
<li><p><code>alias</code> 设置命令别名</p>
<ul>
<li><p>-p 显示已有的别名列表<br>实例:</p>
<p> //定义命令别名<br> alias li=’ls -il’</p>
</li>
</ul>
</li>
<li><p><code>useradd</code> 创建用户</p>
<ul>
<li>-c <em>comment</em> 添加备注</li>
<li>-d <em>home_dir</em> 为主目录指定一个名字(默认即home)</li>
<li>-D <em>YYYY-MM-DD</em> 显示设置用户的系统默认值</li>
<li>-g <em>initial_group</em> 指定用户登录组的GID或组名</li>
<li>-G <em>group</em> 指定除登录组外的附加组</li>
<li>-k 与-m一起使用,将/etc/skel目录的内容复制到HOME目录,(bash shell的标准启动文件)</li>
<li>-m 创建HOME目录</li>
<li>-r 创建系统用户</li>
<li>-p <em>passwd</em> 指定默认密码</li>
<li>-s <em>shell</em> 指定默认登录shell</li>
<li>-u <em>uid</em> 为账户指定唯一的uid</li>
</ul>
</li>
<li><code>userdel</code> 删除用户(默认只删除/etc/passwd文件中的用户信息)<ul>
<li>-r 删除HOME目录和mail目录</li>
</ul>
</li>
<li><code>usermod</code> 修改用户信息,参数与useradd基本相同<ul>
<li>-l 修改用户登录名</li>
<li>-L 锁定账户,无法登录</li>
<li>-p 修改账户密码</li>
<li>-U 解除锁定</li>
<li>-G <em>groupname username</em> 将用户添加至组</li>
</ul>
</li>
<li><code>groupadd</code> 添加新组</li>
<li><code>umask</code> 设置默认权限(掩码)</li>
<li><code>chmod</code> 设置文件和目录权限<ul>
<li>+r 添加读取权限</li>
<li>+w 写入权限</li>
<li>+x 执行权限</li>
</ul>
</li>
<li><code>chown</code> <em>optoins owner[.group] filename</em> 改变文件的属主<ul>
<li>-h 改变文件的所有符号连接的所属关系</li>
<li>-R 递归</li>
</ul>
</li>
<li><code>chgrp</code> 改变文件或目录的默认属组</li>
</ul>
<h2 id="脚本实战"><a href="#脚本实战" class="headerlink" title="脚本实战"></a>脚本实战</h2><blockquote>
<p>shell脚本常见以<code>#!</code>开头,这玩意叫做·<code>shebang</code></p>
</blockquote>
<h3 id="终端打印"><a href="#终端打印" class="headerlink" title="终端打印"></a>终端打印</h3><p>echo是用于终端打印的基本命令。默认情况下每次调用echo后都会添加一个换行符。<br>常用参数:</p>
<ul>
<li>-e 识别转义序列</li>
<li>-n 不追加换行符</li>
</ul>
<p>使用转义序列生成彩色输出:</p>
<pre><code>#红色文本
echo -e "this is \e[1;31m red text \e[0m"
#绿色背景
echo -e "this is \e[1;42m green background \e[0m""
</code></pre><p>文本颜色:重置=0;黑色=30;红色=31;绿色=32;黄色=33;蓝色=34;洋红=35;青色=36;白色=37;<br>背景颜色:重置=0;黑色=40;红色=41;绿色=42;黄色=43;蓝色=44;洋红=45;青色=46;白色=47;</p>
<h3 id="变量和环境变量"><a href="#变量和环境变量" class="headerlink" title="变量和环境变量"></a>变量和环境变量</h3><p>获取某个进程运行时的环境变量:</p>
<pre><code># $PID为摸个进程的id,可用pgrep命令获取
cat /proc/$PID/environ
</code></pre><p>为变量赋值时使用<code>var=value</code>的格式,而不是<code>var = value</code>,后者是相等操作。另外,如果value包含空格,则应使用引号将value括起。</p>
<p>添加环境变量:</p>
<pre><code>export PATH="$PATH:/path/to/sp"
</code></pre><p>获取字符串长度:</p>
<pre><code>echo ${#var}
</code></pre><p>获取当前使用的shell:</p>
<pre><code>echo $SHELL #/bin/bash
echo $0 #-bash
</code></pre><p>一种shell参数扩展形式:</p>
<pre><code>${paramater:+expression} #若paramater有值且不为空则使用expression的值
</code></pre><h3 id="数学运算"><a href="#数学运算" class="headerlink" title="数学运算"></a>数学运算</h3><p>几种整数运算的格式:</p>
<pre><code>no1=2;
no2=3;
let result=no1+no2
result=$[$no1+$no2] #变量前可以不加$
result=$(($no1+$no2)) #变量前可以不加$
</code></pre><p>还可以使用bc工具进行更高级的运算。</p>
<pre><code>echo "sqrt(250)" | bc #开方
</code></pre><h3 id="设置别名"><a href="#设置别名" class="headerlink" title="设置别名"></a>设置别名</h3><p><code>alias</code>的作用只是暂时的,关闭当前终端后定义的别名将失效。可将定义放在<code>.bashrc</code>中。例如:</p>
<pre><code>echo 'alias rm="cp $@ ~/backup && rm $@"' >> ~/.bashrc
</code></pre><p>上面的指令为rm创建了一个别名,原有的rm将被这个新rm替换。<br>若想不使用别名而使用原本的命令,可用<code>\</code>进行转义。如:</p>
<pre><code>\rm
</code></pre><p>就是使用原本的rm指令而不是自己定义的别名。</p>
<p>### </p>
]]></content>
<summary type="html">
<h2 id="基本的bash-shell命令"><a href="#基本的bash-shell命令" class="headerlink" title="基本的bash shell命令"></a>基本的bash shell命令</h2><h3 id="处理文件和目录"><a h
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="linux" scheme="http://www.upwzr.com/tags/linux/"/>
<category term="bash" scheme="http://www.upwzr.com/tags/bash/"/>
<category term="shell" scheme="http://www.upwzr.com/tags/shell/"/>
</entry>
<entry>
<title>超老本子CF-W2安装lubuntu</title>
<link href="http://www.upwzr.com/2016/03/04/refresh-old-laptop/"/>
<id>http://www.upwzr.com/2016/03/04/refresh-old-laptop/</id>
<published>2016-03-03T16:00:00.000Z</published>
<updated>2016-03-05T03:22:19.395Z</updated>
<content type="html"><![CDATA[<h2 id="祭出大杀器CF-W2"><a href="#祭出大杀器CF-W2" class="headerlink" title="祭出大杀器CF-W2"></a>祭出大杀器CF-W2</h2><p>前几年亲戚去日本出差给我老爸带回来一台二手本本,2003年左右的机器,质量确实过硬,没换过一个零件。。奔腾M 1GHz + 760MB内存,用xp勉强可以看个新闻玩玩同城游戏。到我手里后,实在是食之无味弃之可惜,索性装个linux敲代码好了。</p>
<h2 id="老机器真蛋疼"><a href="#老机器真蛋疼" class="headerlink" title="老机器真蛋疼"></a>老机器真蛋疼</h2><p>轻量级的linux有不少,<code>lubuntu</code> <code>xubuntu</code> <code>PuppyLinux</code>这些都是很常见的了。<code>lubuntu</code>号称256M内存就能跑起来,<code>LXDE</code>也比puppy用的<code>JVM</code>好看一点(私人观点),那就先搞这个试试(15.04)。最开始做了个U盘启动盘,结果BIOS里死活读不出usb,只好又刻了个CD。<br>lubuntu在12.04开始需要cpu支持pae,幸运的是我这老古董貌似完全不支持,因此在进入到grub后光标移动到install lubuntu选项,F6然后esc,进入编辑,在最后面加入<code>forcepae</code>,最后大概是下面这样的:</p>
<pre><code>Boot Options file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- forcepae
</code></pre><p>这么改完后可以正常启动安装。<strong>安装过程语言最好选择English</strong>,不然后面会出现乱码,完全辨认不出选项。</p>
<h2 id="优化"><a href="#优化" class="headerlink" title="优化"></a>优化</h2><h3 id="显卡问题"><a href="#显卡问题" class="headerlink" title="显卡问题"></a>显卡问题</h3><p>除了开机有(chao)些(ji)慢,编译有(shi)些(fen)慢,总体上还是非常流畅的。不过每次开机后桌面壁纸会变成一坨颜色。在官方wiki上找到了应对老Intel显卡的处理办法。</p>
<pre><code>sudo vim /etc/X11/xorg.conf
</code></pre><p>添加如下语句:</p>
<pre><code>Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "uxa"
EndSection
</code></pre><p>重启X,问题解决。</p>
<h3 id="中文乱码"><a href="#中文乱码" class="headerlink" title="中文乱码"></a>中文乱码</h3><p>安装过程中如果选择中文会出现乱码,安装好之后的系统人类基本无法操作。不过update完了之后问题即可解决。建议用英文安装好,update完事再切换中文。</p>
<blockquote>
<p>相关链接<br><a href="https://wiki.ubuntu.com/Lubuntu/AdvancedMethods" target="_blank" rel="external">AdvancedMethods</a></p>
</blockquote>
]]></content>
<summary type="html">
<h2 id="祭出大杀器CF-W2"><a href="#祭出大杀器CF-W2" class="headerlink" title="祭出大杀器CF-W2"></a>祭出大杀器CF-W2</h2><p>前几年亲戚去日本出差给我老爸带回来一台二手本本,2003年左右的机器,质量确
</summary>
<category term="技术" scheme="http://www.upwzr.com/categories/%E6%8A%80%E6%9C%AF/"/>
<category term="CF-w2,Linux,Lubuntu" scheme="http://www.upwzr.com/tags/CF-w2-Linux-Lubuntu/"/>
</entry>
<entry>
<title>Kali的一些工具</title>
<link href="http://www.upwzr.com/2015/12/19/tools-of-kali/"/>
<id>http://www.upwzr.com/2015/12/19/tools-of-kali/</id>
<published>2015-12-18T16:00:00.000Z</published>
<updated>2016-03-04T14:43:39.151Z</updated>
<content type="html"><![CDATA[<h2 id="信息收集"><a href="#信息收集" class="headerlink" title="信息收集"></a>信息收集</h2><h3 id="DNS信息"><a href="#DNS信息" class="headerlink" title="DNS信息"></a>DNS信息</h3><ul>
<li>host 查询/etc/resolv.conf中指定的DNS服务器 </li>
<li>dig 可处理文件内的所有DNS指令</li>
<li>dnsenum 可通过google搜素子域名;课使用字典对子域名进行暴力破解;</li>
<li>dnsdict6 IPv6子域名枚举</li>
<li>fierce 能对不连续的IP空间和主机名进行测试</li>
<li>DMitry 具有DNS分析和路由分析功能,可进行简单端口探测</li>
<li>Maltego 图形化综合工具</li>
</ul>
<h3 id="路由信息"><a href="#路由信息" class="headerlink" title="路由信息"></a>路由信息</h3><ul>
<li>tcptraceroute 利用TCP SYN数据包进行路由信息探测</li>
<li>tctrace -i<device> -h<targethost></targethost></device></li>
</ul>
<h3 id="搜索引擎"><a href="#搜索引擎" class="headerlink" title="搜索引擎"></a>搜索引擎</h3><ul>
<li>theharvester 通过多个公共资源搜集所需信息(Email、用户名、主机名等)</li>
<li>Metagoofil 通过google搜索目标域的文件的元数据信息,kali2默认貌似没有安装</li>
</ul>
<h2 id="目标识别"><a href="#目标识别" class="headerlink" title="目标识别"></a>目标识别</h2><h3 id="识别主机"><a href="#识别主机" class="headerlink" title="识别主机"></a>识别主机</h3><ul>
<li>ping 老朋友。。</li>
<li>ping6 用来ping IPv6</li>
<li>fping 可同时探测多个主机或者整个网段</li>
<li>arping 使用ARP请求检测局域网内主机是否在线,IP或者MAC地址都可作为目标</li>
<li>hping3 端口扫描、防火墙规则检测、IDS检测等,功能强大</li>
<li>nping 支持多种协议探测模式;可做压力测试、ARP中毒、Dos攻击</li>
<li>nbtscan 审计局域网内windows系统IP地址、NetBIOS信息等</li>
</ul>
<h3 id="识别操作系统"><a href="#识别操作系统" class="headerlink" title="识别操作系统"></a>识别操作系统</h3><ul>
<li>p0f 被动方式探测目标主机</li>
<li>nmap 神器之一</li>
</ul>
<h2 id="服务枚举"><a href="#服务枚举" class="headerlink" title="服务枚举"></a>服务枚举</h2><h3 id="端口扫描"><a href="#端口扫描" class="headerlink" title="端口扫描"></a>端口扫描</h3><ul>
<li>nmap 端口扫描;主机探测;服务/版本检测;操作系统检测;网络路由跟踪;脚本引擎<ul>
<li>-sT TCP连接扫描</li>
<li>-sS SYN扫描(半开连接扫描)</li>
<li>-sN NULL扫描(不设置任何控制位)</li>
<li>-sF FIN扫描</li>
<li>-sM TCP Maimom扫描,常用于探测BSD衍生出来的操作系统</li>
<li>-sA TCP ACK扫描,能检测防火墙,确定定被屏蔽端口</li>
<li>-sW TCP窗口扫描</li>
<li>-sI 通过僵尸主机发动扫描</li>
<li>–scanflags 自定义URG、ACK、PSH、RST、SYN、FIN、ECE、CWR、ALL和NONE组合</li>
<li>-sU UDP扫描</li>
<li>-sV 服务版识别</li>
<li>-O 识别操作系统</li>
<li>-p 指定端口或端口范围</li>
<li>-F 快速扫描,近扫描常用100个端口</li>
<li>-r 顺序扫描</li>
<li>-oN 正常输出</li>
<li>-oX 将结果生成为XML文件</li>
<li>-A 强力扫描,相当于 -sV -O -sC –traceroute</li>
<li>-sC 使用默认类的脚本进行扫描 相当于–script=default</li>
<li>–script 根据指定文件名、类别名、目录名执行相应脚本</li>
<li>-f 使用小数据包,避免目标IDS识别</li>
<li>–mtu 调整数据包大小,必须是8的倍数</li>
<li>-D 在侦测数据包中掺杂一些假源IP的数据包。</li>
<li>-g 模拟源端口</li>
<li>–data-length 改变数据包默认长度</li>
<li>–scan-delay 控制发送探测数据的时间间隔</li>
</ul>
</li>
<li>Unicornscna 扫描UDP端口性能卓越</li>
<li>zenmap nmap的图形化扫描工具</li>
<li>amap 检测指定端口上运行的应用程序信息</li>
</ul>
<h3 id="SNMP枚举"><a href="#SNMP枚举" class="headerlink" title="SNMP枚举"></a>SNMP枚举</h3><blockquote>
<p>SNMP 简单网络管理协议,运行于161端口的应用层协议,用于网络设备运行状态的监控,<br>SNMP协议有三个版本v1/v2/v3</p>
</blockquote>
<ul>
<li>onesixytone 扫描设备是否支持某些特定SNMP字符串</li>
<li>snmpcheck 差不多</li>
<li>SNMP Walk 强大的SNMP信息采集工具,可以使用三个版本的协议</li>
</ul>
<h3 id="VPN枚举"><a href="#VPN枚举" class="headerlink" title="VPN枚举"></a>VPN枚举</h3><ul>
<li>ike-scan 探测IPSec VPN系统</li>
</ul>
<h2 id="漏洞映射"><a href="#漏洞映射" class="headerlink" title="漏洞映射"></a>漏洞映射</h2><h3 id="模糊分析"><a href="#模糊分析" class="headerlink" title="模糊分析"></a>模糊分析</h3><ul>
<li>BED 检测缓冲区溢出、格式化字符串漏洞、整数溢出、DoS条件等漏洞,支持多种协议</li>
<li>JBroFuzz 模拟HTTP/HTTPS请求;XSS、SQl注入、缓冲区溢出、格式字符串错误等测试</li>
</ul>
<h3 id="SMB分析"><a href="#SMB分析" class="headerlink" title="SMB分析"></a>SMB分析</h3><blockquote>
<p>SMB Server Message Block,又称为CIFS(Common Internet File System)协议,作用<br>于应用层,常用于文件与打印机共享服务。NetBIOS是SMB协议的组成部分。DEC<br>/RPC服务程序实现的网络节点间跨进程通信(IPC)也使用SMB协议。</p>
</blockquote>
<ul>
<li>ImpacketSamrdump 列举同一局域网目标主机上所有系统共享、用户账户等信息</li>
</ul>
<h3 id="数据库评估"><a href="#数据库评估" class="headerlink" title="数据库评估"></a>数据库评估</h3><ul>
<li>sqlmap 又一个神器,详情看文档</li>
<li>sqlninja 专门评估SQL Server的进阶工具,配置较复杂。</li>
</ul>
<h3 id="Web应用程序评估"><a href="#Web应用程序评估" class="headerlink" title="Web应用程序评估"></a>Web应用程序评估</h3><ul>
<li>Burp Suite 还是一神器,完整的攻击框架。</li>
<li>Nikto2 支持跨平台部署、SSL、多种IDS规避技术</li>
<li>Paros Proxy 主动/被动评估工具</li>
<li>W3AF 识别、审计、攻击,有丰富的插件和exploits。</li>
<li>wafw00f 检测防web防火墙(WAF)的脚本</li>
<li>webscarab 集成了众多工具,OWASP Project之一,功能强大</li>
</ul>
]]></content>
<summary type="html">
<h2 id="信息收集"><a href="#信息收集" class="headerlink" title="信息收集"></a>信息收集</h2><h3 id="DNS信息"><a href="#DNS信息" class="headerlink" title="DNS信息">
</summary>
<category term="学习笔记" scheme="http://www.upwzr.com/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="Kali" scheme="http://www.upwzr.com/tags/Kali/"/>
<category term="渗透" scheme="http://www.upwzr.com/tags/%E6%B8%97%E9%80%8F/"/>
</entry>
</feed>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。