<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lijy91 (Lijy91)</title>
    <link>https://ruby-china.org/lijy91</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>「daza.io」个人全端开源项目的 Android &amp; iOS 客户端都上线了</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://daza.io" rel="nofollow" target="_blank" title=""&gt;「daza.io」&lt;/a&gt;是一款基于技能树（正在实现）的技术内容聚合应用，根据你的技能对内容进行筛选，让你在这个信息过载的时代里更高效地获取你所需的内容。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;自上次发文章之后已经过了 2 个月了，我也在 11 月 19 号结束了&lt;a href="https://daza.io/topics/10/articles" rel="nofollow" target="_blank" title=""&gt;一个人的旅行&lt;/a&gt;（历时 59 天）回到了深圳，专心于完成这个全端项目的客户端开发，终于在 12 月 2 号 iOS 版上线 AppStore，12 月 7 号 Android 上线到 GooglePlay。&lt;/p&gt;

&lt;p&gt;最初我将 iOS 版定价为 1 元，但是后来和一朋友聊天时聊到这个项目能为用户提供什么价值的问题，后来想想目前这个项目能给用户提供的价值是有限的，所以就调为免费的了。&lt;/p&gt;
&lt;h2 id="访问网站"&gt;访问网站&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://daza.io" rel="nofollow" target="_blank" title=""&gt;https://daza.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.daza.io" rel="nofollow" target="_blank" title=""&gt;https://api.daza.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="获取源码"&gt;获取源码&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Star ! Star ! Star !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-backend" rel="nofollow" target="_blank" title=""&gt;daza-backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-frontend" rel="nofollow" target="_blank" title=""&gt;daza-frontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-ios" rel="nofollow" target="_blank" title=""&gt;daza-ios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-android" rel="nofollow" target="_blank" title=""&gt;daza-android&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="应用截图"&gt;应用截图&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://oeolgl6y5.qnssl.com/topic/SJHfR0vQe/HJYNCADXe.png?imageView2/2/w/1200/h/1200" title="" alt=""&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Android 的界面布局与 iOS 版基本保持一致，但均采用了原生的控件实现，这里就不放截图了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="获取"&gt;获取&lt;/h3&gt;
&lt;p&gt;快速获取（自动识别系统）：
&lt;a href="http://a.app.qq.com/o/simple.jsp?pkgname=io.daza.app" rel="nofollow" target="_blank"&gt;http://a.app.qq.com/o/simple.jsp?pkgname=io.daza.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://oeolgl6y5.qnssl.com/topic/SJHfR0vQe/S1JLNrc7e.png?imageView2/2/w/120/h/120" title="" alt="扫一扫，下载应用"&gt;&lt;/p&gt;
&lt;h4 id="iOS 版"&gt;iOS 版&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/daza.io/id1180300716?l=zh&amp;amp;ls=1&amp;amp;mt=8" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://devimages.apple.com.edgekey.net/app-store/marketing/guidelines/images/badge-download-on-the-app-store-cn.svg" title="" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="Android 版"&gt;Android 版&lt;/h4&gt;
&lt;p&gt;已上架多个国内主流应用市场&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=io.daza.app" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://play.google.com/intl/en_us/badges/images/badge_new.png" title="" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="一些小技巧"&gt;一些小技巧&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;以下是我觉得比较值得分享的小技巧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="设计"&gt;设计&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;对于我来说 UI 才是最头痛的，在没有设计师帮忙的情况下一切都得自己来了，下面是我在做 UI 时的一些经验。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;选用成熟的配色方案&lt;/li&gt;
&lt;li&gt;使用相同风格的图标（尽量使用比较全的图标库）&lt;/li&gt;
&lt;li&gt;尽量保持简洁的界面设计（实用至上）&lt;/li&gt;
&lt;li&gt;与系统风格保持一致&lt;/li&gt;
&lt;li&gt;合适的字体尺寸以及边距等&lt;/li&gt;
&lt;li&gt;设计要符合使用场景（很多使用侧边栏导航的应用就是反面教材）&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;我在项目里使用了 Material Design 提供的配色（Blue Grey）和图标，在两个系统上看起来都非常的和谐。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="参考资源"&gt;参考资源&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://material.io/icons" rel="nofollow" target="_blank"&gt;https://material.io/icons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://material.google.com/style/color.html" rel="nofollow" target="_blank"&gt;https://material.google.com/style/color.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第三方服务"&gt;第三方服务&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用第三方服务就是为了减少研发成本，但一定要慎重选用。下面介绍这个项目使用的一些第三方服务。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;DaoCloud
&amp;gt; 使用了 Docker 镜像构建，自有主机功能。
&amp;gt; 当前项目已经完全实现自动部署。&lt;/li&gt;
&lt;li&gt;阿里云
&amp;gt; 使用了 ECS 云主机&lt;/li&gt;
&lt;li&gt;七牛云
&amp;gt; 使用了 云存储，免费 SSL 证书&lt;/li&gt;
&lt;li&gt;云巴
&amp;gt; 使用了推送服务&lt;/li&gt;
&lt;li&gt;GrowingIO
&amp;gt; 用于统计&lt;/li&gt;
&lt;li&gt;BugHD
&amp;gt; 用于 Crash 收集&lt;/li&gt;
&lt;li&gt;AdMob
&amp;gt; 广告&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="API"&gt;API&lt;/h2&gt;
&lt;p&gt;使用了 REST 风格进行设计，每个接口所返回的数据结构均保持一致。&lt;/p&gt;

&lt;p&gt;数据结构示例：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "code": 0,
    "message": "...",
    "errors": [
        {
            "code": 10000,
            "field": "user",
            "message": "用户 不存在。"
        }
    ],
    "pagination": {
        "total": 10,
        "per_page": 10,
        "current_page": 1,
        "last_page": 1,
        "from": 1,
        "to": 10
    },
    "data": {
        ...
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;code: 错误码
&amp;gt; 当错误码不为 0 时代表发生错误。&lt;/li&gt;
&lt;li&gt;message: 错误消息&lt;/li&gt;
&lt;li&gt;errors: 错误列表
&amp;gt; 当发生多个错误时返回错误列表，客户端根据列表返回的进行相应的处理。&lt;/li&gt;
&lt;li&gt;pagination: 分页对象
&amp;gt; 仅当 data 字段为数组时才返回。
&lt;code&gt;
"total": 总数
"per_page": 每页显示数量
"current_page": 当前页码
"last_page": 最后一页面页码
"from": 开始Id
"to": 结束Id
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;data: 数据（对象 / 数组）
&amp;gt; 在实现时使用泛型对 data 进行处理。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;泛型数据处理示例（Java）：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Result&amp;lt;T&amp;gt; {

    private int code;
    private String message;
    private List&amp;lt;Error&amp;gt; errors;
    private Pagination pagination;
    private T data;

    public Result() {
    }

    public boolean isSuccessful() {
        return this.code == 0;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List&amp;lt;Error&amp;gt; getErrors() {
        return errors;
    }

    public void setErrors(List&amp;lt;Error&amp;gt; errors) {
        this.errors = errors;
    }

    public Pagination getPagination() {
        return pagination;
    }

    public void setPagination(Pagination pagination) {
        this.pagination = pagination;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

// 当 data 为 User 时的示例
new Result&amp;lt;User&amp;gt;();
// 当 data 为 User 列表时的示例
new Result&amp;lt;ArrayList&amp;lt;User&amp;gt;&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="客户端"&gt;客户端&lt;/h2&gt;&lt;h3 id="文章详情（WebView交互）"&gt;文章详情（WebView 交互）&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;文章详情页面因为排版相关原因，并没有采用原生的开发方式，而是直接加载一个外部链接&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;外部链接：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://daza.io/in-app/articles/{id}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为 WebView 此时是没有保存用户状态的，所以需要将客户端的用户登录 Token 相关信息传递给 WebView，即在加载完毕后执行 JavaScript 代码写入。&lt;/p&gt;

&lt;p&gt;Java:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 开启 JavaScript 及 localStorage支持
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);

// 页面加载完毕后将相关数据保存到localStorage里。
public void onPageFinished(WebView view, String url) {
    String script = "javascript:";
    if (Auth.check()) {
        script += "localStorage.setItem('auth.id', '" + Auth.id() + "');\n";
        script += "localStorage.setItem('auth.user', '" + Auth.user().toJSONString() + "');\n";
        script += "localStorage.setItem('auth.jwt_token', '" + Auth.jwtToken().toJSONString() + "');\n";
    } else {
        script += "localStorage.clear();\n";
    }
    mWebView.loadUrl(script);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整代码：
&lt;a href="https://github.com/lijy91/daza-android/blob/master/app/src/main/java/io/daza/app/ui/InAppBrowserActivity.java" rel="nofollow" target="_blank"&gt;https://github.com/lijy91/daza-android/blob/master/app/src/main/java/io/daza/app/ui/InAppBrowserActivity.java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Swift:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func webViewDidFinishLoad(webView: UIWebView) {
    if (!Auth.check()) {
        return
    }
    let standardUserDefaults = NSUserDefaults.standardUserDefaults()

    let authId = Auth.id();
    let authUser = standardUserDefaults.stringForKey("auth.user")
    let authJwtToken = standardUserDefaults.stringForKey("auth.jwt_token")
    var script = ""
    script += "localStorage.setItem('auth.id', '\(authId)');\n"
    script += "localStorage.setItem('auth.user', '\(authUser!)');\n"
    script += "localStorage.setItem('auth.jwt_token', '\(authJwtToken!)');\n"
    webView.stringByEvaluatingJavaScriptFromString(script)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整代码：
&lt;a href="https://github.com/lijy91/daza-ios/blob/master/Daza/Controllers/InAppBrowserController.swift" rel="nofollow" target="_blank"&gt;https://github.com/lijy91/daza-ios/blob/master/Daza/Controllers/InAppBrowserController.swift&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="DeepLink支持"&gt;DeepLink 支持&lt;/h4&gt;
&lt;p&gt;支持 DeepLink 后在 WebView 里直接可以通过自定义的 URL 来打开相应的页面，避免与 WebView 更麻烦的操作。&lt;/p&gt;

&lt;p&gt;目前支持的链接：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;daza://users/{user_id}
daza://topics/{topic_id}
daza://articles/{article_id}
daza://articles/{article_id}/comments
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于安卓的 WebView 不支持这个 DeepLink，所以需要做一些处理：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public WebViewClient mWebViewClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       if (url.startsWith("daza://")) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            return true;
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="关于作者"&gt;关于作者&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;目前正处于自由职业的状态，如果有 API 或者客户端的需求欢迎加我微信&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="https://oeolgl6y5.qnssl.com/topic/ByRafuLR/r1no_q9R.jpg?imageView2/2/w/200" title="" alt=""&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;如果你有什么好想法想告诉我，或者想加入讨论组（注明加入讨论组），请加我微信。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="捐赠"&gt;捐赠&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/r1WH8F90.jpg?imageView2/2/w/200" title="" alt=""&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;如果你觉得我的工作对你有帮助，那你可以为项目捐赠运营费用。&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>lijy91</author>
      <pubDate>Sun, 11 Dec 2016 21:52:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/31878</link>
      <guid>https://ruby-china.org/topics/31878</guid>
    </item>
    <item>
      <title>「daza.io」这将是我独立完成全端开发的项目</title>
      <description>&lt;p&gt;最近三年的工作经历，让我有机会接触到不同技术栈的项目，并且从中积累了不少各个技术栈的开发经验，虽然技术深度不够，但可以用不同技术视角去思考项目的设计和开发，例如：以客户端开发的视角去思考 API 的设计、用客户端开发的思路去开发前端项目等，然而这些经验都分散在了我这两年半时间里做的大大小小的项目里。&lt;/p&gt;

&lt;p&gt;所以我希望可以将我的这些经验归纳总在「daza.io」这个项目里，它的实质是一个内容聚合项目（参考了即刻的形式），用程序去收集一些可能感兴趣的文章，并通过其他用户对于文章的评判，以达到筛选到优质内容，提高学习效率。&lt;/p&gt;

&lt;p&gt;另外它还有另外一个作为，为我的其他小项目提供数据。最简单的一个例子就是最近在写的个人博客，其中有一个模块就是用地图展示我旅行的足迹，数据就是来源于它。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我的进步离不开开源，所以「daza.io」也是全部开源的&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;「daza.io」是打杂的拼音，也是对一种自嘲，其实个人感觉敢自称自己是打杂的人综合能力都是挺强的。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;主页：&lt;a href="http://daza.io" rel="nofollow" target="_blank" title=""&gt;http://daza.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;接口：&lt;a href="http://api.daza.io" rel="nofollow" target="_blank" title=""&gt;http://api.daza.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="LOGO"&gt;LOGO&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;LOGO 是请我一个设计师朋友设计的，个人非常喜欢他的设计，与他合作的两年来也得到了挺多关于设计及用户体验上的经验。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/HyxnHc9A.png?imageView2/2/w/240/h/240" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="网站截图"&gt;网站截图&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/r1Cg7u8A.png?imageView2/2/w/1280/h/1280" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;&lt;h3 id="REST"&gt;REST&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;本人是非常喜欢文档先行的工作方式的，先用文档将思路整理一遍，然后在开发的时候再次完善。这次我在对比了多个文档工具最终选择了 Swagger。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Swagger&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;查看文档： &lt;a href="http://api.daza.io/docs" rel="nofollow" target="_blank"&gt;http://api.daza.io/docs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="后端（ API Only ）"&gt;后端（API Only）&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;在最终采用 Laravel 之前，我一度已经在使用 Sails.js 开发了，但由于考虑到代码被其他项目重用及市场现状，并且上半年负责的项目刚好使用了 Laravel。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Laravel 5.3&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="前端"&gt;前端&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用了现在非常火的 Vue.js 框架开发，肯定有人会问，现在 Vue.js 2.0 都已经发布了，为什么不用 2.0 写。那是因为这个项目在 5 月就已经创建了，所以在现在在使用 2.0 进行开发自己的&lt;a href="https://github.com/lijy91/jianying.li" rel="nofollow" target="_blank" title=""&gt;个人博客&lt;/a&gt;项目，一但把 1.x 和 2.0 的一些差异了解得差不多后就会升级。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Vue.js 1.x&lt;/li&gt;
&lt;li&gt;vuex&lt;/li&gt;
&lt;li&gt;vue-router&lt;/li&gt;
&lt;li&gt;vue-resource&lt;/li&gt;
&lt;li&gt;vue-validator&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="客户端"&gt;客户端&lt;/h3&gt;&lt;h4 id="iOS"&gt;iOS&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 Swift 2.3 进行开发，基本参考了今日头条和即刻的设计，目前已经完成主要功能。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/S1UDQ_8A.png?imageView2/2/w/480/h/480" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;备注：将会以付费软件的形式发布到 AppStore&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="Android"&gt;Android&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;尚未开始！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="部署"&gt;部署&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;项目其实通过 Docker + DaoCloud 实现了自动化部署，只要把代码推送到 GitHub，DaoCloud 将会自动构建并部署。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;DaoCloud&lt;/li&gt;
&lt;li&gt;七牛云存储&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="项目地址"&gt;项目地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-backend" rel="nofollow" target="_blank" title=""&gt;daza-backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-frontend" rel="nofollow" target="_blank" title=""&gt;daza-frontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-ios" rel="nofollow" target="_blank" title=""&gt;daza-ios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lijy91/daza-android" rel="nofollow" target="_blank" title=""&gt;daza-android&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="加入讨论"&gt;加入讨论&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你对这个项目有兴趣，想吐槽，想提建议，为项目提供服务，欢迎加以下讨论群。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/Hk5rLKc0.jpg?imageView2/2/w/320/h/320" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="关于我"&gt;关于我&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎同行交流或者有好工作机会的朋友加我微信。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/r1no_q9R.jpg?imageView2/2/w/300/h/300" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="支持一下"&gt;支持一下&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你觉得我的代码写得还不错对你有帮助，请扫下面二维码。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://obryq3mj0.bkt.clouddn.com/topic/ByRafuLR/r1WH8F90.jpg?imageView2/2/w/240/h/240" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>lijy91</author>
      <pubDate>Thu, 13 Oct 2016 17:13:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/31313</link>
      <guid>https://ruby-china.org/topics/31313</guid>
    </item>
    <item>
      <title>利用 Alfred 快速访问 Coding 项目</title>
      <description>&lt;p&gt;对于一个所有项目数已经 60+ 的重度 Coding 用户来说，每次需要找到一个项目时是非常痛苦的，这个问题在 2015 年中的时候已经反馈过张老板了，给出的解决方案也不尽理想。所以才有了这个插件的诞生~~~&lt;/p&gt;

&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/397332-169ce4a0cec0e7d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="功能展示"&gt;&lt;/p&gt;
&lt;h2 id="使用"&gt;使用&lt;/h2&gt;&lt;h3 id="依赖"&gt;依赖&lt;/h3&gt;
&lt;p&gt;本插件依赖 &lt;a href="https://nodejs.org/en/" rel="nofollow" target="_blank" title=""&gt;Node.js&lt;/a&gt; 以及 &lt;a href="https://www.alfredapp.com/" rel="nofollow" target="_blank" title=""&gt;Alfred 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. 你必需 &lt;a href="https://buy.alfredapp.com/" rel="nofollow" target="_blank" title=""&gt;购买 Powerpack&lt;/a&gt; 才能使用本插件&lt;/p&gt;
&lt;h3 id="安装"&gt;安装&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/lijy91/alfred-coding-workflow/blob/master/release/coding-latest.alfredworkflow?raw=true" rel="nofollow" target="_blank" title=""&gt;下载插件&lt;/a&gt; 到本地，并双击安装 &lt;/p&gt;
&lt;h3 id="配置"&gt;配置&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://acw.coding.io" rel="nofollow" target="_blank" title=""&gt;获取 Token&lt;/a&gt; 后按以下方法配置 Token&lt;/p&gt;
&lt;h4 id="方法1（推荐）"&gt;方法 1（推荐）&lt;/h4&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch&lt;/span&gt; .acw_config.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编辑 ~/.acw_config.json 文件，设置 Token&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;access_token&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="方法二"&gt;方法二&lt;/h4&gt;
&lt;p&gt;打开 Alfred 设置界面 -&amp;gt; 选择 Workflows -&amp;gt; 选择左侧 Coding.Net 项目 -&amp;gt; 双击 Script Filter（Coding 图标）&lt;/p&gt;

&lt;p&gt;编辑 Script 增加 &lt;code&gt;-t&lt;/code&gt; 参数&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usr/local/bin/node main.js &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"{query}"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;access_token&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="使用"&gt;使用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;option + space&lt;/code&gt; 启动 Alfred 2&lt;/li&gt;
&lt;li&gt;输入前缀 &lt;code&gt;c&lt;/code&gt; 再输入搜索关键字即可以&lt;/li&gt;
&lt;li&gt;输入 &lt;code&gt;c -c&lt;/code&gt; 即可以清空数据缓存&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="项目"&gt;项目&lt;/h2&gt;
&lt;p&gt;项目托管在 GitHub，欢迎大家来提意见
&lt;a href="https://github.com/lijy91/alfred-coding-workflow" rel="nofollow" target="_blank"&gt;https://github.com/lijy91/alfred-coding-workflow&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="作者"&gt;作者&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/lijy91" rel="nofollow" target="_blank" title=""&gt;lijy91&lt;/a&gt;
如果你喜欢这个插件，并且你还有码币，欢迎来 &lt;a href="https://coding.net/u/lijy91/bubble" rel="nofollow" target="_blank" title=""&gt;打赏&lt;/a&gt; 我&lt;/p&gt;</description>
      <author>lijy91</author>
      <pubDate>Fri, 22 Jan 2016 10:32:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/28818</link>
      <guid>https://ruby-china.org/topics/28818</guid>
    </item>
  </channel>
</rss>
