Fengda HUANG vor 8 Jahren
Ursprung
Commit
2be062a63f

+ 1 - 1
chapters/big-data.md

@@ -12,7 +12,7 @@
 
 最后的效果如下图如示:
 
-![Demo](./images/map_with_bg.jpg)
+![Demo](http://ideabook.phodal.com/images/map_with_bg.jpg)
 
 这是一个Web生成的界面,通过Elastic.js向搜索引擎查询数据,将再这些数据渲染到地图上。
 

+ 1 - 1
chapters/bookshelf.md

@@ -12,7 +12,7 @@
 
 最后的效果如下图所示:
 
-![Bookshelf](./images/bookshelf.jpg)
+![Bookshelf](http://ideabook.phodal.com/images/bookshelf.jpg)
 
 代码见: [https://github.com/phodal/bookshelf/](https://github.com/phodal/bookshelf/)
 

+ 5 - 5
chapters/brand.md

@@ -8,11 +8,11 @@
 
 前几天,再次看到一些CI的Badge的时候,就想着要做一个自己的Badge:
 
-![Badge](./images/badge.png)
+![Badge](http://ideabook.phodal.com/images/badge.png)
 
 接着,我就找了个图形工具简单地先设计了下面的一个Badge:
 
-![Demo](./images/demo.png)
+![Demo](http://ideabook.phodal.com/images/demo.png)
 
 生成的格式是SVG,接着我就打开SVG看看里面发现了什么。
 
@@ -40,7 +40,7 @@
 
 ### ShowCase
 
-![Finally](./images/finally-brand.jpg)
+![Finally](http://ideabook.phodal.com/images/finally-brand.jpg)
 
 代码: GitHub: [https://github.com/phodal/brand](https://github.com/phodal/brand)
 
@@ -92,7 +92,7 @@ dwg.save()
 
 第一眼看到
 
-![Idea Prototype](./images/brand-idea-prototype.jpg)
+![Idea Prototype](http://ideabook.phodal.com/images/brand-idea-prototype.jpg)
 
 我就想着要不和这个一样好了,不就是画几条线的事么。
 
@@ -118,7 +118,7 @@ dwg.save()
 
 就有了下面的图,于是我又按照这种感觉来了好几下
 
-![Finally](./images/finally-brand.jpg)
+![Finally](http://ideabook.phodal.com/images/finally-brand.jpg)
 
 
 

+ 1 - 1
chapters/congee.md

@@ -8,7 +8,7 @@ Web文本编辑器
 
 ### ShowCase
 
-![Screenshot](./images/congee.jpg)
+![Screenshot](http://ideabook.phodal.com/images/congee.jpg)
 
 GitHub: [https://github.com/phodal/congee](https://github.com/phodal/congee)
 

+ 1 - 1
chapters/echoesworks.md

@@ -10,7 +10,7 @@ JavaScript打造Slide应用
 
 ###Showcase
 
-![EchoesWorks](./images/echoesworks.jpg)
+![EchoesWorks](http://ideabook.phodal.com/images/echoesworks.jpg)
 
 GitHub代码: [https://github.com/phodal/echoesworks](https://github.com/phodal/echoesworks)
 

+ 4 - 4
chapters/eppsc.md

@@ -25,7 +25,7 @@ So,你可能会担心如果这时候修改的东西有问题了怎么办。
 
 为了实现之前说到的``编辑-发布-开发分离``的CMS,我还是花了两天的时间打造了一个面向普通用户的编辑器。效果截图如下所示:
 
-![Echeveria Editor](./images/eche-editor-screenshot.png)
+![Echeveria Editor](http://ideabook.phodal.com/images/eche-editor-screenshot.png)
 
 作为一个普通用户,这是一个很简单的软件。除了Electron + Node.js + React作了一个140M左右的软件,尽管打包完只有40M左右 ,但是还是会把用户吓跑的。不过作为一个快速构建的原型已经很不错了——构建速度很快、并且运行良好。
 
@@ -84,7 +84,7 @@ repo.write('master', 'contents/' + data.url + '.json', stringifyData, 'Robot: ad
 
 在控制台中运行一下 ``man git``你会得到下面的结果:
 
-![Man Git](./images/man-git.png)
+![Man Git](http://ideabook.phodal.com/images/man-git.png)
 
 这个答案看起来很有意思——不过这看上去似乎无关主题。
 
@@ -114,11 +114,11 @@ git的“API”提供了丰富的增、删、改功能——你需要commit就
 2. git push
 Carrot使用了下面的方案来搭建他们的静态内容的CMS。
 
-![Carrot](./images/carrot.png)
+![Carrot](http://ideabook.phodal.com/images/carrot.png)
 
 在这个方案里内容是用Contentful来发布他们的内容。而在我司[ThoughtWorks](https://www.thoughtworks.com/)的官网里则采用了Github来管理这些内容。于是如果让我们写一个基于Github的CMS,那么架构变成了这样:
 
-![Github 编辑-发布-开发](./images/travis-edit-publish-code.png)
+![Github 编辑-发布-开发](http://ideabook.phodal.com/images/travis-edit-publish-code.png)
 
 或许你也用过Hexo / Jekyll / Octopress这样的静态博客,他们的原理都是类似的。我们有一个代码库用于生成静态页面,然后这些静态页面会被PUSH到Github Pages上。
 

+ 1 - 1
chapters/google-map-solr.md

@@ -8,7 +8,7 @@ Google Map与Solr实现多边形搜索
 
 ### Showcase
 
-![Google Map Solr](./images/gmap-solr.jpg)
+![Google Map Solr](http://ideabook.phodal.com/images/gmap-solr.jpg)
 
 GitHub [https://github.com/phodal/gmap-solr](https://github.com/phodal/gmap-solr)
 

+ 6 - 6
chapters/growth.md

@@ -20,7 +20,7 @@ Web本身就是跨平台的,这意味着这中间存在着无限的可能性
 
 截图合并如下:
 
-![growth-full-platforms.png](./images/growth-full-platforms.jpg)
+![growth-full-platforms.png](http://ideabook.phodal.com/images/growth-full-platforms.jpg)
 
 ### Ionic & Electron & Cordova
 
@@ -51,7 +51,7 @@ Mobile = Cordova + Angular.js + Ionic
  
 接着我用Ionic创建了这个应用,这是一个再普通不过的过程。在这个过程里,我一直使用Chrome在调度我的代码。因为我是Android用户,我有Google Play的账号,便发布了Android版本。这时候遇到了一个问题,我并没有Apple Developer账号(现在在申请ing。。),而主要的用户对象程序员,这是一群**不土**的土豪。
 
-![iPHONE](./images/iphone.jpg)
+![iPHONE](http://ideabook.phodal.com/images/iphone.jpg)
 
 偶然间我才想到,我只要上传Web版本的代码就可以暂时性实现这个需求了。接着找了个AWS S3的插件,直接上传到了AWS S3上托管成静态文件服务。
 
@@ -59,7 +59,7 @@ Mobile = Cordova + Angular.js + Ionic
 
 所以,最后我们的流程图就如下所示:
 
-![Growth Arch](./images/growth-arch.png)
+![Growth Arch](http://ideabook.phodal.com/images/growth-arch.png)
 
 除了显示到VR设备上,好像什么也不缺了。并且在我之前的文章《[Oculus + Node.js + Three.js 打造VR世界](https://github.com/phodal/oculus-nodejs-threejs-example)》,也展示了Web在VR世界的可能性。
 
@@ -72,11 +72,11 @@ Mobile = Cordova + Angular.js + Ionic
 
 响应式设计可以主要依赖于Media Query,而响应式设计主要要追随的一点是不同的设备不同的显示,如:
 
-![full-platforms.jpg](./images/full-platforms.jpg)
+![full-platforms.jpg](http://ideabook.phodal.com/images/full-platforms.jpg)
 
 这也意味着,我们需要对不同的设备进行一些处理,如在大的屏幕下,我们需要展示菜单:
 
-![gnu-linux.png](./images/gnu-linux.jpg)
+![gnu-linux.png](http://ideabook.phodal.com/images/gnu-linux.jpg)
 
 而这可以依赖于Ionic的**expose-aside-when="large"**,而并非所有的情形都是这么简单的。如我最近遇到的问题就是图片缩放的问题,之前的图片针对的都是手机版——经过了一定的缩放。
 
@@ -145,7 +145,7 @@ if(typeof module !== 'undefined' && module && module.exports){
 
 如果有一天,我有钱开放这个应用的应用号,那么我就会再次献上这个图:
 
-![六边形架构](./images/hexoarch.png)
+![六边形架构](http://ideabook.phodal.com/images/hexoarch.png)
 
 ### 未来
 

+ 4 - 4
chapters/ionic-es.md

@@ -12,15 +12,15 @@ Ionic ElasticSearch打造O2O应用
 
 最后效果图
 
-![elasticsearch_ionic_map](./images/elasticsearch_ionic_map.jpg) 
+![elasticsearch_ionic_map](http://ideabook.phodal.com/images/elasticsearch_ionic_map.jpg) 
 
-![elasticsearch_ionic_info_page](./images/elasticsearch_ionic_info_page.jpg)
+![elasticsearch_ionic_info_page](http://ideabook.phodal.com/images/elasticsearch_ionic_info_page.jpg)
 
 ### 构架设计
 
 对我们的需求进行简要的思考后,设计出了下面的一些简单的架构。
 
-![Django ElasticSearch Ionic 架构](./images/struct.png)
+![Django ElasticSearch Ionic 架构](http://ideabook.phodal.com/images/struct.png)
 
 #### 服务端
 
@@ -642,5 +642,5 @@ map.on('click', function(evt) {
 
 当用户点击时,调用Bootstrap的Popover来显示信息。
 
-![ElasticSearch Map](./images/elasticsearch_ionit_map.jpg)
+![ElasticSearch Map](http://ideabook.phodal.com/images/elasticsearch_ionit_map.jpg)
     

+ 1 - 1
chapters/luffa.md

@@ -10,7 +10,7 @@
 
 ### ShowCase
 
-![Luffa Screenshot](./images/luffa.jpg)
+![Luffa Screenshot](http://ideabook.phodal.com/images/luffa.jpg)
 
 源码见:[https://github.com/phodal/luffa](https://github.com/phodal/luffa)
 

+ 3 - 3
chapters/oculus-three.md

@@ -14,9 +14,9 @@ Oculus  + Node.js  + Three.js 打造VR世界
 
 这个repo的最后效果图如下所示:
 
-![最后效果图](./images/demo.jpg)
+![最后效果图](http://ideabook.phodal.com/images/demo.jpg)
 
-![Three.js Oculus Effect](./images/oculus-vr.jpg)
+![Three.js Oculus Effect](http://ideabook.phodal.com/images/oculus-vr.jpg)
 
 效果:
 
@@ -304,7 +304,7 @@ this.controller.setRotationFromMatrix(this.camera.matrix);
 
 这使我有足够的理由相信Oculus就是一个手机 + 一个6轴运动处理组件的升级板——因为,我玩过MPU6050这样的传感器,如图。。。
 
-![Oculus 6050](./images/mpu6050.jpg)
+![Oculus 6050](http://ideabook.phodal.com/images/mpu6050.jpg)
 
 
 **Three.js  DK2Controls**

+ 1 - 1
chapters/onmap.md

@@ -10,7 +10,7 @@
 
 ### Showcase
 
-![Phodal's Image](./images/onmap-demo.jpg)
+![Phodal's Image](http://ideabook.phodal.com/images/onmap-demo.jpg)
 
 ###框架: EXIF & ExifRead & CartoDB
 

+ 4 - 4
chapters/sherlock.md

@@ -12,7 +12,7 @@ D3.js 制作技能树
 
 代码见: [https://github.com/phodal/sherlock](https://github.com/phodal/sherlock)
 
-![Sherlock](./images/sherlock.png)
+![Sherlock](http://ideabook.phodal.com/images/sherlock.png)
 
 ###Graphviz
 
@@ -36,7 +36,7 @@ dot -Tjpg lz.dot -o lz.jpg
 
 就会生成下面的图片
 
-![lz](./images/lz.jpg)
+![lz](http://ideabook.phodal.com/images/lz.jpg)
 	
 接着我们便可以建立一个简单的模型来构建我们的技能树。
 
@@ -61,7 +61,7 @@ dot -Tjpg lz.dot -o lz.jpg
 
 于是我们有了这张图:
 
-![Tree](./images/tree.jpg)
+![Tree](http://ideabook.phodal.com/images/tree.jpg)
 
 而我们的代码是这样的:
 
@@ -89,7 +89,7 @@ digraph tree
   
 使用D3.js与Darge-d3构建一个简单的技能树的时候,需要一个简单的类似于小贴士的插件。
 
-![Tooltips](./images/tips.jpg)
+![Tooltips](http://ideabook.phodal.com/images/tips.jpg)
 
 #### Tooltipster
 

+ 1 - 1
chapters/tech-stack.md

@@ -17,7 +17,7 @@
 
 最后的效果如下图:
 
-![Screenshot](./images/tech-stack.jpg)
+![Screenshot](http://ideabook.phodal.com/images/tech-stack.jpg)
 
 ### D3.js
 

+ 1 - 1
chapters/text2logo.md

@@ -10,7 +10,7 @@
 
 ### ShowCase
 
-![Node](./images/node.png) ![Refactor](./images/refactor.png) ![TDD](./images/tdd.png) ![Clean Code](./images/clean_code.png)
+![Node](http://ideabook.phodal.com/images/node.png) ![Refactor](http://ideabook.phodal.com/images/refactor.png) ![TDD](http://ideabook.phodal.com/images/tdd.png) ![Clean Code](http://ideabook.phodal.com/images/clean_code.png)
 
 代码见:[https://github.com/phodal/text2logo](https://github.com/phodal/text2logo)
   

+ 7 - 7
chapters/vmap.md

@@ -12,11 +12,11 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 或者你已经使用过了相应多的省市区与地图联动,但是这些联动往往是单向的、不可逆。并且这些数据往往都是在线使用的,不能离线使用。下图是一个结合百度地图的省市区与地图联动:
 
-![一般的省市区与地图联动](./images/general-province-city-map.png)
+![一般的省市区与地图联动](http://ideabook.phodal.com/images/general-province-city-map.png)
 
 我们可以在这个应用里选择,相应的省市区然后地图会跳转到相应的地图。当我们在地图上漫游的时候,如果没有显示当前的省市区是不是变得很难使用。于是,我们就来创建一个吧:
 
-![地图到省市区联动](./images/anti-map-action.jpg)
+![地图到省市区联动](http://ideabook.phodal.com/images/anti-map-action.jpg)
 
 ### jQuery + Mustache + Leaflet
 
@@ -46,7 +46,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 换句话来说,根据这个文件里面的多边形,我们可以绘制出中国地图。由于上面的点是真实的地理位置信息,所以无论我们怎样的缩放这些点的位置都不会发生变化。如下图是GitHub对这个数据文件的解析:
 
-![中国GeoJSON文件](./images/china-geojson.jpg)
+![中国GeoJSON文件](http://ideabook.phodal.com/images/china-geojson.jpg)
 
 (PS: 预览可以打开这个页面:[Vmap GeoJSON](https://github.com/phodal/vmap/blob/gh-pages/static/data/china.json)
 
@@ -58,7 +58,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 所谓的多边形搜索就是画一个圈圈(任意多边形),然后你就可以去约这个圈圈里的人,如下图所示:
 
-![多边形搜索](./images/geopoly2d-small.png)
+![多边形搜索](http://ideabook.phodal.com/images/geopoly2d-small.png)
 
 而圈圈搜索依赖于圈圈上的连续的点构建的形状来进行搜索,上面的每个点都包含了相应的经纬度。因此,只要是在这个圈圈里的用户都是可以搜索得到的。
 
@@ -76,7 +76,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 最初的时候要用Event的形式来实现,但是发现这样似乎会让其紧耦合。就改用了监听Hash Change的形式来实现,在总的地图上每一个省都有一个对应的ID,这个ID会对应相应的省的数据。如下图所示:
 
-![Province Hash](./images/province-hash-with-map.jpg)
+![Province Hash](http://ideabook.phodal.com/images/province-hash-with-map.jpg)
 
 接着,我们就需要从这个Hash中判断它的级别和ID,随后转由相应的函数来处理这些逻辑即可。随后,我们要做两件事:
 
@@ -95,7 +95,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 同理,我们也可以对上面的市运行处理。但是因为这些市并不存在GEO信息,所以我只是从其多连形信息取了一个点,再将这个点放到data-geo中:
 
-![Data GEO](./images/city-with-geo.jpg)
+![Data GEO](http://ideabook.phodal.com/images/city-with-geo.jpg)
 
 对应于省市的,对于区的处理也是如此。这样,我们就完成了地点到地图的显示了。
 
@@ -103,5 +103,5 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 从地图上到地点就比较简单了,点击时修改对应的text即可。
 
-![VMap Click ](./images/vmap-click-handler.jpg)
+![VMap Click ](http://ideabook.phodal.com/images/vmap-click-handler.jpg)
 

+ 42 - 42
ideabook.md

@@ -13,7 +13,7 @@
 
 最后的效果如下图如示:
 
-![Demo](./images/map_with_bg.jpg)
+![Demo](http://ideabook.phodal.com/images/map_with_bg.jpg)
 
 这是一个Web生成的界面,通过Elastic.js向搜索引擎查询数据,将再这些数据渲染到地图上。
 
@@ -377,7 +377,7 @@ var create_map = function(mapData){
 
 最后的效果如下图所示:
 
-![Bookshelf](./images/bookshelf.jpg)
+![Bookshelf](http://ideabook.phodal.com/images/bookshelf.jpg)
 
 代码见: [https://github.com/phodal/bookshelf/](https://github.com/phodal/bookshelf/)
 
@@ -502,11 +502,11 @@ function saveToDatabase(data, barcodeData) {
 
 前几天,再次看到一些CI的Badge的时候,就想着要做一个自己的Badge:
 
-![Badge](./images/badge.png)
+![Badge](http://ideabook.phodal.com/images/badge.png)
 
 接着,我就找了个图形工具简单地先设计了下面的一个Badge:
 
-![Demo](./images/demo.png)
+![Demo](http://ideabook.phodal.com/images/demo.png)
 
 生成的格式是SVG,接着我就打开SVG看看里面发现了什么。
 
@@ -534,7 +534,7 @@ function saveToDatabase(data, barcodeData) {
 
 ### ShowCase
 
-![Finally](./images/finally-brand.jpg)
+![Finally](http://ideabook.phodal.com/images/finally-brand.jpg)
 
 代码: GitHub: [https://github.com/phodal/brand](https://github.com/phodal/brand)
 
@@ -586,7 +586,7 @@ dwg.save()
 
 第一眼看到
 
-![Idea Prototype](./images/brand-idea-prototype.jpg)
+![Idea Prototype](http://ideabook.phodal.com/images/brand-idea-prototype.jpg)
 
 我就想着要不和这个一样好了,不就是画几条线的事么。
 
@@ -612,7 +612,7 @@ dwg.save()
 
 就有了下面的图,于是我又按照这种感觉来了好几下
 
-![Finally](./images/finally-brand.jpg)
+![Finally](http://ideabook.phodal.com/images/finally-brand.jpg)
 
 
 
@@ -627,7 +627,7 @@ Web文本编辑器
 
 ### ShowCase
 
-![Screenshot](./images/congee.jpg)
+![Screenshot](http://ideabook.phodal.com/images/congee.jpg)
 
 GitHub: [https://github.com/phodal/congee](https://github.com/phodal/congee)
 
@@ -896,7 +896,7 @@ JavaScript打造Slide应用
 
 ###Showcase
 
-![EchoesWorks](./images/echoesworks.jpg)
+![EchoesWorks](http://ideabook.phodal.com/images/echoesworks.jpg)
 
 GitHub代码: [https://github.com/phodal/echoesworks](https://github.com/phodal/echoesworks)
 
@@ -1098,7 +1098,7 @@ So,你可能会担心如果这时候修改的东西有问题了怎么办。
 
 为了实现之前说到的``编辑-发布-开发分离``的CMS,我还是花了两天的时间打造了一个面向普通用户的编辑器。效果截图如下所示:
 
-![Echeveria Editor](./images/eche-editor-screenshot.png)
+![Echeveria Editor](http://ideabook.phodal.com/images/eche-editor-screenshot.png)
 
 作为一个普通用户,这是一个很简单的软件。除了Electron + Node.js + React作了一个140M左右的软件,尽管打包完只有40M左右 ,但是还是会把用户吓跑的。不过作为一个快速构建的原型已经很不错了——构建速度很快、并且运行良好。
 
@@ -1157,7 +1157,7 @@ repo.write('master', 'contents/' + data.url + '.json', stringifyData, 'Robot: ad
 
 在控制台中运行一下 ``man git``你会得到下面的结果:
 
-![Man Git](./images/man-git.png)
+![Man Git](http://ideabook.phodal.com/images/man-git.png)
 
 这个答案看起来很有意思——不过这看上去似乎无关主题。
 
@@ -1187,11 +1187,11 @@ git的“API”提供了丰富的增、删、改功能——你需要commit就
 2. git push
 Carrot使用了下面的方案来搭建他们的静态内容的CMS。
 
-![Carrot](./images/carrot.png)
+![Carrot](http://ideabook.phodal.com/images/carrot.png)
 
 在这个方案里内容是用Contentful来发布他们的内容。而在我司[ThoughtWorks](https://www.thoughtworks.com/)的官网里则采用了Github来管理这些内容。于是如果让我们写一个基于Github的CMS,那么架构变成了这样:
 
-![Github 编辑-发布-开发](./images/travis-edit-publish-code.png)
+![Github 编辑-发布-开发](http://ideabook.phodal.com/images/travis-edit-publish-code.png)
 
 或许你也用过Hexo / Jekyll / Octopress这样的静态博客,他们的原理都是类似的。我们有一个代码库用于生成静态页面,然后这些静态页面会被PUSH到Github Pages上。
 
@@ -1366,7 +1366,7 @@ Google Map与Solr实现多边形搜索
 
 ### Showcase
 
-![Google Map Solr](./images/gmap-solr.jpg)
+![Google Map Solr](http://ideabook.phodal.com/images/gmap-solr.jpg)
 
 GitHub [https://github.com/phodal/gmap-solr](https://github.com/phodal/gmap-solr)
 
@@ -1469,7 +1469,7 @@ Web本身就是跨平台的,这意味着这中间存在着无限的可能性
 
 截图合并如下:
 
-![growth-full-platforms.png](./images/growth-full-platforms.jpg)
+![growth-full-platforms.png](http://ideabook.phodal.com/images/growth-full-platforms.jpg)
 
 ### Ionic & Electron & Cordova
 
@@ -1500,7 +1500,7 @@ Mobile = Cordova + Angular.js + Ionic
  
 接着我用Ionic创建了这个应用,这是一个再普通不过的过程。在这个过程里,我一直使用Chrome在调度我的代码。因为我是Android用户,我有Google Play的账号,便发布了Android版本。这时候遇到了一个问题,我并没有Apple Developer账号(现在在申请ing。。),而主要的用户对象程序员,这是一群**不土**的土豪。
 
-![iPHONE](./images/iphone.jpg)
+![iPHONE](http://ideabook.phodal.com/images/iphone.jpg)
 
 偶然间我才想到,我只要上传Web版本的代码就可以暂时性实现这个需求了。接着找了个AWS S3的插件,直接上传到了AWS S3上托管成静态文件服务。
 
@@ -1508,7 +1508,7 @@ Mobile = Cordova + Angular.js + Ionic
 
 所以,最后我们的流程图就如下所示:
 
-![Growth Arch](./images/growth-arch.png)
+![Growth Arch](http://ideabook.phodal.com/images/growth-arch.png)
 
 除了显示到VR设备上,好像什么也不缺了。并且在我之前的文章《[Oculus + Node.js + Three.js 打造VR世界](https://github.com/phodal/oculus-nodejs-threejs-example)》,也展示了Web在VR世界的可能性。
 
@@ -1521,11 +1521,11 @@ Mobile = Cordova + Angular.js + Ionic
 
 响应式设计可以主要依赖于Media Query,而响应式设计主要要追随的一点是不同的设备不同的显示,如:
 
-![full-platforms.jpg](./images/full-platforms.jpg)
+![full-platforms.jpg](http://ideabook.phodal.com/images/full-platforms.jpg)
 
 这也意味着,我们需要对不同的设备进行一些处理,如在大的屏幕下,我们需要展示菜单:
 
-![gnu-linux.png](./images/gnu-linux.jpg)
+![gnu-linux.png](http://ideabook.phodal.com/images/gnu-linux.jpg)
 
 而这可以依赖于Ionic的**expose-aside-when="large"**,而并非所有的情形都是这么简单的。如我最近遇到的问题就是图片缩放的问题,之前的图片针对的都是手机版——经过了一定的缩放。
 
@@ -1594,7 +1594,7 @@ if(typeof module !== 'undefined' && module && module.exports){
 
 如果有一天,我有钱开放这个应用的应用号,那么我就会再次献上这个图:
 
-![六边形架构](./images/hexoarch.png)
+![六边形架构](http://ideabook.phodal.com/images/hexoarch.png)
 
 ### 未来
 
@@ -1616,15 +1616,15 @@ Ionic ElasticSearch打造O2O应用
 
 最后效果图
 
-![elasticsearch_ionic_map](./images/elasticsearch_ionic_map.jpg) 
+![elasticsearch_ionic_map](http://ideabook.phodal.com/images/elasticsearch_ionic_map.jpg) 
 
-![elasticsearch_ionic_info_page](./images/elasticsearch_ionic_info_page.jpg)
+![elasticsearch_ionic_info_page](http://ideabook.phodal.com/images/elasticsearch_ionic_info_page.jpg)
 
 ### 构架设计
 
 对我们的需求进行简要的思考后,设计出了下面的一些简单的架构。
 
-![Django ElasticSearch Ionic 架构](./images/struct.png)
+![Django ElasticSearch Ionic 架构](http://ideabook.phodal.com/images/struct.png)
 
 #### 服务端
 
@@ -2246,7 +2246,7 @@ map.on('click', function(evt) {
 
 当用户点击时,调用Bootstrap的Popover来显示信息。
 
-![ElasticSearch Map](./images/elasticsearch_ionit_map.jpg)
+![ElasticSearch Map](http://ideabook.phodal.com/images/elasticsearch_ionit_map.jpg)
     
 
 一步步搭建JavaScript框架: Lettuce
@@ -2479,7 +2479,7 @@ grunt里的任务包含了:
 
 ### ShowCase
 
-![Luffa Screenshot](./images/luffa.jpg)
+![Luffa Screenshot](http://ideabook.phodal.com/images/luffa.jpg)
 
 源码见:[https://github.com/phodal/luffa](https://github.com/phodal/luffa)
 
@@ -3692,9 +3692,9 @@ Oculus  + Node.js  + Three.js 打造VR世界
 
 这个repo的最后效果图如下所示:
 
-![最后效果图](./images/demo.jpg)
+![最后效果图](http://ideabook.phodal.com/images/demo.jpg)
 
-![Three.js Oculus Effect](./images/oculus-vr.jpg)
+![Three.js Oculus Effect](http://ideabook.phodal.com/images/oculus-vr.jpg)
 
 效果:
 
@@ -3982,7 +3982,7 @@ this.controller.setRotationFromMatrix(this.camera.matrix);
 
 这使我有足够的理由相信Oculus就是一个手机 + 一个6轴运动处理组件的升级板——因为,我玩过MPU6050这样的传感器,如图。。。
 
-![Oculus 6050](./images/mpu6050.jpg)
+![Oculus 6050](http://ideabook.phodal.com/images/mpu6050.jpg)
 
 
 **Three.js  DK2Controls**
@@ -4183,7 +4183,7 @@ if (this.camera.position.y < -10) {
 
 ### Showcase
 
-![Phodal's Image](./images/onmap-demo.jpg)
+![Phodal's Image](http://ideabook.phodal.com/images/onmap-demo.jpg)
 
 ###框架: EXIF & ExifRead & CartoDB
 
@@ -4371,7 +4371,7 @@ D3.js 制作技能树
 
 代码见: [https://github.com/phodal/sherlock](https://github.com/phodal/sherlock)
 
-![Sherlock](./images/sherlock.png)
+![Sherlock](http://ideabook.phodal.com/images/sherlock.png)
 
 ###Graphviz
 
@@ -4395,7 +4395,7 @@ dot -Tjpg lz.dot -o lz.jpg
 
 就会生成下面的图片
 
-![lz](./images/lz.jpg)
+![lz](http://ideabook.phodal.com/images/lz.jpg)
 	
 接着我们便可以建立一个简单的模型来构建我们的技能树。
 
@@ -4420,7 +4420,7 @@ dot -Tjpg lz.dot -o lz.jpg
 
 于是我们有了这张图:
 
-![Tree](./images/tree.jpg)
+![Tree](http://ideabook.phodal.com/images/tree.jpg)
 
 而我们的代码是这样的:
 
@@ -4448,7 +4448,7 @@ digraph tree
   
 使用D3.js与Darge-d3构建一个简单的技能树的时候,需要一个简单的类似于小贴士的插件。
 
-![Tooltips](./images/tips.jpg)
+![Tooltips](http://ideabook.phodal.com/images/tips.jpg)
 
 #### Tooltipster
 
@@ -4538,7 +4538,7 @@ inner.selectAll('g.node')
 
 最后的效果如下图:
 
-![Screenshot](./images/tech-stack.jpg)
+![Screenshot](http://ideabook.phodal.com/images/tech-stack.jpg)
 
 ### D3.js
 
@@ -4643,7 +4643,7 @@ for (var quadrant in data) {
 
 ### ShowCase
 
-![Node](./images/node.png) ![Refactor](./images/refactor.png) ![TDD](./images/tdd.png) ![Clean Code](./images/clean_code.png)
+![Node](http://ideabook.phodal.com/images/node.png) ![Refactor](http://ideabook.phodal.com/images/refactor.png) ![TDD](http://ideabook.phodal.com/images/tdd.png) ![Clean Code](http://ideabook.phodal.com/images/clean_code.png)
 
 代码见:[https://github.com/phodal/text2logo](https://github.com/phodal/text2logo)
   
@@ -4740,11 +4740,11 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 或者你已经使用过了相应多的省市区与地图联动,但是这些联动往往是单向的、不可逆。并且这些数据往往都是在线使用的,不能离线使用。下图是一个结合百度地图的省市区与地图联动:
 
-![一般的省市区与地图联动](./images/general-province-city-map.png)
+![一般的省市区与地图联动](http://ideabook.phodal.com/images/general-province-city-map.png)
 
 我们可以在这个应用里选择,相应的省市区然后地图会跳转到相应的地图。当我们在地图上漫游的时候,如果没有显示当前的省市区是不是变得很难使用。于是,我们就来创建一个吧:
 
-![地图到省市区联动](./images/anti-map-action.jpg)
+![地图到省市区联动](http://ideabook.phodal.com/images/anti-map-action.jpg)
 
 ### jQuery + Mustache + Leaflet
 
@@ -4774,7 +4774,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 换句话来说,根据这个文件里面的多边形,我们可以绘制出中国地图。由于上面的点是真实的地理位置信息,所以无论我们怎样的缩放这些点的位置都不会发生变化。如下图是GitHub对这个数据文件的解析:
 
-![中国GeoJSON文件](./images/china-geojson.jpg)
+![中国GeoJSON文件](http://ideabook.phodal.com/images/china-geojson.jpg)
 
 (PS: 预览可以打开这个页面:[Vmap GeoJSON](https://github.com/phodal/vmap/blob/gh-pages/static/data/china.json)
 
@@ -4786,7 +4786,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 所谓的多边形搜索就是画一个圈圈(任意多边形),然后你就可以去约这个圈圈里的人,如下图所示:
 
-![多边形搜索](./images/geopoly2d-small.png)
+![多边形搜索](http://ideabook.phodal.com/images/geopoly2d-small.png)
 
 而圈圈搜索依赖于圈圈上的连续的点构建的形状来进行搜索,上面的每个点都包含了相应的经纬度。因此,只要是在这个圈圈里的用户都是可以搜索得到的。
 
@@ -4804,7 +4804,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 最初的时候要用Event的形式来实现,但是发现这样似乎会让其紧耦合。就改用了监听Hash Change的形式来实现,在总的地图上每一个省都有一个对应的ID,这个ID会对应相应的省的数据。如下图所示:
 
-![Province Hash](./images/province-hash-with-map.jpg)
+![Province Hash](http://ideabook.phodal.com/images/province-hash-with-map.jpg)
 
 接着,我们就需要从这个Hash中判断它的级别和ID,随后转由相应的函数来处理这些逻辑即可。随后,我们要做两件事:
 
@@ -4823,7 +4823,7 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 同理,我们也可以对上面的市运行处理。但是因为这些市并不存在GEO信息,所以我只是从其多连形信息取了一个点,再将这个点放到data-geo中:
 
-![Data GEO](./images/city-with-geo.jpg)
+![Data GEO](http://ideabook.phodal.com/images/city-with-geo.jpg)
 
 对应于省市的,对于区的处理也是如此。这样,我们就完成了地点到地图的显示了。
 
@@ -4831,5 +4831,5 @@ GEOJSON与ElasticSearch实现高级图形搜索
 
 从地图上到地点就比较简单了,点击时修改对应的text即可。
 
-![VMap Click ](./images/vmap-click-handler.jpg)
+![VMap Click ](http://ideabook.phodal.com/images/vmap-click-handler.jpg)
 

+ 52 - 52
index.html

@@ -4,7 +4,7 @@
   <meta charset="utf-8">
   <meta name="generator" content="pandoc">
   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-  <title>Phodal's Idea实战指南 - </title>
+  <title>Phodal's Idea实战指南  </title>
   <style type="text/css">code{white-space: pre;}</style>
   <style type="text/css">
 div.sourceCode { overflow-x: auto; }
@@ -319,7 +319,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
 <h3 id="showcase">ShowCase</h3>
 <p>最后的效果如下图如示:</p>
 <figure>
-<img src="./images/map_with_bg.jpg" alt="Demo" /><figcaption>Demo</figcaption>
+<img src="http://ideabook.phodal.com/images/map_with_bg.jpg" alt="Demo" /><figcaption>Demo</figcaption>
 </figure>
 <p>这是一个Web生成的界面,通过Elastic.js向搜索引擎查询数据,将再这些数据渲染到地图上。</p>
 <h3 id="hadoop-pig-jython-ammap-elasticsearch">Hadoop + Pig + Jython + AmMap + ElasticSearch</h3>
@@ -625,7 +625,7 @@ def get_geo(ip):
 <h3 id="showcase-1">ShowCase</h3>
 <p>最后的效果如下图所示:</p>
 <figure>
-<img src="./images/bookshelf.jpg" alt="Bookshelf" /><figcaption>Bookshelf</figcaption>
+<img src="http://ideabook.phodal.com/images/bookshelf.jpg" alt="Bookshelf" /><figcaption>Bookshelf</figcaption>
 </figure>
 <p>代码见: <a href="https://github.com/phodal/bookshelf/" class="uri">https://github.com/phodal/bookshelf/</a></p>
 <h3 id="ionic-zxing">Ionic + Zxing</h3>
@@ -710,11 +710,11 @@ def get_geo(ip):
 <h3 id="背景-2">背景</h3>
 <p>前几天,再次看到一些CI的Badge的时候,就想着要做一个自己的Badge:</p>
 <figure>
-<img src="./images/badge.png" alt="Badge" /><figcaption>Badge</figcaption>
+<img src="http://ideabook.phodal.com/images/badge.png" alt="Badge" /><figcaption>Badge</figcaption>
 </figure>
 <p>接着,我就找了个图形工具简单地先设计了下面的一个Badge:</p>
 <figure>
-<img src="./images/demo.png" alt="Demo" /><figcaption>Demo</figcaption>
+<img src="http://ideabook.phodal.com/images/demo.png" alt="Demo" /><figcaption>Demo</figcaption>
 </figure>
 <p>生成的格式是SVG,接着我就打开SVG看看里面发现了什么。</p>
 <div class="sourceCode"><pre class="sourceCode xml"><code class="sourceCode xml"><span class="kw">&lt;?xml</span> version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;<span class="kw">?&gt;</span>
@@ -737,7 +737,7 @@ def get_geo(ip):
 <p>看了看代码很简单,我就想这可以用代码生成——我就可以生成出不同的样子了。</p>
 <h3 id="showcase-2">ShowCase</h3>
 <figure>
-<img src="./images/finally-brand.jpg" alt="Finally" /><figcaption>Finally</figcaption>
+<img src="http://ideabook.phodal.com/images/finally-brand.jpg" alt="Finally" /><figcaption>Finally</figcaption>
 </figure>
 <p>代码: GitHub: <a href="https://github.com/phodal/brand" class="uri">https://github.com/phodal/brand</a></p>
 <h3 id="svg与svgwrite">SVG与SVGWrite</h3>
@@ -774,7 +774,7 @@ dwg.save()</code></pre></div>
 <h3 id="step-2-高级badge">Step 2: 高级Badge</h3>
 <p>第一眼看到</p>
 <figure>
-<img src="./images/brand-idea-prototype.jpg" alt="Idea Prototype" /><figcaption>Idea Prototype</figcaption>
+<img src="http://ideabook.phodal.com/images/brand-idea-prototype.jpg" alt="Idea Prototype" /><figcaption>Idea Prototype</figcaption>
 </figure>
 <p>我就想着要不和这个一样好了,不就是画几条线的事么。</p>
 <div class="sourceCode"><pre class="sourceCode python"><code class="sourceCode python">
@@ -796,14 +796,14 @@ dwg.save()</code></pre></div>
     draw_for_bg_plus()</code></pre></div>
 <p>就有了下面的图,于是我又按照这种感觉来了好几下</p>
 <figure>
-<img src="./images/finally-brand.jpg" alt="Finally" /><figcaption>Finally</figcaption>
+<img src="http://ideabook.phodal.com/images/finally-brand.jpg" alt="Finally" /><figcaption>Finally</figcaption>
 </figure>
 <h1 id="web文本编辑器">Web文本编辑器</h1>
 <h2 id="概况-3">概况</h2>
 <h3 id="背景-3">背景</h3>
 <h3 id="showcase-3">ShowCase</h3>
 <figure>
-<img src="./images/congee.jpg" alt="Screenshot" /><figcaption>Screenshot</figcaption>
+<img src="http://ideabook.phodal.com/images/congee.jpg" alt="Screenshot" /><figcaption>Screenshot</figcaption>
 </figure>
 <p>GitHub: <a href="https://github.com/phodal/congee" class="uri">https://github.com/phodal/congee</a></p>
 <h3 id="ckeditor-ractive">CKEditor + Ractive</h3>
@@ -1004,7 +1004,7 @@ dwg.save()</code></pre></div>
 <p>又开始造一个新的轮子了,不过这次的起因比较简单,是想重新发明一个更好的Slide框架 —— EchoesWorks。如名字所言,我所需要的是一个<code>回声</code>工坊,即将博客、Slide重新回放。</p>
 <h3 id="showcase-4">Showcase</h3>
 <figure>
-<img src="./images/echoesworks.jpg" alt="EchoesWorks" /><figcaption>EchoesWorks</figcaption>
+<img src="http://ideabook.phodal.com/images/echoesworks.jpg" alt="EchoesWorks" /><figcaption>EchoesWorks</figcaption>
 </figure>
 <p>GitHub代码: <a href="https://github.com/phodal/echoesworks" class="uri">https://github.com/phodal/echoesworks</a></p>
 <h3 id="需求">需求</h3>
@@ -1146,7 +1146,7 @@ dwg.save()</code></pre></div>
 </blockquote>
 <p>为了实现之前说到的<code>编辑-发布-开发分离</code>的CMS,我还是花了两天的时间打造了一个面向普通用户的编辑器。效果截图如下所示:</p>
 <figure>
-<img src="./images/eche-editor-screenshot.png" alt="Echeveria Editor" /><figcaption>Echeveria Editor</figcaption>
+<img src="http://ideabook.phodal.com/images/eche-editor-screenshot.png" alt="Echeveria Editor" /><figcaption>Echeveria Editor</figcaption>
 </figure>
 <p>作为一个普通用户,这是一个很简单的软件。除了Electron + Node.js + React作了一个140M左右的软件,尽管打包完只有40M左右 ,但是还是会把用户吓跑的。不过作为一个快速构建的原型已经很不错了——构建速度很快、并且运行良好。</p>
 <p>尽管这个界面看上去还是稍微复杂了一下,还在试着想办法将链接名和日期去掉——问题是为什么会有这两个东西?</p>
@@ -1187,7 +1187,7 @@ dwg.save()</code></pre></div>
 <h4 id="git作为nosql数据库">git作为NoSQL数据库</h4>
 <p>在控制台中运行一下 <code>man git</code>你会得到下面的结果:</p>
 <figure>
-<img src="./images/man-git.png" alt="Man Git" /><figcaption>Man Git</figcaption>
+<img src="http://ideabook.phodal.com/images/man-git.png" alt="Man Git" /><figcaption>Man Git</figcaption>
 </figure>
 <p>这个答案看起来很有意思——不过这看上去似乎无关主题。</p>
 <p>不同的数据库会以不同的形式存储到文件中去。blob是git中最为基本的存储单位,我们的每个content都是一个blob。redis可以以rdb文件的形式存储到文件系统中。完成一个CMS,我们并不需要那么多的查询功能。</p>
@@ -1212,11 +1212,11 @@ dwg.save()</code></pre></div>
 <li>git push Carrot使用了下面的方案来搭建他们的静态内容的CMS。</li>
 </ol>
 <figure>
-<img src="./images/carrot.png" alt="Carrot" /><figcaption>Carrot</figcaption>
+<img src="http://ideabook.phodal.com/images/carrot.png" alt="Carrot" /><figcaption>Carrot</figcaption>
 </figure>
 <p>在这个方案里内容是用Contentful来发布他们的内容。而在我司<a href="https://www.thoughtworks.com/">ThoughtWorks</a>的官网里则采用了Github来管理这些内容。于是如果让我们写一个基于Github的CMS,那么架构变成了这样:</p>
 <figure>
-<img src="./images/travis-edit-publish-code.png" alt="Github 编辑-发布-开发" /><figcaption>Github 编辑-发布-开发</figcaption>
+<img src="http://ideabook.phodal.com/images/travis-edit-publish-code.png" alt="Github 编辑-发布-开发" /><figcaption>Github 编辑-发布-开发</figcaption>
 </figure>
 <p>或许你也用过Hexo / Jekyll / Octopress这样的静态博客,他们的原理都是类似的。我们有一个代码库用于生成静态页面,然后这些静态页面会被PUSH到Github Pages上。</p>
 <p>从我们设计系统的角度来说,我们会在Github上有三个代码库:</p>
@@ -1246,8 +1246,8 @@ dwg.save()</code></pre></div>
 <div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">travis</span> encrypt-file ssh_key --add</code></pre></div>
 <p>加密后的Key就会保存到<code>.travis.yml</code>文件里,然后就可以在Travis CI上push你的代码到Github上了。</p>
 <p>接着,你需要创建个deploy脚本,并且在<code>after_success</code>执行它:</p>
-<pre class="yml"><code>after_success:
-  - test $TRAVIS_PULL_REQUEST == &quot;false&quot; &amp;&amp; test $TRAVIS_BRANCH == &quot;master&quot; &amp;&amp; bash deploy.sh</code></pre>
+<div class="sourceCode"><pre class="sourceCode yml"><code class="sourceCode yaml"><span class="fu">after_success:</span>
+  <span class="kw">-</span> test $TRAVIS_PULL_REQUEST == <span class="st">&quot;false&quot;</span> &amp;&amp; test $TRAVIS_BRANCH == <span class="st">&quot;master&quot;</span> &amp;&amp; bash deploy.sh</code></pre></div>
 <p>在这个脚本里,你所需要做的就是clone content和code中的代码,并执行code中的生成脚本,生成新的内容后,提交代码。</p>
 <pre><code>#!/bin/bash
 
@@ -1345,7 +1345,7 @@ git push -q upstream HEAD:gh-pages</code></pre>
 <h3 id="背景-5">背景</h3>
 <h3 id="showcase-5">Showcase</h3>
 <figure>
-<img src="./images/gmap-solr.jpg" alt="Google Map Solr" /><figcaption>Google Map Solr</figcaption>
+<img src="http://ideabook.phodal.com/images/gmap-solr.jpg" alt="Google Map Solr" /><figcaption>Google Map Solr</figcaption>
 </figure>
 <p>GitHub <a href="https://github.com/phodal/gmap-solr" class="uri">https://github.com/phodal/gmap-solr</a></p>
 <h3 id="solr">Solr</h3>
@@ -1414,7 +1414,7 @@ api.add_resource(All, <span class="st">&#39;/geo/&#39;</span>)</code></pre></div
 <h3 id="showcase-6">ShowCase</h3>
 <p>截图合并如下:</p>
 <figure>
-<img src="./images/growth-full-platforms.jpg" alt="growth-full-platforms.png" /><figcaption>growth-full-platforms.png</figcaption>
+<img src="http://ideabook.phodal.com/images/growth-full-platforms.jpg" alt="growth-full-platforms.png" /><figcaption>growth-full-platforms.png</figcaption>
 </figure>
 <h3 id="ionic-electron-cordova">Ionic &amp; Electron &amp; Cordova</h3>
 <p>而更重要的是它们使用了同一份代码——除了对特定设备进行一些处理就没有其他修改。相信全栈的你已经看出来了:</p>
@@ -1437,13 +1437,13 @@ api.add_resource(All, <span class="st">&#39;/geo/&#39;</span>)</code></pre></div
 </ul>
 <p>接着我用Ionic创建了这个应用,这是一个再普通不过的过程。在这个过程里,我一直使用Chrome在调度我的代码。因为我是Android用户,我有Google Play的账号,便发布了Android版本。这时候遇到了一个问题,我并没有Apple Developer账号(现在在申请ing。。),而主要的用户对象程序员,这是一群<strong>不土</strong>的土豪。</p>
 <figure>
-<img src="./images/iphone.jpg" alt="iPHONE" /><figcaption>iPHONE</figcaption>
+<img src="http://ideabook.phodal.com/images/iphone.jpg" alt="iPHONE" /><figcaption>iPHONE</figcaption>
 </figure>
 <p>偶然间我才想到,我只要上传Web版本的代码就可以暂时性实现这个需求了。接着找了个AWS S3的插件,直接上传到了AWS S3上托管成静态文件服务。</p>
 <p>几天前在Github上收到一个issue——关于创造桌面版, 我便想着这也是可能的,我只需要写一个启动脚本和编译脚本即可。</p>
 <p>所以,最后我们的流程图就如下所示:</p>
 <figure>
-<img src="./images/growth-arch.png" alt="Growth Arch" /><figcaption>Growth Arch</figcaption>
+<img src="http://ideabook.phodal.com/images/growth-arch.png" alt="Growth Arch" /><figcaption>Growth Arch</figcaption>
 </figure>
 <p>除了显示到VR设备上,好像什么也不缺了。并且在我之前的文章《<a href="https://github.com/phodal/oculus-nodejs-threejs-example">Oculus + Node.js + Three.js 打造VR世界</a>》,也展示了Web在VR世界的可能性。</p>
 <p>在这实现期间有几个点可以分享一下:</p>
@@ -1454,11 +1454,11 @@ api.add_resource(All, <span class="st">&#39;/geo/&#39;</span>)</code></pre></div
 <h3 id="step-2-响应式设计">Step 2: 响应式设计</h3>
 <p>响应式设计可以主要依赖于Media Query,而响应式设计主要要追随的一点是不同的设备不同的显示,如:</p>
 <figure>
-<img src="./images/full-platforms.jpg" alt="full-platforms.jpg" /><figcaption>full-platforms.jpg</figcaption>
+<img src="http://ideabook.phodal.com/images/full-platforms.jpg" alt="full-platforms.jpg" /><figcaption>full-platforms.jpg</figcaption>
 </figure>
 <p>这也意味着,我们需要对不同的设备进行一些处理,如在大的屏幕下,我们需要展示菜单:</p>
 <figure>
-<img src="./images/gnu-linux.jpg" alt="gnu-linux.png" /><figcaption>gnu-linux.png</figcaption>
+<img src="http://ideabook.phodal.com/images/gnu-linux.jpg" alt="gnu-linux.png" /><figcaption>gnu-linux.png</figcaption>
 </figure>
 <p>而这可以依赖于Ionic的<strong>expose-aside-when=“large”</strong>,而并非所有的情形都是这么简单的。如我最近遇到的问题就是图片缩放的问题,之前的图片针对的都是手机版——经过了一定的缩放。</p>
 <p>这时在桌面应用上就会出现问题,就需要限定大小等等。</p>
@@ -1471,14 +1471,14 @@ api.add_resource(All, <span class="st">&#39;/geo/&#39;</span>)</code></pre></div
 <h4 id="数据分析">数据分析</h4>
 <p>为了开发方便,我使用Google Analytics来分析用户的行为——毕竟数据对我来说也不是特别重要,只要可以看到有人使用就可以了。</p>
 <p>这时候遇到的一个问题是,我不需要记录Web用户的行为,但是我希望可以看到有这样的请求发出。于是对于Web用户来说,只需要:</p>
-<pre class="js"><code>        trackView: function (view) {
-          console.log(view);
-        }</code></pre>
+<div class="sourceCode"><pre class="sourceCode js"><code class="sourceCode javascript">        trackView<span class="op">:</span> <span class="kw">function</span> (view) <span class="op">{</span>
+          <span class="va">console</span>.<span class="at">log</span>(view)<span class="op">;</span>
+        <span class="op">}</span></code></pre></div>
 <p>而对于手机用户则是:</p>
-<pre class="js"><code>      trackView: function (view) {
-        $window.analytics.startTrackerWithId(&#39;UA-71907748-1&#39;);
-        $window.analytics.trackView(view)
-      }</code></pre>
+<div class="sourceCode"><pre class="sourceCode js"><code class="sourceCode javascript">      trackView<span class="op">:</span> <span class="kw">function</span> (view) <span class="op">{</span>
+        <span class="va">$window</span>.<span class="va">analytics</span>.<span class="at">startTrackerWithId</span>(<span class="st">&#39;UA-71907748-1&#39;</span>)<span class="op">;</span>
+        <span class="va">$window</span>.<span class="va">analytics</span>.<span class="at">trackView</span>(view)
+      <span class="op">}</span></code></pre></div>
 <p>这样在我调试的时候我只需要打个Log,在产品环境时就会Track。</p>
 <h4 id="自动更新">自动更新</h4>
 <p>同样的,对于Android用户来说,他们可以选择自行下载更新,所以我需要针对Android用户有一个自动更新:</p>
@@ -1497,7 +1497,7 @@ if(isAndroid) {
 <p>类似的问题还有许多,不过由于应用内容的限制,这些问题就没有那么严重了。</p>
 <p>如果有一天,我有钱开放这个应用的应用号,那么我就会再次献上这个图:</p>
 <figure>
-<img src="./images/hexoarch.png" alt="六边形架构" /><figcaption>六边形架构</figcaption>
+<img src="http://ideabook.phodal.com/images/hexoarch.png" alt="六边形架构" /><figcaption>六边形架构</figcaption>
 </figure>
 <h3 id="未来">未来</h3>
 <p>我就开始思索这个问题,未来的趋势是合并到一起,而这一个趋势在现在就已经是完成时了。</p>
@@ -1509,15 +1509,15 @@ if(isAndroid) {
 <h3 id="showcase-7">Showcase</h3>
 <p>最后效果图</p>
 <figure>
-<img src="./images/elasticsearch_ionic_map.jpg" alt="elasticsearch_ionic_map" /><figcaption>elasticsearch_ionic_map</figcaption>
+<img src="http://ideabook.phodal.com/images/elasticsearch_ionic_map.jpg" alt="elasticsearch_ionic_map" /><figcaption>elasticsearch_ionic_map</figcaption>
 </figure>
 <figure>
-<img src="./images/elasticsearch_ionic_info_page.jpg" alt="elasticsearch_ionic_info_page" /><figcaption>elasticsearch_ionic_info_page</figcaption>
+<img src="http://ideabook.phodal.com/images/elasticsearch_ionic_info_page.jpg" alt="elasticsearch_ionic_info_page" /><figcaption>elasticsearch_ionic_info_page</figcaption>
 </figure>
 <h3 id="构架设计">构架设计</h3>
 <p>对我们的需求进行简要的思考后,设计出了下面的一些简单的架构。</p>
 <figure>
-<img src="./images/struct.png" alt="Django ElasticSearch Ionic 架构" /><figcaption>Django ElasticSearch Ionic 架构</figcaption>
+<img src="http://ideabook.phodal.com/images/struct.png" alt="Django ElasticSearch Ionic 架构" /><figcaption>Django ElasticSearch Ionic 架构</figcaption>
 </figure>
 <h4 id="服务端">服务端</h4>
 <p>简单说明:</p>
@@ -1982,7 +1982,7 @@ $cordovaGeolocation
 <span class="op">}</span>)<span class="op">;</span></code></pre></div>
 <p>当用户点击时,调用Bootstrap的Popover来显示信息。</p>
 <figure>
-<img src="./images/elasticsearch_ionit_map.jpg" alt="ElasticSearch Map" /><figcaption>ElasticSearch Map</figcaption>
+<img src="http://ideabook.phodal.com/images/elasticsearch_ionit_map.jpg" alt="ElasticSearch Map" /><figcaption>ElasticSearch Map</figcaption>
 </figure>
 <h1 id="一步步搭建javascript框架-lettuce">一步步搭建JavaScript框架: Lettuce</h1>
 <h2 id="概况-9">概况</h2>
@@ -2146,7 +2146,7 @@ root.Lettuce = Lettuce;
 <p>当我们在写一些UI测试的时候,我们总需要到浏览器去看一下一些DOM的变化。比如,我们点击了某个下拉菜单,会有另外一个联动的下拉菜单发生了变化。而如果这个事件更复杂的时候,有时我们可能就很难观察出来他们之间的变化。</p>
 <h3 id="showcase-8">ShowCase</h3>
 <figure>
-<img src="./images/luffa.jpg" alt="Luffa Screenshot" /><figcaption>Luffa Screenshot</figcaption>
+<img src="http://ideabook.phodal.com/images/luffa.jpg" alt="Luffa Screenshot" /><figcaption>Luffa Screenshot</figcaption>
 </figure>
 <p>源码见:<a href="https://github.com/phodal/luffa" class="uri">https://github.com/phodal/luffa</a></p>
 <h3 id="基本原理">基本原理</h3>
@@ -3122,10 +3122,10 @@ require([&#39;../app&#39;], function(App){
 <h3 id="showcase-10">Showcase</h3>
 <p>这个repo的最后效果图如下所示:</p>
 <figure>
-<img src="./images/demo.jpg" alt="最后效果图" /><figcaption>最后效果图</figcaption>
+<img src="http://ideabook.phodal.com/images/demo.jpg" alt="最后效果图" /><figcaption>最后效果图</figcaption>
 </figure>
 <figure>
-<img src="./images/oculus-vr.jpg" alt="Three.js Oculus Effect" /><figcaption>Three.js Oculus Effect</figcaption>
+<img src="http://ideabook.phodal.com/images/oculus-vr.jpg" alt="Three.js Oculus Effect" /><figcaption>Three.js Oculus Effect</figcaption>
 </figure>
 <p>效果:</p>
 <ol type="1">
@@ -3344,7 +3344,7 @@ yaw = (rotation about (Pitch • Raw • Z));”</code></pre>
 <p>就是,我们需要设置camera和controller的旋转。</p>
 <p>这使我有足够的理由相信Oculus就是一个手机 + 一个6轴运动处理组件的升级板——因为,我玩过MPU6050这样的传感器,如图。。。</p>
 <figure>
-<img src="./images/mpu6050.jpg" alt="Oculus 6050" /><figcaption>Oculus 6050</figcaption>
+<img src="http://ideabook.phodal.com/images/mpu6050.jpg" alt="Oculus 6050" /><figcaption>Oculus 6050</figcaption>
 </figure>
 <p><strong>Three.js DK2Controls</strong></p>
 <p>虽然下面的代码不是我写的,但是还是简单地说一下。</p>
@@ -3511,7 +3511,7 @@ yaw = (rotation about (Pitch • Raw • Z));”</code></pre>
 <p>我使用的Nokia Lumia 920没有一个好的照片应用</p>
 <h3 id="showcase-11">Showcase</h3>
 <figure>
-<img src="./images/onmap-demo.jpg" alt="Phodal’s Image" /><figcaption>Phodal’s Image</figcaption>
+<img src="http://ideabook.phodal.com/images/onmap-demo.jpg" alt="Phodal’s Image" /><figcaption>Phodal’s Image</figcaption>
 </figure>
 <h3 id="框架-exif-exifread-cartodb">框架: EXIF &amp; ExifRead &amp; CartoDB</h3>
 <p><strong>EXIF</strong></p>
@@ -3642,7 +3642,7 @@ jsonFile.close()</code></pre></div>
 <h3 id="showcase-12">Showcase</h3>
 <p>代码见: <a href="https://github.com/phodal/sherlock" class="uri">https://github.com/phodal/sherlock</a></p>
 <figure>
-<img src="./images/sherlock.png" alt="Sherlock" /><figcaption>Sherlock</figcaption>
+<img src="http://ideabook.phodal.com/images/sherlock.png" alt="Sherlock" /><figcaption>Sherlock</figcaption>
 </figure>
 <h3 id="graphviz">Graphviz</h3>
 <blockquote>
@@ -3658,7 +3658,7 @@ jsonFile.close()</code></pre></div>
 <div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">dot</span> -Tjpg lz.dot -o lz.jpg</code></pre></div>
 <p>就会生成下面的图片</p>
 <figure>
-<img src="./images/lz.jpg" alt="lz" /><figcaption>lz</figcaption>
+<img src="http://ideabook.phodal.com/images/lz.jpg" alt="lz" /><figcaption>lz</figcaption>
 </figure>
 <p>接着我们便可以建立一个简单的模型来构建我们的技能树。</p>
 <h2 id="步骤-14">步骤</h2>
@@ -3676,7 +3676,7 @@ jsonFile.close()</code></pre></div>
 <p>即Web前端依赖于JavaScript、HTML、CSS,而Node.js依赖于JavaScript,当然我们也需要数据的支持,大部分的网站都是数据驱动型的开发。而构成完成的开发链的则是前端 + 服务端。</p>
 <p>于是我们有了这张图:</p>
 <figure>
-<img src="./images/tree.jpg" alt="Tree" /><figcaption>Tree</figcaption>
+<img src="http://ideabook.phodal.com/images/tree.jpg" alt="Tree" /><figcaption>Tree</figcaption>
 </figure>
 <p>而我们的代码是这样的:</p>
 <div class="sourceCode"><pre class="sourceCode dot"><code class="sourceCode dot"><span class="kw">digraph</span> <span class="fu">tree</span>
@@ -3698,7 +3698,7 @@ jsonFile.close()</code></pre></div>
 <h3 id="step-3-d3.js-tooltipster">Step 3: D3.js Tooltipster</h3>
 <p>使用D3.js与Darge-d3构建一个简单的技能树的时候,需要一个简单的类似于小贴士的插件。</p>
 <figure>
-<img src="./images/tips.jpg" alt="Tooltips" /><figcaption>Tooltips</figcaption>
+<img src="http://ideabook.phodal.com/images/tips.jpg" alt="Tooltips" /><figcaption>Tooltips</figcaption>
 </figure>
 <h4 id="tooltipster">Tooltipster</h4>
 <p>Tooltipster是一个jQuery tooltip 插件,兼容Mozilla Firefox, Google Chrome, IE8+。</p>
@@ -3758,7 +3758,7 @@ jsonFile.close()</code></pre></div>
 <p>在线预览: <a href="http://phodal.github.io/techstack" class="uri">http://phodal.github.io/techstack</a></p>
 <p>最后的效果如下图:</p>
 <figure>
-<img src="./images/tech-stack.jpg" alt="Screenshot" /><figcaption>Screenshot</figcaption>
+<img src="http://ideabook.phodal.com/images/tech-stack.jpg" alt="Screenshot" /><figcaption>Screenshot</figcaption>
 </figure>
 <h3 id="d3.js">D3.js</h3>
 <h2 id="步骤-15">步骤</h2>
@@ -3836,7 +3836,7 @@ jsonFile.close()</code></pre></div>
 <h3 id="背景-14">背景</h3>
 <p>在设计技能树的时候需要做一些简单的Logo,方便我们来识别,这时候就想到了PIL。加上一些简单的圆角,以及特殊的字体,就可以构成一个简单的Logo。做成的图标看上去还不错:</p>
 <h3 id="showcase-14">ShowCase</h3>
-<p><img src="./images/node.png" alt="Node" /> <img src="./images/refactor.png" alt="Refactor" /> <img src="./images/tdd.png" alt="TDD" /> <img src="./images/clean_code.png" alt="Clean Code" /></p>
+<p><img src="http://ideabook.phodal.com/images/node.png" alt="Node" /> <img src="http://ideabook.phodal.com/images/refactor.png" alt="Refactor" /> <img src="http://ideabook.phodal.com/images/tdd.png" alt="TDD" /> <img src="http://ideabook.phodal.com/images/clean_code.png" alt="Clean Code" /></p>
 <p>代码见:<a href="https://github.com/phodal/text2logo" class="uri">https://github.com/phodal/text2logo</a></p>
 <h3 id="需求说明">需求说明</h3>
 <p>简单的说一些我们的附加需求</p>
@@ -3903,11 +3903,11 @@ colors_length <span class="op">=</span> ConfigColor.items(<span class="st">&#39;
 <p>在线Demo见: <a href="http://vmap.phodal.com/" class="uri">http://vmap.phodal.com/</a></p>
 <p>或者你已经使用过了相应多的省市区与地图联动,但是这些联动往往是单向的、不可逆。并且这些数据往往都是在线使用的,不能离线使用。下图是一个结合百度地图的省市区与地图联动:</p>
 <figure>
-<img src="./images/general-province-city-map.png" alt="一般的省市区与地图联动" /><figcaption>一般的省市区与地图联动</figcaption>
+<img src="http://ideabook.phodal.com/images/general-province-city-map.png" alt="一般的省市区与地图联动" /><figcaption>一般的省市区与地图联动</figcaption>
 </figure>
 <p>我们可以在这个应用里选择,相应的省市区然后地图会跳转到相应的地图。当我们在地图上漫游的时候,如果没有显示当前的省市区是不是变得很难使用。于是,我们就来创建一个吧:</p>
 <figure>
-<img src="./images/anti-map-action.jpg" alt="地图到省市区联动" /><figcaption>地图到省市区联动</figcaption>
+<img src="http://ideabook.phodal.com/images/anti-map-action.jpg" alt="地图到省市区联动" /><figcaption>地图到省市区联动</figcaption>
 </figure>
 <h3 id="jquery-mustache-leaflet">jQuery + Mustache + Leaflet</h3>
 <p>相关技术栈:</p>
@@ -3932,7 +3932,7 @@ colors_length <span class="op">=</span> ConfigColor.items(<span class="st">&#39;
 </blockquote>
 <p>换句话来说,根据这个文件里面的多边形,我们可以绘制出中国地图。由于上面的点是真实的地理位置信息,所以无论我们怎样的缩放这些点的位置都不会发生变化。如下图是GitHub对这个数据文件的解析:</p>
 <figure>
-<img src="./images/china-geojson.jpg" alt="中国GeoJSON文件" /><figcaption>中国GeoJSON文件</figcaption>
+<img src="http://ideabook.phodal.com/images/china-geojson.jpg" alt="中国GeoJSON文件" /><figcaption>中国GeoJSON文件</figcaption>
 </figure>
 <p>(PS: 预览可以打开这个页面:<a href="https://github.com/phodal/vmap/blob/gh-pages/static/data/china.json">Vmap GeoJSON</a></p>
 <p>当然这似乎不是一个专业人员维护的数据,所以存在一些偏差。但是这些数据意味着,我们不需要依靠于在线地图就可以完成大部分的功能了。在线地图一直都是一个缓慢的存在,并且Google Map在多数人那都是不可用的。</p>
@@ -3940,7 +3940,7 @@ colors_length <span class="op">=</span> ConfigColor.items(<span class="st">&#39;
 <h4 id="多边形搜索">多边形搜索</h4>
 <p>所谓的多边形搜索就是画一个圈圈(任意多边形),然后你就可以去约这个圈圈里的人,如下图所示:</p>
 <figure>
-<img src="./images/geopoly2d-small.png" alt="多边形搜索" /><figcaption>多边形搜索</figcaption>
+<img src="http://ideabook.phodal.com/images/geopoly2d-small.png" alt="多边形搜索" /><figcaption>多边形搜索</figcaption>
 </figure>
 <p>而圈圈搜索依赖于圈圈上的连续的点构建的形状来进行搜索,上面的每个点都包含了相应的经纬度。因此,只要是在这个圈圈里的用户都是可以搜索得到的。</p>
 <p>这样实现的前提是:</p>
@@ -3953,7 +3953,7 @@ colors_length <span class="op">=</span> ConfigColor.items(<span class="st">&#39;
 <p>拿Bootstrap实现一个Dropdown是一件很容易的事,我们只要动用一下相应的模板就好了。难就难在,如果去与地图交互。</p>
 <p>最初的时候要用Event的形式来实现,但是发现这样似乎会让其紧耦合。就改用了监听Hash Change的形式来实现,在总的地图上每一个省都有一个对应的ID,这个ID会对应相应的省的数据。如下图所示:</p>
 <figure>
-<img src="./images/province-hash-with-map.jpg" alt="Province Hash" /><figcaption>Province Hash</figcaption>
+<img src="http://ideabook.phodal.com/images/province-hash-with-map.jpg" alt="Province Hash" /><figcaption>Province Hash</figcaption>
 </figure>
 <p>接着,我们就需要从这个Hash中判断它的级别和ID,随后转由相应的函数来处理这些逻辑即可。随后,我们要做两件事:</p>
 <ul>
@@ -3970,13 +3970,13 @@ colors_length <span class="op">=</span> ConfigColor.items(<span class="st">&#39;
 <p>在这个过程中遇到的最大的坑是:中国有北京、上海、天津、重庆等直辖市,还有港、澳等自治区(PS:台湾是一个省)。对于这些特殊的地点,那么的缩放级别肯定会更高。</p>
 <p>同理,我们也可以对上面的市运行处理。但是因为这些市并不存在GEO信息,所以我只是从其多连形信息取了一个点,再将这个点放到data-geo中:</p>
 <figure>
-<img src="./images/city-with-geo.jpg" alt="Data GEO" /><figcaption>Data GEO</figcaption>
+<img src="http://ideabook.phodal.com/images/city-with-geo.jpg" alt="Data GEO" /><figcaption>Data GEO</figcaption>
 </figure>
 <p>对应于省市的,对于区的处理也是如此。这样,我们就完成了地点到地图的显示了。</p>
 <h3 id="step-3-从地图到地点上显示">Step 3: 从地图到地点上显示</h3>
 <p>从地图上到地点就比较简单了,点击时修改对应的text即可。</p>
 <figure>
-<img src="./images/vmap-click-handler.jpg" alt="VMap Click" /><figcaption>VMap Click</figcaption>
+<img src="http://ideabook.phodal.com/images/vmap-click-handler.jpg" alt="VMap Click" /><figcaption>VMap Click</figcaption>
 </figure>
 </body>
 </html>